reducing confusion about featureTree REST services and default initstrategy
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / DescriptionListController.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 EDIT European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 1.1 See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.remote.controller;
11
12 import java.io.IOException;
13 import java.util.Arrays;
14 import java.util.List;
15 import java.util.UUID;
16
17 import javax.servlet.http.HttpServletRequest;
18 import javax.servlet.http.HttpServletResponse;
19
20 import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.stereotype.Controller;
22 import org.springframework.web.bind.annotation.RequestMapping;
23 import org.springframework.web.bind.annotation.RequestMethod;
24 import org.springframework.web.bind.annotation.RequestParam;
25 import org.springframework.web.servlet.ModelAndView;
26
27 import eu.etaxonomy.cdm.api.service.IDescriptionService;
28 import eu.etaxonomy.cdm.api.service.ITermService;
29 import eu.etaxonomy.cdm.api.service.description.TransmissionEngineDistribution;
30 import eu.etaxonomy.cdm.api.service.description.TransmissionEngineDistribution.AggregationMode;
31 import eu.etaxonomy.cdm.api.service.pager.Pager;
32 import eu.etaxonomy.cdm.model.description.DescriptionBase;
33 import eu.etaxonomy.cdm.model.location.NamedArea;
34 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
35 import eu.etaxonomy.cdm.model.location.NamedAreaType;
36 import eu.etaxonomy.cdm.model.name.Rank;
37 import eu.etaxonomy.cdm.persistence.query.OrderHint;
38 import eu.etaxonomy.cdm.remote.controller.util.ProgressMonitorUtil;
39
40 /**
41 * TODO write controller documentation
42 *
43 * @author a.kohlbecker
44 * @date 24.03.2009
45 */
46 @Controller
47 @RequestMapping(value = {"/description"})
48 public class DescriptionListController extends IdentifiableListController<DescriptionBase, IDescriptionService> {
49
50
51 @Autowired
52 private ITermService termService;
53
54 @Autowired
55 public TransmissionEngineDistribution transmissionEngineDistribution;
56
57 @Autowired
58 public ProgressMonitorController progressMonitorController;
59
60 /**
61 * There should only be one longtime processes
62 * therefore the according progress monitor uuid is stored in
63 * this static field.
64 */
65 private static UUID transmissionEngineMonitorUuid = null;
66
67
68
69 /* (non-Javadoc)
70 * @see eu.etaxonomy.cdm.remote.controller.BaseListController#setService(eu.etaxonomy.cdm.api.service.IService)
71 */
72 @Override
73 @Autowired
74 public void setService(IDescriptionService service) {
75 this.service = service;
76 }
77
78 @RequestMapping(value = { "accumulateDistributions" }, method = RequestMethod.GET)
79 public ModelAndView doAccumulateDistributions(
80 @RequestParam(value= "mode", required = true) final AggregationMode mode,
81 @RequestParam(value = "frontendBaseUrl", required = false) String frontendBaseUrl,
82 @RequestParam(value = "priority", required = false) Integer priority,
83 HttpServletRequest request,
84 HttpServletResponse response) throws IOException {
85
86 logger.info("doAccumulateDistributions()" + request.getRequestURI());
87
88 // transmissionEngineDistribution.updatePriorities();
89
90 String processLabel = "accumulating distributions";
91
92 ProgressMonitorUtil progressUtil = new ProgressMonitorUtil(progressMonitorController);
93
94 final List<String> term_init_strategy = Arrays.asList(new String []{
95 "representations"
96 });
97
98 if (!progressMonitorController.isMonitorRunning(transmissionEngineMonitorUuid)) {
99 transmissionEngineMonitorUuid = progressUtil.registerNewMonitor();
100 Thread subThread = new Thread() {
101 @Override
102 public void run() {
103 Pager<NamedArea> areaPager = termService.list(NamedAreaLevel.TDWG_LEVEL3(), (NamedAreaType) null,
104 null, null, (List<OrderHint>) null, term_init_strategy);
105 transmissionEngineDistribution.accumulate(mode, areaPager.getRecords(), Rank.SUBSPECIES(), Rank.GENUS(),
106 null, progressMonitorController.getMonitor(transmissionEngineMonitorUuid));
107 }
108 };
109 if(priority == null) {
110 priority = AbstractController.DEFAULT_BATCH_THREAD_PRIORITY;
111 }
112 subThread.setPriority(priority);
113 subThread.start();
114 }
115
116 // send redirect "see other"
117 return progressUtil.respondWithMonitor(frontendBaseUrl, request, response, processLabel, transmissionEngineMonitorUuid);
118 }
119 }