Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorptessier2013-06-20 14:07:25 +0000
committerptessier2013-06-20 14:07:25 +0000
commit6c117da23524b4ce27868323d0e54107a2afc481 (patch)
tree047c556053d60494cffef6bca91570387e8915d9 /extraplugins/dsml.validation
parentc18ee81a3c512bc8b2315172dbe7e2a2dc867ae8 (diff)
downloadorg.eclipse.papyrus-6c117da23524b4ce27868323d0e54107a2afc481.tar.gz
org.eclipse.papyrus-6c117da23524b4ce27868323d0e54107a2afc481.tar.xz
org.eclipse.papyrus-6c117da23524b4ce27868323d0e54107a2afc481.zip
382733: [validation] Papyrus shall to compute constraints from the profile at the model level
https://bugs.eclipse.org/bugs/show_bug.cgi?id=382733
Diffstat (limited to 'extraplugins/dsml.validation')
-rw-r--r--extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/src/org/eclipse/papyrus/dsml/validation/generator/main/generate.mtl32
-rw-r--r--extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/tasks/generate.xml34
-rw-r--r--extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ConstraintManagerImpl.java19
-rw-r--r--extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ValidationRuleImpl.java15
-rw-r--r--extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/interfaces/IConstraintsManager.java14
-rw-r--r--extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.wizard/src/org/eclipse/papyrus/dsml/validation/wizard/ValidationPluginGenerator.java58
6 files changed, 111 insertions, 61 deletions
diff --git a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/src/org/eclipse/papyrus/dsml/validation/generator/main/generate.mtl b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/src/org/eclipse/papyrus/dsml/validation/generator/main/generate.mtl
index c6a0d14549c..ac7777afeb9 100644
--- a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/src/org/eclipse/papyrus/dsml/validation/generator/main/generate.mtl
+++ b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/src/org/eclipse/papyrus/dsml/validation/generator/main/generate.mtl
@@ -82,20 +82,42 @@ public class [constraint.name.toUpperFirst() + 'Constraint'/] extends AbstractMo
[/template]
-[template public generateValidationContext(profile : Profile)]
-[file ('/org/eclipse/papyrus/validation/ValidationDelegateClientSelector.java', false)]
+[template public generateValidationContext(stereotype : Stereotype)]
+[file ('/org/eclipse/papyrus/validation/'+stereotype.name +'ClientSelector.java', false)]
[comment @main/]
package org.eclipse.papyrus.validation;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.validation.model.IClientSelector;
import org.eclipse.uml2.uml.Element;
-import org.eclipse.uml2.uml.PackageImport;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
-public class ValidationDelegateClientSelector implements IClientSelector {
+public class [stereotype.name/]ClientSelector implements IClientSelector {
public boolean selects(Object object) {
- return (object instanceof Element);
+ if(!(object instanceof EObject)) {
+ return false;
+ }
+
+ if(object instanceof Element) {
+ return false;
+ }
+
+ EObject stereotypeApplication = ((EObject)object);
+ Stereotype stereotype = UMLUtil.getStereotype(stereotypeApplication);
+ if(stereotype == null) {
+ return false;
+ }
+
+ if("[stereotype.name/]".equals(stereotype.getName())) {
+ return true;
+ }
+
+ return false;
}
+
}
[/file]
diff --git a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/tasks/generate.xml b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/tasks/generate.xml
index 34518587f35..7df43d81ae9 100644
--- a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/tasks/generate.xml
+++ b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.generator/tasks/generate.xml
@@ -15,25 +15,25 @@
<pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.equinox.preferences_3.5.100.v20130422-1538.jar"/>
<pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.core.contenttype_3.4.200.v20130326-1255.jar"/>
<pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.equinox.app_1.3.100.v20130327-1442.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.uml2.uml_4.1.0.v20130506-1015.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.ecore_2.9.0.v20130430-1108.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.common_2.9.0.v20130430-1108.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.ecore.xmi_2.9.0.v20130430-1108.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.uml2.common_1.8.0.v20130506-1015.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.uml2.types_1.0.100.v20130506-1015.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.mapping.ecore2xml_2.7.0.v20130506-0438.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.validation_1.7.0.201305071340.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.uml2.uml_4.1.0.v20130527-0913.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.ecore_2.9.0.v20130528-0742.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.common_2.9.0.v20130528-0742.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.ecore.xmi_2.9.0.v20130528-0742.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.uml2.common_1.8.0.v20130527-0913.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.uml2.types_1.0.100.v20130527-0913.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.mapping.ecore2xml_2.7.0.v20130603-0742.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.validation_1.7.0.201305212004.jar"/>
<pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.core.resources_3.8.100.v20130213-1252.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.ocl_3.3.0.v20130506-1149.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.ocl_3.3.0.v20130520-1918.jar"/>
<pathelement location="${ECLIPSE_HOME}/plugins/lpg.runtime.java_2.0.17.v201004271640.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.ocl.common_1.1.0.v20130405-1338.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.ocl.ecore_3.3.0.v20130405-1935.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.common_3.4.0.201304261210.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.engine_3.4.0.201304261210.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.model_3.4.0.201304261210.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.profiler_3.4.0.201304261210.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.codegen.ecore_2.9.0.v20130506-0438.jar"/>
- <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.codegen_2.9.0.v20130506-0438.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.ocl.common_1.1.0.v20130520-1222.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.ocl.ecore_3.3.0.v20130520-1222.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.common_3.4.0.201305170827.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.engine_3.4.0.201305170827.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.model_3.4.0.201305170827.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.acceleo.profiler_3.4.0.201305170827.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.codegen.ecore_2.9.0.v20130603-0742.jar"/>
+ <pathelement location="${ECLIPSE_HOME}/plugins/org.eclipse.emf.codegen_2.9.0.v20130603-0742.jar"/>
</path>
<path id="org.eclipse.papyrus.dsml.validation.generator.classpath">
diff --git a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ConstraintManagerImpl.java b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ConstraintManagerImpl.java
index e3d0f00e41c..57d3aa3b1f1 100644
--- a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ConstraintManagerImpl.java
+++ b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ConstraintManagerImpl.java
@@ -29,6 +29,7 @@ import org.eclipse.uml2.uml.Stereotype;
/**
* Management of validationRules assigned to the stereotypes specified in the
* defined profile.
+ * ContraintProvider=Category=profile or subprofile
*
*
*/
@@ -37,6 +38,18 @@ public class ConstraintManagerImpl implements IConstraintsManager {
private List<IConstraintProvider> constraintsProviders = new ArrayList<IConstraintProvider>();
private Map<Stereotype, List<Constraint>> constraintsOfStereotype = new HashMap<Stereotype, List<Constraint>>();
+ private Map<Constraint,ValidationRuleImpl > validationRuleMap = new HashMap<Constraint,ValidationRuleImpl>();
+
+
+
+ public Map<Constraint, ValidationRuleImpl> getValidationRuleMap() {
+ return validationRuleMap;
+ }
+
+ public Map<Stereotype, List<Constraint>> getConstraintsOfStereotype() {
+ return constraintsOfStereotype;
+ }
+
private Category primeCategory;
@@ -77,7 +90,7 @@ public class ConstraintManagerImpl implements IConstraintsManager {
/**
* Recursive function to relate categories with the validationRules
- * a profile becomes a category
+ * a profile becomes a category= a constraint Provider
* a stereotype becomes a category
*
* @param element
@@ -117,7 +130,9 @@ public class ConstraintManagerImpl implements IConstraintsManager {
if(this.constraintsOfStereotype.get(subElement) != null) {
for(Constraint constraint : this.constraintsOfStereotype.get(subElement)) {
try {
- subCategory.getConstraints().add(new ValidationRuleImpl(constraint, subCategory));
+ ValidationRuleImpl rule=new ValidationRuleImpl(constraint, subCategory);
+ validationRuleMap.put(constraint, rule);
+ subCategory.getConstraints().add(rule);
} catch (WrongStereotypeException e) {
e.printStackTrace();
}
diff --git a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ValidationRuleImpl.java b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ValidationRuleImpl.java
index e1bc734a702..6dad7177096 100644
--- a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ValidationRuleImpl.java
+++ b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/impl/ValidationRuleImpl.java
@@ -109,20 +109,7 @@ public class ValidationRuleImpl implements IValidationRule {
this.targets.add((String)target);
}
}
- } else {
-
- BasicEList<String> tgs = new BasicEList<String>();
-
- Element element = constraint.getContext();
-
- if(element instanceof Stereotype) {
- for(Class extension : ((Stereotype)element).getExtendedMetaclasses()) {
-
- this.targets.add(extension.getName());
- tgs.add(extension.getName());
-
- }
- }
+
}
/*
diff --git a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/interfaces/IConstraintsManager.java b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/interfaces/IConstraintsManager.java
index 0126ceab824..637e454e9e6 100644
--- a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/interfaces/IConstraintsManager.java
+++ b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.model/src/org/eclipse/papyrus/dsml/validation/model/elements/interfaces/IConstraintsManager.java
@@ -13,6 +13,11 @@
package org.eclipse.papyrus.dsml.validation.model.elements.interfaces;
import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrus.dsml.validation.model.elements.impl.ValidationRuleImpl;
+import org.eclipse.uml2.uml.Constraint;
+import org.eclipse.uml2.uml.Stereotype;
/**
* Interface which specifies methods for the manager taking charge of a
@@ -29,6 +34,8 @@ public interface IConstraintsManager {
* @return list of constraint providers
*/
public List<IConstraintProvider> getConstraintsProviders();
+
+ public Map<Constraint, ValidationRuleImpl> getValidationRuleMap();
/**
@@ -37,5 +44,12 @@ public interface IConstraintsManager {
* @return prime category
*/
public Category getPrimeCategory();
+
+
+ /**
+ *
+ * @return the hashmap of constraint per stereotype
+ */
+ public Map<Stereotype, List<Constraint>> getConstraintsOfStereotype();
}
diff --git a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.wizard/src/org/eclipse/papyrus/dsml/validation/wizard/ValidationPluginGenerator.java b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.wizard/src/org/eclipse/papyrus/dsml/validation/wizard/ValidationPluginGenerator.java
index d138ffd9772..fe7ffaf1363 100644
--- a/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.wizard/src/org/eclipse/papyrus/dsml/validation/wizard/ValidationPluginGenerator.java
+++ b/extraplugins/dsml.validation/org.eclipse.papyrus.dsml.validation.wizard/src/org/eclipse/papyrus/dsml/validation/wizard/ValidationPluginGenerator.java
@@ -15,6 +15,8 @@ package org.eclipse.papyrus.dsml.validation.wizard;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -31,6 +33,8 @@ import org.eclipse.papyrus.dsml.validation.model.elements.interfaces.IConstraint
import org.eclipse.papyrus.dsml.validation.model.elements.interfaces.IValidationRule;
import org.eclipse.papyrus.dsml.validation.model.profilenames.Utils;
import org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard;
+import org.eclipse.uml2.uml.Constraint;
+import org.eclipse.uml2.uml.Stereotype;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -103,14 +107,14 @@ public class ValidationPluginGenerator {
Element extension = editor.getPluginEditor().addExtension(EMF_VALIDATION_CONSTRAINT_PROVIDERS_EXTENSIONPOINT);
//creation of categories extension point
- //that correspond to sub-profiles and stereotypes
+ //that correspond to profile and sub-profiles
this.createHierarchyOfCategories(projectName,this.constraintsManager.getPrimeCategory(), extension, editor);
- //add the constraint provider extension point, normally it exist only one
+ //add the constraint provider extension point, normally it exist only per profile so per category
for (IConstraintProvider constraintProvider : constraintsManager.getConstraintsProviders()) {
//create the extension point for the provider
Element extElForConstraintsProvider = createExtensionForConstraintsProvider(constraintProvider, extension, editor, definition);
- // go though category (profile+ stereotype)
+ // go though category (profile)
for (IConstraintsCategory constraintCategory : constraintProvider.getConstraintsCategories()) {
//create the extension point validationRule for category
@@ -134,7 +138,7 @@ public class ValidationPluginGenerator {
}
}
- generateCommonExtension2(projectName,editor);
+ generateBindings(projectName,editor, this.constraintsManager);
editor.getProject().refreshLocal(0, null);
@@ -203,8 +207,8 @@ public class ValidationPluginGenerator {
Element extElForConstraint = editor.getPluginEditor().addChild(
parentElement, EMF_VALIDATION_CONSTRAINT_CHILD);
- extElForConstraint.setAttribute(ID, validation.getID() + OCL_LANGUAGE);
- extElForConstraint.setAttribute("name", validation.getName() + OCL_LANGUAGE);
+ extElForConstraint.setAttribute(ID, validation.getID());
+ extElForConstraint.setAttribute("name", validation.getName());
extElForConstraint.setAttribute("lang", OCL_LANGUAGE);
extElForConstraint.setAttribute("statusCode", validation
.getStatusCode().toString());
@@ -322,23 +326,31 @@ public class ValidationPluginGenerator {
}
- private void generateCommonExtension2(String projectName,PluginEditor editor) {
-
- Element extension = editor.getPluginEditor().addExtension(
- "org.eclipse.emf.validation.constraintBindings");
-
- extension.setAttribute(ID, ValidationPluginGenerator.getContextprefix());
-
- Element element = editor.getPluginEditor().addChild(extension,"clientContext");
- element.setAttribute(ID,ValidationPluginGenerator.getContextprefix());
-
- element = editor.getPluginEditor().addChild(element, "selector");
- element.setAttribute("class","org.eclipse.papyrus.validation"+SEPARATOR+"ValidationDelegateClientSelector");
-
- element = editor.getPluginEditor().addChild(extension, "binding");
- element.setAttribute("context", ValidationPluginGenerator.getContextprefix());
-
- this.createCategoriesForBinding(projectName,this.constraintsManager.getPrimeCategory(), element, editor);
+ private void generateBindings(String projectName,PluginEditor editor, IConstraintsManager constraintsManager) {
+ Element extension = editor.getPluginEditor().addExtension("org.eclipse.emf.validation.constraintBindings");
+ //create a client context per stereotypes
+ Set<Stereotype>constrainedStereotype=constraintsManager.getConstraintsOfStereotype().keySet();
+ for(Iterator<Stereotype> iterator = constrainedStereotype.iterator(); iterator.hasNext();) {
+ Stereotype stereotype = (Stereotype)iterator.next();
+ System.out.println("+--> create clientContext for the stereotype "+stereotype.getName());
+ Element clientContextElement = editor.getPluginEditor().addChild(extension,"clientContext");
+ clientContextElement.setAttribute(ID,stereotype.getName()+"ClientContext");
+ Element selectorElement = editor.addChild(clientContextElement, "selector");
+ selectorElement.setAttribute("class","org.eclipse.papyrus.validation."+stereotype.getName()+"ClientSelector");
+
+ //create binding
+ List<Constraint> constraints=constraintsManager.getConstraintsOfStereotype().get(stereotype);
+ Element bindingelement = editor.getPluginEditor().addChild(extension, "binding");
+ bindingelement.setAttribute("context", stereotype.getName()+"ClientContext");
+ for(Iterator<Constraint> iteratorConstraint = constraints.iterator(); iteratorConstraint.hasNext();) {
+ Constraint constraint = (Constraint)iteratorConstraint.next();
+ constraintsManager.getValidationRuleMap().get(constraint).getID();
+ Element subElement = editor.addChild(bindingelement, "constraint");
+ subElement.setAttribute("ref",projectName+SEPARATOR+constraintsManager.getValidationRuleMap().get(constraint).getID());
+ System.out.println("+----> create binding for the constraint "+constraintsManager.getValidationRuleMap().get(constraint).getID());
+ }
+ }
+
}

Back to the top