com.hybridbpm.ui.component.chart.configuration.ChartConfigureLayout.java Source code

Java tutorial

Introduction

Here is the source code for com.hybridbpm.ui.component.chart.configuration.ChartConfigureLayout.java

Source

/*
 * Copyright (c) 2011-2015 Marat Gubaidullin. 
 *
 * This file is part of HYBRIDBPM.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 *
 */
package com.hybridbpm.ui.component.chart.configuration;

import com.hybridbpm.core.data.chart.DiagrammePreference;
import static com.hybridbpm.core.data.chart.DiagrammePreference.FIRST_COLUMN_FIELD;
import static com.hybridbpm.core.data.chart.DiagrammePreference.FIRST_COLUMN_FIELD_VALUES;
import static com.hybridbpm.core.data.chart.DiagrammePreference.FIRST_COLUMN_SORT_ORDER;
import static com.hybridbpm.core.data.chart.DiagrammePreference.REFRESH;
import static com.hybridbpm.core.data.chart.DiagrammePreference.VALUES_COLUMN_FIELD;
import static com.hybridbpm.core.data.chart.DiagrammePreference.VALUES_COLUMN_FIELD_VALUES;
import static com.hybridbpm.core.data.chart.DiagrammePreference.VALUES_COLUMN_SORT_ORDER;
import com.hybridbpm.core.data.chart.DiagrammePreferenceValue;
import com.hybridbpm.core.data.chart.SortBy;
import static com.hybridbpm.ui.component.chart.util.DiagrammeUtil.getPreferenceValue;
import com.vaadin.data.Property;
import com.hybridbpm.ui.util.Translate;
import com.vaadin.data.fieldgroup.BeanFieldGroup;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.converter.StringToIntegerConverter;
import com.vaadin.server.Sizeable;
import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.*;
import com.vaadin.ui.themes.ValoTheme;
import com.hybridbpm.ui.HybridbpmUI;

import java.util.List;

@SuppressWarnings("serial")
public abstract class ChartConfigureLayout extends PreferencesLayoutTemplate {

    private static final long serialVersionUID = 1L;

    protected final TextField refresh = new TextField(Translate.getMessage("refresh"));
    protected final VerticalLayout verticalLayout = new VerticalLayout(refresh);
    protected final HorizontalLayout horizontalLayout = new HorizontalLayout(verticalLayout);
    protected final HorizontalLayout firstColumnAndSortLayout = new HorizontalLayout();
    protected final HorizontalLayout valuesColumnAndSortLayout = new HorizontalLayout();

    protected final ComboBox firstColumnChoice = new ComboBox(Translate.getMessage("x-axis"),
            new BeanItemContainer<>(DiagrammePreferenceValue.class));
    protected final ComboBox valuesColumnChoice = new ComboBox(Translate.getMessage("values"),
            new BeanItemContainer<>(DiagrammePreferenceValue.class));
    protected final ComboBox firstColumnSortOrder = new ComboBox(Translate.getMessage("sort by"));
    protected final ComboBox valuesColumnSortOrder = new ComboBox(Translate.getMessage("sort by"));

    private Property.ValueChangeListener firstChoiceHandler;

    public ChartConfigureLayout(BeanFieldGroup<DiagrammePreference> preferences) {
        super(preferences);

        setCaption("Configuration");
        setMargin(false);
        setSpacing(true);
        refresh.setConverter(new StringToIntegerConverter());
        refresh.setStyleName(ValoTheme.TEXTFIELD_SMALL);
        horizontalLayout.setExpandRatio(verticalLayout, 1f);

        verticalLayout.setSpacing(true);

        firstColumnChoice.setWidth(100, Sizeable.Unit.PERCENTAGE);
        firstColumnChoice.setRequired(true);
        firstColumnChoice.setStyleName(ValoTheme.COMBOBOX_SMALL);

        firstColumnChoice.setFilteringMode(FilteringMode.CONTAINS);
        firstColumnChoice.setNullSelectionAllowed(false);
        firstColumnChoice.setNewItemsAllowed(false);
        firstColumnChoice.setImmediate(true);
        firstColumnChoice.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
        firstColumnChoice.setItemCaptionPropertyId("name");

        firstColumnSortOrder.setWidth(100, Unit.PERCENTAGE);
        firstColumnSortOrder.setRequired(false);
        firstColumnSortOrder.setFilteringMode(FilteringMode.CONTAINS);
        firstColumnSortOrder.setNewItemsAllowed(false);
        firstColumnSortOrder.setImmediate(true);
        firstColumnSortOrder.setNullSelectionAllowed(true);
        firstColumnSortOrder.setStyleName(ValoTheme.COMBOBOX_SMALL);

        firstColumnAndSortLayout.addComponent(firstColumnChoice);
        firstColumnAndSortLayout.addComponent(firstColumnSortOrder);
        firstColumnAndSortLayout.setExpandRatio(firstColumnChoice, 0.8f);
        firstColumnAndSortLayout.setExpandRatio(firstColumnSortOrder, 0.2f);
        firstColumnAndSortLayout.setSpacing(true);
        firstColumnAndSortLayout.setSizeFull();
        firstColumnAndSortLayout.setStyleName(ValoTheme.COMBOBOX_SMALL);

        verticalLayout.addComponent(firstColumnAndSortLayout);

        valuesColumnChoice.setWidth(100, Sizeable.Unit.PERCENTAGE);
        valuesColumnChoice.setRequired(true);
        valuesColumnChoice.setFilteringMode(FilteringMode.CONTAINS);
        valuesColumnChoice.setNullSelectionAllowed(false);
        valuesColumnChoice.setNewItemsAllowed(false);
        valuesColumnChoice.setImmediate(true);
        valuesColumnChoice.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
        valuesColumnChoice.setItemCaptionPropertyId("name");
        valuesColumnChoice.setStyleName(ValoTheme.COMBOBOX_SMALL);

        valuesColumnSortOrder.setWidth(100, Unit.PERCENTAGE);
        valuesColumnSortOrder.setRequired(false);
        valuesColumnSortOrder.setFilteringMode(FilteringMode.CONTAINS);
        valuesColumnSortOrder.setNewItemsAllowed(false);
        valuesColumnSortOrder.setImmediate(true);
        valuesColumnSortOrder.setNullSelectionAllowed(true);
        valuesColumnSortOrder.setStyleName(ValoTheme.COMBOBOX_SMALL);

        valuesColumnAndSortLayout.addComponent(valuesColumnChoice);
        valuesColumnAndSortLayout.addComponent(valuesColumnSortOrder);

        valuesColumnAndSortLayout.setExpandRatio(valuesColumnChoice, 0.8f);
        valuesColumnAndSortLayout.setExpandRatio(valuesColumnSortOrder, 0.2f);
        valuesColumnAndSortLayout.setSpacing(true);
        valuesColumnAndSortLayout.setSizeFull();

        verticalLayout.addComponent(valuesColumnAndSortLayout);

        addComponent(horizontalLayout);
        horizontalLayout.setSpacing(true);
        horizontalLayout.setSizeFull();

        setComboBoxChoices();
    }

    @Override
    public void bindConfigurationValues() {
        bindField(refresh, REFRESH, preferences);
        bindField(firstColumnSortOrder, FIRST_COLUMN_SORT_ORDER, preferences);
        bindField(valuesColumnSortOrder, VALUES_COLUMN_SORT_ORDER, preferences);

        // refresh comboboxes values
        fillContainers();

        // set selected value
        bindField(firstColumnChoice, FIRST_COLUMN_FIELD, preferences);
        bindField(valuesColumnChoice, VALUES_COLUMN_FIELD, preferences);

        // remove selected chart colors on columns change
        //        firstChoiceHandler = new ColorValueChangeListener(FIRST_COLUMN_FIELD, this.chartLayout, preferences);
        //        firstColumnChoice.addValueChangeListener(firstChoiceHandler);

        setupChartConfig();
    }

    protected void updateColumnsContainer(BeanItemContainer<DiagrammePreferenceValue> container,
            List<DiagrammePreferenceValue> values) {
        container.removeAllItems();
        container.addAll(values);
    }

    @Override
    public void unbindConfigurationValues() {
        unbindField(REFRESH, preferences);
        unbindField(FIRST_COLUMN_SORT_ORDER, preferences);
        unbindField(VALUES_COLUMN_SORT_ORDER, preferences);
        unbindField(FIRST_COLUMN_FIELD, preferences);
        unbindField(VALUES_COLUMN_FIELD, preferences);

        firstColumnChoice.removeValueChangeListener(firstChoiceHandler);
    }

    protected abstract void setupChartConfig();

    protected void setComboBoxChoices() {
        valuesColumnSortOrder.addItems((Object[]) SortBy.values());
        firstColumnSortOrder.addItems((Object[]) SortBy.values());
    }

    @Override
    public void commit() {
        refresh.commit();
        firstColumnChoice.commit();
        valuesColumnChoice.commit();
        firstColumnSortOrder.commit();
        valuesColumnSortOrder.commit();
    }

    @Override
    public void updateComboboxes() {
        this.firstColumnChoice.getContainerDataSource().removeAllItems();
        this.valuesColumnChoice.getContainerDataSource().removeAllItems();

        fillContainers();
    }

    private void fillContainers() {
        List<DiagrammePreferenceValue> firstColumnValues = getPreferenceValue(FIRST_COLUMN_FIELD_VALUES,
                preferences);
        List<DiagrammePreferenceValue> valuesColumnValues = getPreferenceValue(VALUES_COLUMN_FIELD_VALUES,
                preferences);

        BeanItemContainer<DiagrammePreferenceValue> firstColumnValuesContainer = (BeanItemContainer<DiagrammePreferenceValue>) firstColumnChoice
                .getContainerDataSource();
        BeanItemContainer<DiagrammePreferenceValue> valuesColumnValuesContainer = (BeanItemContainer<DiagrammePreferenceValue>) valuesColumnChoice
                .getContainerDataSource();

        // initial values for comboboxes
        updateColumnsContainer(firstColumnValuesContainer, firstColumnValues);
        updateColumnsContainer(valuesColumnValuesContainer, valuesColumnValues);
    }

}