Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/cdo/bundles/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java')
-rwxr-xr-xplugins/cdo/bundles/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java243
1 files changed, 243 insertions, 0 deletions
diff --git a/plugins/cdo/bundles/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java b/plugins/cdo/bundles/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java
new file mode 100755
index 00000000..1c984ac1
--- /dev/null
+++ b/plugins/cdo/bundles/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java
@@ -0,0 +1,243 @@
+/*****************************************************************************
+ * Copyright (c) 2013, 2017 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
+ * Christian W. Damus (CEA) - bug 429242
+ * Eike Stepper (CEA) - bug 466520
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.cdo.uml.diagram.internal.ui.wizards;
+
+import static org.eclipse.papyrus.uml.diagram.wizards.utils.WizardsHelper.adapt;
+import static org.eclipse.papyrus.uml.diagram.wizards.utils.WizardsHelper.getSelectedResourceURI;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.eresource.CDOResourceNode;
+import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
+import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.cdo.internal.core.CDOUtils;
+import org.eclipse.papyrus.cdo.internal.ui.editors.PapyrusCDOEditorInput;
+import org.eclipse.papyrus.uml.diagram.wizards.pages.SelectArchitectureContextPage;
+import org.eclipse.papyrus.uml.diagram.wizards.providers.AbstractNewModelStorageProvider;
+import org.eclipse.papyrus.uml.diagram.wizards.wizards.CreateModelWizard;
+import org.eclipse.papyrus.uml.diagram.wizards.wizards.InitModelWizard;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+
+import com.google.common.eventbus.EventBus;
+
+/**
+ * This is the CDONewModelStorageProvider type. Enjoy.
+ */
+public class CDONewModelStorageProvider extends AbstractNewModelStorageProvider {
+
+ private final EventBus bus = new EventBus("NewCDOModelWizard"); //$NON-NLS-1$
+
+ private CreateModelWizard wizard;
+
+ private SelectArchitectureContextPage newDiagramCategoryPage;
+
+ private NewModelPage newModelPage;
+
+ public CDONewModelStorageProvider() {
+ super();
+ }
+
+ @Override
+ public boolean canHandle(IStructuredSelection initialSelection) {
+ for (Object next : initialSelection.toList()) {
+ if (CDOUtils.isCDOObject(adapt(next, EObject.class))) {
+ return true;
+ }
+
+ if (adapt(next, CDOCheckout.class) != null) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ @Override
+ public void init(CreateModelWizard wizard, IStructuredSelection selection) {
+ super.init(wizard, selection);
+
+ this.wizard = wizard;
+ newModelPage = createNewModelPage(selection);
+ createSelectProviderPart();
+
+ CDOCheckout checkout = getRepository(selection);
+ if (checkout != null) {
+ bus.post(checkout);
+ }
+ newDiagramCategoryPage = createNewArchitectureContextPage(selection);
+ }
+
+ /**
+ * Gets the contextual repository, if any, from a selection.
+ *
+ * @param selection
+ * a selection
+ *
+ * @return the repository that is or contains the {@code selection}
+ */
+ static CDOCheckout getRepository(IStructuredSelection selection) {
+ CDOCheckout result = null;
+
+ if (!selection.isEmpty()) {
+ result = adapt(selection.getFirstElement(), CDOCheckout.class);
+ if (result == null) {
+ CDOResourceNode node = adapt(selection.getFirstElement(), CDOResourceNode.class);
+ if (node == null) {
+ EObject object = adapt(selection.getFirstElement(), EObject.class);
+ if (object != null) {
+ CDOObject cdo = CDOUtils.getCDOObject(object);
+ if (cdo != null) {
+ node = cdo.cdoResource();
+ }
+ }
+ }
+
+ if (node != null) {
+ result = CDOExplorerUtil.getCheckout(node.getURI());
+ }
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public List<? extends IWizardPage> createPages() {
+ if (newModelPage == null && newDiagramCategoryPage == null) {
+ return Collections.emptyList();
+ }
+
+ return Arrays.asList(newDiagramCategoryPage, newModelPage);
+ }
+
+ @Override
+ public SelectArchitectureContextPage getArchitectureContextPage() {
+ return newDiagramCategoryPage;
+ }
+
+
+ /**
+ * Creates the new model page, if required.
+ *
+ * @param selection
+ * the selection
+ *
+ * @return the new model page, or {@code null} if none
+ */
+ protected NewModelPage createNewModelPage(IStructuredSelection selection) {
+ if (wizard.isCreateProjectWizard() || wizard.isCreateMultipleModelsWizard()) {
+
+ return null;
+ }
+
+ if (isCreateFromExistingDomainModel()) {
+ URI uri = getSelectedResourceURI(selection);
+ if (uri != null) {
+ uri = uri.trimFileExtension().appendFileExtension(wizard.getDiagramFileExtension(null));
+ return new NewDiagramForExistingModelPage(selection, wizard.getModelKindName(), bus, uri.lastSegment());
+ }
+ }
+
+ return new NewModelPage(selection, bus, wizard.getModelKindName());
+ }
+
+ protected boolean isCreateFromExistingDomainModel() {
+ return wizard.isInitModelWizard() && ((InitModelWizard) wizard).isCreateFromExistingDomainModel();
+ }
+
+ @Override
+ public URI createNewModelURI(String categoryId) {
+ return newModelPage.createNewModelResourceURI();
+ }
+
+ @Override
+ public IEditorInput createEditorInput(URI uri) {
+ return new PapyrusCDOEditorInput(uri, uri.trimFileExtension().lastSegment());
+ }
+
+ private SelectArchitectureContextPage createNewArchitectureContextPage(IStructuredSelection selection) {
+ if (wizard.isCreateProjectWizard() || wizard.isCreateMultipleModelsWizard() || !wizard.isPapyrusRootWizard()) {
+ return null;
+ }
+
+ return new SelectArchitectureContextPage();
+ }
+
+
+ //
+ // Nested types
+ //
+
+ /**
+ * This is the NewDiagramForExistingModelPage type. Enjoy.
+ */
+ protected static class NewDiagramForExistingModelPage extends NewModelPage {
+
+ /** The my diagram resource name. */
+ private final String myDiagramResourceName;
+
+ /**
+ * Instantiates a new new diagram for existing model page.
+ *
+ * @param selection
+ * the selection
+ * @param modelKindName
+ * the user-presentable (translatable) name of the kind of
+ * model to create
+ * @param bus
+ * an event bus for posting events
+ * @param defaultResourceName
+ * the default resource name
+ */
+ public NewDiagramForExistingModelPage(IStructuredSelection selection, String modelKindName, EventBus bus, String defaultResourceName) {
+
+ super(selection, bus, modelKindName);
+
+ myDiagramResourceName = defaultResourceName;
+ setTitle(org.eclipse.papyrus.uml.diagram.wizards.messages.Messages.InitModelWizard_init_papyrus_model);
+ setDescription(org.eclipse.papyrus.uml.diagram.wizards.messages.Messages.InitModelWizard_init_papyrus_model_desc);
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+
+ setNewResourceName(myDiagramResourceName);
+ }
+
+ @Override
+ protected void validatePage() {
+ super.validatePage();
+
+ if (getMessageType() < ERROR) {
+ if (!myDiagramResourceName.equals(getNewResourceName())) {
+ setMessage(NLS.bind(org.eclipse.papyrus.uml.diagram.wizards.messages.Messages.InitModelWizard_diagram_name_is_different_from_domain_model, myDiagramResourceName), ERROR);
+ setPageComplete(false);
+ }
+ }
+ };
+
+ }
+}

Back to the top