diff --git a/src/main/java/org/olat/course/assessment/AssessmentManager.java b/src/main/java/org/olat/course/assessment/AssessmentManager.java index 1961a3a3a6f2289b751c4efbfb29daab592a0267..9605ad14c3f4eb4bef1127f495eb1e0db333642e 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentManager.java +++ b/src/main/java/org/olat/course/assessment/AssessmentManager.java @@ -194,7 +194,7 @@ public interface AssessmentManager { public Boolean getNodeFullyAssessed(CourseNode courseNode, Identity identity); - public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, String referenceSoftKey); + public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity); public AssessmentEntry createAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, ScoreEvaluation scoreEvaluation); diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java index b65a7e1d5201f6f3bd9fbc3532dd72dfd149b560..28d14c6ab48a3f24a660f7086df779b038b02eff 100644 --- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java @@ -84,6 +84,10 @@ public class CourseAssessmentManagerImpl implements AssessmentManager { private AssessmentEntry getOrCreate(Identity assessedIdentity, CourseNode courseNode) { return assessmentService.getOrCreateAssessmentEntry(assessedIdentity, null, cgm.getCourseEntry(), courseNode.getIdent(), courseNode.getReferencedRepositoryEntry()); } + + private AssessmentEntry getOrCreate(Identity assessedIdentity, String subIdent, RepositoryEntry referenceEntry) { + return assessmentService.getOrCreateAssessmentEntry(assessedIdentity, null, cgm.getCourseEntry(), subIdent, referenceEntry); + } @Override public List<AssessmentEntry> getAssessmentEntries(CourseNode courseNode) { @@ -91,8 +95,8 @@ public class CourseAssessmentManagerImpl implements AssessmentManager { } @Override - public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, String referenceSoftKey) { - return assessmentService.loadAssessmentEntry(assessedIdentity, cgm.getCourseEntry(), courseNode.getIdent(), referenceSoftKey); + public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity) { + return assessmentService.loadAssessmentEntry(assessedIdentity, cgm.getCourseEntry(), courseNode.getIdent()); } @Override @@ -243,8 +247,13 @@ public class CourseAssessmentManagerImpl implements AssessmentManager { Float score = scoreEvaluation.getScore(); Boolean passed = scoreEvaluation.getPassed(); Long assessmentId = scoreEvaluation.getAssessmentID(); - - AssessmentEntry assessmentEntry = getOrCreate(assessedIdentity, courseNode); + + String subIdent = courseNode.getIdent(); + RepositoryEntry referenceEntry = courseNode.getReferencedRepositoryEntry(); + AssessmentEntry assessmentEntry = getOrCreate(assessedIdentity, subIdent, referenceEntry); + if(referenceEntry != null && !referenceEntry.equals(assessmentEntry.getReferenceEntry())) { + assessmentEntry.setReferenceEntry(referenceEntry); + } if(score == null) { assessmentEntry.setScore(null); } else { diff --git a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java index aa5fd6a488ac2a1414a4b0c49be1b701c1c08063..e902d0c1074d91793c3e386c8cea06c855df0c29 100644 --- a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java +++ b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java @@ -333,14 +333,14 @@ public class BasicLTICourseNode extends AbstractAccessableCourseNode implements @Override public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); - return am.getAssessmentEntry(this, userCourseEnv.getIdentityEnvironment().getIdentity(), null); + return am.getAssessmentEntry(this, userCourseEnv.getIdentityEnvironment().getIdentity()); } @Override public AssessmentEvaluation getUserScoreEvaluation(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - AssessmentEntry entry = am.getAssessmentEntry(this, mySelf, null); + AssessmentEntry entry = am.getAssessmentEntry(this, mySelf); return getUserScoreEvaluation(entry) ; } diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java index b766decab563837c257ca3463071181ed7c366d7..86339eecdc4413f0b865476e868c9340a15b3834 100644 --- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java +++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java @@ -189,7 +189,7 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - return am.getAssessmentEntry(this, mySelf, null); + return am.getAssessmentEntry(this, mySelf); } /** diff --git a/src/main/java/org/olat/course/nodes/GTACourseNode.java b/src/main/java/org/olat/course/nodes/GTACourseNode.java index a93bf15b684a9edcb04b48f7f414219b8e1270be..1689d5de0d29bb816bb3eab356bd5167bc0b10c5 100644 --- a/src/main/java/org/olat/course/nodes/GTACourseNode.java +++ b/src/main/java/org/olat/course/nodes/GTACourseNode.java @@ -900,7 +900,7 @@ public class GTACourseNode extends AbstractAccessableCourseNode implements Persi public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - return am.getAssessmentEntry(this, mySelf, null); + return am.getAssessmentEntry(this, mySelf); } @Override diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java index 57515d61333fbbcdb68d41ea314cf96c55df63ba..2aacca850d8a5c730cf4fc0734aad370fc21b999 100644 --- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java +++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java @@ -366,7 +366,7 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe // read score from properties save score, passed and attempts information AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - AssessmentEntry entry = am.getAssessmentEntry(this, mySelf, getRepositoryEntrySoftKey()); + AssessmentEntry entry = am.getAssessmentEntry(this, mySelf); Boolean passed = null; Float score = null; @@ -405,7 +405,7 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); if(getRepositoryEntrySoftKey() != null) { - return am.getAssessmentEntry(this, mySelf, getRepositoryEntrySoftKey()); + return am.getAssessmentEntry(this, mySelf); } return null; } diff --git a/src/main/java/org/olat/course/nodes/MSCourseNode.java b/src/main/java/org/olat/course/nodes/MSCourseNode.java index 47219453d630a7e046fbfff703d020abfff7b4e1..51e4a682b8209f925e2491bdf563e9a23b77410d 100644 --- a/src/main/java/org/olat/course/nodes/MSCourseNode.java +++ b/src/main/java/org/olat/course/nodes/MSCourseNode.java @@ -230,7 +230,7 @@ public class MSCourseNode extends AbstractAccessableCourseNode implements Persis public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - return am.getAssessmentEntry(this, mySelf, null); + return am.getAssessmentEntry(this, mySelf); } /** diff --git a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java index 829117a0ca7a8a381df1eca7aa9d5737f1dc6a2a..ea22bde3c4ddca9e9f429ad9fb18d20cd047f2e2 100644 --- a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java +++ b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java @@ -392,7 +392,7 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode implements } if(referenceSoftkey != null) { - return am.getAssessmentEntry(this, mySelf, referenceSoftkey); + return am.getAssessmentEntry(this, mySelf); } return null; } diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java index 9c87b6ce12cceb6d2bce67b5591b092be1f60fa8..15c82e36c271c3242542d60cd46a5c54cd827739 100644 --- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java @@ -481,7 +481,7 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Persis public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - return am.getAssessmentEntry(this, mySelf, null); + return am.getAssessmentEntry(this, mySelf); } @Override diff --git a/src/main/java/org/olat/course/nodes/ScormCourseNode.java b/src/main/java/org/olat/course/nodes/ScormCourseNode.java index fbfc1f5568aef4929d0ae10abeb36a5d3652bbec..3f998bcec49d3cc016d96fd928adbda4478a98c0 100644 --- a/src/main/java/org/olat/course/nodes/ScormCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ScormCourseNode.java @@ -383,10 +383,7 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Per public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - if(getReferencedRepositoryEntrySoftkey() != null) { - return am.getAssessmentEntry(this, mySelf, getReferencedRepositoryEntrySoftkey()); - } - return null; + return am.getAssessmentEntry(this, mySelf);//we want t } @Override diff --git a/src/main/java/org/olat/course/nodes/TACourseNode.java b/src/main/java/org/olat/course/nodes/TACourseNode.java index 7774e076a8c981dd06044d1618d5d3a90c314812..f453e4436d599d948a3dfcc3ebf486cae9f45dd0 100644 --- a/src/main/java/org/olat/course/nodes/TACourseNode.java +++ b/src/main/java/org/olat/course/nodes/TACourseNode.java @@ -503,7 +503,7 @@ public class TACourseNode extends GenericCourseNode implements PersistentAssessa public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); - return am.getAssessmentEntry(this, mySelf, null); + return am.getAssessmentEntry(this, mySelf); } /** diff --git a/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java b/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java index 236c96e62120d87dcbe4c40856f15e620c099bcb..5761c3930bb41dacdec73b978b5e0b0e0ec74b77 100644 --- a/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java +++ b/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java @@ -68,7 +68,7 @@ final class PreviewAssessmentManager extends BasicManager implements AssessmentM } @Override - public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, String referenceSoftKey) { + public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity) { return null; } diff --git a/src/main/java/org/olat/modules/assessment/AssessmentEntry.java b/src/main/java/org/olat/modules/assessment/AssessmentEntry.java index 0b04b0802a94934ba60b75195b0d2998a77a7306..63b3cc86178b8b4e030a46b7c6b49dc2f91a632a 100644 --- a/src/main/java/org/olat/modules/assessment/AssessmentEntry.java +++ b/src/main/java/org/olat/modules/assessment/AssessmentEntry.java @@ -92,6 +92,8 @@ public interface AssessmentEntry extends AssessmentEntryLight { */ public RepositoryEntry getReferenceEntry(); + public void setReferenceEntry(RepositoryEntry entry); + /** * @return The unique identifier for anonymous user (guest) */ diff --git a/src/main/java/org/olat/modules/assessment/AssessmentService.java b/src/main/java/org/olat/modules/assessment/AssessmentService.java index b31f70da7e203d4f2e87cdc5ce28ca400744052a..c63a8518dc275e289ec3887017fda49673dd714b 100644 --- a/src/main/java/org/olat/modules/assessment/AssessmentService.java +++ b/src/main/java/org/olat/modules/assessment/AssessmentService.java @@ -60,17 +60,14 @@ public interface AssessmentService { public AssessmentEntry getOrCreateAssessmentEntry(Identity assessedIdentity, String anonymousIdentifier, RepositoryEntry entry, String subIdent, RepositoryEntry referenceEntry); - public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent); - /** - * The search by the reference soft key is set not is null if the value is null. + * * @param assessedIdentity * @param entry * @param subIdent - * @param referenceSoftKey * @return */ - public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent, String referenceSoftKey); + public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent); /** * diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java index 12796aba0362329ac18044e722e8877f5a2a1f36..27e497a7dd77b7ab945f9b229670c11aa14a98ac 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java @@ -127,26 +127,16 @@ public class AssessmentEntryDAO { return entries.isEmpty() ? null : entries.get(0); } - public AssessmentEntry loadAssessmentEntry(IdentityRef assessedIdentity, RepositoryEntryRef entry, String subIdent, String referenceSoftKey) { + public AssessmentEntry loadAssessmentEntry(IdentityRef assessedIdentity, RepositoryEntryRef entry, String subIdent) { StringBuilder sb = new StringBuilder(); sb.append("select data from assessmententry data"); - if(referenceSoftKey != null) { - sb.append(" inner join data.referenceEntry referenceEntry"); - } - sb.append(" where data.repositoryEntry.key=:repositoryEntryKey and data.identity.key=:identityKey"); if(subIdent != null) { sb.append(" and data.subIdent=:subIdent"); } else { sb.append(" and data.subIdent is null"); } - - if(referenceSoftKey != null) { - sb.append(" and referenceEntry.softkey=:softkey"); - } else { - sb.append(" and data.referenceEntry is null"); - } TypedQuery<AssessmentEntry> query = dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), AssessmentEntry.class) @@ -155,9 +145,6 @@ public class AssessmentEntryDAO { if(subIdent != null) { query.setParameter("subIdent", subIdent); } - if(referenceSoftKey != null) { - query.setParameter("softkey", referenceSoftKey); - } List<AssessmentEntry> entries = query.getResultList(); return entries.isEmpty() ? null : entries.get(0); } diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java index 90b7ca288b9313b9e219c11e04ef6042278afc31..c2c654dd74ed85e34e60a366db1e574dce413cda 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java @@ -71,14 +71,6 @@ public class AssessmentServiceImpl implements AssessmentService { return assessmentEntryDao.loadAssessmentEntry(assessedIdentity, null, entry, subIdent); } - @Override - public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent, String referenceSoftKey) { - if(assessedIdentity == null || entry == null) return null; - return assessmentEntryDao.loadAssessmentEntry(assessedIdentity, entry, subIdent, referenceSoftKey); - } - - - @Override public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntryRef entry, String subIdent, RepositoryEntryRef referenceEntry) { if(assessedIdentity == null || entry == null || referenceEntry == null) return null; diff --git a/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java b/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java index d86d6fc190c7febfa6e7b70da880984b925b625d..91d90694fa4176cce31b97cca498e3bc494c2482 100644 --- a/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java +++ b/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java @@ -108,7 +108,7 @@ public class AssessmentEntryImpl implements Persistable, ModifiedInfo, CreateInf private String subIdent; @ManyToOne(targetEntity=RepositoryEntry.class,fetch=FetchType.LAZY,optional=true) - @JoinColumn(name="fk_reference_entry", nullable=true, insertable=true, updatable=false) + @JoinColumn(name="fk_reference_entry", nullable=true, insertable=true, updatable=true) private RepositoryEntry referenceEntry; @Column(name="a_anon_identifier", nullable=true, insertable=true, updatable=false) diff --git a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java index 8991294167eb91179ade25c31d292d9534c8545b..a629588bc6c6c0b6958d675019a318807f96720a 100644 --- a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java +++ b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java @@ -148,24 +148,6 @@ public class AssessmentEntryDAOTest extends OlatTestCase { Assert.assertEquals(subIdent, reloadedAssessment.getSubIdent()); } - @Test - public void loadAssessmentEntry_withSoftkey() { - Identity assessedIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-4"); - RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); - String subIdent = UUID.randomUUID().toString(); - AssessmentEntry nodeAssessment = assessmentEntryDao - .createAssessmentEntry(assessedIdentity, null, entry, subIdent, entry); - dbInstance.commitAndCloseSession(); - - AssessmentEntry reloadedAssessment = assessmentEntryDao - .loadAssessmentEntry(assessedIdentity, entry, subIdent, entry.getSoftkey()); - Assert.assertEquals(nodeAssessment.getKey(), reloadedAssessment.getKey()); - Assert.assertEquals(nodeAssessment, reloadedAssessment); - Assert.assertEquals(assessedIdentity, reloadedAssessment.getIdentity()); - Assert.assertEquals(entry, reloadedAssessment.getRepositoryEntry()); - Assert.assertEquals(subIdent, reloadedAssessment.getSubIdent()); - } - @Test public void loadAssessmentEntry_specificTest() { Identity assessedIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-5");