Index: lams_common/src/java/org/lamsfoundation/lams/qb/QbUtils.java =================================================================== diff -u -r9ebb0762842cde9a358626a248132bc7ca650f3c -r78b1835bd2936b2de7d98c7eff33621fa9f5e656 --- lams_common/src/java/org/lamsfoundation/lams/qb/QbUtils.java (.../QbUtils.java) (revision 9ebb0762842cde9a358626a248132bc7ca650f3c) +++ lams_common/src/java/org/lamsfoundation/lams/qb/QbUtils.java (.../QbUtils.java) (revision 78b1835bd2936b2de7d98c7eff33621fa9f5e656) @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.LinkedList; +import java.util.function.Function; import javax.servlet.http.HttpSession; @@ -10,23 +11,38 @@ import org.lamsfoundation.lams.qb.model.QbCollection; import org.lamsfoundation.lams.qb.service.IQbService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; public class QbUtils { - + + public static final Function QB_MIGRATION_CKEDITOR_CLEANER = string -> string == null ? null + : string.replaceAll(">\\ ", ">").replaceAll("\\r|\\n", "").trim(); + + public static final Function QB_MIGRATION_TAG_CLEANER = string -> string == null ? null + : WebUtil.removeHTMLtags(string).replaceAll(">\\ ", " ").replaceAll("\\t", " ").trim(); + + public static final Function QB_MIGRATION_QUESTION_NAME_GENERATOR = description -> { + String name = QB_MIGRATION_TAG_CLEANER.apply(description); + return name == null ? null : name.substring(0, Math.min(80, name.length())); + }; + + public static final Function QB_MIGRATION_TRIMMER = string -> StringUtils.isBlank(string) ? null + : string.trim(); + public static void fillFormWithUserCollections(IQbService qbService, QbQuestionForm form, Long qbQuestionUid) { //prepare data for displaying collections - Integer userId = getUserId(); + Integer userId = QbUtils.getUserId(); Collection userCollections = qbService.getUserCollections(userId); form.setUserCollections(userCollections); - + //in case request came not from the tool, collectioUid is already supplied as parameter from collections.jsp final boolean isRequestCameFromTool = StringUtils.isNotBlank(form.getSessionMapID()); if (!isRequestCameFromTool) { return; } - + Collection questionCollections = qbQuestionUid == null ? new LinkedList<>() : qbService.getQuestionCollectionsByUid(qbQuestionUid); @@ -44,7 +60,7 @@ } form.setOldCollectionUid(collectionUid); } - + private static Integer getUserId() { HttpSession ss = SessionManager.getSession(); UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); Index: lams_common/src/java/org/lamsfoundation/lams/util/XMLUtil.java =================================================================== diff -u -r6744ca131a85858435878b14bdb6abc0bc9002aa -r78b1835bd2936b2de7d98c7eff33621fa9f5e656 --- lams_common/src/java/org/lamsfoundation/lams/util/XMLUtil.java (.../XMLUtil.java) (revision 6744ca131a85858435878b14bdb6abc0bc9002aa) +++ lams_common/src/java/org/lamsfoundation/lams/util/XMLUtil.java (.../XMLUtil.java) (revision 78b1835bd2936b2de7d98c7eff33621fa9f5e656) @@ -1,6 +1,7 @@ package org.lamsfoundation.lams.util; import java.security.InvalidParameterException; +import java.util.function.Function; import org.apache.commons.lang.StringUtils; import org.w3c.dom.Document; @@ -44,6 +45,20 @@ */ public static String rewriteTextElement(Element sourceParent, Element targetParent, String sourceElementName, String targetElementName, String defaultValue, boolean removeSource) { + return XMLUtil.rewriteTextElement(sourceParent, targetParent, sourceElementName, targetElementName, + defaultValue, removeSource, (Function[]) null); + } + + /** + * Find an element in source, takes its value and puts it under a different name in target. + * If no value is found, default value is used. + * The source source element can be removed, depending on the parameter. + * If valueConverter function is provided, it is applied on value or defaultValue before setting it in target. + */ + @SafeVarargs + public static String rewriteTextElement(Element sourceParent, Element targetParent, String sourceElementName, + String targetElementName, String defaultValue, boolean removeSource, + Function... valueConverters) { String value = XMLUtil.getChildElementValue(sourceParent, sourceElementName, defaultValue); if (removeSource) { if (sourceParent == null || sourceElementName == null) { @@ -57,6 +72,11 @@ if (StringUtils.isNotBlank(value)) { Document document = targetParent.getOwnerDocument(); Element field = document.createElement(targetElementName); + if (valueConverters != null) { + for (Function function : valueConverters) { + value = function.apply(value); + } + } field.setTextContent(value); targetParent.appendChild(field); } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McImportContentVersionFilter.java =================================================================== diff -u -r6744ca131a85858435878b14bdb6abc0bc9002aa -r78b1835bd2936b2de7d98c7eff33621fa9f5e656 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McImportContentVersionFilter.java (.../McImportContentVersionFilter.java) (revision 6744ca131a85858435878b14bdb6abc0bc9002aa) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McImportContentVersionFilter.java (.../McImportContentVersionFilter.java) (revision 78b1835bd2936b2de7d98c7eff33621fa9f5e656) @@ -5,6 +5,7 @@ import java.util.Date; import org.lamsfoundation.lams.learningdesign.service.ToolContentVersionFilter; +import org.lamsfoundation.lams.qb.QbUtils; import org.lamsfoundation.lams.tool.mc.model.McContent; import org.lamsfoundation.lams.tool.mc.model.McOptsContent; import org.lamsfoundation.lams.tool.mc.model.McQueContent; @@ -104,14 +105,14 @@ XMLUtil.addTextElement(qbQuestion, "version", "1"); XMLUtil.addTextElement(qbQuestion, "createDate", createDate); XMLUtil.rewriteTextElement(mcQuestion, qbQuestion, "mark", "maxMark", "1", true); - XMLUtil.rewriteTextElement(mcQuestion, qbQuestion, "feedback", "feedback", null, true); + XMLUtil.rewriteTextElement(mcQuestion, qbQuestion, "feedback", "feedback", null, true, + QbUtils.QB_MIGRATION_TRIMMER); String description = XMLUtil.rewriteTextElement(mcQuestion, qbQuestion, "question", "description", null, - true); + true, QbUtils.QB_MIGRATION_CKEDITOR_CLEANER); // get name out of description as there were no descriptions in MCQ before if (description != null) { - description = description.trim(); XMLUtil.addTextElement(qbQuestion, "name", - description.substring(0, Math.min(description.length(), 80))); + QbUtils.QB_MIGRATION_QUESTION_NAME_GENERATOR.apply(description)); } // now it's time for options @@ -134,7 +135,8 @@ XMLUtil.addTextElement(qbOption, "maxMark", correctOption ? "1" : "0"); XMLUtil.rewriteTextElement(mcOption, qbOption, "displayOrder", "displayOrder", "1", true); - XMLUtil.rewriteTextElement(mcOption, qbOption, "mcQueOptionText", "name", null, true); + XMLUtil.rewriteTextElement(mcOption, qbOption, "mcQueOptionText", "name", null, true, + QbUtils.QB_MIGRATION_CKEDITOR_CLEANER); } // get rid of junk