diff options
Diffstat (limited to 'extraplugins')
26 files changed, 535 insertions, 54 deletions
diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF index 0c57fd13be2..955e6ebc178 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF @@ -4,17 +4,7 @@ Export-Package: org.eclipse.papyrus.cdo.core, org.eclipse.papyrus.cdo.core.importer, org.eclipse.papyrus.cdo.core.resource, org.eclipse.papyrus.cdo.core.util, - org.eclipse.papyrus.cdo.internal.core; - x-friends:="org.eclipse.papyrus.cdo.core.tests, - org.eclipse.papyrus.cdo.ui, - org.eclipse.papyrus.cdo.ui.tests, - org.eclipse.papyrus.cdo.uml.diagram.ui, - org.eclipse.papyrus.cdo.uml.ui, - org.eclipse.papyrus.cdo.ui.customization.properties, - org.eclipse.papyrus.cdo.uml.ui.tests, - org.eclipse.papyrus.cdo.uml.search.ui, - org.eclipse.papyrus.cdo.uml.search.ui.tests, - org.eclipse.papyrus.cdo.ui.hyperlink", + org.eclipse.papyrus.cdo.internal.core;x-friends:="org.eclipse.papyrus.cdo.core.tests, org.eclipse.papyrus.cdo.ui, org.eclipse.papyrus.cdo.ui.tests, org.eclipse.papyrus.cdo.uml.diagram.ui, org.eclipse.papyrus.cdo.uml.ui, org.eclipse.papyrus.cdo.ui.customization.properties, org.eclipse.papyrus.cdo.uml.ui.tests, org.eclipse.papyrus.cdo.uml.search.ui, org.eclipse.papyrus.cdo.uml.search.ui.tests, org.eclipse.papyrus.cdo.ui.hyperlink", org.eclipse.papyrus.cdo.internal.core.controlmode;x-friends:="org.eclipse.papyrus.cdo.ui,org.eclipse.papyrus.cdo.core.tests", org.eclipse.papyrus.cdo.internal.core.exporter;x-friends:="org.eclipse.papyrus.cdo.core.tests,org.eclipse.papyrus.cdo.ui", org.eclipse.papyrus.cdo.internal.core.expressions;x-friends:="org.eclipse.papyrus.cdo.core.tests,org.eclipse.papyrus.cdo.ui", @@ -32,16 +22,16 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Require-Bundle: org.eclipse.core.runtime, org.eclipse.emf.ecore;visibility:=reexport, org.eclipse.emf.ecore.xmi;visibility:=reexport, - org.eclipse.emf.cdo;bundle-version="[4.2.0,5.0.0)";visibility:=reexport, - org.eclipse.papyrus.infra.core;bundle-version="0.10.1";visibility:=reexport, + org.eclipse.emf.cdo;visibility:=reexport;bundle-version="[4.2.0,5.0.0)", + org.eclipse.papyrus.infra.core;visibility:=reexport;bundle-version="0.10.1", org.eclipse.papyrus.infra.core.log;bundle-version="0.10.1", - org.eclipse.papyrus.infra.services.resourceloading;bundle-version="0.10.1";visibility:=reexport, - org.eclipse.papyrus.infra.emf.readonly;bundle-version="0.10.1";visibility:=reexport, + org.eclipse.papyrus.infra.services.resourceloading;visibility:=reexport;bundle-version="0.10.1", + org.eclipse.papyrus.infra.emf.readonly;visibility:=reexport;bundle-version="0.10.1", org.eclipse.emf.workspace;bundle-version="[1.5.1,2.0.0)", org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="0.10.1", org.eclipse.emf.cdo.dawn;bundle-version="[2.0.0,3.0.0)", org.eclipse.emf.cdo.dawn.gmf;bundle-version="[2.1.0,3.0.0)", - org.eclipse.emf.transaction;bundle-version="[1.4.0,2.0.0)";visibility:=reexport, + org.eclipse.emf.transaction;visibility:=reexport;bundle-version="[1.4.0,2.0.0)", org.eclipse.gmf.runtime.notation;bundle-version="[1.5.0,2.0.0)", org.eclipse.equinox.security;bundle-version="[1.1.100,2.0.0)", org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)", diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/build.properties b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/build.properties index 10b29360b0b..5eb998f3bd7 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/build.properties +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/build.properties @@ -15,6 +15,7 @@ bin.includes = .,\ plugin.xml,\ plugin.properties,\ about.html +bin.excludes = model/*.ecorediag jars.compile.order = . source.. = src/,\ src-gen/ diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecore b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecore index 05053b86e0e..b400c2ec957 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecore +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecore @@ -14,5 +14,6 @@ </eAnnotations> </eStructuralFeatures> <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="uUID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> </eClassifiers> </ecore:EPackage> diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecorediag b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecorediag index 7e36e89e7d3..3776998e687 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecorediag +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.ecorediag @@ -31,6 +31,10 @@ <element xmi:type="ecore:EAttribute" href="repositories.ecore#//Repository/uRL"/> <layoutConstraint xmi:type="notation:Location" xmi:id="_dScfAV5XEeKVz4CWs4rkiA"/> </children> + <children xmi:type="notation:Node" xmi:id="_qfYY4CVhEeOe3PUVH5W0Qg" type="2001"> + <element xmi:type="ecore:EAttribute" href="repositories.ecore#//Repository/uUID"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_qfYY4SVhEeOe3PUVH5W0Qg"/> + </children> <styles xmi:type="notation:DrawerStyle" xmi:id="_P7MKBV5XEeKVz4CWs4rkiA"/> <styles xmi:type="notation:SortingStyle" xmi:id="_P7MKBl5XEeKVz4CWs4rkiA"/> <styles xmi:type="notation:FilteringStyle" xmi:id="_P7MKB15XEeKVz4CWs4rkiA"/> diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.genmodel b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.genmodel index cecd378a307..ea5027fefd1 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.genmodel +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/model/repositories.genmodel @@ -15,6 +15,7 @@ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute repositories.ecore#//Repository/name"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute repositories.ecore#//Repository/uRL"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute repositories.ecore#//Repository/description"/> + <genFeatures createChild="false" ecoreFeature="ecore:EAttribute repositories.ecore#//Repository/uUID"/> </genClasses> </genPackages> </genmodel:GenModel> diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/RepositoriesPackage.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/RepositoriesPackage.java index 1bd68949237..f4a4423e9ec 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/RepositoriesPackage.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/RepositoriesPackage.java @@ -141,13 +141,22 @@ public interface RepositoriesPackage extends EPackage { int REPOSITORY__DESCRIPTION = 2; /** + * The feature id for the '<em><b>UUID</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int REPOSITORY__UUID = 3; + + /** * The number of structural features of the '<em>Repository</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int REPOSITORY_FEATURE_COUNT = 3; + int REPOSITORY_FEATURE_COUNT = 4; /** * The number of operations of the '<em>Repository</em>' class. @@ -224,6 +233,17 @@ public interface RepositoriesPackage extends EPackage { EAttribute getRepository_Description(); /** + * Returns the meta object for the attribute '{@link org.eclipse.papyrus.cdo.internal.core.repositories.Repository#getUUID <em>UUID</em>}'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the attribute '<em>UUID</em>'. + * @see org.eclipse.papyrus.cdo.internal.core.repositories.Repository#getUUID() + * @see #getRepository() + * @generated + */ + EAttribute getRepository_UUID(); + + /** * Returns the factory that creates the instances of the model. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -298,6 +318,14 @@ public interface RepositoriesPackage extends EPackage { */ EAttribute REPOSITORY__DESCRIPTION = eINSTANCE.getRepository_Description(); + /** + * The meta object literal for the '<em><b>UUID</b></em>' attribute feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EAttribute REPOSITORY__UUID = eINSTANCE.getRepository_UUID(); + } } //RepositoriesPackage diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/Repository.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/Repository.java index f7fc49f775b..06754111071 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/Repository.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/Repository.java @@ -25,6 +25,7 @@ import org.eclipse.emf.ecore.EObject; * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.Repository#getName <em>Name</em>}</li> * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.Repository#getURL <em>URL</em>}</li> * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.Repository#getDescription <em>Description</em>}</li> + * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.Repository#getUUID <em>UUID</em>}</li> * </ul> * </p> * @@ -112,4 +113,30 @@ public interface Repository extends EObject { */ void setDescription(String value); + /** + * Returns the value of the '<em><b>UUID</b></em>' attribute. + * <!-- begin-user-doc --> + * <p> + * If the meaning of the '<em>UUID</em>' attribute isn't clear, + * there really should be more of a description here... + * </p> + * <!-- end-user-doc --> + * @return the value of the '<em>UUID</em>' attribute. + * @see #setUUID(String) + * @see org.eclipse.papyrus.cdo.internal.core.repositories.RepositoriesPackage#getRepository_UUID() + * @model + * @generated + */ + String getUUID(); + + /** + * Sets the value of the '{@link org.eclipse.papyrus.cdo.internal.core.repositories.Repository#getUUID <em>UUID</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param value the new value of the '<em>UUID</em>' attribute. + * @see #getUUID() + * @generated + */ + void setUUID(String value); + } // Repository diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoriesPackageImpl.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoriesPackageImpl.java index 9d55633bddb..b863ded1c06 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoriesPackageImpl.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoriesPackageImpl.java @@ -165,6 +165,15 @@ public class RepositoriesPackageImpl extends EPackageImpl implements Repositorie * <!-- end-user-doc --> * @generated */ + public EAttribute getRepository_UUID() { + return (EAttribute)repositoryEClass.getEStructuralFeatures().get(3); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ public RepositoriesFactory getRepositoriesFactory() { return (RepositoriesFactory)getEFactoryInstance(); } @@ -195,6 +204,7 @@ public class RepositoriesPackageImpl extends EPackageImpl implements Repositorie createEAttribute(repositoryEClass, REPOSITORY__NAME); createEAttribute(repositoryEClass, REPOSITORY__URL); createEAttribute(repositoryEClass, REPOSITORY__DESCRIPTION); + createEAttribute(repositoryEClass, REPOSITORY__UUID); } /** @@ -234,6 +244,7 @@ public class RepositoriesPackageImpl extends EPackageImpl implements Repositorie initEAttribute(getRepository_Name(), ecorePackage.getEString(), "name", null, 1, 1, Repository.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ initEAttribute(getRepository_URL(), ecorePackage.getEString(), "uRL", null, 1, 1, Repository.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ initEAttribute(getRepository_Description(), ecorePackage.getEString(), "description", null, 0, 1, Repository.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ + initEAttribute(getRepository_UUID(), ecorePackage.getEString(), "uUID", null, 0, 1, Repository.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ // Create resource createResource(eNS_URI); diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoryImpl.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoryImpl.java index 404b6c558e0..2c30f85f077 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoryImpl.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src-gen/org/eclipse/papyrus/cdo/internal/core/repositories/impl/RepositoryImpl.java @@ -32,6 +32,7 @@ import org.eclipse.papyrus.cdo.internal.core.repositories.Repository; * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.impl.RepositoryImpl#getName <em>Name</em>}</li> * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.impl.RepositoryImpl#getURL <em>URL</em>}</li> * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.impl.RepositoryImpl#getDescription <em>Description</em>}</li> + * <li>{@link org.eclipse.papyrus.cdo.internal.core.repositories.impl.RepositoryImpl#getUUID <em>UUID</em>}</li> * </ul> * </p> * @@ -99,6 +100,26 @@ public class RepositoryImpl extends MinimalEObjectImpl.Container implements Repo protected String description = DESCRIPTION_EDEFAULT; /** + * The default value of the '{@link #getUUID() <em>UUID</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getUUID() + * @generated + * @ordered + */ + protected static final String UUID_EDEFAULT = null; + + /** + * The cached value of the '{@link #getUUID() <em>UUID</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getUUID() + * @generated + * @ordered + */ + protected String uUID = UUID_EDEFAULT; + + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated @@ -185,6 +206,27 @@ public class RepositoryImpl extends MinimalEObjectImpl.Container implements Repo * <!-- end-user-doc --> * @generated */ + public String getUUID() { + return uUID; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public void setUUID(String newUUID) { + String oldUUID = uUID; + uUID = newUUID; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, RepositoriesPackage.REPOSITORY__UUID, oldUUID, uUID)); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { @@ -194,6 +236,8 @@ public class RepositoryImpl extends MinimalEObjectImpl.Container implements Repo return getURL(); case RepositoriesPackage.REPOSITORY__DESCRIPTION: return getDescription(); + case RepositoriesPackage.REPOSITORY__UUID: + return getUUID(); } return super.eGet(featureID, resolve, coreType); } @@ -215,6 +259,9 @@ public class RepositoryImpl extends MinimalEObjectImpl.Container implements Repo case RepositoriesPackage.REPOSITORY__DESCRIPTION: setDescription((String)newValue); return; + case RepositoriesPackage.REPOSITORY__UUID: + setUUID((String)newValue); + return; } super.eSet(featureID, newValue); } @@ -236,6 +283,9 @@ public class RepositoryImpl extends MinimalEObjectImpl.Container implements Repo case RepositoriesPackage.REPOSITORY__DESCRIPTION: setDescription(DESCRIPTION_EDEFAULT); return; + case RepositoriesPackage.REPOSITORY__UUID: + setUUID(UUID_EDEFAULT); + return; } super.eUnset(featureID); } @@ -254,6 +304,8 @@ public class RepositoryImpl extends MinimalEObjectImpl.Container implements Repo return URL_EDEFAULT == null ? uRL != null : !URL_EDEFAULT.equals(uRL); case RepositoriesPackage.REPOSITORY__DESCRIPTION: return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description); + case RepositoriesPackage.REPOSITORY__UUID: + return UUID_EDEFAULT == null ? uUID != null : !UUID_EDEFAULT.equals(uUID); } return super.eIsSet(featureID); } @@ -274,6 +326,8 @@ public class RepositoryImpl extends MinimalEObjectImpl.Container implements Repo result.append(uRL); result.append(", description: "); //$NON-NLS-1$ result.append(description); + result.append(", uUID: "); //$NON-NLS-1$ + result.append(uUID); result.append(')'); return result.toString(); } diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/IInternalPapyrusRepositoryManager.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/IInternalPapyrusRepositoryManager.java index d56191076f4..4f20f4c5394 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/IInternalPapyrusRepositoryManager.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/IInternalPapyrusRepositoryManager.java @@ -38,12 +38,18 @@ public interface IInternalPapyrusRepositoryManager extends IPapyrusRepositoryMan // Specializations of inherited API // + @Override Collection<? extends IInternalPapyrusRepository> getRepositories(); + @Override IInternalPapyrusRepository createRepository(String url); + @Override IInternalPapyrusRepository getRepository(String url); + @Override IInternalPapyrusRepository getRepositoryForURI(URI uri); + IInternalPapyrusRepository getRepositoryForURI(URI uri, boolean connectedOnly); + } diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepository.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepository.java index 03ecc930b0b..c44e878c3a5 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepository.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepository.java @@ -62,6 +62,7 @@ import org.eclipse.papyrus.cdo.core.resource.CDOAwareModelSet; import org.eclipse.papyrus.cdo.core.resource.PapyrusCDOResourceFactory; import org.eclipse.papyrus.cdo.internal.core.repositories.Repository; +import com.google.common.base.Objects; import com.google.common.base.Predicate; import com.google.common.base.Strings; import com.google.common.collect.BiMap; @@ -109,10 +110,12 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn activate(); } + @Override public String getName() { return model.getName(); } + @Override public void setName(String name) { if(Strings.isNullOrEmpty(name)) { throw new IllegalArgumentException("null or empty name"); //$NON-NLS-1$ @@ -121,14 +124,17 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn model.setName(name); } + @Override public String getURL() { return model.getURL(); } + @Override public String getUsername() { return getSecureStorageValue("username"); //$NON-NLS-1$ } + @Override public void setUsername(String username) { if(username != null) { username = username.trim(); @@ -140,6 +146,7 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn setSecureStorageValue("username", username, false); //$NON-NLS-1$ } + @Override public String getPassword() { return getSecureStorageValue("password"); //$NON-NLS-1$ } @@ -168,6 +175,7 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn EncodingUtils.encodeSlashes(getURL())); } + @Override public void setPassword(String password) { setSecureStorageValue("password", password, true); //$NON-NLS-1$ } @@ -185,6 +193,7 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn } } + @Override public void clearCredentials() { ISecurePreferences store = SecurePreferencesFactory.getDefault(); String path = getSecureStorePath(); @@ -193,10 +202,12 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn } } + @Override public boolean isConnected() { return (session != null) && !session.isClosed(); } + @Override public void connect() { if(!isConnected()) { ICredentialsProvider2 creds = getCredentialsProvider(); @@ -234,6 +245,13 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn createReadOnlyView(new ResourceSetImpl()); fireRepositoryEvent(PapyrusRepositoryEvent.CONNECTED); + + // update the last known UUID in the model + String uuid = session.getRepositoryInfo().getUUID(); + if(!Objects.equal(uuid, model.getUUID())) { + model.setUUID(uuid); + PapyrusRepositoryManager.INSTANCE.saveRepositories(); + } } } finally { if(creds != null) { @@ -258,10 +276,12 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn return result; } + @Override public void disconnect() throws CommitException { if(isConnected()) { ImmutableList<ResourceSet> dirty = ImmutableList.copyOf(Iterables.filter(transactions.keySet(), new Predicate<ResourceSet>() { + @Override public boolean apply(ResourceSet input) { return transactions.get(input).isDirty(); } @@ -301,10 +321,12 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn } } + @Override public Collection<ResourceSet> getReadOnlyViews() { return Collections.unmodifiableCollection(readOnlyViews.keySet()); } + @Override public ResourceSet createReadOnlyView(ResourceSet resourceSet) { checkConnected(); @@ -328,10 +350,12 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn return result; } + @Override public Collection<ResourceSet> getTransactions() { return Collections.unmodifiableCollection(transactions.keySet()); } + @Override public ResourceSet createTransaction(ResourceSet resourceSet) { checkConnected(); @@ -343,14 +367,17 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn return result; } + @Override public CDOSession getCDOSession() { return session; } + @Override public CDOView getMasterView() { return masterView; } + @Override public CDOView getCDOView(ResourceSet resourceSet) { CDOView result = readOnlyViews.get(resourceSet); @@ -374,6 +401,7 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn return (CDOTransaction)view; } + @Override public void commit(ResourceSet transaction) throws CommitException { CDOView cdoView = getCDOView(transaction); @@ -384,11 +412,13 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn } } + @Override public void rollback(ResourceSet transaction) { CDOView cdoView = getCDOView(transaction); checkTransaction(cdoView).rollback(); } + @Override public void close(ResourceSet view) { CDOView cdoView = getCDOView(view); @@ -487,6 +517,7 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn if(masterViewListener == null) { masterViewListener = new IListener() { + @Override public void notifyEvent(IEvent event) { if(event instanceof CDOViewInvalidationEvent) { CDOViewInvalidationEvent inval = (CDOViewInvalidationEvent)event; @@ -507,18 +538,22 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn view.removeListener(getMasterViewListener()); } + @Override public void addResourceSetDisposalApprover(IResourceSetDisposalApprover approver) { approvers.addApprover(approver); } + @Override public void removeResourceSetDisposalApprover(IResourceSetDisposalApprover approver) { approvers.removeApprover(approver); } + @Override public void addPapyrusRepositoryListener(IPapyrusRepositoryListener listener) { listeners.addIfAbsent(listener); } + @Override public void removePapyrusRepositoryListener(IPapyrusRepositoryListener listener) { listeners.remove(listener); } @@ -545,6 +580,7 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn return !isActive() || !isConnected() || (masterView == null) || masterView.isEmpty(); } + @Override public CDOResourceNode[] getElements() { CDOResourceNode[] result = NO_RESOURCE_NODES; @@ -625,6 +661,7 @@ public class PapyrusRepository extends Container<CDOResourceNode> implements IIn // IAdaptable protocol // + @Override public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) { Object result = null; diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java index 359790fcf02..d3fc0db52e0 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/PapyrusRepositoryManager.java @@ -85,14 +85,17 @@ public class PapyrusRepositoryManager extends Container<IPapyrusRepository> impl return result; } + @Override public IManagedContainer getSessionsContainer() { return container; } + @Override public Collection<? extends IInternalPapyrusRepository> getRepositories() { return Collections.unmodifiableCollection(repositories.values()); } + @Override public IInternalPapyrusRepository createRepository(String url) { if(getRepository(url) != null) { throw new IllegalArgumentException("repository already exists"); //$NON-NLS-1$ @@ -110,6 +113,7 @@ public class PapyrusRepositoryManager extends Container<IPapyrusRepository> impl return result; } + @Override public void setURL(IPapyrusRepository repository, String url) { if(!Objects.equal(repository.getURL(), url)) { if(getRepository(url) != null) { @@ -127,6 +131,7 @@ public class PapyrusRepositoryManager extends Container<IPapyrusRepository> impl } } + @Override public void removeRepository(IPapyrusRepository repository) { if(repository.isConnected()) { throw new IllegalArgumentException("repository is still connected"); //$NON-NLS-1$ @@ -138,11 +143,18 @@ public class PapyrusRepositoryManager extends Container<IPapyrusRepository> impl fireElementRemovedEvent(repository); } + @Override public IInternalPapyrusRepository getRepository(String url) { return repositories.get(url); } + @Override public IInternalPapyrusRepository getRepositoryForURI(URI uri) { + return getRepositoryForURI(uri, true); + } + + @Override + public IInternalPapyrusRepository getRepositoryForURI(URI uri, boolean connectedOnly) { IInternalPapyrusRepository result = null; if(CDOUtils.isCDOURI(uri)) { @@ -151,16 +163,27 @@ public class PapyrusRepositoryManager extends Container<IPapyrusRepository> impl for(IInternalPapyrusRepository next : repositories.values()) { CDOSession session = next.getCDOSession(); if((session != null) && Objects.equal(uuid, session.getRepositoryInfo().getUUID())) { - result = next; break; } } + + if((result == null) && !connectedOnly) { + // guess based on the last known UUIDs + for(IInternalPapyrusRepository next : repositories.values()) { + PapyrusRepository repo = CDOUtils.tryCast(next, PapyrusRepository.class); + if((repo != null) && Objects.equal(uuid, repo.getModel().getUUID())) { + result = next; + break; + } + } + } } return result; } + @Override public void saveRepositories() { if(storage != null) { try { @@ -248,15 +271,18 @@ public class PapyrusRepositoryManager extends Container<IPapyrusRepository> impl return result; } + @Override public ICredentialsProviderFactory getCredentialsProviderFactory() { return credentialsProviderFactory; } + @Override public void setCredentialsProviderFactory(ICredentialsProviderFactory credentialsProviderFactory) { this.credentialsProviderFactory = credentialsProviderFactory; } + @Override public IInternalPapyrusRepository getRepository(CDOView view) { IInternalPapyrusRepository result = null; @@ -284,6 +310,7 @@ public class PapyrusRepositoryManager extends Container<IPapyrusRepository> impl return !isActive() || repositories.isEmpty(); } + @Override public IPapyrusRepository[] getElements() { return Iterables.toArray(repositories.values(), IPapyrusRepository.class); } diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/META-INF/MANIFEST.MF b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/META-INF/MANIFEST.MF index 5f67367a173..4b729c1bdb8 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/META-INF/MANIFEST.MF +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/META-INF/MANIFEST.MF @@ -13,10 +13,17 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.105.0", org.eclipse.papyrus.infra.emf;bundle-version="0.10.1", org.eclipse.papyrus.cdo.ui;bundle-version="0.10.1", org.eclipse.papyrus.infra.services.labelprovider;bundle-version="0.10.1", - org.eclipse.papyrus.infra.widgets;bundle-version="0.10.1" + org.eclipse.papyrus.infra.widgets;bundle-version="0.10.1", + org.eclipse.papyrus.infra.gmfdiag.dnd;bundle-version="0.10.1", + org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="0.10.1", + org.eclipse.gmf.runtime.common.core;bundle-version="[1.7.0,2.0.0)", + org.eclipse.gmf.runtime.notation;bundle-version="[1.7.0,2.0.0)", + org.eclipse.gmf.runtime.diagram.ui;bundle-version="[1.7.0,2.0.0)", + org.eclipse.papyrus.infra.gmfdiag.common Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin Import-Package: com.google.common.base;version="10.0.0", com.google.common.collect;version="10.0.0" +Export-Package: org.eclipse.papyrus.cdo.internal.ui.hyperlink;x-internal:=true diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/plugin.xml b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/plugin.xml index 506d0c21ce0..096e00b8d9f 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/plugin.xml +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/plugin.xml @@ -16,5 +16,11 @@ provider="org.eclipse.papyrus.cdo.internal.ui.hyperlink.CDOResourceHyperlinkLabelProvider"> </labelProvider> </extension> + <extension + point="org.eclipse.papyrus.infra.gmfdiag.dnd.dropStrategy"> + <strategy + strategy="org.eclipse.papyrus.cdo.internal.ui.hyperlink.CDOResourceURIDropStrategy"> + </strategy> + </extension> </plugin> diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/CDOResourceHyperlink.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/CDOResourceHyperlink.java index fb9a1cc73c8..8df258f961a 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/CDOResourceHyperlink.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/CDOResourceHyperlink.java @@ -72,9 +72,9 @@ public class CDOResourceHyperlink extends HyperLinkObject { // open the appropriate editor URI uri = getHyperlink(); - IInternalPapyrusRepository repo = PapyrusRepositoryManager.INSTANCE.getRepositoryForURI(uri); + IInternalPapyrusRepository repo = PapyrusRepositoryManager.INSTANCE.getRepositoryForURI(uri, false); if(repo == null) { - MessageDialog.openError(UIUtil.getActiveWorkbenchWindow().getShell(), Messages.CDOResourceHyperlink_openError, Messages.CDOResourceHyperlink_noSuchRepo); + MessageDialog.openError(UIUtil.getActiveWorkbenchWindow().getShell(), Messages.CDOResourceHyperlink_openError, Messages.CDOResourceHyperlink_notConnected); } else if(!repo.isConnected()) { repo.connect(); if(!repo.isConnected()) { diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/CDOResourceURIDropStrategy.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/CDOResourceURIDropStrategy.java new file mode 100644 index 00000000000..107487424d4 --- /dev/null +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/CDOResourceURIDropStrategy.java @@ -0,0 +1,116 @@ +/***************************************************************************** + * Copyright (c) 2013 CEA LIST. + * + * 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.cdo.internal.ui.hyperlink; + +import java.util.List; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.Request; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.cdo.internal.ui.dnd.CDOResourceURITransferData; +import org.eclipse.papyrus.commands.Activator; +import org.eclipse.papyrus.infra.gmfdiag.common.helper.SemanticElementHelper; +import org.eclipse.papyrus.infra.gmfdiag.dnd.strategy.TransactionalDropStrategy; +import org.eclipse.swt.graphics.Image; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; + + +/** + * A drop strategy that extracts URIs of CDO resources from an Ecore representation of a {@link CDOResourceURITransferData} to create hyperlinks. + */ +public class CDOResourceURIDropStrategy extends TransactionalDropStrategy { + + private static final String ID = Activator.PLUGIN_ID + ".cdoResourceURI"; //$NON-NLS-1$ + + public CDOResourceURIDropStrategy() { + super(); + } + + @Override + public String getLabel() { + return Messages.DropStrategy_label; + } + + @Override + public String getDescription() { + return Messages.DropStrategy_desc; + } + + @Override + public Image getImage() { + return null; + } + + @Override + public String getID() { + return ID; + } + + @Override + public int getPriority() { + return 0; + } + + @Override + protected Command doGetCommand(Request request, EditPart targetEditPart) { + if(request instanceof DropObjectsRequest) { + View view = getTargetView(targetEditPart); + if(view == null) { + return null; + } + + final View mainView = SemanticElementHelper.findPrimaryView(view); + if(mainView instanceof Diagram) { + // don't create hyperlinks on the diagram surface + return null; + } + + final DropObjectsRequest dropRequest = (DropObjectsRequest)request; + List<URI> hyperlinkURIs = null; + + for(EObject next : Iterables.filter(dropRequest.getObjects(), EObject.class)) { + if(CDOResourceURITransferData.isCDOResourceURITransferData(next)) { + if(hyperlinkURIs == null) { + hyperlinkURIs = Lists.newArrayListWithCapacity(dropRequest.getObjects().size()); + } + hyperlinkURIs.addAll(CDOResourceURITransferData.fromEObject(next).getURIs()); + } + } + + if(hyperlinkURIs != null) { + final TransactionalEditingDomain domain = getTransactionalEditingDomain(targetEditPart); + + final List<URI> _hyperlinkURIs = hyperlinkURIs; + return new Command() { + + @Override + public void execute() { + for(URI next : _hyperlinkURIs) { + new CreateCDOResourceHyperlinkCommand(domain, mainView, next.lastSegment(), next, false).execute(); + } + } + }; + } + } + + return null; + } + +} diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/Messages.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/Messages.java index 74888750ec2..4f3352338a1 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/Messages.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/Messages.java @@ -36,6 +36,9 @@ public class Messages extends NLS { public static String CDOResourceHyperlinkLabelProvider_tipAndURI; public static String CDOResourceHyperlinkLabelProvider_uriOnly; + public static String DropStrategy_desc; + + public static String DropStrategy_label; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/messages.properties b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/messages.properties index 7e1167de003..eef17e4fba5 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/messages.properties +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui.hyperlink/src/org/eclipse/papyrus/cdo/internal/ui/hyperlink/messages.properties @@ -7,3 +7,5 @@ CDOResourceHyperlinkEditorShell_title=Browse Model Repository CDOResourceHyperlinkHelper_name=Document in model repository CDOResourceHyperlinkLabelProvider_tipAndURI={0} - {1} CDOResourceHyperlinkLabelProvider_uriOnly={1} +DropStrategy_desc=Create hyperlinks in a diagram to documents in model repositories +DropStrategy_label=Create hyperlinks diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/.settings/org.eclipse.core.resources.prefs b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/.settings/org.eclipse.core.resources.prefs index 6fa757c6f52..c2dc252dd80 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/.settings/org.eclipse.core.resources.prefs +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,4 @@ eclipse.preferences.version=1 +encoding//model/DND.ecore=UTF-8 +encoding//model/DND.ecorediag=UTF-8 encoding//src/org/eclipse/papyrus/cdo/internal/ui/l10n/messages.properties=ISO-8859-1 diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/META-INF/MANIFEST.MF b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/META-INF/MANIFEST.MF index 2309e75fa88..f966cd3efcc 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/META-INF/MANIFEST.MF +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/META-INF/MANIFEST.MF @@ -27,7 +27,7 @@ Export-Package: org.eclipse.papyrus.cdo.internal.ui;x-friends:="org.eclipse.papy org.eclipse.papyrus.cdo.internal.ui.adapters;x-friends:="org.eclipse.papyrus.cdo.ui.tests", org.eclipse.papyrus.cdo.internal.ui.decorators;x-friends:="org.eclipse.papyrus.cdo.ui.tests", org.eclipse.papyrus.cdo.internal.ui.dialogs;x-friends:="org.eclipse.papyrus.cdo.ui.tests,org.eclipse.papyrus.cdo.ui.customization.properties,org.eclipse.papyrus.cdo.ui.hyperlink", - org.eclipse.papyrus.cdo.internal.ui.dnd;x-friends:="org.eclipse.papyrus.cdo.ui.tests", + org.eclipse.papyrus.cdo.internal.ui.dnd;x-friends:="org.eclipse.papyrus.cdo.ui.hyperlink,org.eclipse.papyrus.cdo.ui.tests", org.eclipse.papyrus.cdo.internal.ui.editors;x-friends:="org.eclipse.papyrus.cdo.ui.tests,org.eclipse.papyrus.cdo.uml.search.ui,org.eclipse.papyrus.cdo.ui.hyperlink", org.eclipse.papyrus.cdo.internal.ui.expressions;x-friends:="org.eclipse.papyrus.cdo.ui.tests", org.eclipse.papyrus.cdo.internal.ui.handlers;x-friends:="org.eclipse.papyrus.cdo.ui.tests", diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/build.properties b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/build.properties index edf0e6f74bf..758932eaa4d 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/build.properties +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/build.properties @@ -5,7 +5,9 @@ bin.includes = META-INF/,\ plugin.properties,\ plugin.xml,\ icons/,\ - about.html -bin.excludes = icons/**/*.pxm + about.html,\ + model/ +bin.excludes = icons/**/*.pxm,\ + model/*.ecorediag src.includes = about.html,\ schema/ diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/model/DND.ecore b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/model/DND.ecore new file mode 100644 index 00000000000..d099ac1494f --- /dev/null +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/model/DND.ecore @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="dnd" nsURI="http://www.eclipse.org/papyrus/1.0.0/cdo/private/dnd" + nsPrefix="dnd"> + <eClassifiers xsi:type="ecore:EClass" name="CDOResourceURITransferData"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="resourceURIs" upperBound="-1" + eType="#//URI"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/> +</ecore:EPackage> diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/model/DND.ecorediag b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/model/DND.ecorediag new file mode 100644 index 00000000000..a04675ec44d --- /dev/null +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/model/DND.ecorediag @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_yFGb0CVbEeOe3PUVH5W0Qg" type="EcoreTools" name="DND" measurementUnit="Pixel"> + <children xmi:type="notation:Node" xmi:id="_AjafgCVcEeOe3PUVH5W0Qg" type="1001"> + <children xmi:type="notation:Node" xmi:id="_Ajc7wCVcEeOe3PUVH5W0Qg" type="4001"/> + <children xmi:type="notation:Node" xmi:id="_AjeJ4CVcEeOe3PUVH5W0Qg" type="5001"> + <children xmi:type="notation:Node" xmi:id="_Gq1wwCVcEeOe3PUVH5W0Qg" type="2001"> + <element xmi:type="ecore:EAttribute" href="DND.ecore#//CDOResourceURITransferData/resourceURIs"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_Gq1wwSVcEeOe3PUVH5W0Qg"/> + </children> + <styles xmi:type="notation:DrawerStyle" xmi:id="_AjeJ4SVcEeOe3PUVH5W0Qg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_AjeJ4iVcEeOe3PUVH5W0Qg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_AjeJ4yVcEeOe3PUVH5W0Qg"/> + </children> + <children xmi:type="notation:Node" xmi:id="_Ajew8CVcEeOe3PUVH5W0Qg" type="5002"> + <styles xmi:type="notation:DrawerStyle" xmi:id="_Ajew8SVcEeOe3PUVH5W0Qg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_Ajew8iVcEeOe3PUVH5W0Qg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_Ajew8yVcEeOe3PUVH5W0Qg"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_AjafgSVcEeOe3PUVH5W0Qg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/> + <element xmi:type="ecore:EClass" href="DND.ecore#//CDOResourceURITransferData"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AjafgiVcEeOe3PUVH5W0Qg" x="41" y="106"/> + </children> + <children xmi:type="notation:Node" xmi:id="_N4TdACVcEeOe3PUVH5W0Qg" type="1004"> + <children xmi:type="notation:Node" xmi:id="_N4UEECVcEeOe3PUVH5W0Qg" type="4008"/> + <children xmi:type="notation:Node" xmi:id="_N4UrICVcEeOe3PUVH5W0Qg" type="4009"/> + <styles xmi:type="notation:ShapeStyle" xmi:id="_N4TdASVcEeOe3PUVH5W0Qg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/> + <element xmi:type="ecore:EDataType" href="DND.ecore#//URI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_N4TdAiVcEeOe3PUVH5W0Qg" x="360" y="108"/> + </children> + <styles xmi:type="notation:DiagramStyle" xmi:id="_yFGb0SVbEeOe3PUVH5W0Qg"/> + <element xmi:type="ecore:EPackage" href="DND.ecore#/"/> +</notation:Diagram> diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/plugin.xml b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/plugin.xml index cd53f34a723..8f74e64e722 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/plugin.xml +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/plugin.xml @@ -378,4 +378,11 @@ </includes> </viewerContentBinding> </extension> + <extension + point="org.eclipse.emf.ecore.dynamic_package"> + <resource + location="model/DND.ecore" + uri="http://www.eclipse.org/papyrus/1.0.0/cdo/private/dnd"> + </resource> + </extension> </plugin> diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/dnd/CDOResourceURITransferData.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/dnd/CDOResourceURITransferData.java index 94fde9564d7..57114c8a154 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/dnd/CDOResourceURITransferData.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/dnd/CDOResourceURITransferData.java @@ -11,10 +11,16 @@ *****************************************************************************/ package org.eclipse.papyrus.cdo.internal.ui.dnd; +import java.util.Collections; import java.util.List; import org.eclipse.emf.cdo.eresource.CDOResourceNode; import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.util.EcoreUtil; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; @@ -29,11 +35,18 @@ import com.google.common.io.ByteStreams; */ public final class CDOResourceURITransferData { + private static final String NS_URI = "http://www.eclipse.org/papyrus/1.0.0/cdo/private/dnd"; //$NON-NLS-1$ + + private static final EClass ECLASS = (EClass)EPackage.Registry.INSTANCE.getEPackage(NS_URI).getEClassifier(CDOResourceURITransferData.class.getSimpleName()); + + private static final EAttribute URIS = (EAttribute)ECLASS.getEStructuralFeature("resourceURIs"); //$NON-NLS-1$ + private final List<URI> uris; public CDOResourceURITransferData(Iterable<? extends CDOResourceNode> resourceNodes) { this(ImmutableList.copyOf(Iterables.transform(resourceNodes, new Function<CDOResourceNode, URI>() { + @Override public URI apply(CDOResourceNode input) { return input.getURI(); } @@ -70,4 +83,21 @@ public final class CDOResourceURITransferData { return new CDOResourceURITransferData(uris.build()); } + + public static boolean isCDOResourceURITransferData(EObject object) { + return ECLASS.isInstance(object); + } + + public static CDOResourceURITransferData fromEObject(EObject object) { + @SuppressWarnings("unchecked") + List<URI> uris = isCDOResourceURITransferData(object) ? (List<URI>)object.eGet(URIS) : Collections.<URI> emptyList(); + + return new CDOResourceURITransferData(uris); + } + + public EObject asEObject() { + EObject result = EcoreUtil.create(ECLASS); + result.eSet(URIS, getURIs()); + return result; + } } diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/editors/DawnGraphicalEditorSupport.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/editors/DawnGraphicalEditorSupport.java index 094e46c2855..d848fd8083d 100644 --- a/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/editors/DawnGraphicalEditorSupport.java +++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.ui/src/org/eclipse/papyrus/cdo/internal/ui/editors/DawnGraphicalEditorSupport.java @@ -13,6 +13,7 @@ package org.eclipse.papyrus.cdo.internal.ui.editors; import java.util.Collections; import java.util.Iterator; +import java.util.List; import java.util.Map; import org.eclipse.emf.cdo.CDOObject; @@ -25,15 +26,22 @@ import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.gef.EditPart; +import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.ui.parts.GraphicalEditor; import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; +import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramDropTargetListener; import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.util.LocalSelectionTransfer; +import org.eclipse.jface.util.TransferDropTargetListener; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.papyrus.cdo.core.resource.CDOAwareModelSet; import org.eclipse.papyrus.cdo.internal.core.CDOUtils; import org.eclipse.papyrus.cdo.internal.ui.Activator; import org.eclipse.papyrus.cdo.internal.ui.decorators.CDOStateAdapter; +import org.eclipse.papyrus.cdo.internal.ui.dnd.CDOResourceURITransferData; +import org.eclipse.papyrus.cdo.internal.ui.dnd.ResourceDropActionDelegate; import org.eclipse.papyrus.cdo.internal.ui.util.UIUtil; import org.eclipse.papyrus.infra.core.resource.ModelSet; import org.eclipse.papyrus.infra.core.services.ServiceException; @@ -41,14 +49,16 @@ import org.eclipse.papyrus.infra.core.services.ServicesRegistry; import org.eclipse.papyrus.infra.gmfdiag.common.DefaultGraphicalEditorSupport; import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IConflictingEditPartFilter; import org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusDiagramEditPart; +import org.eclipse.ui.part.PluginTransfer; +import org.eclipse.ui.part.PluginTransferData; +import com.google.common.collect.Iterables; import com.google.common.collect.Maps; /** * This is the DawnGraphicalEditorSupport type. Enjoy. */ -public class DawnGraphicalEditorSupport - extends DefaultGraphicalEditorSupport { +public class DawnGraphicalEditorSupport extends DefaultGraphicalEditorSupport { private final ServicesRegistry registry; @@ -58,24 +68,25 @@ public class DawnGraphicalEditorSupport this.registry = registry; } + @Override public void initialize(GraphicalEditor editor) { - if (editor instanceof DiagramDocumentEditor) { - CDOView view = getCDOView(); - if (view != null) { - DiagramDocumentEditor diagramEditor = (DiagramDocumentEditor) editor; + if(editor instanceof DiagramDocumentEditor) { + DiagramDocumentEditor diagramEditor = (DiagramDocumentEditor)editor; + CDOView view = getCDOView(); + if(view != null) { initialize(diagramEditor, view); } + + initializeCDOResourceDropSupport(diagramEditor); } super.initialize(editor); } - protected void initialize(final DiagramDocumentEditor diagramEditor, - CDOView view) { + protected void initialize(final DiagramDocumentEditor diagramEditor, CDOView view) { DawnEditorAdapter adapter = new DawnEditorAdapter(diagramEditor); - final DawnGMFEditorSupport dawnSupport = new PapyrusGMFEditorSupport( - adapter); + final DawnGMFEditorSupport dawnSupport = new PapyrusGMFEditorSupport(adapter); adapter.setEditorSupport(dawnSupport); adapter.setView(getCDOView()); @@ -85,11 +96,11 @@ public class DawnGraphicalEditorSupport // part filter UIUtil.later(new Runnable() { + @Override public void run() { DiagramEditPart diagramEP = diagramEditor.getDiagramEditPart(); - if (diagramEP instanceof PapyrusDiagramEditPart) { - ((PapyrusDiagramEditPart) diagramEP) - .setConflictingEditPartFilter(createConflictingEditPartFilter()); + if(diagramEP instanceof PapyrusDiagramEditPart) { + ((PapyrusDiagramEditPart)diagramEP).setConflictingEditPartFilter(createConflictingEditPartFilter()); } } }); @@ -98,19 +109,18 @@ public class DawnGraphicalEditorSupport // find and process objects locked remotely final Map<Object, DawnState> remoteLocks = getRemoteLocks(diagramEditor); - if (!remoteLocks.isEmpty()) { + if(!remoteLocks.isEmpty()) { // post for later because the editor isn't yet connected to its // editor site in the workbench UIUtil.later(new Runnable() { + @Override public void run() { dawnSupport.handleRemoteLockChanges(remoteLocks); - for (Object next : remoteLocks.keySet()) { - final EObject element = CDOUtil - .getEObject((CDOObject) next); - View view = DawnDiagramUpdater - .findViewByContainer(element); + for(Object next : remoteLocks.keySet()) { + final EObject element = CDOUtil.getEObject((CDOObject)next); + View view = DawnDiagramUpdater.findViewByContainer(element); CDOStateAdapter.setState(view, remoteLocks.get(next)); } @@ -124,8 +134,8 @@ public class DawnGraphicalEditorSupport try { ModelSet modelSet = registry.getService(ModelSet.class); - if (modelSet instanceof CDOAwareModelSet) { - result = ((CDOAwareModelSet) modelSet).getCDOView(); + if(modelSet instanceof CDOAwareModelSet) { + result = ((CDOAwareModelSet)modelSet).getCDOView(); } } catch (ServiceException e) { Activator.log.error(e); @@ -134,19 +144,17 @@ public class DawnGraphicalEditorSupport return result; } - private Map<Object, DawnState> getRemoteLocks( - DiagramDocumentEditor diagramEditor) { + private Map<Object, DawnState> getRemoteLocks(DiagramDocumentEditor diagramEditor) { Map<Object, DawnState> result = Maps.newHashMap(); Diagram diagram = diagramEditor.getDiagram(); - if (diagram != null) { - Iterator<EObject> iter = EcoreUtil.getAllProperContents( - Collections.singleton(diagram), false); + if(diagram != null) { + Iterator<EObject> iter = EcoreUtil.getAllProperContents(Collections.singleton(diagram), false); - while (iter.hasNext()) { + while(iter.hasNext()) { CDOObject next = CDOUtils.getCDOObject(iter.next()); - if ((next != null) && CDOUtils.isLocked(next, true)) { + if((next != null) && CDOUtils.isLocked(next, true)) { result.put(next, DawnState.LOCKED_REMOTELY); } } @@ -158,11 +166,80 @@ public class DawnGraphicalEditorSupport private IConflictingEditPartFilter createConflictingEditPartFilter() { return new IConflictingEditPartFilter() { + @Override public boolean isConflicting(EditPart editPart) { Object model = editPart.getModel(); - return (model instanceof EObject) - && DawnConflictHelper.isConflicted((EObject) model); + return (model instanceof EObject) && DawnConflictHelper.isConflicted((EObject)model); + } + }; + } + + protected void initializeCDOResourceDropSupport(final DiagramDocumentEditor diagramEditor) { + // after the root edit part has been created, inject drop-target listener for dropping hyperlinks to CDO resources by URI + UIUtil.later(new Runnable() { + + @Override + public void run() { + EditPartViewer viewer = diagramEditor.getDiagramGraphicalViewer(); + viewer.addDropTargetListener(createCDOResourceURIDropTargetListener(viewer)); + } + }); + } + + private TransferDropTargetListener createCDOResourceURIDropTargetListener(EditPartViewer viewer) { + return new DiagramDropTargetListener(viewer, PluginTransfer.getInstance()) { + + @Override + protected boolean isDataTransfered() { + // I only have my data when the actual transfer data carrying my URIs is available + return getCurrentEvent().data != null; + } + + @Override + protected List<EObject> getObjectsBeingDropped() { + List<EObject> result = null; + CDOResourceURITransferData uriData = null; + + if(PluginTransfer.getInstance().isSupportedType(getCurrentEvent().currentDataType) && !localTransferHasObjectFromThisRepo()) { + Object data = getCurrentEvent().data; + if(data instanceof PluginTransferData) { + PluginTransferData ptData = (PluginTransferData)data; + if(ResourceDropActionDelegate.DROP_ACTION_ID.equals(ptData.getExtensionId())) { + uriData = CDOResourceURITransferData.deserialize(ptData.getData()); + } + } + } + + if(uriData == null) { + result = Collections.emptyList(); + } else { + // convert the URI transfer data to an EObject so that the drag-and-drop + // system doesn't bomb on ClassCastExceptions + result = Collections.singletonList(uriData.asEObject()); + } + + return result; } }; } + + boolean localTransferHasObjectFromThisRepo() { + boolean result = false; + + CDOView view = getCDOView(); + if(view != null) { + IStructuredSelection sel = CDOUtils.tryCast(LocalSelectionTransfer.getTransfer().getSelection(), IStructuredSelection.class); + if((sel != null) && !sel.isEmpty()) { + for(EObject next : Iterables.filter(sel.toList(), EObject.class)) { + CDOObject cdo = CDOUtils.getCDOObject(next); + if((cdo != null) && (cdo.cdoView().getSession() == view.getSession())) { + result = true; + break; + } + } + } + } + + return result; + } } |