1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.hack23.cia.web.impl.ui.application.views.common.chartfactory.impl;
20
21 import java.text.SimpleDateFormat;
22 import java.util.List;
23 import java.util.Locale;
24 import java.util.Map;
25 import java.util.Map.Entry;
26 import java.util.Objects;
27 import java.util.stream.Collectors;
28
29 import org.apache.commons.lang.StringUtils;
30 import org.dussan.vaadin.dcharts.DCharts;
31 import org.dussan.vaadin.dcharts.base.elements.XYseries;
32 import org.dussan.vaadin.dcharts.data.DataSeries;
33 import org.dussan.vaadin.dcharts.options.Series;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36 import org.springframework.beans.factory.annotation.Autowired;
37 import org.springframework.stereotype.Service;
38
39 import com.hack23.cia.model.internal.application.data.document.impl.RiksdagenDocumentPersonSummaryEmbeddedId;
40 import com.hack23.cia.model.internal.application.data.document.impl.ViewRiksdagenPoliticianDocumentDailySummary;
41 import com.hack23.cia.service.api.ApplicationManager;
42 import com.hack23.cia.service.api.DataContainer;
43 import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.ChartOptions;
44 import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.PersonDocumentChartDataManager;
45 import com.vaadin.ui.AbstractOrderedLayout;
46
47
48
49
50 @Service
51 public final class PersonDocumentChartDataManagerImpl extends AbstractChartDataManagerImpl implements PersonDocumentChartDataManager {
52
53 private static final String DOCUMENT_HISTORY = "Document history";
54
55
56 private static final String NO_INFO = "NoInfo";
57
58
59 private static final String LOG_MSG_MISSING_DATA_FOR_KEY = "missing data for key:{}";
60
61
62 private static final String EMPTY_STRING = "";
63
64
65 private static final String UNDER_SCORE = "_";
66
67
68 private static final Logger LOGGER = LoggerFactory.getLogger(PersonDocumentChartDataManagerImpl.class);
69
70
71 private static final String DD_MMM_YYYY = "dd-MMM-yyyy";
72
73
74 @Autowired
75 private ApplicationManager applicationManager;
76
77
78 @Autowired
79 private ChartOptions chartOptions;
80
81
82
83
84
85 public PersonDocumentChartDataManagerImpl() {
86 super();
87 }
88
89
90
91
92
93
94
95 private Map<String, List<ViewRiksdagenPoliticianDocumentDailySummary>> getViewRiksdagenPoliticianDocumentDailySummaryMap() {
96 final DataContainer<ViewRiksdagenPoliticianDocumentDailySummary, RiksdagenDocumentPersonSummaryEmbeddedId> politicianBallotSummaryDailyDataContainer = applicationManager
97 .getDataContainer(ViewRiksdagenPoliticianDocumentDailySummary.class);
98
99 return politicianBallotSummaryDailyDataContainer.getAll().parallelStream().filter(Objects::nonNull)
100 .collect(Collectors.groupingBy(t -> t.getEmbeddedId().getPersonId()));
101 }
102
103
104
105 @Override
106 public void createPersonDocumentHistoryChart(final AbstractOrderedLayout content,final String personId) {
107
108 final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
109
110 final DataSeries dataSeries = new DataSeries();
111
112 final Series series = new Series();
113
114 final Map<String, List<ViewRiksdagenPoliticianDocumentDailySummary>> allMap = getViewRiksdagenPoliticianDocumentDailySummaryMap();
115
116 final List<ViewRiksdagenPoliticianDocumentDailySummary> itemList = allMap
117 .get(personId.toUpperCase(Locale.ENGLISH).replace(UNDER_SCORE, EMPTY_STRING).trim());
118
119 if (itemList != null) {
120
121 final Map<String, List<ViewRiksdagenPoliticianDocumentDailySummary>> map = itemList.parallelStream()
122 .filter(Objects::nonNull).collect(Collectors.groupingBy(
123 t -> StringUtils.defaultIfBlank(t.getEmbeddedId().getDocumentType(), NO_INFO)));
124
125 addDocumentHistoryByPersonData(simpleDateFormat, dataSeries, series, map);
126 }
127
128 addChart(content,DOCUMENT_HISTORY, new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsXYDateFloatLegendOutside(series)).show());
129 }
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144 private static void addDocumentHistoryByPersonData(final SimpleDateFormat simpleDateFormat, final DataSeries dataSeries,
145 final Series series, final Map<String, List<ViewRiksdagenPoliticianDocumentDailySummary>> map) {
146 for (final Entry<String, List<ViewRiksdagenPoliticianDocumentDailySummary>> entry : map.entrySet()) {
147
148 series.addSeries(new XYseries().setLabel(entry.getKey()));
149
150 dataSeries.newSeries();
151 if (entry.getValue() != null) {
152 for (final ViewRiksdagenPoliticianDocumentDailySummary item : entry.getValue()) {
153 if (item != null) {
154 dataSeries.add(simpleDateFormat.format(item.getEmbeddedId().getPublicDate()),
155 item.getTotal());
156 }
157 }
158 } else {
159 LOGGER.info(LOG_MSG_MISSING_DATA_FOR_KEY, entry);
160 }
161
162 }
163 }
164
165 }