From 3d943e09cdec71a4b463e23483b28d159cbc147b Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 21 Oct 2015 11:51:17 +0200
Subject: [PATCH] OO-1732: take the number of user properties to render the
 first row of headers in the test archive file

---
 .../olat/course/nodes/IQSELFCourseNode.java   |  2 +-
 .../olat/course/nodes/IQSURVCourseNode.java   |  2 +-
 .../olat/course/nodes/IQTESTCourseNode.java   |  2 +-
 .../course/nodes/iq/IQEditReplaceWizard.java  |  2 +-
 .../export/QTIArchiveWizardController.java    | 26 +++++++++----------
 .../export/QTIExportFormatterCSVType1.java    | 21 +++++++++++----
 .../export/QTIExportFormatterCSVType2.java    |  4 +--
 .../export/QTIExportFormatterCSVType3.java    |  6 ++---
 .../qti/statistics/QTIStatisticsResource.java |  5 ++--
 9 files changed, 37 insertions(+), 33 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/IQSELFCourseNode.java b/src/main/java/org/olat/course/nodes/IQSELFCourseNode.java
index 3095ee1d26e..990847daa8f 100644
--- a/src/main/java/org/olat/course/nodes/IQSELFCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQSELFCourseNode.java
@@ -231,7 +231,7 @@ public class IQSELFCourseNode extends AbstractAccessableCourseNode implements Se
 		RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntryBySoftkey(repositorySoftKey, true);
 		
 		try {
-			QTIExportFormatter qef = new QTIExportFormatterCSVType2(locale, null, "\t", "\"", "\\", "\r\n", false);
+			QTIExportFormatter qef = new QTIExportFormatterCSVType2(locale, null, "\t", "\"", "\r\n", false);
 			return qem.selectAndExportResults(qef, course.getResourceableId(), getShortTitle(), getIdent(), re, exportStream, ".xls");
 		} catch (IOException e) {
 			log.error("", e);
diff --git a/src/main/java/org/olat/course/nodes/IQSURVCourseNode.java b/src/main/java/org/olat/course/nodes/IQSURVCourseNode.java
index c920f3623d8..40f4eafe903 100644
--- a/src/main/java/org/olat/course/nodes/IQSURVCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQSURVCourseNode.java
@@ -269,7 +269,7 @@ public class IQSURVCourseNode extends AbstractAccessableCourseNode implements QT
 		String repositorySoftKey = (String) getModuleConfiguration().get(IQEditController.CONFIG_KEY_REPOSITORY_SOFTKEY);
 		RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntryBySoftkey(repositorySoftKey, true);
 
-		QTIExportFormatter qef = new QTIExportFormatterCSVType3(locale, null,"\t", "\"", "\\", "\r\n", false);
+		QTIExportFormatter qef = new QTIExportFormatterCSVType3(locale, null,"\t", "\"", "\r\n", false);
 		try {
 			return qem.selectAndExportResults(qef, course.getResourceableId(), getShortTitle(), getIdent(), re, exportStream, ".xls");
 		} catch (IOException e) {
diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
index 6c7dac156eb..9720738a772 100644
--- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
@@ -479,7 +479,7 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements As
 			} else {
 				String shortTitle = getShortTitle();
 				QTIExportManager qem = QTIExportManager.getInstance();
-				QTIExportFormatter qef = new QTIExportFormatterCSVType1(locale, "\t", "\"", "\\", "\r\n", false);
+				QTIExportFormatter qef = new QTIExportFormatterCSVType1(locale, "\t", "\"", "\r\n", false);
 				return qem.selectAndExportResults(qef, courseResourceableId, shortTitle, getIdent(), re, exportStream, ".xls");
 			}
 		} catch (IOException e) {
diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditReplaceWizard.java b/src/main/java/org/olat/course/nodes/iq/IQEditReplaceWizard.java
index 8c9aaef8b64..23a6fc739e8 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQEditReplaceWizard.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQEditReplaceWizard.java
@@ -195,7 +195,7 @@ public class IQEditReplaceWizard extends WizardController {
 			QTIExportManager qem = QTIExportManager.getInstance();
 			Long repositoryRef = results.get(0).getResultSet().getRepositoryRef();
 			List<QTIItemObject> qtiItemObjectList = new QTIObjectTreeBuilder().getQTIItemObjectList(repositoryRef);
-			QTIExportFormatter formatter = new QTIExportFormatterCSVType1(ureq.getLocale(), "\t", "\"", "\\", "\r\n", false);
+			QTIExportFormatter formatter = new QTIExportFormatterCSVType1(ureq.getLocale(), "\t", "\"", "\r\n", false);
 			Map<Class<?>, QTIExportItemFormatConfig> qtiItemConfigs = getQTIItemConfigs(qtiItemObjectList);
 			formatter.setMapWithExportItemConfigs(qtiItemConfigs);
 			resultExportFile = qem.exportResults(formatter, results, qtiItemObjectList, courseNode.getShortTitle(), exportDir, charset, ".xls");
diff --git a/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java b/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java
index e99f0378200..6f427944261 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java
@@ -292,7 +292,7 @@ public class QTIArchiveWizardController extends BasicController {
 									this.sep = convert2CtrlChars(sep);
 									this.car = convert2CtrlChars(car);
 								
-									formatter = getFormatter(ureq.getLocale(), sep, emb, esc, car, true);
+									formatter = getFormatter(ureq.getLocale(), sep, emb, car, true);
 									formatter.setMapWithExportItemConfigs(qtiItemConfigs);
 								
 									exportDir = CourseFactory.getOrCreateDataExportDirectory(ureq.getIdentity(), course.getCourseTitle());
@@ -355,7 +355,7 @@ public class QTIArchiveWizardController extends BasicController {
 				this.sep = convert2CtrlChars(sep);
 				this.car = convert2CtrlChars(car);
 				
-				formatter = getFormatter(ureq.getLocale(), sep, emb, esc, car, dcForm.isTagless());
+				formatter = getFormatter(ureq.getLocale(), sep, emb, car, dcForm.isTagless());
 				formatter.setMapWithExportItemConfigs(qtiItemConfigs);
 				
 				ICourse course = CourseFactory.loadCourse(ores);
@@ -539,21 +539,19 @@ public class QTIArchiveWizardController extends BasicController {
 		return itConfigs;
 	}
 	
-	private QTIExportFormatter getFormatter(Locale locale, String se, String em, String es, String ca, boolean tagless){
+	private QTIExportFormatter getFormatter(Locale locale, String se, String em, String ca, boolean tagless){
 		QTIExportFormatter frmtr = null;
-  	if (type == 1){
-    	frmtr = new QTIExportFormatterCSVType1(locale, se, em, es, ca, tagless);
-  	}
-  	else if (type == 2){
-    	frmtr = new QTIExportFormatterCSVType2(locale, null, se, em, es, ca, tagless);
-  	}
-    else { // type == 3
-  	frmtr = new QTIExportFormatterCSVType3(locale, null, se, em, es, ca, tagless);
-    }
-  	return frmtr;
+		if (type == 1){
+			frmtr = new QTIExportFormatterCSVType1(locale, se, em, ca, tagless);
+		} else if (type == 2){
+			frmtr = new QTIExportFormatterCSVType2(locale, null, se, em, ca, tagless);
+		} else { // type == 3
+			frmtr = new QTIExportFormatterCSVType3(locale, null, se, em, ca, tagless);
+		}
+		return frmtr;
 	}
 	
-	
+	@Override
 	protected void doDispose() {
 		//
 	}
diff --git a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java
index 28a5c86810b..b223dc455b2 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java
@@ -57,7 +57,6 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 	// Delimiters and file name suffix for the export file
 	private String sep; // fields separated by
 	private String emb; // fields embedded by
-	private String esc; // fields escaped by
 	private String car; // carriage return
 	// Author can export the mattext without HTML tags
 	// especially used for the results export of matrix questions created by QANT
@@ -78,11 +77,10 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 	 *            qtiExportFormatConfig with (QTIExportItemXYZ.class,IQTIExportItemFormatConfig)
 	 */
 	
-	public QTIExportFormatterCSVType1(Locale locale, String sep, String emb, String esc, String car, boolean tagless) {
+	public QTIExportFormatterCSVType1(Locale locale, String sep, String emb, String car, boolean tagless) {
 		super(locale, null);
 		this.sep = sep;
 		this.emb = emb;
-		this.esc = esc;
 		this.car = car;
 		this.tagless = tagless;
 		// initialize user property handlers
@@ -448,7 +446,20 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 	}
 
 	private String createHeaderRow1Intro() {
-		return sep + sep + sep + sep + sep + sep + sep + sep + sep + sep;
+		StringBuilder hr1Intro = new StringBuilder();
+		hr1Intro.append(sep);//seqnum
+		for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
+			if (userPropertyHandler != null) {
+				hr1Intro.append(sep);
+			}
+		}
+		hr1Intro.append(sep);
+		hr1Intro.append(sep);
+		hr1Intro.append(sep);
+		hr1Intro.append(sep);
+		hr1Intro.append(sep);
+		hr1Intro.append(sep);
+		return hr1Intro.toString();//  + sep + sep + sep + sep + sep + sep + sep + sep + sep;
 	}
 
 	/**
@@ -467,7 +478,7 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 		hr2Intro.append(sep);
 
 		// add configured user properties
-		for (UserPropertyHandler userPropertyHandler : this.userPropertyHandlers) {
+		for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
 			if (userPropertyHandler == null) {
 				continue;
 			}
diff --git a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java
index 1cbb1e7e467..57236395ac5 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java
@@ -51,7 +51,6 @@ public class QTIExportFormatterCSVType2 extends QTIExportFormatter {
 	// Delimiters and file name suffix for the export file
 	private String sep; // fields separated by
 	private String emb; // fields embedded by
-	private String esc; // fields escaped by
 	private String car; // carriage return
 	// Author can export the mattext without HTML tags
 	// especially used for the results export of matrix questions created by QANT
@@ -74,11 +73,10 @@ public class QTIExportFormatterCSVType2 extends QTIExportFormatter {
 	 *            qtiExportFormatConfig with (QTIExportItemXYZ.class,IQTIExportItemFormatConfig)
 	 */
 	
-	public QTIExportFormatterCSVType2(Locale locale, IdentityAnonymizerCallback anonymizerCallback, String sep, String emb, String esc, String car, boolean tagless) {
+	public QTIExportFormatterCSVType2(Locale locale, IdentityAnonymizerCallback anonymizerCallback, String sep, String emb, String car, boolean tagless) {
 		super(locale, anonymizerCallback);
 		this.sep = sep;
 		this.emb = emb;
-		this.esc = esc;
 		this.car = car;
 		this.tagless = tagless;
 	}
diff --git a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java
index 5bf27bf7bc9..e5b056971d4 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java
@@ -45,12 +45,11 @@ import org.olat.ims.qti.export.helper.QTIItemObject;
  * 
  * @author Alexander Schneider
  */
-public class QTIExportFormatterCSVType3 extends QTIExportFormatter{
+public class QTIExportFormatterCSVType3 extends QTIExportFormatter {
 	private String fileNamePrefix = "QUEST_";
 	private int type = 3;
 	private String sep; // fields separated by
 	private String emb; // fields embedded by
-	private String esc; // fields escaped by
 	private String car; // carriage return
 	// Author can export the mattext without HTML tags
 	// especially used for the results export of matrix questions created by QANT
@@ -74,11 +73,10 @@ public class QTIExportFormatterCSVType3 extends QTIExportFormatter{
 	 * @param Map qtiExportFormatConfig with (QTIExportItemXYZ.class,IQTIExportItemFormatConfig)
 	 */
 	
-	public QTIExportFormatterCSVType3(Locale locale, IdentityAnonymizerCallback anonymizerCallback, String sep, String emb, String esc, String car, boolean tagless) {
+	public QTIExportFormatterCSVType3(Locale locale, IdentityAnonymizerCallback anonymizerCallback, String sep, String emb, String car, boolean tagless) {
 		super(locale, anonymizerCallback);
 		this.sep = sep;
 		this.emb = emb;
-		this.esc = esc;
 		this.car = car;
 		this.tagless = tagless;
 	}
diff --git a/src/main/java/org/olat/ims/qti/statistics/QTIStatisticsResource.java b/src/main/java/org/olat/ims/qti/statistics/QTIStatisticsResource.java
index 97fd6b2fa3e..ab6fe7da482 100644
--- a/src/main/java/org/olat/ims/qti/statistics/QTIStatisticsResource.java
+++ b/src/main/java/org/olat/ims/qti/statistics/QTIStatisticsResource.java
@@ -118,7 +118,6 @@ public class QTIStatisticsResource implements MediaResource {
 		try {
 			String sep = "\\t"; // fields separated by
 			String emb = "\""; // fields embedded by
-			String esc = "\\"; // fields escaped by
 			String car = "\\r\\n"; // carriage return
 			
 			sep = QTIArchiveWizardController.convert2CtrlChars(sep);
@@ -128,10 +127,10 @@ public class QTIStatisticsResource implements MediaResource {
 			QTIExportFormatter formatter;
 			if (QTIType.test.equals(resourceResult.getType())){
 				exportType = 1;
-				formatter = new QTIExportFormatterCSVType1(locale, sep, emb, esc, car, true);
+				formatter = new QTIExportFormatterCSVType1(locale, sep, emb, car, true);
 		  	} else if (QTIType.survey.equals(resourceResult.getType())) {
 		  		exportType = 2;
-		  		formatter = new QTIExportFormatterCSVType2(locale, null, sep, emb, esc, car, true);
+		  		formatter = new QTIExportFormatterCSVType2(locale, null, sep, emb, car, true);
 		  	} else {
 		  		return;
 		  	}
-- 
GitLab