Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r4c5a620700d152367d81a3ad8cf1d0f0b94f86ac -rffd223618c1aa29b58749a9ccfa54e26095a47dd --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 4c5a620700d152367d81a3ad8cf1d0f0b94f86ac) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision ffd223618c1aa29b58749a9ccfa54e26095a47dd) @@ -43,6 +43,7 @@ import java.util.TreeSet; import java.util.UUID; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.collections.CollectionUtils; @@ -61,6 +62,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.qb.model.QbCollection; import org.lamsfoundation.lams.qb.model.QbOption; import org.lamsfoundation.lams.qb.model.QbQuestion; import org.lamsfoundation.lams.qb.model.QbQuestionUnit; @@ -3397,14 +3399,20 @@ assessment.setCreatedBy(assessmentUser); // **************************** Set the question bank ********************* + QbCollection collection = qbService.getUserPrivateCollection(userID); + Set collectionUUIDs = collection == null ? new HashSet<>() + : qbService.getCollectionQuestions(collection.getUid()).stream().filter(q -> q.getUuid() != null) + .collect(Collectors.mapping(q -> q.getUuid().toString(), Collectors.toSet())); ArrayNode questions = JsonUtil.optArray(toolContentJSON, "questions"); Set newQuestionSet = assessment.getQuestions(); // the Assessment constructor will set up the collection for (JsonNode questionJSONData : questions) { + boolean addToCollection = false; + AssessmentQuestion question = new AssessmentQuestion(); Integer type = JsonUtil.optInt(questionJSONData, "type"); question.setToolContentId(toolContentID); - question.setDisplayOrder(JsonUtil.optInt(questionJSONData, RestTags.DISPLAY_ORDER)); - + question.setDisplayOrder(JsonUtil.optInt(questionJSONData, RestTags.DISPLAY_ORDER)); + QbQuestion qbQuestion = null; String uuid = JsonUtil.optString(questionJSONData, RestTags.QUESTION_UUID); @@ -3414,6 +3422,8 @@ } if (qbQuestion == null) { + addToCollection = collection != null; + qbQuestion = new QbQuestion(); qbQuestion.setQuestionId(qbService.generateNextQuestionId()); qbQuestion.setType(type); @@ -3467,12 +3477,20 @@ } qbQuestion.setQbOptions(optionList); } + } else if (collection != null && !collectionUUIDs.contains(uuid)) { + addToCollection = true; } // question.setUnits(units); Needed for numerical type question question.setQbQuestion(qbQuestion); checkType(question.getType()); newQuestionSet.add(question); + + // all questions need to end up in user's private collection + if (addToCollection) { + qbService.addQuestionToCollection(collection.getUid(), qbQuestion.getQuestionId(), false); + collectionUUIDs.add(uuid); + } } // **************************** Now set up the references to the questions in the bank ********************* Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -r4c5a620700d152367d81a3ad8cf1d0f0b94f86ac -rffd223618c1aa29b58749a9ccfa54e26095a47dd --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 4c5a620700d152367d81a3ad8cf1d0f0b94f86ac) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision ffd223618c1aa29b58749a9ccfa54e26095a47dd) @@ -39,6 +39,7 @@ import java.util.TreeMap; import java.util.TreeSet; import java.util.UUID; +import java.util.stream.Collectors; import javax.servlet.http.HttpSession; @@ -61,6 +62,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.qb.model.QbCollection; import org.lamsfoundation.lams.qb.model.QbOption; import org.lamsfoundation.lams.qb.model.QbQuestion; import org.lamsfoundation.lams.qb.service.IQbService; @@ -2038,9 +2040,14 @@ createMc(mcq); + QbCollection collection = qbService.getUserPrivateCollection(userID); + Set collectionUUIDs = collection == null ? new HashSet<>() + : qbService.getCollectionQuestions(collection.getUid()).stream().filter(q -> q.getUuid() != null) + .collect(Collectors.mapping(q -> q.getUuid().toString(), Collectors.toSet())); // Questions ArrayNode questions = JsonUtil.optArray(toolContentJSON, RestTags.QUESTIONS); for (JsonNode questionData : questions) { + boolean addToCollection = false; McQueContent question = null; QbQuestion qbQuestion = null; String uuid = JsonUtil.optString(questionData, RestTags.QUESTION_UUID); @@ -2051,6 +2058,8 @@ } if (qbQuestion == null) { + addToCollection = collection != null; + qbQuestion = new QbQuestion(); qbQuestion.setQuestionId(qbService.generateNextQuestionId()); qbQuestion.setType(QbQuestion.TYPE_MULTIPLE_CHOICE); @@ -2067,10 +2076,18 @@ qbOption.setQbQuestion(qbQuestion); qbQuestion.getQbOptions().add(qbOption); } + } else if (collection != null && !collectionUUIDs.contains(uuid)) { + addToCollection = true; } question = new McQueContent(qbQuestion, JsonUtil.optInt(questionData, RestTags.DISPLAY_ORDER), mcq); saveOrUpdateMcQueContent(question); + + // all questions need to end up in user's private collection + if (addToCollection) { + qbService.addQuestionToCollection(collection.getUid(), qbQuestion.getQuestionId(), false); + collectionUUIDs.add(uuid); + } } } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r4c5a620700d152367d81a3ad8cf1d0f0b94f86ac -rffd223618c1aa29b58749a9ccfa54e26095a47dd --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 4c5a620700d152367d81a3ad8cf1d0f0b94f86ac) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision ffd223618c1aa29b58749a9ccfa54e26095a47dd) @@ -31,6 +31,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -43,6 +44,7 @@ import java.util.TreeSet; import java.util.UUID; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; @@ -60,6 +62,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.qb.model.QbCollection; import org.lamsfoundation.lams.qb.model.QbOption; import org.lamsfoundation.lams.qb.model.QbQuestion; import org.lamsfoundation.lams.qb.model.QbToolQuestion; @@ -2499,8 +2502,14 @@ // Scratchie Items Set newItems = new LinkedHashSet<>(); + QbCollection collection = qbService.getUserPrivateCollection(userID); + Set collectionUUIDs = collection == null ? new HashSet<>() + : qbService.getCollectionQuestions(collection.getUid()).stream().filter(q -> q.getUuid() != null) + .collect(Collectors.mapping(q -> q.getUuid().toString(), Collectors.toSet())); + ArrayNode questions = JsonUtil.optArray(toolContentJSON, RestTags.QUESTIONS); for (int i = 0; i < questions.size(); i++) { + boolean addToCollection = false; ObjectNode questionData = (ObjectNode) questions.get(i); ScratchieItem item = new ScratchieItem(); @@ -2516,8 +2525,9 @@ } if (qbQuestion == null) { + addToCollection = collection != null; + qbQuestion = new QbQuestion(); - qbQuestion.setType(QbQuestion.TYPE_MULTIPLE_CHOICE); qbQuestion.setQuestionId(qbService.generateNextQuestionId()); qbQuestion.setName(JsonUtil.optString(questionData, RestTags.QUESTION_TITLE)); @@ -2542,12 +2552,20 @@ } qbQuestion.setQbOptions(newOptions); + } else if (collection != null && !collectionUUIDs.contains(uuid)) { + addToCollection = true; } item.setQbQuestion(qbQuestion); // we need to save item now so it gets an ID and it will be recognised in a set scratchieItemDao.insert(item); newItems.add(item); + + // all questions need to end up in user's private collection + if (addToCollection) { + qbService.addQuestionToCollection(collection.getUid(), qbQuestion.getQuestionId(), false); + collectionUUIDs.add(uuid); + } } scratchie.setScratchieItems(newItems);