/*
* 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.ui.component.chart.util.DiagrammeUtil;
import com.hybridbpm.core.data.chart.DiagrammePreference;
import static com.hybridbpm.core.data.chart.DiagrammePreference.SECOND_COLUMN_FIELD;
import static com.hybridbpm.core.data.chart.DiagrammePreference.SECOND_COLUMN_FIELD_VALUES;
import static com.hybridbpm.core.data.chart.DiagrammePreference.SECOND_COLUMN_SORT_ORDER;
import com.hybridbpm.core.data.chart.DiagrammePreferenceValue;
import com.hybridbpm.core.data.chart.SortBy;
import com.vaadin.data.Property;
import com.vaadin.data.fieldgroup.BeanFieldGroup;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.server.Sizeable;
import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.hybridbpm.ui.util.Translate;
import java.util.List;
@SuppressWarnings("serial")
public class ThreeParamChartConfLayout extends ChartConfigureLayout {
private static final long serialVersionUID = 1L;
protected final HorizontalLayout groupByAndSortLayout = new HorizontalLayout();
protected final ComboBox groupByChoice = new ComboBox(Translate.getMessage("group by"),
new BeanItemContainer<>(DiagrammePreferenceValue.class));
protected final ComboBox sortByChoiceGroup = new ComboBox(Translate.getMessage("sort by"));
private Property.ValueChangeListener secondChoiceHandler;
public ThreeParamChartConfLayout(BeanFieldGroup<DiagrammePreference> preferences) {
super(preferences);
groupByChoice.setWidth(100, Sizeable.Unit.PERCENTAGE);
groupByChoice.setFilteringMode(FilteringMode.CONTAINS);
groupByChoice.setNewItemsAllowed(false);
groupByChoice.setImmediate(true);
groupByChoice.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
groupByChoice.setItemCaptionPropertyId("name");
groupByChoice.setNullSelectionAllowed(true);
groupByChoice.setRequired(false);
sortByChoiceGroup.setWidth(100, Unit.PERCENTAGE);
sortByChoiceGroup.setRequired(false);
sortByChoiceGroup.setFilteringMode(FilteringMode.CONTAINS);
sortByChoiceGroup.setNewItemsAllowed(false);
sortByChoiceGroup.setImmediate(true);
sortByChoiceGroup.setNullSelectionAllowed(true);
groupByAndSortLayout.addComponent(groupByChoice);
groupByAndSortLayout.addComponent(sortByChoiceGroup);
groupByAndSortLayout.setExpandRatio(groupByChoice, 0.8f);
groupByAndSortLayout.setExpandRatio(sortByChoiceGroup, 0.2f);
groupByAndSortLayout.setSpacing(true);
groupByAndSortLayout.setSizeFull();
verticalLayout.addComponent(groupByAndSortLayout);
sortByChoiceGroup.addItems((Object[])SortBy.values());
}
@Override
protected void setupChartConfig() {
setupColumns();
groupByChoice.setEnabled(true);
sortByChoiceGroup.setEnabled(true);
valuesColumnSortOrder.setEnabled(false);
firstColumnSortOrder.setEnabled(true);
}
protected void setupColumns() {
firstColumnChoice.setCaption(Translate.getMessage("x-axis-field"));
groupByChoice.setCaption(Translate.getMessage("group-by-field"));
}
@Override
public void bindConfigurationValues() {
super.bindConfigurationValues();
bindField(sortByChoiceGroup, "secondColumnSortOrder", preferences);
// fill second column combobox selection list
fillContainers();
// set selected value
bindField(groupByChoice, "secondColumnField", preferences);
// remove selected chart colors on columns change
// secondChoiceHandler = new ColorValueChangeListener(SECOND_COLUMN_FIELD,
// this.chartLayout, preferences);
// groupByChoice.addValueChangeListener(secondChoiceHandler);
}
@Override
public void unbindConfigurationValues() {
super.unbindConfigurationValues();
unbindField(SECOND_COLUMN_SORT_ORDER, preferences);
unbindField(SECOND_COLUMN_FIELD, preferences);
groupByChoice.removeValueChangeListener(secondChoiceHandler);
}
@Override
public void commit() {
super.commit();
groupByChoice.commit();
sortByChoiceGroup.commit();
}
@Override
public void updateComboboxes() {
super.updateComboboxes();
this.groupByChoice.getContainerDataSource().removeAllItems();
fillContainers();
}
private void fillContainers() {
List<DiagrammePreferenceValue> secondColumnValues = DiagrammeUtil.getPreferenceValue(
SECOND_COLUMN_FIELD_VALUES, preferences);
BeanItemContainer<DiagrammePreferenceValue> secondColumnValuesContainer =
(BeanItemContainer<DiagrammePreferenceValue>) groupByChoice.getContainerDataSource();
// values for comboboxes
updateColumnsContainer(secondColumnValuesContainer, secondColumnValues);
}
}