3 * Copyright (C) 2009 EDIT European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.remote
.controller
;
12 import java
.io
.IOException
;
13 import java
.util
.Arrays
;
14 import java
.util
.List
;
15 import java
.util
.UUID
;
17 import javax
.servlet
.http
.HttpServletRequest
;
18 import javax
.servlet
.http
.HttpServletResponse
;
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
;
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
;
41 * TODO write controller documentation
43 * @author a.kohlbecker
47 @RequestMapping(value
= {"/description"})
48 public class DescriptionListController
extends IdentifiableListController
<DescriptionBase
, IDescriptionService
> {
52 private ITermService termService
;
55 public TransmissionEngineDistribution transmissionEngineDistribution
;
58 public ProgressMonitorController progressMonitorController
;
61 * There should only be one longtime processes
62 * therefore the according progress monitor uuid is stored in
65 private static UUID transmissionEngineMonitorUuid
= null;
70 * @see eu.etaxonomy.cdm.remote.controller.BaseListController#setService(eu.etaxonomy.cdm.api.service.IService)
74 public void setService(IDescriptionService service
) {
75 this.service
= service
;
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
{
86 logger
.info("doAccumulateDistributions()" + request
.getRequestURI());
88 // transmissionEngineDistribution.updatePriorities();
90 String processLabel
= "accumulating distributions";
92 ProgressMonitorUtil progressUtil
= new ProgressMonitorUtil(progressMonitorController
);
94 final List
<String
> term_init_strategy
= Arrays
.asList(new String
[]{
98 if (!progressMonitorController
.isMonitorRunning(transmissionEngineMonitorUuid
)) {
99 transmissionEngineMonitorUuid
= progressUtil
.registerNewMonitor();
100 Thread subThread
= new Thread() {
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
));
109 if(priority
== null) {
110 priority
= AbstractController
.DEFAULT_BATCH_THREAD_PRIORITY
;
112 subThread
.setPriority(priority
);
116 // send redirect "see other"
117 return progressUtil
.respondWithMonitor(frontendBaseUrl
, request
, response
, processLabel
, transmissionEngineMonitorUuid
);