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 }