001 /** 002 * Copyright 2004-2013 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.hr.lm.earncodesec.dao; 017 018 import java.util.ArrayList; 019 import java.util.Collection; 020 import java.util.Date; 021 import java.util.HashSet; 022 import java.util.LinkedList; 023 import java.util.List; 024 import java.util.Set; 025 026 import com.google.common.collect.ImmutableList; 027 import org.apache.commons.lang.StringUtils; 028 import org.apache.log4j.Logger; 029 import org.apache.ojb.broker.query.Criteria; 030 import org.apache.ojb.broker.query.Query; 031 import org.apache.ojb.broker.query.QueryFactory; 032 import org.apache.ojb.broker.query.ReportQueryByCriteria; 033 import org.kuali.hr.core.util.OjbSubQueryUtil; 034 import org.kuali.hr.lm.earncodesec.EarnCodeSecurity; 035 import org.kuali.hr.time.util.TKUtils; 036 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 037 038 public class EarnCodeSecurityDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements EarnCodeSecurityDao { 039 private static final ImmutableList<String> EQUAL_TO_FIELDS = new ImmutableList.Builder<String>() 040 .add("dept") 041 .add("hrSalGroup") 042 .add("earnCode") 043 .add("location") 044 .build(); 045 046 @SuppressWarnings("unused") 047 private static final Logger LOG = Logger.getLogger(EarnCodeSecurityDaoSpringOjbImpl.class); 048 049 public void saveOrUpdate(EarnCodeSecurity earnCodeSec) { 050 this.getPersistenceBrokerTemplate().store(earnCodeSec); 051 } 052 053 public void saveOrUpdate(List<EarnCodeSecurity> ernCdSecList) { 054 if (ernCdSecList != null) { 055 for (EarnCodeSecurity ernCdSec : ernCdSecList) { 056 this.getPersistenceBrokerTemplate().store(ernCdSec); 057 } 058 } 059 } 060 061 @SuppressWarnings({ "unchecked", "deprecation" }) 062 @Override 063 public List<EarnCodeSecurity> getEarnCodeSecurities(String department, String hrSalGroup, String location, Date asOfDate) { 064 List<EarnCodeSecurity> decs = new LinkedList<EarnCodeSecurity>(); 065 066 Criteria root = new Criteria(); 067 068 Criteria deptCrit = new Criteria(); 069 Criteria salGroupCrit = new Criteria(); 070 Criteria locationCrit = new Criteria(); 071 072 deptCrit.addEqualTo("dept", "%"); 073 salGroupCrit.addEqualTo("hrSalGroup", "%"); 074 locationCrit.addEqualTo("location", "%"); 075 076 Criteria deptCrit2 = new Criteria(); 077 deptCrit2.addEqualTo("dept", department); 078 deptCrit2.addOrCriteria(deptCrit); 079 root.addAndCriteria(deptCrit2); 080 081 Criteria salGroupCrit2 = new Criteria(); 082 salGroupCrit2.addEqualTo("hrSalGroup", hrSalGroup); 083 salGroupCrit2.addOrCriteria(salGroupCrit); 084 root.addAndCriteria(salGroupCrit2); 085 086 Criteria locationCrit2 = new Criteria(); 087 if ( !location.trim().isEmpty() ){ 088 locationCrit2.addEqualTo("location", location); 089 locationCrit2.addOrCriteria(locationCrit); 090 root.addAndCriteria(locationCrit2); 091 } 092 093 Criteria activeFilter = new Criteria(); // Inner Join For Activity 094 activeFilter.addEqualTo("active", true); 095 root.addAndCriteria(activeFilter); 096 ImmutableList.Builder<String> fields = new ImmutableList.Builder<String>() 097 .add("dept") 098 .add("hrSalGroup") 099 .add("earnCode"); 100 if ( !location.trim().isEmpty() ){ 101 fields.add("location"); 102 } 103 java.sql.Date effDate = null; 104 if (asOfDate != null) { 105 effDate = new java.sql.Date(asOfDate.getTime()); 106 } 107 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(EarnCodeSecurity.class, effDate, fields.build(), false)); 108 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EarnCodeSecurity.class, fields.build(), false)); 109 110 root.addOrderBy("earnCode", true); 111 root.addOrderBy("dept",false); 112 root.addOrderBy("hrSalGroup",false); 113 114 115 Query query = QueryFactory.newQuery(EarnCodeSecurity.class, root); 116 117 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 118 119 if (c != null) { 120 decs.addAll(c); 121 } 122 123 //Now we can have duplicates so remove any that match more than once 124 Set<String> aSet = new HashSet<String>(); 125 List<EarnCodeSecurity> aList = new ArrayList<EarnCodeSecurity>(); 126 for(EarnCodeSecurity dec : decs){ 127 if(!aSet.contains(dec.getEarnCode())){ 128 aList.add(dec); 129 aSet.add(dec.getEarnCode()); 130 } 131 } 132 return aList; 133 } 134 135 @Override 136 public EarnCodeSecurity getEarnCodeSecurity(String hrEarnCodeSecId) { 137 Criteria crit = new Criteria(); 138 crit.addEqualTo("hrEarnCodeSecurityId", hrEarnCodeSecId); 139 140 Query query = QueryFactory.newQuery(EarnCodeSecurity.class, crit); 141 return (EarnCodeSecurity)this.getPersistenceBrokerTemplate().getObjectByQuery(query); 142 } 143 144 @Override 145 @SuppressWarnings("unchecked") 146 public List<EarnCodeSecurity> searchEarnCodeSecurities(String dept, String salGroup, String earnCode, String location, Date fromEffdt, Date toEffdt, 147 String active, String showHistory) { 148 149 List<EarnCodeSecurity> results = new ArrayList<EarnCodeSecurity>(); 150 151 Criteria root = new Criteria(); 152 153 if (StringUtils.isNotBlank(dept)) { 154 root.addLike("dept", dept); 155 } 156 157 if (StringUtils.isNotBlank(salGroup)) { 158 root.addLike("hrSalGroup", salGroup); 159 } 160 161 if (StringUtils.isNotBlank(earnCode)) { 162 root.addLike("earnCode", earnCode); 163 } 164 165 if (StringUtils.isNotBlank(location)) { 166 root.addLike("location", location); 167 } 168 169 Criteria effectiveDateFilter = new Criteria(); 170 if (fromEffdt != null) { 171 effectiveDateFilter.addGreaterOrEqualThan("effectiveDate", fromEffdt); 172 } 173 174 if (toEffdt != null) { 175 effectiveDateFilter.addLessOrEqualThan("effectiveDate", toEffdt); 176 } 177 if (fromEffdt == null && toEffdt == null) { 178 effectiveDateFilter.addLessOrEqualThan("effectiveDate", TKUtils.getCurrentDate()); 179 } 180 root.addAndCriteria(effectiveDateFilter); 181 182 if (StringUtils.isNotBlank(active)) { 183 Criteria activeFilter = new Criteria(); 184 if (StringUtils.equals(active, "Y")) { 185 activeFilter.addEqualTo("active", true); 186 } else if (StringUtils.equals(active, "N")) { 187 activeFilter.addEqualTo("active", false); 188 } 189 root.addAndCriteria(activeFilter); 190 } 191 192 if (StringUtils.equals(showHistory, "N")) { 193 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQueryWithFilter(EarnCodeSecurity.class, effectiveDateFilter, EQUAL_TO_FIELDS, false)); 194 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EarnCodeSecurity.class, EQUAL_TO_FIELDS, false)); 195 } 196 197 Query query = QueryFactory.newQuery(EarnCodeSecurity.class, root); 198 results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query)); 199 200 return results; 201 } 202 203 @Override 204 public int getEarnCodeSecurityCount(String dept, String salGroup, String earnCode, String employee, String approver, String location, 205 String active, java.sql.Date effdt,String hrDeptEarnCodeId) { 206 Criteria crit = new Criteria(); 207 crit.addEqualTo("dept", dept); 208 crit.addEqualTo("hrSalGroup", salGroup); 209 crit.addEqualTo("earnCode", earnCode); 210 crit.addEqualTo("employee", employee); 211 crit.addEqualTo("approver", approver); 212 crit.addEqualTo("location", location); 213 crit.addEqualTo("active", active); 214 crit.addEqualTo("effectiveDate", effdt); 215 if(hrDeptEarnCodeId != null) { 216 crit.addEqualTo("hrEarnCodeSecurityId", hrDeptEarnCodeId); 217 } 218 Query query = QueryFactory.newQuery(EarnCodeSecurity.class, crit); 219 return this.getPersistenceBrokerTemplate().getCount(query); 220 } 221 @Override 222 public int getNewerEarnCodeSecurityCount(String earnCode, Date effdt) { 223 Criteria crit = new Criteria(); 224 crit.addEqualTo("earnCode", earnCode); 225 crit.addEqualTo("active", "Y"); 226 crit.addGreaterThan("effectiveDate", effdt); 227 Query query = QueryFactory.newQuery(EarnCodeSecurity.class, crit); 228 return this.getPersistenceBrokerTemplate().getCount(query); 229 } 230 }