Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java =================================================================== diff -u -re6624f43adec1c2405914c4111c57d95f5ab60cf -r2c7b65efc6c0379bb0acf7d04d3b8cb44384c960 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision e6624f43adec1c2405914c4111c57d95f5ab60cf) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 2c7b65efc6c0379bb0acf7d04d3b8cb44384c960) @@ -65,9 +65,9 @@ QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid, Collection correctOptionUids); - List getPagedQuestions(String questionTypes, String collectionUids, int page, int size, String sortBy, String sortOrder, - String searchString); - + List getPagedQuestions(String questionTypes, String collectionUids, int page, int size, String sortBy, + String sortOrder, String searchString); + List getAllQuestionUids(String collectionUids, String sortBy, String sortOrder, String searchString); int getCountQuestions(String questionTypes, String collectionUids, String searchString); @@ -133,4 +133,6 @@ void releaseFromCache(Object object); boolean isQuestionInUserCollection(int qbQuestionId, int userId); + + void insertQuestion(QbQuestion qbQuestion); } Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -r4de125b4eb4a3059669e7808bf4b6a85f06c9077 -r2c7b65efc6c0379bb0acf7d04d3b8cb44384c960 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 4de125b4eb4a3059669e7808bf4b6a85f06c9077) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 2c7b65efc6c0379bb0acf7d04d3b8cb44384c960) @@ -234,8 +234,8 @@ // sort grades by highest mark Collections.sort(userLessonGrades, Comparator.comparing(GradebookUserLesson::getMark).reversed()); // see how many learners should be in top/bottom 27% of the group - int groupCount = (int) Math.ceil( - Configuration.getAsInt(ConfigurationKeys.QB_STATS_GROUP_SIZE) / 100.0 * participantCount); + int groupCount = (int) Math + .ceil(Configuration.getAsInt(ConfigurationKeys.QB_STATS_GROUP_SIZE) / 100.0 * participantCount); // go through each grade and gather data for indexes for (int userIndex = 0; userIndex < participantCount; userIndex++) { @@ -564,6 +564,46 @@ return qbDAO.isQuestionInUserCollection(userId, qbQuestionId); } + /** + * Cascades in QbToolQuestion, QbQuestion and QbOptions do not seem to work on insert. + * New QbQuestions need to be saved step by step. + */ + public void insertQuestion(QbQuestion qbQuestion) { + if (qbQuestion.getQuestionId() == null) { + qbQuestion.setQuestionId(generateNextQuestionId()); + } + + Collection qbOptions = qbQuestion.getQbOptions() == null ? null + : new ArrayList<>(qbQuestion.getQbOptions()); + if (qbOptions != null) { + qbQuestion.getQbOptions().clear(); + } + + Collection units = qbQuestion.getUnits() == null ? null + : new ArrayList<>(qbQuestion.getUnits()); + if (units != null) { + qbQuestion.getUnits().clear(); + } + + qbDAO.insert(qbQuestion); + + if (units != null) { + qbQuestion.getUnits().addAll(units); + for (QbQuestionUnit unit : units) { + unit.setQbQuestion(qbQuestion); + qbDAO.insert(unit); + } + } + + if (qbOptions != null) { + qbQuestion.getQbOptions().addAll(qbOptions); + for (QbOption qbOption : qbOptions) { + qbOption.setQbQuestion(qbQuestion); + qbDAO.insert(qbOption); + } + } + } + public void setQbDAO(IQbDAO qbDAO) { this.qbDAO = qbDAO; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -re6624f43adec1c2405914c4111c57d95f5ab60cf -r2c7b65efc6c0379bb0acf7d04d3b8cb44384c960 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision e6624f43adec1c2405914c4111c57d95f5ab60cf) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 2c7b65efc6c0379bb0acf7d04d3b8cb44384c960) @@ -2649,42 +2649,8 @@ // we need to save QB questions and options first for (AssessmentQuestion assessmentQuestion : toolContentObj.getQuestions()) { QbQuestion qbQuestion = assessmentQuestion.getQbQuestion(); - qbQuestion.setQuestionId(qbService.generateNextQuestionId()); - - Collection qbOptions = qbQuestion.getQbOptions() == null ? null - : new ArrayList<>(qbQuestion.getQbOptions()); - if (qbOptions != null) { - qbQuestion.getQbOptions().clear(); - } - - Collection units = qbQuestion.getUnits() == null ? null - : new ArrayList<>(qbQuestion.getUnits()); - if (units != null) { - qbQuestion.getUnits().clear(); - } - - assessmentDao.insert(qbQuestion); - - if (units != null) { - qbQuestion.getUnits().addAll(units); - for (QbQuestionUnit unit : units) { - unit.setQbQuestion(qbQuestion); - assessmentDao.insert(unit); - } - units.clear(); - } - - if (qbOptions != null) { - qbQuestion.getQbOptions().addAll(qbOptions); - for (QbOption qbOption : qbOptions) { - qbOption.setQbQuestion(qbQuestion); - assessmentDao.insert(qbOption); - } - qbOptions.clear(); - } - + qbService.insertQuestion(qbQuestion); qbService.addQuestionToCollection(publicQbCollectionUid, qbQuestion.getQuestionId(), false); - assessmentDao.insert(assessmentQuestion); } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -re6624f43adec1c2405914c4111c57d95f5ab60cf -r2c7b65efc6c0379bb0acf7d04d3b8cb44384c960 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision e6624f43adec1c2405914c4111c57d95f5ab60cf) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 2c7b65efc6c0379bb0acf7d04d3b8cb44384c960) @@ -1429,21 +1429,7 @@ // we need to save QB questions and options first for (McQueContent mcQuestion : toolContentObj.getMcQueContents()) { QbQuestion qbQuestion = mcQuestion.getQbQuestion(); - qbQuestion.setQuestionId(qbService.generateNextQuestionId()); - mcQuestion.setToolContentId(toolContentId); - - Collection qbOptions = new ArrayList<>(qbQuestion.getQbOptions()); - qbQuestion.getQbOptions().clear(); - - mcQueContentDAO.insert(qbQuestion); - - qbQuestion.getQbOptions().addAll(qbOptions); - for (QbOption qbOption : qbOptions) { - qbOption.setQbQuestion(qbQuestion); - mcQueContentDAO.insert(qbOption); - } - qbOptions.clear(); - + qbService.insertQuestion(qbQuestion); qbService.addQuestionToCollection(publicQbCollectionUid, qbQuestion.getQuestionId(), false); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -re6624f43adec1c2405914c4111c57d95f5ab60cf -r2c7b65efc6c0379bb0acf7d04d3b8cb44384c960 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision e6624f43adec1c2405914c4111c57d95f5ab60cf) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 2c7b65efc6c0379bb0acf7d04d3b8cb44384c960) @@ -1920,22 +1920,8 @@ // we need to save QB questions and options first for (ScratchieItem scratchieItem : toolContentObj.getScratchieItems()) { QbQuestion qbQuestion = scratchieItem.getQbQuestion(); - qbQuestion.setQuestionId(qbService.generateNextQuestionId()); - - Collection qbOptions = new ArrayList<>(qbQuestion.getQbOptions()); - qbQuestion.getQbOptions().clear(); - - scratchieDao.insert(qbQuestion); - - qbQuestion.getQbOptions().addAll(qbOptions); - for (QbOption qbOption : qbOptions) { - qbOption.setQbQuestion(qbQuestion); - scratchieDao.insert(qbOption); - } - qbOptions.clear(); - + qbService.insertQuestion(qbQuestion); qbService.addQuestionToCollection(publicQbCollectionUid, qbQuestion.getQuestionId(), false); - scratchieDao.insert(scratchieItem); }