View Javadoc

1   /**
2    * Copyright 2004-2013 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.hr.time.accrual.dao;
17  
18  import java.sql.Date;
19  import java.util.ArrayList;
20  import java.util.Collection;
21  import java.util.LinkedList;
22  import java.util.List;
23  
24  import org.apache.commons.lang.StringUtils;
25  import org.apache.log4j.Logger;
26  import org.apache.ojb.broker.query.Criteria;
27  import org.apache.ojb.broker.query.Query;
28  import org.apache.ojb.broker.query.QueryFactory;
29  import org.apache.ojb.broker.query.ReportQueryByCriteria;
30  import org.kuali.hr.time.accrual.TimeOffAccrual;
31  import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
32  
33  public class TimeOffAccrualDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements TimeOffAccrualDao {
34  
35  	@SuppressWarnings("unused")
36  	private static final Logger LOG = Logger.getLogger(TimeOffAccrualDaoSpringOjbImpl.class);
37  
38  	public void saveOrUpdate(TimeOffAccrual timeOffAccrual) {
39  		this.getPersistenceBrokerTemplate().store(timeOffAccrual);
40  	}
41  
42  	public void saveOrUpdate(List<TimeOffAccrual> timeOffAccrualList) {
43  		if (timeOffAccrualList != null) {
44  			for (TimeOffAccrual timeOffAccrual : timeOffAccrualList) {
45  				this.getPersistenceBrokerTemplate().store(timeOffAccrual);
46  			}
47  		}
48  	}
49  	
50  	public List<TimeOffAccrual> getTimeOffAccruals (String principalId) {
51  		
52  		List<TimeOffAccrual> timeOffAccruals = new LinkedList<TimeOffAccrual>();
53  		
54  		Criteria root = new Criteria();
55  		Criteria effdt = new Criteria();
56  
57  		// OJB's awesome sub query setup part 1
58  		effdt.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId");
59  		effdt.addEqualToField("accrualCategory", Criteria.PARENT_QUERY_PREFIX + "accrualCategory");
60  		ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(TimeOffAccrual.class, effdt);
61  		effdtSubQuery.setAttributes(new String[] { "max(effdt)" });
62  
63  		root.addEqualTo("principalId", principalId);
64  		root.addEqualTo("effectiveDate", effdtSubQuery);
65  
66  		Query query = QueryFactory.newQuery(TimeOffAccrual.class, root);
67  		Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
68  		
69  		if (c != null) {
70  			timeOffAccruals.addAll(c);
71  		}
72  
73  		return timeOffAccruals;
74  	}
75  
76  	@Override
77  	public TimeOffAccrual getTimeOffAccrual(Long laTimeOffAccrualId) {
78  		Criteria crit = new Criteria();
79  		crit.addEqualTo("lmAccrualId", laTimeOffAccrualId);
80  		
81  		Query query = QueryFactory.newQuery(TimeOffAccrual.class, crit);
82  		return (TimeOffAccrual)this.getPersistenceBrokerTemplate().getObjectByQuery(query);
83  
84  	}
85  	
86  	// KPME-1011
87  	public List<TimeOffAccrual> getActiveTimeOffAccruals (String principalId, Date asOfDate) {
88  			List<TimeOffAccrual> timeOffAccruals = new LinkedList<TimeOffAccrual>();
89  			
90  			Criteria root = new Criteria();
91  			Criteria effdt = new Criteria();
92  
93  			// OJB's awesome sub query setup part 1
94  			effdt.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId");
95  			effdt.addEqualToField("accrualCategory", Criteria.PARENT_QUERY_PREFIX + "accrualCategory");
96  			effdt.addLessOrEqualThan("effectiveDate", asOfDate);
97  			ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(TimeOffAccrual.class, effdt);
98  			effdtSubQuery.setAttributes(new String[] { "max(effdt)" });
99  
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 }