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.calendar.dao; 017 018 import java.text.DateFormat; 019 import java.text.ParseException; 020 import java.text.SimpleDateFormat; 021 import java.util.ArrayList; 022 import java.util.Collection; 023 import java.util.Date; 024 import java.util.List; 025 026 import org.apache.ojb.broker.query.Criteria; 027 import org.apache.ojb.broker.query.Query; 028 import org.apache.ojb.broker.query.QueryByCriteria; 029 import org.apache.ojb.broker.query.QueryFactory; 030 import org.apache.ojb.broker.query.ReportQueryByCriteria; 031 import org.joda.time.DateTime; 032 import org.kuali.hr.time.calendar.CalendarEntries; 033 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 034 035 public class CalendarEntriesDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements CalendarEntriesDao { 036 037 038 public void saveOrUpdate(CalendarEntries calendarEntries) { 039 this.getPersistenceBrokerTemplate().store(calendarEntries); 040 } 041 042 public CalendarEntries getCalendarEntries(String hrCalendarEntriesId) { 043 Criteria currentRecordCriteria = new Criteria(); 044 currentRecordCriteria.addEqualTo("hrCalendarEntriesId", hrCalendarEntriesId); 045 046 return (CalendarEntries) this.getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(CalendarEntries.class, currentRecordCriteria)); 047 } 048 049 @Override 050 public CalendarEntries getCalendarEntriesByIdAndPeriodEndDate(String hrCalendarId, Date endPeriodDate) { 051 Criteria root = new Criteria(); 052 root.addEqualTo("hrCalendarId", hrCalendarId); 053 root.addEqualTo("endPeriodDateTime", endPeriodDate); 054 055 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 056 CalendarEntries pce = (CalendarEntries) this.getPersistenceBrokerTemplate().getObjectByQuery(query); 057 return pce; 058 } 059 060 @Override 061 public CalendarEntries getCurrentCalendarEntriesByCalendarId( 062 String hrCalendarId, Date currentDate) { 063 Criteria root = new Criteria(); 064 // Criteria beginDate = new Criteria(); 065 // Criteria endDate = new Criteria(); 066 067 // beginDate.addEqualToField("hrPyCalendarId", Criteria.PARENT_QUERY_PREFIX + "hrPyCalendarId"); 068 // beginDate.addLessOrEqualThan("beginPeriodDateTime", currentDate); 069 // ReportQueryByCriteria beginDateSubQuery = QueryFactory.newReportQuery(CalendarEntries.class, beginDate); 070 // beginDateSubQuery.setAttributes(new String[] { "max(beginPeriodDateTime)" }); 071 072 // endDate.addEqualToField("hrPyCalendarId", Criteria.PARENT_QUERY_PREFIX + "hrPyCalendarId"); 073 // endDate.addGreaterOrEqualThan("endPeriodDateTime", currentDate); 074 // ReportQueryByCriteria endDateSubQuery = QueryFactory.newReportQuery(CalendarEntries.class, endDate); 075 // endDateSubQuery.setAttributes(new String[] { "min(endPeriodDateTime)" }); 076 077 root.addEqualTo("hrCalendarId", hrCalendarId); 078 //root.addEqualTo("beginPeriodDateTime", beginDateSubQuery); 079 root.addLessOrEqualThan("beginPeriodDateTime", currentDate); 080 root.addGreaterThan("endPeriodDateTime", currentDate); 081 // root.addEqualTo("endPeriodDateTime", endDateSubQuery); 082 083 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 084 085 CalendarEntries pce = (CalendarEntries) this.getPersistenceBrokerTemplate().getObjectByQuery(query); 086 return pce; 087 } 088 089 @Override 090 public CalendarEntries getCalendarEntriesByCalendarIdAndDateRange( 091 String hrCalendarId, Date beginDate, Date endDate) { 092 Criteria root = new Criteria(); 093 root.addEqualTo("hrCalendarId", hrCalendarId); 094 //root.addEqualTo("beginPeriodDateTime", beginDateSubQuery); 095 root.addLessOrEqualThan("beginPeriodDateTime", endDate); 096 root.addGreaterThan("endPeriodDateTime", beginDate); 097 // root.addEqualTo("endPeriodDateTime", endDateSubQuery); 098 099 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 100 101 CalendarEntries pce = (CalendarEntries) this.getPersistenceBrokerTemplate().getObjectByQuery(query); 102 return pce; 103 } 104 105 @Override 106 public CalendarEntries getNextCalendarEntriesByCalendarId(String hrCalendarId, CalendarEntries calendarEntries) { 107 Criteria root = new Criteria(); 108 Criteria beginDate = new Criteria(); 109 Criteria endDate = new Criteria(); 110 111 beginDate.addEqualToField("hrCalendarId", Criteria.PARENT_QUERY_PREFIX + "hrCalendarId"); 112 beginDate.addGreaterThan("beginPeriodDateTime", calendarEntries.getBeginPeriodDateTime()); 113 ReportQueryByCriteria beginDateSubQuery = QueryFactory.newReportQuery(CalendarEntries.class, beginDate); 114 beginDateSubQuery.setAttributes(new String[]{"min(beginPeriodDateTime)"}); 115 116 endDate.addEqualToField("hrCalendarId", Criteria.PARENT_QUERY_PREFIX + "hrCalendarId"); 117 endDate.addGreaterThan("endPeriodDateTime", calendarEntries.getEndPeriodDateTime()); 118 ReportQueryByCriteria endDateSubQuery = QueryFactory.newReportQuery(CalendarEntries.class, endDate); 119 endDateSubQuery.setAttributes(new String[]{"min(endPeriodDateTime)"}); 120 121 root.addEqualTo("hrCalendarId", hrCalendarId); 122 root.addEqualTo("beginPeriodDateTime", beginDateSubQuery); 123 root.addEqualTo("endPeriodDateTime", endDateSubQuery); 124 125 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 126 127 CalendarEntries pce = (CalendarEntries) this.getPersistenceBrokerTemplate().getObjectByQuery(query); 128 return pce; 129 } 130 131 @Override 132 public CalendarEntries getPreviousCalendarEntriesByCalendarId(String hrCalendarId, CalendarEntries calendarEntries) { 133 Criteria root = new Criteria(); 134 Criteria beginDate = new Criteria(); 135 Criteria endDate = new Criteria(); 136 137 beginDate.addEqualToField("hrCalendarId", Criteria.PARENT_QUERY_PREFIX + "hrCalendarId"); 138 beginDate.addLessThan("beginPeriodDateTime", calendarEntries.getBeginPeriodDateTime()); 139 ReportQueryByCriteria beginDateSubQuery = QueryFactory.newReportQuery(CalendarEntries.class, beginDate); 140 beginDateSubQuery.setAttributes(new String[]{"max(beginPeriodDateTime)"}); 141 142 endDate.addEqualToField("hrCalendarId", Criteria.PARENT_QUERY_PREFIX + "hrCalendarId"); 143 endDate.addLessThan("endPeriodDateTime", calendarEntries.getEndPeriodDateTime()); 144 ReportQueryByCriteria endDateSubQuery = QueryFactory.newReportQuery(CalendarEntries.class, endDate); 145 endDateSubQuery.setAttributes(new String[]{"max(endPeriodDateTime)"}); 146 147 root.addEqualTo("hrCalendarId", hrCalendarId); 148 root.addEqualTo("beginPeriodDateTime", beginDateSubQuery); 149 root.addEqualTo("endPeriodDateTime", endDateSubQuery); 150 151 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 152 153 CalendarEntries pce = (CalendarEntries) this.getPersistenceBrokerTemplate().getObjectByQuery(query); 154 return pce; 155 } 156 157 public List<CalendarEntries> getCurrentCalendarEntryNeedsScheduled(int thresholdDays, Date asOfDate) { 158 DateTime current = new DateTime(asOfDate.getTime()); 159 DateTime windowStart = current.minusDays(thresholdDays); 160 DateTime windowEnd = current.plusDays(thresholdDays); 161 162 Criteria root = new Criteria(); 163 164 root.addGreaterOrEqualThan("beginPeriodDateTime", windowStart.toDate()); 165 root.addLessOrEqualThan("beginPeriodDateTime", windowEnd.toDate()); 166 167 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 168 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 169 170 List<CalendarEntries> pce = new ArrayList<CalendarEntries>(c.size()); 171 pce.addAll(c); 172 173 return pce; 174 } 175 176 public List<CalendarEntries> getFutureCalendarEntries(String hrCalendarId, Date currentDate, int numberOfEntries) { 177 Criteria root = new Criteria(); 178 root.addEqualTo("hrCalendarId", hrCalendarId); 179 root.addGreaterOrEqualThan("beginPeriodDateTime", currentDate); 180 QueryByCriteria q = QueryFactory.newReportQuery(CalendarEntries.class, root); 181 q.addOrderByAscending("beginPeriodDateTime"); 182 q.setStartAtIndex(1); 183 q.setEndAtIndex(numberOfEntries); 184 List<CalendarEntries> calendarEntries = new ArrayList<CalendarEntries>(this.getPersistenceBrokerTemplate().getCollectionByQuery(q)); 185 return calendarEntries; 186 } 187 188 @SuppressWarnings("unchecked") 189 public List<CalendarEntries> getCalendarEntriesEndingBetweenBeginAndEndDate(String hrCalendarId, Date beginDate, Date endDate) { 190 List<CalendarEntries> results = new ArrayList<CalendarEntries>(); 191 192 Criteria root = new Criteria(); 193 194 root.addEqualTo("hrCalendarId", hrCalendarId); 195 root.addGreaterOrEqualThan("endPeriodDateTime", beginDate); 196 root.addLessOrEqualThan("endPeriodDateTime", endDate); 197 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 198 199 results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query)); 200 201 return results; 202 } 203 204 public List<CalendarEntries> getAllCalendarEntriesForCalendarId(String hrCalendarId) { 205 Criteria root = new Criteria(); 206 root.addEqualTo("hrCalendarId", hrCalendarId); 207 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 208 List<CalendarEntries> ceList = new ArrayList<CalendarEntries> (this.getPersistenceBrokerTemplate().getCollectionByQuery(query)); 209 return ceList; 210 } 211 212 public List<CalendarEntries> getAllCalendarEntriesForCalendarIdUpToCutOffTime(String hrCalendarId, Date cutOffTime) { 213 Criteria root = new Criteria(); 214 root.addEqualTo("hrCalendarId", hrCalendarId); 215 root.addLessOrEqualThan("endPeriodDateTime", cutOffTime); 216 Query query = QueryFactory.newQuery(CalendarEntries.class, root); 217 List<CalendarEntries> ceList = new ArrayList<CalendarEntries> (this.getPersistenceBrokerTemplate().getCollectionByQuery(query)); 218 return ceList; 219 } 220 221 public List<CalendarEntries> getAllCalendarEntriesForCalendarIdAndYear(String hrCalendarId, String year) { 222 Criteria crit = new Criteria(); 223 List<CalendarEntries> ceList = new ArrayList<CalendarEntries>(); 224 try { 225 crit.addEqualTo("hrCalendarId", hrCalendarId); 226 DateFormat df = new SimpleDateFormat("yyyy"); 227 java.util.Date cYear = df.parse(year); 228 String nextYear = Integer.toString((Integer.parseInt(year) + 1)); 229 java.util.Date nYear = df.parse(nextYear); 230 231 crit.addGreaterOrEqualThan("beginPeriodDateTime", cYear); 232 crit.addLessThan("beginPeriodDateTime", nYear ); 233 QueryByCriteria query = new QueryByCriteria(CalendarEntries.class, crit); 234 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 235 if (c != null) { 236 ceList.addAll(c); 237 } 238 } catch (ParseException e) { 239 e.printStackTrace(); 240 } 241 return ceList; 242 } 243 244 245 }