From b80b560c7032acd4bcea690c547b91f6cd566f6a Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Mon, 4 Jul 2011 12:07:07 +0000 Subject: [PATCH] refactored constraint checker service to use service base implementation --- org.fortiss.tooling.kernel/trunk/plugin.xml | 2 +- ...xsd => modelElementConstraintChecker.exsd} | 4 +- .../kernel/interfaces/IConstraintChecker.java | 4 +- .../interfaces/IConstraintViolation.java | 7 ++- .../kernel/internal/ConstraintService.java | 52 ++++++++++++++++--- .../kernel/services/IConstraintService.java | 6 ++- 6 files changed, 60 insertions(+), 15 deletions(-) rename org.fortiss.tooling.kernel/trunk/schema/{modelConstraintChecker.exsd => modelElementConstraintChecker.exsd} (94%) diff --git a/org.fortiss.tooling.kernel/trunk/plugin.xml b/org.fortiss.tooling.kernel/trunk/plugin.xml index 63eaaaa97..9f0b24f72 100644 --- a/org.fortiss.tooling.kernel/trunk/plugin.xml +++ b/org.fortiss.tooling.kernel/trunk/plugin.xml @@ -4,7 +4,7 @@ <extension-point id="modelPrototypeProvider" name="Model Prototype Provider" schema="schema/modelPrototypeProvider.exsd"/> <extension-point id="modelElementCompositor" name="Model Element Compositor" schema="schema/modelElementCompositor.exsd"/> <extension-point id="modelStorageProvider" name="Model Storage Provider" schema="schema/modelStorageProvider.exsd"/> - <extension-point id="modelConstraintChecker" name="Model Constraint Checker" schema="schema/modelConstraintChecker.exsd"/> + <extension-point id="modelElementConstraintChecker" name="Model Element Constraint Checker" schema="schema/modelElementConstraintChecker.exsd"/> <extension-point id="eclipseResourceStorageLocationProvider" name="Eclipse Resource Storage Location Provider" schema="schema/eclipseResourceStorageLocationProvider.exsd"/> <extension-point id="modelConnectionCompositor" name="Model Connection Compositor" schema="schema/modelConnectionCompositor.exsd"/> <extension diff --git a/org.fortiss.tooling.kernel/trunk/schema/modelConstraintChecker.exsd b/org.fortiss.tooling.kernel/trunk/schema/modelElementConstraintChecker.exsd similarity index 94% rename from org.fortiss.tooling.kernel/trunk/schema/modelConstraintChecker.exsd rename to org.fortiss.tooling.kernel/trunk/schema/modelElementConstraintChecker.exsd index bebe29d78..85dc11ee2 100644 --- a/org.fortiss.tooling.kernel/trunk/schema/modelConstraintChecker.exsd +++ b/org.fortiss.tooling.kernel/trunk/schema/modelElementConstraintChecker.exsd @@ -3,7 +3,7 @@ <schema targetNamespace="org.fortiss.tooling.kernel" xmlns="http://www.w3.org/2001/XMLSchema"> <annotation> <appinfo> - <meta.schema plugin="org.fortiss.tooling.kernel" id="modelConstraintChecker" name="Model Constraint Checker"/> + <meta.schema plugin="org.fortiss.tooling.kernel" id="modelElementConstraintChecker" name="Model Element Constraint Checker"/> </appinfo> <documentation> Registers a constraint checker for model elements. @@ -46,7 +46,7 @@ </complexType> </element> - <element name="modelConstraintChecker" type="string"> + <element name="modelElementConstraintChecker" type="string"> </element> <annotation> diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintChecker.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintChecker.java index d59b7682b..b4e190d58 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintChecker.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintChecker.java @@ -38,8 +38,8 @@ public interface IConstraintChecker<C extends EObject> extends IEObjectAware<C> * Determines whether the constraint checker is applicable to the given * model element. */ - boolean isApplicable(C modelElement); + boolean isApplicable(EObject modelElement); /** Applies the constraint checker to the given model element. */ - IConstraintViolation apply(C modelElement); + IConstraintViolation<EObject> apply(EObject modelElement); } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintViolation.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintViolation.java index 607493144..165df8104 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintViolation.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/IConstraintViolation.java @@ -17,6 +17,8 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.interfaces; +import org.eclipse.emf.ecore.EObject; + /** * This interface describes a constraint violation produced by some constraint * checker. A constraint violation has a severity of type {@link ESeverity}, an @@ -28,7 +30,10 @@ package org.fortiss.tooling.kernel.interfaces; * @version $Rev$ * @ConQAT.Rating YELLOW Hash: 0506883B3019B9D1DC5AC6C0AB2F35FB */ -public interface IConstraintViolation { +public interface IConstraintViolation<T extends EObject> { + + /** Returns the source of the constraint violation. */ + T getSource(); /** Returns the severity of the constraint violation. */ ESeverity getSeverity(); diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintService.java index 0281ecf60..1936883cb 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintService.java @@ -17,9 +17,11 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.internal; +import java.util.LinkedList; import java.util.List; import org.eclipse.emf.ecore.EObject; +import org.fortiss.tooling.kernel.base.EObjectAwareServiceBase; import org.fortiss.tooling.kernel.interfaces.IConstraintChecker; import org.fortiss.tooling.kernel.interfaces.IConstraintViolation; import org.fortiss.tooling.kernel.services.IConstraintService; @@ -32,21 +34,57 @@ import org.fortiss.tooling.kernel.services.IConstraintService; * @version $Rev$ * @ConQAT.Rating RED Hash: 9E0D8411A1525AA3989DED2C0DC7A033 */ -public class ConstraintService implements IConstraintService { +public class ConstraintService extends + EObjectAwareServiceBase<IConstraintChecker<? extends EObject>> + implements IConstraintService { + + /** The compositor extension point ID. */ + private static final String EXTENSION_POINT_NAME = "org.fortiss.tooling.kernel.modelElementConstraintChecker"; + + /** The compositor configuration element name. */ + private static final String CONFIGURATION_ELEMENT_NAME = "modelElementConstraintChecker"; + + /** The compositor class attribute name. */ + private static final String HANDLER_CLASS_ATTRIBUTE_NAME = "checker"; /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override - public List<IConstraintViolation> performAllConstraintChecks( + public List<IConstraintViolation<? extends EObject>> performAllConstraintChecks( EObject modelElement) { - // TODO - return null; + List<IConstraintViolation<? extends EObject>> result = new LinkedList<IConstraintViolation<? extends EObject>>(); + for (IConstraintChecker<? extends EObject> checker : getRegisteredHandlers(modelElement + .getClass())) { + if (checker.isApplicable(modelElement)) { + result.add(checker.apply(modelElement)); + } + } + return result; } /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override - public List<IConstraintChecker> getAllConstraintCheckers( + public List<IConstraintChecker<? extends EObject>> getAllConstraintCheckers( EObject modelElement) { - // TODO - return null; + return getRegisteredHandlers(modelElement.getClass()); + } + + /** {@inheritDoc} */ + @Override + protected String getExtensionPointName() { + return EXTENSION_POINT_NAME; + } + + /** {@inheritDoc} */ + @Override + protected String getConfigurationElementName() { + return CONFIGURATION_ELEMENT_NAME; + } + + /** {@inheritDoc} */ + @Override + protected String getHandlerClassAttribute() { + return HANDLER_CLASS_ATTRIBUTE_NAME; } } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/IConstraintService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/IConstraintService.java index a2fc3e368..9063b0594 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/IConstraintService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/IConstraintService.java @@ -42,11 +42,13 @@ public interface IConstraintService { * Performs all constraint checks on the given model element and returns the * check results. */ - List<IConstraintViolation> performAllConstraintChecks(EObject modelElement); + <T extends EObject> List<IConstraintViolation<T>> performAllConstraintChecks( + T modelElement); /** * Returns the list of registered constraint checkers for the given model * element. */ - List<IConstraintChecker> getAllConstraintCheckers(EObject modelElement); + <T extends EObject> List<IConstraintChecker<T>> getAllConstraintCheckers( + T modelElement); } -- GitLab