001 /** 002 * Copyright 2004-2012 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.time.principal.dao; 017 018 import java.util.ArrayList; 019 import java.util.Collection; 020 import java.util.Date; 021 import java.util.List; 022 023 import org.apache.commons.collections.CollectionUtils; 024 import org.apache.ojb.broker.query.Criteria; 025 import org.apache.ojb.broker.query.Query; 026 import org.apache.ojb.broker.query.QueryFactory; 027 import org.apache.ojb.broker.query.ReportQueryByCriteria; 028 import org.kuali.hr.time.principal.PrincipalHRAttributes; 029 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 030 031 public class PrincipalHRAttributesDaoImpl extends PlatformAwareDaoBaseOjb implements PrincipalHRAttributesDao { 032 033 @Override 034 public PrincipalHRAttributes getPrincipalCalendar(String principalId, 035 Date asOfDate) { 036 PrincipalHRAttributes pc = null; 037 038 Criteria root = new Criteria(); 039 Criteria effdt = new Criteria(); 040 Criteria timestamp = new Criteria(); 041 042 effdt.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 043 effdt.addLessOrEqualThan("effectiveDate", asOfDate); 044 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(PrincipalHRAttributes.class, effdt); 045 effdtSubQuery.setAttributes(new String[] { "max(effdt)" }); 046 047 timestamp.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 048 timestamp.addEqualToField("effectiveDate", Criteria.PARENT_QUERY_PREFIX + "effectiveDate"); 049 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(PrincipalHRAttributes.class, timestamp); 050 timestampSubQuery.setAttributes(new String[] { "max(timestamp)" }); 051 052 root.addEqualTo("principalId", principalId); 053 root.addEqualTo("effectiveDate", effdtSubQuery); 054 root.addEqualTo("timestamp", timestampSubQuery); 055 056 Criteria activeFilter = new Criteria(); // Inner Join For Activity 057 activeFilter.addEqualTo("active", true); 058 root.addAndCriteria(activeFilter); 059 060 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, root); 061 Object obj = this.getPersistenceBrokerTemplate().getObjectByQuery(query); 062 063 if (obj != null) { 064 pc = (PrincipalHRAttributes) obj; 065 } 066 067 return pc; 068 } 069 070 @Override 071 public void saveOrUpdate(PrincipalHRAttributes principalCalendar) { 072 this.getPersistenceBrokerTemplate().store(principalCalendar); 073 074 } 075 076 @Override 077 public void saveOrUpdate(List<PrincipalHRAttributes> lstPrincipalCalendar) { 078 if(lstPrincipalCalendar != null){ 079 for(PrincipalHRAttributes principalCal : lstPrincipalCalendar){ 080 this.getPersistenceBrokerTemplate().store(principalCal); 081 } 082 } 083 084 } 085 086 087 // @Override 088 // public PrincipalHRAttributes getPrincipalHRAttributes(String principalId) { 089 // Criteria crit = new Criteria(); 090 // crit.addEqualTo("principalId", principalId); 091 // Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, crit); 092 // return (PrincipalHRAttributes)this.getPersistenceBrokerTemplate().getObjectByQuery(query); 093 // } 094 095 @Override 096 public PrincipalHRAttributes getInactivePrincipalHRAttributes(String principalId, Date asOfDate) { 097 PrincipalHRAttributes pc = null; 098 099 Criteria root = new Criteria(); 100 Criteria effdt = new Criteria(); 101 Criteria timestamp = new Criteria(); 102 103 effdt.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 104 effdt.addGreaterOrEqualThan("effectiveDate", asOfDate); 105 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(PrincipalHRAttributes.class, effdt); 106 effdtSubQuery.setAttributes(new String[] { "max(effdt)" }); 107 108 timestamp.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 109 timestamp.addEqualToField("effectiveDate", Criteria.PARENT_QUERY_PREFIX + "effectiveDate"); 110 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(PrincipalHRAttributes.class, timestamp); 111 timestampSubQuery.setAttributes(new String[] { "max(timestamp)" }); 112 113 root.addEqualTo("principalId", principalId); 114 root.addEqualTo("effectiveDate", effdtSubQuery); 115 root.addEqualTo("timestamp", timestampSubQuery); 116 117 Criteria activeFilter = new Criteria(); // Inner Join For Activity 118 activeFilter.addEqualTo("active", false); 119 root.addAndCriteria(activeFilter); 120 121 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, root); 122 Object obj = this.getPersistenceBrokerTemplate().getObjectByQuery(query); 123 124 if (obj != null) { 125 pc = (PrincipalHRAttributes) obj; 126 } 127 128 return pc; 129 } 130 131 @Override 132 public PrincipalHRAttributes getPrincipalHRAttributes(String hrPrincipalAttributeId) { 133 Criteria crit = new Criteria(); 134 crit.addEqualTo("hrPrincipalAttributeId", hrPrincipalAttributeId); 135 136 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, crit); 137 return (PrincipalHRAttributes)this.getPersistenceBrokerTemplate().getObjectByQuery(query); 138 } 139 140 @Override 141 public List<PrincipalHRAttributes> getAllActivePrincipalHrAttributesForPrincipalId(String principalId, Date asOfDate) { 142 143 List<PrincipalHRAttributes> phaList = new ArrayList<PrincipalHRAttributes>(); 144 Criteria root = new Criteria(); 145 root.addEqualTo("principalId", principalId); 146 root.addLessOrEqualThan("effectiveDate", asOfDate); 147 root.addEqualTo("active", true); 148 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, root); 149 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 150 if (c != null) { 151 phaList.addAll(c); 152 } 153 return phaList; 154 } 155 156 @Override 157 public List<PrincipalHRAttributes> getAllInActivePrincipalHrAttributesForPrincipalId(String principalId, Date asOfDate) { 158 List<PrincipalHRAttributes> phaList = new ArrayList<PrincipalHRAttributes>(); 159 Criteria root = new Criteria(); 160 root.addEqualTo("principalId", principalId); 161 root.addLessOrEqualThan("effectiveDate", asOfDate); 162 root.addEqualTo("active", false); 163 164 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, root); 165 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 166 if (c != null) { 167 phaList.addAll(c); 168 } 169 return phaList; 170 } 171 @Override 172 public PrincipalHRAttributes getMaxTimeStampPrincipalHRAttributes(String principalId) { 173 Criteria root = new Criteria(); 174 Criteria crit = new Criteria(); 175 176 crit.addEqualTo("principalId", principalId); 177 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(PrincipalHRAttributes.class, crit); 178 timestampSubQuery.setAttributes(new String[]{"max(timestamp)"}); 179 180 root.addEqualTo("principalId", principalId); 181 root.addEqualTo("timestamp", timestampSubQuery); 182 183 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, root); 184 return (PrincipalHRAttributes) this.getPersistenceBrokerTemplate().getObjectByQuery(query); 185 } 186 187 @Override 188 public List<PrincipalHRAttributes> getActivePrincipalHrAttributesForRange(String principalId, Date startDate, Date endDate) { 189 List<PrincipalHRAttributes> activeList = new ArrayList<PrincipalHRAttributes>(); 190 Criteria root = new Criteria(); 191 root.addEqualTo("principalId", principalId); 192 root.addGreaterOrEqualThan("effectiveDate", startDate); 193 root.addLessOrEqualThan("effectiveDate", endDate); 194 root.addEqualTo("active", true); 195 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, root); 196 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 197 if (c != null) { 198 activeList.addAll(c); 199 } 200 List<PrincipalHRAttributes> aList = new ArrayList<PrincipalHRAttributes>(); 201 aList.addAll(activeList); 202 for(PrincipalHRAttributes aPha : aList) { 203 List<PrincipalHRAttributes> inactivePhas = this.getInactivePrincipalHRAttributesForRange(principalId, aPha.getEffectiveDate(), endDate); 204 if(CollectionUtils.isNotEmpty(inactivePhas)) { 205 for(PrincipalHRAttributes inactive : inactivePhas) { 206 if(inactive.getTimestamp().after(aPha.getTimestamp())) { 207 activeList.remove(aPha); 208 } 209 } 210 } 211 } 212 213 return activeList; 214 } 215 216 @Override 217 public List<PrincipalHRAttributes> getInactivePrincipalHRAttributesForRange(String principalId, Date startDate, Date endDate) { 218 List<PrincipalHRAttributes> inactiveList = new ArrayList<PrincipalHRAttributes>(); 219 Criteria root = new Criteria(); 220 root.addEqualTo("principalId", principalId); 221 root.addGreaterOrEqualThan("effectiveDate", startDate); 222 root.addLessOrEqualThan("effectiveDate", endDate); 223 root.addEqualTo("active", false); 224 Query query = QueryFactory.newQuery(PrincipalHRAttributes.class, root); 225 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 226 if (c != null) { 227 inactiveList.addAll(c); 228 } 229 return inactiveList; 230 } 231 }