From f6d658f7db2cad552bd68f7a1ea485f280f05568 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 9 Dec 2008 21:06:19 +0000 Subject: [PATCH] Introduce listResults service with filtering on collectionId and attributes RESOLVED - bug 71: Extend capabilities of web services https://www.argeo.org/bugzilla/show_bug.cgi?id=71 git-svn-id: https://svn.argeo.org/slc/trunk@1987 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../web/mvc/result/ListResultsController.java | 47 ++++++++++++++++++ .../slc/server/spring/slc-service-servlet.xml | 5 ++ .../resources/org/argeo/slc/castor/msg.xml | 9 ++++ .../TreeTestResultCollectionDaoHibernate.java | 48 +++++++++++++++++++ .../core/test/tree/TreeTestResultList.java | 27 +++++++++++ .../tree/TreeTestResultCollectionDao.java | 14 ++++++ .../slc/dao/test/tree/TreeTestResultDao.java | 7 +++ 7 files changed, 157 insertions(+) create mode 100644 runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ListResultsController.java create mode 100644 runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultList.java diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ListResultsController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ListResultsController.java new file mode 100644 index 000000000..a09abdf6d --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ListResultsController.java @@ -0,0 +1,47 @@ +package org.argeo.slc.web.mvc.result; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.argeo.slc.core.test.tree.TreeTestResult; +import org.argeo.slc.core.test.tree.TreeTestResultList; +import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao; +import org.argeo.slc.web.mvc.AbstractServiceController; +import org.springframework.web.servlet.ModelAndView; + +/** Lists results possibly filtering them. */ +public class ListResultsController extends AbstractServiceController { + private final TreeTestResultCollectionDao testResultCollectionDao; + + public ListResultsController( + TreeTestResultCollectionDao testResultCollectionDao) { + this.testResultCollectionDao = testResultCollectionDao; + } + + @Override + protected void handleServiceRequest(HttpServletRequest request, + HttpServletResponse response, ModelAndView modelAndView) + throws Exception { + String collectionId = request.getParameter("id"); + + Map parameterMap = request.getParameterMap(); + + Map attributes = new HashMap(); + for (String parameter : parameterMap.keySet()) { + if (parameter.startsWith("attr.")) { + String key = parameter.substring("attr.".length()); + attributes.put(key, parameterMap.get(parameter)[0]); + } + } + + List resultAttributes = testResultCollectionDao + .listResults(collectionId, attributes); + + modelAndView.addObject("resultList", new TreeTestResultList( + resultAttributes)); + } +} diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml index a4400d2ac..b6182c083 100644 --- a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml @@ -29,6 +29,11 @@ + + + + listResults(String collectionId, + Map attributes) { + List list; + + if (collectionId == null) { + if (attributes == null || attributes.size() == 0) + list = getHibernateTemplate().find("from TreeTestResult"); + else if (attributes.size() == 1) { + Map.Entry entry = attributes.entrySet() + .iterator().next(); + Object[] args = { entry.getKey(), entry.getValue() }; + list = getHibernateTemplate().find( + "select ttr from TreeTestResult ttr" + + " where attributes[?]=?", args); + } else { + throw new SlcException( + "Multiple attributes filter are currently not supported."); + } + } else { + if (attributes == null || attributes.size() == 0) + list = getHibernateTemplate() + .find( + "select ttr " + + " from TreeTestResult ttr, TreeTestResultCollection ttrc " + + " where ttr in elements(ttrc.results) and ttrc.id=?", + collectionId); + else if (attributes.size() == 1) { + Map.Entry entry = attributes.entrySet() + .iterator().next(); + Object[] args = { collectionId, entry.getKey(), + entry.getValue() }; + list = getHibernateTemplate() + .find( + "select ttr from TreeTestResult ttr, TreeTestResultCollection ttrc " + + " where ttr in elements(ttrc.results) and ttrc.id=?" + + " and attributes[?]=?", args); + } else { + throw new SlcException( + "Multiple attributes filter are currently not supported."); + } + } + return list; + } } diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultList.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultList.java new file mode 100644 index 000000000..52189f2f6 --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultList.java @@ -0,0 +1,27 @@ +package org.argeo.slc.core.test.tree; + +import java.util.ArrayList; +import java.util.List; + +/** List of results. Used for marshaling. */ +public class TreeTestResultList { + private List list = new ArrayList(); + + public TreeTestResultList() { + super(); + } + + public TreeTestResultList(List list) { + super(); + this.list = list; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + +} diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultCollectionDao.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultCollectionDao.java index 3b1101ee2..92e7eae57 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultCollectionDao.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultCollectionDao.java @@ -1,11 +1,14 @@ package org.argeo.slc.dao.test.tree; import java.util.List; +import java.util.Map; import java.util.SortedSet; import org.argeo.slc.core.test.tree.ResultAttributes; +import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.core.test.tree.TreeTestResultCollection; +/** Collections DAO */ public interface TreeTestResultCollectionDao { public void create(TreeTestResultCollection ttrCollection); @@ -15,13 +18,24 @@ public interface TreeTestResultCollectionDao { public TreeTestResultCollection getTestResultCollection(String id); + /** Lists all collections */ public SortedSet listCollections(); + /** + * Lists only result ids and attributes of the results belonging to these + * collection, or all results if id is null. + */ public List listResultAttributes(String collectionId); + /** Lists results filtering based on the arguments. */ + public List listResults(String collectionId, + Map attributes); + + /** Adds a result to a collection. */ public void addResultToCollection(TreeTestResultCollection ttrc, String resultUuid); + /** Removes a result from a collection. */ public void removeResultFromCollection(TreeTestResultCollection ttrc, String resultUuid); diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultDao.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultDao.java index 396d20dc3..7c5cc6e7a 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultDao.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultDao.java @@ -9,14 +9,21 @@ import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.dao.test.TestResultDao; import org.argeo.slc.structure.StructureElement; +/** + * Adds DAO features specific to tree test result. + * + * @see TreeTestResult + */ public interface TreeTestResultDao extends TestResultDao { /** Lists results containing this path */ public List listResults(TreeSPath path); + /** Adds a result part related to this path */ public void addResultPart(String testResultId, TreeSPath path, SimpleResultPart resultPart, Map relatedElements); + /** Update attributes */ public void updateAttributes(String testResultId, Map attributes); } -- 2.39.5