Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java =================================================================== diff -u -r3190bef4d1c10ac3e955dd0492d6747ae4975629 -r0730a2efec2b305e10b98b82c11e1ae2ef1b72fb --- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 3190bef4d1c10ac3e955dd0492d6747ae4975629) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 0730a2efec2b305e10b98b82c11e1ae2ef1b72fb) @@ -138,4 +138,6 @@ boolean isQuestionInUserCollection(int qbQuestionId, int userId); void insertQuestion(QbQuestion qbQuestion); + + void prepareQuestionForExport(QbQuestion qbQuestion); } Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -r3190bef4d1c10ac3e955dd0492d6747ae4975629 -r0730a2efec2b305e10b98b82c11e1ae2ef1b72fb --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 3190bef4d1c10ac3e955dd0492d6747ae4975629) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 0730a2efec2b305e10b98b82c11e1ae2ef1b72fb) @@ -615,6 +615,20 @@ } } + /** + * When exporting a LD, QbQuestion's server-specific detail need not be exported + */ + @Override + public void prepareQuestionForExport(QbQuestion qbQuestion) { + releaseFromCache(qbQuestion); + qbQuestion.clearID(); + qbQuestion.setQuestionId(null); + qbQuestion.setVersion(null); + // use plain Java collections instead of Hibernate ones, so XML is more simple + qbQuestion.setQbOptions(new ArrayList<>(qbQuestion.getQbOptions())); + qbQuestion.setUnits(new ArrayList<>(qbQuestion.getUnits())); + } + public void setQbDAO(IQbDAO qbDAO) { this.qbDAO = qbDAO; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r3190bef4d1c10ac3e955dd0492d6747ae4975629 -r0730a2efec2b305e10b98b82c11e1ae2ef1b72fb --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 3190bef4d1c10ac3e955dd0492d6747ae4975629) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 0730a2efec2b305e10b98b82c11e1ae2ef1b72fb) @@ -2606,6 +2606,10 @@ } toolContentObj = Assessment.newInstance(toolContentObj, toolContentId); + for (AssessmentQuestion assessmentQuestion : toolContentObj.getQuestions()) { + qbService.prepareQuestionForExport(assessmentQuestion.getQbQuestion()); + } + try { exportContentService.exportToolContent(toolContentId, toolContentObj, assessmentToolContentHandler, rootPath); @@ -2649,7 +2653,6 @@ // we need to save QB questions and options first for (AssessmentQuestion assessmentQuestion : toolContentObj.getQuestions()) { QbQuestion qbQuestion = assessmentQuestion.getQbQuestion(); - qbQuestion.clearID(); QbQuestion existingQuestion = qbService.getQuestionByUUID(qbQuestion.getUuid()); if (existingQuestion == null) { Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -r3190bef4d1c10ac3e955dd0492d6747ae4975629 -r0730a2efec2b305e10b98b82c11e1ae2ef1b72fb --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 3190bef4d1c10ac3e955dd0492d6747ae4975629) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 0730a2efec2b305e10b98b82c11e1ae2ef1b72fb) @@ -1399,6 +1399,9 @@ // set ToolContentHandler as null to avoid copy file node in repository again. toolContentObj = McContent.newInstance(toolContentObj, toolContentId); toolContentObj.setMcSessions(null); + for (McQueContent mcQuestion : toolContentObj.getMcQueContents()) { + qbService.prepareQuestionForExport(mcQuestion.getQbQuestion()); + } exportContentService.exportToolContent(toolContentId, toolContentObj, mcToolContentHandler, rootPath); } catch (ExportToolContentException e) { throw new ToolException(e); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r3190bef4d1c10ac3e955dd0492d6747ae4975629 -r0730a2efec2b305e10b98b82c11e1ae2ef1b72fb --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 3190bef4d1c10ac3e955dd0492d6747ae4975629) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 0730a2efec2b305e10b98b82c11e1ae2ef1b72fb) @@ -1877,7 +1877,9 @@ // set ScratchieToolContentHandler as null to avoid copy file node in repository again. toolContentObj = Scratchie.newInstance(toolContentObj, toolContentId); - + for (ScratchieItem scratchieItem : toolContentObj.getScratchieItems()) { + qbService.prepareQuestionForExport(scratchieItem.getQbQuestion()); + } try { exportContentService.exportToolContent(toolContentId, toolContentObj, scratchieToolContentHandler, rootPath);