From 2df3fa4c022b1bc583b9ba2fa9a30f91b5779375 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 20 Mar 2017 12:10:46 +0100
Subject: [PATCH] no-jira: catch exception during converssion

---
 .../org/olat/upgrade/OLATUpgrade_11_0_0.java  | 153 +++++++++---------
 1 file changed, 79 insertions(+), 74 deletions(-)

diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
index d1d8ef0009b..5bb9bec1a75 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
@@ -355,93 +355,98 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 	
 	// select count(*) from o_property where name in ('SCORE','PASSED','ATTEMPTS','COMMENT','COACH_COMMENT','ASSESSMENT_ID','FULLY_ASSESSED');
 	private boolean processCourseAssessmentData(RepositoryEntry courseEntry) {
-		final Long courseResourceId = courseEntry.getOlatResource().getResourceableId();
-		final ICourse course = CourseFactory.loadCourse(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);
+			//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> 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());
+			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;
 							}
 							
-							if(nodeAssessment.getLastModified().before(property.getLastModified())) {
-								nodeAssessment.setLastModified(property.getLastModified());
+							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);
 							}
-						} else {
-							nodeAssessment = createAssessmentEntry(property.getIdentity(), property, course, courseEntry, nodeIdent);
+							copyAssessmentProperty(property, nodeAssessment, course);
+							nodeAssessmentMap.put(key, nodeAssessment);	
 						}
-						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();
-		
-		boolean 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);
+			
+			//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;
-- 
GitLab