| /** |
| * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| */ |
| package org.eclipse.osbp.infogrid.vaadin; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.eclipse.osbp.infogrid.api.IGridSourceDescriptor; |
| |
| import com.vaadin.data.Item; |
| import com.vaadin.ui.AbstractSelect.ItemCaptionMode; |
| import com.vaadin.ui.ComboBox; |
| import com.vaadin.ui.Component; |
| import com.vaadin.ui.CssLayout; |
| import com.vaadin.ui.CustomComponent; |
| import com.vaadin.ui.VerticalLayout; |
| |
| /** |
| * This component needs configuration by IGridSourceDescriptor. They need to be |
| * added from outside logic. |
| */ |
| @SuppressWarnings("serial") |
| public class GridComponent extends CustomComponent { |
| |
| private ComboBox sourceSelector; |
| private CssLayout gridArea; |
| |
| private List<IGridSourceDescriptor> sources; |
| private IGridSourceDescriptor currentSource; |
| |
| private VerticalLayout layout; |
| private Object currentInput; |
| |
| public GridComponent() { |
| initUI(); |
| } |
| |
| /** |
| * Initializes the UI. |
| */ |
| protected void initUI() { |
| |
| sourceSelector = new ComboBox(); |
| sourceSelector.addContainerProperty("caption", String.class, |
| "undefined ID"); |
| sourceSelector.addContainerProperty("gridSource", |
| IGridSourceDescriptor.class, null); |
| |
| sourceSelector.setItemCaptionMode(ItemCaptionMode.PROPERTY); |
| sourceSelector.setItemCaptionPropertyId("caption"); |
| |
| sourceSelector.addValueChangeListener(e -> sourceChanged()); |
| |
| gridArea = new CssLayout(); |
| gridArea.setSizeFull(); |
| |
| layout = new VerticalLayout(sourceSelector, gridArea); |
| layout.setExpandRatio(gridArea, 1.0f); |
| setCompositionRoot(layout); |
| } |
| |
| /** |
| * Is called if the source became changed. |
| */ |
| protected void sourceChanged() { |
| Item item = sourceSelector.getItem(sourceSelector.getValue()); |
| if (item == null) { |
| setSelectedSource(null); |
| } else { |
| setSelectedSource((IGridSourceDescriptor) item.getItemProperty( |
| "gridSource").getValue()); |
| } |
| } |
| |
| /** |
| * Sets the selected source descriptor. |
| * |
| * @param source |
| */ |
| public void setSelectedSource(IGridSourceDescriptor source) { |
| // TODO |
| // if (currentSource == source) { |
| // return; |
| // } |
| |
| if (source != null && !sources.contains(source)) { |
| return; |
| } |
| |
| currentSource = source; |
| gridArea.removeAllComponents(); |
| if (currentSource != null) { |
| Component component = (Component) currentSource.getComponent(); |
| component.setSizeFull(); |
| gridArea.addComponent(component); |
| currentSource.setInput(currentInput); |
| } |
| } |
| |
| /** |
| * Returns all descriptors. |
| * |
| * @return |
| */ |
| public List<IGridSourceDescriptor> getSourceDescriptors() { |
| return Collections.unmodifiableList(sources); |
| } |
| |
| /** |
| * Sets all available descriptors to this component. The descriptors are |
| * responsible to create the UI content. |
| * |
| * @param sources |
| */ |
| @SuppressWarnings("unchecked") |
| public void setSourceDescriptors(List<IGridSourceDescriptor> sources) { |
| sourceSelector.removeAllItems(); |
| for (IGridSourceDescriptor source : sources) { |
| Item item = sourceSelector.getItem(sourceSelector.addItem()); |
| item.getItemProperty("caption").setValue(source.getId()); |
| item.getItemProperty("gridSource").setValue(source); |
| } |
| |
| this.sources = new ArrayList<>(sources); |
| } |
| |
| /** |
| * Sets the value of the component. |
| * |
| * @param input |
| */ |
| public void setValue(Object input) { |
| if (currentInput == input) { |
| return; |
| } |
| currentInput = input; |
| |
| if (currentSource != null) { |
| currentSource.setInput(currentInput); |
| } |
| } |
| |
| public void dispose() { |
| |
| } |
| |
| } |