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 }