diff options
author | cdamus | 2013-02-22 15:41:09 +0000 |
---|---|---|
committer | cdamus | 2013-02-22 15:41:09 +0000 |
commit | 634ac7e13fd821bb821a9f3f1905dde01d855f7f (patch) | |
tree | 7a913b23da3abcf011a5f1833d1bce68a6814d28 | |
parent | df81c9f5ab24b060ce6ca1f39a15caa74a98d754 (diff) | |
download | org.eclipse.papyrus-634ac7e13fd821bb821a9f3f1905dde01d855f7f.tar.gz org.eclipse.papyrus-634ac7e13fd821bb821a9f3f1905dde01d855f7f.tar.xz org.eclipse.papyrus-634ac7e13fd821bb821a9f3f1905dde01d855f7f.zip |
Support init from existing domain model in CDO repository.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=401197
7 files changed, 162 insertions, 37 deletions
diff --git a/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java b/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java index 6a01c0f685a..e43d60b3f2b 100644 --- a/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java +++ b/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java @@ -87,6 +87,7 @@ public class CDOAwareModelSet @Override public Resource createResource(URI uri, String contentType) { + initTransaction(uri); return super.createResource(uri, contentType); } diff --git a/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java b/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java index d0995a5bbaf..35a2a1b02dd 100644 --- a/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java +++ b/plugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java @@ -145,20 +145,22 @@ public class PapyrusRepositoryManager } public IPapyrusRepository getRepositoryForURI(URI uri) { - String uuid = CDOURIUtil.extractRepositoryUUID(uri); - IPapyrusRepository result = null; - for (IInternalPapyrusRepository next : repositories.values()) { - CDOSession session = next.getCDOSession(); - if ((session != null) - && Objects.equal(uuid, session.getRepositoryInfo().getUUID())) { - - result = next; - break; + if (CDOUtils.isCDOURI(uri)) { + String uuid = CDOURIUtil.extractRepositoryUUID(uri); + + for (IInternalPapyrusRepository next : repositories.values()) { + CDOSession session = next.getCDOSession(); + if ((session != null) + && Objects.equal(uuid, session.getRepositoryInfo().getUUID())) { + + result = next; + break; + } } } - + return result; } diff --git a/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java b/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java index 7f153e579cb..593d8e2bd96 100644 --- a/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java +++ b/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/CDONewModelStorageProvider.java @@ -12,6 +12,7 @@ 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; @@ -31,6 +32,8 @@ import org.eclipse.papyrus.cdo.internal.core.PapyrusRepositoryManager; import org.eclipse.papyrus.uml.diagram.wizards.AbstractNewModelStorageProvider; import org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard; import org.eclipse.papyrus.uml.diagram.wizards.InitModelWizard; +import org.eclipse.papyrus.uml.diagram.wizards.Messages; +import org.eclipse.swt.widgets.Composite; import com.google.common.base.Supplier; import com.google.common.eventbus.EventBus; @@ -156,7 +159,12 @@ public class CDONewModelStorageProvider return null; } - // TODO: Handle creation from existing domain model + if (isCreateFromExistingDomainModel()) { + URI uri = getSelectedResourceURI(selection).trimFileExtension() + .appendFileExtension(wizard.getDiagramFileExtension(null)); + return new NewDiagramForExistingModelPage(selection, + wizard.getModelKindName(), bus, uri.lastSegment()); + } return new NewModelPage(selection, bus, wizard.getModelKindName()); } @@ -185,4 +193,64 @@ public class CDONewModelStorageProvider return selectProviderPart; } + + // + // Nested types + // + + /** + * This is the NewDiagramForExistingModelPage type. Enjoy. + */ + protected static class NewDiagramForExistingModelPage + extends NewModelPage { + + /** The my diagram resource name. */ + private 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(Messages.InitModelWizard_init_papyrus_model); + setDescription(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( + Messages.bind( + Messages.InitModelWizard_diagram_name_is_different_from_domain_model, + myDiagramResourceName), ERROR); + setPageComplete(false); + } + } + }; + + } } diff --git a/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/NewModelPage.java b/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/NewModelPage.java index f9ef94ab75b..e18fe8fd609 100644 --- a/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/NewModelPage.java +++ b/plugins/cdo/org.eclipse.papyrus.cdo.uml.diagram.ui/src/org/eclipse/papyrus/cdo/uml/diagram/internal/ui/wizards/NewModelPage.java @@ -14,7 +14,6 @@ package org.eclipse.papyrus.cdo.uml.diagram.internal.ui.wizards; import static org.eclipse.papyrus.uml.diagram.wizards.utils.WizardsHelper.adapt; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.emf.cdo.eresource.CDOResourceFolder; import org.eclipse.emf.cdo.eresource.CDOResourceNode; @@ -265,7 +264,7 @@ public class NewModelPage if (path.equals("")) { // it's a resource in the root - path = "/"; + result = "/" + name; } else { StringBuilder buf = new StringBuilder(); diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/InitModelWizard.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/InitModelWizard.java index e6dc13d4dc5..2f1acea35f2 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/InitModelWizard.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/InitModelWizard.java @@ -14,7 +14,7 @@ *****************************************************************************/
package org.eclipse.papyrus.uml.diagram.wizards;
-import static org.eclipse.papyrus.uml.diagram.wizards.utils.WizardsHelper.getSelectedFile;
+import static org.eclipse.papyrus.uml.diagram.wizards.utils.WizardsHelper.getSelectedResourceURI;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.util.URI;
@@ -59,10 +59,10 @@ public class InitModelWizard extends CreateModelWizard { */
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
- IFile file = getSelectedFile(selection);
- isInitFromExistingDomainModel = isSupportedDomainModelFile(file);
+ URI uri = getSelectedResourceURI(selection);
+ isInitFromExistingDomainModel = isSupportedDomainModelResource(uri);
super.init(workbench, selection);
- selectRootElementPage = createSelectRootElementPage(file);
+ selectRootElementPage = createSelectRootElementPage(selection);
if(isCreateFromExistingDomainModel()) {
// Init Model not Create a new one
setWindowTitle(Messages.InitModelWizard_init_papyrus_diagram);
@@ -72,16 +72,16 @@ public class InitModelWizard extends CreateModelWizard { /**
* Creates the select root element page.
*
- * @param file
- * the file
+ * @param selection
+ * the initial workbench selection
* @return the select root element page
*/
- protected SelectRootElementPage createSelectRootElementPage(IFile file) {
+ protected SelectRootElementPage createSelectRootElementPage(IStructuredSelection selection) {
if(!isCreateFromExistingDomainModel()) {
// create model - nothing to choose from
return null;
}
- return new SelectRootElementPage(file);
+ return new SelectRootElementPage(selection);
}
/**
@@ -124,7 +124,21 @@ public class InitModelWizard extends CreateModelWizard { public static boolean isSupportedDomainModelFile(IFile file) {
// if(file != null && UmlModel.UML_FILE_EXTENSION.equals(file.getFileExtension())){System.err.println("is SupportedDomainModelFile");}
// else {System.err.println("not SupportedDomainModelFile");}
- return file != null && UmlModel.UML_FILE_EXTENSION.equals(file.getFileExtension());
+ return file != null
+ && isSupportedDomainModelResource(URI.createPlatformResourceURI(
+ file.getFullPath().toString(), true));
+ }
+
+ /**
+ * Returns true if the resource can be served as a model model for the diagram.
+ *
+ * @param uri
+ * the resource's URI
+ * @return true, if is supported domain model resource
+ */
+ public static boolean isSupportedDomainModelResource(URI uri) {
+ return (uri != null)
+ && UmlModel.UML_FILE_EXTENSION.equals(uri.fileExtension());
}
/**
@@ -135,9 +149,8 @@ public class InitModelWizard extends CreateModelWizard { * @return true, if is supported domain model file
*/
public static boolean isSupportedDomainModelFile(IStructuredSelection sselection) {
- IFile file = getSelectedFile(sselection);
- // if(!isSupportedDomainModelFile(file)){System.err.println("not SupportedDomainModelFile");}
- return isSupportedDomainModelFile(file);
+ URI uri = getSelectedResourceURI(sselection);
+ return isSupportedDomainModelResource(uri);
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/SelectRootElementPage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/SelectRootElementPage.java index eba56b93c29..4a637e30613 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/SelectRootElementPage.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/SelectRootElementPage.java @@ -10,10 +10,12 @@ *******************************************************************************/ package org.eclipse.papyrus.uml.diagram.wizards.pages; +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.ArrayList; import java.util.List; -import org.eclipse.core.resources.IFile; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.common.util.WrappedException; @@ -66,15 +68,24 @@ public class SelectRootElementPage extends WizardPage { /** * Constructor. * - * @param file the file + * @param selection the initial selection from which to get the resource for root element */ - public SelectRootElementPage(IFile file) { + public SelectRootElementPage(IStructuredSelection selection) { super(PAGE_ID); setTitle(Messages.SelectRootElementPage_select_root_element_title); setDescription(Messages.SelectRootElementPage_select_root_element_desc); - myDomainModelResource = getResourceForFile(file); - + Resource resource = null; + if (!selection.isEmpty()) { + resource = adapt(selection.getFirstElement(), Resource.class); + if (resource == null) { + URI uri = getSelectedResourceURI(selection); + if (uri != null) { + resource = getResourceForURI(uri); + } + } + } + myDomainModelResource = resource; } /** @@ -147,24 +158,24 @@ public class SelectRootElementPage extends WizardPage { } /** - * Gets the resource for file. + * Gets the resource for a URI. * - * @param file the file - * @return the resource for file + * @param uri the URI of the resource + * @return the resource */ - private Resource getResourceForFile(IFile file) { - if (file == null) { + private Resource getResourceForURI(URI uri) { + if (uri == null) { // log return null; } ModelSet modelSet = new ModelSet(); Resource resource = null ; try { - resource = modelSet.getResource(URI.createPlatformResourceURI(file.getFullPath().toString(), true), true); + resource = modelSet.getResource(uri, true); } catch (WrappedException e) { if (ModelUtils.isDegradedModeAllowed(e.getCause())){ - resource = modelSet.getResource(URI.createPlatformResourceURI(file.getFullPath().toString(), true), false); + resource = modelSet.getResource(uri, true); if (resource == null){ throw e; } diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/utils/WizardsHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/utils/WizardsHelper.java index 87adb64b21f..e88f0928917 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/utils/WizardsHelper.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/utils/WizardsHelper.java @@ -16,6 +16,9 @@ package org.eclipse.papyrus.uml.diagram.wizards.utils; import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jface.viewers.IStructuredSelection;
/**
@@ -72,4 +75,32 @@ public class WizardsHelper { }
return null;
}
+
+ /**
+ * Returns the URI of the first resource or file from the given selection.
+ *
+ * @param selection
+ * the selection
+ * @return the URI of the selected resource
+ */
+ public static URI getSelectedResourceURI(IStructuredSelection selection) {
+ if ((selection != null) && !selection.isEmpty()) {
+ IFile file = adapt(selection.getFirstElement(), IFile.class);
+ if (file != null) {
+ return URI.createPlatformResourceURI(file.getFullPath().toString(), true);
+ }
+ Resource resource = adapt(selection.getFirstElement(), Resource.class);
+ if (resource == null) {
+ EObject object = adapt(selection.getFirstElement(), EObject.class);
+ if (object != null) {
+ resource = object.eResource();
+ }
+ }
+
+ if (resource != null) {
+ return resource.getURI();
+ }
+ }
+ return null;
+ }
}
|