diff options
author | Nicolas FAUVERGUE | 2016-05-30 10:55:00 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2016-05-31 14:30:00 +0000 |
commit | b82e6e300f10da43dfa6a2c547ff4179c97fbc52 (patch) | |
tree | 9ea4639bab1850712a3c979aa9da0c8de1dba92c | |
parent | 78884f12fcdc10c36624896677378a2448a2ec32 (diff) | |
download | org.eclipse.papyrus-b82e6e300f10da43dfa6a2c547ff4179c97fbc52.tar.gz org.eclipse.papyrus-b82e6e300f10da43dfa6a2c547ff4179c97fbc52.tar.xz org.eclipse.papyrus-b82e6e300f10da43dfa6a2c547ff4179c97fbc52.zip |
bug 492873 - [Table] The Create Table Configuration menu appears
everywhere
bug 493756 - [Table] Edit table configuration calls same wizard as
"create..."
bug 493756 - [Table] Papyrus must provide the Table creation Wizard in
the New Dialog
Change-Id: Ie708c6a515ffd0498b45cd961d2e3c075e938b0b
Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@all4tec.net>
Signed-off-by: Vincent LORENZO <vincent.lorenzo@cea.fr>
19 files changed, 794 insertions, 592 deletions
diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/META-INF/MANIFEST.MF b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/META-INF/MANIFEST.MF index a83429a55d6..fb17f681eec 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/META-INF/MANIFEST.MF +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/META-INF/MANIFEST.MF @@ -31,12 +31,12 @@ Require-Bundle: org.eclipse.ui, Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.papyrus.customization.nattableconfiguration, - org.eclipse.papyrus.customization.nattableconfiguration.ediiton, + org.eclipse.papyrus.customization.nattableconfiguration.edition, org.eclipse.papyrus.customization.nattableconfiguration.handlers, org.eclipse.papyrus.customization.nattableconfiguration.helper, org.eclipse.papyrus.customization.nattableconfiguration.messages, org.eclipse.papyrus.customization.nattableconfiguration.pages, org.eclipse.papyrus.customization.nattableconfiguration.utils Bundle-Vendor: %Bundle-Vendor -Bundle-Description: %pluginDescription +Bundle-Description: %Bundle-Description Bundle-Localization: plugin diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.properties b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.properties index cc6699a143b..e1812e03f29 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.properties +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.properties @@ -1,3 +1,5 @@ #Properties file for org.eclipse.papyrus.uml.nattable Bundle-Vendor = Eclipse Modeling Project Bundle-Name = Customization of Nattable Configuration + +Bundle-Description = This plugin provides the Wizard used to create a new project with a Papyrus Table Configuration, to create a new Papyrus Table Configuration inside an existing project and the handler to edit an exiting table configuration
\ No newline at end of file diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.xml b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.xml index ed60a1a92d0..baaf57e1f28 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.xml +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/plugin.xml @@ -7,16 +7,7 @@ allPopups="true" locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu"> <command - commandId="org.eclipse.papyrus.infra.nattable.create.configuration.wizard" - label="Create Table Configuration" - style="push"> - </command> - </menuContribution> - <menuContribution - allPopups="true" - locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu"> - <command - commandId="org.eclipse.papyrus.infra.nattable.create.configuration.wizard" + commandId="org.eclipse.papyrus.infra.nattable.edit.configuration.wizard" label="Edit Table Configuration" style="push"> <visibleWhen @@ -33,32 +24,46 @@ </adapt> </iterate> </visibleWhen> - <parameter - name="org.eclipse.papyrus.customization.nattableconfiguration.configurationParemeter" - value="nattableconfiguration"> - </parameter> </command> </menuContribution> </extension> <extension point="org.eclipse.ui.commands"> <command - defaultHandler="org.eclipse.papyrus.customization.nattableconfiguration.handlers.CreateTableConfigurationWizardHandler" - id="org.eclipse.papyrus.infra.nattable.create.configuration.wizard" - name="Create Table Configuration Wizard"> - <commandParameter - id="org.eclipse.papyrus.customization.nattableconfiguration.configurationParemeter" - name="selection" - optional="true"> - </commandParameter> + defaultHandler="org.eclipse.papyrus.customization.nattableconfiguration.handlers.EditExistingTableConfigurationWizardHandler" + id="org.eclipse.papyrus.infra.nattable.edit.configuration.wizard" + name="Edit Table Configuration Wizard"> </command> </extension> <extension point="org.eclipse.ui.commandImages"> <image - commandId="org.eclipse.papyrus.infra.nattable.create.configuration.wizard" + commandId="org.eclipse.papyrus.infra.nattable.edit.configuration.wizard" icon="icons/wizard_icon.png"> </image> </extension> + <extension + point="org.eclipse.ui.newWizards"> + <wizard + category="org.eclipse.papyrus.wizards.category" + class="org.eclipse.papyrus.customization.nattableconfiguration.wizards.CreateNattableConfigurationProjectWizard" + hasPages="true" + icon="icons/wizard_icon.png" + id="org.eclipse.papyrus.customization.nattableconfiguration.createconfigurationproject" + name="Create Papyrus Table Configuration Project" + preferredPerspectives="org.eclipse.papyrus.infra.core.perspective" + project="true"> + </wizard> + <wizard + category="org.eclipse.papyrus.wizards.category" + class="org.eclipse.papyrus.customization.nattableconfiguration.wizards.CreateAndEditTableConfigurationWizard" + hasPages="true" + icon="icons/wizard_icon.png" + id="org.eclipse.papyrus.customization.nattableconfiguration.createandeditconfigurationfile" + name="Create Papyrus Table Configuration File" + preferredPerspectives="org.eclipse.papyrus.infra.core.perspective" + project="true"> + </wizard> + </extension> </plugin> diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java index fcc41eb71b9..347b9c03825 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/Activator.java @@ -15,6 +15,7 @@ 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; @@ -33,6 +34,8 @@ public class Activator extends AbstractUIPlugin { */ private static Activator plugin; + + public static LogHelper log; /** * The constructor */ @@ -48,6 +51,7 @@ public class Activator extends AbstractUIPlugin { public void start(final BundleContext context) throws Exception { super.start(context); plugin = this; + log = new LogHelper(this); } /** @@ -70,45 +74,5 @@ public class Activator extends AbstractUIPlugin { return plugin; } - /** - * Logs a warning message in the plugin log - * - * @param message - * the message to log - */ - public static void logWarning(final String message) { - getDefault().getLog().log(new Status(IStatus.WARNING, Activator.PLUGIN_ID, message)); - } - - /** - * Logs an error message in the plugin log - * - * @param message - * the message to log - */ - public static void logError(final String message) { - getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, message)); - } - - /** - * Logs an information message in the plugin log - * - * @param message - * the message to log - */ - public static void logInfo(final String message) { - getDefault().getLog().log(new Status(IStatus.INFO, Activator.PLUGIN_ID, message)); - } - - /** - * Logs an error message in the plugin log - * - * @param exception - * the exception to log - */ - public static void logException(final Exception exception) { - getDefault().getLog().log( - new Status(IStatus.ERROR, Activator.PLUGIN_ID, exception.getLocalizedMessage(), exception)); - } } diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/CreateNattableConfigurationWizard.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/CreateNattableConfigurationWizard.java deleted file mode 100644 index 333cf33e55d..00000000000 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/CreateNattableConfigurationWizard.java +++ /dev/null @@ -1,329 +0,0 @@ -/***************************************************************************** - * 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 java.io.File; -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 java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; -import org.eclipse.emf.common.command.CommandStack; -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.transaction.RecordingCommand; -import org.eclipse.emf.transaction.TransactionalEditingDomain; -import org.eclipse.jface.dialogs.DialogSettings; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.StructuredSelection; -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.NattableConfigurationProjectCreationPage; -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.core.services.ServiceException; -import org.eclipse.papyrus.infra.core.services.ServicesRegistry; -import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResourceSet; -import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration; -import org.eclipse.papyrus.infra.nattable.wizard.AbstractTableWizard; -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.PluginContentPage; -import org.eclipse.pde.internal.ui.wizards.plugin.PluginFieldData; -import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.PlatformUI; - -/** - * The wizard to manage the nattable configuration. - */ -public class CreateNattableConfigurationWizard extends AbstractTableWizard { - - /** - * The dot string. - */ - private static final String DOT = "."; //$NON-NLS-1$ - - /** - * 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 - */ - private final TableConfiguration configuration; - - /** - * The initial resource selected. - */ - private Resource initialResource; - - /** - * the edited Table Configuration Helper; - */ - private TableConfigurationHelper helper; - - /** - * Boolean to determinate if this is a project creation or just an edition. - */ - private boolean isProjectCreation = false; - - /** - * The page for the project creation. - */ - private NattableConfigurationProjectCreationPage 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; - - /** - * Constructor. - * - * @param configuration - * The edited table configuration. - * @param initialResource - * The initial nattable configuration resource. - */ - public CreateNattableConfigurationWizard(final TableConfiguration configuration, final Resource initialResource) { - this.configuration = configuration; - this.helper = new TableConfigurationHelper(this.configuration); - 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); - - this.initialResource = initialResource; - - isProjectCreation = null == this.initialResource; - } - - /** - * {@inheritDoc} - * - * @see org.eclipse.jface.wizard.Wizard#addPages() - */ - @Override - public void addPages() { - if (isProjectCreation) { - - pluginData = new PluginFieldData(); - - nattableConfigurationProjectCreationPage = new NattableConfigurationProjectCreationPage(pluginData, 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); - } - addPage(new EditGenericNattableConfigurationFieldsNattableWizardPage(this.helper)); - addPage(new RowConfigurationWizardPage(this.helper)); - addPage(new ColumnConfigurationWizardPage(this.helper)); - addPage(new SlaveConfigurationWizardPage(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; - - IProject createdProject = null; - - if (isProjectCreation) { - try { - - // Create the project - getContainer().run(false, true, new NewProjectCreationOperation(pluginData, projectProvider, null)); - - createdProject = projectProvider.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); - - StringBuilder nattableConfigurationFileName = new StringBuilder(nattableConfigurationProjectCreationPage.getNattableConfigurationFileName()); - - // Check if the file has the nattable configuration extension file, else add it - if (!nattableConfigurationFileName.toString().contains(DOT) - || !NattableConfigurationConstants.NATTABLE_CONFIGURATION_EXTENSION_FILE.equals(nattableConfigurationFileName.toString().substring(nattableConfigurationFileName.lastIndexOf(DOT) + 1))) { - nattableConfigurationFileName.append(DOT); - nattableConfigurationFileName.append(NattableConfigurationConstants.NATTABLE_CONFIGURATION_EXTENSION_FILE); - } - - final ResourceSet set = new ResourceSetImpl(); - final StringBuilder nattableConfFileURI = new StringBuilder(); - nattableConfFileURI.append(createdProject.getLocation()); - nattableConfFileURI.append(NattableConfigurationConstants.CONFIG_FOLDER); - nattableConfFileURI.append(nattableConfigurationFileName); - initialResource = set.createResource(URI.createFileURI(nattableConfFileURI.toString())); - initialResource.getContents().add(configuration); - - result = true; - } catch (final InvocationTargetException e) { - Activator.logException(e); - } catch (final InterruptedException e) { - Activator.logException(e); - } - } else if (null != initialResource) { - ServicesRegistry registry; - try { - registry = ServiceUtilsForResourceSet.getInstance().getServiceRegistry(initialResource.getResourceSet()); - final TransactionalEditingDomain editingDomain = registry.getService(TransactionalEditingDomain.class); - - final CommandStack commandStack = editingDomain.getCommandStack(); - commandStack.execute(new RecordingCommand(editingDomain) { - - @Override - protected void doExecute() { - // Save DiagramDialog at proper position - if (null != initialResource) { - initialResource.getContents().clear(); - initialResource.getContents().add(configuration); - } - } - }); - - result = true; - } catch (final ServiceException e) { - Activator.logException(e); - } - } - - 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.logException(e); - result = false; - } - - return result; - } - - /** - * 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 File newAboutFile = new File(createdProject.getLocation().toOSString() + 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.logException(e); - } finally { - if (null != inputStream) { - try { - inputStream.close(); - } catch (final IOException e) { - Activator.logException(e); - } - } - if (null != outputStream) { - try { - // outputStream.flush(); - outputStream.close(); - } catch (final IOException e) { - Activator.logException(e); - } - - } - } - } -} diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/ediiton/FeatureFillingConfigurationDialog.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/FeatureFillingConfigurationDialog.java index 7cce581b193..045d11569a2 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/ediiton/FeatureFillingConfigurationDialog.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/FeatureFillingConfigurationDialog.java @@ -11,7 +11,7 @@ * *****************************************************************************/ -package org.eclipse.papyrus.customization.nattableconfiguration.ediiton; +package org.eclipse.papyrus.customization.nattableconfiguration.edition; import java.util.Collections; diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/ediiton/PasteEObjectConfigurationDialog.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/PasteEObjectConfigurationDialog.java index 5cda8eeacc8..4be86896f1a 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/ediiton/PasteEObjectConfigurationDialog.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/PasteEObjectConfigurationDialog.java @@ -11,7 +11,7 @@ * *****************************************************************************/ -package org.eclipse.papyrus.customization.nattableconfiguration.ediiton; +package org.eclipse.papyrus.customization.nattableconfiguration.edition; import java.util.ArrayList; import java.util.Collection; diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/ediiton/TreeFillingConfigurationDialog.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/TreeFillingConfigurationDialog.java index d7cc9139848..adfda5c7c68 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/ediiton/TreeFillingConfigurationDialog.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/edition/TreeFillingConfigurationDialog.java @@ -11,7 +11,7 @@ * *****************************************************************************/ -package org.eclipse.papyrus.customization.nattableconfiguration.ediiton; +package org.eclipse.papyrus.customization.nattableconfiguration.edition; import java.util.ArrayList; import java.util.Arrays; diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/CreateTableConfigurationWizardHandler.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/CreateTableConfigurationWizardHandler.java deleted file mode 100644 index c7d4bc59db9..00000000000 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/CreateTableConfigurationWizardHandler.java +++ /dev/null @@ -1,131 +0,0 @@ -/***************************************************************************** - * 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.handlers; - -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.internal.resources.File; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.papyrus.customization.nattableconfiguration.CreateNattableConfigurationWizard; -import org.eclipse.papyrus.customization.nattableconfiguration.utils.NattableConfigurationConstants; -import org.eclipse.papyrus.infra.nattable.handler.AbstractTableHandler; -import org.eclipse.papyrus.infra.nattable.manager.table.INattableModelManager; -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.nattable.utils.TableEditingDomainUtils; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.handlers.HandlerUtil; - -/** - * The handler of the nattable configuration wwizard. - */ -public class CreateTableConfigurationWizardHandler extends AbstractTableHandler { - - /** - * {@inheritDoc} - * - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ - @Override - public Object execute(final ExecutionEvent event) throws ExecutionException { - - final String selectionParameter = event.getParameter("org.eclipse.papyrus.customization.nattableconfiguration.configurationParemeter"); //$NON-NLS-1$ - - Resource resourceSelected = null; - - if(null != selectionParameter && selectionParameter.equals("nattableconfiguration")){ //$NON-NLS-1$ - final ISelection currentSelection = HandlerUtil.getCurrentSelection(event); - resourceSelected = getSelectedResource(currentSelection); - } - - final TableConfiguration configuration = getEditedTableConfiguration(resourceSelected); - final CreateNattableConfigurationWizard wizard = new CreateNattableConfigurationWizard(configuration, resourceSelected); - 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); - } - - 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; - final IEditorPart currentPart = getActivePart().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); - } - } - } - - return resource; - } - - /** - * Get the edited table configuration. - * - * @return - * the edited table configuration. - */ - protected TableConfiguration getEditedTableConfiguration(final Resource resource) { - TableConfiguration configuration = null; - - boolean isCreation = true; - - if (null != resource) { - if (!resource.getContents().isEmpty() && resource.getContents().get(0) instanceof TableConfiguration) { - configuration = EcoreUtil.copy((TableConfiguration) resource.getContents().get(0)); - isCreation = false; - } - } - - if (isCreation) { - // 1. create the configuration itself - 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; - } -} diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/handlers/EditExistingTableConfigurationWizardHandler.java b/plugins/customization/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/customization/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/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java index d5884a115d0..29630976bac 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/EditGenericNattableConfigurationFieldsNattableWizardPage.java @@ -8,6 +8,7 @@ * * Contributors: * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation + * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - Bug 493756 * *****************************************************************************/ @@ -86,8 +87,8 @@ public class EditGenericNattableConfigurationFieldsNattableWizardPage extends Ab public void createControl(final Composite parent) { setPageComplete(isPageComplete()); final Composite container = new Composite(parent, SWT.BORDER); - container.setLayout(new GridLayout(2, false)); - + 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)); diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationProjectCreationPage.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationFileCreationPage.java index e9fe7cb0bfc..c6b2fc8a482 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationProjectCreationPage.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/NattableConfigurationFileCreationPage.java @@ -7,18 +7,14 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation + * CEA LIST - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.customization.nattableconfiguration.pages; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.papyrus.customization.nattableconfiguration.helper.TableConfigurationHelper; import org.eclipse.papyrus.customization.nattableconfiguration.messages.Messages; -import org.eclipse.pde.internal.ui.wizards.plugin.AbstractFieldData; -import org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -29,10 +25,10 @@ import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; /** - * This allows to initialise the nattable configuration creation by getting the name of the plugin to create and the nattable configuration name. + * This page allows to edit the name of the Papyrus Table configuration to create + * */ -public class NattableConfigurationProjectCreationPage extends NewProjectCreationPage { - +public class NattableConfigurationFileCreationPage extends EditGenericNattableConfigurationFieldsNattableWizardPage { /** * The nattable configuration file name text composite. */ @@ -48,15 +44,14 @@ public class NattableConfigurationProjectCreationPage extends NewProjectCreation setPageComplete(canFlipToNextPage()); } }; - + /** * Constructor. * * @param helper - * The table configuration helper. */ - public NattableConfigurationProjectCreationPage(final AbstractFieldData data, final IStructuredSelection selection) { - super(Messages.NattableConfigurationProjectCreationPage_pageName, data, false, selection); + public NattableConfigurationFileCreationPage(TableConfigurationHelper helper) { + super(helper); } /** @@ -66,18 +61,17 @@ public class NattableConfigurationProjectCreationPage extends NewProjectCreation */ @Override public void createControl(final Composite parent) { - - super.createControl(parent); - final Composite composite = (Composite) getControl(); - composite.setLayoutData(new GridData(SWT.FILL, SWT.DOWN, true, false)); + Composite container = new Composite(parent, SWT.BORDER); final GridLayout gridLayout = new GridLayout(1, false); - composite.setLayout(gridLayout); - setControl(composite); - final Group group = createGroup(composite, Messages.NattableConfigurationProjectCreationPage_nattableConfigurationFileNameLabel); + 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); - setPageComplete(false); + super.createControl(container); + setControl(container); } /** @@ -101,8 +95,13 @@ public class NattableConfigurationProjectCreationPage extends NewProjectCreation return group; } + /** + * @see org.eclipse.papyrus.customization.nattableconfiguration.pages.EditGenericNattableConfigurationFieldsNattableWizardPage#isPageComplete() + * + * @return + */ @Override - protected boolean validatePage() { + public boolean isPageComplete() { if (null != nattableConfigurationFileName) { if ("".equals(nattableConfigurationFileName.getText())) { //$NON-NLS-1$ this.setErrorMessage("Set nattable configuration file name"); //$NON-NLS-1$ @@ -110,41 +109,11 @@ public class NattableConfigurationProjectCreationPage extends NewProjectCreation } } - return super.validatePage(); + return super.isPageComplete(); } - + public String getNattableConfigurationFileName() { return nattableConfigurationFileName.getText(); } - /** - * This method is used to avoid case conflicts between existing and newly created projects - * - * @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage() - * - * @return - */ - @Override - public boolean canFlipToNextPage() { - // retrieve the selected elements and get its children - boolean canFlip = true; - - final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - if (canFlip) { - for (IProject iproject : projects) { - if (this.getProjectName().equalsIgnoreCase(iproject.getName())) { - canFlip = false; - this.setErrorMessage("There already is a project with this name: " + iproject.getName()); //$NON-NLS-1$ - // A conflict has been found, no need to go further - break; - } - } - } - - if (!validatePage()) { - canFlip = false; - } - - return canFlip; - } } diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java index fba5fc0a08b..9828c661c4e 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/RowConfigurationWizardPage.java @@ -41,9 +41,9 @@ 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.ediiton.FeatureFillingConfigurationDialog; -import org.eclipse.papyrus.customization.nattableconfiguration.ediiton.PasteEObjectConfigurationDialog; -import org.eclipse.papyrus.customization.nattableconfiguration.ediiton.TreeFillingConfigurationDialog; +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; diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java index 360cf0f6b39..b14e7d8a584 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/pages/SlaveConfigurationWizardPage.java @@ -681,8 +681,8 @@ public class SlaveConfigurationWizardPage extends AbstractTableConfigurationWiza protected SlaveObjectAxisProvider getSlaveObjectAxisProvider(final TableConfiguration configuration) { SlaveObjectAxisProvider slave = null; - // Try to get an existing master axis provider - if (0 < configuration.getRowAxisProviders().size()) { + // 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(); @@ -705,13 +705,13 @@ public class SlaveConfigurationWizardPage extends AbstractTableConfigurationWiza protected SlaveObjectAxisProvider getOrCreateSlaveObjectAxisProvider(final TableConfiguration configuration) { SlaveObjectAxisProvider slave = getSlaveObjectAxisProvider(configuration); - // The master doesn't exist, create it + // The slave 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 + // Set the slave as default row axis provider if this is not already done if (null == configuration.getDefaultColumnAxisProvider()) { configuration.setDefaultColumnAxisProvider(slave); } diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java index c1257afc4cb..aaa7c6e7961 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java +++ b/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/utils/NattableConfigurationConstants.java @@ -28,7 +28,7 @@ public class NattableConfigurationConstants { /** * The extension for the nattable configuration file. */ - public static final String NATTABLE_CONFIGURATION_EXTENSION_FILE = "nattableconfiguration"; //$NON-NLS-1$ + public static final String NATTABLE_CONFIGURATION_EXTENSION_FILE = org.eclipse.papyrus.infra.nattable.utils.NattableConfigurationConstants.NATTABLE_CONFIGURATION_EXTENSION_FILE; /** * The config folder path. diff --git a/plugins/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateAndEditTableConfigurationWizard.java b/plugins/customization/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/customization/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/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/CreateNattableConfigurationProjectWizard.java b/plugins/customization/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/customization/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/customization/org.eclipse.papyrus.customization.nattableconfiguration/src/org/eclipse/papyrus/customization/nattableconfiguration/wizards/EditTableConfigurationWizard.java b/plugins/customization/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/customization/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; + } +} diff --git a/plugins/infra/nattable/org.eclipse.papyrus.infra.nattable/src/org/eclipse/papyrus/infra/nattable/utils/NattableConfigurationConstants.java b/plugins/infra/nattable/org.eclipse.papyrus.infra.nattable/src/org/eclipse/papyrus/infra/nattable/utils/NattableConfigurationConstants.java new file mode 100644 index 00000000000..37c2559be2c --- /dev/null +++ b/plugins/infra/nattable/org.eclipse.papyrus.infra.nattable/src/org/eclipse/papyrus/infra/nattable/utils/NattableConfigurationConstants.java @@ -0,0 +1,26 @@ +/***************************************************************************** + * 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.infra.nattable.utils; + +/** + * @author VL222926 + * + */ +public class NattableConfigurationConstants { + + /** + * The extension for the nattable configuration file. + */ + public static final String NATTABLE_CONFIGURATION_EXTENSION_FILE = "nattableconfiguration"; //$NON-NLS-1$ +} |