PoliticianDataManagerImpl.java

  1. /*
  2.  * Copyright 2010-2025 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. import java.util.List;
  21. import java.util.function.Function;

  22. import org.dussan.vaadin.dcharts.DCharts;
  23. import org.dussan.vaadin.dcharts.base.elements.XYseries;
  24. import org.dussan.vaadin.dcharts.data.DataSeries;
  25. import org.dussan.vaadin.dcharts.options.Series;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Service;

  28. import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryDaily;
  29. import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.GenericChartDataManager;
  30. import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.PoliticianChartDataManager;
  31. import com.vaadin.ui.AbstractOrderedLayout;

  32. /**
  33.  * The Class ChartDataManagerImpl.
  34.  */
  35. @Service
  36. public final class PoliticianDataManagerImpl extends AbstractChartDataManagerImpl implements PoliticianChartDataManager {

  37.     /** The Constant ABSENT. */
  38.     private static final String ABSENT = "Absent";

  39.     /** The Constant NUMBER_BALLOTS. */
  40.     private static final String NUMBER_BALLOTS = "Number ballots";

  41.     /** The Constant PARTY_REBEL. */
  42.     private static final String PARTY_REBEL = "Party Rebel";

  43.     /** The Constant WON. */
  44.     private static final String WON = "Won";

  45.     /** The data chart manager. */
  46.     @Autowired
  47.     private GenericChartDataManager<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> dataChartManager;

  48.     /**
  49.      * Instantiates a new politician data manager impl.
  50.      */
  51.     public PoliticianDataManagerImpl() {
  52.         super();
  53.     }



  54.     /**
  55.      * Adds the politican data.
  56.      *
  57.      * @param list             the list
  58.      * @param dataSeries       the data series
  59.      * @param t                the t
  60.      */
  61.     private static void addPoliticanData(final List<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> list,
  62.             final DataSeries dataSeries, final Function<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily, Object> t) {
  63.         dataSeries.newSeries();
  64.         for (final ViewRiksdagenVoteDataBallotPoliticianSummaryDaily viewRiksdagenVoteDataBallotPoliticianSummaryDaily : list) {
  65.             if (viewRiksdagenVoteDataBallotPoliticianSummaryDaily != null) {
  66.                 dataSeries.add(
  67.                         DateUtils.formatDate(
  68.                                 viewRiksdagenVoteDataBallotPoliticianSummaryDaily.getEmbeddedId().getVoteDate()),
  69.                         t.apply(viewRiksdagenVoteDataBallotPoliticianSummaryDaily));
  70.                 }
  71.         }
  72.     }



  73.     /**
  74.      * Adds the politician indicator data.
  75.      *
  76.      * @param list
  77.      *            the list
  78.      * @param dataSeries
  79.      *            the data series
  80.      */
  81.     private static void addPoliticianIndicatorData(final List<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> list,
  82.             final DataSeries dataSeries) {
  83.         addPoliticanData(list, dataSeries, ViewRiksdagenVoteDataBallotPoliticianSummaryDaily::getWonPercentage);
  84.         addPoliticanData(list, dataSeries, ViewRiksdagenVoteDataBallotPoliticianSummaryDaily::getRebelPercentage);
  85.         addPoliticanData(list, dataSeries, ViewRiksdagenVoteDataBallotPoliticianSummaryDaily::getPoliticianPercentageAbsent);
  86.         addPoliticanData(list, dataSeries, ViewRiksdagenVoteDataBallotPoliticianSummaryDaily::getNumberBallots);
  87.     }




  88.     /**
  89.      * Creates the person line chart.
  90.      *
  91.      * @param layout the layout
  92.      * @param personId the person id
  93.      */
  94.     @Override
  95.     public void createPersonLineChart(final AbstractOrderedLayout layout,final String personId) {

  96.         final List<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> list = dataChartManager.findByValue(personId);

  97.         final Series series = new Series().addSeries(new XYseries().setLabel(WON))
  98.                 .addSeries(new XYseries().setLabel(PARTY_REBEL)).addSeries(new XYseries().setLabel(ABSENT))
  99.                 .addSeries(new XYseries().setLabel(NUMBER_BALLOTS));

  100.         final DataSeries dataSeries = new DataSeries();

  101.         if (list != null) {
  102.             addPoliticianIndicatorData(list, dataSeries);
  103.         }

  104.         ChartUtils.addChart(layout,"Ballot indicators", new DCharts().setDataSeries(dataSeries).setOptions(getChartOptions().createOptionsPersonLineChart(series)).show(), true);
  105.     }


  106. }