/*
* 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);
}
}