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    }