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