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  
25  import org.dussan.vaadin.dcharts.DCharts;
26  import org.dussan.vaadin.dcharts.base.elements.XYseries;
27  import org.dussan.vaadin.dcharts.data.DataSeries;
28  import org.dussan.vaadin.dcharts.options.Series;
29  import org.springframework.beans.factory.annotation.Autowired;
30  import org.springframework.stereotype.Service;
31  
32  import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryDaily;
33  import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.ChartOptions;
34  import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.GenericChartDataManager;
35  import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.PoliticianChartDataManager;
36  import com.vaadin.ui.AbstractOrderedLayout;
37  
38  /**
39   * The Class ChartDataManagerImpl.
40   */
41  @Service
42  public final class PoliticianDataManagerImpl extends AbstractChartDataManagerImpl implements PoliticianChartDataManager {
43  
44  	/** The Constant ABSENT. */
45  	private static final String ABSENT = "Absent";
46  
47  	/** The Constant PARTY_REBEL. */
48  	private static final String PARTY_REBEL = "Party Rebel";
49  
50  	/** The Constant WON. */
51  	private static final String WON = "Won";
52  
53  	/** The Constant NUMBER_BALLOTS. */
54  	private static final String NUMBER_BALLOTS = "Number ballots";
55  
56  	/** The Constant DD_MMM_YYYY. */
57  	private static final String DD_MMM_YYYY = "dd-MMM-yyyy";
58  
59  	/** The data chart manager. */
60  	@Autowired
61  	private GenericChartDataManager<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> dataChartManager;
62  
63  	/** The chart options. */
64  	@Autowired
65  	private ChartOptions chartOptions;
66  
67  
68  	/**
69  	 * Instantiates a new politician data manager impl.
70  	 */
71  	public PoliticianDataManagerImpl() {
72  		super();
73  	}
74  
75  
76  
77  	@Override
78  	public void createPersonLineChart(final AbstractOrderedLayout content,final String personId) {
79  
80  		final List<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> list = dataChartManager.findByValue(personId);
81  
82  		final Series series = new Series().addSeries(new XYseries().setLabel(WON))
83  				.addSeries(new XYseries().setLabel(PARTY_REBEL)).addSeries(new XYseries().setLabel(ABSENT))
84  				.addSeries(new XYseries().setLabel(NUMBER_BALLOTS));
85  
86  		final DataSeries dataSeries = new DataSeries().newSeries();
87  
88  		final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DD_MMM_YYYY, Locale.ENGLISH);
89  
90  		if (list != null) {
91  
92  			addPoliticianIndicatorData(list, dataSeries, simpleDateFormat);
93  
94  		}
95  
96  		addChart(content,"Ballot indicators", new DCharts().setDataSeries(dataSeries).setOptions(chartOptions.createOptionsPersonLineChart(series)).show());
97  	}
98  
99  
100 
101 	/**
102 	 * Adds the politician indicator data.
103 	 *
104 	 * @param list
105 	 *            the list
106 	 * @param dataSeries
107 	 *            the data series
108 	 * @param simpleDateFormat
109 	 *            the simple date format
110 	 */
111 	private static void addPoliticianIndicatorData(final List<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> list,
112 			final DataSeries dataSeries, final SimpleDateFormat simpleDateFormat) {
113 
114 		for (final ViewRiksdagenVoteDataBallotPoliticianSummaryDaily viewRiksdagenVoteDataBallotPoliticianSummaryDaily : list) {
115 			if (viewRiksdagenVoteDataBallotPoliticianSummaryDaily != null) {
116 				dataSeries.add(
117 						simpleDateFormat.format(
118 								viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getEmbeddedId().getVoteDate()),
119 						viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getWonPercentage());
120 			}
121 		}
122 
123 		dataSeries.newSeries();
124 
125 		for (final ViewRiksdagenVoteDataBallotPoliticianSummaryDaily viewRiksdagenVoteDataBallotPoliticianSummaryDaily : list) {
126 			if (viewRiksdagenVoteDataBallotPoliticianSummaryDaily != null) {
127 				dataSeries.add(
128 						simpleDateFormat.format(
129 								viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getEmbeddedId().getVoteDate()),
130 						viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getRebelPercentage());
131 			}
132 		}
133 
134 		dataSeries.newSeries();
135 		for (final ViewRiksdagenVoteDataBallotPoliticianSummaryDaily viewRiksdagenVoteDataBallotPoliticianSummaryDaily : list) {
136 			if (viewRiksdagenVoteDataBallotPoliticianSummaryDaily != null) {
137 				dataSeries.add(
138 						simpleDateFormat.format(
139 								viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getEmbeddedId().getVoteDate()),
140 						viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getPoliticianPercentageAbsent());
141 			}
142 		}
143 
144 		dataSeries.newSeries();
145 		for (final ViewRiksdagenVoteDataBallotPoliticianSummaryDaily viewRiksdagenVoteDataBallotPoliticianSummaryDaily : list) {
146 			if (viewRiksdagenVoteDataBallotPoliticianSummaryDaily != null) {
147 				dataSeries.add(
148 						simpleDateFormat.format(
149 								viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getEmbeddedId().getVoteDate()),
150 						viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getNumberBallots());
151 			}
152 		}
153 	}
154 
155 
156 }