/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.editor.properties; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescriptionsManager; import de.rcenvironment.core.component.workflow.model.spi.ComponentInstanceProperties; /** * An extended "Properties" view tab for configuring dynamic endpoints (ie inputs and outputs) and using initial Variables. * * @author Robert Mischke * @author Sascha Zur * @author Markus Kunde * @author Jan Flink */ public class EndpointPropertySection extends ValidatingWorkflowNodePropertySection implements PropertyChangeListener { private static final int OFFSET_ENPOINTPANES = 20; protected Composite endpointsComposite; protected Composite parentComposite; private EndpointSelectionPane[] panes; private int columns; public EndpointPropertySection() {} @Override public void createCompositeContent(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) { super.createCompositeContent(parent, aTabbedPropertySheetPage); this.parentComposite = parent; TabbedPropertySheetWidgetFactory toolkit = aTabbedPropertySheetPage.getWidgetFactory(); Composite content = new LayoutComposite(parent); endpointsComposite = toolkit.createFlatFormComposite(content); GridLayout layout = new GridLayout(columns, true); endpointsComposite.setLayout(layout); GridData layoutData; for (EndpointSelectionPane pane : panes) { pane.createControl(endpointsComposite, pane.paneTitle, toolkit); layoutData = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); pane.getControl().setLayoutData(layoutData); } } @Override public void refreshSection() { super.refreshSection(); final ComponentInstanceProperties configuration = getConfiguration(); for (EndpointSelectionPane pane : panes) { pane.setConfiguration(configuration); } } @Override public void aboutToBeShown() { super.aboutToBeShown(); refreshSection(); if (endpointsComposite != null) { // In some cases the offset is not necessary and produces an exception (e.g. Inputprovider with linux mint) // Not setting it resolves the problem.l if (panes.length > 1) { endpointsComposite.setSize(endpointsComposite.getSize().x - OFFSET_ENPOINTPANES, endpointsComposite.getSize().y); endpointsComposite.pack(); } else { endpointsComposite.setSize(parentComposite.getSize().x, endpointsComposite.getSize().y); } parentComposite.getParent().layout(endpointsComposite.getChildren()); } } @Override public void setInput(IWorkbenchPart part, ISelection selection) { super.setInput(part, selection); if (node != null) { node.addPropertyChangeListener(this); } } public EndpointSelectionPane[] getPanes() { return panes; } public void setPanes(EndpointSelectionPane... panes) { this.panes = panes; } public int getColumns() { return columns; } public void setColumns(int columns) { this.columns = columns; } @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(EndpointDescriptionsManager.PROPERTY_ENDPOINT)) { refreshSection(); } } @Override public void aboutToBeHidden() { if (node != null) { node.removePropertyChangeListener(this); } super.aboutToBeHidden(); } @Override public void dispose() { if (node != null) { node.removePropertyChangeListener(this); } super.dispose(); } }