Index: lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/TBLTemplateController.java =================================================================== diff -u -r4c5a620700d152367d81a3ad8cf1d0f0b94f86ac -r6f0db409b3114a7999205219d5e23a2f03b1a813 --- lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/TBLTemplateController.java (.../TBLTemplateController.java) (revision 4c5a620700d152367d81a3ad8cf1d0f0b94f86ac) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/TBLTemplateController.java (.../TBLTemplateController.java) (revision 6f0db409b3114a7999205219d5e23a2f03b1a813) @@ -151,9 +151,10 @@ // iRA Test - MCQ currentActivityPosition = calcPositionNextRight(currentActivityPosition); activityTitle = data.getText("boilerplate.ira.title"); + ArrayNode testQuestionsArray = JsonUtil.readArray(data.testQuestions.values()); Long iRAToolContentId = createMCQToolContent(userDTO, activityTitle, data.getText("boilerplate.ira.instructions"), false, data.confidenceLevelEnable, false, - JsonUtil.readArray(data.testQuestions.values())); + testQuestionsArray); ObjectNode iraActivityJSON = createMCQActivity(maxUIID, order++, currentActivityPosition, iRAToolContentId, data.contentFolderID, groupingUIID, null, null, activityTitle); activities.add(iraActivityJSON); @@ -186,7 +187,7 @@ : null; Long tRAToolContentId = createScratchieToolContent(userDTO, activityTitle, data.getText("boilerplate.tra.instructions"), false, confidenceLevelsActivityUIID, - JsonUtil.readArray(data.testQuestions.values())); + testQuestionsArray); activities.add(createScratchieActivity(maxUIID, order++, currentActivityPosition, tRAToolContentId, data.contentFolderID, groupingUIID, null, null, activityTitle)); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -r5ebec80ccc488d5c09da8e9f648b718b02d0dee2 -r6f0db409b3114a7999205219d5e23a2f03b1a813 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 5ebec80ccc488d5c09da8e9f648b718b02d0dee2) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 6f0db409b3114a7999205219d5e23a2f03b1a813) @@ -2081,7 +2081,8 @@ .collect(Collectors.mapping(q -> q.getUuid().toString(), Collectors.toSet())); // Questions ArrayNode questions = JsonUtil.optArray(toolContentJSON, RestTags.QUESTIONS); - for (JsonNode questionData : questions) { + for (JsonNode questionDataJson : questions) { + ObjectNode questionData = (ObjectNode) questionDataJson; boolean addToCollection = false; McQueContent question = null; QbQuestion qbQuestion = null; @@ -2101,8 +2102,18 @@ qbQuestion.setName(JsonUtil.optString(questionData, RestTags.QUESTION_TITLE)); qbQuestion.setDescription(JsonUtil.optString(questionData, RestTags.QUESTION_TEXT)); qbQuestion.setMaxMark(1); + // UUID normally gets generated in the DB, but we need it immediately, + // so we generate it programatically. + // Re-reading the QbQuestion we just saved does not help as it is read from Hibernate cache, + // not from DB where UUID is filed + qbQuestion.setUuid(UUID.randomUUID()); userManagementService.save(qbQuestion); + // Store it back into JSON so Scratchie can read it + // and use the same questions, not create new ones + uuid = qbQuestion.getUuid().toString(); + questionData.put(RestTags.QUESTION_UUID, uuid); + ArrayNode optionsData = JsonUtil.optArray(questionData, RestTags.ANSWERS); for (JsonNode optionData : optionsData) { QbOption qbOption = new QbOption();