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.shiftdiff.rule.dao; 017 018 import com.google.common.collect.ImmutableList; 019 import org.apache.commons.lang.StringUtils; 020 import org.apache.ojb.broker.query.Criteria; 021 import org.apache.ojb.broker.query.Query; 022 import org.apache.ojb.broker.query.QueryFactory; 023 import org.kuali.hr.core.util.OjbSubQueryUtil; 024 import org.kuali.hr.time.shiftdiff.rule.ShiftDifferentialRule; 025 import org.kuali.hr.time.util.TKUtils; 026 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 027 028 import java.sql.Date; 029 import java.util.ArrayList; 030 import java.util.Collection; 031 import java.util.List; 032 033 public class ShiftDifferentialRuleDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements ShiftDifferentialRuleDao { 034 035 @Override 036 public ShiftDifferentialRule findShiftDifferentialRule(String id) { 037 Object o = this.getPersistenceBrokerTemplate().getObjectById(ShiftDifferentialRule.class, id); 038 039 return (ShiftDifferentialRule)o; 040 } 041 042 @SuppressWarnings("unchecked") 043 @Override 044 public List<ShiftDifferentialRule> findShiftDifferentialRules(String location, String hrSalGroup, String payGrade, String pyCalendarGroup, Date asOfDate) { 045 List<ShiftDifferentialRule> list = new ArrayList<ShiftDifferentialRule>(); 046 047 Criteria root = new Criteria(); 048 049 root.addEqualTo("location", location); 050 root.addEqualTo("hrSalGroup", hrSalGroup); 051 root.addEqualTo("payGrade", payGrade); 052 root.addEqualTo("pyCalendarGroup", pyCalendarGroup); 053 054 ImmutableList<String> fields = new ImmutableList.Builder<String>() 055 .add("location") 056 .add("hrSalGroup") 057 .add("payGrade") 058 .add("pyCalendarGroup") 059 .build(); 060 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(ShiftDifferentialRule.class, asOfDate, fields, false)); 061 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(ShiftDifferentialRule.class, fields, false)); 062 063 064 Criteria activeFilter = new Criteria(); // Inner Join For Activity 065 activeFilter.addEqualTo("active", true); 066 root.addAndCriteria(activeFilter); 067 068 Query query = QueryFactory.newQuery(ShiftDifferentialRule.class, root); 069 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 070 071 if (c != null) { 072 list.addAll(c); 073 } 074 075 return list; 076 } 077 078 public void saveOrUpdate(ShiftDifferentialRule shiftDifferentialRule) { 079 this.getPersistenceBrokerTemplate().store(shiftDifferentialRule); 080 } 081 082 public void saveOrUpdate(List<ShiftDifferentialRule> shiftDifferentialRules) { 083 for (ShiftDifferentialRule sdr : shiftDifferentialRules) { 084 saveOrUpdate(sdr); 085 } 086 } 087 088 @Override 089 @SuppressWarnings("unchecked") 090 public List<ShiftDifferentialRule> getShiftDifferentialRules(String location, String hrSalGroup, String payGrade, Date fromEffdt, Date toEffdt, 091 String active, String showHistory) { 092 093 List<ShiftDifferentialRule> results = new ArrayList<ShiftDifferentialRule>(); 094 095 Criteria root = new Criteria(); 096 097 if (StringUtils.isNotBlank(location)) { 098 root.addLike("location", location); 099 } 100 101 if (StringUtils.isNotBlank(hrSalGroup)) { 102 root.addLike("hrSalGroup", hrSalGroup); 103 } 104 105 if (StringUtils.isNotBlank(payGrade)) { 106 root.addLike("payGrade", payGrade); 107 } 108 109 Criteria effectiveDateFilter = new Criteria(); 110 if (fromEffdt != null) { 111 effectiveDateFilter.addGreaterOrEqualThan("effectiveDate", fromEffdt); 112 } 113 if (toEffdt != null) { 114 effectiveDateFilter.addLessOrEqualThan("effectiveDate", toEffdt); 115 } 116 if (fromEffdt == null && toEffdt == null) { 117 effectiveDateFilter.addLessOrEqualThan("effectiveDate", TKUtils.getCurrentDate()); 118 } 119 120 121 if (StringUtils.isNotBlank(active)) { 122 Criteria activeFilter = new Criteria(); 123 if (StringUtils.equals(active, "Y")) { 124 activeFilter.addEqualTo("active", true); 125 } else if (StringUtils.equals(active, "N")) { 126 activeFilter.addEqualTo("active", false); 127 } 128 root.addAndCriteria(activeFilter); 129 } 130 131 if (StringUtils.equals(showHistory, "N")) { 132 root.addAndCriteria(effectiveDateFilter); 133 } 134 135 Query query = QueryFactory.newQuery(ShiftDifferentialRule.class, root); 136 results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query)); 137 138 return results; 139 } 140 141 }