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.position.dao;
017    
018    import java.sql.Date;
019    import java.util.ArrayList;
020    import java.util.List;
021    
022    import org.apache.commons.lang.StringUtils;
023    import org.apache.ojb.broker.query.Criteria;
024    import org.apache.ojb.broker.query.Query;
025    import org.apache.ojb.broker.query.QueryFactory;
026    import org.apache.ojb.broker.query.ReportQueryByCriteria;
027    import org.kuali.hr.time.position.Position;
028    import org.kuali.hr.time.util.TKUtils;
029    import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
030    
031    public class PositionDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements PositionDao {
032    
033        @Override
034        public Position getPosition(String hrPositionId) {
035            Criteria crit = new Criteria();
036            crit.addEqualTo("hrPositionId", hrPositionId);
037    
038            Query query = QueryFactory.newQuery(Position.class, crit);
039            return (Position) this.getPersistenceBrokerTemplate().getObjectByQuery(query);
040        }
041    
042    
043        @Override
044        public Position getPositionByPositionNumber(String hrPositionNbr) {
045            Criteria crit = new Criteria();
046            crit.addEqualTo("position_nbr", hrPositionNbr);
047    
048            Query query = QueryFactory.newQuery(Position.class, crit);
049            return (Position) this.getPersistenceBrokerTemplate().getObjectByQuery(query);
050        }
051    
052            @Override
053        @SuppressWarnings("unchecked")
054        public List<Position> getPositions(String positionNum, String workArea, String description, Date fromEffdt, Date toEffdt, 
055                                                                       String active, String showHistory) {
056            
057            List<Position> results = new ArrayList<Position>();
058            
059            Criteria root = new Criteria();
060    
061            if (StringUtils.isNotBlank(positionNum)) {
062                root.addLike("positionNumber", positionNum);
063            }
064            
065            if (StringUtils.isNotBlank(workArea)) {
066                root.addLike("workArea", workArea);
067            }
068    
069            if (StringUtils.isNotBlank(description)) {
070                root.addLike("description", description);
071            }
072            
073            Criteria effectiveDateFilter = new Criteria();
074            if (fromEffdt != null) {
075                effectiveDateFilter.addGreaterOrEqualThan("effectiveDate", fromEffdt);
076            }
077            if (toEffdt != null) {
078                effectiveDateFilter.addLessOrEqualThan("effectiveDate", toEffdt);
079            }
080            if (fromEffdt == null && toEffdt == null) {
081                effectiveDateFilter.addLessOrEqualThan("effectiveDate", TKUtils.getCurrentDate());
082            }
083            root.addAndCriteria(effectiveDateFilter);
084            
085            if (StringUtils.isNotBlank(active)) {
086                    Criteria activeFilter = new Criteria();
087                if (StringUtils.equals(active, "Y")) {
088                    activeFilter.addEqualTo("active", true);
089                } else if (StringUtils.equals(active, "N")) {
090                    activeFilter.addEqualTo("active", false);
091                }
092                root.addAndCriteria(activeFilter);
093            }
094    
095            if (StringUtils.equals(showHistory, "N")) {
096                Criteria effdt = new Criteria();
097                effdt.addEqualToField("positionNumber", Criteria.PARENT_QUERY_PREFIX + "positionNumber");
098                effdt.addAndCriteria(effectiveDateFilter);
099                ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(Position.class, effdt);
100                effdtSubQuery.setAttributes(new String[]{"max(effectiveDate)"});
101                root.addEqualTo("effectiveDate", effdtSubQuery);
102                
103                Criteria timestamp = new Criteria();
104                timestamp.addEqualToField("positionNumber", Criteria.PARENT_QUERY_PREFIX + "positionNumber");
105                timestamp.addAndCriteria(effectiveDateFilter);
106                ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(Position.class, timestamp);
107                timestampSubQuery.setAttributes(new String[]{"max(timestamp)"});
108                root.addEqualTo("timestamp", timestampSubQuery);
109            }
110            
111            Query query = QueryFactory.newQuery(Position.class, root);
112            results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query));
113    
114            return results;
115        }
116    
117        /*@Override
118        public PositionNumber getNextUniquePositionNumber() {
119            Criteria crit = new Criteria();
120            ReportQueryByCriteria query = QueryFactory.newReportQuery(PositionNumber.class, crit);
121            query.setAttributes(new String[]{"max(id)"});
122            return (PositionNumber) this.getPersistenceBrokerTemplate().getObjectByQuery(query);
123        }
124    
125        @Override
126        public void saveOrUpdate(PositionNumber positionNumber) {
127            this.getPersistenceBrokerTemplate().store(positionNumber);
128        }*/
129    
130    }