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.leavecode.dao;
017    
018    
019    import java.sql.Date;
020    import java.util.ArrayList;
021    import java.util.Collection;
022    import java.util.List;
023    
024    import com.google.common.collect.ImmutableList;
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.core.util.OjbSubQueryUtil;
031    import org.kuali.hr.lm.leavecode.LeaveCode;
032    import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
033    
034    public class LeaveCodeDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements LeaveCodeDao {
035        private static final ImmutableList<String> EQUAL_TO_FIELDS = new ImmutableList.Builder<String>()
036                .add("leaveCode")
037                .add("leavePlan")
038                .add("principalId")
039                .build();
040            private static final Logger LOG = Logger.getLogger(LeaveCodeDaoSpringOjbImpl.class);
041    
042            @Override
043            public LeaveCode getLeaveCode(String lmLeaveCodeId) {
044                    Criteria crit = new Criteria();
045                    crit.addEqualTo("lmLeaveCodeId", lmLeaveCodeId);
046                    Query query = QueryFactory.newQuery(LeaveCode.class, crit);
047                    return (LeaveCode) this.getPersistenceBrokerTemplate().getObjectByQuery(query);
048            }
049            
050            public List<LeaveCode> getLeaveCodes(String leavePlan, Date asOfDate){
051                    List<LeaveCode> leaveCodes = new ArrayList<LeaveCode>();
052                    Criteria root = new Criteria();
053    
054            java.sql.Date effDate = asOfDate == null ? null : new java.sql.Date(asOfDate.getTime());
055                    root.addEqualTo("leavePlan", leavePlan);
056            root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(LeaveCode.class, effDate, EQUAL_TO_FIELDS, false));
057            root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(LeaveCode.class, EQUAL_TO_FIELDS, false));
058                    
059                    Criteria activeFilter = new Criteria(); // Inner Join For Activity
060                    activeFilter.addEqualTo("active", true);
061                    root.addAndCriteria(activeFilter);
062                    
063                    
064                    Query query = QueryFactory.newQuery(LeaveCode.class, root);
065                    Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
066    
067                    if (c != null) {
068                            leaveCodes.addAll(c);
069                    }       
070                    return leaveCodes;
071            }
072    
073            @Override
074        public LeaveCode getLeaveCode(String leaveCode, Date asOfDate) {
075                    LeaveCode myleaveCode = null;
076                    Criteria root = new Criteria();
077                    root.addEqualTo("leaveCode", leaveCode);
078                    root.addLessOrEqualThan("effectiveDate", asOfDate);
079                    root.addEqualTo("active",true);
080                    
081                    Query query = QueryFactory.newQuery(LeaveCode.class, root);
082                    Object obj = this.getPersistenceBrokerTemplate().getObjectByQuery(query);
083                    if (obj != null) {
084                            myleaveCode = (LeaveCode) obj;
085                    }
086    
087                    return myleaveCode;
088        }
089    }