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.department.dao;
017
018 import java.sql.Date;
019 import java.util.ArrayList;
020 import java.util.Collection;
021 import java.util.List;
022
023 import org.apache.commons.lang.StringUtils;
024 import org.apache.ojb.broker.query.Criteria;
025 import org.apache.ojb.broker.query.Query;
026 import org.apache.ojb.broker.query.QueryFactory;
027 import org.apache.ojb.broker.query.ReportQueryByCriteria;
028 import org.kuali.hr.time.department.Department;
029 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
030
031 public class DepartmentDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements DepartmentDao {
032
033 @Override
034 public void saveOrUpdate(Department dept) {
035 this.getPersistenceBrokerTemplate().store(dept);
036 }
037
038 @Override
039 public Department getDepartment(String department, Date asOfDate) {
040 Criteria root = new Criteria();
041 Criteria effdt = new Criteria();
042 Criteria timestamp = new Criteria();
043
044 effdt.addEqualToField("dept", Criteria.PARENT_QUERY_PREFIX + "dept");
045 effdt.addLessOrEqualThan("effectiveDate", asOfDate);
046 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(Department.class, effdt);
047 effdtSubQuery.setAttributes(new String[] { "max(effdt)" });
048
049 timestamp.addEqualToField("dept", Criteria.PARENT_QUERY_PREFIX + "dept");
050 timestamp.addEqualToField("effectiveDate", Criteria.PARENT_QUERY_PREFIX + "effectiveDate");
051 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(Department.class, timestamp);
052 timestampSubQuery.setAttributes(new String[] { "max(timestamp)" });
053
054 root.addEqualTo("dept", department);
055 root.addEqualTo("effectiveDate", effdtSubQuery);
056 root.addEqualTo("timestamp", timestampSubQuery);
057
058 Criteria activeFilter = new Criteria(); // Inner Join For Activity
059 activeFilter.addEqualTo("active", true);
060 root.addAndCriteria(activeFilter);
061
062 Query query = QueryFactory.newQuery(Department.class, root);
063
064 Department d = (Department)this.getPersistenceBrokerTemplate().getObjectByQuery(query);
065
066 return d;
067 }
068
069 @Override
070 public List<Department> getDepartments(String location, Date asOfDate) {
071 Criteria root = new Criteria();
072 Criteria effdt = new Criteria();
073 Criteria timestamp = new Criteria();
074
075 effdt.addEqualToField("location", Criteria.PARENT_QUERY_PREFIX + "location");
076 effdt.addLessOrEqualThan("effectiveDate", asOfDate);
077 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(Department.class, effdt);
078 effdtSubQuery.setAttributes(new String[] { "max(effdt)" });
079
080 timestamp.addEqualToField("dept", Criteria.PARENT_QUERY_PREFIX + "dept");
081 timestamp.addEqualToField("effectiveDate", Criteria.PARENT_QUERY_PREFIX + "effectiveDate");
082 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(Department.class, timestamp);
083 timestampSubQuery.setAttributes(new String[] { "max(timestamp)" });
084
085 root.addEqualTo("location", location);
086 root.addEqualTo("effectiveDate", effdtSubQuery);
087 root.addEqualTo("timestamp", timestampSubQuery);
088
089 Criteria activeFilter = new Criteria(); // Inner Join For Activity
090 activeFilter.addEqualTo("active", true);
091 root.addAndCriteria(activeFilter);
092
093
094 Query query = QueryFactory.newQuery(Department.class, root);
095
096 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
097 List<Department> d = new ArrayList<Department>(c.size());
098 d.addAll(c);
099
100 return d;
101 }
102
103 @Override
104 @SuppressWarnings("unchecked")
105 public List<Department> getDepartments(String dept, String location, String departmentDescr, String active) {
106 List<Department> results = new ArrayList<Department>();
107
108 Criteria root = new Criteria();
109
110 if (StringUtils.isNotBlank(dept)) {
111 root.addLike("dept", dept);
112 }
113
114 if (StringUtils.isNotBlank(location)) {
115 root.addLike("location", location);
116 }
117
118 if (StringUtils.isNotBlank(departmentDescr)) {
119 root.addLike("description", departmentDescr);
120 }
121
122 if (StringUtils.isNotBlank(active)) {
123 Criteria activeFilter = new Criteria();
124 if (StringUtils.equals(active, "Y")) {
125 activeFilter.addEqualTo("active", true);
126 } else if (StringUtils.equals(active, "N")) {
127 activeFilter.addEqualTo("active", false);
128 }
129 root.addAndCriteria(activeFilter);
130 }
131
132 Query query = QueryFactory.newQuery(Department.class, root);
133 results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query));
134
135 return results;
136 }
137
138 @Override
139 public Department getDepartment(String hrDeptId) {
140 Criteria crit = new Criteria();
141 crit.addEqualTo("hrDeptId", hrDeptId);
142
143 Query query = QueryFactory.newQuery(Department.class, crit);
144 return (Department)this.getPersistenceBrokerTemplate().getObjectByQuery(query);
145 }
146
147 @Override
148 public List<Department> getDepartmentByLocation(String location) {
149 Criteria crit = new Criteria();
150 crit.addEqualTo("location", location);
151
152 Query query = QueryFactory.newQuery(Department.class, crit);
153
154 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
155 List<Department> d = new ArrayList<Department>(c.size());
156 d.addAll(c);
157
158 return d;
159 }
160
161 @Override
162 public int getDepartmentCount(String department) {
163 Criteria crit = new Criteria();
164 crit.addEqualTo("dept", department);
165 Query query = QueryFactory.newQuery(Department.class, crit);
166 return this.getPersistenceBrokerTemplate().getCount(query);
167 }
168 }