WorldIndicatorChartDataManagerImpl.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.Map;
  22. import java.util.Map.Entry;
  23. import java.util.stream.Collectors;

  24. import org.dussan.vaadin.dcharts.DCharts;
  25. import org.dussan.vaadin.dcharts.base.elements.XYseries;
  26. import org.dussan.vaadin.dcharts.data.DataSeries;
  27. import org.dussan.vaadin.dcharts.options.Series;
  28. import org.springframework.stereotype.Service;

  29. import com.hack23.cia.model.external.worldbank.data.impl.Country;
  30. import com.hack23.cia.model.external.worldbank.data.impl.WorldBankData;
  31. import com.hack23.cia.model.internal.application.data.impl.ViewWorldbankIndicatorDataCountrySummary;
  32. import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.WorldIndicatorChartDataManager;
  33. import com.vaadin.ui.AbstractOrderedLayout;

  34. /**
  35.  * The Class ChartDataManagerImpl.
  36.  */
  37. @Service
  38. public final class WorldIndicatorChartDataManagerImpl extends AbstractChartDataManagerImpl implements WorldIndicatorChartDataManager {

  39.     /**
  40.      * Instantiates a new world indicator chart data manager impl.
  41.      */
  42.     public WorldIndicatorChartDataManagerImpl() {
  43.         super();
  44.     }


  45.     /**
  46.      * Creates the indicator chart.
  47.      *
  48.      * @param content the content
  49.      * @param list the list
  50.      * @param summary the summary
  51.      */
  52.     @Override
  53.     public void createIndicatorChart(final AbstractOrderedLayout content,final List<WorldBankData> list,
  54.             final ViewWorldbankIndicatorDataCountrySummary summary) {

  55.         final Map<Country, List<WorldBankData>> countryIndicatorsMap = list.stream()
  56.                 .collect(Collectors.groupingBy(WorldBankData::getCountry, Collectors.toList()));


  57.         final Series series = new Series();
  58.         final DataSeries dataSeries = new DataSeries();


  59.         for (final Entry<Country, List<WorldBankData>> entry : countryIndicatorsMap.entrySet() ) {
  60.             series.addSeries(new XYseries().setLabel(entry.getKey().getValue()));

  61.             dataSeries.newSeries();

  62.             for (final WorldBankData item : entry.getValue()) {
  63.                 if (item != null && item.getYearDate() != null && item.getDataValue() != null
  64.                         && !item.getDataValue().isEmpty()) {
  65.                     dataSeries.add(item.getYearDate() + "-01-01", Float.valueOf(item.getDataValue()));
  66.                 }
  67.             }
  68.         }

  69.         addChart(content,summary.getSourceNote(), new DCharts().setDataSeries(dataSeries).setOptions(getChartOptions().createOptionsCountryLineChart(series)).show(), false);
  70.     }


  71. }