Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancois Le Fevre2016-12-06 14:28:08 +0000
committerFrancois Le Fevre2016-12-15 13:46:26 +0000
commit7bd88035738b787152afc12d452ed1634c45105f (patch)
tree0683e62b9b7b7883631ff6bfd3b40d3b6aacb762 /plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src
parent379d660168afcde15f3c14f53617b1185ff0c6b9 (diff)
downloadorg.eclipse.papyrus-7bd88035738b787152afc12d452ed1634c45105f.tar.gz
org.eclipse.papyrus-7bd88035738b787152afc12d452ed1634c45105f.tar.xz
org.eclipse.papyrus-7bd88035738b787152afc12d452ed1634c45105f.zip
Bug 508746 - [Toolsmiths] dispatching customization nattable plugins in
there own functional unit Change-Id: Ie7a1621ebe5478885f1ca8ab99d0067470d5929a Signed-off-by: Francois Le Fevre <francois.le-fevre@cea.fr>
Diffstat (limited to 'plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src')
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java78
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/FeatureFillingConfigurationDialog.java256
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/PasteEObjectConfigurationDialog.java313
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/TreeFillingConfigurationDialog.java657
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/EditExistingTableConfigurationWizardHandler.java60
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/helper/TableConfigurationHelper.java358
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/Messages.java161
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/messages.properties64
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractAxisConfigurationWizardPage.java880
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractTableConfigurationWizardPage.java41
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/ColumnConfigurationWizardPage.java240
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java838
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationFileCreationPage.java122
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java563
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java732
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NameSimplifier.java99
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java88
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationEditingSupport.java82
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateAndEditTableConfigurationWizard.java181
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateNattableConfigurationProjectWizard.java223
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/EditTableConfigurationWizard.java231
21 files changed, 6267 insertions, 0 deletions
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java
new file mode 100644
index 00000000000..347b9c03825
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java
@@ -0,0 +1,78 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.customization.nattableconfiguration"; //$NON-NLS-1$
+
+ /**
+ * The shared instance
+ */
+ private static Activator plugin;
+
+
+ public static LogHelper log;
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/FeatureFillingConfigurationDialog.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/FeatureFillingConfigurationDialog.java
new file mode 100644
index 00000000000..201fa84b58b
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/FeatureFillingConfigurationDialog.java
@@ -0,0 +1,256 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.edition;
+
+import java.util.Collections;
+
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.EStructuralFeatureValueFillingConfiguration;
+import org.eclipse.papyrus.infra.nattable.utils.StringComparator;
+import org.eclipse.papyrus.infra.widgets.Activator;
+import org.eclipse.papyrus.infra.widgets.editors.ITreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.editors.TreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.providers.CompoundFilteredRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.FlattenableRestrictedFilteredContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.IRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.selectors.ReferenceSelector;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * The dialog which allow to edit the feature filling configuration features.
+ */
+public class FeatureFillingConfigurationDialog extends SelectionDialog {
+
+ /**
+ * A copy of initial feature filling configuration to modify with this dialog.
+ */
+ protected final EStructuralFeatureValueFillingConfiguration modifiedFeatureFillingConf;
+
+ /**
+ * The label provider for the UML elements.
+ */
+ protected final ILabelProvider labelProvider;
+
+ /**
+ * The CLabel composite for the listen feature.
+ */
+ protected CLabel listenFeatureText;
+
+ /**
+ * The browse button which allow to edit the listen feature.
+ */
+ protected Button browseValuesButton;
+
+ /**
+ * The delete button which allow to unset the listen feature value.
+ */
+ protected Button deleteValuesButton;
+
+
+ /**
+ * Constructor.
+ *
+ * @param parentShell
+ * The parent shell of the dialog.
+ * @param featureFillingConf
+ * The initial feature filling configuration to edit.
+ */
+ public FeatureFillingConfigurationDialog(final Shell parentShell, final EStructuralFeatureValueFillingConfiguration featureFillingConf) {
+ super(parentShell);
+ this.modifiedFeatureFillingConf = EcoreUtil.copy(featureFillingConf);
+ setTitle(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.FeatureFillingConfigurationDialog_featureFillingConfigurationDialogName);
+
+ LabelProviderService labelProviderService = new LabelProviderServiceImpl();
+ try {
+ labelProviderService.startService();
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+
+ labelProvider = labelProviderService.getLabelProvider();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#create()
+ */
+ @Override
+ public void create() {
+ super.create();
+ getShell().setImage(Activator.getDefault().getImage(NattableConfigurationConstants.PAPYRUS_ICON_PATH));
+
+ final Composite parent = new Composite((Composite) getDialogArea(), SWT.NONE);
+ parent.setLayout(new GridLayout(4, false));
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+ getShell().setSize(600, 400);
+
+ // Create the fields
+ createFields(parent);
+
+ getShell().pack();
+ Point size = getShell().getSize();
+ int minWidth = 600;
+ if (size.x < minWidth) {
+ size.x = minWidth;
+ }
+ getShell().setSize(size);
+ }
+
+ /**
+ * This allows to create the fields to edit the feature filling configuration.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createFields(final Composite parent) {
+ // Create the listen feature labels and dialog
+ final Label listenFeatureLabel = new Label(parent, SWT.NONE);
+ listenFeatureLabel.setText(Messages.FeatureFillingConfigurationDialog_listenFeature);
+ listenFeatureLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ listenFeatureText = new CLabel(parent, SWT.BORDER);
+ listenFeatureText.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ browseValuesButton = new Button(parent, SWT.PUSH);
+ browseValuesButton.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.BROWSE_ICON_PATH));
+ browseValuesButton.setToolTipText(org.eclipse.papyrus.infra.widgets.messages.Messages.ReferenceDialog_EditValue);
+ browseValuesButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ browseAction(modifiedFeatureFillingConf.getListenFeature());
+ }
+ });
+
+ deleteValuesButton = new Button(parent, SWT.PUSH);
+ deleteValuesButton.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.DELETE_ICON_PATH));
+ deleteValuesButton.setToolTipText(org.eclipse.papyrus.infra.widgets.messages.Messages.ReferenceDialog_UnsetValue);
+ deleteValuesButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ setListenFeature(null);
+ }
+ });
+
+ setListenFeature(modifiedFeatureFillingConf.getListenFeature());
+ }
+
+ /**
+ * The action executed when the "browse" button is selected Choose a value
+ * from a selection of already created objects.
+ *
+ * @param value
+ * The initial value of the listen feature.
+ */
+ protected void browseAction(final Object value) {
+ final ITreeSelectorDialog dialog = new TreeSelectorDialog(getShell()) {
+ @Override
+ protected void initViewerAndProvider() {
+ super.initViewerAndProvider();
+ // Set a comparator to sort the tree viewer
+ getViewer().setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+ dialog.setTitle(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.FeatureFillingConfigurationDialog_listenFeatureDialogName);
+
+ final CompoundFilteredRestrictedContentProvider contentProvider = new CompoundFilteredRestrictedContentProvider();
+ final ReferenceSelector selector = new ReferenceSelector(false) {
+
+ @Override
+ public void createControls(Composite parent) {
+ super.createControls(parent);
+ this.treeViewer.setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+
+ selector.setLabelProvider(labelProvider);
+ selector.setContentProvider(contentProvider);
+ final ITreeContentProvider treeContentProvider = new FlattenableRestrictedFilteredContentProvider((IRestrictedContentProvider) contentProvider, selector) {
+
+ @Override
+ public boolean isValidValue(final Object element) {
+ // EMF dependency, must not be done here, it should be better with a new content provider service
+ return element instanceof EReference && ((EReference) element).isMany() && element != EcorePackage.eINSTANCE.getEModelElement_EAnnotations();
+ }
+ };
+
+ dialog.setContentProvider(treeContentProvider);
+ dialog.setLabelProvider(labelProvider);
+ if (null != value) {
+ dialog.setInitialElementSelections(Collections.singletonList(value));
+ }
+ int result = dialog.open();
+ if (Window.OK == result) {
+ Object[] newValue = dialog.getResult();
+ if (null == newValue) {
+ return;
+ }
+
+ if (0 == newValue.length) {
+ setListenFeature(null);
+ } else {
+ setListenFeature((EStructuralFeature) newValue[0]);
+ }
+ }
+ }
+
+ /**
+ * This allows to set the listen feature and refresh the button corresponding to the listen feature value.
+ *
+ * @param structuralFeature
+ * The structural feature to set.
+ */
+ protected void setListenFeature(final EStructuralFeature structuralFeature) {
+ if (null == modifiedFeatureFillingConf.getListenFeature() || !structuralFeature.equals(modifiedFeatureFillingConf.getListenFeature())) {
+ modifiedFeatureFillingConf.setListenFeature(structuralFeature);
+ }
+ listenFeatureText.setImage(labelProvider.getImage(modifiedFeatureFillingConf.getListenFeature()));
+ listenFeatureText.setText(labelProvider.getText(modifiedFeatureFillingConf.getListenFeature()));
+
+ deleteValuesButton.setEnabled(null != structuralFeature);
+ }
+
+ /**
+ * Returns the modified feature filling configuration.
+ *
+ * @return The modified feature filling configuration.
+ */
+ public EStructuralFeatureValueFillingConfiguration getModifiedFeatureFillingConfiguration() {
+ return modifiedFeatureFillingConf;
+ }
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/PasteEObjectConfigurationDialog.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/PasteEObjectConfigurationDialog.java
new file mode 100644
index 00000000000..032c7cfa743
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/PasteEObjectConfigurationDialog.java
@@ -0,0 +1,313 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.edition;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.PasteEObjectConfiguration;
+import org.eclipse.papyrus.infra.nattable.utils.StringComparator;
+import org.eclipse.papyrus.infra.services.edit.utils.ElementTypeUtils;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
+import org.eclipse.papyrus.infra.widgets.Activator;
+import org.eclipse.papyrus.infra.widgets.editors.ITreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.editors.TreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.providers.CompoundFilteredRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.FlattenableRestrictedFilteredContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.IRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.selectors.ReferenceSelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * The dialog which allow to edit the paste configuration features.
+ */
+public class PasteEObjectConfigurationDialog extends SelectionDialog {
+
+ /**
+ * A copy of initial paste configuration to modify with this dialog.
+ */
+ protected final PasteEObjectConfiguration modifiedPasteConfiguration;
+
+ /**
+ * The label provider for the UML elements.
+ */
+ protected final ILabelProvider labelProvider;
+
+ /**
+ * The CLabel composite for the containment feature.
+ */
+ protected CLabel containmentFeatureText;
+
+ /**
+ * The browse button which allow to edit the containment feature.
+ */
+ protected Button browseValuesButton;
+
+ /**
+ * The delete button which allow to unset the containment feature value.
+ */
+ protected Button deleteValuesButton;
+
+ /**
+ * Constructor.
+ *
+ * @param parentShell
+ * The parent shell of the dialog.
+ * @param pasteConfiguration
+ * The initial paste configuration to edit.
+ */
+ public PasteEObjectConfigurationDialog(final Shell parentShell, final PasteEObjectConfiguration pasteConfiguration) {
+ super(parentShell);
+ this.modifiedPasteConfiguration = EcoreUtil.copy(pasteConfiguration);
+ setTitle(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.PasteEObjectConfigurationDialog_pasteEObjectConfigurationDialogName);
+
+ LabelProviderService labelProviderService = new LabelProviderServiceImpl();
+ try {
+ labelProviderService.startService();
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+
+ labelProvider = labelProviderService.getLabelProvider();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#create()
+ */
+ @Override
+ public void create() {
+ super.create();
+ getShell().setImage(Activator.getDefault().getImage(NattableConfigurationConstants.PAPYRUS_ICON_PATH));
+
+ final Composite parent = new Composite((Composite) getDialogArea(), SWT.NONE);
+ parent.setLayout(new GridLayout(4, false));
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+ getShell().setSize(600, 400);
+
+ // Create the fields
+ createFields(parent);
+
+ getShell().pack();
+ Point size = getShell().getSize();
+ int minWidth = 600;
+ if (size.x < minWidth) {
+ size.x = minWidth;
+ }
+ getShell().setSize(size);
+ }
+
+ /**
+ * This allows to create the fields to edit the paste configuration.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createFields(final Composite parent) {
+ // Create the detached mode checkbox
+ final Label detachedModeLabel = new Label(parent, SWT.NONE);
+ detachedModeLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.PasteEObjectConfigurationDialog_detachedModeLabel);
+ detachedModeLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ final Button detachedModeButton = new Button(parent, SWT.CHECK);
+ detachedModeButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 3, 1));
+ detachedModeButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ modifiedPasteConfiguration.setDetachedMode(detachedModeButton.getSelection());
+ }
+ });
+ detachedModeButton.setSelection(modifiedPasteConfiguration.isDetachedMode());
+
+ // Create the pasted element id combo box
+ final Label pastedElementIdLabel = new Label(parent, SWT.NONE);
+ pastedElementIdLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.PasteEObjectConfigurationDialog_pastedElementIdLabel);
+ pastedElementIdLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ final Combo pastedElementIdCombo = new Combo(parent, SWT.READ_ONLY);
+ pastedElementIdCombo.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 3, 1));
+ pastedElementIdCombo.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(ModifyEvent e) {
+ modifiedPasteConfiguration.setPastedElementId(pastedElementIdCombo.getText());
+ }
+ });
+
+ final Collection<IElementType> possibleValues = ElementTypeUtils.getAllExistingElementTypes();
+ final List<String> possibleValuesAsString = new ArrayList<String>(possibleValues.size());
+
+ int indexToSelect = -1;
+ int index = 0;
+
+ for (final IElementType elementType : possibleValues) {
+ possibleValuesAsString.add(elementType.getDisplayName());
+ if (elementType.getDisplayName().equals(modifiedPasteConfiguration.getPastedElementId())) {
+ indexToSelect = index;
+ }
+ index++;
+ }
+
+ pastedElementIdCombo.setItems((String[]) possibleValuesAsString.toArray(new String[possibleValuesAsString.size()]));
+ if (-1 != indexToSelect) {
+ pastedElementIdCombo.select(indexToSelect);
+ }
+
+ // Create the containment feature labels and dialog
+ final Label containmentFeatureLabel = new Label(parent, SWT.NONE);
+ containmentFeatureLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.PasteEObjectConfigurationDialog_containmentFeatureLabel);
+ containmentFeatureLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ containmentFeatureText = new CLabel(parent, SWT.BORDER);
+ containmentFeatureText.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ browseValuesButton = new Button(parent, SWT.PUSH);
+ browseValuesButton.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.BROWSE_ICON_PATH));
+ browseValuesButton.setToolTipText(org.eclipse.papyrus.infra.widgets.messages.Messages.ReferenceDialog_EditValue);
+ browseValuesButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ browseAction(modifiedPasteConfiguration.getPasteElementContainementFeature());
+ }
+ });
+
+ deleteValuesButton = new Button(parent, SWT.PUSH);
+ deleteValuesButton.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.DELETE_ICON_PATH));
+ deleteValuesButton.setToolTipText(org.eclipse.papyrus.infra.widgets.messages.Messages.ReferenceDialog_UnsetValue);
+ deleteValuesButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ setPasteElementContainementFeature(null);
+ }
+ });
+
+ setPasteElementContainementFeature(modifiedPasteConfiguration.getPasteElementContainementFeature());
+
+ // TODO : Post actions
+ }
+
+ /**
+ * The action executed when the "browse" button is selected Choose a value
+ * from a selection of already created objects.
+ *
+ * @param value
+ * The initial value of the containment feature.
+ */
+ protected void browseAction(final Object value) {
+ ITreeSelectorDialog dialog = new TreeSelectorDialog(getShell()) {
+ @Override
+ protected void initViewerAndProvider() {
+ super.initViewerAndProvider();
+ // Set a comparator to sort the tree viewer
+ getViewer().setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+ dialog.setTitle(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.PasteEObjectConfigurationDialog_containmentFeatureDialogName);
+
+ final CompoundFilteredRestrictedContentProvider contentProvider = new CompoundFilteredRestrictedContentProvider();
+ final ReferenceSelector selector = new ReferenceSelector(false) {
+
+ @Override
+ public void createControls(final Composite parent) {
+ super.createControls(parent);
+ this.treeViewer.setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+
+ selector.setLabelProvider(labelProvider);
+ selector.setContentProvider(contentProvider);
+ final ITreeContentProvider treeContentProvider = new FlattenableRestrictedFilteredContentProvider((IRestrictedContentProvider) contentProvider, selector) {
+
+ @Override
+ public boolean isValidValue(final Object element) {
+ // EMF dependency, must not be done here, it should be better with a new content provider service
+ return element instanceof EReference && ((EReference) element).isMany() && element != EcorePackage.eINSTANCE.getEModelElement_EAnnotations();
+ }
+ };
+
+ dialog.setContentProvider(treeContentProvider);
+ dialog.setLabelProvider(labelProvider);
+ if (null != value) {
+ dialog.setInitialElementSelections(Collections.singletonList(value));
+ }
+ int result = dialog.open();
+ if (Window.OK == result) {
+ Object[] newValue = dialog.getResult();
+ if (null == newValue) {
+ return;
+ }
+
+ if (0 == newValue.length) {
+ setPasteElementContainementFeature(null);
+ } else {
+ Object selectedValue = newValue[0];
+ setPasteElementContainementFeature((EStructuralFeature) selectedValue);
+ }
+ }
+ }
+
+ /**
+ * This allows to set the containment feature and refresh the button corresponding to the containment feature value.
+ *
+ * @param structuralFeature
+ * The structural feature to set.
+ */
+ protected void setPasteElementContainementFeature(final EStructuralFeature structuralFeature) {
+ if (null == modifiedPasteConfiguration.getPasteElementContainementFeature() || !structuralFeature.equals(modifiedPasteConfiguration.getPasteElementContainementFeature())) {
+ modifiedPasteConfiguration.setPasteElementContainementFeature(structuralFeature);
+ }
+ containmentFeatureText.setImage(labelProvider.getImage(modifiedPasteConfiguration.getPasteElementContainementFeature()));
+ containmentFeatureText.setText(labelProvider.getText(modifiedPasteConfiguration.getPasteElementContainementFeature()));
+
+ deleteValuesButton.setEnabled(null != structuralFeature);
+ }
+
+ /**
+ * Returns the modified paste configuration.
+ *
+ * @return The modified paste configuration.
+ */
+ public PasteEObjectConfiguration getModifiedPasteEObjectConfiguration() {
+ return modifiedPasteConfiguration;
+ }
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/TreeFillingConfigurationDialog.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/TreeFillingConfigurationDialog.java
new file mode 100644
index 00000000000..f85f7110e01
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/TreeFillingConfigurationDialog.java
@@ -0,0 +1,657 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.edition;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NameSimplifier;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EObjectAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EOperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EStructuralFeatureAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.PasteEObjectConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TreeFillingConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.utils.StringComparator;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
+import org.eclipse.papyrus.infra.widgets.Activator;
+import org.eclipse.papyrus.infra.widgets.editors.ITreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.editors.TreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.providers.CompoundFilteredRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.FlattenableRestrictedFilteredContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.IRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.selectors.ReferenceSelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * The dialog which allow to edit the tree filling configuration features.
+ */
+public class TreeFillingConfigurationDialog extends SelectionDialog {
+
+ /**
+ * The list of possible axis creation.
+ */
+ protected final static List<String> possibleAxisCreation = new ArrayList<String>();
+
+ static {
+ possibleAxisCreation.add("EObjectAxis"); //$NON-NLS-1$
+ possibleAxisCreation.add("EOperationAxis"); //$NON-NLS-1$
+ possibleAxisCreation.add("EStructuralFeatureAxis"); //$NON-NLS-1$
+ possibleAxisCreation.add("FeatureIdAxis"); //$NON-NLS-1$
+ possibleAxisCreation.add("ObjectAxis"); //$NON-NLS-1$
+ }
+
+
+ /**
+ * A copy of initial tree filling configuration to modify with this dialog.
+ */
+ protected final TreeFillingConfiguration modifiedTreefillingConfiguration;
+
+ /**
+ * The list of existing label provider configurations for the tree filling configuration label provider reference.
+ */
+ protected final List<ILabelProviderConfiguration> existingLabelProviderConfigurations;
+
+ /**
+ * The list of existing paste configurations for the tree filling configuration paste configuration reference.
+ */
+ protected final List<PasteEObjectConfiguration> existingPasteConfigurations;
+
+ /**
+ * The label provider for the UML elements.
+ */
+ protected final ILabelProvider labelProvider;
+
+ /**
+ * The stack layout which allow to display the correct element composite corresponding to the type of axis.
+ */
+ protected StackLayout stackLayout;
+
+ /**
+ * The parent element composite which contains the stack layout.
+ */
+ protected Composite compositeElement;
+
+ /**
+ * The composite for the element referenced from the axis.
+ */
+ protected Composite compositeElementReference;
+
+ /**
+ * The composite for the string element from the axis.
+ */
+ protected Composite compositeElementString;
+
+ /**
+ * The CLabel composite for the element reference.
+ */
+ protected CLabel elementCLabel;
+
+ /**
+ * The CLabel composite for the element string.
+ */
+ protected Text elementText;
+
+ /**
+ * The browse button which allow to edit the element.
+ */
+ protected Button browseValuesButton;
+
+ /**
+ * The delete button which allow to unset the element value.
+ */
+ protected Button deleteValuesButton;
+
+ /**
+ * Constructor.
+ *
+ * @param parentShell
+ * The parent shell of the dialog.
+ * @param treefillingConfiguration
+ * The initial tree filling configuration to edit.
+ * @param existingLabelProvidersConfiguration
+ * The list of existing label provider configurations for the tree filling configuration label provider reference.
+ * @param existingPasteConfigurations
+ * The list of existing paste configurations for the tree filling configuration paste configuration reference.
+ */
+ public TreeFillingConfigurationDialog(final Shell parentShell, final TreeFillingConfiguration treefillingConfiguration, final List<ILabelProviderConfiguration> existingLabelProvidersConfiguration,
+ final List<PasteEObjectConfiguration> existingPasteConfigurations) {
+ super(parentShell);
+ this.modifiedTreefillingConfiguration = EcoreUtil.copy(treefillingConfiguration);
+ this.existingLabelProviderConfigurations = existingLabelProvidersConfiguration;
+ this.existingPasteConfigurations = existingPasteConfigurations;
+ setTitle(Messages.TreeFillingConfigurationDialog_treeFillingConfigurationDialogName);
+
+ LabelProviderService labelProviderService = new LabelProviderServiceImpl();
+ try {
+ labelProviderService.startService();
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+
+ labelProvider = labelProviderService.getLabelProvider();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#create()
+ */
+ @Override
+ public void create() {
+ super.create();
+ getShell().setImage(Activator.getDefault().getImage(NattableConfigurationConstants.PAPYRUS_ICON_PATH));
+
+ final Composite parent = new Composite((Composite) getDialogArea(), SWT.NONE);
+ parent.setLayout(new GridLayout(4, false));
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+ getShell().setSize(600, 400);
+
+ // Create the fields
+ createFields(parent);
+
+ getShell().pack();
+ Point size = getShell().getSize();
+ int minWidth = 600;
+ if (size.x < minWidth) {
+ size.x = minWidth;
+ }
+ getShell().setSize(size);
+ }
+
+ /**
+ * This allows to create the fields to edit the tree filling configuration.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createFields(final Composite parent) {
+ // Create the depth level combo
+ createDepthLevelCombo(parent);
+
+ // Create the label provider configuration combo
+ createLabelProviderCombo(parent);
+
+ // Create the paste configuration combo
+ createPasteConfigurationCombo(parent);
+
+ // Create the axis group management
+ createAxisGroup(parent);
+
+ setAxisUsedAsAxisProvider(modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider());
+ if (null != modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider()) {
+ setAxisElement(modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider().getElement());
+ }
+
+ }
+
+ /**
+ * This allows to create the depth level combo.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createDepthLevelCombo(final Composite parent) {
+ final Label depthLabel = new Label(parent, SWT.NONE);
+ depthLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_depthLabel);
+ depthLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ final Combo depthCombo = new Combo(parent, SWT.READ_ONLY);
+ depthCombo.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 3, 1));
+ depthCombo.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ modifiedTreefillingConfiguration.setDepth(Integer.valueOf(depthCombo.getText()));
+ }
+ });
+ final Collection<String> possiblesDepth = new ArrayList<String>(10);
+ for (int i = 0; i < 10; i++) {
+ possiblesDepth.add(String.valueOf(i));
+ }
+ depthCombo.setItems((String[]) possiblesDepth.toArray(new String[possiblesDepth.size()]));
+ depthCombo.select(modifiedTreefillingConfiguration.getDepth());
+ }
+
+ /**
+ * This allows to create the label provider combo.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createLabelProviderCombo(final Composite parent) {
+ final Label labelProviderConfigurationLabel = new Label(parent, SWT.NONE);
+ labelProviderConfigurationLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_labelProviderLabel);
+ labelProviderConfigurationLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ final Combo labelProviderConfigurationCombo = new Combo(parent, SWT.READ_ONLY);
+ labelProviderConfigurationCombo.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 3, 1));
+ labelProviderConfigurationCombo.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ if (labelProviderConfigurationCombo.getText().isEmpty()) {
+ modifiedTreefillingConfiguration.setLabelProvider(null);
+ } else {
+ modifiedTreefillingConfiguration.setLabelProvider(existingLabelProviderConfigurations.get(labelProviderConfigurationCombo.getSelectionIndex() - 1));
+ }
+ }
+ });
+
+ final List<String> labelProviders = new ArrayList<String>(existingLabelProviderConfigurations.size());
+ for (final ILabelProviderConfiguration existingLabelProviderConf : existingLabelProviderConfigurations) {
+ final String className = existingLabelProviderConf.getClass().getSimpleName();
+ if (NameSimplifier.labelProviderConfigurationNames.containsKey(className)) {
+ final String shortLabelProviderName = NameSimplifier.labelProviderConfigurationNames.get(className);
+ String finalShortLabelProviderName = shortLabelProviderName;
+ int index = 1;
+ while (labelProviders.contains(finalShortLabelProviderName)) {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(shortLabelProviderName);
+ builder.append("_"); //$NON-NLS-1$
+ builder.append(index);
+ finalShortLabelProviderName = builder.toString();
+ index++;
+ }
+ labelProviders.add(finalShortLabelProviderName);
+ }
+ }
+
+ labelProviderConfigurationCombo.setItems((String[]) labelProviders.toArray(new String[labelProviders.size()]));
+ if (null != modifiedTreefillingConfiguration.getLabelProvider()) {
+ int index = existingLabelProviderConfigurations.indexOf(modifiedTreefillingConfiguration.getLabelProvider());
+ labelProviderConfigurationCombo.select(index);
+ }
+ }
+
+ /**
+ * This allows to create the paste configuration combo.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createPasteConfigurationCombo(final Composite parent) {
+ final Label pasteConfigurationLabel = new Label(parent, SWT.NONE);
+ pasteConfigurationLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_pasteConfigurationLabel);
+ pasteConfigurationLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ final Combo pasteConfigurationCombo = new Combo(parent, SWT.READ_ONLY);
+ pasteConfigurationCombo.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 3, 1));
+ pasteConfigurationCombo.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ if (pasteConfigurationCombo.getText().isEmpty()) {
+ modifiedTreefillingConfiguration.setPasteConfiguration(null);
+ } else {
+ modifiedTreefillingConfiguration.setPasteConfiguration(existingPasteConfigurations.get(pasteConfigurationCombo.getSelectionIndex() - 1));
+ }
+ }
+ });
+
+ final List<String> pasteConfigurations = new ArrayList<String>(existingPasteConfigurations.size());
+ pasteConfigurations.add(""); //$NON-NLS-1$
+ for (final PasteEObjectConfiguration existingPasteConf : existingPasteConfigurations) {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("Paste Conf: '"); //$NON-NLS-1$
+ builder.append(existingPasteConf.getPastedElementId());
+ builder.append("' in '"); //$NON-NLS-1$
+ builder.append(existingPasteConf.getPasteElementContainementFeature().getName());
+ builder.append("'"); //$NON-NLS-1$
+ pasteConfigurations.add(builder.toString());
+ }
+
+ pasteConfigurationCombo.setItems((String[]) pasteConfigurations.toArray(new String[pasteConfigurations.size()]));
+ if (null != modifiedTreefillingConfiguration.getPasteConfiguration()) {
+ int index = existingPasteConfigurations.indexOf(modifiedTreefillingConfiguration.getPasteConfiguration());
+ pasteConfigurationCombo.select(index);
+ }
+ }
+
+ /**
+ * This allows to create the axis group.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createAxisGroup(final Composite parent) {
+ final Group axisGroup = new Group(parent, SWT.NONE);
+ axisGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 4, 1));
+ axisGroup.setLayout(new GridLayout(4, false));
+ axisGroup.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_axisUsedAsAxisProviderLabel);
+
+ // Create the paste configuration combo
+ final Label axisTypeLabel = new Label(axisGroup, SWT.NONE);
+ axisTypeLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_typeLabel);
+ axisTypeLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ final Combo axisTypeCombo = new Combo(axisGroup, SWT.READ_ONLY);
+ axisTypeCombo.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 3, 1));
+ axisTypeCombo.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ final IAxis existingAxis = modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider();
+
+ if (axisTypeCombo.getText().isEmpty() && null != existingAxis) {
+ setAxisUsedAsAxisProvider(null);
+ } else {
+ if (null == existingAxis || !existingAxis.getClass().getSimpleName().substring(0, existingAxis.getClass().getSimpleName().length() - 4).equals(axisTypeCombo.getText())) {
+ IAxis recreatedAxis = null;
+ if ("EObjectAxis".equals(axisTypeCombo.getText())) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createEObjectAxis();
+ } else if ("EOperationAxis".equals(axisTypeCombo.getText())) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createEOperationAxis();
+ } else if ("EStructuralFeatureAxis".equals(axisTypeCombo.getText())) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createEStructuralFeatureAxis();
+ } else if ("FeatureIdAxis".equals(axisTypeCombo.getText())) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createFeatureIdAxis();
+ } else if ("ObjectAxis".equals(axisTypeCombo.getText())) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createObjectIdAxis();
+ }
+
+ if (null != existingAxis) {
+ recreatedAxis.setAlias(existingAxis.getAlias());
+ }
+
+ setAxisUsedAsAxisProvider(recreatedAxis);
+ }
+ }
+ }
+ });
+
+ // Add the possibility to reset it
+ final List<String> possiblesAxis = new ArrayList<String>(possibleAxisCreation);
+ possiblesAxis.add(0, ""); //$NON-NLS-1$
+
+ axisTypeCombo.setItems((String[]) possiblesAxis.toArray(new String[possiblesAxis.size()]));
+ boolean foundAxis = false;
+
+ // Manage the initial value corresponding to the current axis used
+ if (null != modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider()) {
+ final IAxis existingAxis = modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider();
+ final String existingAxisClassName = existingAxis.getClass().getSimpleName().substring(0, existingAxis.getClass().getSimpleName().length() - 4);
+
+ for (int index = 0; index < possiblesAxis.size() && !foundAxis; index++) {
+ final String axisClass = possiblesAxis.get(index);
+
+ if (existingAxisClassName.equals(axisClass)) {
+ axisTypeCombo.select(index);
+ foundAxis = true;
+ }
+ }
+ } else {
+ axisTypeCombo.select(0);
+ }
+
+ // Create the stack layout to display the composite string element or the reference element
+ stackLayout = new StackLayout();
+
+ // The parent composite for the element value
+ compositeElement = new Composite(axisGroup, SWT.NONE);
+ compositeElement.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 4, 1));
+ compositeElement.setLayout(stackLayout);
+
+ // Create the composite element reference for the element reference (contrary to String value)
+ compositeElementReference = new Composite(compositeElement, SWT.NONE);
+ compositeElementReference.setLayout(new GridLayout(4, false));
+ // Create the element labels and dialog for the reference
+ final Label elementLabel = new Label(compositeElementReference, SWT.NONE);
+ elementLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_elementLabel);
+ elementLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ elementCLabel = new CLabel(compositeElementReference, SWT.BORDER);
+ elementCLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ browseValuesButton = new Button(compositeElementReference, SWT.PUSH);
+ browseValuesButton.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.BROWSE_ICON_PATH));
+ browseValuesButton.setToolTipText(org.eclipse.papyrus.infra.widgets.messages.Messages.ReferenceDialog_EditValue);
+ browseValuesButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ Object element = null;
+ final IAxis existingAxis = modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider();
+
+ if (existingAxis instanceof EObjectAxis) {
+ element = ((EObjectAxis) existingAxis).getElement();
+ } else if (existingAxis instanceof EStructuralFeatureAxis) {
+ element = ((EStructuralFeatureAxis) existingAxis).getElement();
+ } else if (existingAxis instanceof EOperationAxis) {
+ element = ((EOperationAxis) existingAxis).getElement();
+ }
+ browseAction(element);
+ }
+ });
+
+ deleteValuesButton = new Button(compositeElementReference, SWT.PUSH);
+ deleteValuesButton.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.DELETE_ICON_PATH));
+ deleteValuesButton.setToolTipText(org.eclipse.papyrus.infra.widgets.messages.Messages.ReferenceDialog_UnsetValue);
+ deleteValuesButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ setAxisElement(null);
+ }
+ });
+
+ // Create the composite element reference for the element reference (contrary to String value)
+ compositeElementString = new Composite(compositeElement, SWT.NONE);
+ compositeElementString.setLayout(new GridLayout(4, false));
+ // Create the element label and the text for the string value
+ final Label secondElementLabel = new Label(compositeElementString, SWT.NONE);
+ secondElementLabel.setText(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_elementLabel);
+ secondElementLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ elementText = new Text(compositeElementString, SWT.BORDER);
+ elementText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
+ elementText.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ setAxisElement(elementText.getText());
+ }
+ });
+ }
+
+ /**
+ * The action executed when the "browse" button is selected Choose a value
+ * from a selection of already created objects
+ */
+ protected void browseAction(final Object value) {
+ final ITreeSelectorDialog dialog = new TreeSelectorDialog(getShell()) {
+ @Override
+ protected void initViewerAndProvider() {
+ super.initViewerAndProvider();
+ // Set a comparator to sort the tree viewer
+ getViewer().setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+ dialog.setTitle(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.TreeFillingConfigurationDialog_elementDialogName);
+
+ final CompoundFilteredRestrictedContentProvider contentProvider = new CompoundFilteredRestrictedContentProvider() {
+
+ @Override
+ public Object[] getChildren(final Object parentElement) {
+ List<Object> childrenList = Arrays.asList(super.getChildren(parentElement));
+ if (parentElement instanceof EClass) {
+ childrenList = new ArrayList<Object>(childrenList);
+ final EClass eClass = (EClass) parentElement;
+ if (isIgnoringInheritedElements()) {
+ childrenList.addAll(eClass.getEOperations());
+ } else {
+ childrenList.addAll(eClass.getEAllOperations());
+ }
+ childrenList.remove(EcorePackage.eINSTANCE.getEModelElement_EAnnotations());
+ }
+ return childrenList.toArray();
+ }
+ };
+ final ReferenceSelector selector = new ReferenceSelector(false) {
+
+ @Override
+ public void createControls(Composite parent) {
+ super.createControls(parent);
+ this.treeViewer.setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+
+ selector.setLabelProvider(labelProvider);
+ selector.setContentProvider(contentProvider);
+ final ITreeContentProvider treeContentProvider = new FlattenableRestrictedFilteredContentProvider((IRestrictedContentProvider) contentProvider, selector) {
+
+ @Override
+ public boolean isValidValue(final Object element) {
+ return isTypeNeeded(element);
+ }
+ };
+
+ dialog.setContentProvider(treeContentProvider);
+ dialog.setLabelProvider(labelProvider);
+ if (null != value) {
+ dialog.setInitialElementSelections(Collections.singletonList(value));
+ }
+ int result = dialog.open();
+ if (Window.OK == result) {
+ Object[] newValue = dialog.getResult();
+ if (null == newValue) {
+ return;
+ }
+
+ if (0 == newValue.length) {
+ setAxisElement(null);
+ } else {
+ setAxisElement(newValue[0]);
+ }
+ }
+ }
+
+ /**
+ * This allows to check if the element in dialog must be used for the axis element.
+ *
+ * @param element
+ * The element selected to check.
+ * @return <code>true</code> if the element can be set to the axis, <code>false</code> otherwise.
+ */
+ protected boolean isTypeNeeded(final Object element) {
+ boolean result = false;
+
+ final IAxis existingAxis = modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider();
+ if (null != existingAxis) {
+ result = element != EcorePackage.eINSTANCE.getEModelElement_EAnnotations();
+
+ // Depending to the axis, objects displayed are not the same
+ if (existingAxis instanceof EObjectAxis && result) {
+ result = element instanceof EClass;
+ } else if (existingAxis instanceof EStructuralFeatureAxis && result) {
+ result = element instanceof EStructuralFeature;
+ } else if (existingAxis instanceof EOperationAxis && result) {
+ result = element instanceof EOperation;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * This allows to set the axis and refresh the button corresponding to the axis value.
+ *
+ * @param newAxis
+ * The axis to set to the tree filling configuration.
+ */
+ protected void setAxisUsedAsAxisProvider(final IAxis newAxis) {
+ if (null == modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider() || !modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider().equals(newAxis)) {
+ modifiedTreefillingConfiguration.setAxisUsedAsAxisProvider(newAxis);
+ }
+
+ // This allows to refresh the composite to display for the axis element value
+ stackLayout.topControl = newAxis instanceof FeatureIdAxis ? compositeElementString : compositeElementReference;
+ compositeElement.layout();
+ if (stackLayout.topControl.equals(compositeElementString)) {
+ elementText.setText(null != newAxis && null != newAxis.getElement() ? ((FeatureIdAxis) newAxis).getElement() : ""); //$NON-NLS-1$
+ }
+
+ setAxisElement(null != newAxis ? newAxis.getElement() : null);
+ }
+
+ /**
+ * This allows to set the axis and refresh the button corresponding to the axis value.
+ *
+ * @param newAxis
+ * The axis to set to the tree filling configuration.
+ */
+ protected void setAxisElement(final Object element) {
+ final IAxis existingAxis = modifiedTreefillingConfiguration.getAxisUsedAsAxisProvider();
+ if (null != existingAxis) {
+ if (existingAxis instanceof EObjectAxis && (null == element || element instanceof EObject)) {
+ ((EObjectAxis) existingAxis).setElement((EObject) element);
+ } else if (existingAxis instanceof EStructuralFeatureAxis && (null == element || element instanceof EStructuralFeature)) {
+ ((EStructuralFeatureAxis) existingAxis).setElement((EStructuralFeature) element);
+ } else if (existingAxis instanceof EOperationAxis && (null == element || element instanceof EOperation)) {
+ ((EOperationAxis) existingAxis).setElement((EOperation) element);
+ } else if (existingAxis instanceof FeatureIdAxis && (null == element || element instanceof String)) {
+ ((FeatureIdAxis) existingAxis).setElement((String) element);
+ }
+ }
+
+ // Manage the enabling and displayed composites
+ if (stackLayout.topControl.equals(compositeElementReference)) {
+ elementCLabel.setEnabled(null != existingAxis);
+ elementCLabel.setImage(labelProvider.getImage(element));
+ elementCLabel.setText(labelProvider.getText(element));
+
+ browseValuesButton.setEnabled(null != existingAxis);
+ deleteValuesButton.setEnabled(null != existingAxis && null != element);
+ }
+ }
+
+ /**
+ * Returns the modified tree filling configuration.
+ *
+ * @return The modified tree filling configuration.
+ */
+ public TreeFillingConfiguration getModifiedTreeFillingConfiguration() {
+ return modifiedTreefillingConfiguration;
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/EditExistingTableConfigurationWizardHandler.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/EditExistingTableConfigurationWizardHandler.java
new file mode 100644
index 00000000000..d227167e975
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/EditExistingTableConfigurationWizardHandler.java
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - Initial API and implementation and Bug 49356
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.papyrus.customization.nattableconfiguration.wizards.EditTableConfigurationWizard;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * The handler used to edit an existing table configuration
+ */
+public class EditExistingTableConfigurationWizardHandler extends AbstractHandler {
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(final ExecutionEvent event) throws ExecutionException {
+ final EditTableConfigurationWizard wizard = new EditTableConfigurationWizard();
+ ISelection selection = HandlerUtil.getCurrentSelection(event);
+ if (selection instanceof StructuredSelection) {
+ wizard.init(PlatformUI.getWorkbench(), (IStructuredSelection) selection);
+ final WizardDialog dialog = new WizardDialog(Display.getDefault().getActiveShell(), wizard);
+ dialog.open();
+ }
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.nattable.handler.AbstractTableHandler#setEnabled(java.lang.Object)
+ */
+ @Override
+ public void setEnabled(final Object evaluationContext) {
+ super.setEnabled(evaluationContext);
+ setBaseEnabled(true);
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/helper/TableConfigurationHelper.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/helper/TableConfigurationHelper.java
new file mode 100644
index 00000000000..2009a0140d5
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/helper/TableConfigurationHelper.java
@@ -0,0 +1,358 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST and others.
+ *
+ * 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:
+ * Vincent LORENZO (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.helper;
+
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DisplayStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.TableDisplayStyle;
+
+/**
+ * This class is a helper to get and edit TableConfiguration values easily, with no command and not editing domain
+ */
+public class TableConfigurationHelper {
+
+ /**
+ * the table configuration we are manipulating
+ */
+ private final TableConfiguration configuration;
+
+ /**
+ * String for not yet supported operation
+ */
+ private static final String NOT_YET_SUPPORTED = "not yet supported"; //$NON-NLS-1$
+ /**
+ * the empty string
+ */
+ public static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+ /**
+ * Flat style for axis
+ * Please, notice, than
+ * <ul>
+ * <li>the real implementation works only for Tree Row</li>
+ * <li>this style is declared on the tree, and not on the axis in the metamodel</li>
+ * </ul>
+ *
+ */
+ public static final String AXIS_FLAT_STYLE = "Flat"; //$NON-NLS-1$
+
+ /**
+ * Tree style for axis
+ * Please, notice, than
+ * <ul>
+ * <li>the real implementation works only for Tree Row</li>
+ * <li>this style is declared on the tree, and not on the axis in the metamodel</li>
+ * </ul>
+ *
+ */
+ public static final String AXIS_TREE_STYLE = "Tree"; //$NON-NLS-1$
+
+ /**
+ * Compact Tree style for axis
+ * Please, notice, than
+ * <ul>
+ * <li>the real implementation works only for Tree Row</li>
+ * <li>this style is declared on the tree, and not on the axis in the metamodel</li>
+ * </ul>
+ *
+ */
+ public static final String AXIS_COMPACT_TREE_STYLE = "Compact"; //$NON-NLS-1$
+
+ /**
+ * Large Tree style for axis
+ * Please, notice, than
+ * <ul>
+ * <li>the real implementation works only for Tree Row</li>
+ * <li>this style is declared on the tree, and not on the axis in the metamodel</li>
+ * </ul>
+ *
+ */
+ public static final String AXIS_LARGE_TREE_STYLE = "Large"; //$NON-NLS-1$
+
+
+
+ /**
+ * Constructor.
+ *
+ */
+ public TableConfigurationHelper(final TableConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+
+ /**
+ * Declare row axis as a flat axis
+ */
+ public void setRowAxisAsFlat() {
+ TableDisplayStyle displayStyle = (TableDisplayStyle) this.configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ if (null == displayStyle) {
+ displayStyle = (TableDisplayStyle) this.configuration.createStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ }
+ displayStyle.setDisplayStyle(DisplayStyle.NORMAL);
+ }
+
+ /**
+ * Declare row axis as a tree displayed with the compact style
+ */
+ public void setRowAxisAsCompactTree() {
+ TableDisplayStyle displayStyle = (TableDisplayStyle) this.configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ if (null == displayStyle) {
+ displayStyle = (TableDisplayStyle) this.configuration.createStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ }
+ displayStyle.setDisplayStyle(DisplayStyle.HIERARCHIC_SINGLE_TREE_COLUMN);
+ }
+
+ /**
+ * Declare row axis as a tree displayed with the large style
+ */
+ public void setRowAxisAsLargeTree() {
+ TableDisplayStyle displayStyle = (TableDisplayStyle) this.configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ if (null == displayStyle) {
+ displayStyle = (TableDisplayStyle) this.configuration.createStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ }
+ displayStyle.setDisplayStyle(DisplayStyle.HIERARCHIC_MULTI_TREE_COLUMN);
+ }
+
+ /**
+ * set the row axis as tree, displayed as a compact tree by default
+ */
+ public void setRowAxisAsTree() {
+ setRowAxisAsCompactTree();
+ }
+
+
+ /**
+ * Declare column axis as a flat axis
+ *
+ * @not_yet_supported
+ */
+ public void setColumnAxisAsFlat() {
+ throw new UnsupportedOperationException(NOT_YET_SUPPORTED);
+ }
+
+
+ /**
+ * Declare column axis as a tree displayed with the compact style
+ *
+ * @not_yet_supported
+ */
+ public void setColumnAxisAsCompactTree() {
+ throw new UnsupportedOperationException(NOT_YET_SUPPORTED);
+ }
+
+
+ /**
+ * Declare column axis as a tree displayed with the large style
+ *
+ * @not_yet_supported
+ */
+ public void setColumnAxisAsLargeTree() {
+ throw new UnsupportedOperationException(NOT_YET_SUPPORTED);
+ }
+
+ /**
+ * set the row axis as tree, displayed as a compact tree by default
+ */
+ public void setColumnAxisAsTree() {
+ throw new UnsupportedOperationException(NOT_YET_SUPPORTED);
+ }
+
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is flat, and <code>false</code> in other cases
+ */
+ public Boolean isRowAxisFlat() {
+ final TableDisplayStyle displayStyle = (TableDisplayStyle) this.configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ Boolean returnedValue = null;
+ if (null != displayStyle) {
+ returnedValue = Boolean.valueOf(DisplayStyle.NORMAL.equals(displayStyle.getDisplayStyle()));
+ }
+ return returnedValue;
+ }
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is flat, and <code>false</code> in other cases
+ *
+ * @not_yet_supported
+ */
+ public Boolean isColumnAxisFlat() {
+ return null;
+ }
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is a tree, and <code>false</code> in other cases
+ */
+ public Boolean isRowAxisTree() {
+ final TableDisplayStyle displayStyle = (TableDisplayStyle) this.configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ Boolean returnedValue = null;
+ if (null != displayStyle) {
+ returnedValue = Boolean.valueOf(DisplayStyle.HIERARCHIC_SINGLE_TREE_COLUMN.equals(displayStyle.getDisplayStyle()) || DisplayStyle.HIERARCHIC_MULTI_TREE_COLUMN.equals(displayStyle.getDisplayStyle()));
+ }
+ return returnedValue;
+ }
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is a tree, and <code>false</code> in other cases
+ *
+ * @not_yet_supported
+ */
+ public Boolean isColumnAxisTree() {
+ return null;
+ }
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is a compact tree, and <code>false</code> in other cases
+ */
+ public Boolean isRowAxisCompactTree() {
+ final TableDisplayStyle displayStyle = (TableDisplayStyle) this.configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ Boolean returnedValue = null;
+ if (null != displayStyle) {
+ returnedValue = Boolean.valueOf(DisplayStyle.HIERARCHIC_SINGLE_TREE_COLUMN.equals(displayStyle.getDisplayStyle()));
+ }
+ return returnedValue;
+ }
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is a compact tree, and <code>false</code> in other cases
+ *
+ * @not_yet_supported
+ */
+ public Boolean isColumnAxisCompactTree() {
+ return null;
+ }
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is a large tree, and <code>false</code> in other cases
+ */
+ public Boolean isRowAxisLargeTree() {
+ final TableDisplayStyle displayStyle = (TableDisplayStyle) this.configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ Boolean returnedValue = null;
+ if (null != displayStyle) {
+ returnedValue = Boolean.valueOf(DisplayStyle.HIERARCHIC_MULTI_TREE_COLUMN.equals(displayStyle.getDisplayStyle()));
+ }
+ return returnedValue;
+ }
+
+ /**
+ *
+ * @return
+ * <code>null</code> if the value has never been initialized, <code>true</code> if the row axis is a compact tree, and <code>false</code> in other cases
+ *
+ * @not_yet_supported
+ */
+ public Boolean isColumnAxisLargeTree() {
+ return null;
+ }
+
+ /**
+ *
+ * @return
+ * the type of the table, never <code>null</code>
+ */
+ public String getTableType() {
+ String type = this.configuration.getType();
+ if (null == type) {
+ type = EMPTY_STRING;
+ }
+ return type;
+ }
+
+ /**
+ *
+ * @return
+ * the default table name, never <code>null</code>
+ */
+ public String getDefaultTableName() {
+ String name = this.configuration.getName();
+ if (null == name) {
+ name = EMPTY_STRING;
+ }
+ return name;
+ }
+
+ /**
+ *
+ * @return
+ * the table configuration description, never <code>null</code>
+ */
+ public String getTableConfigurationDescription() {
+ String description = this.configuration.getDescription();
+ if (null == description) {
+ description = EMPTY_STRING;
+ }
+ return description;
+ }
+
+ /**
+ * Get the table configuration.
+ *
+ * @return The table configuration.
+ */
+ public TableConfiguration getTableConfiguration() {
+ return configuration;
+ }
+
+ /**
+ *
+ * @param name
+ * the default name of the table
+ */
+ public void setDefaultTableName(final String name) {
+ this.configuration.setName(name);
+ }
+
+ /**
+ *
+ * @param type
+ * the type of the table
+ */
+ public void setTableType(final String type) {
+ this.configuration.setType(type);
+ }
+
+ /**
+ *
+ * @param iconPath
+ * the path of the icon to use for the table
+ */
+ public void setTableIcon(final String iconPath) {
+ this.configuration.setIconPath(iconPath);
+ }
+
+ /**
+ *
+ * @param description
+ * the table configuration description
+ */
+ public void setTableConfigurationDescription(final String description) {
+ this.configuration.setDescription(description);
+ }
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/Messages.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/Messages.java
new file mode 100644
index 00000000000..acfa52dcd37
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/Messages.java
@@ -0,0 +1,161 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.messages;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * The string messages.
+ */
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.papyrus.customization.nattableconfiguration.messages.messages"; //$NON-NLS-1$
+
+
+ public static String AbstractAxisConfigurationWizardPage_axisManagersLabel;
+
+ public static String AbstractAxisConfigurationWizardPage_displayIconColumnLabel;
+
+ public static String AbstractAxisConfigurationWizardPage_displayIsDerivedColumnLabel;
+
+ public static String AbstractAxisConfigurationWizardPage_displayLabelColumnLabel;
+
+ public static String AbstractAxisConfigurationWizardPage_displayMultiplicityColumnLabel;
+
+ public static String AbstractAxisConfigurationWizardPage_displayNameColumnLabel;
+
+ public static String AbstractAxisConfigurationWizardPage_displayTypeColumnLabel;
+
+ public static String AbstractAxisConfigurationWizardPage_labelProviderConfigurationColumnLabel;
+
+ public static String ColumnConfigurationWizardPage_pageName;
+
+ public static String ConfigurationWizardPage_axisManagerIdColumnName;
+
+ public static String ConfigurationWizardPage_labelProviderContextColumnName;
+
+ public static String CreateNattableConfigurationWizard_WizardTitke;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_axisKindLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_columnsManagementLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_defaultTableNameLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_descriptionLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_disconnectSlaveLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_displayFilterLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_displayIndexLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_displayLabelLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_iconToUseLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_indexStyleLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_javaTableTesterLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_masterLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_nameLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_nameMustBeSetError;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_pageName;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_rowsManagementLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_slaveLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_tableConfigurationLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_tableTypeLabel;
+
+ public static String EditGenericNattableConfigurationFieldsNattableWizardPage_typeMustBeSetError;
+
+ public static String FeatureFillingConfigurationDialog_featureFillingConfigurationDialogName;
+
+ public static String FeatureFillingConfigurationDialog_listenFeature;
+
+ public static String FeatureFillingConfigurationDialog_listenFeatureDialogName;
+
+ public static String NattableConfigurationProjectCreationPage_nattableConfigurationFileNameLabel;
+
+ public static String NattableConfigurationProjectCreationPage_pageName;
+
+ public static String PasteEObjectConfigurationDialog_containmentFeatureDialogName;
+
+ public static String PasteEObjectConfigurationDialog_containmentFeatureLabel;
+
+ public static String PasteEObjectConfigurationDialog_detachedModeLabel;
+
+ public static String PasteEObjectConfigurationDialog_pastedElementIdLabel;
+
+ public static String PasteEObjectConfigurationDialog_pasteEObjectConfigurationDialogName;
+
+ public static String ReferenceDialog_EditValue;
+
+ public static String ReferenceDialog_UnsetValue;
+
+ public static String RowConfigurationWizardPage_axisConfigurationsColumnName;
+
+ public static String RowConfigurationWizardPage_axisConfigurationsLabel;
+
+ public static String RowConfigurationWizardPage_eStructuralFeatureValueFillingConfigurationLabel;
+
+ public static String RowConfigurationWizardPage_featureAxisLabel;
+
+ public static String RowConfigurationWizardPage_pageName;
+
+ public static String RowConfigurationWizardPage_pasteConfigurationLabel;
+
+ public static String RowConfigurationWizardPage_treeFillingConfigurationLabel;
+
+ public static String SlaveConfigurationWizardPage_aliasColumnName;
+
+ public static String SlaveConfigurationWizardPage_elementColumnName;
+
+ public static String SlaveConfigurationWizardPage_managerColumnName;
+
+ public static String SlaveConfigurationWizardPage_pageName;
+
+ public static String SlaveConfigurationWizardPage_typeColumnName;
+
+ public static String TreeFillingConfigurationDialog_axisUsedAsAxisProviderLabel;
+
+ public static String TreeFillingConfigurationDialog_depthLabel;
+
+ public static String TreeFillingConfigurationDialog_elementDialogName;
+
+ public static String TreeFillingConfigurationDialog_elementLabel;
+
+ public static String TreeFillingConfigurationDialog_labelProviderLabel;
+
+ public static String TreeFillingConfigurationDialog_pasteConfigurationLabel;
+
+ public static String TreeFillingConfigurationDialog_treeFillingConfigurationDialogName;
+
+ public static String TreeFillingConfigurationDialog_typeLabel;
+
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/messages.properties b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/messages.properties
new file mode 100644
index 00000000000..e605462faa8
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/messages/messages.properties
@@ -0,0 +1,64 @@
+AbstractAxisConfigurationWizardPage_axisManagersLabel=Axis managers
+AbstractAxisConfigurationWizardPage_displayIconColumnLabel=Display icon
+AbstractAxisConfigurationWizardPage_displayIsDerivedColumnLabel=Display isDerived
+AbstractAxisConfigurationWizardPage_displayLabelColumnLabel=Display label
+AbstractAxisConfigurationWizardPage_displayMultiplicityColumnLabel=Display multiplicity
+AbstractAxisConfigurationWizardPage_displayNameColumnLabel=Display name
+AbstractAxisConfigurationWizardPage_displayTypeColumnLabel=Display type
+AbstractAxisConfigurationWizardPage_labelProviderConfigurationColumnLabel=Label provider configuration
+ColumnConfigurationWizardPage_pageName=Define column axis elements
+ConfigurationWizardPage_axisManagerIdColumnName=Axis manager id
+ConfigurationWizardPage_labelProviderContextColumnName=Label provider context
+CreateNattableConfigurationWizard_WizardTitke=Papyrus table configuration editor
+EditGenericNattableConfigurationFieldsNattableWizardPage_axisKindLabel=Axis kind
+EditGenericNattableConfigurationFieldsNattableWizardPage_columnsManagementLabel=Columns configuration
+EditGenericNattableConfigurationFieldsNattableWizardPage_defaultTableNameLabel=Default table name
+EditGenericNattableConfigurationFieldsNattableWizardPage_descriptionLabel=Description
+EditGenericNattableConfigurationFieldsNattableWizardPage_disconnectSlaveLabel=Disconnect slave
+EditGenericNattableConfigurationFieldsNattableWizardPage_displayFilterLabel=Display filter
+EditGenericNattableConfigurationFieldsNattableWizardPage_displayIndexLabel=Display index
+EditGenericNattableConfigurationFieldsNattableWizardPage_displayLabelLabel=Display label
+EditGenericNattableConfigurationFieldsNattableWizardPage_iconToUseLabel=Select icon to use
+EditGenericNattableConfigurationFieldsNattableWizardPage_indexStyleLabel=Index style
+EditGenericNattableConfigurationFieldsNattableWizardPage_javaTableTesterLabel=Java table tester
+EditGenericNattableConfigurationFieldsNattableWizardPage_masterLabel=Rows manager
+EditGenericNattableConfigurationFieldsNattableWizardPage_nameLabel=Name
+EditGenericNattableConfigurationFieldsNattableWizardPage_nameMustBeSetError=Name must be set. \n
+EditGenericNattableConfigurationFieldsNattableWizardPage_pageName=Enter generic data table configuration
+EditGenericNattableConfigurationFieldsNattableWizardPage_rowsManagementLabel=Rows configuration
+EditGenericNattableConfigurationFieldsNattableWizardPage_slaveLabel=Columns manager
+EditGenericNattableConfigurationFieldsNattableWizardPage_tableConfigurationLabel=Table configuration
+EditGenericNattableConfigurationFieldsNattableWizardPage_tableTypeLabel=Table type
+EditGenericNattableConfigurationFieldsNattableWizardPage_typeMustBeSetError=Type must be set. \n
+FeatureFillingConfigurationDialog_featureFillingConfigurationDialogName=Structural feature value filling configuration edition
+FeatureFillingConfigurationDialog_listenFeature=Listen feature
+FeatureFillingConfigurationDialog_listenFeatureDialogName=Listen feature
+NattableConfigurationProjectCreationPage_nattableConfigurationFileNameLabel=Nattable configuration file name
+NattableConfigurationProjectCreationPage_pageName=Project creation
+PasteEObjectConfigurationDialog_containmentFeatureDialogName=Containment feature
+PasteEObjectConfigurationDialog_containmentFeatureLabel=Containment feature
+PasteEObjectConfigurationDialog_detachedModeLabel=Detached mode
+PasteEObjectConfigurationDialog_pastedElementIdLabel=Pasted element id
+PasteEObjectConfigurationDialog_pasteEObjectConfigurationDialogName=Paste EObject configuration edition
+ReferenceDialog_EditValue=Edit the reference value
+ReferenceDialog_UnsetValue=Unset the reference value
+RowConfigurationWizardPage_axisConfigurationsColumnName=Axis configurations
+RowConfigurationWizardPage_axisConfigurationsLabel=Axis configurations
+RowConfigurationWizardPage_eStructuralFeatureValueFillingConfigurationLabel=EStructural feature value filling configuration
+RowConfigurationWizardPage_featureAxisLabel=Feature axis
+RowConfigurationWizardPage_pageName=Define row axis elements
+RowConfigurationWizardPage_pasteConfigurationLabel=Paste EObject configuration
+RowConfigurationWizardPage_treeFillingConfigurationLabel=Tree filling configuration
+SlaveConfigurationWizardPage_aliasColumnName=Alias
+SlaveConfigurationWizardPage_elementColumnName=Element
+SlaveConfigurationWizardPage_managerColumnName=Manager
+SlaveConfigurationWizardPage_pageName=Define the default columns
+SlaveConfigurationWizardPage_typeColumnName=Type
+TreeFillingConfigurationDialog_axisUsedAsAxisProviderLabel=Axis used as axis provider
+TreeFillingConfigurationDialog_depthLabel=Depth
+TreeFillingConfigurationDialog_elementDialogName=Element
+TreeFillingConfigurationDialog_elementLabel=Element
+TreeFillingConfigurationDialog_labelProviderLabel=Label provider
+TreeFillingConfigurationDialog_pasteConfigurationLabel=Paste configuration
+TreeFillingConfigurationDialog_treeFillingConfigurationDialogName=Tree filling configuration edition
+TreeFillingConfigurationDialog_typeLabel=Type
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractAxisConfigurationWizardPage.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractAxisConfigurationWizardPage.java
new file mode 100644
index 00000000000..d51d78f31ed
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractAxisConfigurationWizardPage.java
@@ -0,0 +1,880 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.pages;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.CheckboxCellEditor;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NameSimplifier;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationEditingSupport;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.FeatureLabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.NattablelabelproviderFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ObjectLabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.OperationLabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.impl.FeatureLabelProviderConfigurationImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.impl.ObjectLabelProviderConfigurationImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.impl.OperationLabelProviderConfigurationImpl;
+import org.eclipse.papyrus.infra.widgets.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+/**
+ * The axis header configuration wizard page which allow to define the axis managers, the label provider configurations (hidden for user).
+ */
+public abstract class AbstractAxisConfigurationWizardPage extends AbstractTableConfigurationWizardPage {
+
+ /**
+ * The header axis configuration from the table configuration;
+ */
+ protected final TableHeaderAxisConfiguration headerAxisConfiguration;
+
+ /**
+ * The button to add an axis manager representation.
+ */
+ protected Button addAxisManagerRepresentation;
+
+ /**
+ * The button to remove an existing axis manager representation.
+ */
+ protected Button removeAxisManagerRepresentation;
+
+ /**
+ * The table viewer corresponding to the label provider configurations.
+ */
+ protected TableViewer labelProviderConfigurationTableViewer;
+
+
+ /**
+ * Constructor.
+ *
+ * @param pageName
+ * The current page name.
+ * @param helper
+ * The table configuration helper.
+ */
+ public AbstractAxisConfigurationWizardPage(final String pageName, final TableConfigurationHelper helper) {
+ super(pageName, helper);
+ this.headerAxisConfiguration = getHeaderAxisConfiguration();
+ }
+
+ /**
+ * This allows to get the header axis configuration to edit.
+ *
+ * @return The header axis configuration to edit.
+ */
+ public abstract TableHeaderAxisConfiguration getHeaderAxisConfiguration();
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(final Composite parent) {
+ // Manage the page complete
+ setPageComplete(isPageComplete());
+
+ // Create the parent composite
+ final Composite container = new Composite(parent, SWT.BORDER);
+ container.setLayout(new GridLayout(1, false));
+
+ // Create the axis managers group
+ final Group axisManagersGroup = new Group(container, SWT.NONE);
+ axisManagersGroup.setText(Messages.AbstractAxisConfigurationWizardPage_axisManagersLabel);
+ axisManagersGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ axisManagersGroup.setLayout(new GridLayout(2, false));
+
+ // Create the table viewer (table, column and its layout)
+ final TableViewer axisManagerTableViewer = createAxisManagersTableViewer(axisManagersGroup);
+
+ // Create the buttons composite
+ final Composite buttonsComposite = new Composite(axisManagersGroup, SWT.NONE);
+ buttonsComposite.setLayout(new GridLayout(1, false));
+ buttonsComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+
+ // Create the add button
+ addAxisManagerRepresentation = new Button(buttonsComposite, SWT.PUSH);
+ addAxisManagerRepresentation.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.ADD_ICON_PATH));
+ addAxisManagerRepresentation.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the add action which allow to create an axis manager representation
+ addAxisManagerRepresentation.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ final AxisManagerRepresentation createRepresentation = createAxisManagerRepresentation();
+ headerAxisConfiguration.getAxisManagers().add(createRepresentation);
+
+ manageLabelProviderConfiguration(createRepresentation);
+
+ recalculateButtonsAvailability(axisManagerTableViewer.getStructuredSelection());
+ axisManagerTableViewer.refresh();
+
+ setPageComplete(isPageComplete());
+ }
+ });
+
+ // Create the remove button
+ removeAxisManagerRepresentation = new Button(buttonsComposite, SWT.PUSH);
+ removeAxisManagerRepresentation.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.DELETE_ICON_PATH));
+ removeAxisManagerRepresentation.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the remove action which allow to remove an axis manager representation
+ removeAxisManagerRepresentation.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ final Iterator<?> selectedObjects = axisManagerTableViewer.getStructuredSelection().iterator();
+ while (selectedObjects.hasNext()) {
+ Object selectedObject = selectedObjects.next();
+
+ if (selectedObject instanceof AxisManagerRepresentation) {
+ final AxisManagerRepresentation axisManagerRepresentation = (AxisManagerRepresentation) selectedObject;
+ removeLabelProviderConfiguration(axisManagerRepresentation.getHeaderLabelConfiguration(), axisManagerRepresentation);
+ headerAxisConfiguration.getAxisManagers().remove(axisManagerRepresentation);
+ }
+ }
+
+ recalculateButtonsAvailability(axisManagerTableViewer.getStructuredSelection());
+ axisManagerTableViewer.refresh();
+
+ setPageComplete(isPageComplete());
+ }
+ });
+
+ // Manage the selection change
+ axisManagerTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ recalculateButtonsAvailability(event.getSelection());
+ }
+ });
+ axisManagerTableViewer.setSelection(new StructuredSelection());
+
+ // Create the table viewer (table, column and its layout)
+ labelProviderConfigurationTableViewer = createLabelProviderConfigurationsTableViewer(axisManagersGroup);
+
+ createMoreComposite(container);
+
+ setControl(container);
+ }
+
+ /**
+ * This allows to create an axis manager representation.
+ *
+ * @return The created axis manager representation.
+ */
+ public AxisManagerRepresentation createAxisManagerRepresentation() {
+ return NattableaxisconfigurationFactory.eINSTANCE.createAxisManagerRepresentation();
+ }
+
+ /**
+ * This allows to calculate the buttons availability (remove button musn't be enabled when there is no selection).
+ *
+ * @param selection
+ * The current table viewer selection.
+ */
+ protected void recalculateButtonsAvailability(final ISelection selection) {
+ removeAxisManagerRepresentation.setEnabled(null != selection && !selection.isEmpty());
+ }
+
+ /**
+ * This allows to define other composite in the container.
+ *
+ * @param parent
+ * the parent composite.
+ */
+ public void createMoreComposite(final Composite parent) {
+ // Do nothing here
+ }
+
+ /**
+ * This allows to create the table viewer and its columns.
+ *
+ * @param parent
+ * The parent composite.
+ * @return The created table viewer.
+ */
+ protected TableViewer createAxisManagersTableViewer(final Composite parent) {
+
+ final TableViewer tableViewer = new TableViewer(parent, (SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER));
+
+ // Create the columns
+ createAxisManagersColumns(tableViewer);
+
+ // Manage some table display
+ final Table table = tableViewer.getTable();
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ // The content provider of the initial selection
+ tableViewer.setContentProvider(new ArrayContentProvider());
+
+ // Define the table input
+ tableViewer.setInput(headerAxisConfiguration.getAxisManagers());
+
+ // define layout for the viewer
+ tableViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ tableViewer.refresh();
+ return tableViewer;
+ }
+
+ /**
+ * This allows to create the table viewer columns.
+ *
+ * @param tableViewer
+ * The table viewer.
+ */
+ protected abstract void createAxisManagersColumns(final TableViewer tableViewer);
+
+ /**
+ * This allows to create the table viewer and its columns.
+ *
+ * @param parent
+ * The parent composite.
+ * @return The created table viewer.
+ */
+ protected TableViewer createLabelProviderConfigurationsTableViewer(final Composite parent) {
+ final TableViewer tableViewer = new TableViewer(parent, (SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER));
+
+ // Create the columns
+ createLabelProviderConfigurationsColumns(tableViewer);
+
+ // Manage some table display
+ final Table table = tableViewer.getTable();
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ // The content provider of the initial selection
+ tableViewer.setContentProvider(new ArrayContentProvider());
+
+ // Define the table input
+ tableViewer.setInput(headerAxisConfiguration.getOwnedLabelConfigurations());
+
+ // define layout for the viewer
+ tableViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
+
+ tableViewer.refresh();
+ return tableViewer;
+ }
+
+ /**
+ * This allows to create the table viewer columns.
+ *
+ * @param tableViewer
+ * The table viewer.
+ */
+ protected void createLabelProviderConfigurationsColumns(final TableViewer tableViewer) {
+ final Table table = tableViewer.getTable();
+
+ // Define the titles and bounds of each columns
+ final int[] bounds = { 200, 125, 125, 125, 125, 125, 125 };
+ final String[] titles = { Messages.AbstractAxisConfigurationWizardPage_labelProviderConfigurationColumnLabel, Messages.AbstractAxisConfigurationWizardPage_displayIconColumnLabel, Messages.AbstractAxisConfigurationWizardPage_displayLabelColumnLabel,
+ Messages.AbstractAxisConfigurationWizardPage_displayNameColumnLabel, Messages.AbstractAxisConfigurationWizardPage_displayTypeColumnLabel, Messages.AbstractAxisConfigurationWizardPage_displayMultiplicityColumnLabel,
+ Messages.AbstractAxisConfigurationWizardPage_displayIsDerivedColumnLabel };
+
+ // Create the first column for the axis manager id
+ final TableViewerColumn labelProviderConfigurationColumn = createTableViewerColumn(tableViewer, titles[0], bounds[0]);
+ final ColumnLabelProvider axisManagerIdLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ String value = ""; //$NON-NLS-1$
+ if (element instanceof ILabelProviderConfiguration) {
+ final String className = element.getClass().getSimpleName();
+ if (NameSimplifier.labelProviderConfigurationNames.containsKey(className)) {
+ value = NameSimplifier.labelProviderConfigurationNames.get(className);
+ }
+ }
+ return value;
+ }
+ };
+ labelProviderConfigurationColumn.setLabelProvider(axisManagerIdLabelProvider);
+
+ final ColumnLabelProvider nullLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ return null;
+ }
+ };
+
+ // Create the column for the display icon value
+ final TableViewerColumn displayIconColumn = createTableViewerColumn(tableViewer, titles[1], bounds[1]);
+ displayIconColumn.setLabelProvider(nullLabelProvider);
+ // Create the check box cell editor
+ displayIconColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, nullLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof ObjectLabelProviderConfiguration) {
+ ((ObjectLabelProviderConfiguration) element).setDisplayIcon((Boolean) value);
+ } else if (element instanceof FeatureLabelProviderConfiguration) {
+ ((FeatureLabelProviderConfiguration) element).setDisplayIcon((Boolean) value);
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ ((OperationLabelProviderConfiguration) element).setDisplayIcon((Boolean) value);
+ }
+ }
+
+ @Override
+ protected Object getValue(Object element) {
+ return isDisplayIcon(element);
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new CheckboxCellEditor(table, SWT.CHECK | SWT.READ_ONLY);
+ }
+ });
+
+ // Create the column for the display label value
+ final TableViewerColumn displayLabelColumn = createTableViewerColumn(tableViewer, titles[2], bounds[2]);
+ displayLabelColumn.setLabelProvider(nullLabelProvider);
+ // Create the check box cell editor
+ displayLabelColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, nullLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof ObjectLabelProviderConfiguration) {
+ ((ObjectLabelProviderConfiguration) element).setDisplayLabel((Boolean) value);
+ } else if (element instanceof FeatureLabelProviderConfiguration) {
+ ((FeatureLabelProviderConfiguration) element).setDisplayLabel((Boolean) value);
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ ((OperationLabelProviderConfiguration) element).setDisplayLabel((Boolean) value);
+ }
+ }
+
+ @Override
+ protected Object getValue(Object element) {
+ return isDisplayLabel(element);
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new CheckboxCellEditor(table, SWT.CHECK | SWT.READ_ONLY);
+ }
+ });
+
+ // Create the column for the display name value
+ final TableViewerColumn displayNameColumn = createTableViewerColumn(tableViewer, titles[3], bounds[3]);
+ displayNameColumn.setLabelProvider(nullLabelProvider);
+ // Create the check box cell editor
+ displayNameColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, nullLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ ((FeatureLabelProviderConfiguration) element).setDisplayName((Boolean) value);
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ ((OperationLabelProviderConfiguration) element).setDisplayName((Boolean) value);
+ }
+ }
+
+ @Override
+ protected Object getValue(Object element) {
+ return isDisplayName(element);
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new CheckboxCellEditor(table, SWT.CHECK | SWT.READ_ONLY);
+ }
+
+ @Override
+ protected boolean canEdit(Object element) {
+ return element instanceof FeatureLabelProviderConfiguration || element instanceof OperationLabelProviderConfiguration;
+ }
+ });
+
+ // Create the column for the display type value
+ final TableViewerColumn displayTypeColumn = createTableViewerColumn(tableViewer, titles[4], bounds[4]);
+ displayTypeColumn.setLabelProvider(nullLabelProvider);
+ // Create the check box cell editor
+ displayTypeColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, nullLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ ((FeatureLabelProviderConfiguration) element).setDisplayType((Boolean) value);
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ ((OperationLabelProviderConfiguration) element).setDisplayType((Boolean) value);
+ }
+ }
+
+ @Override
+ protected Object getValue(Object element) {
+ return isDisplayType(element);
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new CheckboxCellEditor(table, SWT.CHECK | SWT.READ_ONLY);
+ }
+
+ @Override
+ protected boolean canEdit(Object element) {
+ return element instanceof FeatureLabelProviderConfiguration || element instanceof OperationLabelProviderConfiguration;
+ }
+ });
+
+ // Create the column for the display multiplicity value
+ final TableViewerColumn displayMultiplicityColumn = createTableViewerColumn(tableViewer, titles[5], bounds[5]);
+ displayMultiplicityColumn.setLabelProvider(nullLabelProvider);
+ // Create the check box cell editor
+ displayMultiplicityColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, nullLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ ((FeatureLabelProviderConfiguration) element).setDisplayMultiplicity((Boolean) value);
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ ((OperationLabelProviderConfiguration) element).setDisplayMultiplicity((Boolean) value);
+ }
+ }
+
+ @Override
+ protected Object getValue(Object element) {
+ return isDisplayMultiplicity(element);
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new CheckboxCellEditor(table, SWT.CHECK | SWT.READ_ONLY);
+ }
+
+ @Override
+ protected boolean canEdit(Object element) {
+ return element instanceof FeatureLabelProviderConfiguration || element instanceof OperationLabelProviderConfiguration;
+ }
+ });
+
+ // Create the column for the display is derived value
+ final TableViewerColumn displayIsDerivedColumn = createTableViewerColumn(tableViewer, titles[6], bounds[6]);
+ displayIsDerivedColumn.setLabelProvider(nullLabelProvider);
+ // Create the check box cell editor
+ displayIsDerivedColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, nullLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ ((FeatureLabelProviderConfiguration) element).setDisplayIsDerived((Boolean) value);
+ }
+ }
+
+ @Override
+ protected Object getValue(Object element) {
+ return isDisplayIsDerived(element);
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new CheckboxCellEditor(table, SWT.CHECK | SWT.READ_ONLY);
+ }
+
+ @Override
+ protected boolean canEdit(Object element) {
+ return element instanceof FeatureLabelProviderConfiguration;
+ }
+ });
+
+ // Redefine the paint item listener to manage custom display in tree table
+ table.addListener(SWT.PaintItem, new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+ if (event.index > 0) {
+ Item item = (Item) event.item;
+ Image trailingImage = null;
+
+ Object value = null;
+
+ switch (event.index) {
+ case 1:
+ value = isDisplayIcon(item.getData());
+ break;
+ case 2:
+ value = isDisplayLabel(item.getData());
+ break;
+ case 3:
+ value = isDisplayName(item.getData());
+ break;
+ case 4:
+ value = isDisplayType(item.getData());
+ break;
+ case 5:
+ value = isDisplayMultiplicity(item.getData());
+ break;
+ case 6:
+ value = isDisplayIsDerived(item.getData());
+ break;
+ default:
+ break;
+ }
+
+ if (value instanceof Boolean) {
+ trailingImage = (Boolean) value ? NattableConfigurationConstants.CHECKED : NattableConfigurationConstants.UNCHECKED;
+ }
+
+ if (null != trailingImage) {
+ // Calculate the center position
+ int itemWidth = table.getColumn(event.index).getWidth();
+ int imageWidth = trailingImage.getBounds().width;
+ int x = event.x + (itemWidth - imageWidth) / 2;
+ int itemHeight = table.getItemHeight();
+ int imageHeight = trailingImage.getBounds().height;
+ int y = event.y + (itemHeight - imageHeight) / 2;
+
+ // Draw the image
+ event.gc.drawImage(trailingImage, x, y);
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * Get the display icon value of the element.
+ *
+ * @param element
+ * The element.
+ * @return Boolean value or <code>null</code>.
+ */
+ protected Object isDisplayIcon(final Object element) {
+ Object result = null;
+ if (element instanceof ObjectLabelProviderConfiguration) {
+ result = ((ObjectLabelProviderConfiguration) element).isDisplayIcon();
+ } else if (element instanceof FeatureLabelProviderConfiguration) {
+ result = ((FeatureLabelProviderConfiguration) element).isDisplayIcon();
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ result = ((OperationLabelProviderConfiguration) element).isDisplayIcon();
+ }
+ return result;
+ }
+
+ /**
+ * Get the display label value of the element.
+ *
+ * @param element
+ * The element.
+ * @return Boolean value or <code>null</code>.
+ */
+ protected Object isDisplayLabel(final Object element) {
+ Object result = null;
+ if (element instanceof ObjectLabelProviderConfiguration) {
+ result = ((ObjectLabelProviderConfiguration) element).isDisplayLabel();
+ } else if (element instanceof FeatureLabelProviderConfiguration) {
+ result = ((FeatureLabelProviderConfiguration) element).isDisplayLabel();
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ result = ((OperationLabelProviderConfiguration) element).isDisplayLabel();
+ }
+ return result;
+ }
+
+ /**
+ * Get the display name value of the element.
+ *
+ * @param element
+ * The element.
+ * @return Boolean value or <code>null</code>.
+ */
+ protected Object isDisplayName(final Object element) {
+ Object result = null;
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ result = ((FeatureLabelProviderConfiguration) element).isDisplayName();
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ result = ((OperationLabelProviderConfiguration) element).isDisplayName();
+ }
+ return result;
+ }
+
+ /**
+ * Get the display type value of the element.
+ *
+ * @param element
+ * The element.
+ * @return Boolean value or <code>null</code>.
+ */
+ protected Object isDisplayType(final Object element) {
+ Object result = null;
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ result = ((FeatureLabelProviderConfiguration) element).isDisplayType();
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ result = ((OperationLabelProviderConfiguration) element).isDisplayType();
+ }
+ return result;
+ }
+
+ /**
+ * Get the display multiplicity value of the element.
+ *
+ * @param element
+ * The element.
+ * @return Boolean value or <code>null</code>.
+ */
+ protected Object isDisplayMultiplicity(final Object element) {
+ Object result = null;
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ result = ((FeatureLabelProviderConfiguration) element).isDisplayMultiplicity();
+ } else if (element instanceof OperationLabelProviderConfiguration) {
+ result = ((OperationLabelProviderConfiguration) element).isDisplayMultiplicity();
+ }
+ return result;
+ }
+
+ /**
+ * Get the display isDerived value of the element.
+ *
+ * @param element
+ * The element.
+ * @return Boolean value or <code>null</code>.
+ */
+ protected Object isDisplayIsDerived(final Object element) {
+ Object result = null;
+ if (element instanceof FeatureLabelProviderConfiguration) {
+ result = ((FeatureLabelProviderConfiguration) element).isDisplayIsDerived();
+ }
+ return result;
+ }
+
+ /**
+ * This allows to create and return a table viewer column.
+ *
+ * @param tableViewer
+ * The parent table viewer of the column to create.
+ * @param title
+ * The title of the column to create.
+ * @param width
+ * The width of the column to create.
+ * @return The created viewer column.
+ */
+ protected TableViewerColumn createTableViewerColumn(final TableViewer tableViewer, final String title, final int width) {
+ final TableViewerColumn viewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
+ final TableColumn column = viewerColumn.getColumn();
+ column.setText(title);
+ column.setWidth(width);
+ column.setResizable(true);
+ column.setMoveable(true);
+ return viewerColumn;
+ }
+
+ /**
+ * Create the list of axis manager identifiers (managing the simple axis manager name and the others with the full identifier).
+ *
+ * @param requiredProposedAxisManagers
+ * The required axis managers.
+ * @param knownAxisCollection
+ * The axis managers registered in the plugins extension.
+ * @return The list of axis manager identifiers.
+ */
+ protected List<String> createAxisManagerIdItems(final List<String> requiredProposedAxisManagers, final Collection<String> knownAxisCollection) {
+ final List<String> input = new ArrayList<String>();
+
+ // Add the simple axis manager identifier
+ for (final String requiredAxisManager : requiredProposedAxisManagers) {
+ input.add(requiredAxisManager);
+ }
+
+ // Add the axis manager identifiers from the registered axis managers
+ for (final String knownAxis : knownAxisCollection) {
+
+ // The known axis will be added only if
+ // - the input list does not contain the known axis
+ // - and there is no added axis which contains the known axis
+ // For example if "EMF Feature (org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager)" is already in the input list,
+ // "org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager" will not be added
+ if (!input.contains(knownAxis)) {
+ boolean isKnownAxisAdded = false;
+
+ for (final String addedAxis : input) {
+ if (addedAxis.contains(knownAxis)) {
+ isKnownAxisAdded = true;
+ break;
+ }
+ }
+
+ if (!isKnownAxisAdded) {
+ input.add(knownAxis);
+ }
+ }
+ }
+
+ return input;
+ }
+
+ /**
+ * This allows to manage the label provider configuration (create, get and/or remove) and set it to the current axis manager representation in parameter.
+ *
+ * @param axisManagerRepresentation
+ * The current axis manager representation.
+ */
+ protected void manageLabelProviderConfiguration(final AxisManagerRepresentation axisManagerRepresentation) {
+ final String axisManagerId = axisManagerRepresentation.getAxisManagerId();
+
+ if (null != axisManagerId && !axisManagerId.isEmpty()) {
+ // No label provider configuration is affected to the axis manager representation, create or get an existing and set it to the representation
+ if (null == axisManagerRepresentation.getHeaderLabelConfiguration()) {
+ // set the new label provider configuration
+ axisManagerRepresentation.setHeaderLabelConfiguration(createLabelProviderConfiguration(axisManagerId));
+ } else {
+ final ILabelProviderConfiguration existingLabelProviderConfiguration = axisManagerRepresentation.getHeaderLabelConfiguration();
+ final String typeOfLabelProviderConfiguration = getTypeOfLabelProviderConfiguration(axisManagerId);
+
+ // Check if it needs to set a new label provider configuration depending to the current label provider configuration type
+ if (!existingLabelProviderConfiguration.getClass().getSimpleName().equals(typeOfLabelProviderConfiguration)) {
+ // Remove the current label provider configuration
+ removeLabelProviderConfiguration(existingLabelProviderConfiguration, axisManagerRepresentation);
+ // Set it the new one
+ axisManagerRepresentation.setHeaderLabelConfiguration(createLabelProviderConfiguration(axisManagerId));
+ }
+ }
+ }
+ }
+
+ /**
+ * This allows to create (or get if already existing) the label provider configuration corresponding to the axis manager identifier.
+ *
+ * @param axisManagerId
+ * The axis manager identifier.
+ * @return The created (or gotten) label provider configuration.
+ */
+ protected ILabelProviderConfiguration createLabelProviderConfiguration(final String axisManagerId) {
+ ILabelProviderConfiguration createdLabelProviderConfiguration = null;
+
+ final String typeOfLabelProviderConfiguration = getTypeOfLabelProviderConfiguration(axisManagerId);
+
+ // Try to check if a label provider configuration with the same type is already existing
+ final Iterator<ILabelProviderConfiguration> existingLabelProviderConfigurationsIterator = headerAxisConfiguration.getOwnedLabelConfigurations().iterator();
+ while (existingLabelProviderConfigurationsIterator.hasNext() && null == createdLabelProviderConfiguration) {
+ final ILabelProviderConfiguration existingLabelProviderConfiguration = existingLabelProviderConfigurationsIterator.next();
+ if (existingLabelProviderConfiguration.getClass().getSimpleName().equals(typeOfLabelProviderConfiguration)) {
+ createdLabelProviderConfiguration = existingLabelProviderConfiguration;
+ }
+ }
+
+ // No label provider configuration with the same type that needed exists, so create it corresponding to the needed type
+ if (null == createdLabelProviderConfiguration) {
+ if (FeatureLabelProviderConfigurationImpl.class.getSimpleName().equals(typeOfLabelProviderConfiguration)) {
+ createdLabelProviderConfiguration = NattablelabelproviderFactory.eINSTANCE.createFeatureLabelProviderConfiguration();
+ } else if (OperationLabelProviderConfigurationImpl.class.getSimpleName().equals(typeOfLabelProviderConfiguration)) {
+ createdLabelProviderConfiguration = NattablelabelproviderFactory.eINSTANCE.createOperationLabelProviderConfiguration();
+ } else {
+ createdLabelProviderConfiguration = NattablelabelproviderFactory.eINSTANCE.createObjectLabelProviderConfiguration();
+ }
+
+ // Add the label provider configuration to the header axis configuration
+ headerAxisConfiguration.getOwnedLabelConfigurations().add(createdLabelProviderConfiguration);
+
+ labelProviderConfigurationTableViewer.refresh();
+ }
+
+ return createdLabelProviderConfiguration;
+ }
+
+ /**
+ * This allows to remove the label provider configuration from the header axis configuration when it is not always used.
+ *
+ * @param labelProviderConfiguration
+ * The label provider configuration to remove.
+ * @param currentRepresentation
+ * The current axis manager representation.
+ */
+ protected void removeLabelProviderConfiguration(final ILabelProviderConfiguration labelProviderConfiguration, final AxisManagerRepresentation currentRepresentation) {
+ if (null != labelProviderConfiguration) {
+ boolean canBeRemoved = true;
+
+ // check if the label provider configuration is not used in another axis manager representation
+ final Iterator<AxisManagerRepresentation> axisManagerIterator = headerAxisConfiguration.getAxisManagers().iterator();
+ while (axisManagerIterator.hasNext() && canBeRemoved) {
+ final AxisManagerRepresentation axisManager = axisManagerIterator.next();
+ if (!axisManager.equals(currentRepresentation)) {
+ canBeRemoved = !labelProviderConfiguration.equals(axisManager.getHeaderLabelConfiguration());
+ }
+ }
+
+ // The label provider configuration to remove is not used in another axis manager representation, so remove it from the header axis configuration
+ if (canBeRemoved) {
+ headerAxisConfiguration.getOwnedLabelConfigurations().remove(labelProviderConfiguration);
+
+ labelProviderConfigurationTableViewer.refresh();
+ }
+ }
+ }
+
+ /**
+ * Get the label provider configuration class name corresponding to the axis manager.
+ *
+ * @param axisManagerId
+ * The axis manager identifier.
+ * @return The label provider configuration class name corresponding to the axis manager.
+ */
+ protected String getTypeOfLabelProviderConfiguration(final String axisManagerId) {
+ // By default, we need to set the object label provider configuration
+ String result = ObjectLabelProviderConfigurationImpl.class.getSimpleName();
+ if (NameSimplifier.labelProviderConfigurationByAxisManager.containsKey(axisManagerId)) {
+ result = NameSimplifier.labelProviderConfigurationByAxisManager.get(axisManagerId);
+ }
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
+ */
+ @Override
+ public boolean isPageComplete() {
+ boolean isComplete = true;
+
+ // The axis manager representation have to be filled
+ final Iterator<AxisManagerRepresentation> axisManagerIterator = headerAxisConfiguration.getAxisManagers().iterator();
+ while (axisManagerIterator.hasNext() && isComplete) {
+ final AxisManagerRepresentation axisManager = axisManagerIterator.next();
+ isComplete = null != axisManager.getAxisManagerId() && !axisManager.getAxisManagerId().isEmpty()
+ && null != axisManager.getLabelProviderContext() && !axisManager.getLabelProviderContext().isEmpty()
+ && null != axisManager.getHeaderLabelConfiguration();
+ }
+
+ return isComplete;
+ }
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractTableConfigurationWizardPage.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractTableConfigurationWizardPage.java
new file mode 100644
index 00000000000..4940dbdd707
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/AbstractTableConfigurationWizardPage.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.pages;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+
+/**
+ * The abstract wizard page for the table configuration.
+ */
+public abstract class AbstractTableConfigurationWizardPage extends WizardPage {
+
+ /**
+ * The table configuration helper
+ */
+ protected final TableConfigurationHelper helper;
+
+ /**
+ * Constructor.
+ *
+ * @param pageName
+ * The page name.
+ * @param helper
+ * The table configuration helper.
+ */
+ public AbstractTableConfigurationWizardPage(final String pageName, final TableConfigurationHelper helper) {
+ super(pageName, pageName, null);
+ this.helper = helper;
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/ColumnConfigurationWizardPage.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/ColumnConfigurationWizardPage.java
new file mode 100644
index 00000000000..cebd62382f5
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/ColumnConfigurationWizardPage.java
@@ -0,0 +1,240 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.pages;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.common.ui.celleditor.ExtendedComboBoxCellEditor;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NameSimplifier;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationEditingSupport;
+import org.eclipse.papyrus.infra.nattable.manager.axis.AxisManagerFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.widgets.Table;
+
+/**
+ * The column axis header configuration wizard page which allow to define the axis managers, the label provider configurations (hidden for user).
+ */
+public class ColumnConfigurationWizardPage extends AbstractAxisConfigurationWizardPage {
+
+ /**
+ * The axis manager proposed to the user(even if the registered axis managers in plugins are not correctly managed).
+ */
+ protected static final List<String> requiredProposedAxisManagers = new ArrayList<String>();
+
+ /**
+ * The label provider context proposed to the user(even if the registered axis managers in plugins are not correctly managed).
+ */
+ protected static final List<String> requiredProposedLabelProviderContexts = new ArrayList<String>();
+
+ /**
+ * Initialize the previous map.
+ */
+ static {
+ requiredProposedAxisManagers.add("EMF Feature (org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("EMF Operation (org.eclipse.papyrus.infra.emf.nattable.operation.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("UML Element (org.eclipse.papyrus.uml.nattable.element.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("UML Feature (org.eclipse.papyrus.uml.nattable.feature.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("UML Operation (org.eclipse.papyrus.uml.nattable.operation.axis.manager)"); //$NON-NLS-1$
+
+ requiredProposedLabelProviderContexts.add("Header"); //$NON-NLS-1$
+ requiredProposedLabelProviderContexts.add("Header Feature"); //$NON-NLS-1$
+ requiredProposedLabelProviderContexts.add("Header Operation"); //$NON-NLS-1$
+ }
+
+
+ /**
+ * Constructor.
+ *
+ * @param helper
+ * The table configuration helper.
+ */
+ public ColumnConfigurationWizardPage(final TableConfigurationHelper helper) {
+ super(Messages.ColumnConfigurationWizardPage_pageName, helper);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.AbstractAxisConfigurationWizardPage#getHeaderAxisConfiguration()
+ */
+ @Override
+ public TableHeaderAxisConfiguration getHeaderAxisConfiguration() {
+ return helper.getTableConfiguration().getColumnHeaderAxisConfiguration();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.AbstractAxisConfigurationWizardPage#createAxisManagerRepresentation()
+ */
+ @Override
+ public AxisManagerRepresentation createAxisManagerRepresentation() {
+ final AxisManagerRepresentation createdRepresentation = super.createAxisManagerRepresentation();
+ createdRepresentation.setAxisManagerId("org.eclipse.papyrus.uml.nattable.element.axis.manager"); //$NON-NLS-1$
+
+ // Manage the label provider configuration and the label provider context depending to the axis manager
+ manageLabelProviderConfiguration(createdRepresentation);
+ manageCorrespondenceAxisManagerAndContext(createdRepresentation);
+
+ return createdRepresentation;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.AbstractAxisConfigurationWizardPage#createColumns(org.eclipse.jface.viewers.TableViewer)
+ */
+ @Override
+ protected void createAxisManagersColumns(final TableViewer tableViewer) {
+
+ final Table table = tableViewer.getTable();
+ final Collection<String> knownAxis = AxisManagerFactory.INSTANCE.getAllRegisteredAxisManager().keySet();
+
+ // Define the titles and bounds of each columns
+ final int[] bounds = { 500, 500 };
+ final String[] titles = { Messages.ConfigurationWizardPage_axisManagerIdColumnName, Messages.ConfigurationWizardPage_labelProviderContextColumnName };
+
+ // Create the first column for the axis manager id
+ final TableViewerColumn axisManagerIdColumn = createTableViewerColumn(tableViewer, titles[0], bounds[0]);
+ final ColumnLabelProvider axisManagerIdLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ final StringBuilder value = new StringBuilder();
+ if (element instanceof AxisManagerRepresentation) {
+ final String axisManagerId = ((AxisManagerRepresentation) element).getAxisManagerId();
+ boolean axisManagerFound = NameSimplifier.axisManagerNames.containsKey(axisManagerId);
+ if (axisManagerFound) {
+ value.append(NameSimplifier.axisManagerNames.get(axisManagerId));
+ } else {
+ value.append(null != axisManagerId ? axisManagerId : ""); //$NON-NLS-1$
+ }
+ }
+ return value.toString();
+ }
+ };
+ axisManagerIdColumn.setLabelProvider(axisManagerIdLabelProvider);
+ // Create the combo box of the axis manager identifier
+ axisManagerIdColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, axisManagerIdLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof AxisManagerRepresentation) {
+ // set the new value
+ if (NameSimplifier.axisManagerNames.containsValue(value)) {
+ for (final Entry<String, String> entry : NameSimplifier.axisManagerNames.entrySet()) {
+ if (((String) value).contains(entry.getValue()) && ((String) value).contains(entry.getKey())) {
+ ((AxisManagerRepresentation) element).setAxisManagerId(entry.getKey());
+ }
+ }
+ } else {
+ ((AxisManagerRepresentation) element).setAxisManagerId((String) value);
+ }
+
+ // Manage the label provider configuration and the label provider context depending to the axis manager
+ manageLabelProviderConfiguration((AxisManagerRepresentation) element);
+ manageCorrespondenceAxisManagerAndContext((AxisManagerRepresentation) element);
+
+ tableViewer.refresh();
+ setPageComplete(isPageComplete());
+ }
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new ExtendedComboBoxCellEditor(table, createAxisManagerIdItems(requiredProposedAxisManagers, knownAxis), new LabelProvider(), SWT.NONE) {
+
+ @Override
+ public Object doGetValue() {
+ // Redefine this to allow other value than the proposed ones from the combo
+ if (getControl() instanceof CCombo) {
+ return ((CCombo) getControl()).getText();
+ }
+ return super.doGetValue();
+ }
+ };
+ }
+ });
+
+ // Create the second column for the label provider context
+ final TableViewerColumn labelProviderContextColumn = createTableViewerColumn(tableViewer, titles[1], bounds[1]);
+ final ColumnLabelProvider labelProviderContextLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ String result = ""; //$NON-NLS-1$
+ if (element instanceof AxisManagerRepresentation) {
+ if (NameSimplifier.labelProviderContextNames.containsKey(((AxisManagerRepresentation) element).getLabelProviderContext())) {
+ result = NameSimplifier.labelProviderContextNames.get(((AxisManagerRepresentation) element).getLabelProviderContext());
+ } else {
+ result = ((AxisManagerRepresentation) element).getLabelProviderContext();
+ }
+ }
+ return result;
+ }
+ };
+ labelProviderContextColumn.setLabelProvider(labelProviderContextLabelProvider);
+ // Create the combo box of the label provider contexts
+ labelProviderContextColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, labelProviderContextLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof AxisManagerRepresentation) {
+ // set the new value
+ if (NameSimplifier.labelProviderContextNames.containsValue(value)) {
+
+ for (final Entry<String, String> entry : NameSimplifier.labelProviderContextNames.entrySet()) {
+ if (entry.getValue().equals(value)) {
+ ((AxisManagerRepresentation) element).setLabelProviderContext(entry.getKey());
+ }
+ }
+
+ tableViewer.refresh();
+ setPageComplete(isPageComplete());
+ }
+ }
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new ExtendedComboBoxCellEditor(table, requiredProposedLabelProviderContexts, new LabelProvider(), SWT.NONE);
+ }
+ });
+ }
+
+ /**
+ * This allows to change the label provider context corresponding to the axis manager id set.
+ *
+ * @param element
+ * The current axis manager representation.
+ */
+ protected void manageCorrespondenceAxisManagerAndContext(final AxisManagerRepresentation element) {
+ if (NameSimplifier.correspondenceAxisManagerAndContext.containsKey(element.getAxisManagerId())) {
+ element.setLabelProviderContext(NameSimplifier.correspondenceAxisManagerAndContext.get(element.getAxisManagerId()));
+ }
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java
new file mode 100644
index 00000000000..29630976bac
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java
@@ -0,0 +1,838 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - Bug 493756
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.pages;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisIndexStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.AbstractAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.MasterObjectAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.SlaveObjectAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DisplayStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestyleFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.TableDisplayStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.JavaTableTester;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.NattabletesterFactory;
+import org.eclipse.papyrus.infra.widgets.editors.BrowseFileEditor;
+import org.eclipse.papyrus.infra.widgets.providers.FileExtensions;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * This page allows to edit the name, type and icon of a table
+ */
+public class EditGenericNattableConfigurationFieldsNattableWizardPage extends AbstractTableConfigurationWizardPage {
+
+ /**
+ * The current configuration to modify.
+ */
+ private final TableConfiguration configuration;
+
+ /**
+ * Constructor.
+ *
+ * @param helper
+ * The table configuration helper.
+ */
+ public EditGenericNattableConfigurationFieldsNattableWizardPage(final TableConfigurationHelper helper) {
+ super(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_pageName, helper);
+ configuration = helper.getTableConfiguration();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(final Composite parent) {
+ setPageComplete(isPageComplete());
+ final Composite container = new Composite(parent, SWT.BORDER);
+ container.setLayout(new GridLayout(1, false));
+ container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ // Create the table group and its grid data
+ final Group tableGroup = new Group(container, SWT.NONE);
+ tableGroup.setLayout(new GridLayout(2, false));
+ tableGroup.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_tableConfigurationLabel);
+ final GridData tableGroupData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
+ tableGroupData.horizontalSpan = 2;
+ tableGroup.setLayoutData(tableGroupData);
+
+ // Create the default name text of the table
+ final Label labelDefaultName = new Label(tableGroup, SWT.NONE);
+ labelDefaultName.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_defaultTableNameLabel);
+ labelDefaultName.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text defaultName = new Text(tableGroup, SWT.BORDER);
+ defaultName.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ if (!helper.getDefaultTableName().equals(defaultName.getText())) {
+ helper.setDefaultTableName(defaultName.getText());
+ }
+ setPageComplete(isPageComplete());
+ }
+ });
+ final GridData defaultNameLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ defaultNameLayoutData.minimumWidth = 200;
+ defaultName.setLayoutData(defaultNameLayoutData);
+
+ // Create the type text of the table
+ final Label labelType = new Label(tableGroup, SWT.NONE);
+ labelType.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_tableTypeLabel);
+ labelType.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text type = new Text(tableGroup, SWT.BORDER);
+ type.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ if (!helper.getTableType().equals(type.getText())) {
+ helper.setTableType(type.getText());
+ }
+ setPageComplete(isPageComplete());
+ }
+ });
+ final GridData typeLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ typeLayoutData.minimumWidth = 200;
+ type.setLayoutData(typeLayoutData);
+
+ // Create the description text of the table
+ final Label labelDescription = new Label(tableGroup, SWT.NONE);
+ labelDescription.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_descriptionLabel);
+ labelDescription.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text description = new Text(tableGroup, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
+ description.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ if (!helper.getTableConfigurationDescription().equals(description.getText())) {
+ helper.setTableConfigurationDescription(description.getText());
+ }
+ }
+ });
+ final GridData descriptionLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ descriptionLayoutData.minimumWidth = 400;
+ descriptionLayoutData.heightHint = 50;
+ description.setLayoutData(descriptionLayoutData);
+
+ // Create the icon browse editor for the icon of the table
+ final BrowseFileEditor iconEditor = new BrowseFileEditor(tableGroup, SWT.NONE);
+ iconEditor.setLabel(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_iconToUseLabel);
+ iconEditor.setAllowFileSystem(false);
+ iconEditor.setAllowWorkspace(true);
+
+ // Get file extensions
+ final Set<String> extensions = FileExtensions.imagesFilesExtensions.keySet();
+ String[] str1 = extensions.toArray(new String[extensions.size()]);
+
+ final Collection<String> extension2 = FileExtensions.imagesFilesExtensions.values();
+ String[] str2 = extension2.toArray(new String[extensions.size()]);
+
+ iconEditor.setFilters(str1, str2);
+
+ iconEditor.getText().setEnabled(false);
+ iconEditor.getText().addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ if (!configuration.getIconPath().equals(iconEditor.getText().getText())) {
+ helper.setTableIcon(iconEditor.getText().getText());
+ }
+ }
+ });
+ final GridData iconGridData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ iconGridData.horizontalSpan = 2;
+ iconEditor.setLayoutData(iconGridData);
+
+ // Create the combo for the table style (flat or tree)
+ final Label labelAxisKind = new Label(tableGroup, SWT.NONE);
+ labelAxisKind.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_axisKindLabel);
+ final Composite styleComposite = new Composite(tableGroup, SWT.NONE);
+ final GridLayout styleCompositeLayoutData = new GridLayout(2, false);
+ styleCompositeLayoutData.marginWidth = 0;
+ styleCompositeLayoutData.marginHeight = 0;
+ styleComposite.setLayout(styleCompositeLayoutData);
+ styleComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
+ final Combo axisKindCombo = new Combo(styleComposite, SWT.NONE);
+ final List<String> axisKindStyleList = new ArrayList<String>();
+ axisKindStyleList.add(TableConfigurationHelper.AXIS_FLAT_STYLE);
+ axisKindStyleList.add(TableConfigurationHelper.AXIS_TREE_STYLE);
+ axisKindCombo.setItems((String[]) axisKindStyleList.toArray(new String[axisKindStyleList.size()]));
+ final GridData axisKindLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ axisKindLayoutData.minimumWidth = 100;
+ axisKindCombo.setLayoutData(axisKindLayoutData);
+
+ // Create the combo for the column header style when this is a tree table
+ final Combo treeAxisStyleCombo = new Combo(styleComposite, SWT.NONE);
+ final List<String> treeAxisStyleList = new ArrayList<String>();
+ treeAxisStyleList.add("Single header column"); //$NON-NLS-1$
+ treeAxisStyleList.add("Multiple header column"); //$NON-NLS-1$
+ treeAxisStyleCombo.setItems((String[]) treeAxisStyleList.toArray(new String[treeAxisStyleList.size()]));
+ final GridData treeAxisStyleLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ treeAxisStyleLayoutData.minimumWidth = 200;
+ treeAxisStyleCombo.setLayoutData(treeAxisStyleLayoutData);
+ treeAxisStyleCombo.setVisible(false);
+
+ // Manage the modification of the axis kind combo
+ axisKindCombo.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ // if this is flat, remove the possible table display value and hide the tree axis display style combo
+ if (0 == axisKindCombo.getSelectionIndex()) {
+ treeAxisStyleCombo.setVisible(false);
+ TableDisplayStyle displayStyle = (TableDisplayStyle) configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ if (null != displayStyle) {
+ configuration.getStyles().remove(displayStyle);
+ }
+ } else {
+ // This is tree table, set visible the tree axis display style combo
+ treeAxisStyleCombo.setVisible(true);
+ treeAxisStyleCombo.select(0);
+ }
+ }
+ });
+
+ // Manage the modification of the tree axis display style combo
+ treeAxisStyleCombo.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ // Get the table display style (or create it if necessary)
+ TableDisplayStyle displayStyle = (TableDisplayStyle) configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ if (null == displayStyle) {
+ displayStyle = NattablestyleFactory.eINSTANCE.createTableDisplayStyle();
+ configuration.getStyles().add(displayStyle);
+ }
+
+ // Set the correct value
+ if (0 == treeAxisStyleCombo.getSelectionIndex()) {
+ displayStyle.setDisplayStyle(DisplayStyle.HIERARCHIC_SINGLE_TREE_COLUMN);
+ } else {
+ displayStyle.setDisplayStyle(DisplayStyle.HIERARCHIC_MULTI_TREE_COLUMN);
+ }
+ }
+ });
+
+ // Create the description text of the table
+ final Label labelJavaTableTester = new Label(tableGroup, SWT.NONE);
+ labelJavaTableTester.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_javaTableTesterLabel);
+ labelJavaTableTester.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text javaTableTester = new Text(tableGroup, SWT.BORDER);
+ javaTableTester.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ JavaTableTester tableTester = configuration.getCreationTester() instanceof JavaTableTester ? (JavaTableTester) configuration.getCreationTester() : null;
+
+ if (null == tableTester) {
+ tableTester = NattabletesterFactory.eINSTANCE.createJavaTableTester();
+ configuration.setCreationTester(tableTester);
+ }
+
+ tableTester.setTester(javaTableTester.getText());
+ }
+ });
+ final GridData javaTableTesterLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ javaTableTesterLayoutData.minimumWidth = 600;
+ javaTableTester.setLayoutData(javaTableTesterLayoutData);
+
+ // Initialize the fields
+ defaultName.setText(helper.getDefaultTableName());
+ type.setText(helper.getTableType());
+ description.setText(helper.getTableConfigurationDescription());
+ if (null != configuration.getIconPath()) {
+ iconEditor.getText().setText(configuration.getIconPath());
+ }
+ // Select the correct combo item corresponding to the current configuration
+ TableDisplayStyle displayStyle = (TableDisplayStyle) configuration.getStyle(NattablestylePackage.eINSTANCE.getTableDisplayStyle());
+ if (null != displayStyle) {
+ axisKindCombo.select(1);
+ if (DisplayStyle.HIERARCHIC_SINGLE_TREE_COLUMN.equals(displayStyle.getDisplayStyle())) {
+ treeAxisStyleCombo.select(0);
+ } else if (DisplayStyle.HIERARCHIC_MULTI_TREE_COLUMN.equals(displayStyle.getDisplayStyle())) {
+ treeAxisStyleCombo.select(1);
+ }
+ } else {
+ axisKindCombo.select(0);
+ }
+ if (configuration.getCreationTester() instanceof JavaTableTester) {
+ javaTableTester.setText(((JavaTableTester) configuration.getCreationTester()).getTester());
+ }
+
+ // Create the rows and columns groups
+ createRowsGroup(tableGroup);
+ createColumnsGroup(tableGroup);
+
+ // Create the master and slave groups
+ createMasterGroup(tableGroup);
+ createSlaveGroup(tableGroup);
+
+ setControl(container); // should be a container composite here!
+ }
+
+ /**
+ * This allows to create the rows group and its fields.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createRowsGroup(final Composite parent) {
+
+ // Create the rows composite
+ final Composite rowsGroup = createSection(parent, Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_rowsManagementLabel);
+ rowsGroup.setLayout(new GridLayout(4, false));
+
+ // Create the index style combo
+ final Label labelIndexStyle = new Label(rowsGroup, SWT.NONE);
+ labelIndexStyle.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_indexStyleLabel);
+ labelIndexStyle.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Combo rowsIndexStyleCombo = new Combo(rowsGroup, SWT.NONE);
+ final List<String> indexStyleList = new ArrayList<String>();
+ indexStyleList.add(AxisIndexStyle.ALPHABETIC.getName());
+ indexStyleList.add(AxisIndexStyle.NUMERIC.getName());
+ rowsIndexStyleCombo.setItems((String[]) indexStyleList.toArray(new String[indexStyleList.size()]));
+ final GridData rowsIndexStyleLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
+ rowsIndexStyleLayoutData.minimumWidth = 100;
+ rowsIndexStyleCombo.setLayoutData(rowsIndexStyleLayoutData);
+ rowsIndexStyleCombo.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ TableHeaderAxisConfiguration rowHeaderAxisConfiguration = configuration.getRowHeaderAxisConfiguration();
+ if (null == rowHeaderAxisConfiguration) {
+ rowHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setRowHeaderAxisConfiguration(rowHeaderAxisConfiguration);
+ }
+
+ if (0 == rowsIndexStyleCombo.getSelectionIndex()) {
+ rowHeaderAxisConfiguration.setIndexStyle(AxisIndexStyle.ALPHABETIC);
+ } else {
+ rowHeaderAxisConfiguration.setIndexStyle(AxisIndexStyle.NUMERIC);
+ }
+ }
+ });
+
+ // Create the display index checkbox
+ final Label displayIndexLabel = new Label(rowsGroup, SWT.NONE);
+ displayIndexLabel.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_displayIndexLabel);
+ displayIndexLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Button displayIndexButton = new Button(rowsGroup, SWT.CHECK);
+ displayIndexButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ displayIndexButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ TableHeaderAxisConfiguration rowHeaderAxisConfiguration = configuration.getRowHeaderAxisConfiguration();
+ if (null == rowHeaderAxisConfiguration) {
+ rowHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setRowHeaderAxisConfiguration(rowHeaderAxisConfiguration);
+ }
+
+ rowHeaderAxisConfiguration.setDisplayIndex(displayIndexButton.getSelection());
+ }
+ });
+
+ // Create the display label checkbox
+ final Label displayLabelLabel = new Label(rowsGroup, SWT.NONE);
+ displayLabelLabel.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_displayLabelLabel);
+ displayLabelLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Button displayLabelButton = new Button(rowsGroup, SWT.CHECK);
+ displayLabelButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ displayLabelButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ TableHeaderAxisConfiguration rowHeaderAxisConfiguration = configuration.getRowHeaderAxisConfiguration();
+ if (null == rowHeaderAxisConfiguration) {
+ rowHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setRowHeaderAxisConfiguration(rowHeaderAxisConfiguration);
+ }
+
+ rowHeaderAxisConfiguration.setDisplayLabel(displayLabelButton.getSelection());
+ }
+ });
+
+ // Create the display filter checkbox
+ final Label displayFilterLabel = new Label(rowsGroup, SWT.NONE);
+ displayFilterLabel.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_displayFilterLabel);
+ displayFilterLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Button displayFilterButton = new Button(rowsGroup, SWT.CHECK);
+ displayFilterButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ displayFilterButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ TableHeaderAxisConfiguration rowHeaderAxisConfiguration = configuration.getRowHeaderAxisConfiguration();
+ if (null == rowHeaderAxisConfiguration) {
+ rowHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setRowHeaderAxisConfiguration(rowHeaderAxisConfiguration);
+ }
+
+ rowHeaderAxisConfiguration.setDisplayFilter(displayFilterButton.getSelection());
+ }
+ });
+
+ // Initialize the fields
+ // Select the correct combo item corresponding to the current configuration
+ TableHeaderAxisConfiguration rowHeaderAxisConfiguration = configuration.getRowHeaderAxisConfiguration();
+ if (null != rowHeaderAxisConfiguration) {
+ if (AxisIndexStyle.ALPHABETIC.equals(rowHeaderAxisConfiguration.getIndexStyle())) {
+ rowsIndexStyleCombo.select(0);
+ } else {
+ rowsIndexStyleCombo.select(1);
+ }
+ displayFilterButton.setSelection(rowHeaderAxisConfiguration.isDisplayFilter());
+ displayIndexButton.setSelection(rowHeaderAxisConfiguration.isDisplayIndex());
+ displayLabelButton.setSelection(rowHeaderAxisConfiguration.isDisplayLabel());
+ } else {
+ rowsIndexStyleCombo.select(1);
+ displayFilterButton.setSelection(false);
+ displayIndexButton.setSelection(true);
+ displayLabelButton.setSelection(true);
+ }
+ }
+
+ /**
+ * This allows to create the columns group and its fields.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createColumnsGroup(final Composite parent) {
+
+ // Create the columns composite
+ final Composite columnsGroup = createSection(parent, Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_columnsManagementLabel);
+ columnsGroup.setLayout(new GridLayout(4, false));
+
+ // Create the index style combo
+ final Label labelIndexStyle = new Label(columnsGroup, SWT.NONE);
+ labelIndexStyle.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_indexStyleLabel);
+ labelIndexStyle.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Combo columnsIndexStyleCombo = new Combo(columnsGroup, SWT.NONE);
+ final List<String> indexStyleList = new ArrayList<String>();
+ indexStyleList.add(AxisIndexStyle.ALPHABETIC.getName());
+ indexStyleList.add(AxisIndexStyle.NUMERIC.getName());
+ columnsIndexStyleCombo.setItems((String[]) indexStyleList.toArray(new String[indexStyleList.size()]));
+ final GridData columnsIndexStyleLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
+ columnsIndexStyleLayoutData.minimumWidth = 100;
+ columnsIndexStyleCombo.setLayoutData(columnsIndexStyleLayoutData);
+ columnsIndexStyleCombo.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ TableHeaderAxisConfiguration columnHeaderAxisConfiguration = configuration.getColumnHeaderAxisConfiguration();
+ if (null == columnHeaderAxisConfiguration) {
+ columnHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setColumnHeaderAxisConfiguration(columnHeaderAxisConfiguration);
+ }
+
+ if (0 == columnsIndexStyleCombo.getSelectionIndex()) {
+ columnHeaderAxisConfiguration.setIndexStyle(AxisIndexStyle.ALPHABETIC);
+ } else {
+ columnHeaderAxisConfiguration.setIndexStyle(AxisIndexStyle.NUMERIC);
+ }
+ }
+ });
+
+ // Create the display index checkbox
+ final Label displayIndexLabel = new Label(columnsGroup, SWT.NONE);
+ displayIndexLabel.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_displayIndexLabel);
+ displayIndexLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Button displayIndexButton = new Button(columnsGroup, SWT.CHECK);
+ displayIndexButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ displayIndexButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ TableHeaderAxisConfiguration columnHeaderAxisConfiguration = configuration.getColumnHeaderAxisConfiguration();
+ if (null == columnHeaderAxisConfiguration) {
+ columnHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setColumnHeaderAxisConfiguration(columnHeaderAxisConfiguration);
+ }
+
+ columnHeaderAxisConfiguration.setDisplayIndex(displayIndexButton.getSelection());
+ }
+ });
+
+ // Create the display label checkbox
+ final Label displayLabelLabel = new Label(columnsGroup, SWT.NONE);
+ displayLabelLabel.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_displayLabelLabel);
+ displayLabelLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Button displayLabelButton = new Button(columnsGroup, SWT.CHECK);
+ displayLabelButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ displayLabelButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ TableHeaderAxisConfiguration columnHeaderAxisConfiguration = configuration.getColumnHeaderAxisConfiguration();
+ if (null == columnHeaderAxisConfiguration) {
+ columnHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setColumnHeaderAxisConfiguration(columnHeaderAxisConfiguration);
+ }
+
+ columnHeaderAxisConfiguration.setDisplayLabel(displayLabelButton.getSelection());
+ }
+ });
+
+ // Create the display filter checkbox
+ final Label displayFilterLabel = new Label(columnsGroup, SWT.NONE);
+ displayFilterLabel.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_displayFilterLabel);
+ displayFilterLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Button displayFilterButton = new Button(columnsGroup, SWT.CHECK);
+ displayFilterButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ displayFilterButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ TableHeaderAxisConfiguration columnHeaderAxisConfiguration = configuration.getColumnHeaderAxisConfiguration();
+ if (null == columnHeaderAxisConfiguration) {
+ columnHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setColumnHeaderAxisConfiguration(columnHeaderAxisConfiguration);
+ }
+
+ columnHeaderAxisConfiguration.setDisplayFilter(displayFilterButton.getSelection());
+ }
+ });
+
+ // Initialize the fields
+ // Select the correct combo item corresponding to the current configuration
+ TableHeaderAxisConfiguration columnHeaderAxisConfiguration = configuration.getColumnHeaderAxisConfiguration();
+ if (null != columnHeaderAxisConfiguration) {
+ if (AxisIndexStyle.NUMERIC.equals(columnHeaderAxisConfiguration.getIndexStyle())) {
+ columnsIndexStyleCombo.select(1);
+ } else {
+ columnsIndexStyleCombo.select(0);
+ }
+ displayFilterButton.setSelection(columnHeaderAxisConfiguration.isDisplayFilter());
+ displayIndexButton.setSelection(columnHeaderAxisConfiguration.isDisplayIndex());
+ displayLabelButton.setSelection(columnHeaderAxisConfiguration.isDisplayLabel());
+ } else {
+ columnsIndexStyleCombo.select(0);
+ displayFilterButton.setSelection(false);
+ displayIndexButton.setSelection(true);
+ displayLabelButton.setSelection(true);
+ }
+ }
+
+ /**
+ * This allows to create the master group and its fields.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createMasterGroup(final Composite parent) {
+
+ // Create the master group
+ final Composite masterGroup = createSection(parent, Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_masterLabel);
+ masterGroup.setLayout(new GridLayout(2, false));
+
+ // Create the name text of the master
+ final Label labelame = new Label(masterGroup, SWT.NONE);
+ labelame.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_nameLabel);
+ labelame.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text name = new Text(masterGroup, SWT.BORDER);
+ name.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ // Set the master name
+ getOrCreateMasterObjectAxisProvider(configuration).setName(name.getText());
+ }
+ });
+ final GridData nameLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ nameLayoutData.minimumWidth = 200;
+ name.setLayoutData(nameLayoutData);
+
+ // Create the description text of the master
+ final Label labelDescription = new Label(masterGroup, SWT.NONE);
+ labelDescription.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_descriptionLabel);
+ labelDescription.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text description = new Text(masterGroup, SWT.BORDER | SWT.MULTI);
+ description.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ // Set the master description
+ getOrCreateMasterObjectAxisProvider(configuration).setDescription(description.getText());
+ }
+ });
+ final GridData descriptionLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ descriptionLayoutData.minimumWidth = 400;
+ descriptionLayoutData.heightHint = 50;
+ description.setLayoutData(descriptionLayoutData);
+
+ // Create the disconnect slave checkbox for the master
+ final Label labelDisconnectSlave = new Label(masterGroup, SWT.NONE);
+ labelDisconnectSlave.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_disconnectSlaveLabel);
+ labelDisconnectSlave.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Button disconnectSlave = new Button(masterGroup, SWT.CHECK);
+ disconnectSlave.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(final SelectionEvent e) {
+ // Set the disconnect slave
+ getOrCreateMasterObjectAxisProvider(configuration).setDisconnectSlave(disconnectSlave.getSelection());
+ };
+ });
+
+ // Initialize the fields
+ MasterObjectAxisProvider master = getMasterObjectAxisProvider(configuration);
+ if (null != master) {
+ name.setText(master.getName());
+ description.setText(master.getDescription());
+ disconnectSlave.setSelection(master.isDisconnectSlave());
+ }
+ }
+
+ /**
+ * This allows to create the slave group and its fields.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createSlaveGroup(final Composite parent) {
+ // Create the slave group
+ final Composite slaveGroup = createSection(parent, Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_slaveLabel);
+ slaveGroup.setLayout(new GridLayout(2, false));
+
+ // Create the name text for the slave
+ final Label labelame = new Label(slaveGroup, SWT.NONE);
+ labelame.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_nameLabel);
+ labelame.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text name = new Text(slaveGroup, SWT.BORDER);
+ name.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ // Set the slave description
+ getOrCreateSlaveObjectAxisProvider(configuration).setName(name.getText());
+ }
+ });
+ final GridData nameLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ nameLayoutData.minimumWidth = 200;
+ name.setLayoutData(nameLayoutData);
+
+ // Create the description text for the slave
+ final Label labelDescription = new Label(slaveGroup, SWT.NONE);
+ labelDescription.setText(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_descriptionLabel);
+ labelDescription.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+ final Text description = new Text(slaveGroup, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
+ description.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(final ModifyEvent e) {
+ // Set the slave description
+ getOrCreateSlaveObjectAxisProvider(configuration).setDescription(description.getText());
+ }
+ });
+ final GridData descriptionLayoutData = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
+ descriptionLayoutData.minimumWidth = 400;
+ descriptionLayoutData.heightHint = 50;
+ description.setLayoutData(descriptionLayoutData);
+
+ // Initialize the fields
+ SlaveObjectAxisProvider slave = getSlaveObjectAxisProvider(configuration);
+ if (null != slave) {
+ name.setText(slave.getName());
+ description.setText(slave.getDescription());
+ }
+ }
+
+ /**
+ * This allows to create a section (which can be expand or collapse).
+ *
+ * @param parent
+ * The parent composite.
+ * @param sectionTitle
+ * The section title.
+ * @return The created section.
+ */
+ protected Composite createSection(final Composite parent, final String sectionTitle) {
+ // Create a section to manage a better user-friendly interface
+ final Section expandableCompoosite = new Section(parent, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT);
+ expandableCompoosite.setText(sectionTitle);
+ expandableCompoosite.setExpanded(true);
+ expandableCompoosite.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
+ expandableCompoosite.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2, 1));
+ expandableCompoosite.addExpansionListener(new ExpansionAdapter() {
+ @Override
+ public void expansionStateChanged(final ExpansionEvent e) {
+ expandableCompoosite.getParent().getParent().layout();
+ expandableCompoosite.getParent().getParent().redraw();
+ }
+ });
+
+ // Create the composite
+ final Composite composite = new Composite(expandableCompoosite, SWT.NONE);
+ expandableCompoosite.setClient(composite);
+
+ return composite;
+ }
+
+ /**
+ * This allows to get the master axis provider of the configuration.
+ *
+ * @param configuration
+ * The current configuration.
+ * @return The master axis provider or <code>null</code> if not existing.
+ */
+ protected MasterObjectAxisProvider getMasterObjectAxisProvider(final TableConfiguration configuration) {
+ MasterObjectAxisProvider master = null;
+
+ // Try to get an existing master axis provider
+ if (0 < configuration.getRowAxisProviders().size()) {
+ final Iterator<AbstractAxisProvider> rowAxisProvidersIterator = configuration.getRowAxisProviders().iterator();
+ while (rowAxisProvidersIterator.hasNext() && null == master) {
+ final AbstractAxisProvider axisProvider = rowAxisProvidersIterator.next();
+ if (axisProvider instanceof MasterObjectAxisProvider) {
+ master = (MasterObjectAxisProvider) axisProvider;
+ }
+ }
+ }
+
+ return master;
+ }
+
+ /**
+ * This allows to get the master axis provider of the configuration if existing or create it otherwise.
+ *
+ * @param configuration
+ * The current configuration.
+ * @return The got or created master axis provider.
+ */
+ protected MasterObjectAxisProvider getOrCreateMasterObjectAxisProvider(final TableConfiguration configuration) {
+ MasterObjectAxisProvider master = getMasterObjectAxisProvider(configuration);
+
+ // The master doesn't exist, create it
+ if (null == master) {
+ master = NattableaxisproviderFactory.eINSTANCE.createMasterObjectAxisProvider();
+ configuration.getRowAxisProviders().add(master);
+ }
+
+ // Set the master as default row axis provider if this is not already done
+ if (null == configuration.getDefaultRowAxisProvider()) {
+ configuration.setDefaultRowAxisProvider(master);
+ }
+
+ return master;
+ }
+
+ /**
+ * This allows to get the slave axis provider of the configuration.
+ *
+ * @param configuration
+ * The current configuration.
+ * @return The slave axis provider or <code>null</code> if not existing.
+ */
+ protected SlaveObjectAxisProvider getSlaveObjectAxisProvider(final TableConfiguration configuration) {
+ SlaveObjectAxisProvider slave = null;
+
+ // Try to get an existing master axis provider
+ if (0 < configuration.getRowAxisProviders().size()) {
+ final Iterator<AbstractAxisProvider> columnAxisProvidersIterator = configuration.getColumnAxisProviders().iterator();
+ while (columnAxisProvidersIterator.hasNext() && null == slave) {
+ final AbstractAxisProvider axisProvider = columnAxisProvidersIterator.next();
+ if (axisProvider instanceof SlaveObjectAxisProvider) {
+ slave = (SlaveObjectAxisProvider) axisProvider;
+ }
+ }
+ }
+
+ return slave;
+ }
+
+ /**
+ * This allows to get the slave axis provider of the configuration if existing or create it otherwise.
+ *
+ * @param configuration
+ * The current configuration.
+ * @return The got or created slave axis provider.
+ */
+ protected SlaveObjectAxisProvider getOrCreateSlaveObjectAxisProvider(final TableConfiguration configuration) {
+ SlaveObjectAxisProvider slave = getSlaveObjectAxisProvider(configuration);
+
+ // The master doesn't exist, create it
+ if (null == slave) {
+ slave = NattableaxisproviderFactory.eINSTANCE.createSlaveObjectAxisProvider();
+ configuration.getColumnAxisProviders().add(slave);
+ }
+
+ // Set the master as default row axis provider if this is not already done
+ if (null == configuration.getDefaultColumnAxisProvider()) {
+ configuration.setDefaultColumnAxisProvider(slave);
+ }
+
+ return slave;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
+ */
+ @Override
+ public boolean isPageComplete() {
+ boolean isComplete = true;
+ final String name = helper.getDefaultTableName();
+ final String type = helper.getTableType();
+ String errorMessage = null;
+ StringBuffer buffer = new StringBuffer();
+ if (name.isEmpty()) {
+ buffer.append(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_nameMustBeSetError);
+ }
+
+ if (type.isEmpty()) {
+ buffer.append(Messages.EditGenericNattableConfigurationFieldsNattableWizardPage_typeMustBeSetError);
+ }
+
+ errorMessage = buffer.toString();
+ if (errorMessage.isEmpty()) {
+ setErrorMessage(null);
+ } else {
+ setErrorMessage(errorMessage.toString());
+ }
+
+ isComplete = !name.isEmpty() && !type.isEmpty();
+ return isComplete;
+ }
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationFileCreationPage.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationFileCreationPage.java
new file mode 100644
index 00000000000..724197a3e1d
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationFileCreationPage.java
@@ -0,0 +1,122 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.pages;
+
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This page allows to edit the name of the Papyrus Table configuration to create.
+ */
+public class NattableConfigurationFileCreationPage extends EditGenericNattableConfigurationFieldsNattableWizardPage {
+ /**
+ * The nattable configuration file name text composite.
+ */
+ private Text nattableConfigurationFileName;
+
+ /**
+ * The file name modify listener.
+ */
+ private Listener fileNameModifyListener = new Listener() {
+
+ @Override
+ public void handleEvent(final Event e) {
+ setPageComplete(canFlipToNextPage());
+ }
+ };
+
+ /**
+ * Default constructor.
+ *
+ * @param helper
+ * The table configuration helper
+ */
+ public NattableConfigurationFileCreationPage(TableConfigurationHelper helper) {
+ super(helper);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(final Composite parent) {
+ Composite container = new Composite(parent, SWT.BORDER);
+ final GridLayout gridLayout = new GridLayout(1, false);
+ container.setLayout(gridLayout);
+ container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+ final Group group = createGroup(container, Messages.NattableConfigurationProjectCreationPage_nattableConfigurationFileNameLabel);
+ nattableConfigurationFileName = new Text(group, SWT.BORDER);
+ nattableConfigurationFileName.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ nattableConfigurationFileName.addListener(SWT.Modify, fileNameModifyListener);
+ super.createControl(container);
+ setControl(container);
+ }
+
+ /**
+ * Create a new group with the given name.
+ *
+ * @param parent
+ * The parent composite
+ * @param name
+ * The name of the group
+ * @return The created group
+ */
+ private static Group createGroup(final Composite parent, final String name) {
+ final Group group = new Group(parent, SWT.NONE);
+ group.setText(name);
+ final GridLayout layout = new GridLayout(1, true);
+ layout.marginHeight = 5;
+ layout.marginWidth = 5;
+ group.setLayout(layout);
+ final GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
+ group.setLayoutData(data);
+ return group;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.EditGenericNattableConfigurationFieldsNattableWizardPage#isPageComplete()
+ *
+ * @return <code>true</code> if the page is complete, <code>false</false> otherwise
+ */
+ @Override
+ public boolean isPageComplete() {
+ if (null != nattableConfigurationFileName) {
+ if ("".equals(nattableConfigurationFileName.getText())) { //$NON-NLS-1$
+ this.setErrorMessage("Set nattable configuration file name"); //$NON-NLS-1$
+ return false;
+ }
+ }
+
+ return super.isPageComplete();
+ }
+
+ /**
+ * @return The nattable configuration file name
+ */
+ public String getNattableConfigurationFileName() {
+ return nattableConfigurationFileName.getText();
+ }
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java
new file mode 100644
index 00000000000..feac88e3c95
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java
@@ -0,0 +1,563 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.pages;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.common.ui.celleditor.ExtendedComboBoxCellEditor;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.TreeColumnViewerLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.TreeViewerColumn;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.customization.nattableconfiguration.edition.FeatureFillingConfigurationDialog;
+import org.eclipse.papyrus.customization.nattableconfiguration.edition.PasteEObjectConfigurationDialog;
+import org.eclipse.papyrus.customization.nattableconfiguration.edition.TreeFillingConfigurationDialog;
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NameSimplifier;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationEditingSupport;
+import org.eclipse.papyrus.infra.nattable.manager.axis.AxisManagerFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EObjectAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EOperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EStructuralFeatureAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.provider.NattableaxisItemProviderAdapterFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.EStructuralFeatureValueFillingConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.IAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.PasteEObjectConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TreeFillingConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.provider.NattableaxisconfigurationItemProviderAdapterFactory;
+import org.eclipse.papyrus.infra.widgets.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+/**
+ * The row axis header configuration wizard page which allow to define the axis managers, the label provider configurations (hidden for user) and, maybe, the tree filling configuration.
+ */
+public class RowConfigurationWizardPage extends AbstractAxisConfigurationWizardPage {
+
+ /**
+ * The eClass constant.
+ */
+ private static final String E_CLASS = "eClass"; //$NON-NLS-1$
+
+ /**
+ * The axis manager proposed to the user(even if the registered axis managers in plugins are not correctly managed).
+ */
+ protected static final List<String> requiredProposedAxisManagers = new ArrayList<String>();
+
+ /**
+ * The button to add an axis configuration.
+ */
+ protected Button addAxisConfiguration;
+
+ /**
+ * The button to edit an axis configuration.
+ */
+ protected Button editAxisConfiguration;
+
+ /**
+ * The button to remove an existing axis configuration.
+ */
+ protected Button removeAxisConfiguration;
+
+ /**
+ * Initialize the previous map.
+ */
+ static {
+ requiredProposedAxisManagers.add("EMF Feature (org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("EMF Operation (org.eclipse.papyrus.infra.emf.nattable.operation.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("UML Element (org.eclipse.papyrus.uml.nattable.element.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("UML Feature (org.eclipse.papyrus.uml.nattable.feature.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("UML Operation (org.eclipse.papyrus.uml.nattable.operation.axis.manager)"); //$NON-NLS-1$
+ requiredProposedAxisManagers.add("UML Tree Axis (org.eclipse.papyrus.infra.uml.nattable.class.tree.axis.manager)"); //$NON-NLS-1$
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param helper
+ * The table configuration helper.
+ */
+ public RowConfigurationWizardPage(final TableConfigurationHelper helper) {
+ super(Messages.RowConfigurationWizardPage_pageName, helper);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.AbstractAxisConfigurationWizardPage#getHeaderAxisConfiguration()
+ */
+ @Override
+ public TableHeaderAxisConfiguration getHeaderAxisConfiguration() {
+ return helper.getTableConfiguration().getRowHeaderAxisConfiguration();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.AbstractAxisConfigurationWizardPage#createMoreComposite(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createMoreComposite(final Composite parent) {
+ // Create the axis managers group
+ final Group axisManagersGroup = new Group(parent, SWT.NONE);
+ axisManagersGroup.setText(Messages.RowConfigurationWizardPage_axisConfigurationsLabel);
+ axisManagersGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ axisManagersGroup.setLayout(new GridLayout(2, false));
+
+ // Create the axis configurations tree viewer
+ final TreeViewer treeViewer = createAxisConfigurationTreeViewer(axisManagersGroup);
+
+ // Create the buttons composite
+ final Composite buttonsComposite = new Composite(axisManagersGroup, SWT.NONE);
+ buttonsComposite.setLayout(new GridLayout(1, false));
+ buttonsComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+
+ // Create the add button
+ addAxisConfiguration = new Button(buttonsComposite, SWT.PUSH);
+ addAxisConfiguration.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.ADD_ICON_PATH));
+ addAxisConfiguration.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the add action which allow to create an axis configuration
+ addAxisConfiguration.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+
+ final SelectionListener selectionListener = new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent event) {
+ final EClass eClass = (EClass) event.widget.getData(E_CLASS);
+ final EObject instance = eClass.getEPackage().getEFactoryInstance().create(eClass);
+
+ if (instance instanceof IAxisConfiguration) {
+ headerAxisConfiguration.getOwnedAxisConfigurations().add((IAxisConfiguration) instance);
+
+ editAxisConfiguration(instance);
+
+ treeViewer.setSelection(new StructuredSelection(instance));
+ }
+ }
+
+ };
+
+ final Menu menu = new Menu(addAxisConfiguration);
+ final MenuItem treeFillingItem = new MenuItem(menu, SWT.NONE);
+ treeFillingItem.setText(Messages.RowConfigurationWizardPage_treeFillingConfigurationLabel);
+ treeFillingItem.setData(E_CLASS, NattableaxisconfigurationPackage.eINSTANCE.getEClassifier("TreeFillingConfiguration")); //$NON-NLS-1$ //$NON-NLS-2$
+ treeFillingItem.addSelectionListener(selectionListener);
+ final MenuItem pasteEObjectItem = new MenuItem(menu, SWT.NONE);
+ pasteEObjectItem.setText(Messages.RowConfigurationWizardPage_pasteConfigurationLabel);
+ pasteEObjectItem.setData(E_CLASS, NattableaxisconfigurationPackage.eINSTANCE.getEClassifier("PasteEObjectConfiguration")); //$NON-NLS-1$ //$NON-NLS-2$
+ pasteEObjectItem.addSelectionListener(selectionListener);
+ final MenuItem featureAxisItem = new MenuItem(menu, SWT.NONE);
+ featureAxisItem.setText(Messages.RowConfigurationWizardPage_featureAxisLabel);
+ featureAxisItem.setData(E_CLASS, NattableaxisconfigurationPackage.eINSTANCE.getEClassifier("FeatureAxisConfiguration")); //$NON-NLS-1$ //$NON-NLS-2$
+ featureAxisItem.addSelectionListener(selectionListener);
+ final MenuItem featureValueFillingItem = new MenuItem(menu, SWT.NONE);
+ featureValueFillingItem.setText(Messages.RowConfigurationWizardPage_eStructuralFeatureValueFillingConfigurationLabel);
+ featureValueFillingItem.setData(E_CLASS, NattableaxisconfigurationPackage.eINSTANCE.getEClassifier("EStructuralFeatureValueFillingConfiguration")); //$NON-NLS-1$ //$NON-NLS-2$
+ featureValueFillingItem.addSelectionListener(selectionListener);
+
+ menu.setVisible(true);
+
+ // The menu is blocking the thread
+ final Display display = addAxisConfiguration.getDisplay();
+ while (menu.isVisible()) {
+ try {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ } catch (Throwable ex) {
+ System.out.println(ex);
+ }
+ }
+ if (!display.isDisposed()) {
+ display.update();
+ }
+ }
+ });
+
+ // Create the edit button
+ editAxisConfiguration = new Button(buttonsComposite, SWT.PUSH);
+ editAxisConfiguration.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.EDIT_ICON_PATH));
+ editAxisConfiguration.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the edit action which allow to edit an axis configuration
+ editAxisConfiguration.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ final Object selectedObject = treeViewer.getStructuredSelection().getFirstElement();
+ editAxisConfiguration((EObject) selectedObject);
+ }
+ });
+
+ // Create the remove button
+ removeAxisConfiguration = new Button(buttonsComposite, SWT.PUSH);
+ removeAxisConfiguration.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.DELETE_ICON_PATH));
+ removeAxisConfiguration.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the remove action which allow to remove an axis configuration
+ removeAxisConfiguration.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ final Iterator<?> selectedObjects = treeViewer.getStructuredSelection().iterator();
+ while (selectedObjects.hasNext()) {
+ headerAxisConfiguration.getOwnedAxisConfigurations().remove(selectedObjects.next());
+ }
+
+ recalculateAxisConfigurationButtonsAvailability(treeViewer.getStructuredSelection());
+
+ treeViewer.refresh();
+ }
+ });
+
+ // Manage the selection change
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(final SelectionChangedEvent event) {
+ recalculateAxisConfigurationButtonsAvailability(event.getSelection());
+ }
+ });
+
+ treeViewer.setSelection(new StructuredSelection());
+ }
+
+ /**
+ * This allows to calculate the axis configurations buttons availability (remove button musn't be enabled when there is no selection).
+ *
+ * @param selection
+ * The current table viewer selection.
+ */
+ protected void recalculateAxisConfigurationButtonsAvailability(final ISelection selection) {
+ editAxisConfiguration.setEnabled(selection instanceof StructuredSelection && 1 == ((StructuredSelection) selection).size() && ((StructuredSelection) selection).getFirstElement() instanceof IAxisConfiguration);
+ removeAxisConfiguration.setEnabled(null != selection && !selection.isEmpty());
+ }
+
+ /**
+ * This allows to edit axis configuration via a dialog corresponding to a type.
+ *
+ * @param object
+ * The object to edit.
+ */
+ protected void editAxisConfiguration(final EObject object) {
+ if (object instanceof PasteEObjectConfiguration) {
+ final PasteEObjectConfiguration pasteEObjectConfiguration = (PasteEObjectConfiguration) object;
+ final PasteEObjectConfigurationDialog dialog = new PasteEObjectConfigurationDialog(getShell(), pasteEObjectConfiguration);
+ if (Window.OK == dialog.open()) {
+ final PasteEObjectConfiguration modifiedPasteConfiguration = dialog.getModifiedPasteEObjectConfiguration();
+ pasteEObjectConfiguration.setDetachedMode(modifiedPasteConfiguration.isDetachedMode());
+ pasteEObjectConfiguration.setPastedElementId(modifiedPasteConfiguration.getPastedElementId());
+ pasteEObjectConfiguration.setPasteElementContainementFeature(modifiedPasteConfiguration.getPasteElementContainementFeature());
+ pasteEObjectConfiguration.getPostActions().addAll(modifiedPasteConfiguration.getPostActions());
+ }
+ } else if (object instanceof EStructuralFeatureValueFillingConfiguration) {
+ final EStructuralFeatureValueFillingConfiguration featureFillingConfiguration = (EStructuralFeatureValueFillingConfiguration) object;
+ final FeatureFillingConfigurationDialog dialog = new FeatureFillingConfigurationDialog(getShell(), featureFillingConfiguration);
+ if (Window.OK == dialog.open()) {
+ final EStructuralFeatureValueFillingConfiguration modifiedFeatureFillingConfiguration = dialog.getModifiedFeatureFillingConfiguration();
+ featureFillingConfiguration.setListenFeature(modifiedFeatureFillingConfiguration.getListenFeature());
+ }
+ } else if (object instanceof TreeFillingConfiguration) {
+ final TreeFillingConfiguration treeFillingConfiguration = (TreeFillingConfiguration) object;
+ final TreeFillingConfigurationDialog dialog = new TreeFillingConfigurationDialog(getShell(), treeFillingConfiguration, headerAxisConfiguration.getOwnedLabelConfigurations(), getPasteConfigurations());
+ if (Window.OK == dialog.open()) {
+ final TreeFillingConfiguration modifiedTreeFillingConfiguration = dialog.getModifiedTreeFillingConfiguration();
+ treeFillingConfiguration.setDepth(modifiedTreeFillingConfiguration.getDepth());
+ treeFillingConfiguration.setLabelProvider(modifiedTreeFillingConfiguration.getLabelProvider());
+ treeFillingConfiguration.setPasteConfiguration(modifiedTreeFillingConfiguration.getPasteConfiguration());
+ final IAxis modifiedAxis = modifiedTreeFillingConfiguration.getAxisUsedAsAxisProvider();
+ if (null != modifiedAxis) {
+ final IAxis existingAxis = treeFillingConfiguration.getAxisUsedAsAxisProvider();
+ if (null != existingAxis && modifiedAxis.getClass().getSimpleName().equals(existingAxis.getClass().getSimpleName())) {
+ if (existingAxis instanceof EObjectAxis) {
+ ((EObjectAxis) existingAxis).setElement(((EObjectAxis) modifiedAxis).getElement());
+ } else if (existingAxis instanceof EStructuralFeatureAxis) {
+ ((EStructuralFeatureAxis) existingAxis).setElement(((EStructuralFeatureAxis) modifiedAxis).getElement());
+ } else if (existingAxis instanceof EOperationAxis) {
+ ((EOperationAxis) existingAxis).setElement(((EOperationAxis) modifiedAxis).getElement());
+ } else if (existingAxis instanceof FeatureIdAxis) {
+ ((FeatureIdAxis) existingAxis).setElement(((FeatureIdAxis) modifiedAxis).getElement());
+ }
+ } else {
+ treeFillingConfiguration.setAxisUsedAsAxisProvider(modifiedAxis);
+ }
+ } else {
+ treeFillingConfiguration.setAxisUsedAsAxisProvider(null);
+ }
+ }
+ }
+ }
+
+ /**
+ * Get the paste configuration available in the header axis configuration.
+ *
+ * @return The list of paste configuration available in the header axis configuration.
+ */
+ protected List<PasteEObjectConfiguration> getPasteConfigurations() {
+ List<PasteEObjectConfiguration> pasteConfigurations = new ArrayList<PasteEObjectConfiguration>();
+ for (final IAxisConfiguration axisConfiguration : headerAxisConfiguration.getOwnedAxisConfigurations()) {
+ if (axisConfiguration instanceof PasteEObjectConfiguration) {
+ pasteConfigurations.add((PasteEObjectConfiguration) axisConfiguration);
+ }
+ }
+ return pasteConfigurations;
+ }
+
+ /**
+ * This allows to create the axis configurations tree viewer and its columns.
+ *
+ * @param parent
+ * The parent composite.
+ * @return The created tree viewer.
+ */
+ protected TreeViewer createAxisConfigurationTreeViewer(final Composite parent) {
+ final TreeViewer treeViewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER));
+
+ // Create the columns
+ createAxisConfigurationsColumns(treeViewer);
+
+ // Manage some table display
+ final Tree tree = treeViewer.getTree();
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ // The content provider of the tree viewer
+ // Here, we can use the content provider of the nattable axis configuration
+ final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory();
+ adapterFactory.addAdapterFactory(new NattableaxisconfigurationItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new NattableaxisItemProviderAdapterFactory());
+ final IContentProvider contentProvider = new AdapterFactoryContentProvider(adapterFactory) {
+
+ @Override
+ public Object[] getElements(final Object object) {
+ final Object[] elements = super.getElements(object);
+ final List<Object> elementsList = new ArrayList<Object>(Arrays.asList(elements));
+
+ final Iterator<Object> elementsIterator = elementsList.iterator();
+
+ // Display only the axis configurations
+ while (elementsIterator.hasNext()) {
+ if (!(elementsIterator.next() instanceof IAxisConfiguration)) {
+ elementsIterator.remove();
+ }
+ }
+ return elementsList.toArray();
+ }
+ };
+
+ treeViewer.setContentProvider(contentProvider);
+
+ // Define the table input
+ treeViewer.setInput(headerAxisConfiguration);
+
+ // define layout for the viewer
+ treeViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ treeViewer.refresh();
+ return treeViewer;
+ }
+
+ /**
+ * This allows to create the table viewer axis configurations columns.
+ *
+ * @param tableViewer
+ * The table viewer.
+ */
+ protected void createAxisConfigurationsColumns(final TreeViewer treeViewer) {
+
+ // Define the titles and bounds of each columns
+ final int[] bounds = { 600 };
+ final String[] titles = { Messages.RowConfigurationWizardPage_axisConfigurationsColumnName };
+
+ // Create the first column for the axis manager id
+ final TreeViewerColumn axisManagerIdColumn = createTreeViewerColumn(treeViewer, titles[0], bounds[0]);
+
+ final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory();
+ adapterFactory.addAdapterFactory(new NattableaxisconfigurationItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new NattableaxisItemProviderAdapterFactory());
+ final ILabelProvider labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
+
+ axisManagerIdColumn.setLabelProvider(new TreeColumnViewerLabelProvider(labelProvider));
+ }
+
+ /**
+ * This allows to create a tree viewer column in the tree viewer.
+ *
+ * @param viewer
+ * the tree viewer.
+ * @param title
+ * The title of the column.
+ * @param width
+ * The width of the column to create.
+ * @return The created tree viewer column.
+ */
+ protected TreeViewerColumn createTreeViewerColumn(final TreeViewer viewer, final String title, final int width) {
+ final TreeViewerColumn viewerColumn = new TreeViewerColumn(viewer, SWT.NONE);
+ final TreeColumn column = viewerColumn.getColumn();
+ column.setText(title);
+ column.setWidth(width);
+ column.setResizable(true);
+ column.setMoveable(false);
+ return viewerColumn;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.AbstractAxisConfigurationWizardPage#createAxisManagerRepresentation()
+ *
+ * @return
+ */
+ @Override
+ public AxisManagerRepresentation createAxisManagerRepresentation() {
+ final AxisManagerRepresentation createdRepresentation = super.createAxisManagerRepresentation();
+ // Set the label provider context
+ createdRepresentation.setLabelProviderContext("org.eclipse.papyrus.infra.nattable.header.labelprovider"); //$NON-NLS-1$
+ return createdRepresentation;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.AbstractAxisConfigurationWizardPage#createColumns(org.eclipse.jface.viewers.TableViewer)
+ */
+ @Override
+ protected void createAxisManagersColumns(final TableViewer tableViewer) {
+
+ final Table table = tableViewer.getTable();
+ final Collection<String> knownAxis = AxisManagerFactory.INSTANCE.getAllRegisteredAxisManager().keySet();
+
+ // Define the titles and bounds of each columns
+ final int[] bounds = { 500, 500 };
+ final String[] titles = { Messages.ConfigurationWizardPage_axisManagerIdColumnName, Messages.ConfigurationWizardPage_labelProviderContextColumnName };
+
+ // Create the first column for the axis manager id
+ final TableViewerColumn axisManagerIdColumn = createTableViewerColumn(tableViewer, titles[0], bounds[0]);
+ final ColumnLabelProvider axisManagerIdLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ final StringBuilder value = new StringBuilder();
+ if (element instanceof AxisManagerRepresentation) {
+ final String axisManagerId = ((AxisManagerRepresentation) element).getAxisManagerId();
+ boolean axisManagerFound = NameSimplifier.axisManagerNames.containsKey(axisManagerId);
+ if (axisManagerFound) {
+ value.append(NameSimplifier.axisManagerNames.get(axisManagerId));
+ } else {
+ value.append(null != axisManagerId ? axisManagerId : ""); //$NON-NLS-1$
+ }
+ }
+ return value.toString();
+ }
+ };
+ axisManagerIdColumn.setLabelProvider(axisManagerIdLabelProvider);
+ // Create the combo box of the axis manager identifier
+ axisManagerIdColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, axisManagerIdLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ if (element instanceof AxisManagerRepresentation) {
+ // set the new value
+ if (NameSimplifier.axisManagerNames.containsValue(value)) {
+ for (final Entry<String, String> entry : NameSimplifier.axisManagerNames.entrySet()) {
+ if (((String) value).contains(entry.getValue()) && ((String) value).contains(entry.getKey())) {
+ ((AxisManagerRepresentation) element).setAxisManagerId(entry.getKey());
+ }
+ }
+ } else {
+ ((AxisManagerRepresentation) element).setAxisManagerId((String) value);
+ }
+
+ // Manage the label provider configuration depending to the new axis manager identifier
+ manageLabelProviderConfiguration((AxisManagerRepresentation) element);
+
+ tableViewer.refresh();
+ setPageComplete(isPageComplete());
+ }
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new ExtendedComboBoxCellEditor(table, createAxisManagerIdItems(requiredProposedAxisManagers, knownAxis), new LabelProvider(), SWT.NONE) {
+
+ @Override
+ public Object doGetValue() {
+ // Redefine this to allow other value than the proposed ones from the combo
+ if (getControl() instanceof CCombo) {
+ return ((CCombo) getControl()).getText();
+ }
+ return super.doGetValue();
+ }
+ };
+ }
+ });
+
+ // Create the second column for the label provider context
+ final TableViewerColumn labelProviderContextColumn = createTableViewerColumn(tableViewer, titles[1], bounds[1]);
+ final ColumnLabelProvider labelProviderContextLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ String result = ""; //$NON-NLS-1$
+ if (element instanceof AxisManagerRepresentation) {
+ if (NameSimplifier.labelProviderContextNames.containsKey(((AxisManagerRepresentation) element).getLabelProviderContext())) {
+ result = NameSimplifier.labelProviderContextNames.get(((AxisManagerRepresentation) element).getLabelProviderContext());
+ } else {
+ result = ((AxisManagerRepresentation) element).getLabelProviderContext();
+ }
+ }
+ return result;
+ }
+ };
+ labelProviderContextColumn.setLabelProvider(labelProviderContextLabelProvider);
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java
new file mode 100644
index 00000000000..29fb6106cfd
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java
@@ -0,0 +1,732 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.pages;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.ui.celleditor.ExtendedComboBoxCellEditor;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.DialogCellEditor;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationEditingSupport;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.nattable.comparator.IntegerFilterComparator;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EObjectAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EOperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EStructuralFeatureAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.AbstractAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.SlaveObjectAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+import org.eclipse.papyrus.infra.nattable.utils.StringComparator;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
+import org.eclipse.papyrus.infra.widgets.Activator;
+import org.eclipse.papyrus.infra.widgets.editors.ITreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.editors.TreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.providers.CompoundFilteredRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.FlattenableRestrictedFilteredContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.IRestrictedContentProvider;
+import org.eclipse.papyrus.infra.widgets.selectors.ReferenceSelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+/**
+ * The slave configuration wizard page for the nattable configuration.
+ */
+public class SlaveConfigurationWizardPage extends AbstractTableConfigurationWizardPage {
+
+ /**
+ * The table configuration.
+ */
+ protected final TableConfiguration configuration;
+
+ /**
+ * The label provider for the UML elements.
+ */
+ protected final ILabelProvider labelProvider;
+
+ /**
+ * The button which allow to add an axis.
+ */
+ protected Button addAxis;
+
+ /**
+ * The button which allow to remove the axis.
+ */
+ protected Button removeAxis;
+
+ /**
+ * The button which allow to move up the axis.
+ */
+ protected Button upAxis;
+
+ /**
+ * The button which allow to move down the axis.
+ */
+ protected Button downAxis;
+
+ /**
+ * Constructor.
+ *
+ * @param helper
+ * The table configuration helper.
+ */
+ public SlaveConfigurationWizardPage(final TableConfigurationHelper helper) {
+ super(Messages.SlaveConfigurationWizardPage_pageName, helper);
+ configuration = helper.getTableConfiguration();
+
+ LabelProviderService labelProviderService = new LabelProviderServiceImpl();
+ try {
+ labelProviderService.startService();
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+
+ labelProvider = labelProviderService.getLabelProvider();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(final Composite parent) {
+
+ // Create the parent composite
+ final Composite container = new Composite(parent, SWT.BORDER);
+ container.setLayout(new GridLayout(2, false));
+
+ final SlaveObjectAxisProvider slave = getOrCreateSlaveObjectAxisProvider(configuration);
+
+ // Create the table viewer (table, column and its layout)
+ final TableViewer tableViewer = createTableViewer(container, slave);
+
+ // Create the buttons composite
+ final Composite buttonsComposite = new Composite(container, SWT.NONE);
+ buttonsComposite.setLayout(new GridLayout(1, false));
+ buttonsComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+
+ // Create the add button
+ addAxis = new Button(buttonsComposite, SWT.PUSH);
+ addAxis.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.ADD_ICON_PATH));
+ addAxis.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the add action which allow to create an axis
+ addAxis.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ int lastPosition = slave.getAxis().size();
+ if (!tableViewer.getStructuredSelection().isEmpty()) {
+ final Iterator<?> selectedObjects = tableViewer.getStructuredSelection().iterator();
+ while (selectedObjects.hasNext()) {
+ final Object selectedObject = selectedObjects.next();
+ final int objectPosition = slave.getAxis().indexOf(selectedObject);
+ if (objectPosition > lastPosition) {
+ lastPosition = objectPosition;
+ }
+ }
+ }
+
+ final EStructuralFeatureAxis createdAxis = NattableaxisFactory.eINSTANCE.createEStructuralFeatureAxis();
+ if (lastPosition + 1 < slave.getAxis().size()) {
+ getSlaveObjectAxisProvider(configuration).getAxis().add(lastPosition + 1, createdAxis);
+ } else {
+ getSlaveObjectAxisProvider(configuration).getAxis().add(createdAxis);
+ }
+ recalculateButtonsAvailability(tableViewer.getStructuredSelection(), slave);
+ tableViewer.refresh();
+ }
+ });
+
+ // Create the remove button
+ removeAxis = new Button(buttonsComposite, SWT.PUSH);
+ removeAxis.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.DELETE_ICON_PATH));
+ removeAxis.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the remove action which allow to remove an axis
+ removeAxis.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ final Iterator<?> selectedObjects = tableViewer.getStructuredSelection().iterator();
+ while (selectedObjects.hasNext()) {
+ slave.getAxis().remove(selectedObjects.next());
+ }
+ recalculateButtonsAvailability(tableViewer.getStructuredSelection(), slave);
+ tableViewer.refresh();
+ }
+ });
+
+ // Create the move up button
+ upAxis = new Button(buttonsComposite, SWT.UP);
+ upAxis.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.UP_ICON_PATH));
+ upAxis.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the remove action which allow to move up an axis
+ upAxis.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ // Create a list of index to move.
+ // To move all the selected item correctly, get all index to move, sort the integer and move it from the first to the last
+ // (to avoid multiple same object moved)
+ final List<Integer> indexToMove = new ArrayList<Integer>();
+
+ final Iterator<?> selectedObjects = tableViewer.getStructuredSelection().iterator();
+ while (selectedObjects.hasNext()) {
+ IAxis selectedAxis = (IAxis) selectedObjects.next();
+ indexToMove.add(slave.getAxis().indexOf(selectedAxis));
+ }
+
+ // Sort the index to move
+ indexToMove.sort(IntegerFilterComparator.getInstance());
+
+ // Move the objects from the first to the last
+ for (final Integer index : indexToMove) {
+ slave.getAxis().move(index - 1, index);
+ }
+
+ recalculateButtonsAvailability(tableViewer.getStructuredSelection(), slave);
+ tableViewer.refresh();
+ }
+ });
+
+ // Create the move down button
+ downAxis = new Button(buttonsComposite, SWT.DOWN);
+ downAxis.setImage(Activator.getDefault().getImage(NattableConfigurationConstants.DOWN_ICON_PATH));
+ downAxis.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));
+ // Manage the remove action which allow to move down an axis
+ downAxis.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ // Create a list of index to move.
+ // To move all the selected item correctly, get all index to move, sort the integer and move it from the last to the first
+ // (to avoid multiple same object moved)
+ final List<Integer> indexToMove = new ArrayList<Integer>();
+
+ final Iterator<?> selectedObjects = tableViewer.getStructuredSelection().iterator();
+ while (selectedObjects.hasNext()) {
+ final IAxis selectedAxis = (IAxis) selectedObjects.next();
+ indexToMove.add(slave.getAxis().indexOf(selectedAxis));
+ }
+
+ // Sort the index to move
+ indexToMove.sort(IntegerFilterComparator.getInstance());
+
+ // Move the objects from the last to the first
+ for (int it = indexToMove.size() - 1; it >= 0; it--) {
+ int index = indexToMove.get(it);
+ slave.getAxis().move(index + 1, index);
+ }
+
+ recalculateButtonsAvailability(tableViewer.getStructuredSelection(), slave);
+ tableViewer.refresh();
+ }
+ });
+
+ // Manage the selection change
+ tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ recalculateButtonsAvailability(event.getSelection(), slave);
+ }
+ });
+ tableViewer.setSelection(new StructuredSelection());
+
+ setControl(container);
+ }
+
+ /**
+ * This allows to calculate if buttons availability depending to the selection.
+ *
+ * @param selection
+ * The current table viewer selection.
+ * @param slave
+ * The slave axis provider.
+ */
+ protected void recalculateButtonsAvailability(final ISelection selection, final SlaveObjectAxisProvider slave) {
+ if (null != selection && !selection.isEmpty()) {
+ // A selection is available, enabled the remove button
+ removeAxis.setEnabled(true);
+
+ // check if the is not the first or last position, because otherwise, the up or down button must be always disabled
+ int firstPosition = -1;
+ int lastPosition = -1;
+ if (selection instanceof StructuredSelection) {
+ final Iterator<?> selectedObjects = ((StructuredSelection) selection).iterator();
+ while (selectedObjects.hasNext()) {
+ final Object selectedObject = selectedObjects.next();
+ final int objectPosition = slave.getAxis().indexOf(selectedObject);
+ if (-1 == firstPosition || objectPosition < firstPosition) {
+ firstPosition = objectPosition;
+ }
+ if (objectPosition > lastPosition) {
+ lastPosition = objectPosition;
+ }
+ }
+ }
+
+ upAxis.setEnabled(firstPosition != 0);
+ downAxis.setEnabled(lastPosition < slave.getAxis().size() - 1);
+ } else {
+ // Only add button must be enable when no selection occured
+ removeAxis.setEnabled(false);
+ upAxis.setEnabled(false);
+ downAxis.setEnabled(false);
+ }
+ }
+
+ /**
+ * This allows to create the table viewer and its columns.
+ *
+ * @param parent
+ * The parent composite.
+ * @param slave
+ * The slave axis provider.
+ * @return The created table viewer.
+ */
+ protected TableViewer createTableViewer(final Composite parent, final SlaveObjectAxisProvider slave) {
+
+ final TableViewer tableViewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
+
+ // Create the columns
+ createColumns(tableViewer);
+
+ // Manage some table display
+ final Table table = tableViewer.getTable();
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ // The content provider of the initial selection
+ tableViewer.setContentProvider(new ArrayContentProvider());
+
+ // Define the table input
+ tableViewer.setInput(slave.getAxis());
+
+ // define layout for the viewer
+ tableViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ tableViewer.refresh();
+ return tableViewer;
+ }
+
+ /**
+ * This allows to create the table viewer columns.
+ *
+ * @param tableViewer
+ * The table viewer.
+ */
+ protected void createColumns(final TableViewer tableViewer) {
+
+ final Table table = tableViewer.getTable();
+
+ // Define the titles and bounds of each columns
+ final int[] bounds = { 150, 250, 450, 100 };
+ final String[] titles = { Messages.SlaveConfigurationWizardPage_typeColumnName, Messages.SlaveConfigurationWizardPage_elementColumnName, Messages.SlaveConfigurationWizardPage_managerColumnName, Messages.SlaveConfigurationWizardPage_aliasColumnName };
+
+ // Create the first column and manage its display by the label provider of the initial selection
+ final List<String> typesPossible = new ArrayList<String>();
+ typesPossible.add("EObjectAxis"); //$NON-NLS-1$
+ typesPossible.add("EOperationAxis"); //$NON-NLS-1$
+ typesPossible.add("EStructuralFeatureAxis"); //$NON-NLS-1$
+ typesPossible.add("FeatureIdAxis"); //$NON-NLS-1$
+ typesPossible.add("ObjectAxis"); //$NON-NLS-1$
+
+ // Create the first column for the type
+ final TableViewerColumn firstColumn = createTableViewerColumn(tableViewer, titles[0], bounds[0]);
+ final ColumnLabelProvider typeLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ return ((IAxis) element).getClass().getSimpleName().substring(0, ((IAxis) element).getClass().getSimpleName().length() - 4);
+ }
+ };
+ firstColumn.setLabelProvider(typeLabelProvider);
+ // Create the combo box of the type
+ firstColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, typeLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ final IAxis axis = (IAxis) element;
+
+ if (null == element || !((IAxis) element).getClass().getSimpleName().substring(0, ((IAxis) element).getClass().getSimpleName().length() - 4).equals(value) && !value.toString().isEmpty()) {
+ // Create the axis
+ IAxis recreatedAxis = null;
+ if ("EObjectAxis".equals(value)) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createEObjectAxis();
+ } else if ("EOperationAxis".equals(value)) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createEOperationAxis();
+ } else if ("EStructuralFeatureAxis".equals(value)) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createEStructuralFeatureAxis();
+ } else if ("FeatureIdAxis".equals(value)) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createFeatureIdAxis();
+ } else if ("ObjectAxis".equals(value)) { //$NON-NLS-1$
+ recreatedAxis = NattableaxisFactory.eINSTANCE.createObjectIdAxis();
+ }
+
+ recreatedAxis.setAlias(axis.getAlias());
+ recreatedAxis.setManager(axis.getManager());
+
+ SlaveObjectAxisProvider slave = getSlaveObjectAxisProvider(configuration);
+ int indexAxisInParent = slave.getAxis().indexOf(axis);
+ slave.getAxis().add(indexAxisInParent, recreatedAxis);
+ slave.getAxis().remove(axis);
+
+ tableViewer.refresh();
+ }
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new ExtendedComboBoxCellEditor(table, typesPossible, new LabelProvider(), SWT.READ_ONLY);
+ }
+ });
+
+ // Create the second viewer column and manage its display and edition
+ final TableViewerColumn secondColumn = createTableViewerColumn(tableViewer, titles[1], bounds[1]);
+ final ColumnLabelProvider elementLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ String result = null;
+ if (element instanceof IAxis) {
+ final IAxis axis = (IAxis) element;
+ if (null != axis.getElement()) {
+ result = labelProvider.getText(axis.getElement());
+ }
+ }
+ return null != result ? result : null;
+ }
+
+ @Override
+ public Image getImage(final Object element) {
+ Image result = null;
+ if (element instanceof IAxis) {
+ final IAxis axis = (IAxis) element;
+ if (null != axis.getElement()) {
+ result = labelProvider.getImage(axis.getElement());
+ }
+ }
+ return null != result ? result : null;
+
+ }
+ };
+ secondColumn.setLabelProvider(elementLabelProvider);
+ secondColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, labelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ final IAxis axis = (IAxis) element;
+
+ if (null == axis.getElement() || !axis.getElement().equals(value)) {
+ if (axis instanceof EObjectAxis && value instanceof EObject) {
+ ((EObjectAxis) axis).setElement((EObject) value);
+ } else if (axis instanceof EOperationAxis && value instanceof EOperation) {
+ ((EOperationAxis) axis).setElement((EOperation) value);
+ } else if (axis instanceof EStructuralFeatureAxis && value instanceof EStructuralFeature) {
+ ((EStructuralFeatureAxis) axis).setElement((EStructuralFeature) value);
+ } else if (axis instanceof FeatureIdAxis && value instanceof String) {
+ ((FeatureIdAxis) axis).setElement((String) value);
+ } else if (axis instanceof ObjectIdAxis && value instanceof String) {
+ ((ObjectIdAxis) axis).setElement((String) value);
+ }
+ tableViewer.refresh();
+ }
+ }
+
+ @Override
+ protected Object getValue(final Object element) {
+ String result = null;
+ if (element instanceof IAxis) {
+ final IAxis axis = (IAxis) element;
+ if (null != axis.getElement()) {
+ result = labelProvider.getText(axis.getElement());
+ }
+ }
+ return null != result ? result : ""; //$NON-NLS-1$
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ if (element instanceof IdAxis) {
+ return new TextCellEditor(table);
+ } else {
+ final IAxis existingAxis = (IAxis) element;
+ final Object initialValue = getValue(element);
+ return new DialogCellEditor(table) {
+
+ @Override
+ protected Object openDialogBox(Control cellEditorWindow) {
+ final ITreeSelectorDialog dialog = new TreeSelectorDialog(getShell()) {
+ @Override
+ protected void initViewerAndProvider() {
+ super.initViewerAndProvider();
+ // Set a comparator to sort the tree viewer
+ getViewer().setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+ dialog.setTitle(org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages.FeatureFillingConfigurationDialog_listenFeatureDialogName);
+
+ final CompoundFilteredRestrictedContentProvider contentProvider = new CompoundFilteredRestrictedContentProvider() {
+
+ @Override
+ public Object[] getChildren(final Object parentElement) {
+ List<Object> childrenList = Arrays.asList(super.getChildren(parentElement));
+ if (parentElement instanceof EClass) {
+ childrenList = new ArrayList<Object>(childrenList);
+ final EClass eClass = (EClass) parentElement;
+ if (isIgnoringInheritedElements()) {
+ childrenList.addAll(eClass.getEOperations());
+ } else {
+ childrenList.addAll(eClass.getEAllOperations());
+ }
+ childrenList.remove(EcorePackage.eINSTANCE.getEModelElement_EAnnotations());
+ }
+ return childrenList.toArray();
+ }
+ };
+ final ReferenceSelector selector = new ReferenceSelector(false) {
+
+ @Override
+ public void createControls(Composite parent) {
+ super.createControls(parent);
+ this.treeViewer.setComparator(new ViewerComparator(new StringComparator()));// should always be string element
+ }
+ };
+
+ selector.setLabelProvider(labelProvider);
+ selector.setContentProvider(contentProvider);
+ final ITreeContentProvider treeContentProvider = new FlattenableRestrictedFilteredContentProvider((IRestrictedContentProvider) contentProvider, selector) {
+
+ @Override
+ public boolean isValidValue(final Object element) {
+ // EMF dependency, must not be done here, it should be better with a new content provider service
+ boolean result = false;
+
+ if (null != existingAxis) {
+ result = element != EcorePackage.eINSTANCE.getEModelElement_EAnnotations();
+
+ // Depending to the axis, objects displayed are not the same
+ if (existingAxis instanceof EObjectAxis && result) {
+ result = element instanceof EClass;
+ } else if (existingAxis instanceof EStructuralFeatureAxis && result) {
+ result = element instanceof EStructuralFeature;
+ } else if (existingAxis instanceof EOperationAxis && result) {
+ result = element instanceof EOperation;
+ }
+ }
+
+ return result;
+ }
+ };
+
+ dialog.setContentProvider(treeContentProvider);
+ dialog.setLabelProvider(labelProvider);
+ if (null != initialValue) {
+ dialog.setInitialElementSelections(Collections.singletonList(initialValue));
+ }
+ Object value = null;
+ int result = dialog.open();
+ if (Window.OK == result) {
+ Object[] newValue = dialog.getResult();
+ if (null != newValue) {
+ if (0 == newValue.length) {
+ value = null;
+ } else {
+ value = newValue[0];
+ }
+ }
+ setValue(value);
+ }
+
+ return value;
+ }
+ };
+ }
+ }
+ });
+
+ // Create the third viewer column and manage its display and edition
+ final TableViewerColumn thirdColumn = createTableViewerColumn(tableViewer, titles[2], bounds[2]);
+ final ColumnLabelProvider managerLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ return null != ((IAxis) element).getManager() ? ((IAxis) element).getManager().getAxisManagerId() : ""; //$NON-NLS-1$
+ }
+ };
+ thirdColumn.setLabelProvider(managerLabelProvider);
+ // Create the combo box for the manager
+ thirdColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, managerLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ final IAxis axis = (IAxis) element;
+
+ if (null != value && !value.equals(axis.getManager())) {
+ // Change the manager
+ axis.setManager((AxisManagerRepresentation) value);
+ tableViewer.refresh();
+ }
+ }
+
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return new ExtendedComboBoxCellEditor(table, configuration.getColumnHeaderAxisConfiguration().getAxisManagers(), new LabelProvider() {
+ @Override
+ public String getText(final Object element) {
+ return ((AxisManagerRepresentation) element).getAxisManagerId();
+ }
+ }, SWT.READ_ONLY);
+ }
+ });
+
+ // Create the fourth viewer column and manage its display and edition
+ final TableViewerColumn fourthColumn = createTableViewerColumn(tableViewer, titles[3], bounds[3]);
+ final ColumnLabelProvider aliasLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ return null != ((IAxis) element).getAlias() ? ((IAxis) element).getAlias() : ""; //$NON-NLS-1$
+ }
+ };
+ fourthColumn.setLabelProvider(aliasLabelProvider);
+ // Create the text editor for the manager
+ fourthColumn.setEditingSupport(new NattableConfigurationEditingSupport(tableViewer, aliasLabelProvider) {
+
+ @Override
+ protected void setValue(final Object element, final Object value) {
+ final IAxis axis = (IAxis) element;
+
+ if (!value.toString().isEmpty() && !value.equals(axis.getAlias())) {
+ // Change the manager
+ axis.setAlias((String) value);
+ tableViewer.refresh();
+ }
+ }
+
+ @Override
+ protected CellEditor getCellEditor(Object element) {
+ return new TextCellEditor(table);
+ }
+ });
+ }
+
+ /**
+ * This allows to create and return a table viewer column.
+ *
+ * @param tableViewer
+ * The parent table viewer of the column to create.
+ * @param title
+ * The title of the column to create.
+ * @param width
+ * The width of the column to create.
+ * @return The created viewer column.
+ */
+ private TableViewerColumn createTableViewerColumn(final TableViewer tableViewer, final String title, final int width) {
+ final TableViewerColumn viewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
+ final TableColumn column = viewerColumn.getColumn();
+ column.setText(title);
+ column.setWidth(width);
+ column.setResizable(true);
+ column.setMoveable(true);
+ return viewerColumn;
+ }
+
+ /**
+ * This allows to get the slave axis provider of the nattable configuration.
+ *
+ * @param configuration
+ * The nattable configuration.
+ * @return The slave axis provider is exists or <code>null</code>.
+ */
+ protected SlaveObjectAxisProvider getSlaveObjectAxisProvider(final TableConfiguration configuration) {
+ SlaveObjectAxisProvider slave = null;
+
+ // Try to get an existing slave axis provider
+ if (0 < configuration.getColumnAxisProviders().size()) {
+ final Iterator<AbstractAxisProvider> columnAxisProvidersIterator = configuration.getColumnAxisProviders().iterator();
+ while (columnAxisProvidersIterator.hasNext() && null == slave) {
+ AbstractAxisProvider axisProvider = columnAxisProvidersIterator.next();
+ if (axisProvider instanceof SlaveObjectAxisProvider) {
+ slave = (SlaveObjectAxisProvider) axisProvider;
+ }
+ }
+ }
+
+ return slave;
+ }
+
+ /**
+ * Get the existing slave axis provider or create it otherwise.
+ *
+ * @param configuration
+ * The nattable configuration.
+ * @return The existing or created axis provider.
+ */
+ protected SlaveObjectAxisProvider getOrCreateSlaveObjectAxisProvider(final TableConfiguration configuration) {
+ SlaveObjectAxisProvider slave = getSlaveObjectAxisProvider(configuration);
+
+ // The slave doesn't exist, create it
+ if (null == slave) {
+ slave = NattableaxisproviderFactory.eINSTANCE.createSlaveObjectAxisProvider();
+ configuration.getColumnAxisProviders().add(slave);
+ }
+
+ // Set the slave as default row axis provider if this is not already done
+ if (null == configuration.getDefaultColumnAxisProvider()) {
+ configuration.setDefaultColumnAxisProvider(slave);
+ }
+
+ return slave;
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NameSimplifier.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NameSimplifier.java
new file mode 100644
index 00000000000..9ea3e49424e
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NameSimplifier.java
@@ -0,0 +1,99 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.impl.FeatureLabelProviderConfigurationImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.impl.ObjectLabelProviderConfigurationImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.impl.OperationLabelProviderConfigurationImpl;
+
+/**
+ * This class allows to define the simplification names for the nattable configuration wizard.
+ */
+public class NameSimplifier {
+
+ /**
+ * Map the axis manager id (as key) to its name (as value).
+ */
+ public static final Map<String, String> axisManagerNames = new HashMap<String, String>();
+
+ /**
+ * Define the label provider configuration class to use corresponding to axis manager.
+ * If one is not filled in this map, by default, the ObjectLabelProviderConfiguration must be used.
+ */
+ public static final Map<String, String> labelProviderConfigurationByAxisManager = new HashMap<String, String>();
+
+ /**
+ * The correspondence between the axis manager identifiers and the label provider contexts.
+ */
+ public static final Map<String, String> correspondenceAxisManagerAndContext = new HashMap<String, String>();
+
+ /**
+ * To simplify the user comprehension, the label provider configuration must be managed with simplest names.
+ */
+ public static final Map<String, String> labelProviderConfigurationNames = new HashMap<String, String>();
+
+ /**
+ * To simplify the user choice, the label provider context names must be simplified.
+ */
+ public static final Map<String, String> labelProviderContextNames = new HashMap<String, String>();
+
+ /**
+ * Initialize the previous map.
+ */
+ static {
+ axisManagerNames.put("org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager", "EMF Feature (org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+ axisManagerNames.put("org.eclipse.papyrus.infra.emf.nattable.operation.axis.manager", "EMF Operation (org.eclipse.papyrus.infra.emf.nattable.operation.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+ axisManagerNames.put("org.eclipse.papyrus.uml.nattable.element.axis.manager", "UML Element (org.eclipse.papyrus.uml.nattable.element.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+ axisManagerNames.put("org.eclipse.papyrus.uml.nattable.feature.axis.manager", "UML Feature (org.eclipse.papyrus.uml.nattable.feature.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+ axisManagerNames.put("org.eclipse.papyrus.uml.nattable.operation.axis.manager", "UML Operation (org.eclipse.papyrus.uml.nattable.operation.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+ axisManagerNames.put("org.eclipse.papyrus.infra.uml.nattable.class.tree.axis.manager", "UML Tree Axis (org.eclipse.papyrus.infra.uml.nattable.class.tree.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+ axisManagerNames.put("org.eclipse.papyrus.sysml.nattable.requirement.axis.manager", "SysML Requirement (org.eclipse.papyrus.sysml.nattable.requirement.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+ axisManagerNames.put("org.eclipse.papyrus.sysml.nattable.allocate.axis.manager", "SysML Allocation (org.eclipse.papyrus.sysml.nattable.allocate.axis.manager)"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager", FeatureLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.infra.emf.nattable.operation.axis.manager", OperationLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.uml.nattable.element.axis.manager", ObjectLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.uml.nattable.feature.axis.manager", FeatureLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.uml.nattable.operation.axis.manager", OperationLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.infra.uml.nattable.class.tree.axis.manager", ObjectLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.sysml.nattable.requirement.axis.manager", ObjectLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.sysml.nattable.allocate.axis.manager", ObjectLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.uml.nattable.stereotype.display.axis.manager", FeatureLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$ //$NON-NLS-2$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.uml.nattable.stereotype.display.properties.axis.manager", ObjectLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$
+ labelProviderConfigurationByAxisManager.put("org.eclipse.papyrus.uml.nattable.stereotype.property.axis.manager", FeatureLabelProviderConfigurationImpl.class.getSimpleName()); //$NON-NLS-1$ //$NON-NLS-2$
+
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.infra.emf.nattable.feature.axis.manager", "org.eclipse.papyrus.infra.nattable.header.feature.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.infra.emf.nattable.operation.axis.manager", "org.eclipse.papyrus.infra.nattable.header.operation.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.uml.nattable.element.axis.manager", "org.eclipse.papyrus.infra.nattable.header.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.uml.nattable.feature.axis.manager", "org.eclipse.papyrus.infra.nattable.header.feature.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.uml.nattable.operation.axis.manager", "org.eclipse.papyrus.infra.nattable.header.operation.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.infra.uml.nattable.class.tree.axis.manager", "org.eclipse.papyrus.infra.nattable.header.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.sysml.nattable.requirement.axis.manager", "org.eclipse.papyrus.infra.nattable.header.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.sysml.nattable.allocate.axis.manager", "org.eclipse.papyrus.infra.nattable.header.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.uml.nattable.stereotype.display.axis.manager", "org.eclipse.papyrus.infra.nattable.header.feature.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.uml.nattable.stereotype.display.properties.axis.manager", "org.eclipse.papyrus.infra.nattable.header.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+ correspondenceAxisManagerAndContext.put("org.eclipse.papyrus.uml.nattable.stereotype.property.axis.manager", "org.eclipse.papyrus.infra.nattable.header.feature.labelprovider"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ labelProviderConfigurationNames.put(ObjectLabelProviderConfigurationImpl.class.getSimpleName(), "Object"); //$NON-NLS-1$
+ labelProviderConfigurationNames.put(FeatureLabelProviderConfigurationImpl.class.getSimpleName(), "Feature"); //$NON-NLS-1$
+ labelProviderConfigurationNames.put(OperationLabelProviderConfigurationImpl.class.getSimpleName(), "Operation"); //$NON-NLS-1$
+
+ labelProviderContextNames.put("org.eclipse.papyrus.infra.nattable.header.labelprovider", "Header"); //$NON-NLS-1$ //$NON-NLS-2$
+ labelProviderContextNames.put("org.eclipse.papyrus.infra.nattable.header.feature.labelprovider", "Header Feature"); //$NON-NLS-1$ //$NON-NLS-2$
+ labelProviderContextNames.put("org.eclipse.papyrus.infra.nattable.header.operation.labelprovider", "Header Operation"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java
new file mode 100644
index 00000000000..aaa7c6e7961
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java
@@ -0,0 +1,88 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.utils;
+
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * The constants for the nattable configuration wizard.
+ */
+public class NattableConfigurationConstants {
+
+ /**
+ * the path of the wizban image.
+ */
+ public static final String ICON_WIZBAN_PATH = "icons/papyrusNattableconfigurationWizban.png"; //$NON-NLS-1$
+
+ /**
+ * The extension for the nattable configuration file.
+ */
+ public static final String NATTABLE_CONFIGURATION_EXTENSION_FILE = org.eclipse.papyrus.infra.nattable.utils.NattableConfigurationConstants.NATTABLE_CONFIGURATION_EXTENSION_FILE;
+
+ /**
+ * The config folder path.
+ */
+ public static final String CONFIG_FOLDER = "/configs/"; //$NON-NLS-1$
+
+ /**
+ * The name of the about file.
+ */
+ public static final String ABOUT_FILE_NAME = "about.html"; //$NON-NLS-1$
+
+ /**
+ * The path for the papyrus icon.
+ */
+ public static final String PAPYRUS_ICON_PATH = "/icons/papyrus.png"; //$NON-NLS-1$
+
+ /**
+ * The add icon path.
+ */
+ public static final String ADD_ICON_PATH = "/icons/Add_12x12.gif"; //$NON-NLS-1$
+
+ /**
+ * The edit icon path.
+ */
+ public static final String EDIT_ICON_PATH = "/icons/Edit_12x12.gif"; //$NON-NLS-1$
+
+ /**
+ * The browse icon path.
+ */
+ public static final String BROWSE_ICON_PATH = "/icons/browse_12x12.gif"; //$NON-NLS-1$
+
+ /**
+ * The delete icon path.
+ */
+ public static final String DELETE_ICON_PATH = "/icons/Delete_12x12.gif"; //$NON-NLS-1$
+
+ /**
+ * The down icon path.
+ */
+ public static final String DOWN_ICON_PATH = "/icons/Down_12x12.gif"; //$NON-NLS-1$
+
+ /**
+ * The up icon path.
+ */
+ public static final String UP_ICON_PATH = "/icons/Up_12x12.gif"; //$NON-NLS-1$
+
+ /**
+ * The checked image.
+ */
+ public static final Image CHECKED = org.eclipse.papyrus.infra.widgets.Activator.getDefault().getImage("org.eclipse.papyrus.infra.nattable.common", "icons/checked.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ /**
+ * The unchecked image.
+ */
+ public static final Image UNCHECKED = org.eclipse.papyrus.infra.widgets.Activator.getDefault().getImage("org.eclipse.papyrus.infra.nattable.common", "icons/unchecked.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationEditingSupport.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationEditingSupport.java
new file mode 100644
index 00000000000..0cb9c0405ef
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationEditingSupport.java
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.utils;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnViewer;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.ILabelProvider;
+
+/**
+ * The editing support specific for the nattable configuration wizard which allow to use the label provider to get the value.
+ */
+public abstract class NattableConfigurationEditingSupport extends EditingSupport {
+
+ /**
+ * The label provider used.
+ */
+ protected ILabelProvider labelProvider;
+
+ /**
+ * Constructor.
+ *
+ * @param viewer
+ * The viewer.
+ * @param labelProvider
+ * The label provider to use.
+ */
+ public NattableConfigurationEditingSupport(final ColumnViewer viewer, final ILabelProvider labelProvider) {
+ super(viewer);
+ this.labelProvider = labelProvider;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
+ */
+ @Override
+ protected CellEditor getCellEditor(final Object element) {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
+ */
+ @Override
+ protected boolean canEdit(Object element) {
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
+ */
+ @Override
+ protected Object getValue(final Object element) {
+ return labelProvider.getText(element);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object, java.lang.Object)
+ */
+ @Override
+ protected abstract void setValue(final Object element, final Object value);
+
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateAndEditTableConfigurationWizard.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateAndEditTableConfigurationWizard.java
new file mode 100644
index 00000000000..41f87ff6888
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateAndEditTableConfigurationWizard.java
@@ -0,0 +1,181 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.wizards;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.customization.nattableconfiguration.Activator;
+import org.eclipse.papyrus.customization.nattableconfiguration.pages.NattableConfigurationFileCreationPage;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.NattableconfigurationFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+import org.eclipse.papyrus.infra.tools.util.FileUtils;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * The wizard used to create and edit a Papyrus Table configuration in an existing project
+ *
+ */
+public class CreateAndEditTableConfigurationWizard extends EditTableConfigurationWizard {
+
+ /**
+ * the page used to create the table configuration
+ */
+ private NattableConfigurationFileCreationPage page = null;
+
+ /**
+ * the initial selection done by the used on which the wizard has been called
+ */
+ private Object firstSelectedElement;
+
+ /**
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.wizards.EditTableConfigurationWizard#addEditNattableConfigurationPage()
+ *
+ */
+ protected void addEditNattableConfigurationPage() {
+ addPage(this.page = new NattableConfigurationFileCreationPage(this.helper));
+ }
+
+ /**
+ * Get the edited table configuration.
+ *
+ * @return
+ * the edited table configuration.
+ */
+ protected TableConfiguration getEditedTableConfiguration(final Resource resource) {
+ // 1. create the configuration itself
+ TableConfiguration configuration = NattableconfigurationFactory.eINSTANCE.createTableConfiguration();
+
+ // 2. create the row and the column header axis configuration
+ final TableHeaderAxisConfiguration rowHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ final TableHeaderAxisConfiguration columnHeaderAxisConfiguration = NattableaxisconfigurationFactory.eINSTANCE.createTableHeaderAxisConfiguration();
+ configuration.setColumnHeaderAxisConfiguration(columnHeaderAxisConfiguration);
+ configuration.setRowHeaderAxisConfiguration(rowHeaderAxisConfiguration);
+ return configuration;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.wizards.EditTableConfigurationWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+ *
+ * @param workbench
+ * @param selection
+ */
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ super.init(workbench, selection);
+ if (selection instanceof StructuredSelection) {
+ this.firstSelectedElement = selection.getFirstElement();
+ }
+ }
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.wizards.EditTableConfigurationWizard#performFinish()
+ *
+ * @return
+ */
+ @Override
+ public boolean performFinish() {
+ StringBuilder nattableConfigurationFileName = new StringBuilder(this.page.getNattableConfigurationFileName());
+
+ // Check if the file has the nattable configuration extension file, else add it
+
+ if (!nattableConfigurationFileName.toString().contains(FileUtils.DOT_STRING)
+ || !NattableConfigurationConstants.NATTABLE_CONFIGURATION_EXTENSION_FILE.equals(nattableConfigurationFileName.toString().substring(nattableConfigurationFileName.lastIndexOf(FileUtils.DOT_STRING) + 1))) {
+ nattableConfigurationFileName.append(FileUtils.DOT_STRING);
+ nattableConfigurationFileName.append(NattableConfigurationConstants.NATTABLE_CONFIGURATION_EXTENSION_FILE);
+ }
+
+ final ResourceSet set = new ResourceSetImpl();
+ final StringBuilder nattableConfFileURI = new StringBuilder();
+ nattableConfFileURI.append(getPathForTableConfigurationCreation());
+ nattableConfFileURI.append(nattableConfigurationFileName);
+ this.initialResource = set.createResource(URI.createFileURI(nattableConfFileURI.toString()));
+ // the configuration is added into the resource in the super class
+ // initialResource.getContents().add(configuration);
+ boolean result = super.performFinish();
+ refreshProject();
+ return result;
+ }
+
+ /**
+ *
+ * @return
+ * the location to use to create the new Papyrus Table Configuration.
+ * The location will be the folder selected by the user or for others selections, a folfer called {@link NattableConfigurationConstants#CONFIG_FOLDER} in others cases
+ */
+ protected String getPathForTableConfigurationCreation() {
+ String location = null;
+ if (this.firstSelectedElement instanceof IFolder) {
+ String projectLocation = ((IFolder) this.firstSelectedElement).getLocation().toString();
+ StringBuilder builder = new StringBuilder(projectLocation);
+ builder.append(FileUtils.SLASH_STRING);
+ location = builder.toString();
+ } else if (this.firstSelectedElement instanceof IResource) {
+ String projectLocation = getProjectLocation();
+ StringBuilder builder = new StringBuilder(projectLocation);
+ builder.append(NattableConfigurationConstants.CONFIG_FOLDER);
+ location = builder.toString();
+ }
+ return location;
+ }
+
+ /**
+ * This method allows to refresh the project (required to display the created table configuration)
+ */
+ protected final void refreshProject() {
+ try {
+ getProject().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+ } catch (CoreException e) {
+ Activator.log.error(e);
+ }
+ }
+
+ /**
+ *
+ * @return
+ * the project in which is created the table configuration
+ */
+ protected IProject getProject() {
+ IProject project = null;
+ if (this.firstSelectedElement instanceof org.eclipse.core.internal.resources.Resource) {
+ project = ((org.eclipse.core.internal.resources.Resource) firstSelectedElement).getProject();
+ }
+ return project;
+ }
+
+ /**
+ *
+ * @return
+ * the location of the project
+ */
+ protected String getProjectLocation() {
+ IProject project = getProject();
+ if (null != project) {
+ return project.getLocation().toString();
+ }
+ return null;
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateNattableConfigurationProjectWizard.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateNattableConfigurationProjectWizard.java
new file mode 100644
index 00000000000..b4380c784d5
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateNattableConfigurationProjectWizard.java
@@ -0,0 +1,223 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ * Vincent LORENZO (CEA-LIST) vincent.lorenzo@cea.fr - Bug 493756
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.wizards;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URL;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.customization.nattableconfiguration.Activator;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.pde.internal.ui.wizards.IProjectProvider;
+import org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationOperation;
+import org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationPage;
+import org.eclipse.pde.internal.ui.wizards.plugin.PluginContentPage;
+import org.eclipse.pde.internal.ui.wizards.plugin.PluginFieldData;
+import org.eclipse.ui.IWorkbenchWizard;
+import org.eclipse.ui.IWorkingSet;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * The wizard used to create a Papyrus Table Configuration Project
+ */
+public class CreateNattableConfigurationProjectWizard extends CreateAndEditTableConfigurationWizard implements IWorkbenchWizard {
+
+
+ /**
+ * The page for the project creation.
+ */
+ private NewProjectCreationPage nattableConfigurationProjectCreationPage;
+
+ /**
+ * The project provider.
+ */
+ private IProjectProvider projectProvider;
+
+ /**
+ * The content page for the project creation.
+ */
+ protected PluginContentPage contentPage;
+
+ /**
+ * The fields data to manage the project creation
+ */
+ private PluginFieldData pluginData;
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.EditTableConfigurationWizard#addPages()
+ *
+ */
+ @Override
+ public void addPages() {
+ pluginData = new PluginFieldData();
+
+ nattableConfigurationProjectCreationPage = new NewProjectCreationPage(Messages.NattableConfigurationProjectCreationPage_pageName, pluginData, false,new StructuredSelection());
+ addPage(nattableConfigurationProjectCreationPage);
+
+ projectProvider = new IProjectProvider() {
+ @Override
+ public String getProjectName() {
+ return nattableConfigurationProjectCreationPage.getProjectName();
+ }
+
+ @Override
+ public IProject getProject() {
+ return nattableConfigurationProjectCreationPage.getProjectHandle();
+ }
+
+ @Override
+ public IPath getLocationPath() {
+ return nattableConfigurationProjectCreationPage.getLocationPath();
+ }
+ };
+
+ contentPage = new PluginContentPage("page2", projectProvider, nattableConfigurationProjectCreationPage, pluginData); //$NON-NLS-1$
+
+ addPage(contentPage);
+ super.addPages();
+ }
+
+
+
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.EditTableConfigurationWizard#performFinish()
+ *
+ * @return
+ */
+ @Override
+ public boolean performFinish() {
+ boolean result = false;
+
+ IProject createdProject = null;
+
+ try {
+
+ // Create the project
+ getContainer().run(false, true, new NewProjectCreationOperation(pluginData, projectProvider, null));
+
+ createdProject = getProject();
+
+ // Set the project into the working sets
+ final IWorkingSet[] workingSets = nattableConfigurationProjectCreationPage.getSelectedWorkingSets();
+ if (0 < workingSets.length) {
+ PlatformUI.getWorkbench().getWorkingSetManager().addToWorkingSets(createdProject, workingSets);
+ }
+
+ // Copy the about file
+ copyAboutFile(createdProject);
+ result = super.performFinish();
+ } catch (final InvocationTargetException e) {
+ Activator.log.error(e);
+ } catch (final InterruptedException e) {
+ Activator.log.error(e);
+ }
+
+ if (result) {
+ result = saveResource();
+ }
+ refreshProject();
+ return result;
+ }
+
+ /**
+ * This allows to get the project created folder.
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.wizards.CreateAndEditTableConfigurationWizard#getPathForTableConfigurationCreation()
+ */
+ @Override
+ protected String getPathForTableConfigurationCreation() {
+ final String projectLocation = getProjectLocation();
+ final StringBuilder builder = new StringBuilder(projectLocation);
+ builder.append(NattableConfigurationConstants.CONFIG_FOLDER);
+
+ return builder.toString();
+ }
+
+ /**
+ * This allows to copy the about file in the created project.
+ *
+ * @param createdProject
+ * The created project.
+ */
+ protected void copyAboutFile(final IProject createdProject) {
+ InputStream inputStream = null;
+ OutputStream outputStream = null;
+ try {
+ final URL url = Activator.getDefault().getBundle().getResource(NattableConfigurationConstants.ABOUT_FILE_NAME);
+ inputStream = url.openStream();
+
+ final java.io.File newAboutFile = new java.io.File(createdProject.getLocation().toOSString() + java.io.File.separator + NattableConfigurationConstants.ABOUT_FILE_NAME);
+ newAboutFile.createNewFile();
+
+ outputStream = new FileOutputStream(newAboutFile);
+
+ int read = 0;
+ byte[] bytes = new byte[1024];
+
+ while ((read = inputStream.read(bytes)) != -1) {
+ outputStream.write(bytes, 0, read);
+ }
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ } finally {
+ if (null != inputStream) {
+ try {
+ inputStream.close();
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ }
+ }
+ if (null != outputStream) {
+ try {
+ // outputStream.flush();
+ outputStream.close();
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ }
+
+ }
+ }
+ }
+
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.wizards.CreateAndEditTableConfigurationWizard#getProject()
+ *
+ * @return
+ */
+ @Override
+ protected IProject getProject() {
+ return this.projectProvider.getProject();
+ }
+
+ /**
+ * @see org.eclipse.papyrus.customization.nattableconfiguration.wizards.CreateAndEditTableConfigurationWizard#getProjectLocation()
+ *
+ * @return
+ */
+ @Override
+ protected String getProjectLocation() {
+ IProject createdProject = getProject();
+ return createdProject.getLocation().toString();
+ }
+}
diff --git a/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/EditTableConfigurationWizard.java b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/EditTableConfigurationWizard.java
new file mode 100644
index 00000000000..3bd3bf34759
--- /dev/null
+++ b/plugins/infra/nattable/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/EditTableConfigurationWizard.java
@@ -0,0 +1,231 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * 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:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.customization.nattableconfiguration.wizards;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.internal.resources.File;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.dialogs.DialogSettings;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.customization.nattableconfiguration.Activator;
+import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper;
+import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages;
+import org.eclipse.papyrus.customization.nattableconfiguration.pages.ColumnConfigurationWizardPage;
+import org.eclipse.papyrus.customization.nattableconfiguration.pages.EditGenericNattableConfigurationFieldsNattableWizardPage;
+import org.eclipse.papyrus.customization.nattableconfiguration.pages.RowConfigurationWizardPage;
+import org.eclipse.papyrus.customization.nattableconfiguration.pages.SlaveConfigurationWizardPage;
+import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants;
+import org.eclipse.papyrus.infra.nattable.manager.table.INattableModelManager;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+import org.eclipse.papyrus.infra.nattable.utils.TableEditingDomainUtils;
+import org.eclipse.papyrus.infra.nattable.wizard.AbstractTableWizard;
+import org.eclipse.papyrus.infra.ui.util.WorkbenchPartHelper;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWizard;
+
+/**
+ * The wizard to edit an existing TableConfiguration file
+ */
+public class EditTableConfigurationWizard extends AbstractTableWizard implements IWorkbenchWizard {
+
+ /**
+ * The generate plugin activator setting.
+ */
+ private static final String GENERATE_PlUGIN_ACTIVATOR = "generatePluginActivator"; //$NON-NLS-1$
+
+ /**
+ * The ui plugin setting.
+ */
+ private static final String UI_PLUGIN = "uiPlugin"; //$NON-NLS-1$
+
+ /**
+ * The edited table configuration
+ */
+ protected TableConfiguration configuration;
+
+ /**
+ * The initial resource selected.
+ */
+ protected Resource initialResource;
+
+ /**
+ * the edited Table Configuration Helper;
+ */
+ protected TableConfigurationHelper helper;
+
+
+ /**
+ *
+ * Constructor.
+ *
+ * Thi sconstructor is used when we create a new Papyrus Table Configuration Poject from the wizard Dialog
+ *
+ */
+ public EditTableConfigurationWizard() {
+ final ImageDescriptor desc = org.eclipse.papyrus.infra.widgets.Activator.getDefault().getImageDescriptor(Activator.PLUGIN_ID, NattableConfigurationConstants.ICON_WIZBAN_PATH);
+ setDefaultPageImageDescriptor(desc);
+ setWindowTitle(Messages.CreateNattableConfigurationWizard_WizardTitke);
+ setForcePreviousAndNextButtons(true);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.nattable.wizard.AbstractTableWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+ *
+ * @param workbench
+ * @param selection
+ */
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ super.init(workbench, selection);
+ this.initialResource = getSelectedResource(selection);
+ this.configuration = getEditedTableConfiguration(this.initialResource);
+ Assert.isNotNull(this.configuration);
+ this.helper = new TableConfigurationHelper(configuration);
+ }
+
+ /**
+ *
+ * @param currentSelection
+ * the current selection
+ * @return
+ * the resource if it already exist or <code>null</code>;
+ */
+ protected Resource getSelectedResource(final ISelection currentSelection) {
+ Resource resource = null;
+
+ if (currentSelection instanceof StructuredSelection && 1 == ((StructuredSelection) currentSelection).size()) {
+ final Object selectedElement = ((StructuredSelection) currentSelection).getFirstElement();
+ if (selectedElement instanceof File && NattableConfigurationConstants.NATTABLE_CONFIGURATION_EXTENSION_FILE.equals(((File) selectedElement).getFileExtension())) {
+
+ INattableModelManager manager = null;
+ // TODO required ?
+ final IEditorPart currentPart = WorkbenchPartHelper.getCurrentActiveWorkbenchPart().getSite().getPage().getActiveEditor();
+ if (null != currentPart) {
+ manager = (INattableModelManager) currentPart.getAdapter(INattableModelManager.class);
+ }
+
+ if (null != manager) {
+ resource = TableEditingDomainUtils.getTableEditingDomain(manager.getTable()).getResourceSet().getResource(URI.createFileURI(((File) selectedElement).getLocation().toString()), true);
+ } else {
+ final ResourceSet set = new ResourceSetImpl();
+ resource = set.getResource(URI.createFileURI(((File) selectedElement).getLocation().toString()), true);
+ }
+ }
+ }
+
+ return resource;
+ }
+
+ /**
+ * Get the edited table configuration.
+ *
+ * @return
+ * the edited table configuration.
+ */
+ protected TableConfiguration getEditedTableConfiguration(final Resource resource) {
+ TableConfiguration configuration = null;
+ if (null != resource) {
+ if (!resource.getContents().isEmpty() && resource.getContents().get(0) instanceof TableConfiguration) {
+ configuration = EcoreUtil.copy((TableConfiguration) resource.getContents().get(0));
+ }
+ }
+ return configuration;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.wizard.Wizard#addPages()
+ */
+ @Override
+ public void addPages() {
+ addEditNattableConfigurationPage();
+ addPage(new RowConfigurationWizardPage(this.helper));
+ addPage(new ColumnConfigurationWizardPage(this.helper));
+ addPage(new SlaveConfigurationWizardPage(this.helper));
+ }
+
+ protected void addEditNattableConfigurationPage(){
+ addPage(new EditGenericNattableConfigurationFieldsNattableWizardPage(this.helper));
+ }
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.wizard.Wizard#getDialogSettings()
+ */
+ @Override
+ public IDialogSettings getDialogSettings() {
+ DialogSettings dialogSettings = new DialogSettings(""); //$NON-NLS-1$
+ dialogSettings.put(GENERATE_PlUGIN_ACTIVATOR, true);
+ dialogSettings.put(UI_PLUGIN, false);
+ return dialogSettings;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+
+ boolean result = false;
+
+ // The resource is modified directly without command (undo/redo impossible)
+ // Save DiagramDialog at proper position
+ if (null != this.initialResource) {
+ this.initialResource.getContents().clear();
+ this.initialResource.getContents().add(this.configuration);
+ result = true;
+ }
+ if (result) {
+ result = saveResource();
+ }
+
+ return result;
+ }
+
+ /**
+ *
+ * @return
+ * <code>true</code> if the resource has been properly saved
+ */
+ protected final boolean saveResource() {
+ boolean result = true;
+ final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+ saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED);
+
+ try {
+ initialResource.save(saveOptions);
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ result = false;
+ }
+ return result;
+ }
+}

Back to the top