use of org.olat.modules.assessment.model.AssessmentEntryImpl in project OpenOLAT by OpenOLAT.
the class AssessmentEntryDAO method createAssessmentEntry.
public AssessmentEntry createAssessmentEntry(Identity assessedIdentity, String anonymousIdentifier, RepositoryEntry entry, String subIdent, RepositoryEntry referenceEntry, Float score, Boolean passed, Date lastUserModified, Date lastCoachModified) {
AssessmentEntryImpl data = new AssessmentEntryImpl();
data.setCreationDate(new Date());
data.setLastModified(data.getCreationDate());
data.setLastUserModified(lastUserModified);
data.setLastCoachModified(lastCoachModified);
data.setIdentity(assessedIdentity);
data.setAnonymousIdentifier(anonymousIdentifier);
data.setRepositoryEntry(entry);
data.setSubIdent(subIdent);
data.setReferenceEntry(referenceEntry);
data.setUserVisibility(Boolean.TRUE);
if (score != null) {
data.setScore(new BigDecimal(score));
}
data.setPassed(passed);
dbInstance.getCurrentEntityManager().persist(data);
return data;
}
use of org.olat.modules.assessment.model.AssessmentEntryImpl in project openolat by klemens.
the class OLATUpgrade_12_0_0 method updateTest.
private void updateTest(RepositoryEntry entry, IQTESTCourseNode courseNode, Set<Identity> changeSet) {
boolean onyx = IQEditController.CONFIG_VALUE_QTI2.equals(courseNode.getModuleConfiguration().get(IQEditController.CONFIG_KEY_TYPE_QTI));
if (onyx)
return;
RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
OLATResource ores = testEntry.getOlatResource();
boolean qti21 = ImsQTI21Resource.TYPE_NAME.equals(ores.getResourceableTypeName());
List<AssessmentEntryImpl> assessmentEntries = loadAssessmentEntries(entry, courseNode.getIdent());
for (AssessmentEntryImpl assessmentEntry : assessmentEntries) {
if (assessmentEntry.getLastUserModified() != null || assessmentEntry.getLastCoachModified() != null)
continue;
if (qti21) {
Long assessmentId = assessmentEntry.getAssessmentId();
if (assessmentId != null) {
AssessmentTestSession session = qtiService.getAssessmentTestSession(assessmentEntry.getAssessmentId());
if (session != null && session.getFinishTime() != null) {
assessmentEntry.setLastUserModified(session.getFinishTime());
updateAssessmentEntry(assessmentEntry);
changeSet.add(assessmentEntry.getIdentity());
}
}
} else {
long olatResource = entry.getOlatResource().getResourceableId().longValue();
QTIResultSet rset = iqManager.getLastResultSet(assessmentEntry.getIdentity(), olatResource, courseNode.getIdent());
if (rset != null && rset.getLastModified() != null) {
assessmentEntry.setLastUserModified(rset.getLastModified());
updateAssessmentEntry(assessmentEntry);
changeSet.add(assessmentEntry.getIdentity());
}
}
}
}
use of org.olat.modules.assessment.model.AssessmentEntryImpl in project openolat by klemens.
the class OLATUpgrade_12_0_0 method updateScorm.
private void updateScorm(ICourse course, RepositoryEntry entry, CourseNode scormNode, Set<Identity> changeSet) {
Long courseId = course.getResourceableId();
String courseIdNodeId = courseId + "-" + scormNode.getIdent();
Calendar cal = Calendar.getInstance();
List<AssessmentEntryImpl> assessmentEntries = loadAssessmentEntries(entry, scormNode.getIdent());
for (AssessmentEntryImpl assessmentEntry : assessmentEntries) {
if (assessmentEntry.getLastUserModified() != null || assessmentEntry.getLastCoachModified() != null)
continue;
String userId = assessmentEntry.getIdentity().getName();
String path = FolderConfig.getCanonicalRoot() + "/scorm/" + userId + "/" + courseIdNodeId;
File quiz = new File(path, "thequiz.xml");
if (quiz.exists()) {
long lastModified = quiz.lastModified();
if (lastModified > 0) {
cal.setTimeInMillis(lastModified);
assessmentEntry.setLastUserModified(cal.getTime());
updateAssessmentEntry(assessmentEntry);
changeSet.add(assessmentEntry.getIdentity());
}
}
}
}
use of org.olat.modules.assessment.model.AssessmentEntryImpl in project openolat by klemens.
the class OLATUpgrade_12_0_0 method updateMS.
private void updateMS(RepositoryEntry entry, CourseNode msNode, Set<Identity> changeSet) {
List<AssessmentEntryImpl> assessmentEntries = loadAssessmentEntries(entry, msNode.getIdent());
for (AssessmentEntryImpl assessmentEntry : assessmentEntries) {
if (assessmentEntry.getLastCoachModified() != null)
continue;
assessmentEntry.setLastCoachModified(assessmentEntry.getLastModified());
updateAssessmentEntry(assessmentEntry);
changeSet.add(assessmentEntry.getIdentity());
}
}
use of org.olat.modules.assessment.model.AssessmentEntryImpl in project openolat by klemens.
the class OLATUpgrade_11_0_0 method processCourseAssessmentData.
// select count(*) from o_property where name in ('SCORE','PASSED','ATTEMPTS','COMMENT','COACH_COMMENT','ASSESSMENT_ID','FULLY_ASSESSED');
private boolean processCourseAssessmentData(RepositoryEntry courseEntry) {
boolean allOk = true;
try {
final Long courseResourceId = courseEntry.getOlatResource().getResourceableId();
final ICourse course = CourseFactory.loadCourse(courseEntry);
// load all assessable identities
List<Identity> assessableIdentities = getAllAssessableIdentities(course, courseEntry);
Map<AssessmentDataKey, AssessmentEntryImpl> curentNodeAssessmentMap = new HashMap<>();
{
// load already migrated data
List<AssessmentEntryImpl> currentNodeAssessmentList = loadAssessmentEntries(courseEntry);
for (AssessmentEntryImpl currentNodeAssessment : currentNodeAssessmentList) {
AssessmentDataKey key = new AssessmentDataKey(currentNodeAssessment.getIdentity().getKey(), courseResourceId, currentNodeAssessment.getSubIdent());
curentNodeAssessmentMap.put(key, currentNodeAssessment);
}
}
Map<AssessmentDataKey, AssessmentEntryImpl> nodeAssessmentMap = new HashMap<>();
{
// processed properties
List<Property> courseProperties = loadAssessmentProperties(courseEntry);
for (Property property : courseProperties) {
String propertyCategory = property.getCategory();
if (StringHelper.containsNonWhitespace(propertyCategory)) {
int nodeIdentIndex = propertyCategory.indexOf("::");
if (nodeIdentIndex > 0) {
String nodeIdent = propertyCategory.substring(propertyCategory.indexOf("::") + 2);
AssessmentDataKey key = new AssessmentDataKey(property.getIdentity().getKey(), property.getResourceTypeId(), nodeIdent);
if (curentNodeAssessmentMap.containsKey(key)) {
continue;
}
AssessmentEntryImpl nodeAssessment;
if (nodeAssessmentMap.containsKey(key)) {
nodeAssessment = nodeAssessmentMap.get(key);
if (nodeAssessment.getCreationDate().after(property.getCreationDate())) {
nodeAssessment.setCreationDate(property.getCreationDate());
}
if (nodeAssessment.getLastModified().before(property.getLastModified())) {
nodeAssessment.setLastModified(property.getLastModified());
}
} else {
nodeAssessment = createAssessmentEntry(property.getIdentity(), property, course, courseEntry, nodeIdent);
}
copyAssessmentProperty(property, nodeAssessment, course);
nodeAssessmentMap.put(key, nodeAssessment);
}
}
}
}
// check the transient qti ser
CourseNode rootNode = course.getRunStructure().getRootNode();
new TreeVisitor(new Visitor() {
@Override
public void visit(INode node) {
if (node instanceof AssessableCourseNode) {
processNonPropertiesStates(assessableIdentities, (AssessableCourseNode) node, course, courseEntry, nodeAssessmentMap, curentNodeAssessmentMap);
}
}
}, rootNode, true).visitAll();
dbInstance.commitAndCloseSession();
int count = 0;
for (AssessmentEntryImpl courseNodeAssessment : nodeAssessmentMap.values()) {
dbInstance.getCurrentEntityManager().persist(courseNodeAssessment);
if (++count % 50 == 0) {
dbInstance.commit();
}
}
dbInstance.commitAndCloseSession();
allOk = verifyCourseAssessmentData(assessableIdentities, courseEntry);
dbInstance.commitAndCloseSession();
if (allOk) {
List<STCourseNode> nodes = hasAssessableSTCourseNode(course);
if (nodes.size() > 0) {
log.info("Has assessables ST nodes");
for (Identity identity : assessableIdentities) {
IdentityEnvironment identityEnv = new IdentityEnvironment(identity, null);
UserCourseEnvironmentImpl userCourseEnv = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment());
userCourseEnv.getScoreAccounting().evaluateAll(true);
dbInstance.commit();
}
}
}
} catch (Exception e) {
log.error("", e);
}
return allOk;
}
Aggregations