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.time.accrual.dao; 017 018 import java.sql.Date; 019 import java.util.ArrayList; 020 import java.util.Collection; 021 import java.util.LinkedList; 022 import java.util.List; 023 024 import org.apache.commons.lang.StringUtils; 025 import org.apache.log4j.Logger; 026 import org.apache.ojb.broker.query.Criteria; 027 import org.apache.ojb.broker.query.Query; 028 import org.apache.ojb.broker.query.QueryFactory; 029 import org.apache.ojb.broker.query.ReportQueryByCriteria; 030 import org.kuali.hr.time.accrual.TimeOffAccrual; 031 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 032 033 public class TimeOffAccrualDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements TimeOffAccrualDao { 034 035 @SuppressWarnings("unused") 036 private static final Logger LOG = Logger.getLogger(TimeOffAccrualDaoSpringOjbImpl.class); 037 038 public void saveOrUpdate(TimeOffAccrual timeOffAccrual) { 039 this.getPersistenceBrokerTemplate().store(timeOffAccrual); 040 } 041 042 public void saveOrUpdate(List<TimeOffAccrual> timeOffAccrualList) { 043 if (timeOffAccrualList != null) { 044 for (TimeOffAccrual timeOffAccrual : timeOffAccrualList) { 045 this.getPersistenceBrokerTemplate().store(timeOffAccrual); 046 } 047 } 048 } 049 050 public List<TimeOffAccrual> getTimeOffAccruals (String principalId) { 051 052 List<TimeOffAccrual> timeOffAccruals = new LinkedList<TimeOffAccrual>(); 053 054 Criteria root = new Criteria(); 055 Criteria effdt = new Criteria(); 056 057 // OJB's awesome sub query setup part 1 058 effdt.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 059 effdt.addEqualToField("accrualCategory", Criteria.PARENT_QUERY_PREFIX + "accrualCategory"); 060 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(TimeOffAccrual.class, effdt); 061 effdtSubQuery.setAttributes(new String[] { "max(effdt)" }); 062 063 root.addEqualTo("principalId", principalId); 064 root.addEqualTo("effectiveDate", effdtSubQuery); 065 066 Query query = QueryFactory.newQuery(TimeOffAccrual.class, root); 067 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 068 069 if (c != null) { 070 timeOffAccruals.addAll(c); 071 } 072 073 return timeOffAccruals; 074 } 075 076 @Override 077 public TimeOffAccrual getTimeOffAccrual(Long laTimeOffAccrualId) { 078 Criteria crit = new Criteria(); 079 crit.addEqualTo("lmAccrualId", laTimeOffAccrualId); 080 081 Query query = QueryFactory.newQuery(TimeOffAccrual.class, crit); 082 return (TimeOffAccrual)this.getPersistenceBrokerTemplate().getObjectByQuery(query); 083 084 } 085 086 // KPME-1011 087 public List<TimeOffAccrual> getActiveTimeOffAccruals (String principalId, Date asOfDate) { 088 List<TimeOffAccrual> timeOffAccruals = new LinkedList<TimeOffAccrual>(); 089 090 Criteria root = new Criteria(); 091 Criteria effdt = new Criteria(); 092 093 // OJB's awesome sub query setup part 1 094 effdt.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 095 effdt.addEqualToField("accrualCategory", Criteria.PARENT_QUERY_PREFIX + "accrualCategory"); 096 effdt.addLessOrEqualThan("effectiveDate", asOfDate); 097 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(TimeOffAccrual.class, effdt); 098 effdtSubQuery.setAttributes(new String[] { "max(effdt)" }); 099 100 root.addEqualTo("principalId", principalId); 101 root.addEqualTo("effectiveDate", effdtSubQuery); 102 103 Query query = QueryFactory.newQuery(TimeOffAccrual.class, root); 104 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 105 106 if (c != null) { 107 timeOffAccruals.addAll(c); 108 } 109 110 return timeOffAccruals; 111 } 112 113 @Override 114 public int getTimeOffAccrualCount(String accrualCategory, Date effectiveDate, String principalId, String lmAccrualId) { 115 Criteria crit = new Criteria(); 116 crit.addEqualTo("accrualCategory", accrualCategory); 117 crit.addEqualTo("effectiveDate", effectiveDate); 118 crit.addEqualTo("principalId", principalId); 119 if(lmAccrualId != null) { 120 crit.addEqualTo("lmAccrualId", lmAccrualId); 121 } 122 Query query = QueryFactory.newQuery(TimeOffAccrual.class, crit); 123 return this.getPersistenceBrokerTemplate().getCount(query); 124 } 125 126 @Override 127 public List<TimeOffAccrual> getTimeOffAccruals(String principalId, String accrualCategory) { 128 Criteria crit = new Criteria(); 129 130 List<TimeOffAccrual> results = new ArrayList<TimeOffAccrual>(); 131 132 if(StringUtils.isNotBlank(principalId) && StringUtils.isNotEmpty(principalId)){ 133 crit.addLike("principalId", principalId); 134 } 135 if(StringUtils.isNotBlank(accrualCategory)){ 136 crit.addLike("accrualCategory", accrualCategory); 137 } 138 139 Query query = QueryFactory.newQuery(TimeOffAccrual.class, crit); 140 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 141 results.addAll(c); 142 143 return results; 144 } 145 }