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.kpme.tklm.time.clocklog.dao; 017 018 import java.util.List; 019 020 import org.apache.log4j.Logger; 021 import org.apache.ojb.broker.query.Criteria; 022 import org.apache.ojb.broker.query.Query; 023 import org.apache.ojb.broker.query.QueryFactory; 024 import org.apache.ojb.broker.query.ReportQueryByCriteria; 025 import org.kuali.kpme.core.calendar.entry.CalendarEntry; 026 import org.kuali.kpme.tklm.time.clocklog.ClockLog; 027 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 028 029 public class ClockLogDaoOjbImpl extends PlatformAwareDaoBaseOjb implements ClockLogDao { 030 031 private static final Logger LOG = Logger.getLogger(ClockLogDaoOjbImpl.class); 032 033 public void saveOrUpdate(ClockLog clockLog) { 034 this.getPersistenceBrokerTemplate().store(clockLog); 035 } 036 037 public void saveOrUpdate(List<ClockLog> clockLogList) { 038 if (clockLogList != null) { 039 for (ClockLog clockLog : clockLogList) { 040 this.getPersistenceBrokerTemplate().store(clockLog); 041 } 042 } 043 } 044 045 public ClockLog getClockLog(String tkClockLogId){ 046 Criteria crit = new Criteria(); 047 crit.addEqualTo("tkClockLogId", tkClockLogId); 048 Query query = QueryFactory.newQuery(ClockLog.class, crit); 049 return (ClockLog)this.getPersistenceBrokerTemplate().getObjectByQuery(query); 050 } 051 052 public ClockLog getLastClockLog(String principalId){ 053 Criteria currentRecordCriteria = new Criteria(); 054 currentRecordCriteria.addEqualTo("principalId", principalId); 055 056 Criteria clockTimeJoinCriteria = new Criteria(); 057 clockTimeJoinCriteria.addEqualToField("principalId",Criteria.PARENT_QUERY_PREFIX +"principalId"); 058 059 ReportQueryByCriteria clockTimeSubQuery = QueryFactory.newReportQuery(ClockLog.class, clockTimeJoinCriteria); 060 clockTimeSubQuery.setAttributes(new String[]{"max(clockTimestamp)"}); 061 062 currentRecordCriteria.addEqualTo("clockTimestamp", clockTimeSubQuery); 063 064 Criteria timestampJoinCriteria = new Criteria(); 065 timestampJoinCriteria.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 066 timestampJoinCriteria.addEqualToField("clockTimestamp", Criteria.PARENT_QUERY_PREFIX + "clockTimestamp"); 067 068 ReportQueryByCriteria timeStampSubQuery = QueryFactory.newReportQuery(ClockLog.class, timestampJoinCriteria); 069 timeStampSubQuery.setAttributes(new String[]{"max(timestamp)"}); 070 071 currentRecordCriteria.addEqualTo("timestamp", timeStampSubQuery); 072 073 return (ClockLog)this.getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(ClockLog.class,currentRecordCriteria)); 074 } 075 076 @Override 077 public ClockLog getLastClockLog(String principalId, String clockAction){ 078 Criteria currentRecordCriteria = new Criteria(); 079 currentRecordCriteria.addEqualTo("principalId", principalId); 080 currentRecordCriteria.addEqualTo("clockAction", clockAction); 081 082 Criteria clockTimeJoinCriteria = new Criteria(); 083 clockTimeJoinCriteria.addEqualToField("principalId",Criteria.PARENT_QUERY_PREFIX +"principalId"); 084 clockTimeJoinCriteria.addEqualToField("clockAction",Criteria.PARENT_QUERY_PREFIX +"clockAction"); 085 086 ReportQueryByCriteria clockTimeSubQuery = QueryFactory.newReportQuery(ClockLog.class, clockTimeJoinCriteria); 087 clockTimeSubQuery.setAttributes(new String[]{"max(clockTimestamp)"}); 088 089 currentRecordCriteria.addEqualTo("clockTimestamp", clockTimeSubQuery); 090 091 Criteria timestampJoinCriteria = new Criteria(); 092 timestampJoinCriteria.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 093 timestampJoinCriteria.addEqualToField("clockAction", Criteria.PARENT_QUERY_PREFIX + "clockAction"); 094 timestampJoinCriteria.addEqualToField("clockTimestamp", Criteria.PARENT_QUERY_PREFIX + "clockTimestamp"); 095 096 ReportQueryByCriteria timeStampSubQuery = QueryFactory.newReportQuery(ClockLog.class, timestampJoinCriteria); 097 timeStampSubQuery.setAttributes(new String[]{"max(timestamp)"}); 098 099 currentRecordCriteria.addEqualTo("timestamp", timeStampSubQuery); 100 101 return (ClockLog)this.getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(ClockLog.class,currentRecordCriteria)); 102 } 103 104 @Override 105 public ClockLog getLastClockLog(String principalId, String jobNumber, String workArea, String task, String timesheetId) { 106 Criteria criteria = new Criteria(); 107 criteria.addEqualTo("principalId", principalId); 108 criteria.addEqualTo("jobNumber", jobNumber); 109 criteria.addEqualTo("workArea", workArea); 110 criteria.addEqualTo("task", task); 111 criteria.addEqualTo("documentId", timesheetId); 112 Criteria clockTimeJoinCriteria = new Criteria(); 113 clockTimeJoinCriteria.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 114 clockTimeJoinCriteria.addEqualToField("jobNumber", Criteria.PARENT_QUERY_PREFIX + "jobNumber"); 115 clockTimeJoinCriteria.addEqualToField("workArea", Criteria.PARENT_QUERY_PREFIX + "workArea"); 116 clockTimeJoinCriteria.addEqualToField("task", Criteria.PARENT_QUERY_PREFIX + "task"); 117 clockTimeJoinCriteria.addEqualToField("documentId", Criteria.PARENT_QUERY_PREFIX + "documentId"); 118 ReportQueryByCriteria clockTimeSubQuery = QueryFactory.newReportQuery(ClockLog.class, clockTimeJoinCriteria); 119 clockTimeSubQuery.setAttributes(new String[]{"max(clockTimestamp)"}); 120 criteria.addEqualTo("clockTimestamp", clockTimeSubQuery); 121 122 Criteria timestampJoinCriteria = new Criteria(); 123 timestampJoinCriteria.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 124 timestampJoinCriteria.addEqualToField("jobNumber", Criteria.PARENT_QUERY_PREFIX + "jobNumber"); 125 timestampJoinCriteria.addEqualToField("workArea", Criteria.PARENT_QUERY_PREFIX + "workArea"); 126 timestampJoinCriteria.addEqualToField("task", Criteria.PARENT_QUERY_PREFIX + "task"); 127 timestampJoinCriteria.addEqualToField("documentId", Criteria.PARENT_QUERY_PREFIX + "documentId"); 128 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(ClockLog.class, timestampJoinCriteria); 129 timestampSubQuery.setAttributes(new String[]{"max(timestamp)"}); 130 criteria.addEqualTo("timestamp", timestampSubQuery); 131 132 return (ClockLog) this.getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(ClockLog.class, criteria)); 133 } 134 135 @Override 136 public ClockLog getLastClockLog(String principalId, String jobNumber, String workArea, String task, CalendarEntry calendarEntry) { 137 Criteria criteria = new Criteria(); 138 criteria.addEqualTo("principalId", principalId); 139 criteria.addEqualTo("jobNumber", jobNumber); 140 criteria.addEqualTo("workArea", workArea); 141 criteria.addEqualTo("task", task); 142 143 Criteria clockTimeJoinCriteria = new Criteria(); 144 clockTimeJoinCriteria.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 145 clockTimeJoinCriteria.addEqualToField("jobNumber", Criteria.PARENT_QUERY_PREFIX + "jobNumber"); 146 clockTimeJoinCriteria.addEqualToField("workArea", Criteria.PARENT_QUERY_PREFIX + "workArea"); 147 clockTimeJoinCriteria.addEqualToField("task", Criteria.PARENT_QUERY_PREFIX + "task"); 148 clockTimeJoinCriteria.addBetween("clockTimestamp", calendarEntry.getBeginPeriodDate(), calendarEntry.getEndPeriodDate()); 149 ReportQueryByCriteria clockTimeSubQuery = QueryFactory.newReportQuery(ClockLog.class, clockTimeJoinCriteria); 150 clockTimeSubQuery.setAttributes(new String[]{"max(clockTimestamp)"}); 151 criteria.addEqualTo("clockTimestamp", clockTimeSubQuery); 152 153 Criteria timestampJoinCriteria = new Criteria(); 154 timestampJoinCriteria.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 155 timestampJoinCriteria.addEqualToField("jobNumber", Criteria.PARENT_QUERY_PREFIX + "jobNumber"); 156 timestampJoinCriteria.addEqualToField("workArea", Criteria.PARENT_QUERY_PREFIX + "workArea"); 157 timestampJoinCriteria.addEqualToField("task", Criteria.PARENT_QUERY_PREFIX + "task"); 158 timestampJoinCriteria.addBetween("clockTimestamp", calendarEntry.getBeginPeriodDate(), calendarEntry.getEndPeriodDate()); 159 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(ClockLog.class, timestampJoinCriteria); 160 timestampSubQuery.setAttributes(new String[]{"max(timestamp)"}); 161 criteria.addEqualTo("timestamp", timestampSubQuery); 162 163 return (ClockLog) this.getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(ClockLog.class, criteria)); 164 } 165 166 @Override 167 public void deleteClockLogsForDocumentId(String documentId) { 168 Criteria crit = new Criteria(); 169 crit.addEqualTo("documentId", documentId); 170 this.getPersistenceBrokerTemplate().deleteByQuery(QueryFactory.newQuery(ClockLog.class, crit)); 171 } 172 173 }