Index: lams_central/src/java/org/lamsfoundation/lams/web/qb/EditQbQuestionController.java =================================================================== diff -u -rd4ca48e53c792f5021279765d8263ebdbd516339 -rc523acbc3644669e512c80d89d369392067f96dd --- lams_central/src/java/org/lamsfoundation/lams/web/qb/EditQbQuestionController.java (.../EditQbQuestionController.java) (revision d4ca48e53c792f5021279765d8263ebdbd516339) +++ lams_central/src/java/org/lamsfoundation/lams/web/qb/EditQbQuestionController.java (.../EditQbQuestionController.java) (revision c523acbc3644669e512c80d89d369392067f96dd) @@ -301,6 +301,27 @@ return "qb/authoring/unitlist"; } + /** + * Ajax call, will remove the given unit + */ + @RequestMapping("/removeUnit") + public String removeUnit(HttpServletRequest request, @RequestParam int unitToRemoveIndex) + throws ServletException, IOException { + Set unitList = qbService.getUnitsFromRequest(request, false); + Set newUnitList = new TreeSet<>(); + int displayOrder = 0; + for (QbQuestionUnit unit : unitList) { + if (unitToRemoveIndex != unit.getDisplayOrder()) { + unit.setDisplayOrder(displayOrder); + displayOrder++; + newUnitList.add(unit); + } + } + + request.setAttribute(QbConstants.ATTR_UNIT_LIST, newUnitList); + return "qb/authoring/unitlist"; + } + @RequestMapping(path = "/checkQuestionExistsInToolActivities") @ResponseBody public String checkQuestionExistsInToolActivities(@RequestParam(name = "toolContentIds[]") Set toolContentIds, Index: lams_central/web/qb/authoring/addnumerical.jsp =================================================================== diff -u -r2a000dc2b7043ef41dab9b0b9d417a76a58f20ea -rc523acbc3644669e512c80d89d369392067f96dd --- lams_central/web/qb/authoring/addnumerical.jsp (.../addnumerical.jsp) (revision 2a000dc2b7043ef41dab9b0b9d417a76a58f20ea) +++ lams_central/web/qb/authoring/addnumerical.jsp (.../addnumerical.jsp) (revision c523acbc3644669e512c80d89d369392067f96dd) @@ -114,11 +114,22 @@ $("#unitArea").load( url, { - questionType: QUESTION_TYPE, unitList: unitList } ); } + + function removeUnit(index){ + var url= "/lams/qb/edit/removeUnit.do", + unitList = $("#unitForm").serialize(true); + $("#unitArea").load( + url, + { + unitToRemoveIndex : index, + unitList: unitList + } + ); + } Index: lams_central/web/qb/authoring/unitlist.jsp =================================================================== diff -u -r6cbd849584c40532c6be292f9f009c88cde9439c -rc523acbc3644669e512c80d89d369392067f96dd --- lams_central/web/qb/authoring/unitlist.jsp (.../unitlist.jsp) (revision 6cbd849584c40532c6be292f9f009c88cde9439c) +++ lams_central/web/qb/authoring/unitlist.jsp (.../unitlist.jsp) (revision c523acbc3644669e512c80d89d369392067f96dd) @@ -21,7 +21,8 @@ id="unitDisplayOrder${status.index}"> - + + @@ -37,6 +38,10 @@ + + " + onclick="javascript:removeUnit(${status.index})"> + Index: lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java =================================================================== diff -u -r59390e4bf349a52e22884134d890724cac1440be -rc523acbc3644669e512c80d89d369392067f96dd --- lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java (.../QbQuestion.java) (revision 59390e4bf349a52e22884134d890724cac1440be) +++ lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java (.../QbQuestion.java) (revision c523acbc3644669e512c80d89d369392067f96dd) @@ -162,7 +162,7 @@ @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) private List qbOptions = new ArrayList<>(); - @OneToMany(mappedBy = "qbQuestion", cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OneToMany(mappedBy = "qbQuestion", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) private List units = new ArrayList<>(); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -rb0a4fbc85e1574ef3efe06a1020b84e2d7c7a75e -rc523acbc3644669e512c80d89d369392067f96dd --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision b0a4fbc85e1574ef3efe06a1020b84e2d7c7a75e) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision c523acbc3644669e512c80d89d369392067f96dd) @@ -992,13 +992,13 @@ // set units if (type == QbQuestion.TYPE_NUMERICAL) { Set unitList = getUnitsFromRequest(request, true); - List units = new ArrayList<>(); + qbQuestion.getUnits().clear(); int displayOrder = 0; for (QbQuestionUnit unit : unitList) { + unit.setQbQuestion(qbQuestion); unit.setDisplayOrder(displayOrder++); - units.add(unit); + qbQuestion.getUnits().add(unit); } - qbQuestion.setUnits(units); } return qbQuestion.isQbQuestionModified(oldQuestion);