001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.coa.dataaccess.impl;
017    
018    import java.util.ArrayList;
019    import java.util.Collection;
020    import java.util.Collections;
021    import java.util.Iterator;
022    import java.util.List;
023    
024    import org.apache.ojb.broker.query.Criteria;
025    import org.apache.ojb.broker.query.QueryFactory;
026    import org.apache.ojb.broker.query.ReportQueryByCriteria;
027    import org.kuali.kfs.coa.businessobject.Account;
028    import org.kuali.kfs.coa.businessobject.Organization;
029    import org.kuali.kfs.coa.dataaccess.OrganizationDao;
030    import org.kuali.kfs.sys.KFSConstants;
031    import org.kuali.kfs.sys.KFSPropertyConstants;
032    import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
033    import org.kuali.rice.kns.util.TransactionalServiceUtils;
034    
035    /**
036     * This class is the OJB implementation of the OrganizationDao interface.
037     */
038    public class OrganizationDaoOjb extends PlatformAwareDaoBaseOjb implements OrganizationDao {
039        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OrganizationDaoOjb.class);
040    
041        /**
042         * @see org.kuali.kfs.coa.dataaccess.OrganizationDao#getByPrimaryId(java.lang.String, java.lang.String)
043         */
044        public Organization getByPrimaryId(String chartOfAccountsCode, String organizationCode) {
045            Criteria criteria = new Criteria();
046            criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode);
047            criteria.addEqualTo("organizationCode", organizationCode);
048    
049            return (Organization) getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(Organization.class, criteria));
050        }
051    
052        /**
053         * @see org.kuali.kfs.coa.dataaccess.OrganizationDao#save(org.kuali.kfs.coa.businessobject.Org)
054         */
055        public void save(Organization organization) {
056            getPersistenceBrokerTemplate().store(organization);
057        }
058    
059        /**
060         * @see org.kuali.kfs.coa.dataaccess.OrganizationDao#getActiveAccountsByOrg(java.lang.String, java.lang.String)
061         */
062        public List getActiveAccountsByOrg(String chartOfAccountsCode, String organizationCode) {
063    
064            List accounts = new ArrayList();
065    
066            Criteria criteria = new Criteria();
067            criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode);
068            criteria.addEqualTo("organizationCode", organizationCode);
069            criteria.addEqualTo("active", Boolean.FALSE);
070    
071            accounts = (List) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(Account.class, criteria));
072    
073            if (accounts.isEmpty() || accounts.size() == 0) {
074                return Collections.EMPTY_LIST;
075            }
076            return accounts;
077        }
078    
079        /**
080         * @see org.kuali.kfs.coa.dataaccess.OrganizationDao#getActiveChildOrgs(java.lang.String, java.lang.String)
081         */
082        public List getActiveChildOrgs(String chartOfAccountsCode, String organizationCode) {
083    
084            List orgs = new ArrayList();
085    
086            Criteria criteria = new Criteria();
087            criteria.addEqualTo("reportsToChartOfAccountsCode", chartOfAccountsCode);
088            criteria.addEqualTo("reportsToOrganizationCode", organizationCode);
089            criteria.addEqualTo("active", Boolean.TRUE);
090    
091            orgs = (List) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(Organization.class, criteria));
092    
093            if (orgs.isEmpty() || orgs.size() == 0) {
094                return Collections.EMPTY_LIST;
095            }
096            return orgs;
097        }
098    
099        /**
100         * @see org.kuali.kfs.coa.dataaccess.OrganizationDao#getActiveOrgsByType(java.lang.String)
101         */
102        public List<Organization> getActiveOrgsByType(String organizationTypeCode) {
103            List<Organization> orgs = new ArrayList<Organization>();
104    
105            Criteria criteria = new Criteria();
106            criteria.addEqualTo("organizationTypeCode", organizationTypeCode);
107            criteria.addEqualTo("active", Boolean.TRUE);
108    
109            orgs = (List<Organization>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(Organization.class, criteria));
110    
111            if (orgs.isEmpty() || orgs.size() == 0) {
112                return Collections.EMPTY_LIST;
113            }
114            return orgs;
115        }
116    
117        /**
118         * we insist that the root organization be active
119         * 
120         * @see org.kuali.kfs.coa.dataaccess.OrganizationDao#getRootOrganizationCode(java.lang.String, java.lang.String)
121         */
122        public String[] getRootOrganizationCode(String rootChart, String selfReportsOrgTypeCode) {
123            String[] returnValues = { null, null };
124            
125            Criteria criteria = new Criteria();
126            criteria.addEqualTo(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, rootChart);
127            criteria.addEqualTo(KFSPropertyConstants.ORGANIZATION_TYPE_CODE, selfReportsOrgTypeCode);
128            criteria.addEqualTo(KFSPropertyConstants.ORGANIZATION_ACTIVE_INDICATOR, KFSConstants.ACTIVE_INDICATOR);
129            
130            Collection results = getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(Organization.class, criteria));
131            if (results != null && !results.isEmpty()) {
132                Organization org = (Organization) results.iterator().next();
133                returnValues[0] = org.getChartOfAccountsCode();
134                returnValues[1] = org.getOrganizationCode();       
135            }
136            
137    //        Iterator Results = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(rptQuery);
138    //        if (Results.hasNext()) {
139    //            Object[] returnList = (Object[]) TransactionalServiceUtils.retrieveFirstAndExhaustIterator(Results);
140    //            returnValues[0] = (String) returnList[0];
141    //            returnValues[1] = (String) returnList[1];
142    //        }
143            return returnValues;
144        }
145    
146    }