]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/CopyCollectionToCollectionController.java
1841a3fcc95ba5386fc49ed8106cbdeb75e65629
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / result / CopyCollectionToCollectionController.java
1 package org.argeo.slc.web.mvc.result;
2
3 import javax.servlet.http.HttpServletRequest;
4 import javax.servlet.http.HttpServletResponse;
5
6 import org.argeo.slc.SlcException;
7 import org.argeo.slc.core.test.tree.TreeTestResult;
8 import org.argeo.slc.core.test.tree.TreeTestResultCollection;
9 import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;
10 import org.argeo.slc.services.test.TestManagerService;
11 import org.argeo.slc.web.mvc.AbstractServiceController;
12 import org.springframework.util.PatternMatchUtils;
13 import org.springframework.web.servlet.ModelAndView;
14
15 /**
16 * Copy from a collection to another based on Spring simple pattern matching.
17 *
18 * @see PatternMatchUtils
19 */
20 public class CopyCollectionToCollectionController extends
21 AbstractServiceController {
22 private final TreeTestResultCollectionDao testResultCollectionDao;
23 private final TestManagerService testManagerService;
24
25 public CopyCollectionToCollectionController(
26 TreeTestResultCollectionDao testResultCollectionDao,
27 TestManagerService testManagerService) {
28 this.testResultCollectionDao = testResultCollectionDao;
29 this.testManagerService = testManagerService;
30 }
31
32 protected void handleServiceRequest(HttpServletRequest request,
33 HttpServletResponse response, ModelAndView modelAndView)
34 throws Exception {
35
36 String sourceCollectionId = request.getParameter("sourceCollectionId");
37 String targetCollectionId = request.getParameter("targetCollectionId");
38 String[] attrNames = request.getParameterValues("attrName");
39 String[] attrPatterns = request.getParameterValues("attrPattern");
40
41 // Checks
42 if (sourceCollectionId == null || targetCollectionId == null)
43 throw new SlcException(
44 "Source and target collection ids must be specified");
45 if (attrNames != null
46 && (attrPatterns == null || attrNames.length != attrPatterns.length))
47 throw new SlcException(
48 "There must be as many attrName as attrPatterns");
49
50 TreeTestResultCollection sourceCollection = testResultCollectionDao
51 .getTestResultCollection(sourceCollectionId);
52 if (attrNames != null) {
53 int index = 0;
54 for (String attrName : attrNames) {
55 String attrPattern = attrPatterns[index];// safe: checked above
56
57 for (TreeTestResult treeTestResult : sourceCollection
58 .getResults()) {
59 if (PatternMatchUtils.simpleMatch(attrPattern,
60 treeTestResult.getAttributes().get(attrName))) {
61 testManagerService.addResultToCollection(
62 targetCollectionId, treeTestResult.getUuid());
63 }
64 }
65 index++;
66 }
67 } else {
68 // remove all
69 // TODO: optimize
70 for (TreeTestResult treeTestResult : sourceCollection.getResults()) {
71 testManagerService.addResultToCollection(targetCollectionId,
72 treeTestResult.getUuid());
73 }
74 }
75 }
76 }