]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Add generic copy/remove to/from collection(s)
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 27 Jan 2009 11:39:10 +0000 (11:39 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 27 Jan 2009 11:39:10 +0000 (11:39 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2135 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/CopyCollectionToCollectionController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/RemoveResultFromCollectionController.java
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml

diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/CopyCollectionToCollectionController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/CopyCollectionToCollectionController.java
new file mode 100644 (file)
index 0000000..1841a3f
--- /dev/null
@@ -0,0 +1,76 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.argeo.slc.SlcException;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
+import org.argeo.slc.services.test.TestManagerService;\r
+import org.argeo.slc.web.mvc.AbstractServiceController;\r
+import org.springframework.util.PatternMatchUtils;\r
+import org.springframework.web.servlet.ModelAndView;\r
+\r
+/**\r
+ * Copy from a collection to another based on Spring simple pattern matching.\r
+ * \r
+ * @see PatternMatchUtils\r
+ */\r
+public class CopyCollectionToCollectionController extends\r
+               AbstractServiceController {\r
+       private final TreeTestResultCollectionDao testResultCollectionDao;\r
+       private final TestManagerService testManagerService;\r
+\r
+       public CopyCollectionToCollectionController(\r
+                       TreeTestResultCollectionDao testResultCollectionDao,\r
+                       TestManagerService testManagerService) {\r
+               this.testResultCollectionDao = testResultCollectionDao;\r
+               this.testManagerService = testManagerService;\r
+       }\r
+\r
+       protected void handleServiceRequest(HttpServletRequest request,\r
+                       HttpServletResponse response, ModelAndView modelAndView)\r
+                       throws Exception {\r
+\r
+               String sourceCollectionId = request.getParameter("sourceCollectionId");\r
+               String targetCollectionId = request.getParameter("targetCollectionId");\r
+               String[] attrNames = request.getParameterValues("attrName");\r
+               String[] attrPatterns = request.getParameterValues("attrPattern");\r
+\r
+               // Checks\r
+               if (sourceCollectionId == null || targetCollectionId == null)\r
+                       throw new SlcException(\r
+                                       "Source and target collection ids must be specified");\r
+               if (attrNames != null\r
+                               && (attrPatterns == null || attrNames.length != attrPatterns.length))\r
+                       throw new SlcException(\r
+                                       "There must be as many attrName as attrPatterns");\r
+\r
+               TreeTestResultCollection sourceCollection = testResultCollectionDao\r
+                               .getTestResultCollection(sourceCollectionId);\r
+               if (attrNames != null) {\r
+                       int index = 0;\r
+                       for (String attrName : attrNames) {\r
+                               String attrPattern = attrPatterns[index];// safe: checked above\r
+\r
+                               for (TreeTestResult treeTestResult : sourceCollection\r
+                                               .getResults()) {\r
+                                       if (PatternMatchUtils.simpleMatch(attrPattern,\r
+                                                       treeTestResult.getAttributes().get(attrName))) {\r
+                                               testManagerService.addResultToCollection(\r
+                                                               targetCollectionId, treeTestResult.getUuid());\r
+                                       }\r
+                               }\r
+                               index++;\r
+                       }\r
+               } else {\r
+                       // remove all\r
+                       // TODO: optimize\r
+                       for (TreeTestResult treeTestResult : sourceCollection.getResults()) {\r
+                               testManagerService.addResultToCollection(targetCollectionId,\r
+                                               treeTestResult.getUuid());\r
+                       }\r
+               }\r
+       }\r
+}\r
index 8b655bd1baff62fdf756a371be2e1d322885a856..3f4f52e485b41963f83d370e17c06b9eb82e95cd 100644 (file)
@@ -3,16 +3,24 @@ package org.argeo.slc.web.mvc.result;
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
 \r
+import org.argeo.slc.SlcException;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
 import org.argeo.slc.services.test.TestManagerService;\r
 import org.argeo.slc.web.mvc.AbstractServiceController;\r
+import org.springframework.util.PatternMatchUtils;\r
 import org.springframework.web.servlet.ModelAndView;\r
 \r
 public class RemoveResultFromCollectionController extends\r
                AbstractServiceController {\r
+       private final TreeTestResultCollectionDao testResultCollectionDao;\r
        private final TestManagerService testManagerService;\r
 \r
        public RemoveResultFromCollectionController(\r
+                       TreeTestResultCollectionDao testResultCollectionDao,\r
                        TestManagerService testManagerService) {\r
+               this.testResultCollectionDao = testResultCollectionDao;\r
                this.testManagerService = testManagerService;\r
        }\r
 \r
@@ -21,8 +29,56 @@ public class RemoveResultFromCollectionController extends
                        throws Exception {\r
 \r
                String collectionId = request.getParameter("collectionId");\r
-               String resultUuid = request.getParameter("resultUuid");\r
+               String[] resultUuids = request.getParameterValues("resultUuid");\r
+               String[] attrNames = request.getParameterValues("attrName");\r
+               String[] attrPatterns = request.getParameterValues("attrPattern");\r
+\r
+               // Checks\r
+               if (collectionId == null)\r
+                       throw new SlcException("A collection id must be specified");\r
+               if (attrNames != null\r
+                               && (attrPatterns == null || attrNames.length != attrPatterns.length))\r
+                       throw new SlcException(\r
+                                       "There must be as many attrName as attrPatterns");\r
+\r
+               // Remove specified results\r
+               if (resultUuids != null)\r
+                       for (String resultUuid : resultUuids)\r
+                               testManagerService.removeResultFromCollection(collectionId,\r
+                                               resultUuid);\r
+\r
+               if (attrNames != null) {\r
+                       TreeTestResultCollection sourceCollection = testResultCollectionDao\r
+                                       .getTestResultCollection(collectionId);\r
+\r
+                       int index = 0;\r
+                       for (String attrName : attrNames) {\r
+                               String attrPattern = attrPatterns[index];// safe: checked above\r
+\r
+                               for (TreeTestResult treeTestResult : sourceCollection\r
+                                               .getResults()) {\r
+                                       if (PatternMatchUtils.simpleMatch(attrPattern,\r
+                                                       treeTestResult.getAttributes().get(attrName))) {\r
+                                               testManagerService.removeResultFromCollection(\r
+                                                               collectionId, treeTestResult.getUuid());\r
+                                       }\r
+                               }\r
+                               index++;\r
+                       }\r
+               } else {\r
+                       if (resultUuids == null) {// no specs\r
+                               // remove all\r
+                               // TODO: optimize\r
+                               TreeTestResultCollection sourceCollection = testResultCollectionDao\r
+                                               .getTestResultCollection(collectionId);\r
+                               for (TreeTestResult treeTestResult : sourceCollection\r
+                                               .getResults()) {\r
+                                       testManagerService.removeResultFromCollection(collectionId,\r
+                                                       treeTestResult.getUuid());\r
+                               }\r
+\r
+                       }\r
+               }\r
 \r
-               testManagerService.removeResultFromCollection(collectionId, resultUuid);\r
        }\r
 }\r
index 3f5f2ae421f959b6a406b9f0d67b2184d35aa464..c245ecabdaf956266206f4cba0127abf21316857 100644 (file)
@@ -16,6 +16,7 @@
 
        <bean name="/removeResultFromCollection.service"
                class="org.argeo.slc.web.mvc.result.RemoveResultFromCollectionController">
+               <constructor-arg ref="testResultCollectionDao" />
                <constructor-arg ref="testManagerService" />
        </bean>
 
                <constructor-arg ref="testResultCollectionDao" />
        </bean>
 
+       <bean name="/copyCollectionToCollection.service"
+               class="org.argeo.slc.web.mvc.result.CopyCollectionToCollectionController">
+               <constructor-arg ref="testResultCollectionDao" />
+               <constructor-arg ref="testManagerService" />
+       </bean>
+
        <bean name="/listAgents.service" class="org.argeo.slc.web.mvc.runtime.ListAgentsController">
                <constructor-arg ref="slcAgentDescriptorDao" />
        </bean>