DocumentChartDataManagerImpl.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.text.SimpleDateFormat;
  21. import java.util.List;
  22. import java.util.Locale;
  23. import java.util.Map;
  24. import java.util.Map.Entry;
  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.RiksdagenDocumentTypeSummaryEmbeddedId;
  35. import com.hack23.cia.model.internal.application.data.document.impl.ViewRiksdagenDocumentTypeDailySummary;
  36. import com.hack23.cia.service.api.DataContainer;
  37. import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.DocumentChartDataManager;
  38. import com.vaadin.ui.AbstractOrderedLayout;

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

  45.     /** The Constant EMPTY_STRING. */
  46.     private static final String EMPTY_STRING = "";

  47.     /** The Constant LOGGER. */
  48.     private static final Logger LOGGER = LoggerFactory.getLogger(DocumentChartDataManagerImpl.class);

  49.     /** The Constant MOT_PROP_BET. */
  50.     private static final String MOT_PROP_BET = "mot:prop:bet";

  51.     /** The Constant YEAR_PREFIX. */
  52.     private static final String YEAR_PREFIX = "19";

  53.     /**
  54.      * Instantiates a new document chart data manager impl.
  55.      */
  56.     public DocumentChartDataManagerImpl() {
  57.         super();
  58.     }

  59.     /**
  60.      * Adds the data series.
  61.      *
  62.      * @param dataSeries the data series
  63.      * @param series the series
  64.      * @param entry the entry
  65.      */
  66.     private static void addDataSeries(final DataSeries dataSeries, final Series series,
  67.             final Entry<String, List<ViewRiksdagenDocumentTypeDailySummary>> entry) {

  68.         series.addSeries(new XYseries().setLabel(entry.getKey()));
  69.         dataSeries.newSeries();
  70.         final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.ENGLISH);

  71.         for (final ViewRiksdagenDocumentTypeDailySummary item : entry.getValue()) {
  72.             if (item != null && item.getEmbeddedId().getPublicDate().length() > 0) {
  73.                 try {
  74.                     dataSeries.add(DateUtils.formatDate(simpleDateFormat.parse(item.getEmbeddedId().getPublicDate())), item.getTotal());
  75.                 } catch (final Exception e) {
  76.                     LOGGER.warn("Problem parsing date:{}", item.getEmbeddedId().getPublicDate());
  77.                 }

  78.             }
  79.         }
  80.     }

  81.     /**
  82.      * Creates the document type chart.
  83.      *
  84.      * @param layout the layout
  85.      */
  86.     @Override
  87.     public void createDocumentTypeChart(final AbstractOrderedLayout layout) {
  88.         final Map<String, List<ViewRiksdagenDocumentTypeDailySummary>> documentTypeMap = getDocumentTypeMap();

  89.         final DataSeries dataSeries = new DataSeries();
  90.         final Series series = new Series();

  91.         for (final Entry<String, List<ViewRiksdagenDocumentTypeDailySummary>> documentTypeEntry : documentTypeMap.entrySet()) {
  92.             if (documentTypeEntry.getKey() != null && !EMPTY_STRING.equals(documentTypeEntry.getKey())) {
  93.                 addDataSeries(dataSeries, series, documentTypeEntry);
  94.             }
  95.         }

  96.         addChart(layout, "Document type",
  97.                 new DCharts().setDataSeries(dataSeries)
  98.                         .setOptions(getChartOptions().createOptionsXYDateFloatLegendInsideOneColumn(series)).show(),
  99.                 true);
  100.     }

  101.     /**
  102.      * Gets the document type map.
  103.      *
  104.      * @return the document type map
  105.      */
  106.     private Map<String, List<ViewRiksdagenDocumentTypeDailySummary>> getDocumentTypeMap() {
  107.         final DataContainer<ViewRiksdagenDocumentTypeDailySummary, RiksdagenDocumentTypeSummaryEmbeddedId> documentTypeSummaryDailyDataContainer = getApplicationManager()
  108.                 .getDataContainer(ViewRiksdagenDocumentTypeDailySummary.class);

  109.         return documentTypeSummaryDailyDataContainer.getAll().parallelStream()
  110.                 .filter(t -> t != null && !t.getEmbeddedId().getPublicDate().startsWith(YEAR_PREFIX)
  111.                         && StringUtils.containsIgnoreCase(MOT_PROP_BET, t.getEmbeddedId().getDocumentType()))
  112.                 .collect(Collectors.groupingBy(t -> t.getEmbeddedId().getDocumentType()));
  113.     }

  114. }