diff options
author | Asma Smaoui | 2018-04-25 13:07:28 +0000 |
---|---|---|
committer | vincent lorenzo | 2018-06-01 08:52:39 +0000 |
commit | ef46a8f6f3acb600bc62e0eda549fba86f20eb4b (patch) | |
tree | acd69f2b333ee38ef99331977650538f6c60f2cb /plugins/uml | |
parent | 83a61595154affeb0085144c21df270f0923e705 (diff) | |
download | org.eclipse.papyrus-ef46a8f6f3acb600bc62e0eda549fba86f20eb4b.tar.gz org.eclipse.papyrus-ef46a8f6f3acb600bc62e0eda549fba86f20eb4b.tar.xz org.eclipse.papyrus-ef46a8f6f3acb600bc62e0eda549fba86f20eb4b.zip |
bug 532639: [Table][Matrix]System shall enable to specify the creation
location of relationships created using a matrix editor.
- fix a ClassCastException
Change-Id: I440d4567d41c6bc4f470eae607973a7c237868b1
Signed-off-by: Asma Smaoui <asma.smaoui@cea.fr>
(cherry picked from commit 44d9577e66ce95a403327973822605c46215357f)
Diffstat (limited to 'plugins/uml')
-rw-r--r-- | plugins/uml/nattable/org.eclipse.papyrus.uml.nattable.matrix/src/org/eclipse/papyrus/uml/nattable/matrix/validator/RelationshipOwnerValidator.java | 67 |
1 files changed, 61 insertions, 6 deletions
diff --git a/plugins/uml/nattable/org.eclipse.papyrus.uml.nattable.matrix/src/org/eclipse/papyrus/uml/nattable/matrix/validator/RelationshipOwnerValidator.java b/plugins/uml/nattable/org.eclipse.papyrus.uml.nattable.matrix/src/org/eclipse/papyrus/uml/nattable/matrix/validator/RelationshipOwnerValidator.java index ff447ec3ccd..ba561d7a40c 100644 --- a/plugins/uml/nattable/org.eclipse.papyrus.uml.nattable.matrix/src/org/eclipse/papyrus/uml/nattable/matrix/validator/RelationshipOwnerValidator.java +++ b/plugins/uml/nattable/org.eclipse.papyrus.uml.nattable.matrix/src/org/eclipse/papyrus/uml/nattable/matrix/validator/RelationshipOwnerValidator.java @@ -8,6 +8,7 @@ * * Contributors: * CEA LIST - Initial API and implementation + * CEA LIST - bug 532639 [Table][Matrix]System shall enable to specify the creation location of relationships created using a matrix editor. * *****************************************************************************/ @@ -32,6 +33,7 @@ import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.EObject import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService; import org.eclipse.papyrus.infra.types.ElementTypeConfiguration; import org.eclipse.papyrus.infra.types.MetamodelTypeConfiguration; +import org.eclipse.papyrus.infra.types.SpecializationTypeConfiguration; import org.eclipse.papyrus.infra.ui.emf.dialog.NestedEditingDialogContext; import org.eclipse.papyrus.uml.nattable.matrix.Activator; import org.eclipse.papyrus.uml.nattable.matrix.messages.Messages; @@ -136,12 +138,16 @@ public class RelationshipOwnerValidator implements IValidator { private final IStatus hasADefinedRelationship() { final ElementTypeConfiguration etc = this.conf.getEditedElement(); if (null == etc) { + return createErrorStatus(Messages.RelationshipOwnerValidator_NoRelationshipDefined); } - final EClass eclass = ((MetamodelTypeConfiguration) etc).getEClass(); + + final EClass eclass = getBaseMetamodelEClass(etc); + if (null != eclass) { if (eclass.isAbstract()) { return createErrorStatus(Messages.RelationshipOwnerValidator_ChosenRelationshipIsAbstract); // very unlucky case, probably impossible } + } return Status.OK_STATUS; } @@ -156,15 +162,64 @@ public class RelationshipOwnerValidator implements IValidator { private final boolean hasFeatureAcceptingRelationShip(final EObject wantedOwner) { Assert.isNotNull(wantedOwner); final ElementTypeConfiguration etc = this.conf.getEditedElement(); - final EClass eclass = ((MetamodelTypeConfiguration) etc).getEClass(); - final EObject dummyRelationship = eclass.getEPackage().getEFactoryInstance().create(eclass); - for (EStructuralFeature current : wantedOwner.eClass().getEAllContainments()) { - if (current.getEType().isInstance(dummyRelationship)) { - return true; + final EClass eclass = getBaseMetamodelEClass(etc); + if (null != eclass) { + final EObject dummyRelationship = eclass.getEPackage().getEFactoryInstance().create(eclass); + for (EStructuralFeature current : wantedOwner.eClass().getEAllContainments()) { + if (current.getEType().isInstance(dummyRelationship)) { + return true; + } } } return false; } + + + // TODO : move these 3 methods in a util class. Such methods already exists in UMLRelationshipHelper + /** + * + * @param elementTypeConfiguration + * an element type configuration + * @return + * the base EClass for this element type configuration(when it is unique) and <code>null</code> otherwise + * @since 1.0.100 + * + */ + private EClass getBaseMetamodelEClass(final ElementTypeConfiguration elementTypeConfiguration) { + return getBaseMetamodelTypeConfiguration(elementTypeConfiguration) != null ? getBaseMetamodelTypeConfiguration(elementTypeConfiguration).getEClass() : null; + } + + /** + * + * @param elementTypeConfiguration + * an element type configuration + * @return + * the base metamodel type configuration (when it is unique) and <code>null</code> otherwise + * @since 1.0.100 + */ + private MetamodelTypeConfiguration getBaseMetamodelTypeConfiguration(final ElementTypeConfiguration elementTypeConfiguration) { + if (elementTypeConfiguration instanceof MetamodelTypeConfiguration) { + return (MetamodelTypeConfiguration) elementTypeConfiguration; + } else if (elementTypeConfiguration instanceof SpecializationTypeConfiguration) { + return getBaseMetamodelTypeConfiguration((SpecializationTypeConfiguration) elementTypeConfiguration); + } + return null; + } + + /** + * + * @param elementTypeConfiguration + * an element type configuration + * @return + * the base metamodel type configuration (when it is unique) and <code>null</code> otherwise + * @since 1.0.100 + */ + private MetamodelTypeConfiguration getBaseMetamodelTypeConfiguration(final SpecializationTypeConfiguration elementTypeConfiguration) { + return 1 == elementTypeConfiguration.getSpecializedTypes().size() ? getBaseMetamodelTypeConfiguration(elementTypeConfiguration.getSpecializedTypes().get(0)) : null; + } + + + /** * |