View Javadoc
1   /*
2    * Copyright 2014 James Pether Sörling
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *   http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   *	$Id$
17   *  $HeadURL$
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.dussan.vaadin.dcharts.DCharts;
30  import org.dussan.vaadin.dcharts.base.elements.XYseries;
31  import org.dussan.vaadin.dcharts.data.DataSeries;
32  import org.dussan.vaadin.dcharts.options.Series;
33  import org.springframework.beans.factory.annotation.Autowired;
34  import org.springframework.stereotype.Service;
35  
36  import com.hack23.cia.model.internal.application.data.impl.ApplicationActionEventPageElementPeriodSummaryEmbeddedId;
37  import com.hack23.cia.model.internal.application.data.impl.ApplicationActionEventPageElementPeriodSummaryEmbeddedId_;
38  import com.hack23.cia.model.internal.application.data.impl.ApplicationActionEventPageModePeriodSummaryEmbeddedId;
39  import com.hack23.cia.model.internal.application.data.impl.ApplicationActionEventPageModePeriodSummaryEmbeddedId_;
40  import com.hack23.cia.model.internal.application.data.impl.ApplicationActionEventPagePeriodSummaryEmbeddedId;
41  import com.hack23.cia.model.internal.application.data.impl.ViewApplicationActionEventPageDailySummary;
42  import com.hack23.cia.model.internal.application.data.impl.ViewApplicationActionEventPageElementDailySummary;
43  import com.hack23.cia.model.internal.application.data.impl.ViewApplicationActionEventPageElementDailySummary_;
44  import com.hack23.cia.model.internal.application.data.impl.ViewApplicationActionEventPageModeDailySummary;
45  import com.hack23.cia.model.internal.application.data.impl.ViewApplicationActionEventPageModeDailySummary_;
46  import com.hack23.cia.service.api.ApplicationManager;
47  import com.hack23.cia.service.api.DataContainer;
48  import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.AdminChartDataManager;
49  import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.ChartOptions;
50  import com.vaadin.ui.AbstractOrderedLayout;
51  
52  /**
53   * The Class ChartDataManagerImpl.
54   */
55  @Service
56  public final class AdminChartDataManagerImpl extends AbstractChartDataManagerImpl implements AdminChartDataManager {
57  
58  	/** The Constant PAGE_RANK. */
59  	private static final String PAGE_RANK = "Page Rank";
60  
61  	/** The Constant PAGE_HITS. */
62  	private static final String PAGE_HITS = "Page Hits";
63  
64  	/** The Constant DD_MMM_YYYY. */
65  	private static final String DD_MMM_YYYY = "dd-MMM-yyyy";
66  
67  	/** The application manager. */
68  	@Autowired
69  	private ApplicationManager applicationManager;
70  
71  	/** The chart options. */
72  	@Autowired
73  	private ChartOptions chartOptions;
74  
75  	/**
76  	 * Instantiates a new admin chart data manager impl.
77  	 */
78  	public AdminChartDataManagerImpl() {
79  		super();
80  	}
81  
82  
83  	/**
84  	 * Gets the application action event page daily summary map.
85  	 *
86  	 * @return the application action event page daily summary map
87  	 */
88  	private Map<String, List<ViewApplicationActionEventPageDailySummary>> getApplicationActionEventPageDailySummaryMap() {
89  		final DataContainer<ViewApplicationActionEventPageDailySummary, ApplicationActionEventPagePeriodSummaryEmbeddedId> documentTypeSummaryDailyDataContainer = applicationManager
90  				.getDataContainer(ViewApplicationActionEventPageDailySummary.class);
91  
92  		return documentTypeSummaryDailyDataContainer.getAll().parallelStream()
93  				.filter(Objects::nonNull)
94  				.collect(Collectors.groupingBy(t -> t.getEmbeddedId().getPage()));
95  	}
96  
97  
98  	@Override
99  	public void createApplicationActionEventPageDailySummaryChart(final AbstractOrderedLayout content) {
100 
101 		final Map<String, List<ViewApplicationActionEventPageDailySummary>> map = getApplicationActionEventPageDailySummaryMap();
102 
103 		final DataSeries dataSeries = new DataSeries();
104 
105 		final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
106 
107 		final Series series = new Series();
108 
109 		for (final Entry<String, List<ViewApplicationActionEventPageDailySummary>> entry : map.entrySet()) {
110 
111 			if (entry.getKey() != null) {
112 				series.addSeries(new XYseries().setLabel(entry.getKey()));
113 
114 				dataSeries.newSeries();
115 				final List<ViewApplicationActionEventPageDailySummary> list = entry.getValue();
116 				for (final ViewApplicationActionEventPageDailySummary viewRiksdagenVoteDataBallotPartySummaryDaily : list) {
117 					if (viewRiksdagenVoteDataBallotPartySummaryDaily != null) {
118 						dataSeries.add(simpleDateFormat.format(viewRiksdagenVoteDataBallotPartySummaryDaily.getEmbeddedId().getCreatedDate()),
119 								viewRiksdagenVoteDataBallotPartySummaryDaily.getHits());
120 					}
121 				}
122 			}
123 
124 		}
125 
126 		addChart(content,"Application Action Events daily Summary", new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsXYDateFloatLogYAxisLegendOutside(series)).show());
127 	}
128 
129 
130 	/**
131 	 * Gets the application action event page mode daily summary map.
132 	 *
133 	 * @param page
134 	 *            the page
135 	 * @return the application action event page mode daily summary map
136 	 */
137 	private Map<String, List<ViewApplicationActionEventPageModeDailySummary>> getApplicationActionEventPageModeDailySummaryMap(final String page) {
138 		final DataContainer<ViewApplicationActionEventPageModeDailySummary, ApplicationActionEventPageModePeriodSummaryEmbeddedId> documentTypeSummaryDailyDataContainer = applicationManager
139 				.getDataContainer(ViewApplicationActionEventPageModeDailySummary.class);
140 
141 		final List<ViewApplicationActionEventPageModeDailySummary> findOrderedListByEmbeddedProperty = documentTypeSummaryDailyDataContainer.findOrderedListByEmbeddedProperty(ViewApplicationActionEventPageModeDailySummary.class, ViewApplicationActionEventPageModeDailySummary_.embeddedId, ApplicationActionEventPageModePeriodSummaryEmbeddedId.class, ApplicationActionEventPageModePeriodSummaryEmbeddedId_.page, page, ApplicationActionEventPageModePeriodSummaryEmbeddedId_.createdDate);
142 
143 		return findOrderedListByEmbeddedProperty.parallelStream()
144 				.filter(Objects::nonNull)
145 				.collect(Collectors.groupingBy(t -> t.getEmbeddedId().getPageMode()));
146 	}
147 
148 
149 
150 
151 	@Override
152 	public void createApplicationActionEventPageModeDailySummaryChart(final AbstractOrderedLayout content,final String page) {
153 
154 		final Map<String, List<ViewApplicationActionEventPageModeDailySummary>> map = getApplicationActionEventPageModeDailySummaryMap(page);
155 
156 		final DataSeries dataSeries = new DataSeries();
157 
158 		final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
159 
160 		final Series series = new Series();
161 
162 		for (final Entry<String, List<ViewApplicationActionEventPageModeDailySummary>> entry : map.entrySet()) {
163 
164 			if (entry.getKey() != null) {
165 				series.addSeries(new XYseries().setLabel(entry.getKey()));
166 
167 				dataSeries.newSeries();
168 				final List<ViewApplicationActionEventPageModeDailySummary> list = entry.getValue();
169 				for (final ViewApplicationActionEventPageModeDailySummary item : list) {
170 					if (item != null) {
171 						dataSeries.add(simpleDateFormat.format(item.getEmbeddedId().getCreatedDate()),
172 								item.getHits());
173 					}
174 				}
175 			}
176 
177 		}
178 
179 		addChart(content,"Page Action Events daily Summary", new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsXYDateFloatLogYAxisLegendOutside(series)).show());
180 	}
181 
182 
183 	/**
184 	 * Gets the application action event page element daily summary list.
185 	 *
186 	 * @param page
187 	 *            the page
188 	 * @param elementId
189 	 *            the element id
190 	 * @return the application action event page element daily summary list
191 	 */
192 	private List<ViewApplicationActionEventPageElementDailySummary> getApplicationActionEventPageElementDailySummaryList(final String page,final String elementId) {
193 		final DataContainer<ViewApplicationActionEventPageElementDailySummary, ApplicationActionEventPageElementPeriodSummaryEmbeddedId> documentTypeSummaryDailyDataContainer = applicationManager
194 				.getDataContainer(ViewApplicationActionEventPageElementDailySummary.class);
195 
196 		final List<ViewApplicationActionEventPageElementDailySummary> findOrderedListByEmbeddedProperty = documentTypeSummaryDailyDataContainer.findOrderedListByEmbeddedProperty(ViewApplicationActionEventPageElementDailySummary.class, ViewApplicationActionEventPageElementDailySummary_.embeddedId, ApplicationActionEventPageElementPeriodSummaryEmbeddedId.class, ApplicationActionEventPageElementPeriodSummaryEmbeddedId_.elementId, elementId, ApplicationActionEventPageElementPeriodSummaryEmbeddedId_.createdDate);
197 
198 		return findOrderedListByEmbeddedProperty.parallelStream()
199 				.filter(t -> t != null && t.getEmbeddedId().getPage().equals(page))
200 				.collect(Collectors.toList());
201 	}
202 
203 
204 	@Override
205 	public void createApplicationActionEventPageElementDailySummaryChart(final AbstractOrderedLayout content,final String page,final String elementId) {
206 
207 		final List<ViewApplicationActionEventPageElementDailySummary> list = getApplicationActionEventPageElementDailySummaryList(page,elementId);
208 
209 		final DataSeries dataSeries = new DataSeries();
210 
211 		final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
212 
213 		final Series series = new Series();
214 
215 		series.addSeries(new XYseries().setLabel(PAGE_HITS));
216 		dataSeries.newSeries();
217 		for (final ViewApplicationActionEventPageElementDailySummary item : list) {
218 			if (item != null) {
219 				dataSeries.add(simpleDateFormat.format(item.getEmbeddedId().getCreatedDate()),
220 						item.getHits());
221 			}
222 		}
223 
224 		series.addSeries(new XYseries().setLabel(PAGE_RANK));
225 		dataSeries.newSeries();
226 		for (final ViewApplicationActionEventPageElementDailySummary item : list) {
227 			if (item != null) {
228 				dataSeries.add(simpleDateFormat.format(item.getEmbeddedId().getCreatedDate()),
229 						item.getRank());
230 			}
231 		}
232 
233 		addChart(content, "Page element Action Events daily Summary",new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsXYDateFloatLogYAxisLegendOutside(series)).show());
234 	}
235 
236 
237 }