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.Calendar;
23 import java.util.Date;
24 import java.util.GregorianCalendar;
25 import java.util.List;
26 import java.util.Locale;
27 import java.util.Map;
28 import java.util.Map.Entry;
29 import java.util.Objects;
30 import java.util.stream.Collectors;
31
32 import org.dussan.vaadin.dcharts.DCharts;
33 import org.dussan.vaadin.dcharts.base.elements.XYseries;
34 import org.dussan.vaadin.dcharts.data.DataSeries;
35 import org.dussan.vaadin.dcharts.options.Series;
36 import org.springframework.beans.factory.annotation.Autowired;
37 import org.springframework.stereotype.Service;
38
39 import com.hack23.cia.model.internal.application.data.committee.impl.RiksdagenCommitteeDecisionTypeOrgSummaryEmbeddedId;
40 import com.hack23.cia.model.internal.application.data.committee.impl.RiksdagenCommitteeDecisionTypeSummaryEmbeddedId;
41 import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenCommitteeDecisionTypeDailySummary;
42 import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenCommitteeDecisionTypeOrgDailySummary;
43 import com.hack23.cia.service.api.ApplicationManager;
44 import com.hack23.cia.service.api.DataContainer;
45 import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.ChartOptions;
46 import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.DecisionChartDataManager;
47 import com.vaadin.ui.AbstractOrderedLayout;
48
49
50
51
52 @Service
53 public final class DecisionChartDataManagerImpl extends AbstractChartDataManagerImpl implements DecisionChartDataManager {
54
55
56 private static final String EMPTY_STRING = "";
57
58
59 private static final String UNDER_SCORE = "_";
60
61
62 private static final String DD_MMM_YYYY = "dd-MMM-yyyy";
63
64
65 @Autowired
66 private ApplicationManager applicationManager;
67
68
69 @Autowired
70 private ChartOptions chartOptions;
71
72
73
74
75
76 public DecisionChartDataManagerImpl() {
77 super();
78 }
79
80
81
82
83
84
85
86 private Map<String, List<ViewRiksdagenCommitteeDecisionTypeDailySummary>> getCommitteeDecisionTypeMap() {
87 final DataContainer<ViewRiksdagenCommitteeDecisionTypeDailySummary, RiksdagenCommitteeDecisionTypeSummaryEmbeddedId> committeeBallotDecisionPartyDataContainer = applicationManager
88 .getDataContainer(ViewRiksdagenCommitteeDecisionTypeDailySummary.class);
89
90 final Date now = new Date();
91 final Date notBefore = new GregorianCalendar(2000, Calendar.JANUARY, 1).getTime();
92 return committeeBallotDecisionPartyDataContainer.getAll().parallelStream()
93 .filter(t -> t != null && !t.getEmbeddedId().getDecisionDate().after(now)
94 && !notBefore.after(t.getEmbeddedId().getDecisionDate()))
95 .collect(Collectors.groupingBy(t -> t.getEmbeddedId().getDecisionType()));
96 }
97
98
99
100
101
102
103
104 private Map<String, List<ViewRiksdagenCommitteeDecisionTypeOrgDailySummary>> getCommitteeDecisionTypeOrgMap() {
105 final DataContainer<ViewRiksdagenCommitteeDecisionTypeOrgDailySummary, RiksdagenCommitteeDecisionTypeOrgSummaryEmbeddedId> committeeBallotDecisionPartyDataContainer = applicationManager
106 .getDataContainer(ViewRiksdagenCommitteeDecisionTypeOrgDailySummary.class);
107
108 return committeeBallotDecisionPartyDataContainer.getAll().parallelStream()
109 .filter(Objects::nonNull).collect(Collectors.groupingBy(t -> t.getEmbeddedId().getOrg()));
110 }
111
112
113 @Override
114 public void createDecisionTypeChart(final AbstractOrderedLayout content) {
115
116 final Map<String, List<ViewRiksdagenCommitteeDecisionTypeDailySummary>> map = getCommitteeDecisionTypeMap();
117
118 final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
119
120 final DataSeries dataSeries = new DataSeries();
121
122 final Series series = new Series();
123
124 for (final Entry<String, List<ViewRiksdagenCommitteeDecisionTypeDailySummary>> entry : map.entrySet()) {
125
126 if (entry.getKey() != null) {
127 series.addSeries(new XYseries().setLabel(entry.getKey()));
128
129 dataSeries.newSeries();
130 final List<ViewRiksdagenCommitteeDecisionTypeDailySummary> list = entry.getValue();
131 for (final ViewRiksdagenCommitteeDecisionTypeDailySummary item : list) {
132 if (item != null) {
133 dataSeries.add(simpleDateFormat.format(item.getEmbeddedId().getDecisionDate()),
134 item.getTotal());
135 }
136 }
137 }
138
139 }
140
141 addChart(content,"Decision type daily summary", new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsXYDateFloatLegendOutside(series)).show());
142 }
143
144
145 @Override
146 public void createDecisionTypeChart(final AbstractOrderedLayout content,final String org) {
147
148 final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
149
150 final DataSeries dataSeries = new DataSeries();
151 final Series series = new Series();
152
153 final Map<String, List<ViewRiksdagenCommitteeDecisionTypeOrgDailySummary>> allMap = getCommitteeDecisionTypeOrgMap();
154
155 final List<ViewRiksdagenCommitteeDecisionTypeOrgDailySummary> itemList = allMap
156 .get(org.toUpperCase(Locale.ENGLISH).replace(UNDER_SCORE, EMPTY_STRING).trim());
157
158 if (itemList != null) {
159
160 final Map<String, List<ViewRiksdagenCommitteeDecisionTypeOrgDailySummary>> map = itemList.parallelStream()
161 .filter(t -> t != null && t.getEmbeddedId().getDecisionDate() != null)
162 .collect(Collectors.groupingBy(t -> t.getEmbeddedId().getDecisionType()));
163
164 addDecisionTypeByOrgData(simpleDateFormat, dataSeries, series, map);
165 }
166
167 addChart(content,"Org Decision type daily summary", new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsXYDateFloatLegendOutside(series)).show());
168 }
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183 private static void addDecisionTypeByOrgData(final SimpleDateFormat simpleDateFormat, final DataSeries dataSeries,
184 final Series series, final Map<String, List<ViewRiksdagenCommitteeDecisionTypeOrgDailySummary>> map) {
185 for (final Entry<String, List<ViewRiksdagenCommitteeDecisionTypeOrgDailySummary>> entry : map.entrySet()) {
186 if (!EMPTY_STRING.equals(entry.getKey())) {
187
188 final XYseries label = new XYseries();
189 label.setLabel(entry.getKey());
190
191 series.addSeries(label);
192
193 dataSeries.newSeries();
194 for (final ViewRiksdagenCommitteeDecisionTypeOrgDailySummary item : entry.getValue()) {
195 if (item != null) {
196 dataSeries.add(simpleDateFormat.format(item.getEmbeddedId().getDecisionDate()),
197 item.getTotal());
198 }
199 }
200 }
201 }
202 }
203
204 }