diff options
author | Ed Willink | 2016-12-14 12:42:47 +0000 |
---|---|---|
committer | Ed Willink | 2016-12-14 17:18:24 +0000 |
commit | 7f421019c29b38f2207fb7b10bbbc703056e8df9 (patch) | |
tree | 861845c51d6d30d4dd3d9ea11db250250542a92c | |
parent | b0f706216b575f76c1fbbf3730b509adabe0f251 (diff) | |
download | org.eclipse.qvtd-7f421019c29b38f2207fb7b10bbbc703056e8df9.tar.gz org.eclipse.qvtd-7f421019c29b38f2207fb7b10bbbc703056e8df9.tar.xz org.eclipse.qvtd-7f421019c29b38f2207fb7b10bbbc703056e8df9.zip |
[412341] Add some QVTr WFRs
19 files changed, 2255 insertions, 90 deletions
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Key.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Key.java index 880396050..f719efb74 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Key.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Key.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation; +import java.util.Map; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.ocl.pivot.Element; import org.eclipse.ocl.pivot.Property; @@ -110,6 +112,51 @@ public interface Key extends Element { void setTransformation(RelationalTransformation value); /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='IdentifiesIsAUsedPackageClass'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv IdentifiesIsAUsedPackageClass:\n * let\n * severity : Integer[1] = \'Key::IdentifiesIsAUsedPackageClass\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[1] = transformation.modelParameter.usedPackage->includes(identifies.owningPackage)\n * in\n * \'Key::IdentifiesIsAUsedPackageClass\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_IdentifiesIsAUsedPackageClass);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\tfinal /*@Thrown\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.Nullable%> RelationalTransformation transformation = this.getTransformation();\n\t\tif (transformation == null) {\n\t\t\tthrow new <%org.eclipse.ocl.pivot.values.InvalidValueException%>(\"Null source for \\\'\\\'http://www.eclipse.org/qvt/2015/QVTbase\\\'::Transformation::modelParameter\\\'\");\n\t\t}\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.qvtd.pivot.qvtbase.TypedModel%>> modelParameter = transformation.getModelParameter();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_modelParameter = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_TypedModel, modelParameter);\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.SequenceValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createSequenceAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SEQ_CLSSid_Package);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_modelParameter.iterator();\n\t\t/*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SequenceValue collect;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tcollect = accumulator;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtbase.@<%org.eclipse.jdt.annotation.NonNull%> TypedModel _1 = (<%org.eclipse.qvtd.pivot.qvtbase.TypedModel%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * usedPackage\n\t\t\t \052/\n\t\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Package%>> usedPackage = _1.getUsedPackage();\n\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_usedPackage = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Package, usedPackage);\n\t\t\t//\n\t\t\tfor (Object value : BOXED_usedPackage.flatten().getElements()) {\n\t\t\t\taccumulator.add(value);\n\t\t\t}\n\t\t}\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class identifies = this.getIdentifies();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.Nullable%> Package owningPackage = identifies.getOwningPackage();\n\t\tfinal /*@Thrown\052/ boolean status = <%org.eclipse.ocl.pivot.library.collection.CollectionIncludesOperation%>.INSTANCE.evaluate(collect, owningPackage).booleanValue();\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_IdentifiesIsAUsedPackageClass, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateIdentifiesIsAUsedPackageClass(DiagnosticChain diagnostics, Map<Object, Object> context); + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='OppositePartsHaveOpposites'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv OppositePartsHaveOpposites:\n * let severity : Integer[1] = \'Key::OppositePartsHaveOpposites\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[?] = oppositePart->forAll(opposite <> null)\n * in\n * \'Key::OppositePartsHaveOpposites\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_OppositePartsHaveOpposites);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Property%>> oppositePart = this.getOppositePart();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_oppositePart = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Property, oppositePart);\n\t\t/*@Thrown\052/ java.lang.@<%org.eclipse.jdt.annotation.Nullable%> Object accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_oppositePart.iterator();\n\t\t/*@Thrown\052/ boolean status;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tif (accumulator == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\n\t\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow (<%org.eclipse.ocl.pivot.values.InvalidValueException%>)accumulator;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Property _1 = (<%org.eclipse.ocl.pivot.Property%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * opposite <> null\n\t\t\t \052/\n\t\t\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_ne;\n\t\t\ttry {\n\t\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.Nullable%> Property opposite = _1.getOpposite();\n\t\t\t\tfinal /*@Thrown\052/ boolean ne = opposite != null;\n\t\t\t\tCAUGHT_ne = ne;\n\t\t\t}\n\t\t\tcatch (<%java.lang.Exception%> e) {\n\t\t\t\tCAUGHT_ne = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t\t\t}\n\t\t\t//\n\t\t\tif (CAUGHT_ne == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE) {\t\t\t\t\t// Normal unsuccessful body evaluation result\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE;\n\t\t\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Stop immediately\n\t\t\t}\n\t\t\telse if (CAUGHT_ne == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\t\t\t\t// Normal successful body evaluation result\n\t\t\t\t;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Carry on\n\t\t\t}\n\t\t\telse if (CAUGHT_ne instanceof <%org.eclipse.ocl.pivot.values.InvalidValueException%>) {\t\t// Abnormal exception evaluation result\n\t\t\t\taccumulator = CAUGHT_ne;\t\t\t\t\t\t\t\t\t// Cache an exception failure\n\t\t\t}\n\t\t\telse {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Impossible badly typed result\n\t\t\t\taccumulator = new <%org.eclipse.ocl.pivot.values.InvalidValueException%>(<%org.eclipse.ocl.pivot.messages.PivotMessages%>.NonBooleanBody, \"forAll\");\n\t\t\t}\n\t\t}\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_OppositePartsHaveOpposites, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateOppositePartsHaveOpposites(DiagnosticChain diagnostics, Map<Object, Object> context); + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='OppositePartsAreOppositeParts'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv OppositePartsAreOppositeParts:\n * let\n * severity : Integer[1] = \'Key::OppositePartsAreOppositeParts\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[?] = oppositePart->forAll(\n * self.identifies.conformsTo(type))\n * in\n * \'Key::OppositePartsAreOppositeParts\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_OppositePartsAreOppositeParts);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Property%>> oppositePart = this.getOppositePart();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_oppositePart = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Property, oppositePart);\n\t\t/*@Thrown\052/ java.lang.@<%org.eclipse.jdt.annotation.Nullable%> Object accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_oppositePart.iterator();\n\t\t/*@Thrown\052/ boolean status;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tif (accumulator == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\n\t\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow (<%org.eclipse.ocl.pivot.values.InvalidValueException%>)accumulator;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Property _1 = (<%org.eclipse.ocl.pivot.Property%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * self.identifies.conformsTo(type)\n\t\t\t \052/\n\t\t\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_conformsTo;\n\t\t\ttry {\n\t\t\t\t@SuppressWarnings(\"null\")\n\t\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class identifies = this.getIdentifies();\n\t\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.Nullable%> Type type = _1.getType();\n\t\t\t\tfinal /*@Thrown\052/ boolean conformsTo = <%org.eclipse.ocl.pivot.library.classifier.OclTypeConformsToOperation%>.INSTANCE.evaluate(executor, identifies, type).booleanValue();\n\t\t\t\tCAUGHT_conformsTo = conformsTo;\n\t\t\t}\n\t\t\tcatch (<%java.lang.Exception%> e) {\n\t\t\t\tCAUGHT_conformsTo = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t\t\t}\n\t\t\t//\n\t\t\tif (CAUGHT_conformsTo == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE) {\t\t\t\t\t// Normal unsuccessful body evaluation result\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE;\n\t\t\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Stop immediately\n\t\t\t}\n\t\t\telse if (CAUGHT_conformsTo == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\t\t\t\t// Normal successful body evaluation result\n\t\t\t\t;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Carry on\n\t\t\t}\n\t\t\telse if (CAUGHT_conformsTo instanceof <%org.eclipse.ocl.pivot.values.InvalidValueException%>) {\t\t// Abnormal exception evaluation result\n\t\t\t\taccumulator = CAUGHT_conformsTo;\t\t\t\t\t\t\t\t\t// Cache an exception failure\n\t\t\t}\n\t\t\telse {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Impossible badly typed result\n\t\t\t\taccumulator = new <%org.eclipse.ocl.pivot.values.InvalidValueException%>(<%org.eclipse.ocl.pivot.messages.PivotMessages%>.NonBooleanBody, \"forAll\");\n\t\t\t}\n\t\t}\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_OppositePartsAreOppositeParts, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateOppositePartsAreOppositeParts(DiagnosticChain diagnostics, Map<Object, Object> context); + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='PartsAreParts'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv PartsAreParts:\n * let severity : Integer[1] = \'Key::PartsAreParts\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[?] = part->forAll(\n * self.identifies.conformsTo(owningClass))\n * in\n * \'Key::PartsAreParts\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_PartsAreParts);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Property%>> part = this.getPart();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_part = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Property, part);\n\t\t/*@Thrown\052/ java.lang.@<%org.eclipse.jdt.annotation.Nullable%> Object accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_part.iterator();\n\t\t/*@Thrown\052/ boolean status;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tif (accumulator == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\n\t\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow (<%org.eclipse.ocl.pivot.values.InvalidValueException%>)accumulator;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Property _1 = (<%org.eclipse.ocl.pivot.Property%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * self.identifies.conformsTo(owningClass)\n\t\t\t \052/\n\t\t\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_conformsTo;\n\t\t\ttry {\n\t\t\t\t@SuppressWarnings(\"null\")\n\t\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class identifies = this.getIdentifies();\n\t\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.Nullable%> Class owningClass = _1.getOwningClass();\n\t\t\t\tfinal /*@Thrown\052/ boolean conformsTo = <%org.eclipse.ocl.pivot.library.classifier.OclTypeConformsToOperation%>.INSTANCE.evaluate(executor, identifies, owningClass).booleanValue();\n\t\t\t\tCAUGHT_conformsTo = conformsTo;\n\t\t\t}\n\t\t\tcatch (<%java.lang.Exception%> e) {\n\t\t\t\tCAUGHT_conformsTo = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t\t\t}\n\t\t\t//\n\t\t\tif (CAUGHT_conformsTo == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE) {\t\t\t\t\t// Normal unsuccessful body evaluation result\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE;\n\t\t\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Stop immediately\n\t\t\t}\n\t\t\telse if (CAUGHT_conformsTo == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\t\t\t\t// Normal successful body evaluation result\n\t\t\t\t;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Carry on\n\t\t\t}\n\t\t\telse if (CAUGHT_conformsTo instanceof <%org.eclipse.ocl.pivot.values.InvalidValueException%>) {\t\t// Abnormal exception evaluation result\n\t\t\t\taccumulator = CAUGHT_conformsTo;\t\t\t\t\t\t\t\t\t// Cache an exception failure\n\t\t\t}\n\t\t\telse {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Impossible badly typed result\n\t\t\t\taccumulator = new <%org.eclipse.ocl.pivot.values.InvalidValueException%>(<%org.eclipse.ocl.pivot.messages.PivotMessages%>.NonBooleanBody, \"forAll\");\n\t\t\t}\n\t\t}\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_PartsAreParts, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validatePartsAreParts(DiagnosticChain diagnostics, Map<Object, Object> context); + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='PartsAreUnique'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv PartsAreUnique:\n * let severity : Integer[1] = \'Key::PartsAreUnique\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[1] = part->excludesAll(oppositePart.opposite)\n * in\n * \'Key::PartsAreUnique\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_PartsAreUnique);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Property%>> part = this.getPart();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_part = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Property, part);\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Property%>> oppositePart = this.getOppositePart();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_oppositePart = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Property, oppositePart);\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.BagValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createBagAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.BAG_CLSSid_Property);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_oppositePart.iterator();\n\t\t/*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> BagValue collect;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tcollect = accumulator;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Property _1 = (<%org.eclipse.ocl.pivot.Property%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * opposite\n\t\t\t \052/\n\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.Nullable%> Property opposite = _1.getOpposite();\n\t\t\t//\n\t\t\taccumulator.add(opposite);\n\t\t}\n\t\tfinal /*@Thrown\052/ boolean status = <%org.eclipse.ocl.pivot.library.collection.CollectionExcludesAllOperation%>.INSTANCE.evaluate(BOXED_part, collect).booleanValue();\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Key_c_c_PartsAreUnique, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validatePartsAreUnique(DiagnosticChain diagnostics, Map<Object, Object> context); + + /** * Returns the value of the '<em><b>Opposite Part</b></em>' reference list. * The list contents are of type {@link org.eclipse.ocl.pivot.Property}. * <!-- begin-user-doc --> diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationPackage.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationPackage.java index c4c464251..54d89834d 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationPackage.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationPackage.java @@ -294,13 +294,58 @@ public interface QVTrelationPackage extends EPackage { int KEY___GET_VALUE__TYPE_STRING = PivotPackage.ELEMENT___GET_VALUE__TYPE_STRING; /** + * The operation id for the '<em>Validate Identifies Is AUsed Package Class</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int KEY___VALIDATE_IDENTIFIES_IS_AUSED_PACKAGE_CLASS__DIAGNOSTICCHAIN_MAP = PivotPackage.ELEMENT_OPERATION_COUNT + 0; + + /** + * The operation id for the '<em>Validate Opposite Parts Have Opposites</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int KEY___VALIDATE_OPPOSITE_PARTS_HAVE_OPPOSITES__DIAGNOSTICCHAIN_MAP = PivotPackage.ELEMENT_OPERATION_COUNT + 1; + + /** + * The operation id for the '<em>Validate Opposite Parts Are Opposite Parts</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int KEY___VALIDATE_OPPOSITE_PARTS_ARE_OPPOSITE_PARTS__DIAGNOSTICCHAIN_MAP = PivotPackage.ELEMENT_OPERATION_COUNT + 2; + + /** + * The operation id for the '<em>Validate Parts Are Parts</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int KEY___VALIDATE_PARTS_ARE_PARTS__DIAGNOSTICCHAIN_MAP = PivotPackage.ELEMENT_OPERATION_COUNT + 3; + + /** + * The operation id for the '<em>Validate Parts Are Unique</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int KEY___VALIDATE_PARTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP = PivotPackage.ELEMENT_OPERATION_COUNT + 4; + + /** * The number of operations of the '<em>Key</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int KEY_OPERATION_COUNT = PivotPackage.ELEMENT_OPERATION_COUNT + 0; + int KEY_OPERATION_COUNT = PivotPackage.ELEMENT_OPERATION_COUNT + 5; /** * The meta object id for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.RelationImpl <em>Relation</em>}' class. @@ -502,13 +547,31 @@ public interface QVTrelationPackage extends EPackage { int RELATION___VALIDATE_OVERRIDES_RULE_OVERRIDES_ALL_DOMAINS__DIAGNOSTICCHAIN_MAP = QVTbasePackage.RULE___VALIDATE_OVERRIDES_RULE_OVERRIDES_ALL_DOMAINS__DIAGNOSTICCHAIN_MAP; /** + * The operation id for the '<em>Validate Domains Are Relation Domains</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int RELATION___VALIDATE_DOMAINS_ARE_RELATION_DOMAINS__DIAGNOSTICCHAIN_MAP = QVTbasePackage.RULE_OPERATION_COUNT + 0; + + /** + * The operation id for the '<em>Validate Transformation Is Relational Transformation</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int RELATION___VALIDATE_TRANSFORMATION_IS_RELATIONAL_TRANSFORMATION__DIAGNOSTICCHAIN_MAP = QVTbasePackage.RULE_OPERATION_COUNT + 1; + + /** * The number of operations of the '<em>Relation</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int RELATION_OPERATION_COUNT = QVTbasePackage.RULE_OPERATION_COUNT + 0; + int RELATION_OPERATION_COUNT = QVTbasePackage.RULE_OPERATION_COUNT + 2; /** * The meta object id for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.RelationCallExpImpl <em>Relation Call Exp</em>}' class. @@ -855,13 +918,22 @@ public interface QVTrelationPackage extends EPackage { int RELATION_DOMAIN___VALIDATE_TYPED_MODEL_IS_TRANSFORMATION_MODEL_PARAMETER__DIAGNOSTICCHAIN_MAP = QVTbasePackage.DOMAIN___VALIDATE_TYPED_MODEL_IS_TRANSFORMATION_MODEL_PARAMETER__DIAGNOSTICCHAIN_MAP; /** + * The operation id for the '<em>Validate Relation Domain Assignments Are Unique</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int RELATION_DOMAIN___VALIDATE_RELATION_DOMAIN_ASSIGNMENTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP = QVTbasePackage.DOMAIN_OPERATION_COUNT + 0; + + /** * The number of operations of the '<em>Relation Domain</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int RELATION_DOMAIN_OPERATION_COUNT = QVTbasePackage.DOMAIN_OPERATION_COUNT + 0; + int RELATION_DOMAIN_OPERATION_COUNT = QVTbasePackage.DOMAIN_OPERATION_COUNT + 1; /** * The meta object id for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.RelationDomainAssignmentImpl <em>Relation Domain Assignment</em>}' class. @@ -955,13 +1027,22 @@ public interface QVTrelationPackage extends EPackage { int RELATION_DOMAIN_ASSIGNMENT___GET_VALUE__TYPE_STRING = PivotPackage.ELEMENT___GET_VALUE__TYPE_STRING; /** + * The operation id for the '<em>Validate Compatible Type For Value</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int RELATION_DOMAIN_ASSIGNMENT___VALIDATE_COMPATIBLE_TYPE_FOR_VALUE__DIAGNOSTICCHAIN_MAP = PivotPackage.ELEMENT_OPERATION_COUNT + 0; + + /** * The number of operations of the '<em>Relation Domain Assignment</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int RELATION_DOMAIN_ASSIGNMENT_OPERATION_COUNT = PivotPackage.ELEMENT_OPERATION_COUNT + 0; + int RELATION_DOMAIN_ASSIGNMENT_OPERATION_COUNT = PivotPackage.ELEMENT_OPERATION_COUNT + 1; /** * The meta object id for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.RelationModelImpl <em>Relation Model</em>}' class. @@ -1562,13 +1643,31 @@ public interface QVTrelationPackage extends EPackage { int RELATIONAL_TRANSFORMATION___VALIDATE_MODEL_PARAMETER_IS_UNIQUE__DIAGNOSTICCHAIN_MAP = QVTbasePackage.TRANSFORMATION___VALIDATE_MODEL_PARAMETER_IS_UNIQUE__DIAGNOSTICCHAIN_MAP; /** + * The operation id for the '<em>Validate Keys Are Unique</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int RELATIONAL_TRANSFORMATION___VALIDATE_KEYS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP = QVTbasePackage.TRANSFORMATION_OPERATION_COUNT + 0; + + /** + * The operation id for the '<em>Validate Rules Are Relations</em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int RELATIONAL_TRANSFORMATION___VALIDATE_RULES_ARE_RELATIONS__DIAGNOSTICCHAIN_MAP = QVTbasePackage.TRANSFORMATION_OPERATION_COUNT + 1; + + /** * The number of operations of the '<em>Relational Transformation</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int RELATIONAL_TRANSFORMATION_OPERATION_COUNT = QVTbasePackage.TRANSFORMATION_OPERATION_COUNT + 0; + int RELATIONAL_TRANSFORMATION_OPERATION_COUNT = QVTbasePackage.TRANSFORMATION_OPERATION_COUNT + 2; /** * The meta object id for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.SharedVariableImpl <em>Shared Variable</em>}' class. @@ -2033,6 +2132,56 @@ public interface QVTrelationPackage extends EPackage { EReference getKey_Transformation(); /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.Key#validateIdentifiesIsAUsedPackageClass(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Identifies Is AUsed Package Class</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Identifies Is AUsed Package Class</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.Key#validateIdentifiesIsAUsedPackageClass(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getKey__ValidateIdentifiesIsAUsedPackageClass__DiagnosticChain_Map(); + + /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.Key#validateOppositePartsHaveOpposites(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Opposite Parts Have Opposites</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Opposite Parts Have Opposites</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.Key#validateOppositePartsHaveOpposites(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getKey__ValidateOppositePartsHaveOpposites__DiagnosticChain_Map(); + + /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.Key#validateOppositePartsAreOppositeParts(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Opposite Parts Are Opposite Parts</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Opposite Parts Are Opposite Parts</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.Key#validateOppositePartsAreOppositeParts(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getKey__ValidateOppositePartsAreOppositeParts__DiagnosticChain_Map(); + + /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.Key#validatePartsAreParts(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Parts Are Parts</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Parts Are Parts</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.Key#validatePartsAreParts(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getKey__ValidatePartsAreParts__DiagnosticChain_Map(); + + /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.Key#validatePartsAreUnique(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Parts Are Unique</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Parts Are Unique</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.Key#validatePartsAreUnique(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getKey__ValidatePartsAreUnique__DiagnosticChain_Map(); + + /** * Returns the meta object for the reference list '{@link org.eclipse.qvtd.pivot.qvtrelation.Key#getOppositePart <em>Opposite Part</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2109,6 +2258,26 @@ public interface QVTrelationPackage extends EPackage { EReference getRelation_Where(); /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.Relation#validateDomainsAreRelationDomains(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Domains Are Relation Domains</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Domains Are Relation Domains</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.Relation#validateDomainsAreRelationDomains(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getRelation__ValidateDomainsAreRelationDomains__DiagnosticChain_Map(); + + /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.Relation#validateTransformationIsRelationalTransformation(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Transformation Is Relational Transformation</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Transformation Is Relational Transformation</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.Relation#validateTransformationIsRelationalTransformation(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getRelation__ValidateTransformationIsRelationalTransformation__DiagnosticChain_Map(); + + /** * Returns the meta object for class '{@link org.eclipse.qvtd.pivot.qvtrelation.RelationCallExp <em>Relation Call Exp</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2194,6 +2363,16 @@ public interface QVTrelationPackage extends EPackage { EReference getRelationDomain_RootVariable(); /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.RelationDomain#validateRelationDomainAssignmentsAreUnique(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Relation Domain Assignments Are Unique</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Relation Domain Assignments Are Unique</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.RelationDomain#validateRelationDomainAssignmentsAreUnique(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getRelationDomain__ValidateRelationDomainAssignmentsAreUnique__DiagnosticChain_Map(); + + /** * Returns the meta object for class '{@link org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment <em>Relation Domain Assignment</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2226,6 +2405,16 @@ public interface QVTrelationPackage extends EPackage { EReference getRelationDomainAssignment_Variable(); /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment#validateCompatibleTypeForValue(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Compatible Type For Value</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Compatible Type For Value</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment#validateCompatibleTypeForValue(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getRelationDomainAssignment__ValidateCompatibleTypeForValue__DiagnosticChain_Map(); + + /** * Returns the meta object for class '{@link org.eclipse.qvtd.pivot.qvtrelation.RelationModel <em>Relation Model</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2300,6 +2489,26 @@ public interface QVTrelationPackage extends EPackage { EReference getRelationalTransformation_OwnedKey(); /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation#validateKeysAreUnique(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Keys Are Unique</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Keys Are Unique</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation#validateKeysAreUnique(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getRelationalTransformation__ValidateKeysAreUnique__DiagnosticChain_Map(); + + /** + * Returns the meta object for the '{@link org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation#validateRulesAreRelations(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Rules Are Relations</em>}' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the '<em>Validate Rules Are Relations</em>' operation. + * @see org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation#validateRulesAreRelations(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) + * @generated + */ + EOperation getRelationalTransformation__ValidateRulesAreRelations__DiagnosticChain_Map(); + + /** * Returns the meta object for class '{@link org.eclipse.qvtd.pivot.qvtrelation.SharedVariable <em>Shared Variable</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2394,6 +2603,46 @@ public interface QVTrelationPackage extends EPackage { EReference KEY__TRANSFORMATION = eINSTANCE.getKey_Transformation(); /** + * The meta object literal for the '<em><b>Validate Identifies Is AUsed Package Class</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation KEY___VALIDATE_IDENTIFIES_IS_AUSED_PACKAGE_CLASS__DIAGNOSTICCHAIN_MAP = eINSTANCE.getKey__ValidateIdentifiesIsAUsedPackageClass__DiagnosticChain_Map(); + + /** + * The meta object literal for the '<em><b>Validate Opposite Parts Have Opposites</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation KEY___VALIDATE_OPPOSITE_PARTS_HAVE_OPPOSITES__DIAGNOSTICCHAIN_MAP = eINSTANCE.getKey__ValidateOppositePartsHaveOpposites__DiagnosticChain_Map(); + + /** + * The meta object literal for the '<em><b>Validate Opposite Parts Are Opposite Parts</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation KEY___VALIDATE_OPPOSITE_PARTS_ARE_OPPOSITE_PARTS__DIAGNOSTICCHAIN_MAP = eINSTANCE.getKey__ValidateOppositePartsAreOppositeParts__DiagnosticChain_Map(); + + /** + * The meta object literal for the '<em><b>Validate Parts Are Parts</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation KEY___VALIDATE_PARTS_ARE_PARTS__DIAGNOSTICCHAIN_MAP = eINSTANCE.getKey__ValidatePartsAreParts__DiagnosticChain_Map(); + + /** + * The meta object literal for the '<em><b>Validate Parts Are Unique</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation KEY___VALIDATE_PARTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP = eINSTANCE.getKey__ValidatePartsAreUnique__DiagnosticChain_Map(); + + /** * The meta object literal for the '<em><b>Opposite Part</b></em>' reference list feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2452,6 +2701,22 @@ public interface QVTrelationPackage extends EPackage { EReference RELATION__WHERE = eINSTANCE.getRelation_Where(); /** + * The meta object literal for the '<em><b>Validate Domains Are Relation Domains</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation RELATION___VALIDATE_DOMAINS_ARE_RELATION_DOMAINS__DIAGNOSTICCHAIN_MAP = eINSTANCE.getRelation__ValidateDomainsAreRelationDomains__DiagnosticChain_Map(); + + /** + * The meta object literal for the '<em><b>Validate Transformation Is Relational Transformation</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation RELATION___VALIDATE_TRANSFORMATION_IS_RELATIONAL_TRANSFORMATION__DIAGNOSTICCHAIN_MAP = eINSTANCE.getRelation__ValidateTransformationIsRelationalTransformation__DiagnosticChain_Map(); + + /** * The meta object literal for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.RelationCallExpImpl <em>Relation Call Exp</em>}' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2520,6 +2785,14 @@ public interface QVTrelationPackage extends EPackage { EReference RELATION_DOMAIN__ROOT_VARIABLE = eINSTANCE.getRelationDomain_RootVariable(); /** + * The meta object literal for the '<em><b>Validate Relation Domain Assignments Are Unique</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation RELATION_DOMAIN___VALIDATE_RELATION_DOMAIN_ASSIGNMENTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP = eINSTANCE.getRelationDomain__ValidateRelationDomainAssignmentsAreUnique__DiagnosticChain_Map(); + + /** * The meta object literal for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.RelationDomainAssignmentImpl <em>Relation Domain Assignment</em>}' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2546,6 +2819,14 @@ public interface QVTrelationPackage extends EPackage { EReference RELATION_DOMAIN_ASSIGNMENT__VARIABLE = eINSTANCE.getRelationDomainAssignment_Variable(); /** + * The meta object literal for the '<em><b>Validate Compatible Type For Value</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation RELATION_DOMAIN_ASSIGNMENT___VALIDATE_COMPATIBLE_TYPE_FOR_VALUE__DIAGNOSTICCHAIN_MAP = eINSTANCE.getRelationDomainAssignment__ValidateCompatibleTypeForValue__DiagnosticChain_Map(); + + /** * The meta object literal for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.RelationModelImpl <em>Relation Model</em>}' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -2608,6 +2889,22 @@ public interface QVTrelationPackage extends EPackage { EReference RELATIONAL_TRANSFORMATION__OWNED_KEY = eINSTANCE.getRelationalTransformation_OwnedKey(); /** + * The meta object literal for the '<em><b>Validate Keys Are Unique</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation RELATIONAL_TRANSFORMATION___VALIDATE_KEYS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP = eINSTANCE.getRelationalTransformation__ValidateKeysAreUnique__DiagnosticChain_Map(); + + /** + * The meta object literal for the '<em><b>Validate Rules Are Relations</b></em>' operation. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EOperation RELATIONAL_TRANSFORMATION___VALIDATE_RULES_ARE_RELATIONS__DIAGNOSTICCHAIN_MAP = eINSTANCE.getRelationalTransformation__ValidateRulesAreRelations__DiagnosticChain_Map(); + + /** * The meta object literal for the '{@link org.eclipse.qvtd.pivot.qvtrelation.impl.SharedVariableImpl <em>Shared Variable</em>}' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationTables.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationTables.java index 07d2491c2..41a87fa14 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationTables.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/QVTrelationTables.java @@ -74,6 +74,7 @@ public class QVTrelationTables public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Key = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTrelation.getClassId("Key", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_OCLExpression = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_$metamodel$.getClassId("OCLExpression", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Operation = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_$metamodel$.getClassId("Operation", 0); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Package = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_$metamodel$.getClassId("Package", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Pattern = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTbase.getClassId("Pattern", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Property = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_$metamodel$.getClassId("Property", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Relation = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTrelation.getClassId("Relation", 0); @@ -82,21 +83,40 @@ public class QVTrelationTables public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_RelationDomainAssignment = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTrelation.getClassId("RelationDomainAssignment", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_RelationImplementation = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTrelation.getClassId("RelationImplementation", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_RelationalTransformation = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTrelation.getClassId("RelationalTransformation", 0); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Rule = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTbase.getClassId("Rule", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_TemplateExp = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTtemplate.getClassId("TemplateExp", 0); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Transformation = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTbase.getClassId("Transformation", 0); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Type = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_$metamodel$.getClassId("Type", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_TypedModel = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTbase.getClassId("TypedModel", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Variable = org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.PACKid_$metamodel$.getClassId("Variable", 0); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue INT_0 = org.eclipse.ocl.pivot.utilities.ValueUtil.integerValueOf("0"); + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_Key_c_c_IdentifiesIsAUsedPackageClass = "Key::IdentifiesIsAUsedPackageClass"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_Key_c_c_OppositePartsAreOppositeParts = "Key::OppositePartsAreOppositeParts"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_Key_c_c_OppositePartsHaveOpposites = "Key::OppositePartsHaveOpposites"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_Key_c_c_PartsAreParts = "Key::PartsAreParts"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_Key_c_c_PartsAreUnique = "Key::PartsAreUnique"; public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_RelationCallExp_c_c_MatchingArgumentCount = "RelationCallExp::MatchingArgumentCount"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_RelationDomainAssignment_c_c_CompatibleTypeForValue = "RelationDomainAssignment::CompatibleTypeForValue"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_RelationDomain_c_c_RelationDomainAssignmentsAreUnique = "RelationDomain::RelationDomainAssignmentsAreUnique"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_Relation_c_c_DomainsAreRelationDomains = "Relation::DomainsAreRelationDomains"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_Relation_c_c_TransformationIsRelationalTransformation = "Relation::TransformationIsRelationalTransformation"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_RelationalTransformation_c_c_KeysAreUnique = "RelationalTransformation::KeysAreUnique"; + public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR_RelationalTransformation_c_c_RulesAreRelations = "RelationalTransformation::RulesAreRelations"; + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId BAG_CLSSid_Property = org.eclipse.ocl.pivot.ids.TypeId.BAG.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Property); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_Domain = org.eclipse.ocl.pivot.ids.TypeId.ORDERED_SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Domain); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_DomainPattern = org.eclipse.ocl.pivot.ids.TypeId.ORDERED_SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_DomainPattern); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_OCLExpression = org.eclipse.ocl.pivot.ids.TypeId.ORDERED_SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_OCLExpression); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_TypedModel = org.eclipse.ocl.pivot.ids.TypeId.ORDERED_SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_TypedModel); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_Variable = org.eclipse.ocl.pivot.ids.TypeId.ORDERED_SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Variable); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SEQ_CLSSid_Package = org.eclipse.ocl.pivot.ids.TypeId.SEQUENCE.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Package); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SEQ_CLSSid_RelationDomain = org.eclipse.ocl.pivot.ids.TypeId.SEQUENCE.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_RelationDomain); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SEQ_CLSSid_Variable = org.eclipse.ocl.pivot.ids.TypeId.SEQUENCE.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Variable); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Key = org.eclipse.ocl.pivot.ids.TypeId.SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Key); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Package = org.eclipse.ocl.pivot.ids.TypeId.SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Package); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Property = org.eclipse.ocl.pivot.ids.TypeId.SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Property); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_RelationDomainAssignment = org.eclipse.ocl.pivot.ids.TypeId.SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_RelationDomainAssignment); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_RelationImplementation = org.eclipse.ocl.pivot.ids.TypeId.SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_RelationImplementation); + public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Rule = org.eclipse.ocl.pivot.ids.TypeId.SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Rule); public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Variable = org.eclipse.ocl.pivot.ids.TypeId.SET.getSpecializedId(org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables.CLSSid_Variable); /** diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Relation.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Relation.java index 724dcdacc..2a89c1eeb 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Relation.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/Relation.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation; +import java.util.Map; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.ocl.pivot.Variable; import org.eclipse.qvtd.pivot.qvtbase.Pattern; @@ -154,4 +156,22 @@ public interface Relation extends Rule { */ void setWhere(Pattern value); + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='DomainsAreRelationDomains'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv DomainsAreRelationDomains:\n * let\n * severity : Integer[1] = \'Relation::DomainsAreRelationDomains\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[?] = domain->forAll(\n * oclIsKindOf(RelationDomain))\n * in\n * \'Relation::DomainsAreRelationDomains\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Relation_c_c_DomainsAreRelationDomains);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.qvtd.pivot.qvtbase.Domain%>> domain = this.getDomain();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_domain = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_Domain, domain);\n\t\t/*@Thrown\052/ java.lang.@<%org.eclipse.jdt.annotation.Nullable%> Object accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_domain.iterator();\n\t\t/*@Thrown\052/ boolean status;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tif (accumulator == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\n\t\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow (<%org.eclipse.ocl.pivot.values.InvalidValueException%>)accumulator;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtbase.@<%org.eclipse.jdt.annotation.NonNull%> Domain _1 = (<%org.eclipse.qvtd.pivot.qvtbase.Domain%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * oclIsKindOf(RelationDomain)\n\t\t\t \052/\n\t\t\tfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class TYP_qvtrelation_c_c_RelationDomain = idResolver.getClass(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.CLSSid_RelationDomain, null);\n\t\t\tfinal /*@NonInvalid\052/ boolean oclIsKindOf = <%org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsKindOfOperation%>.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_RelationDomain).booleanValue();\n\t\t\t//\n\t\t\tif (oclIsKindOf == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE) {\t\t\t\t\t// Normal unsuccessful body evaluation result\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE;\n\t\t\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Stop immediately\n\t\t\t}\n\t\t\telse if (oclIsKindOf == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\t\t\t\t// Normal successful body evaluation result\n\t\t\t\t;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Carry on\n\t\t\t}\n\t\t\telse {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Impossible badly typed result\n\t\t\t\taccumulator = new <%org.eclipse.ocl.pivot.values.InvalidValueException%>(<%org.eclipse.ocl.pivot.messages.PivotMessages%>.NonBooleanBody, \"forAll\");\n\t\t\t}\n\t\t}\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Relation_c_c_DomainsAreRelationDomains, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateDomainsAreRelationDomains(DiagnosticChain diagnostics, Map<Object, Object> context); + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='TransformationIsRelationalTransformation'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv TransformationIsRelationalTransformation:\n * let\n * severity : Integer[1] = \'Relation::TransformationIsRelationalTransformation\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[1] = transformation.oclIsKindOf(RelationalTransformation)\n * in\n * \'Relation::TransformationIsRelationalTransformation\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Relation_c_c_TransformationIsRelationalTransformation);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\tfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class TYP_qvtrelation_c_c_RelationalTransformation = idResolver.getClass(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.CLSSid_RelationalTransformation, null);\n\t\tfinal /*@Thrown\052/ org.eclipse.qvtd.pivot.qvtbase.@<%org.eclipse.jdt.annotation.Nullable%> Transformation transformation = this.getTransformation();\n\t\tfinal /*@Thrown\052/ boolean status = <%org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsKindOfOperation%>.INSTANCE.evaluate(executor, transformation, TYP_qvtrelation_c_c_RelationalTransformation).booleanValue();\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_Relation_c_c_TransformationIsRelationalTransformation, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateTransformationIsRelationalTransformation(DiagnosticChain diagnostics, Map<Object, Object> context); + } // Relation diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationCallExp.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationCallExp.java index 28a556f0d..1fdbfc873 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationCallExp.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationCallExp.java @@ -83,7 +83,7 @@ public interface RelationCallExp extends OCLExpression { * <!-- begin-user-doc --> * <!-- end-user-doc --> * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='MatchingArgumentCount'" - * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv MatchingArgumentCount:\n * let\n * severity : Integer[1] = \'RelationCallExp::MatchingArgumentCount\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[1] = self.argument->size() =\n * self.referredRelation.domain.oclAsType(RelationDomain)\n * .rootVariable->size()\n * in\n * \'RelationCallExp::MatchingArgumentCount\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationCallExp_c_c_MatchingArgumentCount);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.OCLExpression%>> argument = this.getArgument();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_argument = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_OCLExpression, argument);\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue size = <%org.eclipse.ocl.pivot.library.collection.CollectionSizeOperation%>.INSTANCE.evaluate(BOXED_argument);\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> Relation referredRelation = this.getReferredRelation();\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.qvtd.pivot.qvtbase.Domain%>> domain = referredRelation.getDomain();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_domain = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_Domain, domain);\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.SequenceValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createSequenceAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SEQ_CLSSid_RelationDomain);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_domain.iterator();\n\t\t/*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SequenceValue collect_0;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tcollect_0 = accumulator;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtbase.@<%org.eclipse.jdt.annotation.NonNull%> Domain _1 = (<%org.eclipse.qvtd.pivot.qvtbase.Domain%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * oclAsType(RelationDomain)\n\t\t\t \052/\n\t\t\tfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class TYP_qvtrelation_c_c_RelationDomain = idResolver.getClass(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.CLSSid_RelationDomain, null);\n\t\t\tfinal /*@Thrown\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> RelationDomain oclAsType = <%org.eclipse.ocl.pivot.utilities.ClassUtil%>.nonNullState((<%org.eclipse.qvtd.pivot.qvtrelation.RelationDomain%>)<%org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsTypeOperation%>.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_RelationDomain));\n\t\t\t//\n\t\t\taccumulator.add(oclAsType);\n\t\t}\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.SequenceValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createSequenceAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SEQ_CLSSid_Variable);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1_0 = collect_0.iterator();\n\t\t/*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SequenceValue collect;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1_0.hasNext()) {\n\t\t\t\tcollect = accumulator_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> RelationDomain _1_0 = (<%org.eclipse.qvtd.pivot.qvtrelation.RelationDomain%>)ITERATOR__1_0.next();\n\t\t\t/**\n\t\t\t * rootVariable\n\t\t\t \052/\n\t\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Variable%>> rootVariable = _1_0.getRootVariable();\n\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_rootVariable = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_Variable, rootVariable);\n\t\t\t//\n\t\t\tfor (Object value : BOXED_rootVariable.flatten().getElements()) {\n\t\t\t\taccumulator_0.add(value);\n\t\t\t}\n\t\t}\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue size_0 = <%org.eclipse.ocl.pivot.library.collection.CollectionSizeOperation%>.INSTANCE.evaluate(collect);\n\t\tfinal /*@Thrown\052/ boolean status = size.equals(size_0);\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationCallExp_c_c_MatchingArgumentCount, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv MatchingArgumentCount:\n * let\n * severity : Integer[1] = \'RelationCallExp::MatchingArgumentCount\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[1] = self.argument->size() =\n * self.referredRelation.domain.oclAsType(RelationDomain)\n * .rootVariable->size()\n * in\n * \'RelationCallExp::MatchingArgumentCount\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationCallExp_c_c_MatchingArgumentCount);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.OCLExpression%>> argument = this.getArgument();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_argument = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_OCLExpression, argument);\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue size = <%org.eclipse.ocl.pivot.library.collection.CollectionSizeOperation%>.INSTANCE.evaluate(BOXED_argument);\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> Relation referredRelation = this.getReferredRelation();\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.qvtd.pivot.qvtbase.Domain%>> domain = referredRelation.getDomain();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_domain = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_Domain, domain);\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.SequenceValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createSequenceAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SEQ_CLSSid_RelationDomain);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_domain.iterator();\n\t\t/*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SequenceValue collect_0;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tcollect_0 = accumulator;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtbase.@<%org.eclipse.jdt.annotation.NonNull%> Domain _1 = (<%org.eclipse.qvtd.pivot.qvtbase.Domain%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * oclAsType(RelationDomain)\n\t\t\t \052/\n\t\t\tfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class TYP_qvtrelation_c_c_RelationDomain_0 = idResolver.getClass(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.CLSSid_RelationDomain, null);\n\t\t\tfinal /*@Thrown\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> RelationDomain oclAsType = <%org.eclipse.ocl.pivot.utilities.ClassUtil%>.nonNullState((<%org.eclipse.qvtd.pivot.qvtrelation.RelationDomain%>)<%org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsTypeOperation%>.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_RelationDomain_0));\n\t\t\t//\n\t\t\taccumulator.add(oclAsType);\n\t\t}\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.SequenceValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createSequenceAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SEQ_CLSSid_Variable);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1_0 = collect_0.iterator();\n\t\t/*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SequenceValue collect;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1_0.hasNext()) {\n\t\t\t\tcollect = accumulator_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> RelationDomain _1_0 = (<%org.eclipse.qvtd.pivot.qvtrelation.RelationDomain%>)ITERATOR__1_0.next();\n\t\t\t/**\n\t\t\t * rootVariable\n\t\t\t \052/\n\t\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.ocl.pivot.Variable%>> rootVariable = _1_0.getRootVariable();\n\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> OrderedSetValue BOXED_rootVariable = idResolver.createOrderedSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.ORD_CLSSid_Variable, rootVariable);\n\t\t\t//\n\t\t\tfor (Object value : BOXED_rootVariable.flatten().getElements()) {\n\t\t\t\taccumulator_0.add(value);\n\t\t\t}\n\t\t}\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue size_0 = <%org.eclipse.ocl.pivot.library.collection.CollectionSizeOperation%>.INSTANCE.evaluate(collect);\n\t\tfinal /*@Thrown\052/ boolean status = size.equals(size_0);\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationCallExp_c_c_MatchingArgumentCount, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" * @generated */ boolean validateMatchingArgumentCount(DiagnosticChain diagnostics, Map<Object, Object> context); diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomain.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomain.java index 750f221e0..b361150ee 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomain.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomain.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation; +import java.util.Map; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.ocl.pivot.Variable; @@ -86,4 +88,13 @@ public interface RelationDomain extends Domain { */ @NonNull EList<Variable> getRootVariable(); + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='RelationDomainAssignmentsAreUnique'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv RelationDomainAssignmentsAreUnique:\n * let\n * severity : Integer[1] = \'RelationDomain::RelationDomainAssignmentsAreUnique\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let status : OclAny[1] = defaultAssignment->isUnique(variable)\n * in\n * \'RelationDomain::RelationDomainAssignmentsAreUnique\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationDomain_c_c_RelationDomainAssignmentsAreUnique);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment%>> defaultAssignment = this.getDefaultAssignment();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_defaultAssignment = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_RelationDomainAssignment, defaultAssignment);\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.SetValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createSetAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_RelationDomainAssignment);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_defaultAssignment.iterator();\n\t\t/*@Thrown\052/ boolean status;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> RelationDomainAssignment _1 = (<%org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * variable\n\t\t\t \052/\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Variable variable = _1.getVariable();\n\t\t\t//\n\t\t\tif (accumulator.includes(variable) == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE;\t\t\t// Abort after second find\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse {\n\t\t\t\taccumulator.add(variable);\n\t\t\t}\n\t\t}\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationDomain_c_c_RelationDomainAssignmentsAreUnique, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateRelationDomainAssignmentsAreUnique(DiagnosticChain diagnostics, Map<Object, Object> context); + } // RelationDomain diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomainAssignment.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomainAssignment.java index 09a80658b..ef6b17c89 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomainAssignment.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationDomainAssignment.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation; +import java.util.Map; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.ocl.pivot.Element; import org.eclipse.ocl.pivot.OCLExpression; import org.eclipse.ocl.pivot.Variable; @@ -88,4 +90,13 @@ public interface RelationDomainAssignment extends Element { */ void setVariable(Variable value); + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='CompatibleTypeForValue'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv CompatibleTypeForValue:\n * let\n * severity : Integer[1] = \'RelationDomainAssignment::CompatibleTypeForValue\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[1] = valueExp.type.conformsTo(variable.type)\n * in\n * \'RelationDomainAssignment::CompatibleTypeForValue\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationDomainAssignment_c_c_CompatibleTypeForValue);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> OCLExpression valueExp = this.getValueExp();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.Nullable%> Type type = valueExp.getType();\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Variable variable = this.getVariable();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.Nullable%> Type type_0 = variable.getType();\n\t\tfinal /*@Thrown\052/ boolean status = <%org.eclipse.ocl.pivot.library.classifier.OclTypeConformsToOperation%>.INSTANCE.evaluate(executor, type, type_0).booleanValue();\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationDomainAssignment_c_c_CompatibleTypeForValue, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateCompatibleTypeForValue(DiagnosticChain diagnostics, Map<Object, Object> context); + } // RelationDomainAssignment diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationalTransformation.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationalTransformation.java index cc8c7eeae..3684b8ba5 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationalTransformation.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/RelationalTransformation.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation; +import java.util.Map; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.qvtd.pivot.qvtbase.Transformation; @@ -49,4 +51,22 @@ public interface RelationalTransformation extends Transformation { */ EList<Key> getOwnedKey(); + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='KeysAreUnique'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv KeysAreUnique:\n * let\n * severity : Integer[1] = \'RelationalTransformation::KeysAreUnique\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let status : OclAny[1] = ownedKey->isUnique(identifies)\n * in\n * \'RelationalTransformation::KeysAreUnique\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationalTransformation_c_c_KeysAreUnique);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\t@SuppressWarnings(\"null\")\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.qvtd.pivot.qvtrelation.Key%>> ownedKey = this.getOwnedKey();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_ownedKey = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Key, ownedKey);\n\t\t/*@Thrown\052/ <%org.eclipse.ocl.pivot.values.SetValue%>.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createSetAccumulatorValue(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Key);\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_ownedKey.iterator();\n\t\t/*@Thrown\052/ boolean status;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtrelation.@<%org.eclipse.jdt.annotation.NonNull%> Key _1 = (<%org.eclipse.qvtd.pivot.qvtrelation.Key%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * identifies\n\t\t\t \052/\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class identifies = _1.getIdentifies();\n\t\t\t//\n\t\t\tif (accumulator.includes(identifies) == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE;\t\t\t// Abort after second find\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse {\n\t\t\t\taccumulator.add(identifies);\n\t\t\t}\n\t\t}\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationalTransformation_c_c_KeysAreUnique, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateKeysAreUnique(DiagnosticChain diagnostics, Map<Object, Object> context); + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @model annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='RulesAreRelations'" + * annotation="http://www.eclipse.org/emf/2002/GenModel body='/**\n *\n * inv RulesAreRelations:\n * let\n * severity : Integer[1] = \'RelationalTransformation::RulesAreRelations\'.getSeverity()\n * in\n * if severity <= 0\n * then true\n * else\n * let\n * status : OclAny[?] = rule->forAll(oclIsKindOf(Relation))\n * in\n * \'RelationalTransformation::RulesAreRelations\'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0)\n * endif\n \052/\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.evaluation.@<%org.eclipse.jdt.annotation.NonNull%> Executor executor = <%org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal%>.getExecutor(this);\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.ids.@<%org.eclipse.jdt.annotation.NonNull%> IdResolver idResolver = executor.getIdResolver();\nfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> IntegerValue severity_0 = <%org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationalTransformation_c_c_RulesAreRelations);\nfinal /*@NonInvalid\052/ boolean le = <%org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation%>.INSTANCE.evaluate(executor, severity_0, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n/*@NonInvalid\052/ boolean symbol_0;\nif (le) {\n\tsymbol_0 = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n}\nelse {\n\t/*@Caught\052/ @<%org.eclipse.jdt.annotation.NonNull%> <%java.lang.Object%> CAUGHT_status;\n\ttry {\n\t\tfinal /*@Thrown\052/ java.util.@<%org.eclipse.jdt.annotation.NonNull%> List<<%org.eclipse.qvtd.pivot.qvtbase.Rule%>> rule = this.getRule();\n\t\tfinal /*@Thrown\052/ org.eclipse.ocl.pivot.values.@<%org.eclipse.jdt.annotation.NonNull%> SetValue BOXED_rule = idResolver.createSetOfAll(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.SET_CLSSid_Rule, rule);\n\t\t/*@Thrown\052/ java.lang.@<%org.eclipse.jdt.annotation.Nullable%> Object accumulator = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t@<%org.eclipse.jdt.annotation.NonNull%> <%java.util.Iterator%><<%java.lang.Object%>> ITERATOR__1 = BOXED_rule.iterator();\n\t\t/*@Thrown\052/ boolean status;\n\t\twhile (true) {\n\t\t\tif (!ITERATOR__1.hasNext()) {\n\t\t\t\tif (accumulator == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\n\t\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow (<%org.eclipse.ocl.pivot.values.InvalidValueException%>)accumulator;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t@SuppressWarnings(\"null\")\n\t\t\t/*@NonInvalid\052/ org.eclipse.qvtd.pivot.qvtbase.@<%org.eclipse.jdt.annotation.NonNull%> Rule _1 = (<%org.eclipse.qvtd.pivot.qvtbase.Rule%>)ITERATOR__1.next();\n\t\t\t/**\n\t\t\t * oclIsKindOf(Relation)\n\t\t\t \052/\n\t\t\tfinal /*@NonInvalid\052/ org.eclipse.ocl.pivot.@<%org.eclipse.jdt.annotation.NonNull%> Class TYP_qvtrelation_c_c_Relation = idResolver.getClass(<%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.CLSSid_Relation, null);\n\t\t\tfinal /*@NonInvalid\052/ boolean oclIsKindOf = <%org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsKindOfOperation%>.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_Relation).booleanValue();\n\t\t\t//\n\t\t\tif (oclIsKindOf == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE) {\t\t\t\t\t// Normal unsuccessful body evaluation result\n\t\t\t\tstatus = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.FALSE_VALUE;\n\t\t\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Stop immediately\n\t\t\t}\n\t\t\telse if (oclIsKindOf == <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.TRUE_VALUE) {\t\t\t\t// Normal successful body evaluation result\n\t\t\t\t;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Carry on\n\t\t\t}\n\t\t\telse {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Impossible badly typed result\n\t\t\t\taccumulator = new <%org.eclipse.ocl.pivot.values.InvalidValueException%>(<%org.eclipse.ocl.pivot.messages.PivotMessages%>.NonBooleanBody, \"forAll\");\n\t\t\t}\n\t\t}\n\t\tCAUGHT_status = status;\n\t}\n\tcatch (<%java.lang.Exception%> e) {\n\t\tCAUGHT_status = <%org.eclipse.ocl.pivot.utilities.ValueUtil%>.createInvalidValue(e);\n\t}\n\tfinal /*@NonInvalid\052/ boolean logDiagnostic = <%org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation%>.INSTANCE.evaluate(executor, <%org.eclipse.ocl.pivot.ids.TypeId%>.BOOLEAN, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.STR_RelationalTransformation_c_c_RulesAreRelations, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, <%org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables%>.INT_0).booleanValue();\n\tsymbol_0 = logDiagnostic;\n}\nreturn Boolean.TRUE == symbol_0;'" + * @generated + */ + boolean validateRulesAreRelations(DiagnosticChain diagnostics, Map<Object, Object> context); + } // RelationalTransformation diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/KeyImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/KeyImpl.java index e994bc4f5..dba34ef7f 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/KeyImpl.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/KeyImpl.java @@ -10,10 +10,14 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation.impl; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; +import java.util.Iterator; +import java.util.Map; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; @@ -21,11 +25,27 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EObjectResolvingEList; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.ocl.pivot.Property; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.internal.ElementImpl; +import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal; +import org.eclipse.ocl.pivot.library.classifier.OclTypeConformsToOperation; +import org.eclipse.ocl.pivot.library.collection.CollectionExcludesAllOperation; +import org.eclipse.ocl.pivot.library.collection.CollectionIncludesOperation; +import org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation; +import org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation; +import org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation; +import org.eclipse.ocl.pivot.messages.PivotMessages; import org.eclipse.ocl.pivot.util.Visitor; +import org.eclipse.ocl.pivot.utilities.ValueUtil; +import org.eclipse.ocl.pivot.values.BagValue; +import org.eclipse.ocl.pivot.values.InvalidValueException; +import org.eclipse.ocl.pivot.values.SequenceValue; +import org.eclipse.qvtd.pivot.qvtbase.TypedModel; import org.eclipse.qvtd.pivot.qvtrelation.Key; import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage; +import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables; import org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation; import org.eclipse.qvtd.pivot.qvtrelation.util.QVTrelationVisitor; @@ -197,6 +217,418 @@ public class KeyImpl extends ElementImpl implements Key { * @generated */ @Override + public boolean validateIdentifiesIsAUsedPackageClass(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv IdentifiesIsAUsedPackageClass: + * let + * severity : Integer[1] = 'Key::IdentifiesIsAUsedPackageClass'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[1] = transformation.modelParameter.usedPackage->includes(identifies.owningPackage) + * in + * 'Key::IdentifiesIsAUsedPackageClass'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_Key_c_c_IdentifiesIsAUsedPackageClass); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + final /*@Thrown*/ org.eclipse.qvtd.pivot.qvtrelation.@Nullable RelationalTransformation transformation = this.getTransformation(); + if (transformation == null) { + throw new InvalidValueException("Null source for \'\'http://www.eclipse.org/qvt/2015/QVTbase\'::Transformation::modelParameter\'"); + } + final /*@Thrown*/ java.util.@NonNull List<TypedModel> modelParameter = transformation.getModelParameter(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull OrderedSetValue BOXED_modelParameter = idResolver.createOrderedSetOfAll(QVTrelationTables.ORD_CLSSid_TypedModel, modelParameter); + /*@Thrown*/ SequenceValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSequenceAccumulatorValue(QVTrelationTables.SEQ_CLSSid_Package); + @NonNull Iterator<Object> ITERATOR__1 = BOXED_modelParameter.iterator(); + /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SequenceValue collect; + while (true) { + if (!ITERATOR__1.hasNext()) { + collect = accumulator; + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.qvtd.pivot.qvtbase.@NonNull TypedModel _1 = (TypedModel)ITERATOR__1.next(); + /** + * usedPackage + */ + final /*@Thrown*/ java.util.@NonNull List<org.eclipse.ocl.pivot.Package> usedPackage = _1.getUsedPackage(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_usedPackage = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Package, usedPackage); + // + for (Object value : BOXED_usedPackage.flatten().getElements()) { + accumulator.add(value); + } + } + @SuppressWarnings("null") + final /*@Thrown*/ org.eclipse.ocl.pivot.@NonNull Class identifies = this.getIdentifies(); + final /*@Thrown*/ org.eclipse.ocl.pivot.@Nullable Package owningPackage = identifies.getOwningPackage(); + final /*@Thrown*/ boolean status = CollectionIncludesOperation.INSTANCE.evaluate(collect, owningPackage).booleanValue(); + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_Key_c_c_IdentifiesIsAUsedPackageClass, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean validateOppositePartsHaveOpposites(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv OppositePartsHaveOpposites: + * let severity : Integer[1] = 'Key::OppositePartsHaveOpposites'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[?] = oppositePart->forAll(opposite <> null) + * in + * 'Key::OppositePartsHaveOpposites'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_Key_c_c_OppositePartsHaveOpposites); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + @SuppressWarnings("null") + final /*@Thrown*/ java.util.@NonNull List<Property> oppositePart = this.getOppositePart(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_oppositePart = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Property, oppositePart); + /*@Thrown*/ java.lang.@Nullable Object accumulator = ValueUtil.TRUE_VALUE; + @NonNull Iterator<Object> ITERATOR__1 = BOXED_oppositePart.iterator(); + /*@Thrown*/ boolean status; + while (true) { + if (!ITERATOR__1.hasNext()) { + if (accumulator == ValueUtil.TRUE_VALUE) { + status = ValueUtil.TRUE_VALUE; + } + else { + throw (InvalidValueException)accumulator; + } + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Property _1 = (Property)ITERATOR__1.next(); + /** + * opposite <> null + */ + /*@Caught*/ @NonNull Object CAUGHT_ne; + try { + final /*@Thrown*/ org.eclipse.ocl.pivot.@Nullable Property opposite = _1.getOpposite(); + final /*@Thrown*/ boolean ne = opposite != null; + CAUGHT_ne = ne; + } + catch (Exception e) { + CAUGHT_ne = ValueUtil.createInvalidValue(e); + } + // + if (CAUGHT_ne == ValueUtil.FALSE_VALUE) { // Normal unsuccessful body evaluation result + status = ValueUtil.FALSE_VALUE; + break; // Stop immediately + } + else if (CAUGHT_ne == ValueUtil.TRUE_VALUE) { // Normal successful body evaluation result + ; // Carry on + } + else if (CAUGHT_ne instanceof InvalidValueException) { // Abnormal exception evaluation result + accumulator = CAUGHT_ne; // Cache an exception failure + } + else { // Impossible badly typed result + accumulator = new InvalidValueException(PivotMessages.NonBooleanBody, "forAll"); + } + } + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_Key_c_c_OppositePartsHaveOpposites, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean validateOppositePartsAreOppositeParts(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv OppositePartsAreOppositeParts: + * let + * severity : Integer[1] = 'Key::OppositePartsAreOppositeParts'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[?] = oppositePart->forAll( + * self.identifies.conformsTo(type)) + * in + * 'Key::OppositePartsAreOppositeParts'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_Key_c_c_OppositePartsAreOppositeParts); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + @SuppressWarnings("null") + final /*@Thrown*/ java.util.@NonNull List<Property> oppositePart = this.getOppositePart(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_oppositePart = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Property, oppositePart); + /*@Thrown*/ java.lang.@Nullable Object accumulator = ValueUtil.TRUE_VALUE; + @NonNull Iterator<Object> ITERATOR__1 = BOXED_oppositePart.iterator(); + /*@Thrown*/ boolean status; + while (true) { + if (!ITERATOR__1.hasNext()) { + if (accumulator == ValueUtil.TRUE_VALUE) { + status = ValueUtil.TRUE_VALUE; + } + else { + throw (InvalidValueException)accumulator; + } + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Property _1 = (Property)ITERATOR__1.next(); + /** + * self.identifies.conformsTo(type) + */ + /*@Caught*/ @NonNull Object CAUGHT_conformsTo; + try { + @SuppressWarnings("null") + final /*@Thrown*/ org.eclipse.ocl.pivot.@NonNull Class identifies = this.getIdentifies(); + final /*@Thrown*/ org.eclipse.ocl.pivot.@Nullable Type type = _1.getType(); + final /*@Thrown*/ boolean conformsTo = OclTypeConformsToOperation.INSTANCE.evaluate(executor, identifies, type).booleanValue(); + CAUGHT_conformsTo = conformsTo; + } + catch (Exception e) { + CAUGHT_conformsTo = ValueUtil.createInvalidValue(e); + } + // + if (CAUGHT_conformsTo == ValueUtil.FALSE_VALUE) { // Normal unsuccessful body evaluation result + status = ValueUtil.FALSE_VALUE; + break; // Stop immediately + } + else if (CAUGHT_conformsTo == ValueUtil.TRUE_VALUE) { // Normal successful body evaluation result + ; // Carry on + } + else if (CAUGHT_conformsTo instanceof InvalidValueException) { // Abnormal exception evaluation result + accumulator = CAUGHT_conformsTo; // Cache an exception failure + } + else { // Impossible badly typed result + accumulator = new InvalidValueException(PivotMessages.NonBooleanBody, "forAll"); + } + } + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_Key_c_c_OppositePartsAreOppositeParts, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean validatePartsAreParts(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv PartsAreParts: + * let severity : Integer[1] = 'Key::PartsAreParts'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[?] = part->forAll( + * self.identifies.conformsTo(owningClass)) + * in + * 'Key::PartsAreParts'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_Key_c_c_PartsAreParts); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + @SuppressWarnings("null") + final /*@Thrown*/ java.util.@NonNull List<Property> part = this.getPart(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_part = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Property, part); + /*@Thrown*/ java.lang.@Nullable Object accumulator = ValueUtil.TRUE_VALUE; + @NonNull Iterator<Object> ITERATOR__1 = BOXED_part.iterator(); + /*@Thrown*/ boolean status; + while (true) { + if (!ITERATOR__1.hasNext()) { + if (accumulator == ValueUtil.TRUE_VALUE) { + status = ValueUtil.TRUE_VALUE; + } + else { + throw (InvalidValueException)accumulator; + } + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Property _1 = (Property)ITERATOR__1.next(); + /** + * self.identifies.conformsTo(owningClass) + */ + /*@Caught*/ @NonNull Object CAUGHT_conformsTo; + try { + @SuppressWarnings("null") + final /*@Thrown*/ org.eclipse.ocl.pivot.@NonNull Class identifies = this.getIdentifies(); + final /*@Thrown*/ org.eclipse.ocl.pivot.@Nullable Class owningClass = _1.getOwningClass(); + final /*@Thrown*/ boolean conformsTo = OclTypeConformsToOperation.INSTANCE.evaluate(executor, identifies, owningClass).booleanValue(); + CAUGHT_conformsTo = conformsTo; + } + catch (Exception e) { + CAUGHT_conformsTo = ValueUtil.createInvalidValue(e); + } + // + if (CAUGHT_conformsTo == ValueUtil.FALSE_VALUE) { // Normal unsuccessful body evaluation result + status = ValueUtil.FALSE_VALUE; + break; // Stop immediately + } + else if (CAUGHT_conformsTo == ValueUtil.TRUE_VALUE) { // Normal successful body evaluation result + ; // Carry on + } + else if (CAUGHT_conformsTo instanceof InvalidValueException) { // Abnormal exception evaluation result + accumulator = CAUGHT_conformsTo; // Cache an exception failure + } + else { // Impossible badly typed result + accumulator = new InvalidValueException(PivotMessages.NonBooleanBody, "forAll"); + } + } + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_Key_c_c_PartsAreParts, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean validatePartsAreUnique(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv PartsAreUnique: + * let severity : Integer[1] = 'Key::PartsAreUnique'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[1] = part->excludesAll(oppositePart.opposite) + * in + * 'Key::PartsAreUnique'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_Key_c_c_PartsAreUnique); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + @SuppressWarnings("null") + final /*@Thrown*/ java.util.@NonNull List<Property> part = this.getPart(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_part = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Property, part); + @SuppressWarnings("null") + final /*@Thrown*/ java.util.@NonNull List<Property> oppositePart = this.getOppositePart(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_oppositePart = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Property, oppositePart); + /*@Thrown*/ BagValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createBagAccumulatorValue(QVTrelationTables.BAG_CLSSid_Property); + @NonNull Iterator<Object> ITERATOR__1 = BOXED_oppositePart.iterator(); + /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull BagValue collect; + while (true) { + if (!ITERATOR__1.hasNext()) { + collect = accumulator; + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Property _1 = (Property)ITERATOR__1.next(); + /** + * opposite + */ + final /*@Thrown*/ org.eclipse.ocl.pivot.@Nullable Property opposite = _1.getOpposite(); + // + accumulator.add(opposite); + } + final /*@Thrown*/ boolean status = CollectionExcludesAllOperation.INSTANCE.evaluate(BOXED_part, collect).booleanValue(); + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_Key_c_c_PartsAreUnique, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public EList<Property> getOppositePart() { if (oppositePart == null) { oppositePart = new EObjectResolvingEList<Property>(Property.class, this, QVTrelationPackage.KEY__OPPOSITE_PART); @@ -345,6 +777,29 @@ public class KeyImpl extends ElementImpl implements Key { * <!-- end-user-doc --> * @generated */ + @Override + @SuppressWarnings("unchecked") + public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException { + switch (operationID) { + case QVTrelationPackage.KEY___VALIDATE_IDENTIFIES_IS_AUSED_PACKAGE_CLASS__DIAGNOSTICCHAIN_MAP: + return validateIdentifiesIsAUsedPackageClass((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + case QVTrelationPackage.KEY___VALIDATE_OPPOSITE_PARTS_HAVE_OPPOSITES__DIAGNOSTICCHAIN_MAP: + return validateOppositePartsHaveOpposites((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + case QVTrelationPackage.KEY___VALIDATE_OPPOSITE_PARTS_ARE_OPPOSITE_PARTS__DIAGNOSTICCHAIN_MAP: + return validateOppositePartsAreOppositeParts((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + case QVTrelationPackage.KEY___VALIDATE_PARTS_ARE_PARTS__DIAGNOSTICCHAIN_MAP: + return validatePartsAreParts((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + case QVTrelationPackage.KEY___VALIDATE_PARTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP: + return validatePartsAreUnique((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + } + return super.eInvoke(operationID, arguments); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @SuppressWarnings("unchecked") @Override public <R> R accept(@NonNull Visitor<R> visitor) { diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/QVTrelationPackageImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/QVTrelationPackageImpl.java index cc7d45675..37d94a9ed 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/QVTrelationPackageImpl.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/QVTrelationPackageImpl.java @@ -148,7 +148,7 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP /** * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends. - * + * * <p>This method is used to initialize {@link QVTrelationPackage#eINSTANCE} when that field is accessed. * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. * <!-- begin-user-doc --> @@ -179,17 +179,18 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP // Register package validator EValidator.Registry.INSTANCE.put - (theQVTrelationPackage, - new EValidator.Descriptor() { - public EValidator getEValidator() { - return QVTrelationValidator.INSTANCE; - } - }); + (theQVTrelationPackage, + new EValidator.Descriptor() { + @Override + public EValidator getEValidator() { + return QVTrelationValidator.INSTANCE; + } + }); // Mark meta-data to indicate it can't be changed theQVTrelationPackage.freeze(); - + // Update the registry and return the package EPackage.Registry.INSTANCE.put(QVTrelationPackage.eNS_URI, theQVTrelationPackage); return theQVTrelationPackage; @@ -261,6 +262,56 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ @Override + public EOperation getKey__ValidateIdentifiesIsAUsedPackageClass__DiagnosticChain_Map() { + return keyEClass.getEOperations().get(0); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public EOperation getKey__ValidateOppositePartsHaveOpposites__DiagnosticChain_Map() { + return keyEClass.getEOperations().get(1); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public EOperation getKey__ValidateOppositePartsAreOppositeParts__DiagnosticChain_Map() { + return keyEClass.getEOperations().get(2); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public EOperation getKey__ValidatePartsAreParts__DiagnosticChain_Map() { + return keyEClass.getEOperations().get(3); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public EOperation getKey__ValidatePartsAreUnique__DiagnosticChain_Map() { + return keyEClass.getEOperations().get(4); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public EReference getKey_OppositePart() { return (EReference)keyEClass.getEStructuralFeatures().get(1); } @@ -331,6 +382,26 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ @Override + public EOperation getRelation__ValidateDomainsAreRelationDomains__DiagnosticChain_Map() { + return relationEClass.getEOperations().get(0); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public EOperation getRelation__ValidateTransformationIsRelationalTransformation__DiagnosticChain_Map() { + return relationEClass.getEOperations().get(1); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public EClass getRelationCallExp() { return relationCallExpEClass; } @@ -411,6 +482,16 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ @Override + public EOperation getRelationDomain__ValidateRelationDomainAssignmentsAreUnique__DiagnosticChain_Map() { + return relationDomainEClass.getEOperations().get(0); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public EClass getRelationDomainAssignment() { return relationDomainAssignmentEClass; } @@ -441,6 +522,16 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ @Override + public EOperation getRelationDomainAssignment__ValidateCompatibleTypeForValue__DiagnosticChain_Map() { + return relationDomainAssignmentEClass.getEOperations().get(0); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public EClass getRelationModel() { return relationModelEClass; } @@ -511,6 +602,26 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ @Override + public EOperation getRelationalTransformation__ValidateKeysAreUnique__DiagnosticChain_Map() { + return relationalTransformationEClass.getEOperations().get(0); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public EOperation getRelationalTransformation__ValidateRulesAreRelations__DiagnosticChain_Map() { + return relationalTransformationEClass.getEOperations().get(1); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public EClass getSharedVariable() { return sharedVariableEClass; } @@ -562,6 +673,11 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP createEReference(keyEClass, KEY__OPPOSITE_PART); createEReference(keyEClass, KEY__PART); createEReference(keyEClass, KEY__TRANSFORMATION); + createEOperation(keyEClass, KEY___VALIDATE_IDENTIFIES_IS_AUSED_PACKAGE_CLASS__DIAGNOSTICCHAIN_MAP); + createEOperation(keyEClass, KEY___VALIDATE_OPPOSITE_PARTS_HAVE_OPPOSITES__DIAGNOSTICCHAIN_MAP); + createEOperation(keyEClass, KEY___VALIDATE_OPPOSITE_PARTS_ARE_OPPOSITE_PARTS__DIAGNOSTICCHAIN_MAP); + createEOperation(keyEClass, KEY___VALIDATE_PARTS_ARE_PARTS__DIAGNOSTICCHAIN_MAP); + createEOperation(keyEClass, KEY___VALIDATE_PARTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP); relationEClass = createEClass(RELATION); createEAttribute(relationEClass, RELATION__IS_TOP_LEVEL); @@ -569,6 +685,8 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP createEReference(relationEClass, RELATION__VARIABLE); createEReference(relationEClass, RELATION__WHEN); createEReference(relationEClass, RELATION__WHERE); + createEOperation(relationEClass, RELATION___VALIDATE_DOMAINS_ARE_RELATION_DOMAINS__DIAGNOSTICCHAIN_MAP); + createEOperation(relationEClass, RELATION___VALIDATE_TRANSFORMATION_IS_RELATIONAL_TRANSFORMATION__DIAGNOSTICCHAIN_MAP); relationCallExpEClass = createEClass(RELATION_CALL_EXP); createEReference(relationCallExpEClass, RELATION_CALL_EXP__ARGUMENT); @@ -579,10 +697,12 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP createEReference(relationDomainEClass, RELATION_DOMAIN__DEFAULT_ASSIGNMENT); createEReference(relationDomainEClass, RELATION_DOMAIN__PATTERN); createEReference(relationDomainEClass, RELATION_DOMAIN__ROOT_VARIABLE); + createEOperation(relationDomainEClass, RELATION_DOMAIN___VALIDATE_RELATION_DOMAIN_ASSIGNMENTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP); relationDomainAssignmentEClass = createEClass(RELATION_DOMAIN_ASSIGNMENT); createEReference(relationDomainAssignmentEClass, RELATION_DOMAIN_ASSIGNMENT__VALUE_EXP); createEReference(relationDomainAssignmentEClass, RELATION_DOMAIN_ASSIGNMENT__VARIABLE); + createEOperation(relationDomainAssignmentEClass, RELATION_DOMAIN_ASSIGNMENT___VALIDATE_COMPATIBLE_TYPE_FOR_VALUE__DIAGNOSTICCHAIN_MAP); relationImplementationEClass = createEClass(RELATION_IMPLEMENTATION); createEReference(relationImplementationEClass, RELATION_IMPLEMENTATION__IMPL); @@ -593,6 +713,8 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP relationalTransformationEClass = createEClass(RELATIONAL_TRANSFORMATION); createEReference(relationalTransformationEClass, RELATIONAL_TRANSFORMATION__OWNED_KEY); + createEOperation(relationalTransformationEClass, RELATIONAL_TRANSFORMATION___VALIDATE_KEYS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP); + createEOperation(relationalTransformationEClass, RELATIONAL_TRANSFORMATION___VALIDATE_RULES_ARE_RELATIONS__DIAGNOSTICCHAIN_MAP); sharedVariableEClass = createEClass(SHARED_VARIABLE); @@ -654,6 +776,51 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP initEReference(getKey_Part(), thePivotPackage.getProperty(), null, "part", null, 0, -1, Key.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); initEReference(getKey_Transformation(), this.getRelationalTransformation(), this.getRelationalTransformation_OwnedKey(), "transformation", null, 0, 1, Key.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + EOperation op = initEOperation(getKey__ValidateIdentifiesIsAUsedPackageClass__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateIdentifiesIsAUsedPackageClass", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + EGenericType g1 = createEGenericType(ecorePackage.getEMap()); + EGenericType g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + + op = initEOperation(getKey__ValidateOppositePartsHaveOpposites__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateOppositePartsHaveOpposites", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + + op = initEOperation(getKey__ValidateOppositePartsAreOppositeParts__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateOppositePartsAreOppositeParts", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + + op = initEOperation(getKey__ValidatePartsAreParts__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validatePartsAreParts", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + + op = initEOperation(getKey__ValidatePartsAreUnique__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validatePartsAreUnique", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(relationEClass, Relation.class, "Relation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getRelation_IsTopLevel(), ecorePackage.getEBoolean(), "isTopLevel", null, 0, 1, Relation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getRelation_OperationalImpl(), this.getRelationImplementation(), this.getRelationImplementation_Relation(), "operationalImpl", null, 0, -1, Relation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); @@ -661,14 +828,32 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP initEReference(getRelation_When(), theQVTbasePackage.getPattern(), null, "when", null, 0, 1, Relation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getRelation_Where(), theQVTbasePackage.getPattern(), null, "where", null, 0, 1, Relation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + op = initEOperation(getRelation__ValidateDomainsAreRelationDomains__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateDomainsAreRelationDomains", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + + op = initEOperation(getRelation__ValidateTransformationIsRelationalTransformation__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateTransformationIsRelationalTransformation", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(relationCallExpEClass, RelationCallExp.class, "RelationCallExp", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getRelationCallExp_Argument(), thePivotPackage.getOCLExpression(), null, "argument", null, 2, -1, RelationCallExp.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getRelationCallExp_ReferredRelation(), this.getRelation(), null, "referredRelation", null, 1, 1, RelationCallExp.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - EOperation op = initEOperation(getRelationCallExp__ValidateMatchingArgumentCount__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateMatchingArgumentCount", 0, 1, IS_UNIQUE, IS_ORDERED); + op = initEOperation(getRelationCallExp__ValidateMatchingArgumentCount__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateMatchingArgumentCount", 0, 1, IS_UNIQUE, IS_ORDERED); addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); - EGenericType g1 = createEGenericType(ecorePackage.getEMap()); - EGenericType g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); g1.getETypeArguments().add(g2); g2 = createEGenericType(ecorePackage.getEJavaObject()); g1.getETypeArguments().add(g2); @@ -679,10 +864,28 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP initEReference(getRelationDomain_Pattern(), this.getDomainPattern(), null, "pattern", null, 0, -1, RelationDomain.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getRelationDomain_RootVariable(), thePivotPackage.getVariable(), null, "rootVariable", null, 1, -1, RelationDomain.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + op = initEOperation(getRelationDomain__ValidateRelationDomainAssignmentsAreUnique__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateRelationDomainAssignmentsAreUnique", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(relationDomainAssignmentEClass, RelationDomainAssignment.class, "RelationDomainAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getRelationDomainAssignment_ValueExp(), thePivotPackage.getOCLExpression(), null, "valueExp", null, 1, 1, RelationDomainAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getRelationDomainAssignment_Variable(), thePivotPackage.getVariable(), null, "variable", null, 1, 1, RelationDomainAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + op = initEOperation(getRelationDomainAssignment__ValidateCompatibleTypeForValue__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateCompatibleTypeForValue", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(relationImplementationEClass, RelationImplementation.class, "RelationImplementation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getRelationImplementation_Impl(), thePivotPackage.getOperation(), null, "impl", null, 1, 1, RelationImplementation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getRelationImplementation_InDirectionOf(), theQVTbasePackage.getTypedModel(), null, "inDirectionOf", null, 1, 1, RelationImplementation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); @@ -693,6 +896,24 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP initEClass(relationalTransformationEClass, RelationalTransformation.class, "RelationalTransformation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getRelationalTransformation_OwnedKey(), this.getKey(), this.getKey_Transformation(), "ownedKey", null, 0, -1, RelationalTransformation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + op = initEOperation(getRelationalTransformation__ValidateKeysAreUnique__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateKeysAreUnique", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + + op = initEOperation(getRelationalTransformation__ValidateRulesAreRelations__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "validateRulesAreRelations", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(ecorePackage.getEJavaObject()); + g1.getETypeArguments().add(g2); + addEParameter(op, g1, "context", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(sharedVariableEClass, SharedVariable.class, "SharedVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEClass(templateVariableEClass, TemplateVariable.class, "TemplateVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); @@ -703,10 +924,10 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP // Create annotations // http://www.eclipse.org/emf/2002/Ecore createEcoreAnnotations(); - // http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName - createEmofAnnotations(); // http://www.eclipse.org/uml2/2.0.0/UML createUMLAnnotations(); + // http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName + createEmofAnnotations(); } /** @@ -716,12 +937,12 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ protected void createEcoreAnnotations() { - String source = "http://www.eclipse.org/emf/2002/Ecore"; + String source = "http://www.eclipse.org/emf/2002/Ecore"; addAnnotation - (this, - source, - new String[] { - }); + (this, + source, + new String[] { + }); } /** @@ -731,67 +952,67 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ protected void createEmofAnnotations() { - String source = "http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"; + String source = "http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"; addAnnotation - (getKey_Identifies(), - source, - new String[] { - "body", "key" - }); + (getKey_Identifies(), + source, + new String[] { + "body", "key" + }); addAnnotation - (getKey_OppositePart(), - source, - new String[] { - "body", "oppKey" - }); + (getKey_OppositePart(), + source, + new String[] { + "body", "oppKey" + }); addAnnotation - (getKey_Part(), - source, - new String[] { - "body", "key" - }); + (getKey_Part(), + source, + new String[] { + "body", "key" + }); addAnnotation - (getRelation_When(), - source, - new String[] { - "body", "whenOwner" - }); + (getRelation_When(), + source, + new String[] { + "body", "whenOwner" + }); addAnnotation - (getRelation_Where(), - source, - new String[] { - "body", "whereOwner" - }); + (getRelation_Where(), + source, + new String[] { + "body", "whereOwner" + }); addAnnotation - (getRelationCallExp_Argument(), - source, - new String[] { - "body", "relationCallExp" - }); + (getRelationCallExp_Argument(), + source, + new String[] { + "body", "relationCallExp" + }); addAnnotation - (getRelationCallExp_ReferredRelation(), - source, - new String[] { - "body", "relationCallExp" - }); + (getRelationCallExp_ReferredRelation(), + source, + new String[] { + "body", "relationCallExp" + }); addAnnotation - (getRelationDomain_DefaultAssignment(), - source, - new String[] { - "body", "owner" - }); + (getRelationDomain_DefaultAssignment(), + source, + new String[] { + "body", "owner" + }); addAnnotation - (getRelationDomainAssignment_ValueExp(), - source, - new String[] { - "body", "domainAssignment" - }); + (getRelationDomainAssignment_ValueExp(), + source, + new String[] { + "body", "domainAssignment" + }); addAnnotation - (getRelationDomainAssignment_Variable(), - source, - new String[] { - "body", "domainAssignment" - }); + (getRelationDomainAssignment_Variable(), + source, + new String[] { + "body", "domainAssignment" + }); } /** @@ -801,13 +1022,79 @@ public class QVTrelationPackageImpl extends EPackageImpl implements QVTrelationP * @generated */ protected void createUMLAnnotations() { - String source = "http://www.eclipse.org/uml2/2.0.0/UML"; + String source = "http://www.eclipse.org/uml2/2.0.0/UML"; + addAnnotation + (getKey__ValidateIdentifiesIsAUsedPackageClass__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "IdentifiesIsAUsedPackageClass" + }); + addAnnotation + (getKey__ValidateOppositePartsHaveOpposites__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "OppositePartsHaveOpposites" + }); + addAnnotation + (getKey__ValidateOppositePartsAreOppositeParts__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "OppositePartsAreOppositeParts" + }); + addAnnotation + (getKey__ValidatePartsAreParts__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "PartsAreParts" + }); + addAnnotation + (getKey__ValidatePartsAreUnique__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "PartsAreUnique" + }); + addAnnotation + (getRelation__ValidateDomainsAreRelationDomains__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "DomainsAreRelationDomains" + }); + addAnnotation + (getRelation__ValidateTransformationIsRelationalTransformation__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "TransformationIsRelationalTransformation" + }); + addAnnotation + (getRelationCallExp__ValidateMatchingArgumentCount__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "MatchingArgumentCount" + }); + addAnnotation + (getRelationDomain__ValidateRelationDomainAssignmentsAreUnique__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "RelationDomainAssignmentsAreUnique" + }); + addAnnotation + (getRelationDomainAssignment__ValidateCompatibleTypeForValue__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "CompatibleTypeForValue" + }); + addAnnotation + (getRelationalTransformation__ValidateKeysAreUnique__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "KeysAreUnique" + }); addAnnotation - (getRelationCallExp__ValidateMatchingArgumentCount__DiagnosticChain_Map(), - source, - new String[] { - "originalName", "MatchingArgumentCount" - }); + (getRelationalTransformation__ValidateRulesAreRelations__DiagnosticChain_Map(), + source, + new String[] { + "originalName", "RulesAreRelations" + }); } } //QVTrelationPackageImpl diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationCallExpImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationCallExpImpl.java index c6fa6606b..38df7bb23 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationCallExpImpl.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationCallExpImpl.java @@ -211,8 +211,8 @@ public class RelationCallExpImpl extends OCLExpressionImpl implements RelationCa /** * oclAsType(RelationDomain) */ - final /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Class TYP_qvtrelation_c_c_RelationDomain = idResolver.getClass(QVTrelationTables.CLSSid_RelationDomain, null); - final /*@Thrown*/ org.eclipse.qvtd.pivot.qvtrelation.@NonNull RelationDomain oclAsType = ClassUtil.nonNullState((RelationDomain)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_RelationDomain)); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Class TYP_qvtrelation_c_c_RelationDomain_0 = idResolver.getClass(QVTrelationTables.CLSSid_RelationDomain, null); + final /*@Thrown*/ org.eclipse.qvtd.pivot.qvtrelation.@NonNull RelationDomain oclAsType = ClassUtil.nonNullState((RelationDomain)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_RelationDomain_0)); // accumulator.add(oclAsType); } diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainAssignmentImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainAssignmentImpl.java index aba01df48..b15d86296 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainAssignmentImpl.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainAssignmentImpl.java @@ -10,17 +10,30 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation.impl; +import java.lang.reflect.InvocationTargetException; +import java.util.Map; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; +import org.eclipse.emf.common.util.DiagnosticChain; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.ocl.pivot.OCLExpression; import org.eclipse.ocl.pivot.Variable; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.internal.ElementImpl; +import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal; +import org.eclipse.ocl.pivot.library.classifier.OclTypeConformsToOperation; +import org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation; +import org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation; +import org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation; import org.eclipse.ocl.pivot.util.Visitor; +import org.eclipse.ocl.pivot.utilities.ValueUtil; import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage; +import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables; import org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment; import org.eclipse.qvtd.pivot.qvtrelation.util.QVTrelationVisitor; @@ -169,6 +182,56 @@ public class RelationDomainAssignmentImpl extends ElementImpl implements Relatio * @generated */ @Override + public boolean validateCompatibleTypeForValue(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv CompatibleTypeForValue: + * let + * severity : Integer[1] = 'RelationDomainAssignment::CompatibleTypeForValue'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[1] = valueExp.type.conformsTo(variable.type) + * in + * 'RelationDomainAssignment::CompatibleTypeForValue'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_RelationDomainAssignment_c_c_CompatibleTypeForValue); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + @SuppressWarnings("null") + final /*@Thrown*/ org.eclipse.ocl.pivot.@NonNull OCLExpression valueExp = this.getValueExp(); + final /*@Thrown*/ org.eclipse.ocl.pivot.@Nullable Type type = valueExp.getType(); + @SuppressWarnings("null") + final /*@Thrown*/ org.eclipse.ocl.pivot.@NonNull Variable variable = this.getVariable(); + final /*@Thrown*/ org.eclipse.ocl.pivot.@Nullable Type type_0 = variable.getType(); + final /*@Thrown*/ boolean status = OclTypeConformsToOperation.INSTANCE.evaluate(executor, type, type_0).booleanValue(); + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_RelationDomainAssignment_c_c_CompatibleTypeForValue, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case QVTrelationPackage.RELATION_DOMAIN_ASSIGNMENT__VALUE_EXP: @@ -251,6 +314,21 @@ public class RelationDomainAssignmentImpl extends ElementImpl implements Relatio * <!-- end-user-doc --> * @generated */ + @Override + @SuppressWarnings("unchecked") + public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException { + switch (operationID) { + case QVTrelationPackage.RELATION_DOMAIN_ASSIGNMENT___VALIDATE_COMPATIBLE_TYPE_FOR_VALUE__DIAGNOSTICCHAIN_MAP: + return validateCompatibleTypeForValue((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + } + return super.eInvoke(operationID, arguments); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @SuppressWarnings("unchecked") @Override public <R> R accept(@NonNull Visitor<R> visitor) { diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainImpl.java index ea678f9a2..4574c7d7c 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainImpl.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationDomainImpl.java @@ -10,9 +10,13 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation.impl; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; +import java.util.Iterator; +import java.util.Map; import org.eclipse.emf.common.notify.NotificationChain; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; @@ -21,10 +25,18 @@ import org.eclipse.emf.ecore.util.EObjectResolvingEList; import org.eclipse.emf.ecore.util.InternalEList; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.ocl.pivot.Variable; +import org.eclipse.ocl.pivot.ids.TypeId; +import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal; +import org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation; +import org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation; +import org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation; import org.eclipse.ocl.pivot.util.Visitor; +import org.eclipse.ocl.pivot.utilities.ValueUtil; +import org.eclipse.ocl.pivot.values.SetValue; import org.eclipse.qvtd.pivot.qvtbase.impl.DomainImpl; import org.eclipse.qvtd.pivot.qvtrelation.DomainPattern; import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage; +import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables; import org.eclipse.qvtd.pivot.qvtrelation.RelationDomain; import org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment; import org.eclipse.qvtd.pivot.qvtrelation.util.QVTrelationVisitor; @@ -142,6 +154,75 @@ public class RelationDomainImpl extends DomainImpl implements RelationDomain { * @generated */ @Override + public boolean validateRelationDomainAssignmentsAreUnique(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv RelationDomainAssignmentsAreUnique: + * let + * severity : Integer[1] = 'RelationDomain::RelationDomainAssignmentsAreUnique'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let status : OclAny[1] = defaultAssignment->isUnique(variable) + * in + * 'RelationDomain::RelationDomainAssignmentsAreUnique'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_RelationDomain_c_c_RelationDomainAssignmentsAreUnique); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + final /*@Thrown*/ java.util.@NonNull List<RelationDomainAssignment> defaultAssignment = this.getDefaultAssignment(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_defaultAssignment = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_RelationDomainAssignment, defaultAssignment); + /*@Thrown*/ SetValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSetAccumulatorValue(QVTrelationTables.SET_CLSSid_RelationDomainAssignment); + @NonNull Iterator<Object> ITERATOR__1 = BOXED_defaultAssignment.iterator(); + /*@Thrown*/ boolean status; + while (true) { + if (!ITERATOR__1.hasNext()) { + status = ValueUtil.TRUE_VALUE; + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.qvtd.pivot.qvtrelation.@NonNull RelationDomainAssignment _1 = (RelationDomainAssignment)ITERATOR__1.next(); + /** + * variable + */ + @SuppressWarnings("null") + final /*@Thrown*/ org.eclipse.ocl.pivot.@NonNull Variable variable = _1.getVariable(); + // + if (accumulator.includes(variable) == ValueUtil.TRUE_VALUE) { + status = ValueUtil.FALSE_VALUE; // Abort after second find + break; + } + else { + accumulator.add(variable); + } + } + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_RelationDomain_c_c_RelationDomainAssignmentsAreUnique, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case QVTrelationPackage.RELATION_DOMAIN__DEFAULT_ASSIGNMENT: @@ -239,6 +320,21 @@ public class RelationDomainImpl extends DomainImpl implements RelationDomain { * <!-- end-user-doc --> * @generated */ + @Override + @SuppressWarnings("unchecked") + public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException { + switch (operationID) { + case QVTrelationPackage.RELATION_DOMAIN___VALIDATE_RELATION_DOMAIN_ASSIGNMENTS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP: + return validateRelationDomainAssignmentsAreUnique((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + } + return super.eInvoke(operationID, arguments); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @SuppressWarnings("unchecked") @Override public <R> R accept(@NonNull Visitor<R> visitor) { diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationImpl.java index 57f57d58e..2371c8d25 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationImpl.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationImpl.java @@ -10,10 +10,14 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation.impl; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; +import java.util.Iterator; +import java.util.Map; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; @@ -22,11 +26,23 @@ import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; import org.eclipse.emf.ecore.util.InternalEList; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.ocl.pivot.Variable; +import org.eclipse.ocl.pivot.ids.TypeId; +import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal; +import org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsKindOfOperation; +import org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation; +import org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation; +import org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation; +import org.eclipse.ocl.pivot.messages.PivotMessages; import org.eclipse.ocl.pivot.util.Visitor; +import org.eclipse.ocl.pivot.utilities.ValueUtil; +import org.eclipse.ocl.pivot.values.InvalidValueException; +import org.eclipse.qvtd.pivot.qvtbase.Domain; import org.eclipse.qvtd.pivot.qvtbase.Pattern; import org.eclipse.qvtd.pivot.qvtbase.impl.RuleImpl; import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage; +import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables; import org.eclipse.qvtd.pivot.qvtrelation.Relation; import org.eclipse.qvtd.pivot.qvtrelation.RelationImplementation; import org.eclipse.qvtd.pivot.qvtrelation.util.QVTrelationVisitor; @@ -270,6 +286,133 @@ public class RelationImpl extends RuleImpl implements Relation { /** * <!-- begin-user-doc --> * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean validateDomainsAreRelationDomains(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv DomainsAreRelationDomains: + * let + * severity : Integer[1] = 'Relation::DomainsAreRelationDomains'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[?] = domain->forAll( + * oclIsKindOf(RelationDomain)) + * in + * 'Relation::DomainsAreRelationDomains'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_Relation_c_c_DomainsAreRelationDomains); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + @SuppressWarnings("null") + final /*@Thrown*/ java.util.@NonNull List<Domain> domain = this.getDomain(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull OrderedSetValue BOXED_domain = idResolver.createOrderedSetOfAll(QVTrelationTables.ORD_CLSSid_Domain, domain); + /*@Thrown*/ java.lang.@Nullable Object accumulator = ValueUtil.TRUE_VALUE; + @NonNull Iterator<Object> ITERATOR__1 = BOXED_domain.iterator(); + /*@Thrown*/ boolean status; + while (true) { + if (!ITERATOR__1.hasNext()) { + if (accumulator == ValueUtil.TRUE_VALUE) { + status = ValueUtil.TRUE_VALUE; + } + else { + throw (InvalidValueException)accumulator; + } + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.qvtd.pivot.qvtbase.@NonNull Domain _1 = (Domain)ITERATOR__1.next(); + /** + * oclIsKindOf(RelationDomain) + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Class TYP_qvtrelation_c_c_RelationDomain = idResolver.getClass(QVTrelationTables.CLSSid_RelationDomain, null); + final /*@NonInvalid*/ boolean oclIsKindOf = OclAnyOclIsKindOfOperation.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_RelationDomain).booleanValue(); + // + if (oclIsKindOf == ValueUtil.FALSE_VALUE) { // Normal unsuccessful body evaluation result + status = ValueUtil.FALSE_VALUE; + break; // Stop immediately + } + else if (oclIsKindOf == ValueUtil.TRUE_VALUE) { // Normal successful body evaluation result + ; // Carry on + } + else { // Impossible badly typed result + accumulator = new InvalidValueException(PivotMessages.NonBooleanBody, "forAll"); + } + } + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_Relation_c_c_DomainsAreRelationDomains, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean validateTransformationIsRelationalTransformation(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv TransformationIsRelationalTransformation: + * let + * severity : Integer[1] = 'Relation::TransformationIsRelationalTransformation'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[1] = transformation.oclIsKindOf(RelationalTransformation) + * in + * 'Relation::TransformationIsRelationalTransformation'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_Relation_c_c_TransformationIsRelationalTransformation); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + final /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Class TYP_qvtrelation_c_c_RelationalTransformation = idResolver.getClass(QVTrelationTables.CLSSid_RelationalTransformation, null); + final /*@Thrown*/ org.eclipse.qvtd.pivot.qvtbase.@Nullable Transformation transformation = this.getTransformation(); + final /*@Thrown*/ boolean status = OclAnyOclIsKindOfOperation.INSTANCE.evaluate(executor, transformation, TYP_qvtrelation_c_c_RelationalTransformation).booleanValue(); + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_Relation_c_c_TransformationIsRelationalTransformation, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> * @generated NOT */ @Override @@ -418,6 +561,23 @@ public class RelationImpl extends RuleImpl implements Relation { * <!-- end-user-doc --> * @generated */ + @Override + @SuppressWarnings("unchecked") + public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException { + switch (operationID) { + case QVTrelationPackage.RELATION___VALIDATE_DOMAINS_ARE_RELATION_DOMAINS__DIAGNOSTICCHAIN_MAP: + return validateDomainsAreRelationDomains((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + case QVTrelationPackage.RELATION___VALIDATE_TRANSFORMATION_IS_RELATIONAL_TRANSFORMATION__DIAGNOSTICCHAIN_MAP: + return validateTransformationIsRelationalTransformation((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + } + return super.eInvoke(operationID, arguments); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @SuppressWarnings("unchecked") @Override public <R> R accept(@NonNull Visitor<R> visitor) { diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationalTransformationImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationalTransformationImpl.java index 5307b7213..f17f7b2cf 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationalTransformationImpl.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/impl/RelationalTransformationImpl.java @@ -10,19 +10,36 @@ *******************************************************************************/ package org.eclipse.qvtd.pivot.qvtrelation.impl; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; +import java.util.Iterator; +import java.util.Map; import org.eclipse.emf.common.notify.NotificationChain; +import org.eclipse.emf.common.util.DiagnosticChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; import org.eclipse.emf.ecore.util.InternalEList; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.ocl.pivot.ids.TypeId; +import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal; +import org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsKindOfOperation; +import org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation; +import org.eclipse.ocl.pivot.library.string.CGStringGetSeverityOperation; +import org.eclipse.ocl.pivot.library.string.CGStringLogDiagnosticOperation; +import org.eclipse.ocl.pivot.messages.PivotMessages; import org.eclipse.ocl.pivot.util.Visitor; +import org.eclipse.ocl.pivot.utilities.ValueUtil; +import org.eclipse.ocl.pivot.values.InvalidValueException; +import org.eclipse.ocl.pivot.values.SetValue; +import org.eclipse.qvtd.pivot.qvtbase.Rule; import org.eclipse.qvtd.pivot.qvtbase.impl.TransformationImpl; import org.eclipse.qvtd.pivot.qvtrelation.Key; import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage; +import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationTables; import org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation; import org.eclipse.qvtd.pivot.qvtrelation.util.QVTrelationVisitor; @@ -87,6 +104,154 @@ public class RelationalTransformationImpl extends TransformationImpl implements * <!-- end-user-doc --> * @generated */ + @Override + public boolean validateKeysAreUnique(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv KeysAreUnique: + * let + * severity : Integer[1] = 'RelationalTransformation::KeysAreUnique'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let status : OclAny[1] = ownedKey->isUnique(identifies) + * in + * 'RelationalTransformation::KeysAreUnique'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_RelationalTransformation_c_c_KeysAreUnique); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + @SuppressWarnings("null") + final /*@Thrown*/ java.util.@NonNull List<Key> ownedKey = this.getOwnedKey(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_ownedKey = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Key, ownedKey); + /*@Thrown*/ SetValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSetAccumulatorValue(QVTrelationTables.SET_CLSSid_Key); + @NonNull Iterator<Object> ITERATOR__1 = BOXED_ownedKey.iterator(); + /*@Thrown*/ boolean status; + while (true) { + if (!ITERATOR__1.hasNext()) { + status = ValueUtil.TRUE_VALUE; + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.qvtd.pivot.qvtrelation.@NonNull Key _1 = (Key)ITERATOR__1.next(); + /** + * identifies + */ + @SuppressWarnings("null") + final /*@Thrown*/ org.eclipse.ocl.pivot.@NonNull Class identifies = _1.getIdentifies(); + // + if (accumulator.includes(identifies) == ValueUtil.TRUE_VALUE) { + status = ValueUtil.FALSE_VALUE; // Abort after second find + break; + } + else { + accumulator.add(identifies); + } + } + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_RelationalTransformation_c_c_KeysAreUnique, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean validateRulesAreRelations(final DiagnosticChain diagnostics, final Map<Object, Object> context) { + /** + * + * inv RulesAreRelations: + * let + * severity : Integer[1] = 'RelationalTransformation::RulesAreRelations'.getSeverity() + * in + * if severity <= 0 + * then true + * else + * let + * status : OclAny[?] = rule->forAll(oclIsKindOf(Relation)) + * in + * 'RelationalTransformation::RulesAreRelations'.logDiagnostic(self, null, diagnostics, context, null, severity, status, 0) + * endif + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.evaluation.@NonNull Executor executor = PivotUtilInternal.getExecutor(this); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@NonNull IdResolver idResolver = executor.getIdResolver(); + final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@NonNull IntegerValue severity_0 = CGStringGetSeverityOperation.INSTANCE.evaluate(executor, QVTrelationTables.STR_RelationalTransformation_c_c_RulesAreRelations); + final /*@NonInvalid*/ boolean le = OclComparableLessThanEqualOperation.INSTANCE.evaluate(executor, severity_0, QVTrelationTables.INT_0).booleanValue(); + /*@NonInvalid*/ boolean symbol_0; + if (le) { + symbol_0 = ValueUtil.TRUE_VALUE; + } + else { + /*@Caught*/ @NonNull Object CAUGHT_status; + try { + final /*@Thrown*/ java.util.@NonNull List<Rule> rule = this.getRule(); + final /*@Thrown*/ org.eclipse.ocl.pivot.values.@NonNull SetValue BOXED_rule = idResolver.createSetOfAll(QVTrelationTables.SET_CLSSid_Rule, rule); + /*@Thrown*/ java.lang.@Nullable Object accumulator = ValueUtil.TRUE_VALUE; + @NonNull Iterator<Object> ITERATOR__1 = BOXED_rule.iterator(); + /*@Thrown*/ boolean status; + while (true) { + if (!ITERATOR__1.hasNext()) { + if (accumulator == ValueUtil.TRUE_VALUE) { + status = ValueUtil.TRUE_VALUE; + } + else { + throw (InvalidValueException)accumulator; + } + break; + } + @SuppressWarnings("null") + /*@NonInvalid*/ org.eclipse.qvtd.pivot.qvtbase.@NonNull Rule _1 = (Rule)ITERATOR__1.next(); + /** + * oclIsKindOf(Relation) + */ + final /*@NonInvalid*/ org.eclipse.ocl.pivot.@NonNull Class TYP_qvtrelation_c_c_Relation = idResolver.getClass(QVTrelationTables.CLSSid_Relation, null); + final /*@NonInvalid*/ boolean oclIsKindOf = OclAnyOclIsKindOfOperation.INSTANCE.evaluate(executor, _1, TYP_qvtrelation_c_c_Relation).booleanValue(); + // + if (oclIsKindOf == ValueUtil.FALSE_VALUE) { // Normal unsuccessful body evaluation result + status = ValueUtil.FALSE_VALUE; + break; // Stop immediately + } + else if (oclIsKindOf == ValueUtil.TRUE_VALUE) { // Normal successful body evaluation result + ; // Carry on + } + else { // Impossible badly typed result + accumulator = new InvalidValueException(PivotMessages.NonBooleanBody, "forAll"); + } + } + CAUGHT_status = status; + } + catch (Exception e) { + CAUGHT_status = ValueUtil.createInvalidValue(e); + } + final /*@NonInvalid*/ boolean logDiagnostic = CGStringLogDiagnosticOperation.INSTANCE.evaluate(executor, TypeId.BOOLEAN, QVTrelationTables.STR_RelationalTransformation_c_c_RulesAreRelations, this, (Object)null, diagnostics, context, (Object)null, severity_0, CAUGHT_status, QVTrelationTables.INT_0).booleanValue(); + symbol_0 = logDiagnostic; + } + return Boolean.TRUE == symbol_0; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @SuppressWarnings("unchecked") @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { @@ -176,6 +341,23 @@ public class RelationalTransformationImpl extends TransformationImpl implements * <!-- end-user-doc --> * @generated */ + @Override + @SuppressWarnings("unchecked") + public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException { + switch (operationID) { + case QVTrelationPackage.RELATIONAL_TRANSFORMATION___VALIDATE_KEYS_ARE_UNIQUE__DIAGNOSTICCHAIN_MAP: + return validateKeysAreUnique((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + case QVTrelationPackage.RELATIONAL_TRANSFORMATION___VALIDATE_RULES_ARE_RELATIONS__DIAGNOSTICCHAIN_MAP: + return validateRulesAreRelations((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1)); + } + return super.eInvoke(operationID, arguments); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @SuppressWarnings("unchecked") @Override public <R> R accept(@NonNull Visitor<R> visitor) { diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/util/QVTrelationValidator.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/util/QVTrelationValidator.java index 240959fef..02ea45023 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/util/QVTrelationValidator.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/emf-gen/org/eclipse/qvtd/pivot/qvtrelation/util/QVTrelationValidator.java @@ -55,12 +55,100 @@ public class QVTrelationValidator extends EObjectValidator { public static final String DIAGNOSTIC_SOURCE = "org.eclipse.qvtd.pivot.qvtrelation"; /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Identifies Is AUsed Package Class' of 'Key'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int KEY__VALIDATE_IDENTIFIES_IS_AUSED_PACKAGE_CLASS = 1; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Opposite Parts Have Opposites' of 'Key'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int KEY__VALIDATE_OPPOSITE_PARTS_HAVE_OPPOSITES = 2; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Opposite Parts Are Opposite Parts' of 'Key'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int KEY__VALIDATE_OPPOSITE_PARTS_ARE_OPPOSITE_PARTS = 3; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Parts Are Parts' of 'Key'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int KEY__VALIDATE_PARTS_ARE_PARTS = 4; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Parts Are Unique' of 'Key'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int KEY__VALIDATE_PARTS_ARE_UNIQUE = 5; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Domains Are Relation Domains' of 'Relation'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int RELATION__VALIDATE_DOMAINS_ARE_RELATION_DOMAINS = 6; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Transformation Is Relational Transformation' of 'Relation'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int RELATION__VALIDATE_TRANSFORMATION_IS_RELATIONAL_TRANSFORMATION = 7; + + /** * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Matching Argument Count' of 'Relation Call Exp'. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ - public static final int RELATION_CALL_EXP__VALIDATE_MATCHING_ARGUMENT_COUNT = 1; + public static final int RELATION_CALL_EXP__VALIDATE_MATCHING_ARGUMENT_COUNT = 8; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Relation Domain Assignments Are Unique' of 'Relation Domain'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int RELATION_DOMAIN__VALIDATE_RELATION_DOMAIN_ASSIGNMENTS_ARE_UNIQUE = 9; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Compatible Type For Value' of 'Relation Domain Assignment'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int RELATION_DOMAIN_ASSIGNMENT__VALIDATE_COMPATIBLE_TYPE_FOR_VALUE = 10; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Keys Are Unique' of 'Relational Transformation'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int RELATIONAL_TRANSFORMATION__VALIDATE_KEYS_ARE_UNIQUE = 11; + + /** + * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Validate Rules Are Relations' of 'Relational Transformation'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public static final int RELATIONAL_TRANSFORMATION__VALIDATE_RULES_ARE_RELATIONS = 12; /** * A constant with a fixed name that can be used as the base value for additional hand written constants. @@ -68,7 +156,7 @@ public class QVTrelationValidator extends EObjectValidator { * <!-- end-user-doc --> * @generated */ - private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 1; + private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 12; /** * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class. @@ -114,7 +202,7 @@ public class QVTrelationValidator extends EObjectValidator { */ @Override protected EPackage getEPackage() { - return QVTrelationPackage.eINSTANCE; + return QVTrelationPackage.eINSTANCE; } /** @@ -168,7 +256,71 @@ public class QVTrelationValidator extends EObjectValidator { * @generated */ public boolean validateKey(Key key, DiagnosticChain diagnostics, Map<Object, Object> context) { - return validate_EveryDefaultConstraint(key, diagnostics, context); + if (!validate_NoCircularContainment(key, diagnostics, context)) return false; + boolean result = validate_EveryMultiplicityConforms(key, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryDataValueConforms(key, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(key, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(key, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryProxyResolves(key, diagnostics, context); + if (result || diagnostics != null) result &= validate_UniqueID(key, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryKeyUnique(key, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(key, diagnostics, context); + if (result || diagnostics != null) result &= validateKey_validateIdentifiesIsAUsedPackageClass(key, diagnostics, context); + if (result || diagnostics != null) result &= validateKey_validateOppositePartsHaveOpposites(key, diagnostics, context); + if (result || diagnostics != null) result &= validateKey_validateOppositePartsAreOppositeParts(key, diagnostics, context); + if (result || diagnostics != null) result &= validateKey_validatePartsAreParts(key, diagnostics, context); + if (result || diagnostics != null) result &= validateKey_validatePartsAreUnique(key, diagnostics, context); + return result; + } + + /** + * Validates the validateIdentifiesIsAUsedPackageClass constraint of '<em>Key</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateKey_validateIdentifiesIsAUsedPackageClass(Key key, DiagnosticChain diagnostics, Map<Object, Object> context) { + return key.validateIdentifiesIsAUsedPackageClass(diagnostics, context); + } + + /** + * Validates the validateOppositePartsHaveOpposites constraint of '<em>Key</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateKey_validateOppositePartsHaveOpposites(Key key, DiagnosticChain diagnostics, Map<Object, Object> context) { + return key.validateOppositePartsHaveOpposites(diagnostics, context); + } + + /** + * Validates the validateOppositePartsAreOppositeParts constraint of '<em>Key</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateKey_validateOppositePartsAreOppositeParts(Key key, DiagnosticChain diagnostics, Map<Object, Object> context) { + return key.validateOppositePartsAreOppositeParts(diagnostics, context); + } + + /** + * Validates the validatePartsAreParts constraint of '<em>Key</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateKey_validatePartsAreParts(Key key, DiagnosticChain diagnostics, Map<Object, Object> context) { + return key.validatePartsAreParts(diagnostics, context); + } + + /** + * Validates the validatePartsAreUnique constraint of '<em>Key</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateKey_validatePartsAreUnique(Key key, DiagnosticChain diagnostics, Map<Object, Object> context) { + return key.validatePartsAreUnique(diagnostics, context); } /** @@ -189,10 +341,32 @@ public class QVTrelationValidator extends EObjectValidator { if (result || diagnostics != null) result &= qvTbaseValidator.validateRule_validateDomainNameIsUnique(relation, diagnostics, context); if (result || diagnostics != null) result &= qvTbaseValidator.validateRule_validateOverridesRuleIsExtendedRule(relation, diagnostics, context); if (result || diagnostics != null) result &= qvTbaseValidator.validateRule_validateOverridesRuleOverridesAllDomains(relation, diagnostics, context); + if (result || diagnostics != null) result &= validateRelation_validateDomainsAreRelationDomains(relation, diagnostics, context); + if (result || diagnostics != null) result &= validateRelation_validateTransformationIsRelationalTransformation(relation, diagnostics, context); return result; } /** + * Validates the validateDomainsAreRelationDomains constraint of '<em>Relation</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateRelation_validateDomainsAreRelationDomains(Relation relation, DiagnosticChain diagnostics, Map<Object, Object> context) { + return relation.validateDomainsAreRelationDomains(diagnostics, context); + } + + /** + * Validates the validateTransformationIsRelationalTransformation constraint of '<em>Relation</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateRelation_validateTransformationIsRelationalTransformation(Relation relation, DiagnosticChain diagnostics, Map<Object, Object> context) { + return relation.validateTransformationIsRelationalTransformation(diagnostics, context); + } + + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated @@ -239,16 +413,47 @@ public class QVTrelationValidator extends EObjectValidator { if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(relationDomain, diagnostics, context); if (result || diagnostics != null) result &= qvTbaseValidator.validateDomain_validateNameIsTypedModelName(relationDomain, diagnostics, context); if (result || diagnostics != null) result &= qvTbaseValidator.validateDomain_validateTypedModelIsTransformationModelParameter(relationDomain, diagnostics, context); + if (result || diagnostics != null) result &= validateRelationDomain_validateRelationDomainAssignmentsAreUnique(relationDomain, diagnostics, context); return result; } /** + * Validates the validateRelationDomainAssignmentsAreUnique constraint of '<em>Relation Domain</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateRelationDomain_validateRelationDomainAssignmentsAreUnique(RelationDomain relationDomain, DiagnosticChain diagnostics, Map<Object, Object> context) { + return relationDomain.validateRelationDomainAssignmentsAreUnique(diagnostics, context); + } + + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean validateRelationDomainAssignment(RelationDomainAssignment relationDomainAssignment, DiagnosticChain diagnostics, Map<Object, Object> context) { - return validate_EveryDefaultConstraint(relationDomainAssignment, diagnostics, context); + if (!validate_NoCircularContainment(relationDomainAssignment, diagnostics, context)) return false; + boolean result = validate_EveryMultiplicityConforms(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryDataValueConforms(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryProxyResolves(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validate_UniqueID(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryKeyUnique(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(relationDomainAssignment, diagnostics, context); + if (result || diagnostics != null) result &= validateRelationDomainAssignment_validateCompatibleTypeForValue(relationDomainAssignment, diagnostics, context); + return result; + } + + /** + * Validates the validateCompatibleTypeForValue constraint of '<em>Relation Domain Assignment</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateRelationDomainAssignment_validateCompatibleTypeForValue(RelationDomainAssignment relationDomainAssignment, DiagnosticChain diagnostics, Map<Object, Object> context) { + return relationDomainAssignment.validateCompatibleTypeForValue(diagnostics, context); } /** @@ -288,10 +493,32 @@ public class QVTrelationValidator extends EObjectValidator { if (result || diagnostics != null) result &= qvTbaseValidator.validateTransformation_validateContextTypeIsTransformation(relationalTransformation, diagnostics, context); if (result || diagnostics != null) result &= qvTbaseValidator.validateTransformation_validateExtendedTypedModelIsExtended(relationalTransformation, diagnostics, context); if (result || diagnostics != null) result &= qvTbaseValidator.validateTransformation_validateModelParameterIsUnique(relationalTransformation, diagnostics, context); + if (result || diagnostics != null) result &= validateRelationalTransformation_validateKeysAreUnique(relationalTransformation, diagnostics, context); + if (result || diagnostics != null) result &= validateRelationalTransformation_validateRulesAreRelations(relationalTransformation, diagnostics, context); return result; } /** + * Validates the validateKeysAreUnique constraint of '<em>Relational Transformation</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateRelationalTransformation_validateKeysAreUnique(RelationalTransformation relationalTransformation, DiagnosticChain diagnostics, Map<Object, Object> context) { + return relationalTransformation.validateKeysAreUnique(diagnostics, context); + } + + /** + * Validates the validateRulesAreRelations constraint of '<em>Relational Transformation</em>'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean validateRelationalTransformation_validateRulesAreRelations(RelationalTransformation relationalTransformation, DiagnosticChain diagnostics, Map<Object, Object> context) { + return relationalTransformation.validateRulesAreRelations(diagnostics, context); + } + + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ecore b/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ecore index f0582dcad..00e2542f3 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ecore +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ecore @@ -14,6 +14,81 @@ containment="true"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" xmi:id="T-qvtrelation-Key" name="Key" eSuperTypes="../../org.eclipse.ocl.pivot/model/Pivot.ecore#T-pivot-Element"> + <eOperations name="validateIdentifiesIsAUsedPackageClass" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="IdentifiesIsAUsedPackageClass"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	transformation.modelParameter.usedPackage->includes(identifies.owningPackage)

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validateOppositePartsHaveOpposites" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="OppositePartsHaveOpposites"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	oppositePart->forAll(opposite <> null)

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validateOppositePartsAreOppositeParts" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="OppositePartsAreOppositeParts"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	oppositePart->forAll(self.identifies.conformsTo(type))

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validatePartsAreParts" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="PartsAreParts"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	part->forAll(self.identifies.conformsTo(owningClass))

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validatePartsAreUnique" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="PartsAreUnique"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	part->excludesAll(oppositePart.opposite)

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" xmi:id="F-qvtrelation-Key-identifies" name="identifies" lowerBound="1" eType="ecore:EClass ../../org.eclipse.ocl.pivot/model/Pivot.ecore#T-pivot-Class"> <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> @@ -38,6 +113,36 @@ </eClassifiers> <eClassifiers xsi:type="ecore:EClass" xmi:id="T-qvtrelation-Relation" name="Relation" eSuperTypes="../../org.eclipse.qvtd.pivot.qvtbase/model/QVTbase.ecore#T-qvtbase-Rule"> + <eOperations name="validateDomainsAreRelationDomains" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="DomainsAreRelationDomains"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	domain->forAll(oclIsKindOf(RelationDomain))

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validateTransformationIsRelationalTransformation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="TransformationIsRelationalTransformation"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	transformation.oclIsKindOf(RelationalTransformation)

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> <eStructuralFeatures xsi:type="ecore:EAttribute" xmi:id="F-qvtrelation-Relation-isTopLevel" name="isTopLevel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> <eStructuralFeatures xsi:type="ecore:EReference" xmi:id="F-qvtrelation-Relation-operationalImpl" @@ -68,7 +173,7 @@ <details key="originalName" value="MatchingArgumentCount"/> </eAnnotations> <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> - <details key="body" value="self.argument->size() = self.referredRelation.domain.oclAsType(RelationDomain).rootVariable->size()

"/> + <details key="body" value="
	self.argument->size() = self.referredRelation.domain.oclAsType(RelationDomain).rootVariable->size()

"/> </eAnnotations> <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> <eParameters name="context"> @@ -94,6 +199,21 @@ </eClassifiers> <eClassifiers xsi:type="ecore:EClass" xmi:id="T-qvtrelation-RelationDomain" name="RelationDomain" eSuperTypes="../../org.eclipse.qvtd.pivot.qvtbase/model/QVTbase.ecore#T-qvtbase-Domain"> + <eOperations name="validateRelationDomainAssignmentsAreUnique" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="RelationDomainAssignmentsAreUnique"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	defaultAssignment->isUnique(variable)

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" xmi:id="F-qvtrelation-RelationDomain-defaultAssignment" name="defaultAssignment" ordered="false" upperBound="-1" eType="#T-qvtrelation-RelationDomainAssignment" containment="true"> @@ -108,6 +228,21 @@ </eClassifiers> <eClassifiers xsi:type="ecore:EClass" xmi:id="T-qvtrelation-RelationDomainAssignment" name="RelationDomainAssignment" eSuperTypes="../../org.eclipse.ocl.pivot/model/Pivot.ecore#T-pivot-Element"> + <eOperations name="validateCompatibleTypeForValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="CompatibleTypeForValue"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	valueExp.type.conformsTo(variable.type)

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" xmi:id="F-qvtrelation-RelationDomainAssignment-valueExp" name="valueExp" lowerBound="1" eType="ecore:EClass ../../org.eclipse.ocl.pivot/model/Pivot.ecore#T-pivot-OCLExpression" containment="true"> @@ -135,6 +270,36 @@ eSuperTypes="../../org.eclipse.qvtd.pivot.qvtbase/model/QVTbase.ecore#T-qvtbase-BaseModel"/> <eClassifiers xsi:type="ecore:EClass" xmi:id="T-qvtrelation-RelationalTransformation" name="RelationalTransformation" eSuperTypes="../../org.eclipse.qvtd.pivot.qvtbase/model/QVTbase.ecore#T-qvtbase-Transformation"> + <eOperations name="validateKeysAreUnique" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="KeysAreUnique"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	ownedKey->isUnique(identifies)

"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validateRulesAreRelations" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML"> + <details key="originalName" value="RulesAreRelations"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	rule->forAll(oclIsKindOf(Relation))


"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" xmi:id="F-qvtrelation-RelationalTransformation-ownedKey" name="ownedKey" ordered="false" upperBound="-1" eType="#T-qvtrelation-Key" containment="true" eOpposite="#F-qvtrelation-Key-transformation"/> diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.genmodel b/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.genmodel index ad56863d3..4b9b27b0d 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.genmodel +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.genmodel @@ -25,6 +25,26 @@ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-Key-oppositePart"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-Key-part"/> <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-Key-transformation"/> + <genOperations ecoreOperation="QVTrelation.ecore#//Key/validateIdentifiesIsAUsedPackageClass"> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validateIdentifiesIsAUsedPackageClass/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validateIdentifiesIsAUsedPackageClass/context"/> + </genOperations> + <genOperations ecoreOperation="QVTrelation.ecore#//Key/validateOppositePartsHaveOpposites"> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validateOppositePartsHaveOpposites/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validateOppositePartsHaveOpposites/context"/> + </genOperations> + <genOperations ecoreOperation="QVTrelation.ecore#//Key/validateOppositePartsAreOppositeParts"> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validateOppositePartsAreOppositeParts/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validateOppositePartsAreOppositeParts/context"/> + </genOperations> + <genOperations ecoreOperation="QVTrelation.ecore#//Key/validatePartsAreParts"> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validatePartsAreParts/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validatePartsAreParts/context"/> + </genOperations> + <genOperations ecoreOperation="QVTrelation.ecore#//Key/validatePartsAreUnique"> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validatePartsAreUnique/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//Key/validatePartsAreUnique/context"/> + </genOperations> </genClasses> <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-Relation"> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute QVTrelation.ecore#F-qvtrelation-Relation-isTopLevel"/> @@ -32,6 +52,14 @@ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-Relation-variable"/> <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-Relation-when"/> <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-Relation-where"/> + <genOperations ecoreOperation="QVTrelation.ecore#//Relation/validateDomainsAreRelationDomains"> + <genParameters ecoreParameter="QVTrelation.ecore#//Relation/validateDomainsAreRelationDomains/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//Relation/validateDomainsAreRelationDomains/context"/> + </genOperations> + <genOperations ecoreOperation="QVTrelation.ecore#//Relation/validateTransformationIsRelationalTransformation"> + <genParameters ecoreParameter="QVTrelation.ecore#//Relation/validateTransformationIsRelationalTransformation/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//Relation/validateTransformationIsRelationalTransformation/context"/> + </genOperations> </genClasses> <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-RelationCallExp"> <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationCallExp-argument"/> @@ -45,10 +73,18 @@ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationDomain-defaultAssignment"/> <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationDomain-pattern"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationDomain-rootVariable"/> + <genOperations ecoreOperation="QVTrelation.ecore#//RelationDomain/validateRelationDomainAssignmentsAreUnique"> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationDomain/validateRelationDomainAssignmentsAreUnique/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationDomain/validateRelationDomainAssignmentsAreUnique/context"/> + </genOperations> </genClasses> <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-RelationDomainAssignment"> <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationDomainAssignment-valueExp"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationDomainAssignment-variable"/> + <genOperations ecoreOperation="QVTrelation.ecore#//RelationDomainAssignment/validateCompatibleTypeForValue"> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationDomainAssignment/validateCompatibleTypeForValue/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationDomainAssignment/validateCompatibleTypeForValue/context"/> + </genOperations> </genClasses> <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-RelationImplementation"> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationImplementation-impl"/> @@ -58,6 +94,14 @@ <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-RelationModel"/> <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-RelationalTransformation"> <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QVTrelation.ecore#F-qvtrelation-RelationalTransformation-ownedKey"/> + <genOperations ecoreOperation="QVTrelation.ecore#//RelationalTransformation/validateKeysAreUnique"> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationalTransformation/validateKeysAreUnique/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationalTransformation/validateKeysAreUnique/context"/> + </genOperations> + <genOperations ecoreOperation="QVTrelation.ecore#//RelationalTransformation/validateRulesAreRelations"> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationalTransformation/validateRulesAreRelations/diagnostics"/> + <genParameters ecoreParameter="QVTrelation.ecore#//RelationalTransformation/validateRulesAreRelations/context"/> + </genOperations> </genClasses> <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-SharedVariable"/> <genClasses ecoreClass="QVTrelation.ecore#T-qvtrelation-TemplateVariable"/> diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ocl b/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ocl index a3fdb0cb9..4c722b86a 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ocl +++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/model/QVTrelation.ocl @@ -2,7 +2,52 @@ import 'QVTrelation.ecore' package qvtrelation +context Key +--def: resolvedParts : Set(ocl::Property) = part->union(oppositePart.opposite) + +inv IdentifiesIsAUsedPackageClass: + transformation.modelParameter.usedPackage->includes(identifies.owningPackage) + +inv OppositePartsHaveOpposites: + oppositePart->forAll(opposite <> null) + +inv OppositePartsAreOppositeParts: + oppositePart->forAll(self.identifies.conformsTo(type)) + +inv PartsAreParts: + part->forAll(self.identifies.conformsTo(owningClass)) + +inv PartsAreUnique: + part->excludesAll(oppositePart.opposite) + +context Relation +inv DomainsAreRelationDomains: + domain->forAll(oclIsKindOf(RelationDomain)) + +inv TransformationIsRelationalTransformation: + transformation.oclIsKindOf(RelationalTransformation) + +--inv VariablesAreUnique: +-- variable->isUnique(name) + context RelationCallExp -inv MatchingArgumentCount: self.argument->size() = self.referredRelation.domain.oclAsType(RelationDomain).rootVariable->size() +inv MatchingArgumentCount: + self.argument->size() = self.referredRelation.domain.oclAsType(RelationDomain).rootVariable->size() + +context RelationDomain +inv RelationDomainAssignmentsAreUnique: + defaultAssignment->isUnique(variable) + +context RelationDomainAssignment +inv CompatibleTypeForValue: + valueExp.type.conformsTo(variable.type) + +context RelationalTransformation +inv KeysAreUnique: + ownedKey->isUnique(identifies) + +inv RulesAreRelations: + rule->forAll(oclIsKindOf(Relation)) + endpackage |