Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAsma Smaoui2018-04-25 13:07:28 +0000
committervincent lorenzo2018-06-01 08:52:39 +0000
commitef46a8f6f3acb600bc62e0eda549fba86f20eb4b (patch)
treeacd69f2b333ee38ef99331977650538f6c60f2cb /plugins/uml
parent83a61595154affeb0085144c21df270f0923e705 (diff)
downloadorg.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.java67
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;
+ }
+
+
+
/**
*

Back to the top