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.RiksdagenDocumentPartySummaryEmbeddedId;
40 import com.hack23.cia.model.internal.application.data.document.impl.ViewRiksdagenPartyDocumentDailySummary;
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.PartyDocumentChartDataManager;
45 import com.vaadin.ui.AbstractOrderedLayout;
46
47
48
49
50 @Service
51 public final class PartyDocumentChartDataManagerImpl extends AbstractChartDataManagerImpl implements PartyDocumentChartDataManager {
52
53 private static final String DOCUMENT_HISTORY_PARTY = "Document history party";
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(PartyDocumentChartDataManagerImpl.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 PartyDocumentChartDataManagerImpl() {
86 super();
87 }
88
89
90
91
92
93
94
95 private Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> getViewRiksdagenPartyDocumentDailySummaryMap() {
96 final DataContainer<ViewRiksdagenPartyDocumentDailySummary, RiksdagenDocumentPartySummaryEmbeddedId> politicianBallotSummaryDailyDataContainer = applicationManager
97 .getDataContainer(ViewRiksdagenPartyDocumentDailySummary.class);
98
99 return politicianBallotSummaryDailyDataContainer.getAll().parallelStream().filter(Objects::nonNull)
100 .collect(Collectors.groupingBy(t -> t.getEmbeddedId().getPartyShortCode().toUpperCase(Locale.ENGLISH).replace(UNDER_SCORE, EMPTY_STRING).trim()));
101 }
102
103
104 @Override
105 public void createDocumentHistoryPartyChart(final AbstractOrderedLayout content,final String org) {
106 final DataSeries dataSeries = new DataSeries();
107 final Series series = new Series();
108
109 final Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> allMap = getViewRiksdagenPartyDocumentDailySummaryMap();
110
111 final List<ViewRiksdagenPartyDocumentDailySummary> itemList = allMap
112 .get(org.toUpperCase(Locale.ENGLISH).replace(UNDER_SCORE, EMPTY_STRING).trim());
113
114 if (itemList != null) {
115
116 final Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> map = itemList.parallelStream()
117 .filter(Objects::nonNull).collect(Collectors.groupingBy(
118 t -> StringUtils.defaultIfBlank(t.getEmbeddedId().getDocumentType(), NO_INFO)));
119
120 addDocumentHistoryByPartyData(dataSeries, series, map);
121 }
122
123 addChart(content, DOCUMENT_HISTORY_PARTY,new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsXYDateFloatLegendOutside(series)).show());
124 }
125
126
127
128
129
130
131
132
133
134
135
136
137 private static void addDocumentHistoryByPartyData(final DataSeries dataSeries, final Series series,
138 final Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> map) {
139 final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
140
141 for (final Entry<String, List<ViewRiksdagenPartyDocumentDailySummary>> entry : map.entrySet()) {
142
143 series.addSeries(new XYseries().setLabel(entry.getKey()));
144
145 dataSeries.newSeries();
146 if (entry.getValue() != null) {
147 for (final ViewRiksdagenPartyDocumentDailySummary item : entry.getValue()) {
148 if (item != null) {
149 dataSeries.add(simpleDateFormat.format(item.getEmbeddedId().getPublicDate()), item.getTotal());
150 }
151 }
152 } else {
153 LOGGER.info(LOG_MSG_MISSING_DATA_FOR_KEY, entry);
154 }
155
156 }
157 }
158
159 }