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.module.endow.dataaccess.impl;
017
018 import java.util.ArrayList;
019 import java.util.Iterator;
020 import java.util.List;
021
022 import org.apache.ojb.broker.query.Criteria;
023 import org.apache.ojb.broker.query.QueryByCriteria;
024 import org.apache.ojb.broker.query.QueryFactory;
025 import org.apache.ojb.broker.query.ReportQueryByCriteria;
026 import org.kuali.kfs.coa.businessobject.Organization;
027 import org.kuali.kfs.module.endow.EndowPropertyConstants;
028 import org.kuali.kfs.module.endow.businessobject.KemidBenefittingOrganization;
029 import org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao;
030 import org.kuali.kfs.module.endow.report.util.KemidsWithMultipleBenefittingOrganizationsDataHolder;
031 import org.kuali.kfs.sys.KFSConstants;
032 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
033 import org.kuali.rice.kns.util.ObjectUtils;
034
035 public class KemidBenefittingOrganizationDaoOjb extends PlatformAwareDaoBaseOjb implements KemidBenefittingOrganizationDao {
036
037 /**
038 *
039 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getKemidsByAttribute(java.lang.String, java.util.List)
040 */
041 public List<String> getKemidsByAttribute(String attributeName, List<String> values) {
042
043 Criteria criteria1 = new Criteria();
044 Criteria criteria2 = new Criteria();
045 criteria1.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true);
046 for (String value : values) {
047 Criteria c = new Criteria();
048 if (value.contains(KFSConstants.WILDCARD_CHARACTER)) {
049 c.addLike(attributeName, value.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
050 } else {
051 c.addEqualTo(attributeName, value.trim());
052 }
053 criteria2.addOrCriteria(c);
054 }
055 criteria1.addAndCriteria(criteria2);
056 ReportQueryByCriteria query = new ReportQueryByCriteria(KemidBenefittingOrganization.class, criteria1, true);
057 query.setAttributes(new String[] {EndowPropertyConstants.KEMID});
058
059 Iterator<Object> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
060
061 // get kemids
062 List<String> kemids = new ArrayList<String>();
063 while (result.hasNext()) {
064 Object[] data = (Object[]) result.next();
065 kemids.add(data[0].toString());
066 }
067
068 return kemids;
069 }
070
071 /**
072 *
073 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getAttributeValues(java.lang.String, java.util.List)
074 */
075 public List<String> getAttributeValues(String attributeName, List<String> values) {
076
077 Criteria criteria1 = new Criteria();
078 Criteria criteria2 = new Criteria();
079 criteria1.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true);
080 for (String value : values) {
081 Criteria c = new Criteria();
082 if (value.contains(KFSConstants.WILDCARD_CHARACTER)) {
083 c.addLike(attributeName, value.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
084 } else {
085 c.addEqualTo(attributeName, value.trim());
086 }
087 criteria2.addOrCriteria(c);
088 }
089 criteria1.addAndCriteria(criteria2);
090 ReportQueryByCriteria query = new ReportQueryByCriteria(KemidBenefittingOrganization.class, criteria1, true);
091 query.setAttributes(new String[] {attributeName});
092
093 Iterator<Object> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
094
095 List<String> attributeValues = new ArrayList<String>();
096 while (result.hasNext()) {
097 Object[] data = (Object[]) result.next();
098 attributeValues.add(data[0].toString());
099 }
100
101 return attributeValues;
102 }
103
104 /**
105 *
106 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getKemidsWithMultipleBenefittingOrganizations(java.util.List)
107 */
108 public List<KemidsWithMultipleBenefittingOrganizationsDataHolder> getKemidsWithMultipleBenefittingOrganizations(List<String> kemids) {
109
110 if (kemids == null || kemids.isEmpty()) {
111 return null;
112 }
113
114 List<KemidsWithMultipleBenefittingOrganizationsDataHolder> kmbodhs = new ArrayList<KemidsWithMultipleBenefittingOrganizationsDataHolder>();
115
116 // get the kemids that are more than one
117 List<String> kemidsInMultipl = getIdsForMultipleBenefittingOrganizations(kemids);
118
119 if (kemidsInMultipl != null && !kemidsInMultipl.isEmpty()) {
120 // get the benefitting organizations and populate the data holder
121 List<KemidBenefittingOrganization> kemidBenefittingOrganizationList = getBenefittingOrganizations(kemidsInMultipl);
122 for (KemidBenefittingOrganization kemidBenefittingOrganization : kemidBenefittingOrganizationList) {
123 KemidsWithMultipleBenefittingOrganizationsDataHolder kmbo = new KemidsWithMultipleBenefittingOrganizationsDataHolder();
124 kmbo.setKemid(kemidBenefittingOrganization.getKemid());
125 kmbo.setCampus(getCampusCode(kemidBenefittingOrganization.getBenefittingChartCode(), kemidBenefittingOrganization.getBenefittingOrgCode()));
126 kmbo.setChart(kemidBenefittingOrganization.getBenefittingChartCode());
127 kmbo.setOrganization(kemidBenefittingOrganization.getBenefittingOrgCode());
128 kmbo.setPercent(kemidBenefittingOrganization.getBenefitPrecent());
129 kmbodhs.add(kmbo);
130 }
131 }
132
133 return kmbodhs;
134 }
135
136 /**
137 *
138 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getBenefittingOrganizations(java.util.List)
139 */
140 public List<KemidBenefittingOrganization> getBenefittingOrganizations(List<String> kemids) {
141
142 Criteria criteria1 = new Criteria();
143 Criteria criteria2 = new Criteria();
144 criteria1.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true);
145 for (String kemid : kemids) {
146 Criteria c = new Criteria();
147 c.addEqualTo(EndowPropertyConstants.KEMID, kemid.trim());
148 criteria2.addOrCriteria(c);
149 }
150 criteria1.addAndCriteria(criteria2);
151 QueryByCriteria queryByCriteria = QueryFactory.newQuery(KemidBenefittingOrganization.class, criteria1);
152 queryByCriteria.addOrderByAscending(EndowPropertyConstants.KEMID);
153
154 return (List<KemidBenefittingOrganization>) getPersistenceBrokerTemplate().getCollectionByQuery(queryByCriteria);
155 }
156
157 /**
158 *
159 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getIdsForMultipleBenefittingOrganizations(java.util.List)
160 */
161 public List<String> getIdsForMultipleBenefittingOrganizations(List<String> kemids) {
162
163 Criteria subCrit = new Criteria();
164 subCrit.addIn(EndowPropertyConstants.KEMID, kemids);
165 ReportQueryByCriteria reportQueryByCriteria = QueryFactory.newReportQuery(KemidBenefittingOrganization.class, subCrit);
166 reportQueryByCriteria.setAttributes(new String[] {EndowPropertyConstants.KEMID});
167 reportQueryByCriteria.addGroupBy(EndowPropertyConstants.KEMID);
168 Criteria havingCriteria = new Criteria();
169 havingCriteria.addGreaterThan("count(" + EndowPropertyConstants.KEMID + ")", new Integer(1));
170 reportQueryByCriteria.setHavingCriteria(havingCriteria);
171 reportQueryByCriteria.addOrderByAscending(EndowPropertyConstants.KEMID);
172
173 Iterator<?> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(reportQueryByCriteria);
174 List<String> kemidsMultiple = new ArrayList<String>();
175 while (result.hasNext()) {
176 Object[] data = (Object[]) result.next();
177 kemidsMultiple.add(data[0].toString());
178 }
179 return kemidsMultiple;
180 }
181
182 /**
183 *
184 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getKemidsByCampusCode(java.util.List)
185 */
186 public List<String> getKemidsByCampusCode(List<String> campusCodes) {
187
188 // get organizations with campuseCodes
189 String attributeName = EndowPropertyConstants.CA_ORG_CAMPUS_CD;
190
191 Criteria criteria1 = new Criteria();
192 for (String campusCode : campusCodes) {
193 Criteria c = new Criteria();
194 if (campusCode.contains(KFSConstants.WILDCARD_CHARACTER)) {
195 c.addLike(attributeName, campusCode.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
196 } else {
197 c.addEqualTo(attributeName, campusCode.trim());
198 }
199 criteria1.addOrCriteria(c);
200 }
201 ReportQueryByCriteria reportQueryByCriteria = new ReportQueryByCriteria(Organization.class, criteria1, true);
202 reportQueryByCriteria.setAttributes(new String[] {EndowPropertyConstants.CA_ORG_CHRT_CD, EndowPropertyConstants.CA_ORG_CD});
203 Iterator<Object> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(reportQueryByCriteria);
204
205 // get the matching benefitting organization kemids
206 Criteria criteria2 = new Criteria();
207 Criteria subCriteria = new Criteria();
208 criteria2.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true);
209 while (result.hasNext()) {
210 Criteria c = new Criteria();
211 Object[] data = (Object[]) result.next();
212 String chartCode = data[0].toString();
213 String organziationCode = data[1].toString();
214 c.addEqualTo(EndowPropertyConstants.KEMID_BENE_CHRT_CD, chartCode);
215 c.addEqualTo(EndowPropertyConstants.KEMID_BENE_ORG_CD, organziationCode);
216 subCriteria.addOrCriteria(c);
217 }
218 criteria2.addAndCriteria(subCriteria);
219
220 ReportQueryByCriteria query = new ReportQueryByCriteria(KemidBenefittingOrganization.class, criteria2, true);
221 query.setAttributes(new String[] {EndowPropertyConstants.KEMID});
222
223 Iterator<Object> result2 = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
224 List<String> kemids = new ArrayList<String>();
225 while (result2.hasNext()) {
226 Object[] data = (Object[]) result2.next();
227 kemids.add(data[0].toString());
228 }
229
230 return kemids;
231 }
232
233 /**
234 *
235 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getCampusCodes(java.lang.String, java.util.List)
236 */
237 public List<String> getCampusCodes(String attributeName, List<String> values) {
238
239 Criteria criteria1 = new Criteria();
240 Criteria criteria2 = new Criteria();
241 criteria1.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true);
242 for (String value : values) {
243 Criteria c = new Criteria();
244 if (value.contains(KFSConstants.WILDCARD_CHARACTER)) {
245 c.addLike(attributeName, value.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
246 } else {
247 c.addEqualTo(attributeName, value.trim());
248 }
249 criteria2.addOrCriteria(c);
250 }
251 criteria1.addAndCriteria(criteria2);
252 ReportQueryByCriteria query = new ReportQueryByCriteria(Organization.class, criteria1, true);
253 query.setAttributes(new String[] {attributeName});
254
255 Iterator<Object> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
256
257 List<String> attributeValues = new ArrayList<String>();
258 while (result.hasNext()) {
259 Object[] data = (Object[]) result.next();
260 attributeValues.add(data[0].toString());
261 }
262
263 return attributeValues;
264 }
265
266 /**
267 *
268 * @see org.kuali.kfs.module.endow.dataaccess.KemidBenefittingOrganizationDao#getCampusCode(java.lang.String, java.lang.String)
269 */
270 public String getCampusCode(String charCode, String organziationCode) {
271
272 Criteria criteria = new Criteria();
273 criteria.addEqualTo(EndowPropertyConstants.CA_ORG_CHRT_CD, charCode);
274 criteria.addEqualTo(EndowPropertyConstants.CA_ORG_CD, organziationCode);
275
276 QueryByCriteria qbc = QueryFactory.newQuery(Organization.class, criteria);
277
278 Organization organization = (Organization) getPersistenceBrokerTemplate().getObjectByQuery(qbc);
279
280 String campusCode = "";
281 if (ObjectUtils.isNotNull(organization)) {
282 campusCode = organization.getOrganizationPhysicalCampusCode();
283 }
284 return campusCode;
285 }
286 }