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 }