blob: 8dc64c3fabc50a72d521fbf178e9f2ed2466de93 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pierre Allard - initial API and implementation
*
* SPDX-License-Identifier: EPL-1.0
*
*******************************************************************************/
package org.eclipse.apogy.common.topology.bindings.ui.composites;
import java.util.Collection;
import org.eclipse.apogy.common.emf.AbstractFeatureSpecifier;
import org.eclipse.apogy.common.emf.AbstractFeatureTreeNode;
import org.eclipse.apogy.common.emf.ui.composites.AbstractFeatureSpecifierComposite;
import org.eclipse.apogy.common.topology.Node;
import org.eclipse.apogy.common.topology.bindings.AbstractTopologyBinding;
import org.eclipse.apogy.common.topology.bindings.BindingsSet;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
public abstract class BindingsSetComposite extends Composite {
private final FormToolkit formToolkit = new FormToolkit(Display.getCurrent());
private BindingsSet bindingsSet;
private DataBindingContext m_bindingContext;
private FeatureRootsListComposite featureRootsListComposite;
private AbstractFeatureSpecifierComposite abstractFeatureSpecifierComposite;
private BindingsListComposite bindingsListComposite;
private AbstractTopologyBindingOverviewComposite abstractTopologyBindingOverviewComposite;
private AbtractTopologyBindingDetailsComposite abtractTopologyBindingDetailsComposite;
public BindingsSetComposite(Composite parent, int style) {
super(parent, style);
setLayout(new GridLayout(1, false));
ScrolledForm topScrolledForm = this.formToolkit.createScrolledForm(this);
topScrolledForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
topScrolledForm.setShowFocusedControl(true);
this.formToolkit.paintBordersFor(topScrolledForm);
topScrolledForm.setText(null);
{
TableWrapLayout tableWrapLayout = new TableWrapLayout();
tableWrapLayout.makeColumnsEqualWidth = true;
tableWrapLayout.numColumns = 1;
topScrolledForm.getBody().setLayout(tableWrapLayout);
}
// Features Section.
Section featuresSection = this.formToolkit.createSection(topScrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnFeatures = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1);
twd_sctnFeatures.valign = TableWrapData.FILL;
twd_sctnFeatures.grabVertical = true;
twd_sctnFeatures.grabHorizontal = true;
featuresSection.setLayoutData(twd_sctnFeatures);
this.formToolkit.paintBordersFor(featuresSection);
featuresSection.setText("Features");
featuresSection.setLayout(new GridLayout(1, false));
ScrolledForm featuresScrolledForm = this.formToolkit.createScrolledForm(featuresSection);
featuresScrolledForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
featuresScrolledForm.setShowFocusedControl(true);
this.formToolkit.paintBordersFor(featuresScrolledForm);
featuresScrolledForm.setText(null);
{
TableWrapLayout tableWrapLayout = new TableWrapLayout();
tableWrapLayout.makeColumnsEqualWidth = true;
tableWrapLayout.numColumns = 2;
featuresScrolledForm.getBody().setLayout(tableWrapLayout);
}
featuresSection.setClient(featuresScrolledForm);
// Features List
Section featuresListSection = this.formToolkit.createSection(featuresScrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnFeaturesList = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1);
twd_sctnFeaturesList.valign = TableWrapData.FILL;
twd_sctnFeaturesList.grabVertical = true;
twd_sctnFeaturesList.grabHorizontal = true;
featuresListSection.setLayoutData(twd_sctnFeaturesList);
this.formToolkit.paintBordersFor(featuresListSection);
featuresListSection.setText("Features List");
this.featureRootsListComposite = new FeatureRootsListComposite(featuresListSection, SWT.NONE) {
@Override
protected void newAbstractFeatureTreeNodeSelected(AbstractFeatureTreeNode selectedAbstractFeatureTreeNode) {
if (selectedAbstractFeatureTreeNode instanceof AbstractFeatureSpecifier) {
BindingsSetComposite.this.abstractFeatureSpecifierComposite
.setAbstractFeatureSpecifier((AbstractFeatureSpecifier) selectedAbstractFeatureTreeNode);
}
}
};
GridData gd_featureRootsListComposite = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
gd_featureRootsListComposite.minimumHeight = 200;
gd_featureRootsListComposite.heightHint = 200;
this.featureRootsListComposite.setLayoutData(gd_featureRootsListComposite);
this.formToolkit.adapt(this.featureRootsListComposite);
this.formToolkit.paintBordersFor(this.featureRootsListComposite);
featuresListSection.setClient(this.featureRootsListComposite);
// Feature Details.
Section featureDetailsSection = this.formToolkit.createSection(featuresScrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnFeatureDetails = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1);
twd_sctnFeatureDetails.valign = TableWrapData.FILL;
twd_sctnFeatureDetails.grabVertical = true;
twd_sctnFeatureDetails.grabHorizontal = true;
featureDetailsSection.setLayoutData(twd_sctnFeatureDetails);
this.formToolkit.paintBordersFor(featureDetailsSection);
featureDetailsSection.setText("Feature Details");
this.abstractFeatureSpecifierComposite = new AbstractFeatureSpecifierComposite(featureDetailsSection, SWT.NONE);
GridData gd_abstractFeatureSpecifierComposite = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
gd_abstractFeatureSpecifierComposite.minimumHeight = 200;
gd_abstractFeatureSpecifierComposite.heightHint = 200;
this.abstractFeatureSpecifierComposite.setLayoutData(gd_abstractFeatureSpecifierComposite);
this.formToolkit.adapt(this.abstractFeatureSpecifierComposite);
this.formToolkit.paintBordersFor(this.abstractFeatureSpecifierComposite);
featureDetailsSection.setClient(this.abstractFeatureSpecifierComposite);
// Bindings.
Section sctnBindings = this.formToolkit.createSection(topScrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnBindings = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1);
twd_sctnBindings.valign = TableWrapData.FILL;
twd_sctnBindings.grabVertical = true;
twd_sctnBindings.grabHorizontal = true;
sctnBindings.setLayoutData(twd_sctnBindings);
this.formToolkit.paintBordersFor(sctnBindings);
sctnBindings.setText("Bindings");
sctnBindings.setLayout(new GridLayout(1, false));
ScrolledForm bindingsScrolledForm = this.formToolkit.createScrolledForm(sctnBindings);
bindingsScrolledForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
bindingsScrolledForm.setShowFocusedControl(true);
this.formToolkit.paintBordersFor(bindingsScrolledForm);
bindingsScrolledForm.setText(null);
{
TableWrapLayout tableWrapLayout = new TableWrapLayout();
tableWrapLayout.makeColumnsEqualWidth = true;
tableWrapLayout.numColumns = 2;
bindingsScrolledForm.getBody().setLayout(tableWrapLayout);
}
sctnBindings.setClient(bindingsScrolledForm);
// Bindings List
Section bindingsListSection = this.formToolkit.createSection(bindingsScrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnBindingsList = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 2, 1);
twd_sctnBindingsList.valign = TableWrapData.FILL;
twd_sctnBindingsList.grabVertical = true;
twd_sctnBindingsList.grabHorizontal = true;
bindingsListSection.setLayoutData(twd_sctnBindingsList);
this.formToolkit.paintBordersFor(bindingsListSection);
bindingsListSection.setText("Bindings List");
// Bindings.
this.bindingsListComposite = new BindingsListComposite(bindingsListSection, SWT.NONE) {
@Override
protected void newBindingSelected(AbstractTopologyBinding selectedAbstractTopologyBinding) {
BindingsSetComposite.this.abstractTopologyBindingOverviewComposite
.setAbstractTopologyBinding(selectedAbstractTopologyBinding);
BindingsSetComposite.this.abtractTopologyBindingDetailsComposite
.setAbstractTopologyBinding(selectedAbstractTopologyBinding);
}
@Override
public Collection<Node> getAvailableTopologyNodesForBinding() {
return BindingsSetComposite.this.getAvailableNodes();
}
};
GridData gd_bindingsListComposite = new GridData(SWT.FILL, SWT.TOP, true, false);
gd_bindingsListComposite.minimumHeight = 200;
gd_bindingsListComposite.heightHint = 200;
this.bindingsListComposite.setLayoutData(gd_bindingsListComposite);
this.formToolkit.adapt(this.bindingsListComposite);
this.formToolkit.paintBordersFor(this.bindingsListComposite);
bindingsListSection.setClient(this.bindingsListComposite);
// Binding Overview.
Section bindingsOverviewSection = this.formToolkit.createSection(bindingsScrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnBindingOverview = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1);
twd_sctnBindingOverview.valign = TableWrapData.FILL;
twd_sctnBindingOverview.grabVertical = true;
twd_sctnBindingOverview.grabHorizontal = true;
bindingsOverviewSection.setLayoutData(twd_sctnBindingOverview);
this.formToolkit.paintBordersFor(bindingsOverviewSection);
bindingsOverviewSection.setText("Binding Overview");
this.abstractTopologyBindingOverviewComposite = new AbstractTopologyBindingOverviewComposite(
bindingsOverviewSection, SWT.BORDER);
GridData gd_abstractTopologyBindingOverviewComposite = new GridData(SWT.FILL, SWT.TOP, true, false);
gd_abstractTopologyBindingOverviewComposite.minimumHeight = 200;
gd_abstractTopologyBindingOverviewComposite.heightHint = 200;
this.abstractTopologyBindingOverviewComposite.setLayoutData(gd_abstractTopologyBindingOverviewComposite);
this.formToolkit.adapt(this.abstractTopologyBindingOverviewComposite);
this.formToolkit.paintBordersFor(this.abstractTopologyBindingOverviewComposite);
bindingsOverviewSection.setClient(this.abstractTopologyBindingOverviewComposite);
// Binding details
Section bindingsDetailsSection = this.formToolkit.createSection(bindingsScrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnBindingDetails = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1);
twd_sctnBindingDetails.valign = TableWrapData.FILL;
twd_sctnBindingDetails.grabVertical = true;
twd_sctnBindingDetails.grabHorizontal = true;
bindingsDetailsSection.setLayoutData(twd_sctnBindingDetails);
this.formToolkit.paintBordersFor(bindingsDetailsSection);
bindingsDetailsSection.setText("Binding Details");
this.abtractTopologyBindingDetailsComposite = new AbtractTopologyBindingDetailsComposite(bindingsDetailsSection,
SWT.NONE);
GridData gd_abtractTopologyBindingDetailsComposite = new GridData(SWT.FILL, SWT.TOP, true, true);
gd_abtractTopologyBindingDetailsComposite.minimumHeight = 200;
gd_abtractTopologyBindingDetailsComposite.heightHint = 200;
this.abtractTopologyBindingDetailsComposite.setLayoutData(gd_abtractTopologyBindingDetailsComposite);
this.formToolkit.adapt(this.abtractTopologyBindingDetailsComposite);
this.formToolkit.paintBordersFor(this.abtractTopologyBindingDetailsComposite);
bindingsDetailsSection.setClient(this.abtractTopologyBindingDetailsComposite);
// Cleanup on dispose.
addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
if (BindingsSetComposite.this.m_bindingContext != null)
BindingsSetComposite.this.m_bindingContext.dispose();
}
});
}
/**
* Returns the BindingsSet being displayed.
*
* @return The BindingsSet, can be null.
*/
public BindingsSet getBindingsSet() {
return this.bindingsSet;
}
/**
* Sets the BindingsSet to display.
*
* @param newBindingsSet The BindingsSet to display, can be null.
*/
public void setBindingsSet(BindingsSet newBindingsSet) {
if (this.m_bindingContext != null)
this.m_bindingContext.dispose();
this.bindingsSet = newBindingsSet;
if (newBindingsSet != null) {
this.featureRootsListComposite.setFeatureRootsList(newBindingsSet.getFeatureRootsList());
this.bindingsListComposite.setBindingsList(newBindingsSet.getBindingsList());
this.abstractTopologyBindingOverviewComposite.setAbstractTopologyBinding(null);
this.abtractTopologyBindingDetailsComposite.setAbstractTopologyBinding(null);
this.abstractFeatureSpecifierComposite.setAbstractFeatureSpecifier(null);
this.m_bindingContext = initDataBindingsCustom();
} else {
this.featureRootsListComposite.setFeatureRootsList(null);
this.bindingsListComposite.setBindingsList(null);
this.abstractTopologyBindingOverviewComposite.setAbstractTopologyBinding(null);
this.abtractTopologyBindingDetailsComposite.setAbstractTopologyBinding(null);
this.abstractFeatureSpecifierComposite.setAbstractFeatureSpecifier(null);
}
}
/**
* Returns the list of Node available for binding.
*
* @return The collection of Node, can be empty, never null.
*/
public abstract Collection<Node> getAvailableNodes();
private DataBindingContext initDataBindingsCustom() {
DataBindingContext bindingContext = new DataBindingContext();
return bindingContext;
}
}