-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
diff --git a/samigo/samigo-app/src/webapp/jsf/author/inc/publishedExtendedTime.jspf b/samigo/samigo-app/src/webapp/jsf/author/inc/publishedExtendedTime.jspf
index ee66f6ddae..c5a08ff3b8 100644
--- a/samigo/samigo-app/src/webapp/jsf/author/inc/publishedExtendedTime.jspf
+++ b/samigo/samigo-app/src/webapp/jsf/author/inc/publishedExtendedTime.jspf
@@ -1,36 +1,119 @@
#{assessmentSettingsMessages.extendedTimeHeading} " escape="false"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
diff --git a/samigo/samigo-app/src/webapp/jsf/author/publishedSettings.jsp b/samigo/samigo-app/src/webapp/jsf/author/publishedSettings.jsp
index b4f6cb6314..8aa44ba9e3 100644
--- a/samigo/samigo-app/src/webapp/jsf/author/publishedSettings.jsp
+++ b/samigo/samigo-app/src/webapp/jsf/author/publishedSettings.jsp
@@ -43,7 +43,6 @@
<%= request.getAttribute("html.head") %>
-
diff --git a/samigo/samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ExtendedTime.hbm.xml b/samigo/samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ExtendedTime.hbm.xml
new file mode 100644
index 0000000000..6ef7067681
--- /dev/null
+++ b/samigo/samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ExtendedTime.hbm.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+ SAM_EXTENDEDTIME_S
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samigo/samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ExtendedTime.java b/samigo/samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ExtendedTime.java
new file mode 100644
index 0000000000..658837cdc8
--- /dev/null
+++ b/samigo/samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ExtendedTime.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, The Apereo Foundation
+ *
+ * Licensed under the Educational Community License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://opensource.org/licenses/ecl2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.sakaiproject.tool.assessment.data.dao.assessment;
+
+import lombok.*;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentBaseIfc;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.PublishedAssessmentIfc;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by Leonardo Canessa [lcanessa1 (at) udayton (dot) edu]
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ExtendedTime implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Long id;
+ private AssessmentBaseIfc assessment;
+ private PublishedAssessmentIfc pubAssessment;
+ private String user;
+ private String group;
+ private Date startDate;
+ private Date dueDate;
+ private Date retractDate;
+ private Integer timeHours;
+ private Integer timeMinutes;
+
+ public ExtendedTime (AssessmentBaseIfc ass) {
+ this.assessment = ass;
+ }
+
+ public ExtendedTime (PublishedAssessmentIfc pub) {
+ this.pubAssessment = pub;
+ }
+
+ public ExtendedTime (ExtendedTime source) {
+ this(source.id, source.assessment, source.pubAssessment, source.user, source.group, source.startDate, source.dueDate, source.retractDate, source.timeHours, source.timeMinutes);
+ }
+
+ public Long getAssessmentId () {
+ if(assessment == null) {
+ return null;
+ }
+ return assessment.getAssessmentBaseId();
+ }
+
+ public Long getPubAssessmentId () {
+ if(pubAssessment == null) {
+ return null;
+ }
+ return pubAssessment.getPublishedAssessmentId();
+ }
+
+ @Override
+ public boolean equals (final Object obj) {
+ if(obj == this) return true; // test for reference equality
+ if(obj == null) return false; // test for null
+ if(obj instanceof ExtendedTime) {
+ final ExtendedTime other = (ExtendedTime) obj;
+ return new EqualsBuilder()
+ .append(assessment.getAssessmentBaseId(), other.assessment.getAssessmentBaseId())
+ .append(pubAssessment.getPublishedAssessmentId(), other.getPubAssessmentId())
+ .append(user, other.user)
+ .append(group, other.group)
+ .append(startDate, other.startDate)
+ .append(dueDate, other.dueDate)
+ .append(retractDate, other.retractDate)
+ .append(timeHours, other.timeHours)
+ .append(timeMinutes, other.timeMinutes)
+ .isEquals();
+ } else{
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode () {
+ return new HashCodeBuilder()
+ .append(assessment.getAssessmentBaseId())
+ .append(pubAssessment.getPublishedAssessmentId())
+ .append(user)
+ .append(group)
+ .append(startDate)
+ .append(dueDate)
+ .append(retractDate)
+ .append(timeHours)
+ .append(timeMinutes)
+ .toHashCode();
+ }
+}
diff --git a/samigo/samigo-impl/pom.xml b/samigo/samigo-impl/pom.xml
index 8f3957274e..dca4de107e 100644
--- a/samigo/samigo-impl/pom.xml
+++ b/samigo/samigo-impl/pom.xml
@@ -37,6 +37,10 @@
${project.groupId}
samigo-services
+
+ ${project.groupId}
+ samigo-hibernate
+
org.sakaiproject.message
sakai-message-api
diff --git a/samigo/samigo-pack/src/webapp/WEB-INF/components.xml b/samigo/samigo-pack/src/webapp/WEB-INF/components.xml
index 43febc4217..f08bd3deba 100644
--- a/samigo/samigo-pack/src/webapp/WEB-INF/components.xml
+++ b/samigo/samigo-pack/src/webapp/WEB-INF/components.xml
@@ -25,6 +25,7 @@
org/sakaiproject/tool/assessment/data/dao/grading/MediaData.hbm.xml
org/sakaiproject/tool/assessment/data/dao/authz/AuthorizationData.hbm.xml
org/sakaiproject/tool/assessment/data/dao/assessment/FavoriteColChoices.hbm.xml
+ org/sakaiproject/tool/assessment/data/dao/assessment/ExtendedTime.hbm.xml
@@ -54,6 +55,7 @@
+
true
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+ PROPAGATION_REQUIRED
+
+
+
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueries.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueries.java
index 12a52ae458..55c7370859 100644
--- a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueries.java
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueries.java
@@ -1,16 +1,11 @@
-
-/**********************************************************************************
- * $URL$
- * $Id$
- ***********************************************************************************
- *
- * Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 The Sakai Foundation
+/*
+ * Copyright (c) 2016, The Apereo Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.opensource.org/licenses/ECL-2.0
+ * http://opensource.org/licenses/ecl2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,8 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- **********************************************************************************/
-
+ */
package org.sakaiproject.tool.assessment.facade;
import java.io.File;
@@ -50,6 +44,7 @@
import java.util.TreeMap;
import java.util.TreeSet;
+import org.sakaiproject.tool.assessment.util.ExtendedTimeDeliveryService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.hibernate.Criteria;
@@ -74,11 +69,9 @@
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.exception.PermissionException;
import org.sakaiproject.exception.TypeException;
-import org.sakaiproject.samigo.util.SamigoConstants;
import org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService;
import org.sakaiproject.spring.SpringBeanLocator;
import org.sakaiproject.tool.assessment.data.dao.assessment.EvaluationModel;
-import org.sakaiproject.tool.assessment.data.dao.assessment.EventLogData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionData;
import org.sakaiproject.tool.assessment.data.dao.grading.AssessmentGradingAttachment;
@@ -104,12 +97,9 @@
import org.sakaiproject.tool.assessment.services.PersistenceHelper;
import org.sakaiproject.tool.assessment.services.assessment.EventLogService;
import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService;
-import org.sakaiproject.tool.assessment.util.ExtendedTimeService;
-import org.sakaiproject.tool.assessment.services.AutoSubmitAssessmentsJob;
import org.sakaiproject.user.api.UserDirectoryService;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
-import org.sakaiproject.event.cover.EventTrackingService;
import org.sakaiproject.exception.IdInvalidException;
import org.sakaiproject.exception.IdUsedException;
import org.sakaiproject.exception.InUseException;
@@ -3525,7 +3515,7 @@ public int autoSubmitAssessments() {
// SAM-1088 getting the assessment so we can check to see if last user attempt was after due date
PublishedAssessmentFacade assessment = (PublishedAssessmentFacade)publishedAssessmentService.getAssessment(adata.getPublishedAssessmentId());
Date dueDate = assessment.getAssessmentAccessControl().getDueDate();
- ExtendedTimeService assessmentExtended = new ExtendedTimeService(assessment,adata.getAgentId());
+ ExtendedTimeDeliveryService assessmentExtended = new ExtendedTimeDeliveryService(assessment, adata.getAgentId());
//If it has extended time, just continue for now, no method to tell if the time is passed
if (assessmentExtended.hasExtendedTime()) {
//If the due date or retract date hasn't passed yet, go on to the next one, don't consider it yet
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeFacade.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeFacade.java
new file mode 100644
index 0000000000..0b4c9c77da
--- /dev/null
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeFacade.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2016, The Apereo Foundation
+ *
+ * Licensed under the Educational Community License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://opensource.org/licenses/ecl2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.sakaiproject.tool.assessment.facade;
+
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.sakaiproject.tool.assessment.data.dao.assessment.ExtendedTime;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentBaseIfc;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.PublishedAssessmentIfc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Leonardo Canessa [lcanessa1 (at) udayton (dot) edu]
+ */
+@Slf4j
+public class ExtendedTimeFacade {
+ public void init() {
+ log.info("init");
+ }
+
+ public List getEntriesForAss (AssessmentBaseIfc ass) {
+ return getEntriesForX(ass, null);
+ }
+
+ public List getEntriesForPub (PublishedAssessmentIfc pub) {
+ return getEntriesForX(null, pub);
+ }
+
+ public ExtendedTime getEntryForPubAndUser (PublishedAssessmentIfc pub, String user) {
+ return extendedTimeQueries.getEntryForPubAndUser(pub, user);
+ }
+
+ public ExtendedTime getEntryForPubAndGroup (PublishedAssessmentIfc pub, String group) {
+ return extendedTimeQueries.getEntryForPubAndGroup(pub, group);
+ }
+
+ public void saveEntriesPub (PublishedAssessmentIfc p, List entries) {
+ saveExtendedTimeEntriesHelper(null, p, entries);
+ }
+
+ public void saveEntries (AssessmentFacade aFacade, List entries) {
+ saveExtendedTimeEntriesHelper(aFacade, null, entries);
+ }
+
+ public void copyEntriesToPub (PublishedAssessmentIfc pub, List entries) {
+ List publishedTimes = new ArrayList<>(entries.size());
+
+ for(ExtendedTime entry : entries) {
+ ExtendedTime pubEntry = new ExtendedTime(entry);
+
+ pubEntry.setAssessment(null);
+ pubEntry.setPubAssessment(pub);
+
+ publishedTimes.add(pubEntry);
+ }
+
+ saveEntriesPub(pub, publishedTimes);
+ }
+
+ private List getEntriesForX (AssessmentBaseIfc ass, PublishedAssessmentIfc pub) {
+ List results;
+ if(ass == null) {
+ results = extendedTimeQueries.getEntriesForPub(pub);
+ } else {
+ results = extendedTimeQueries.getEntriesForAss(ass);
+ }
+
+ if(results == null ) {
+ results = new ArrayList<>(0);
+ }
+ return results;
+ }
+
+ /**
+ * A Helper method to save extended time entries. The following must be true:
+ * ( assFacade != null || pubAssFac != null )
+ * @param assFacade
+ * @param p
+ * @param newExtendedTime
+ */
+ private void saveExtendedTimeEntriesHelper (AssessmentFacade assFacade, PublishedAssessmentIfc p, List newExtendedTime) {
+ List oldExtendedTime;
+ if(assFacade == null) {
+ oldExtendedTime = extendedTimeQueries.getEntriesForPub(p);
+ } else {
+ oldExtendedTime = extendedTimeQueries.getEntriesForAss(assFacade.getData());
+ }
+
+ List extraneousInOld = new ArrayList<>();
+ for(ExtendedTime old : oldExtendedTime) {
+ boolean matched = false;
+ for(ExtendedTime newET : newExtendedTime) {
+ if(old.getId().equals(newET.getId())) {
+ matched = true;
+ }
+ }
+
+ if(!matched) {
+ extraneousInOld.add(old);
+ }
+ }
+
+ for(ExtendedTime item : extraneousInOld) {
+ extendedTimeQueries.deleteEntry(item);
+ }
+
+ extendedTimeQueries.updateEntries(newExtendedTime);
+ }
+
+ @Setter
+ private ExtendedTimeQueriesAPI extendedTimeQueries;
+}
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeQueries.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeQueries.java
new file mode 100644
index 0000000000..6126ecac84
--- /dev/null
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeQueries.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2016, The Apereo Foundation
+ *
+ * Licensed under the Educational Community License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://opensource.org/licenses/ecl2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.sakaiproject.tool.assessment.facade;
+
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.type.ManyToOneType;
+import org.hibernate.type.StringType;
+import org.sakaiproject.tool.assessment.data.dao.assessment.ExtendedTime;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentBaseIfc;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.PublishedAssessmentIfc;
+import org.springframework.dao.DataAccessException;
+import org.springframework.orm.hibernate3.HibernateCallback;
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
+
+import java.util.List;
+
+/**
+ * @author Leonardo Canessa [lcanessa1 (at) udayton (dot) edu]
+ */
+@Slf4j
+public class ExtendedTimeQueries extends HibernateDaoSupport implements ExtendedTimeQueriesAPI {
+
+ /**
+ * init
+ */
+ public void init () {
+ log.info("init()");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List getEntriesForAss (AssessmentBaseIfc ass) {
+ log.debug("getEntriesForAss " + ass.getAssessmentBaseId());
+
+ try {
+ HibernateCallback hcb = (Session s) -> {
+ Query q = s.getNamedQuery(QUERY_GET_ENTRIES_FOR_ASSESSMENT);
+ q.setParameter(ASSESSMENT_ID, ass, new ManyToOneType(null, "org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentBaseData"));
+ return q.list();
+ };
+ return (List) getHibernateTemplate().execute(hcb);
+ } catch (DataAccessException e) {
+ log.error("Failed to get Extended TimeEntries for Assessment: " + ass.getAssessmentBaseId(), e);
+ return null;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List getEntriesForPub (PublishedAssessmentIfc pub) {
+ log.debug("getEntriesForPub " + pub.getPublishedAssessmentId());
+
+ try {
+ HibernateCallback hcb = (Session s) -> {
+ Query q = s.getNamedQuery(QUERY_GET_ENTRIES_FOR_PUBLISHED);
+ q.setParameter(PUBLISHED_ID, pub, new ManyToOneType(null, "org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentData"));
+ return q.list();
+ };
+
+ return (List) getHibernateTemplate().execute(hcb);
+ } catch (DataAccessException e) {
+ log.error("Failed to get Extended Time Entries for Published Assessment: " + pub.getPublishedAssessmentId(), e);
+ return null;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ExtendedTime getEntryForPubAndUser (PublishedAssessmentIfc pub, String userId) {
+ log.debug("getEntryForPubAndUser, pub: '" + pub.getPublishedAssessmentId() + "' User: " + userId);
+
+ return getPubAndX(QUERY_GET_ENTRY_FOR_PUB_N_USER, pub, USER_ID, userId);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ExtendedTime getEntryForPubAndGroup (PublishedAssessmentIfc pub, String groupId) {
+ log.debug("getEntryForPubAndGroup, pub: '" + pub.getPublishedAssessmentId() + "' group: " + groupId);
+
+ return getPubAndX(QUERY_GET_ENTRY_FOR_PUB_N_GROUP, pub, GROUP, groupId);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean updateEntry (ExtendedTime e) {
+ log.debug("updating entry assessment: '" + e.getAssessmentId() + "' pubId: '" + e.getPubAssessmentId() + "' user: '" + e.getUser() + "' group: " + e.getGroup());
+
+ try {
+ getHibernateTemplate().saveOrUpdate(e);
+ return true;
+ } catch (DataAccessException de) {
+ log.error("Error updating extended time entry" , de);
+ return false;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void updateEntries (List entries) {
+ entries.forEach(this::updateEntry);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean deleteEntry (final ExtendedTime e) {
+ log.debug("Removing ExtendedTime entry id: " + e.getId());
+
+ try {
+ getHibernateTemplate().delete(e);
+ return true;
+ } catch (DataAccessException de) {
+ log.error("Failed to delete extendedTime entry, id: " + e.getId() + ".", de);
+ return false;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private ExtendedTime getPubAndX (final String query, final PublishedAssessmentIfc pub, final String secondParam, final String secondParamValue) {
+ try{
+ HibernateCallback hcb = (Session s) -> {
+ Query q = s.getNamedQuery(query);
+ q.setParameter(PUBLISHED_ID, pub, new ManyToOneType(null, "org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentData"));
+ q.setParameter(secondParam, secondParamValue, new StringType());
+ return q.uniqueResult();
+ };
+
+ return (ExtendedTime) getHibernateTemplate().execute(hcb);
+ } catch (DataAccessException e) {
+ log.error("Failed to get extended time for pub: " + pub.getPublishedAssessmentId() + " and user/group: " + secondParamValue, e);
+ return null;
+ }
+ }
+}
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeQueriesAPI.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeQueriesAPI.java
new file mode 100644
index 0000000000..6602648ff0
--- /dev/null
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ExtendedTimeQueriesAPI.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2016, The Apereo Foundation
+ *
+ * Licensed under the Educational Community License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://opensource.org/licenses/ecl2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.sakaiproject.tool.assessment.facade;
+
+import org.sakaiproject.tool.assessment.data.dao.assessment.ExtendedTime;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentBaseIfc;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.PublishedAssessmentIfc;
+
+import java.util.List;
+
+/**
+ * @author Leonardo Canessa [lcanessa1 (at) udayton (dot) edu]
+ */
+public interface ExtendedTimeQueriesAPI {
+ // Hibernate Named Queries
+ String QUERY_GET_ENTRIES_FOR_ASSESSMENT = "getEntriesForAss";
+ String QUERY_GET_ENTRIES_FOR_PUBLISHED = "getEntriesForPub";
+ String QUERY_GET_ENTRY_FOR_PUB_N_USER = "getEntriesForPubNUser";
+ String QUERY_GET_ENTRY_FOR_PUB_N_GROUP = "getEntriesForPubNGroup";
+
+ // Hibernate Object Fields
+ String ASSESSMENT_ID = "assessmentId";
+ String PUBLISHED_ID = "publishedId";
+ String USER_ID = "userId";
+ String GROUP = "groupId";
+
+ /**
+ *
+ * @param ass
+ * @return
+ */
+ List getEntriesForAss (AssessmentBaseIfc ass);
+
+ /**
+ *
+ * @param pub
+ * @return
+ */
+ List getEntriesForPub (PublishedAssessmentIfc pub);
+
+ /**
+ *
+ * @param pub
+ * @param userId
+ * @return
+ */
+ ExtendedTime getEntryForPubAndUser (PublishedAssessmentIfc pub, String userId);
+
+ /**
+ *
+ * @param pub
+ * @param groupId
+ * @return
+ */
+ ExtendedTime getEntryForPubAndGroup (PublishedAssessmentIfc pub, String groupId);
+
+ /**
+ *
+ * @param e
+ * @return
+ */
+ boolean updateEntry (ExtendedTime e);
+
+ /**
+ *
+ * @param entries
+ * @return
+ */
+ void updateEntries (List entries);
+
+ /**
+ *
+ * @param e
+ * @return
+ */
+ boolean deleteEntry (ExtendedTime e);
+}
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java
index 9a2d949d8f..a9c9dc48e9 100644
--- a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java
@@ -53,43 +53,7 @@
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.cover.SiteService;
import org.sakaiproject.spring.SpringBeanLocator;
-import org.sakaiproject.tool.assessment.data.dao.assessment.Answer;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AnswerFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAccessControl;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentMetaData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.EvaluationModel;
-import org.sakaiproject.tool.assessment.data.dao.assessment.ItemAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.ItemData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.ItemFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.ItemMetaData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.ItemText;
-import org.sakaiproject.tool.assessment.data.dao.assessment.ItemTextAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAccessControl;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAnswer;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAnswerFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAttachmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedEvaluationModel;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemMetaData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemText;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemTextAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedMetaData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionMetaData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSecuredIPAddress;
-import org.sakaiproject.tool.assessment.data.dao.assessment.SectionAttachment;
-import org.sakaiproject.tool.assessment.data.dao.assessment.SectionData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.SectionMetaData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.SecuredIPAddress;
+import org.sakaiproject.tool.assessment.data.dao.assessment.*;
import org.sakaiproject.tool.assessment.data.dao.authz.AuthorizationData;
import org.sakaiproject.tool.assessment.data.dao.grading.AssessmentGradingData;
import org.sakaiproject.tool.assessment.data.dao.shared.TypeD;
@@ -705,7 +669,7 @@ public Long getPublishedAssessmentId(Long assessmentId) {
.find(
"from PublishedAssessmentData as p where p.assessmentId=? order by p.createdDate desc",
assessmentId);
- Long publishedId = Long.valueOf(0);
+ Long publishedId = 0L;
if (!list.isEmpty()) {
PublishedAssessmentData f = (PublishedAssessmentData) list.get(0);
publishedId = f.getPublishedAssessmentId();
@@ -929,7 +893,7 @@ public ArrayList getAllTakeableAssessments(String orderBy,
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
- q.setInteger(0, status.intValue());
+ q.setInteger(0, status);
return q.list();
};
};
@@ -1075,7 +1039,7 @@ public Object doInHibernate(Session session)
Query q = session
.createQuery("from PublishedAssessmentData as p where p.status=? order by p."
+ orderBy);
- q.setInteger(0, status.intValue());
+ q.setInteger(0, status);
return q.list();
};
};
@@ -1169,8 +1133,7 @@ private String getOrderBy(String sortString) {
}
public void deleteAllSecuredIP(PublishedAssessmentIfc assessment) {
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
Long assessmentId = assessment.getPublishedAssessmentId();
@@ -1203,8 +1166,7 @@ public void saveOrUpdate(PublishedAssessmentIfc assessment)
else
data = (PublishedAssessmentData) assessment;
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(data);
@@ -1234,7 +1196,7 @@ public ArrayList getBasicInfoOfAllActivePublishedAssessments(
//+ " and (z.agentIdString=:siteId or z.agentIdString in (:groupIds)) "
+ " and z.agentIdString=:siteId "
+ " order by p." + orderBy;
- if (ascending == true)
+ if (ascending)
query += " asc";
else
query += " desc";
@@ -1354,7 +1316,7 @@ public Object doInHibernate(Session session)
TreeMap groupsForSite = null;
String releaseToGroups;
String lastModifiedBy = "";
- AgentFacade agent = null;
+ AgentFacade agent;
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData p = (PublishedAssessmentData) list.get(i);
releaseToGroups = null;
@@ -1430,7 +1392,6 @@ public PublishedItemText loadPublishedItemText(Long itemTextId) {
*
* @param orderBy
* @param ascending
- * @param status
* @param siteId
* @return
*/
@@ -1650,8 +1611,7 @@ public HashMap getTotalSubmissionPerAssessment(String agentId) {
HashMap h = new HashMap();
for (int i = 0; i < l.size(); i++) {
AssessmentGradingData d = (AssessmentGradingData) l.get(i);
- h.put(d.getPublishedAssessmentId(), Integer.valueOf(d
- .getTotalSubmitted()));
+ h.put(d.getPublishedAssessmentId(), d.getTotalSubmitted());
log.debug("pId=" + d.getPublishedAssessmentId() + " submitted="
+ d.getTotalSubmitted());
}
@@ -1663,8 +1623,7 @@ public HashMap getTotalSubmissionPerAssessment(String agentId, String siteId) {
HashMap h = new HashMap();
for (int i = 0; i < l.size(); i++) {
AssessmentGradingData d = (AssessmentGradingData) l.get(i);
- h.put(d.getPublishedAssessmentId(), Integer.valueOf(d
- .getTotalSubmitted()));
+ h.put(d.getPublishedAssessmentId(), d.getTotalSubmitted());
log.debug("pId=" + d.getPublishedAssessmentId() + " submitted="
+ d.getTotalSubmitted());
}
@@ -1686,7 +1645,7 @@ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setBoolean(0, true);
- q.setLong(1, publishedAssessmentId.longValue());
+ q.setLong(1, publishedAssessmentId);
return q.list();
};
};
@@ -1706,7 +1665,7 @@ public Object doInHibernate(Session session)
Query q = session.createQuery(query);
q.setBoolean(0, true);
q.setString(1, agentId);
- q.setLong(2, publishedAssessmentId.longValue());
+ q.setLong(2, publishedAssessmentId);
return q.list();
};
};
@@ -1760,8 +1719,7 @@ public Object doInHibernate(Session session)
}
public void saveOrUpdateMetaData(PublishedMetaData meta) {
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(meta);
@@ -1875,7 +1833,7 @@ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString(0, title);
- q.setLong(1, assessmentBaseId.longValue());
+ q.setLong(1, assessmentBaseId);
q.setInteger(2, 2);
q.setString(3, "OWN_PUBLISHED_ASSESSMENT");
q.setString(4, currentSiteId);
@@ -1906,7 +1864,7 @@ public boolean hasRandomPart(final Long publishedAssessmentId) {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
- q.setLong(0, publishedAssessmentId.longValue());
+ q.setLong(0, publishedAssessmentId);
q.setString(1, key);
q.setString(2, value);
return q.list();
@@ -1959,7 +1917,7 @@ public PublishedItemData getFirstPublishedItem(
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
- q.setLong(0, publishedAssessmentId.longValue());
+ q.setLong(0, publishedAssessmentId);
return q.list();
};
};
@@ -1975,7 +1933,7 @@ public Object doInHibernate(Session session)
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query2);
- q.setLong(0, publishedAssessmentId.longValue());
+ q.setLong(0, publishedAssessmentId);
//q.setString(1, key);
//q.setString(2, value);
return q.list();
@@ -2015,7 +1973,7 @@ public Object doInHibernate(Session session)
.createQuery("select i.itemId from PublishedItemData i, PublishedSectionData s, "
+ " PublishedAssessmentData p where p.publishedAssessmentId=? and "
+ " p = s.assessment and i.section = s");
- q.setLong(0, publishedAssessmentId.longValue());
+ q.setLong(0, publishedAssessmentId);
return q.list();
};
};
@@ -2038,8 +1996,8 @@ public Object doInHibernate(Session session)
.createQuery("select i from PublishedItemData i, PublishedSectionData s, "
+ " PublishedAssessmentData p where p.publishedAssessmentId=? "
+ " and i.section.id=? and p = s.assessment and i.section = s");
- q.setLong(0, publishedAssessmentId.longValue());
- q.setLong(1, sectionId.longValue());
+ q.setLong(0, publishedAssessmentId);
+ q.setLong(1, sectionId);
return q.list();
};
};
@@ -2064,7 +2022,7 @@ public Long getItemType(final Long publishedItemId) {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
- q.setLong(0, publishedItemId.longValue());
+ q.setLong(0, publishedItemId);
return q.list();
};
};
@@ -2101,8 +2059,7 @@ public void delete(PublishedAssessmentIfc assessment) {
else
data = (PublishedAssessmentData) assessment;
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
getHibernateTemplate().delete(data);
@@ -2156,8 +2113,8 @@ public boolean isRandomDrawPart(final Long publishedAssessmentId,
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
- q.setLong(0, publishedAssessmentId.longValue());
- q.setLong(1, sectionId.longValue());
+ q.setLong(0, publishedAssessmentId);
+ q.setLong(1, sectionId);
q.setString(2, key);
q.setString(3, value);
return q.list();
@@ -2407,7 +2364,7 @@ public PublishedAssessmentData getBasicInfoOfPublishedAssessment(
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
- q.setLong(0, publishedId.longValue());
+ q.setLong(0, publishedId);
return q.list();
};
};
@@ -2448,21 +2405,6 @@ public String getPublishedAssessmentSiteId(String publishedAssessmentId) {
public Integer getPublishedItemCount(final Long publishedAssessmentId) {
return getPublishedItemCountForNonRandomSections(publishedAssessmentId) +
getPublishedItemCountForRandomSections(publishedAssessmentId);
-/*
- final HibernateCallback hcb = new HibernateCallback() {
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException {
- Query q = session
- .createQuery("select count(i) from PublishedItemData i, PublishedSectionData s, "
- + " PublishedAssessmentData p where p.publishedAssessmentId=? and "
- + " p = s.assessment and i.section = s");
- q.setLong(0, publishedAssessmentId.longValue());
- return q.list();
- };
- };
- List list = getHibernateTemplate().executeFind(hcb);
- return (Integer) list.get(0);
-*/
}
/**
@@ -2478,7 +2420,7 @@ public Object doInHibernate(Session session)
+ " PublishedAssessmentData p, PublishedSectionMetaData m "
+ " where p.publishedAssessmentId=:publishedAssessmentId and m.label=:metaDataLabel and "
+ " p = s.assessment and m.section = s ");
- q.setLong("publishedAssessmentId", publishedAssessmentId.longValue());
+ q.setLong("publishedAssessmentId", publishedAssessmentId);
q.setString("metaDataLabel", SectionDataIfc.NUM_QUESTIONS_DRAWN);
//q.setString("metaDataEntry", SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL.toString());
return q.list();
@@ -2509,10 +2451,9 @@ public Object doInHibernate(Session session)
+ " where p.publishedAssessmentId=:publishedAssessmentId and m.label=:metaDataLabel and "
+ " p = s.assessment and i.section = s and m.section = s and m.entry=:metaDataEntry ");
- q.setLong("publishedAssessmentId", publishedAssessmentId.longValue());
+ q.setLong("publishedAssessmentId", publishedAssessmentId);
q.setString("metaDataLabel", SectionDataIfc.AUTHOR_TYPE);
q.setString("metaDataEntry", SectionDataIfc.QUESTIONS_AUTHORED_ONE_BY_ONE.toString());
- //q.setLong(0, publishedAssessmentId.longValue());
return q.list();
};
};
@@ -2528,7 +2469,7 @@ public Object doInHibernate(Session session)
.createQuery("select count(s) from PublishedSectionData s, "
+ " PublishedAssessmentData p where p.publishedAssessmentId=? and "
+ " p = s.assessment");
- q.setLong(0, publishedAssessmentId.longValue());
+ q.setLong(0, publishedAssessmentId);
return q.list();
};
};
@@ -2548,13 +2489,10 @@ public PublishedAttachmentData getPublishedAttachmentData(Long attachmentId) {
public void updateAssessmentLastModifiedInfo(
PublishedAssessmentFacade publishedAssessmentFacade) {
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
AssessmentBaseIfc data = publishedAssessmentFacade.getData();
data.setLastModifiedBy(AgentFacade.getAgentString());
data.setLastModifiedDate(new Date());
- retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
getHibernateTemplate().update(data);
@@ -2568,8 +2506,7 @@ public void updateAssessmentLastModifiedInfo(
}
public void saveOrUpdateSection(SectionFacade section) {
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(section.getData());
@@ -2586,8 +2523,7 @@ public void removeItemAttachment(Long itemAttachmentId) {
PublishedItemAttachment itemAttachment = (PublishedItemAttachment) getHibernateTemplate()
.load(PublishedItemAttachment.class, itemAttachmentId);
ItemDataIfc item = itemAttachment.getItem();
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
if (item != null) { // need to dissociate with item before
@@ -2620,7 +2556,7 @@ public PublishedSectionFacade addSection(Long publishedAssessmentId) {
// #2 section has no default name - per Marc's new mockup
PublishedSectionData section = new PublishedSectionData(
null,
- Integer.valueOf(sectionSet.size() + 1), // NEXT section
+ sectionSet.size() + 1, // NEXT section
"", "", TypeD.DEFAULT_SECTION, SectionData.ACTIVE_STATUS,
AgentFacade.getAgentString(), new Date(), AgentFacade
.getAgentString(), new Date());
@@ -2634,8 +2570,7 @@ public PublishedSectionFacade addSection(Long publishedAssessmentId) {
SectionDataIfc.AS_LISTED_ON_ASSESSMENT_PAGE.toString());
sectionSet.add(section);
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(section);
@@ -2671,8 +2606,7 @@ public AssessmentAccessControlIfc loadPublishedAccessControl(
public void saveOrUpdatePublishedAccessControl(
AssessmentAccessControlIfc publishedAccessControl) {
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(publishedAccessControl);
@@ -2786,7 +2720,7 @@ private String getReleaseToGroupsAsString(TreeMap groupsForSite, Long assessment
*/
private TreeMap getGroupsForSite(String siteId){
TreeMap sortedGroups = new TreeMap();
- Site site = null;
+ Site site;
try {
site = SiteService.getSite(siteId);
Collection groups = site.getGroups();
@@ -2843,7 +2777,7 @@ public Integer getPublishedAssessmentStatus(Long publishedAssessmentId) {
return status;
} else {
// just set to AssessmentBaseIfc.DEAD_STATUS
- return Integer.valueOf(2);
+ return AssessmentBaseIfc.DEAD_STATUS;
}
}
@@ -2903,8 +2837,7 @@ public void removeAssessmentAttachment(Long assessmentAttachmentId) {
.load(PublishedAssessmentAttachment.class, assessmentAttachmentId);
AssessmentIfc assessment = assessmentAttachment.getAssessment();
// String resourceId = assessmentAttachment.getResourceId();
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
if (assessment != null) { // need to dissociate with
@@ -2976,8 +2909,7 @@ public void removeSectionAttachment(Long sectionAttachmentId) {
.load(PublishedSectionAttachment.class, sectionAttachmentId);
SectionDataIfc section = sectionAttachment.getSection();
// String resourceId = sectionAttachment.getResourceId();
- int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
- .intValue();
+ int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
while (retryCount > 0) {
try {
if (section != null) { // need to dissociate with section
@@ -3044,439 +2976,6 @@ public Object doInHibernate(Session session) throws HibernateException, SQLExcep
return getHibernateTemplate().executeFind(hcb);
}
- /**
- * return an array list of the AssessmentGradingData that a user has
- * submitted for grade. one per published assessment. If an assessment
- * allows multiple submissions and its grading option is to send highest,
- * then return only the submission with highest finalScore. If an assessment
- * allows multiple submissions and its grading option is to send last, then
- * return only the last submission.
- * @author Mustansar Mehmood mustansar@rice.edu
- * @param agentId
- * @param siteId
- * @return
- */
- /*
- public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(
- final String agentId, final String siteId) {
- // Get total no. of submission per assessment by the given agent
- // sorted by submittedData DESC
- final String last_query = "select new AssessmentGradingData("
- + " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
- + " a.submittedDate, a.isLate,"
- + " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
- + " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
- + " a.timeElapsed) "
- + " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
- + " where a.publishedAssessmentId = p.publishedAssessmentId"
- + " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
- + " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
- + " order by p.publishedAssessmentId DESC, a.submittedDate DESC";
-
- // Get total no. of submission per assessment by the given agent
- // sorted by finalScore DESC
-
- final String highest_query = "select new AssessmentGradingData("
- + " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
- + " a.submittedDate, a.isLate,"
- + " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
- + " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
- + " a.timeElapsed) "
- + " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
- + " where a.publishedAssessmentId = p.publishedAssessmentId"
- + " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
- + " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
- + " order by p.publishedAssessmentId DESC, a.finalScore DESC, a.submittedDate DESC";
-
- final HibernateCallback hcb_last = new HibernateCallback() {
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException {
- Query q = session.createQuery(last_query);
- q.setBoolean(0, true);
- q.setString(1, agentId);
- q.setString(2, siteId);
- q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
- return q.list();
- };
- };
-
- // this list is sorted by submittedDate desc.
- List last_list = getHibernateTemplate().executeFind(hcb_last);
-
- final HibernateCallback hcb_highest = new HibernateCallback() {
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException {
- Query q = session.createQuery(highest_query);
- q.setBoolean(0, true);
- q.setString(1, agentId);
- q.setString(2, siteId);
- q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
- return q.list();
- };
- };
-
- // this list is sorted by finalScore desc.
-
- List highest_list = getHibernateTemplate().executeFind(hcb_highest);
-
- //getEvaluationModel();
- String query = "select a.publishedAssessmentId, e.scoringType, ac.submissionsAllowed " +
- "from PublishedEvaluationModel e, PublishedAccessControl ac, PublishedAssessmentData a " +
- "where e.assessment.publishedAssessmentId = a.publishedAssessmentId " +
- "and ac.assessment.publishedAssessmentId = a.publishedAssessmentId ";
-
- List l = getHibernateTemplate().find(query);
- HashMap scoringTypeMap = new HashMap();
- HashMap subissionAllowedMap = new HashMap();
- Iterator iter = l.iterator();
- while (iter.hasNext()) {
- Object o[] = (Object[]) iter.next();
- scoringTypeMap.put(o[0], o[1]);
- subissionAllowedMap.put(o[0], o[2]);
- }
-
- // The sorting for each column will be done in the action listener.
- ArrayList assessmentList = new ArrayList();
- Long currentid = new Long("0");
- Integer scoringOption = EvaluationModelIfc.LAST_SCORE; // use Last as
- Integer submissionAllowed = null;
- boolean multiSubmissionAllowed = false;
-
- // now go through the last_list, and get the first entry in the list for
- // each publishedAssessment, if
- // not
-
- for (int i = 0; i < last_list.size(); i++) {
- AssessmentGradingData a = (AssessmentGradingData) last_list.get(i);
-
- // get the scoring option
- if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
- scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
- }
- else {
- // I use Last as default because it is what set above
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
- submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
- }
- else {
- submissionAllowed = null;
- }
- if (submissionAllowed != null) {
- if (submissionAllowed.intValue() == 1) {
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- }
-
-
- if (EvaluationModelIfc.LAST_SCORE.equals(scoringOption) && !a.getPublishedAssessmentId().equals(currentid)) {
- currentid = a.getPublishedAssessmentId();
- AssessmentGradingData f = new AssessmentGradingData(a);
- assessmentList.add(f);
- }
-
- }
-
- // now go through the highest_list ,and get the first entry in the list
- // for each publishedAssessment.
-
- for (int i = 0; i < highest_list.size(); i++) {
- AssessmentGradingData a = (AssessmentGradingData) highest_list
- .get(i);
-
- // get the scoring option
- if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
- scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
- }
- else {
- // I use Last as default because it is what set above
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
- submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
- }
- else {
- submissionAllowed = null;
- }
- if (submissionAllowed != null) {
- if (submissionAllowed.intValue() > 1) {
- multiSubmissionAllowed = true;
- }
- else {
- multiSubmissionAllowed = false;
- }
- }
- else {
- multiSubmissionAllowed = true;
- }
-
- if ((multiSubmissionAllowed)
- && (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption))
- && (!a.getPublishedAssessmentId().equals(currentid))) {
- currentid = a.getPublishedAssessmentId();
- AssessmentGradingData f = new AssessmentGradingData(a);
- assessmentList.add(f);
- }
-
- }
- //*assessments with average grades
-
- for (int i = 0; i < highest_list.size(); i++) {
- AssessmentGradingData a = (AssessmentGradingData) highest_list.get(i);
-
- // get the scoring option
- if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
- scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
- }
- else {
- // I use Last as default because it is what set above --mustansar
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
- submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
- }
- else {
- submissionAllowed = null;
- }
- if (submissionAllowed != null) {
- if (submissionAllowed.intValue() > 1) {
- multiSubmissionAllowed = true;
- }
- else {
- multiSubmissionAllowed = false;
- }
- }
- else {
- multiSubmissionAllowed = true;
- }
-
- if ((multiSubmissionAllowed)
- && (EvaluationModelIfc.AVERAGE_SCORE.equals(scoringOption))
- && (!a.getPublishedAssessmentId().equals(currentid))) {
- currentid = a.getPublishedAssessmentId();
-
- AssessmentGradingData f = new AssessmentGradingData(a);
- assessmentList.add(f);
- }
-
- }
- //end of finding assessments with average grades
- //return assessmentList;
- return null;
- }
- */
-
- /**
- * return an array list of the AssessmentGradingData that a user has
- * submitted for grade. one per published assessment. If an assessment
- * allows multiple submissions and its grading option is to send highest,
- * then return only the submission with highest finalScore. If an assessment
- * allows multiple submissions and its grading option is to send last, then
- * return only the last submission.
- * @author Mustansar Mehmood mustansar@rice.edu
- * @param agentId
- * @param siteId
- * @param allAssessments
- * @return
- */
- /*
- public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(
- final String agentId, final String siteId, boolean allAssessments) {
- // Get total no. of submission per assessment by the given agent
- // sorted by submittedData DESC
- final String last_query = "select new AssessmentGradingData("
- + " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
- + " a.submittedDate, a.isLate,"
- + " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
- + " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
- + " a.timeElapsed) "
- + " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
- + " where a.publishedAssessmentId = p.publishedAssessmentId"
- + " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
- + " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
- + " order by p.publishedAssessmentId DESC, a.submittedDate DESC";
-
- // Get total no. of submission per assessment by the given agent
- // sorted by finalScore DESC
-
- final String highest_query = "select new AssessmentGradingData("
- + " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
- + " a.submittedDate, a.isLate,"
- + " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
- + " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
- + " a.timeElapsed) "
- + " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
- + " where a.publishedAssessmentId = p.publishedAssessmentId"
- + " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
- + " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
- + " order by p.publishedAssessmentId DESC, a.finalScore DESC, a.submittedDate DESC";
-
- final HibernateCallback hcb_last = new HibernateCallback() {
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException {
- Query q = session.createQuery(last_query);
- q.setBoolean(0, true);
- q.setString(1, agentId);
- q.setString(2, siteId);
- q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
- return q.list();
- };
- };
-
- // this list is sorted by submittedDate desc.
- List last_list = getHibernateTemplate().executeFind(hcb_last);
-
- final HibernateCallback hcb_highest = new HibernateCallback() {
- public Object doInHibernate(Session session)throws HibernateException, SQLException {
- Query q = session.createQuery(highest_query);
- q.setBoolean(0, true);
- q.setString(1, agentId);
- q.setString(2, siteId);
- q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
- return q.list();
- };
- };
-
- // this list is sorted by finalScore desc.
- List highest_list = getHibernateTemplate().executeFind(hcb_highest);
- String query = "select a.publishedAssessmentId, e.scoringType, ac.submissionsAllowed "
- + "from PublishedEvaluationModel e, PublishedAccessControl ac, PublishedAssessmentData a "
- + "where e.assessment.publishedAssessmentId = a.publishedAssessmentId "
- + "and ac.assessment.publishedAssessmentId = a.publishedAssessmentId ";
-
- List l = getHibernateTemplate().find(query);
- HashMap scoringTypeMap = new HashMap();
- HashMap subissionAllowedMap = new HashMap();
- Iterator iter = l.iterator();
- while (iter.hasNext()) {
- Object o[] = (Object[]) iter.next();
- scoringTypeMap.put(o[0], o[1]);
- subissionAllowedMap.put(o[0], o[2]);
- }
- // The sorting for each column will be done in the action listener.
- ArrayList assessmentList = new ArrayList();
- Long currentid = new Long("0");
- Integer scoringOption = EvaluationModelIfc.LAST_SCORE; // use Last as defaut
- Integer submissionAllowed = null;
- boolean multiSubmissionAllowed = false;
-
- // now go through the last_list, and get the first entry in the list for
- // each publishedAssessment, if not
-
- for (int i = 0; i < last_list.size(); i++) {
- AssessmentGradingData a = (AssessmentGradingData) last_list.get(i);
-
- // get the scoring option
- if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
- scoringOption = (Integer) scoringTypeMap.get(a
- .getPublishedAssessmentId());
- } else {
- // I use Last as default because it is what set above
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
- submissionAllowed = (Integer) subissionAllowedMap.get(a
- .getPublishedAssessmentId());
- } else {
- submissionAllowed = null;
- }
- if (submissionAllowed != null) {
- if (submissionAllowed.intValue() == 1) {
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- }
- if (EvaluationModelIfc.LAST_SCORE.equals(scoringOption)
- && (!a.getPublishedAssessmentId().equals(currentid)
- || allAssessments)) {
- currentid = a.getPublishedAssessmentId();
- AssessmentGradingData f = new AssessmentGradingData(a);
- assessmentList.add(f);
- }
-
- }
-
- // now go through the highest_list ,and get the first entry in the list
- // for each publishedAssessment.
-
- for (int i = 0; i < highest_list.size(); i++) {
- AssessmentGradingData a = (AssessmentGradingData) highest_list.get(i);
-
- // get the scoring option
- if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
- scoringOption = (Integer) scoringTypeMap.get(a
- .getPublishedAssessmentId());
- } else {
- // I use Last as default because it is what set above
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
- submissionAllowed = (Integer) subissionAllowedMap.get(a
- .getPublishedAssessmentId());
- } else {
- submissionAllowed = null;
- }
- if (submissionAllowed != null) {
- if (submissionAllowed.intValue() > 1) {
- multiSubmissionAllowed = true;
- } else {
- multiSubmissionAllowed = false;
- }
- } else {
- multiSubmissionAllowed = true;
- }
-
- if ((multiSubmissionAllowed)
- && (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption))
- && ((!a.getPublishedAssessmentId().equals(currentid))
- || allAssessments)) {
- currentid = a.getPublishedAssessmentId();
- AssessmentGradingData f = new AssessmentGradingData(a);
- assessmentList.add(f);
- }
- }
-
- // assessments with average grades
-
- for (int i = 0; i < last_list.size(); i++) {
- AssessmentGradingData a = (AssessmentGradingData) last_list.get(i);
- // get the scoring option
- if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
- scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
- } else {
- // I use Last as default because it is what set above
- // --mustansar
- scoringOption = EvaluationModelIfc.LAST_SCORE;
- }
- if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
- submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
- } else {
- submissionAllowed = null;
- }
- if (submissionAllowed != null) {
- if (submissionAllowed.intValue() > 1) {
- multiSubmissionAllowed = true;
- } else {
- multiSubmissionAllowed = false;
- }
- } else {
- multiSubmissionAllowed = true;
- }
- if (
- (multiSubmissionAllowed)
- && (EvaluationModelIfc.AVERAGE_SCORE.equals(scoringOption))&& (!a.getPublishedAssessmentId().equals(currentid)|| allAssessments)) {
- currentid = a.getPublishedAssessmentId();
- AssessmentGradingData f = new AssessmentGradingData(a);
- assessmentList.add(f);
- }
- }
-
- // end of finding assessments with average grades
-
- return assessmentList;
- }
- */
-
/**
* Replaces embedded site ids for Items.
* Helper method for replaceEmbeddedSiteIds(); handles the question (item) level. This
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java
index 929cbe62ed..a365936e44 100644
--- a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java
@@ -29,20 +29,7 @@
import java.util.TreeMap;
import java.util.Collection;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAccessControl;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.EvaluationModel;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAccessControl;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAnswer;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAttachmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedEvaluationModel;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedFeedback;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemText;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedMetaData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionData;
+import org.sakaiproject.tool.assessment.data.dao.assessment.*;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAttachmentIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AttachmentIfc;
@@ -139,72 +126,11 @@ public Set preparePublishedAnswerFeedbackSet(PublishedAnswer publishedAnswer,
public ArrayList getAllTakeableAssessments(String orderBy, boolean ascending,
Integer status);
- /**
- public ArrayList getAllPublishedAssessmentId() {
-
- ArrayList list = getBasicInfoOfAllActivePublishedAssessments("title", true);
- ArrayList publishedIds = new ArrayList();
- for (int i = 0; i < list.size(); i++) {
- PublishedAssessmentFacade f = (PublishedAssessmentFacade) list.get(i);
- Long publishedId = f.getPublishedAssessmentId();
- publishedIds.add(publishedId);
- }
- return publishedIds;
-
- }
- */
-
public Integer getNumberOfSubmissions(String publishedAssessmentId,
String agentId);
public List getNumberOfSubmissionsOfAllAssessmentsByAgent(String agentId);
- /**
- public ArrayList getAllReviewableAssessments(String orderBy,
- boolean ascending) {
-
- ArrayList publishedIds = getAllPublishedAssessmentId();
- ArrayList newlist = new ArrayList();
- for (int i = 0; i < publishedIds.size(); i++) {
- String publishedId = ( (Long) publishedIds.get(i)).toString();
- String query = "from AssessmentGradingData a where a.publishedAssessment.publishedAssessmentId=? order by agentId ASC," +
- orderBy;
- if (ascending) {
- query += " asc,";
- }
- else {
- query += " desc,";
- }
- query += "submittedDate DESC";
- List list = getHibernateTemplate().find(query, new Long(publishedId),
- Hibernate.LONG);
- if (!list.isEmpty()) {
- Iterator items = list.iterator();
- String agentid = null;
- AssessmentGradingData data = (AssessmentGradingData) items.next();
- agentid = data.getAgentId();
- newlist.add(data);
- while (items.hasNext()) {
- while (items.hasNext()) {
- data = (AssessmentGradingData) items.next();
- if (!data.getAgentId().equals(agentid)) {
- agentid = data.getAgentId();
- newlist.add(data);
- break;
- }
- }
- }
- }
- }
- ArrayList assessmentList = new ArrayList();
- for (int i = 0; i < newlist.size(); i++) {
- AssessmentGradingData a = (AssessmentGradingData) newlist.get(i);
- AssessmentGradingFacade f = new AssessmentGradingFacade(a);
- assessmentList.add(f);
- }
- return assessmentList;
- }
- */
public ArrayList getAllPublishedAssessments(String sortString);
public ArrayList getAllPublishedAssessments(String sortString, Integer status);
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/PersistenceService.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/PersistenceService.java
index c2e1b1cc31..54feff77f5 100644
--- a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/PersistenceService.java
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/PersistenceService.java
@@ -26,18 +26,7 @@
import org.slf4j.LoggerFactory;
import org.sakaiproject.component.cover.ComponentManager;
import org.sakaiproject.section.api.SectionAwareness;
-import org.sakaiproject.tool.assessment.facade.AssessmentFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.AssessmentGradingFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.AuthzQueriesFacadeAPI;
-import org.sakaiproject.tool.assessment.facade.FavoriteColChoicesFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.EventLogFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.ItemFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.PublishedAssessmentFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.PublishedItemFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.PublishedSectionFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.QuestionPoolFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.SectionFacadeQueriesAPI;
-import org.sakaiproject.tool.assessment.facade.TypeFacadeQueriesAPI;
+import org.sakaiproject.tool.assessment.facade.*;
import org.sakaiproject.tool.assessment.facade.authz.AuthorizationFacadeQueriesAPI;
import org.sakaiproject.tool.assessment.facade.util.PagingUtilQueriesAPI;
import org.sakaiproject.tool.assessment.facade.util.autosubmit.AutoSubmitQueriesAPI;
@@ -67,6 +56,7 @@ public class PersistenceService{
private SectionAwareness sectionAwareness;
private FavoriteColChoicesFacadeQueriesAPI favoriteColChoicesFacadeQueries;
private PersistenceHelper persistenceHelper;
+ private ExtendedTimeFacade extendedTimeFacade;
private EventLogFacadeQueriesAPI eventLogFacadeQueries;
@@ -262,6 +252,14 @@ public void setFavoriteColChoicesFacadeQueries(FavoriteColChoicesFacadeQueriesAP
public FavoriteColChoicesFacadeQueriesAPI getFavoriteColChoicesFacadeQueries(){
return favoriteColChoicesFacadeQueries;
}
+
+ public void setExtendedTimeFacade(ExtendedTimeFacade extendedTimeFacade) {
+ this.extendedTimeFacade = extendedTimeFacade;
+ }
+
+ public ExtendedTimeFacade getExtendedTimeFacade() {
+ return extendedTimeFacade;
+ }
}
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/PublishedAssessmentService.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/PublishedAssessmentService.java
index 91ad3e3bd1..fb38f15026 100644
--- a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/PublishedAssessmentService.java
+++ b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/PublishedAssessmentService.java
@@ -1,15 +1,11 @@
-/**********************************************************************************
- * $URL$
- * $Id$
- ***********************************************************************************
- *
- * Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 The Sakai Foundation
+/*
+ * Copyright (c) 2016, The Apereo Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.opensource.org/licenses/ECL-2.0
+ * http://opensource.org/licenses/ecl2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- **********************************************************************************/
+ */
package org.sakaiproject.tool.assessment.services.assessment;
@@ -33,12 +29,7 @@
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAccessControl;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAttachmentData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemData;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemText;
-import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedMetaData;
+import org.sakaiproject.tool.assessment.data.dao.assessment.*;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AnswerIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAccessControlIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAttachmentIfc;
@@ -96,47 +87,6 @@ public ArrayList getBasicInfoOfAllPublishedAssessments2(String orderBy,
getBasicInfoOfAllPublishedAssessments2(orderBy, ascending, siteId);
}
-/**
- public ArrayList getAllReviewableAssessments(String agentId, String orderBy,
- boolean ascending) {
-
- // 1. get total no. of submission per assessment by the given agent
- HashMap h = getTotalSubmissionPerAssessment(agentId);
-
- ArrayList assessmentList = PersistenceService.getInstance().
- getPublishedAssessmentFacadeQueries().
- getAllReviewableAssessments(orderBy, ascending);
- assessmentList.size());
- ArrayList reviewableAssessmentList = new ArrayList();
- for (int i = 0; i < assessmentList.size(); i++) {
- AssessmentGradingFacade f = (AssessmentGradingFacade) assessmentList.get(
- i);
-
- Integer NumberOfSubmissions = (Integer) h.get(
- f.getPublishedAssessment().getPublishedAssessmentId());
- if (NumberOfSubmissions == null) {
- NumberOfSubmissions = new Integer(0);
- }
- try {
- if (!PersistenceService.getInstance().getAuthzQueriesFacade().isAuthorized(null, "VIEW_PUBLISHED_ASSESSMENT",
- f.getPublishedAssessment().
- getPublishedAssessmentId().
- toString())) {
- break;
- }
- }
- catch (Exception e1) {
- log.fatal("Wrapping Error around unhandled Exception: "
- + e1.getMessage());
- throw new RuntimeException(e1.getMessage());
- }
- // for testing only
- reviewableAssessmentList.add(f);
- }
- return reviewableAssessmentList;
- }
-*/
-
public ArrayList getAllActivePublishedAssessments(String orderBy) {
return getAllPublishedAssessments(orderBy,
PublishedAssessmentFacade.ACTIVE_STATUS);
@@ -449,7 +399,7 @@ public Long getItemType(String publishedItemId){
}
public HashMap preparePublishedItemTextHash(PublishedAssessmentIfc publishedAssessment){
- HashMap map = new HashMap();
+ HashMap map = new HashMap<>();
List sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i preparePublishedItemTextHash(PublishedAssessme
}
public HashMap preparePublishedItemHash(PublishedAssessmentIfc publishedAssessment){
- HashMap map = new HashMap();
+ HashMap map = new HashMap<>();
List sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i preparePublishedItemHash(PublishedAssessmentIf
}
public HashMap preparePublishedAnswerHash(PublishedAssessmentIfc publishedAssessment){
- HashMap map = new HashMap();
+ HashMap map = new HashMap<>();
ArrayList sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i preparePublishedAnswerHash(PublishedAssessmentIf
}
public HashMap prepareFIBItemHash(PublishedAssessmentIfc publishedAssessment){
- HashMap map = new HashMap();
+ HashMap map = new HashMap<>();
ArrayList sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i prepareFIBItemHash(PublishedAssessmentIfc publ
}
public HashMap prepareFINItemHash(PublishedAssessmentIfc publishedAssessment){
- HashMap map = new HashMap();
+ HashMap map = new HashMap<>();
ArrayList sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i prepareFINItemHash(PublishedAssessmentIfc publ
*/
public Map prepareCalcQuestionItemHash(PublishedAssessmentIfc publishedAssessment){
// CALCULATED_QUESTION
- Map map = new HashMap();
+ Map map = new HashMap<>();
List sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i prepareCalcQuestionItemHash(PublishedAssessmentIfc
*/
public Map prepareImagQuestionItemHash(PublishedAssessmentIfc publishedAssessment){
// CALCULATED_QUESTION
- Map map = new HashMap();
+ Map map = new HashMap<>();
List sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i prepareImagQuestionItemHash(PublishedAssessmentIfc
public HashMap prepareMCMRItemHash(PublishedAssessmentIfc publishedAssessment){
- HashMap map = new HashMap();
+ HashMap map = new HashMap<>();
ArrayList sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i prepareMCMRItemHash(PublishedAssessmentIfc pub
}
public HashMap prepareEMIItemHash(PublishedAssessmentIfc publishedAssessment){
- HashMap map = new HashMap();
+ HashMap map = new HashMap<>();
List extends SectionDataIfc> sectionArray = publishedAssessment.getSectionArray();
for (int i=0;i extendedTimes = extendedTimeFacade.getEntriesForPub(pubData);
+ List groups = getGroups(extendedTimes);
+ String group = isUserInGroups(groups);
+
+ ExtendedTime extendedTime = extendedTimeFacade.getEntryForPubAndUser(pubData, agentId);
+ ExtendedTime groupExtendedTime = null;
+ if(!group.isEmpty()) {
+ groupExtendedTime = extendedTimeFacade.getEntryForPubAndGroup(pubData, group);
+ }
+
+ this.hasExtendedTime = (extendedTime != null || groupExtendedTime != null);
+ if (this.hasExtendedTime) {
+ ExtendedTime useMe;
+ if(extendedTime != null) {
+ useMe = extendedTime;
+ } else {
+ useMe = groupExtendedTime;
+ }
+
+ this.timeLimit = useMe.getTimeHours() * MINS_IN_HOUR * SECONDS_IN_MIN + useMe.getTimeMinutes() * SECONDS_IN_MIN;
+ this.startDate = useMe.getStartDate();
+ this.dueDate = useMe.getDueDate();
+ this.retractDate = useMe.getRetractDate();
+ } else {
+ this.timeLimit = 0;
+ this.startDate = publishedAssessment.getStartDate();
+ this.dueDate = publishedAssessment.getDueDate();
+ this.retractDate = publishedAssessment.getRetractDate();
+ }
+ }
+
+ private List getGroups(List extendedTimeList) {
+ List list = new ArrayList<>();
+ extendedTimeList.forEach(extendedTime -> {
+ if(!"".equals(extendedTime.getGroup())) {
+ list.add(extendedTime.getGroup());
+ }
+ });
+
+ return list;
+ }
+
+ // Depending on the scope the assessment info sometimes is not initialized.
+ private boolean assessmentInitialized(PublishedAssessmentFacade publishedAssessment) {
+ if (publishedAssessment == null) {
+ return false;
+ }
+ if (publishedAssessment.getStartDate() != null) {
+ return true;
+ }
+ if (publishedAssessment.getDueDate() != null) {
+ return true;
+ }
+ if (publishedAssessment.getRetractDate() != null) {
+ return true;
+ }
+
+ return publishedAssessment.getTimeLimit() != null;
+ }
+
+ private String isUserInGroups(List groups) {
+ String returnString = "";
+ if(groups != null && !groups.isEmpty()) {
+ for(String group : groups) {
+ if(isUserInGroup(group)) {
+ returnString = group;
+ }
+ }
+ }
+
+ return returnString;
+ }
+
+ private boolean isUserInGroup(String groupId) {
+ String realmId = "/site/" + siteId + "/group/" + groupId;
+ boolean isMember = false;
+ try {
+ AuthzGroup group = authzGroupService.getAuthzGroup(realmId);
+ if (group.getUserRole(AgentFacade.getAgentString()) != null)
+ isMember = true;
+ } catch (Exception e) {
+ return false; // this isn't a group
+ }
+ return isMember;
+ }
+
+ public Integer getTimeLimit() {
+ return timeLimit;
+ }
+
+ public void setTimeLimit(Integer timeLimit) {
+ this.timeLimit = timeLimit;
+ }
+
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(Date startDate) {
+ this.startDate = startDate;
+ }
+
+ public Date getDueDate() {
+ return dueDate;
+ }
+
+ public void setDueDate(Date dueDate) {
+ this.dueDate = dueDate;
+ }
+
+ public Date getRetractDate() {
+ return retractDate;
+ }
+
+ public void setRetractDate(Date retractDate) {
+ this.retractDate = retractDate;
+ }
+
+ public boolean hasExtendedTime() {
+ return hasExtendedTime;
+ }
+
+ public void setHasExtendedTime(boolean hasExtendedTime) {
+ this.hasExtendedTime = hasExtendedTime;
+ }
+}
\ No newline at end of file
diff --git a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/util/ExtendedTimeService.java b/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/util/ExtendedTimeService.java
deleted file mode 100644
index c6303aedc5..0000000000
--- a/samigo/samigo-services/src/java/org/sakaiproject/tool/assessment/util/ExtendedTimeService.java
+++ /dev/null
@@ -1,262 +0,0 @@
-package org.sakaiproject.tool.assessment.util;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.sakaiproject.authz.api.AuthzGroup;
-import org.sakaiproject.authz.api.AuthzGroupService;
-import org.sakaiproject.component.cover.ComponentManager;
-import org.sakaiproject.tool.assessment.facade.AgentFacade;
-import org.sakaiproject.tool.assessment.facade.PublishedAssessmentFacade;
-import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService;
-import org.sakaiproject.time.cover.TimeService;
-
-/**
- * This class will instantiate with all the proper values for the current user's
- * extended time values for the given published assessment.
- *
- * @author pdagnall1
- *
- */
-public class ExtendedTimeService {
-
- private static String EXTENDED_TIME_KEY = "extendedTime";
- private static String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
- private String siteId;
- private AuthzGroupService authzGroupService;
-
- private boolean hasExtendedTime;
- private Integer timeLimit;
- private Date startDate;
- private Date dueDate;
- private Date retractDate;
- private String metaString; // holds the extended time info for the current
- // user
-
- /**
- * Creates an ExtendedTimeService object using the userId in the agentFacade as the current user
- * @param publishedAssessment a published assessment object
- */
- public ExtendedTimeService(PublishedAssessmentFacade publishedAssessment) {
- this(publishedAssessment,AgentFacade.getAgentString());
-
- }
-
- /**
- * Creates an ExtendedTimeService object based on a specific agentId (userId)
- * @param publishedAssessment a published assessment object
- * @param agentId a specific userId to look up
- *
- */
- public ExtendedTimeService(PublishedAssessmentFacade publishedAssessment, String agentId) {
- PublishedAssessmentService publishedAssessmentService = new PublishedAssessmentService();
- if (!assessmentInitialized(publishedAssessment)) {
- PublishedAssessmentFacade metaPublishedAssessment = publishedAssessmentService
- .getPublishedAssessmentQuick(publishedAssessment.getPublishedAssessmentId().toString());
- publishedAssessment = metaPublishedAssessment;
- }
- authzGroupService = ComponentManager.get(AuthzGroupService.class);
-
- // Grab the site id from the publishedAssessment because the user may
- // not be in a site
- // if they're taking the test via url.
- String pubId = publishedAssessment.getPublishedAssessmentId().toString();
- siteId = publishedAssessmentService.getPublishedAssessmentSiteId(pubId);
-
- this.metaString = extractMetaString(publishedAssessment, agentId);
- this.hasExtendedTime = (metaString != null);
- if (this.hasExtendedTime) {
- this.timeLimit = extractExtendedTime();
- this.startDate = determineDate(1, publishedAssessment.getStartDate());
- this.dueDate = determineDate(2, publishedAssessment.getDueDate());
- this.retractDate = determineDate(3, publishedAssessment.getRetractDate());
- } else {
- this.timeLimit = 0;
- this.startDate = publishedAssessment.getStartDate();
- this.dueDate = publishedAssessment.getDueDate();
- this.retractDate = publishedAssessment.getRetractDate();
- }
- }
-
- // Depending on the scope the assessment info sometimes is not initialized.
- private boolean assessmentInitialized(PublishedAssessmentFacade publishedAssessment) {
- if (publishedAssessment == null)
- return false;
- if (publishedAssessment.getStartDate() != null)
- return true;
- if (publishedAssessment.getDueDate() != null)
- return true;
- if (publishedAssessment.getRetractDate() != null)
- return true;
- if (publishedAssessment.getTimeLimit() != null)
- return true;
- return false;
- }
-
- // This sets the metString that holds the extended time info for the user
- private String extractMetaString(PublishedAssessmentFacade publishedAssessment, String userId) {
- short itemNum = 1;
- String meta = null;
- String extendedTimeData = publishedAssessment.getAssessmentMetaDataByLabel(EXTENDED_TIME_KEY + itemNum);
- while ((extendedTimeData != null) && (!extendedTimeData.equals(""))) {
-
- String[] extendedTimeItems = extendedTimeData.split("[|]");
-
- // Get target user/group value
- String target = extendedTimeItems[0];
-
- // If it's a group determine if user is a member
- boolean isMember = isUserInGroup(target);
-
- if (target.equals(userId) || isMember) {
- meta = extendedTimeData;
- }
- itemNum++;
- extendedTimeData = publishedAssessment.getAssessmentMetaDataByLabel(EXTENDED_TIME_KEY + itemNum);
- }
- return meta;
- }
-
- /**
- * If this user has been assigned an extended time then we'll return the
- * time value. Otherwise we'll return null.
- *
- * @param delivery
- * @param publishedAssessment
- * @return
- */
- private int extractExtendedTime() {
- int extendedTime = 0;
- String[] extendedTimeItems = metaString.split("[|]");
- extendedTime = Integer.parseInt(extendedTimeItems[1]);
- return extendedTime;
- }
-
- /**
- * Return the default date unless there are extended time dates we should
- * use instead.
- *
- * @param dateType
- * - 1: Start Date, 2. Due Date 3. Retract Date
- * @param defaultDate
- * @return
- */
- private Date determineDate(int dateType, Date defaultDate) {
- Date xtDate = defaultDate;
-
- String[] extendedTimeItems = metaString.split("\\|", -1);
-
- // no entry means user has chosen not to override, use default
- if (extendedTimeItems.length < dateType + 2) { // check for no entry
- return defaultDate;
- }
-
- // blank entry means user wants no limit, except start always has to be defined
- String dateString = extendedTimeItems[dateType + 1];
- if (dateString == null || dateString.equals("")) { // check for blanks
- if (dateType == 1) // start
- return defaultDate;
- else
- return null;
- }
-
- return parseDate(dateString, xtDate);
- }
-
- private Date parseDate(String dateString, Date xtDate) {
- try {
- //xtDate = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa", Locale.ENGLISH).parse(dateString);
- xtDate = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH).parse(dateString);
- this.hasExtendedTime = true;
- } catch (ParseException e) {
- e.printStackTrace();
- }
- return xtDate;
- }
-
- private boolean isUserInGroup(String groupId) {
- String realmId = "/site/" + siteId + "/group/" + groupId;
- boolean isMember = false;
- try {
- AuthzGroup group = authzGroupService.getAuthzGroup(realmId);
- if (group.getUserRole(AgentFacade.getAgentString()) != null)
- isMember = true;
- } catch (Exception e) {
- return false; // this isn't a group
- }
- return isMember;
- }
-
- // convert extended time string between two time zones
-
- public static String convertZones(String times, TimeZone fromZone, TimeZone toZone) {
- if (times == null || times.equals("")) {
- return times;
- }
- String[] values = times.split("\\|", -1);
- String ret = values[0] + "|" + values[1];
- // if < 5, this is version with no dates, so nothing to convert
- if (values.length != 5) {
- return times;
- }
- for (int i = 2; i < 5; i++) {
- String timeString = values[i];
- if (!timeString.equals("")) {
- try {
- SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH);
- df.setTimeZone(fromZone);
- Date timeDate = df.parse(timeString);
- df.setTimeZone(toZone);
- timeString = df.format(timeDate);
- } catch (Exception e) {
- // leaves string alone
- }
- }
- ret += "|" + timeString;
- }
- return ret;
- }
-
- public Integer getTimeLimit() {
- return timeLimit;
- }
-
- public void setTimeLimit(Integer timeLimit) {
- this.timeLimit = timeLimit;
- }
-
- public Date getStartDate() {
- return startDate;
- }
-
- public void setStartDate(Date startDate) {
- this.startDate = startDate;
- }
-
- public Date getDueDate() {
- return dueDate;
- }
-
- public void setDueDate(Date dueDate) {
- this.dueDate = dueDate;
- }
-
- public Date getRetractDate() {
- return retractDate;
- }
-
- public void setRetractDate(Date retractDate) {
- this.retractDate = retractDate;
- }
-
- public boolean hasExtendedTime() {
- return hasExtendedTime;
- }
-
- public void setHasExtendedTime(boolean hasExtendedTime) {
- this.hasExtendedTime = hasExtendedTime;
- }
-}
\ No newline at end of file