PartyDocumentChartDataManagerImpl.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.Locale;
  22. import java.util.Map;
  23. import java.util.Map.Entry;
  24. import java.util.Objects;
  25. import java.util.stream.Collectors;

  26. import org.apache.commons.lang3.StringUtils;
  27. import org.dussan.vaadin.dcharts.DCharts;
  28. import org.dussan.vaadin.dcharts.base.elements.XYseries;
  29. import org.dussan.vaadin.dcharts.data.DataSeries;
  30. import org.dussan.vaadin.dcharts.options.Series;
  31. import org.slf4j.Logger;
  32. import org.slf4j.LoggerFactory;
  33. import org.springframework.stereotype.Service;

  34. import com.hack23.cia.model.internal.application.data.document.impl.RiksdagenDocumentPartySummaryEmbeddedId;
  35. import com.hack23.cia.model.internal.application.data.document.impl.ViewRiksdagenPartyDocumentDailySummary;
  36. import com.hack23.cia.service.api.DataContainer;
  37. import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.PartyDocumentChartDataManager;
  38. import com.vaadin.ui.AbstractOrderedLayout;

  39. /**
  40.  * The Class PartyDocumentChartDataManagerImpl.
  41.  */
  42. @Service
  43. public final class PartyDocumentChartDataManagerImpl extends AbstractChartDataManagerImpl
  44.         implements PartyDocumentChartDataManager {

  45.     /** The Constant DOCUMENT_HISTORY_PARTY. */
  46.     private static final String DOCUMENT_HISTORY_PARTY = "Document history party";

  47.     /** The Constant EMPTY_STRING. */
  48.     private static final String EMPTY_STRING = "";

  49.     /** The Constant LOG_MSG_MISSING_DATA_FOR_KEY. */
  50.     private static final String LOG_MSG_MISSING_DATA_FOR_KEY = "missing data for key:{}";

  51.     /** The Constant LOGGER. */
  52.     private static final Logger LOGGER = LoggerFactory.getLogger(PartyDocumentChartDataManagerImpl.class);

  53.     /** The Constant NO_INFO. */
  54.     private static final String NO_INFO = "NoInfo";

  55.     /** The Constant UNDER_SCORE. */
  56.     private static final String UNDER_SCORE = "_";

  57.     /**
  58.      * Instantiates a new party document chart data manager impl.
  59.      */
  60.     public PartyDocumentChartDataManagerImpl() {
  61.         super();
  62.     }

  63.     /**
  64.      * Adds the document history by party data.
  65.      *
  66.      * @param dataSeries the data series
  67.      * @param series the series
  68.      * @param map the map
  69.      */
  70.     private static void addDocumentHistoryByPartyData(final DataSeries dataSeries, final Series series,
  71.             final Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> map) {

  72.         for (final Entry<String, List<ViewRiksdagenPartyDocumentDailySummary>> documentTypeEntry : map.entrySet()) {

  73.             series.addSeries(new XYseries().setLabel(documentTypeEntry.getKey()));

  74.             dataSeries.newSeries();
  75.             if (documentTypeEntry.getValue() != null) {
  76.                 for (final ViewRiksdagenPartyDocumentDailySummary item : documentTypeEntry.getValue()) {
  77.                     dataSeries.add(DateUtils.formatDate(item.getEmbeddedId().getPublicDate()), item.getTotal());
  78.                 }
  79.             } else {
  80.                 LOGGER.info(LOG_MSG_MISSING_DATA_FOR_KEY, documentTypeEntry);
  81.             }

  82.         }
  83.     }

  84.     /**
  85.      * Creates the document history party chart.
  86.      *
  87.      * @param layout the layout
  88.      * @param partyShortCode the party short code
  89.      */
  90.     @Override
  91.     public void createDocumentHistoryPartyChart(final AbstractOrderedLayout layout, final String partyShortCode) {
  92.         final DataSeries dataSeries = new DataSeries();
  93.         final Series series = new Series();

  94.         final Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> allMap = getViewRiksdagenPartyDocumentDailySummaryMap();

  95.         final List<ViewRiksdagenPartyDocumentDailySummary> itemList = allMap
  96.                 .get(partyShortCode.toUpperCase(Locale.ENGLISH).replace(UNDER_SCORE, EMPTY_STRING).trim());

  97.         if (itemList != null) {

  98.             final Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> documentTypeMap = itemList.parallelStream()
  99.                     .filter(Objects::nonNull).collect(Collectors
  100.                             .groupingBy(t -> StringUtils.defaultIfBlank(t.getEmbeddedId().getDocumentType(), NO_INFO)));

  101.             addDocumentHistoryByPartyData(dataSeries, series, documentTypeMap);
  102.         }

  103.         addChart(layout, DOCUMENT_HISTORY_PARTY,
  104.                 new DCharts().setDataSeries(dataSeries)
  105.                         .setOptions(getChartOptions().createOptionsXYDateFloatLegendInsideOneColumn(series)).show(),
  106.                 true);
  107.     }

  108.     /**
  109.      * Gets the view riksdagen party document daily summary map.
  110.      *
  111.      * @return the view riksdagen party document daily summary map
  112.      */
  113.     private Map<String, List<ViewRiksdagenPartyDocumentDailySummary>> getViewRiksdagenPartyDocumentDailySummaryMap() {
  114.         final DataContainer<ViewRiksdagenPartyDocumentDailySummary, RiksdagenDocumentPartySummaryEmbeddedId> politicianBallotSummaryDailyDataContainer = getApplicationManager()
  115.                 .getDataContainer(ViewRiksdagenPartyDocumentDailySummary.class);

  116.         return politicianBallotSummaryDailyDataContainer.getAll().parallelStream().filter(Objects::nonNull)
  117.                 .collect(Collectors.groupingBy(t -> t.getEmbeddedId().getPartyShortCode().toUpperCase(Locale.ENGLISH)
  118.                         .replace(UNDER_SCORE, EMPTY_STRING).trim()));
  119.     }

  120. }