Index: lams_central/src/java/org/lamsfoundation/lams/web/qb/QbCollectionController.java =================================================================== diff -u -r4d33113a6642a8c4e598c9606c7bc1f65f07ed71 -r399b35bc9ee55acf1d64596c09b96fe5aee73709 --- lams_central/src/java/org/lamsfoundation/lams/web/qb/QbCollectionController.java (.../QbCollectionController.java) (revision 4d33113a6642a8c4e598c9606c7bc1f65f07ed71) +++ lams_central/src/java/org/lamsfoundation/lams/web/qb/QbCollectionController.java (.../QbCollectionController.java) (revision 399b35bc9ee55acf1d64596c09b96fe5aee73709) @@ -22,18 +22,23 @@ package org.lamsfoundation.lams.web.qb; +import java.io.IOException; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.qb.model.QbCollection; import org.lamsfoundation.lams.qb.model.QbQuestion; import org.lamsfoundation.lams.qb.service.IQbService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.CommonConstants; +import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; @@ -48,6 +53,8 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; +import com.fasterxml.jackson.databind.node.ArrayNode; + @Controller @RequestMapping("/qb/collection") public class QbCollectionController { @@ -144,6 +151,25 @@ return null; } + @RequestMapping("/removeCollectionQuestions") + @ResponseBody + public void removeCollectionQuestions(@RequestParam long collectionUid, @RequestParam String included, + @RequestParam String excluded) throws IOException { + if (StringUtils.isBlank(excluded)) { + ArrayNode includedJSON = JsonUtil.readArray(included); + for (int index = 0; index < includedJSON.size(); index++) { + qbService.removeQuestionFromCollection(collectionUid, includedJSON.get(index).asLong()); + } + } else { + ArrayNode excludedJSON = JsonUtil.readArray(excluded); + Set excludedSet = new HashSet<>(); + for (int index = 0; index < excludedJSON.size(); index++) { + excludedSet.add(excludedJSON.get(index).asLong()); + } + qbService.removeCollectionQuestion(collectionUid, excludedSet); + } + } + private Integer getUserId() { HttpSession ss = SessionManager.getSession(); UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); Index: lams_central/web/qb/collection.jsp =================================================================== diff -u -r4d33113a6642a8c4e598c9606c7bc1f65f07ed71 -r399b35bc9ee55acf1d64596c09b96fe5aee73709 --- lams_central/web/qb/collection.jsp (.../collection.jsp) (revision 4d33113a6642a8c4e598c9606c7bc1f65f07ed71) +++ lams_central/web/qb/collection.jsp (.../collection.jsp) (revision 399b35bc9ee55acf1d64596c09b96fe5aee73709) @@ -11,6 +11,9 @@ @@ -20,7 +23,7 @@
-
+
+
+ +
Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -r4dfbbc90e3d414eaf3f4282a3a38b4ec741384d7 -r399b35bc9ee55acf1d64596c09b96fe5aee73709 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 4dfbbc90e3d414eaf3f4282a3a38b4ec741384d7) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 399b35bc9ee55acf1d64596c09b96fe5aee73709) @@ -555,7 +555,7 @@ - PROPAGATION_REQUIRED + PROPAGATION_REQUIRED Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java =================================================================== diff -u -r43d88e533dd5666feeaeab4368982ad8028bfae3 -r399b35bc9ee55acf1d64596c09b96fe5aee73709 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision 43d88e533dd5666feeaeab4368982ad8028bfae3) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision 399b35bc9ee55acf1d64596c09b96fe5aee73709) @@ -1,5 +1,6 @@ package org.lamsfoundation.lams.qb.dao; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -52,4 +53,6 @@ void addCollectionQuestion(long collectionUid, long qbQuestionUid); void removeCollectionQuestion(long collectionUid, long qbQuestionUid); + + void removeCollectionQuestion(long collectionUid, Collection qbQuestionUids); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java =================================================================== diff -u -r43d88e533dd5666feeaeab4368982ad8028bfae3 -r399b35bc9ee55acf1d64596c09b96fe5aee73709 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision 43d88e533dd5666feeaeab4368982ad8028bfae3) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision 399b35bc9ee55acf1d64596c09b96fe5aee73709) @@ -1,6 +1,7 @@ package org.lamsfoundation.lams.qb.dao.hibernate; import java.math.BigInteger; +import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -55,6 +56,9 @@ private static final String REMOVE_COLLECTION_QUESTION = "DELETE FROM lams_qb_collection_question WHERE collection_uid = :collectionUid AND qb_question_uid = :qbQuestionUid"; + private static final String REMOVE_COLLECTION_QUESTION_EXCLUDED = "DELETE FROM lams_qb_collection_question WHERE collection_uid = :collectionUid " + + "AND qb_question_uid NOT IN :qbQuestionUids"; + @Override public QbQuestion getQbQuestionByUid(Long qbQuestionUid) { return (QbQuestion) this.find(QbQuestion.class, qbQuestionUid); @@ -260,6 +264,12 @@ .setParameter("qbQuestionUid", qbQuestionUid).executeUpdate(); } + @Override + public void removeCollectionQuestion(long collectionUid, Collection qbQuestionUids) { + getSession().createNativeQuery(REMOVE_COLLECTION_QUESTION_EXCLUDED).setParameter("collectionUid", collectionUid) + .setParameterList("qbQuestionUids", qbQuestionUids).executeUpdate(); + } + private Query prepareCollectionQuestionsQuery(long collectionUid, String orderBy, String orderDirection, String search, boolean isCount) { StringBuilder queryBuilder = new StringBuilder(FIND_COLLECTION_QUESTIONS); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java =================================================================== diff -u -r43d88e533dd5666feeaeab4368982ad8028bfae3 -r399b35bc9ee55acf1d64596c09b96fe5aee73709 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 43d88e533dd5666feeaeab4368982ad8028bfae3) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 399b35bc9ee55acf1d64596c09b96fe5aee73709) @@ -77,4 +77,6 @@ void addQuestionToCollection(long collectionUid, long qbQuestionUid); void removeQuestionFromCollection(long collectionUid, long qbQuestionUid); + + void removeCollectionQuestion(long collectionUid, Collection qbQuestionUids); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -r1a05f1012b275958950d9a69cd9260ee75338c95 -r399b35bc9ee55acf1d64596c09b96fe5aee73709 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 1a05f1012b275958950d9a69cd9260ee75338c95) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 399b35bc9ee55acf1d64596c09b96fe5aee73709) @@ -329,6 +329,11 @@ qbDAO.removeCollectionQuestion(collectionUid, qbQuestionUid); } + @Override + public void removeCollectionQuestion(long collectionUid, Collection qbQuestionUids) { + qbDAO.removeCollectionQuestion(collectionUid, qbQuestionUids); + } + public void setQbDAO(IQbDAO qbDAO) { this.qbDAO = qbDAO; }