ChartUtils.java
package com.hack23.cia.web.impl.ui.application.views.common.chartfactory.impl;
import java.util.Optional;
import org.dussan.vaadin.dcharts.DCharts;
import com.hack23.cia.model.internal.application.data.party.impl.ViewRiksdagenParty;
import com.hack23.cia.service.api.ApplicationManager;
import com.hack23.cia.service.api.DataContainer;
import com.hack23.cia.web.impl.ui.application.views.common.sizing.ContentRatio;
import com.vaadin.server.Page;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Panel;
/**
* The Class ChartUtils.
*/
public final class ChartUtils {
/** The Constant CHART_BOTTOM_MARGIN_SIZE. */
private static final int CHART_BOTTOM_MARGIN_SIZE = 2;
/** The Constant CHART_LEFT_MARGIN. */
private static final int CHART_LEFT_MARGIN = 2;
/** The Constant CHART_RIGHT_MARGIN = 2;. */
private static final int CHART_RIGHT_MARGIN = 2;
/** The Constant CHART_TOP_MARGIN_SIZE. */
private static final int CHART_TOP_MARGIN_SIZE = 2;
/** The Constant CHART_WIDTH_REDUCTION. */
private static final int CHART_WIDTH_REDUCTION = 50;
/** The Constant HEIGHT_PERCENTAGE_FULL_PAGE. */
private static final double HEIGHT_PERCENTAGE_FULL_PAGE = 0.8;
/** The Constant HEIGHT_PERCETAGE_HALF_PAGE. */
private static final double HEIGHT_PERCETAGE_HALF_PAGE = 0.5;
/** The Constant MINIMUM_CHART_HEIGHT_FULL_PAGE. */
private static final int MINIMUM_CHART_HEIGHT_FULL_PAGE = 400;
/** The Constant MINIMUM_CHART_WIDTH. */
private static final int MINIMUM_CHART_WIDTH = 600;
/** The Constant NINIMUM_CHART_HEIGHT_HALF_PAGE. */
private static final int NINIMUM_CHART_HEIGHT_HALF_PAGE = 200;
/**
* Instantiates a new chart utils.
*/
private ChartUtils() {
// Utility class
}
/**
* Gets the chart window height.
*
* @param isFullPage the is full page
* @return the chart window height
*/
public static int getChartWindowHeight(final boolean isFullPage) {
if (isFullPage) {
return Math.max((int) (Page.getCurrent().getBrowserWindowHeight() * HEIGHT_PERCENTAGE_FULL_PAGE), MINIMUM_CHART_HEIGHT_FULL_PAGE);
} else {
return Math.max((int) (Page.getCurrent().getBrowserWindowHeight() * HEIGHT_PERCETAGE_HALF_PAGE), NINIMUM_CHART_HEIGHT_HALF_PAGE);
}
}
/**
* Gets the chart window width.
*
* @return the chart window width
*/
public static int getChartWindowWidth() {
return Math.max(Page.getCurrent().getBrowserWindowWidth() - CHART_WIDTH_REDUCTION, MINIMUM_CHART_WIDTH);
}
/**
* Adds the chart.
*
* @param layout the layout
* @param caption the caption
* @param chart the chart
* @param isFullPage the is full page
*/
public static void addChart(final AbstractOrderedLayout layout, final String caption, final DCharts chart, final boolean isFullPage) {
final HorizontalLayout horizontalLayout = new HorizontalLayout();
final int browserWindowWidth = getChartWindowWidth();
final int browserWindowHeight = getChartWindowHeight(isFullPage);
horizontalLayout.setWidth(browserWindowWidth, Unit.PIXELS);
horizontalLayout.setHeight(browserWindowHeight, Unit.PIXELS);
horizontalLayout.setMargin(true);
horizontalLayout.setSpacing(false);
horizontalLayout.addStyleName("v-layout-content-overview-panel-level1");
final Panel formPanel = new Panel();
formPanel.setSizeFull();
formPanel.setContent(horizontalLayout);
formPanel.setCaption(caption);
layout.addComponent(formPanel);
layout.setExpandRatio(formPanel, ContentRatio.LARGE);
chart.setWidth(100, Unit.PERCENTAGE);
chart.setHeight(100, Unit.PERCENTAGE);
chart.setMarginRight(CHART_RIGHT_MARGIN);
chart.setMarginLeft(CHART_LEFT_MARGIN);
chart.setMarginBottom(CHART_BOTTOM_MARGIN_SIZE);
chart.setMarginTop(CHART_TOP_MARGIN_SIZE);
horizontalLayout.addComponent(chart);
chart.setCaption(caption);
}
/**
* Gets the party name.
*
* @param applicationManager the application manager
* @param partySummary the party summary
* @return the party name
*/
public static String getPartyName(final ApplicationManager applicationManager, final String partySummary) {
final DataContainer<ViewRiksdagenParty, String> partyDataContainer = applicationManager.getDataContainer(ViewRiksdagenParty.class);
final ViewRiksdagenParty party = partyDataContainer.load(partySummary);
return Optional.ofNullable(party).map(ViewRiksdagenParty::getPartyName).orElse(null);
}
/**
* Gets the role color.
*
* @param roleCode the role code
* @param role1 the role 1
* @param role2 the role 2
* @return the role color
*/
public static String getRoleColor(final String roleCode, final String role1, final String role2) {
if (roleCode.equalsIgnoreCase(role1)) {
return "red";
} else if (roleCode.equalsIgnoreCase(role2)) {
return "blue";
} else {
return "green";
}
}
}