1 package eu
.etaxonomy
.cdm
.remote
.controller
;
3 import java
.io
.IOException
;
4 import java
.util
.ArrayList
;
5 import java
.util
.HashSet
;
10 import javax
.servlet
.http
.HttpServletRequest
;
11 import javax
.servlet
.http
.HttpServletResponse
;
13 import org
.apache
.log4j
.Logger
;
14 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
15 import org
.springframework
.stereotype
.Controller
;
16 import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
17 import org
.springframework
.web
.bind
.annotation
.RequestMethod
;
18 import org
.springframework
.web
.bind
.annotation
.RequestParam
;
19 import org
.springframework
.web
.servlet
.ModelAndView
;
21 import eu
.etaxonomy
.cdm
.api
.service
.IClassificationService
;
22 import eu
.etaxonomy
.cdm
.api
.service
.IStatisticsService
;
23 import eu
.etaxonomy
.cdm
.api
.service
.statistics
.Statistics
;
24 import eu
.etaxonomy
.cdm
.api
.service
.statistics
.StatisticsConfigurator
;
25 import eu
.etaxonomy
.cdm
.api
.service
.statistics
.StatisticsPartEnum
;
26 import eu
.etaxonomy
.cdm
.api
.service
.statistics
.StatisticsTypeEnum
;
27 import eu
.etaxonomy
.cdm
.model
.common
.IdentifiableEntity
;
28 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
29 import eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
;
32 * this controller provides a method to count different entities in the entire
33 * database as well as from a particular classification items of different types
34 * can be chosen have a look at doStatistics method
41 @RequestMapping(value
= { "/statistics" })
42 public class StatisticsController
{
44 private static final Logger logger
= Logger
45 .getLogger(StatisticsController
.class);
48 private IClassificationService classificationService
;
50 private IStatisticsService service
;
53 public void setService(IStatisticsService service
) {
54 this.service
= service
;
61 * part=ALL&part=CLASSIFICATION&type=DESCRIPTIVE_SOURCE_REFERENCES&type=ALL_TAXA&type=ACCEPTED_TAXA&type=SYNONYMS&type=TAXON_NAMES&type=ALL_REFERENCES&type=NOMENCLATURAL_REFERENCES
71 @RequestMapping(method
= RequestMethod
.GET
)
72 public ModelAndView
doStatistics(
73 @RequestParam(value
= "part", required
= false) String
[] part
,
74 @RequestParam(value
= "type", required
= false) String
[] type
,
75 @RequestParam(value
= "classificationName", required
= false) String
[] classificationName
,
76 @RequestParam(value
= "classificationUuid", required
= false) String
[] classificationUuid
,
77 HttpServletRequest request
, HttpServletResponse response
)
80 ModelAndView mv
= new ModelAndView();
82 List
<StatisticsConfigurator
> configuratorList
= createConfiguratorList(
83 part
, type
, classificationName
, classificationUuid
);
84 List
<Statistics
> statistics
= service
85 .getCountStatistics(configuratorList
);
86 logger
.info("doStatistics() - " + request
.getRequestURI());
88 mv
.addObject(statistics
);
92 private List
<StatisticsConfigurator
> createConfiguratorList(String
[] part
,
93 String
[] type
, String
[] classificationName
,
94 String
[] classificationUuid
) {
96 ArrayList
<StatisticsConfigurator
> configuratorList
= new ArrayList
<StatisticsConfigurator
>();
98 // 1. get types for configurators:
99 // in our case all the configurators will have the same types
100 // so we calculate the types once and save them in a helperConfigurator
101 StatisticsConfigurator helperConfigurator
= new StatisticsConfigurator();
104 for (String string
: type
) {
105 helperConfigurator
.addType(StatisticsTypeEnum
.valueOf(string
));
107 } else { // if nothing is chosen, count all:
108 for (StatisticsTypeEnum enumValue
: StatisticsTypeEnum
.values()) {
109 helperConfigurator
.addType(enumValue
);
113 // 2. determine the search areas (entire db, all classifications or
114 // specific classifications) and put
115 // each of them in a configurator:
117 // gather classifications from names and uuids:
119 Set
<Classification
> classificationFilters
= new HashSet
<Classification
>();
121 if (classificationName
!= null) {
122 for (String string
: classificationName
) {
123 List
<Classification
> classifications
= classificationService
124 .listByTitle(Classification
.class, string
,
125 MatchMode
.EXACT
, null, null, null, null,
127 classificationFilters
.addAll(classifications
);
131 if (classificationUuid
!= null && classificationUuid
.length
> 0) {
132 for (String string
: classificationUuid
) {
133 if (classificationService
.exists(UUID
.fromString(string
))) {
134 classificationFilters
.add(classificationService
.find(UUID
135 .fromString(string
)));
140 // if no part at all was given:
141 if (part
== null && classificationFilters
.isEmpty()) {
142 helperConfigurator
.addFilter(service
.getFilterALL_DB());
143 configuratorList
.add(helperConfigurator
);
146 // else parse list of parts and create configurator for each:
148 helperConfigurator
.addFilter(service
.getFilterALL_DB());
149 for (String string
: part
) {
150 // System.out.println(StatisticsPartEnum.ALL.toString());
151 if (string
.equals(StatisticsPartEnum
.ALL
.toString())) {
152 configuratorList
.add(helperConfigurator
);
153 } else if (string
.equals(StatisticsPartEnum
.CLASSIFICATION
155 List
<Classification
> classificationsList
= classificationService
156 .listClassifications(null, 0, null, null);
157 classificationFilters
.addAll(classificationsList
);
162 for (Classification classification
: classificationFilters
) {
164 StatisticsConfigurator newConfigurator
= new StatisticsConfigurator();
165 newConfigurator
.setType(helperConfigurator
.getType());
166 newConfigurator
.getFilter().addAll(helperConfigurator
.getFilter());
167 newConfigurator
.addFilter(classification
);
168 configuratorList
.add(newConfigurator
);
171 return configuratorList
;