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 }