From 4cd9bd9f4e947974943815532f719168f9ec2b97 Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Mon, 13 Jun 2016 11:31:10 +0000
Subject: [PATCH] Provided register method for constraint verifier service.
 refs 2590

---
 .../trunk/schema/constraintVerifier.exsd          |  4 ++--
 .../schema/eclipseResourcePostLoadProvider.exsd   |  2 +-
 .../eclipseResourceStorageLocationProvider.exsd   |  2 +-
 .../IEclipseResourcePostLoadProvider.java         |  2 ++
 .../internal/ConstraintVerificationService.java   |  8 ++++++++
 .../service/IConstraintVerificationService.java   | 15 ++++++++++-----
 6 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/org.fortiss.tooling.kernel/trunk/schema/constraintVerifier.exsd b/org.fortiss.tooling.kernel/trunk/schema/constraintVerifier.exsd
index b927dcd92..2d10f8ae5 100644
--- a/org.fortiss.tooling.kernel/trunk/schema/constraintVerifier.exsd
+++ b/org.fortiss.tooling.kernel/trunk/schema/constraintVerifier.exsd
@@ -1,12 +1,12 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.fortiss.af3.verification" xmlns="http://www.w3.org/2001/XMLSchema">
+<schema targetNamespace="org.fortiss.tooling.kernel" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
          <meta.schema plugin="org.fortiss.tooling.kernel" id="constraintVerifier" name="Constraint Verifier"/>
       </appinfo>
       <documentation>
-         [Enter description of this extension point.]
+         DEPRECATED use IConstraintVerificationService.registerConstraintVerifier() instead.
       </documentation>
    </annotation>
 
diff --git a/org.fortiss.tooling.kernel/trunk/schema/eclipseResourcePostLoadProvider.exsd b/org.fortiss.tooling.kernel/trunk/schema/eclipseResourcePostLoadProvider.exsd
index 387cb579a..1a0bc0fd3 100644
--- a/org.fortiss.tooling.kernel/trunk/schema/eclipseResourcePostLoadProvider.exsd
+++ b/org.fortiss.tooling.kernel/trunk/schema/eclipseResourcePostLoadProvider.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.fortiss.tooling.kernel" id="eclipseResourcePostLoadProvider" name="Eclipse Resource Post Load Provider"/>
       </appinfo>
       <documentation>
-         Registers a location provider for Eclipse resource based storage.
+         DEPRECATED use IPersistencyService instead.
       </documentation>
    </annotation>
 
diff --git a/org.fortiss.tooling.kernel/trunk/schema/eclipseResourceStorageLocationProvider.exsd b/org.fortiss.tooling.kernel/trunk/schema/eclipseResourceStorageLocationProvider.exsd
index 0eb2cb9fb..ef3faf566 100644
--- a/org.fortiss.tooling.kernel/trunk/schema/eclipseResourceStorageLocationProvider.exsd
+++ b/org.fortiss.tooling.kernel/trunk/schema/eclipseResourceStorageLocationProvider.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.fortiss.tooling.kernel" id="eclipseResourceStorageLocationProvider" name="Eclipse Resource Storage Location Provider"/>
       </appinfo>
       <documentation>
-         Registers a location provider for Eclipse resource based storage.
+         DEPRECATED use IPersistencyService instead.
       </documentation>
    </annotation>
 
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/IEclipseResourcePostLoadProvider.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/IEclipseResourcePostLoadProvider.java
index accf20eed..40c071316 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/IEclipseResourcePostLoadProvider.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/IEclipseResourcePostLoadProvider.java
@@ -29,6 +29,8 @@ import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
  * @version $Rev$
  * @ConQAT.Rating GREEN Hash: 9D7025FE2AE6D9B3CAE8A20352705445
  */
+@Deprecated
+// FIXME: move to IPersistencyService
 public interface IEclipseResourcePostLoadProvider {
 
 	/**
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintVerificationService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintVerificationService.java
index a9f84a438..0c8d259f8 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintVerificationService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConstraintVerificationService.java
@@ -55,6 +55,14 @@ public final class ConstraintVerificationService extends
 		KernelIntrospectionSystemService.getInstance().registerService(this);
 	}
 
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T extends IConstraint> void registerConstraintVerifier(IConstraintVerifier<T> verifier,
+			Class<T> constraintElementClass) {
+		addHandler(constraintElementClass, (IConstraintVerifier<IConstraint>)verifier);
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public String getIntrospectionDescription() {
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConstraintVerificationService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConstraintVerificationService.java
index bf43a788a..eec848ec2 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConstraintVerificationService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConstraintVerificationService.java
@@ -3,6 +3,7 @@ package org.fortiss.tooling.kernel.service;
 import java.util.List;
 import java.util.function.Consumer;
 
+import org.fortiss.tooling.kernel.extension.IConstraintVerifier;
 import org.fortiss.tooling.kernel.internal.ConstraintVerificationService;
 import org.fortiss.tooling.kernel.model.constraints.IConstrained;
 import org.fortiss.tooling.kernel.model.constraints.IConstraint;
@@ -34,26 +35,30 @@ public interface IConstraintVerificationService {
 		return INSTANCE;
 	}
 
+	/** Registers the given verifier with the service. */
+	<T extends IConstraint> void registerConstraintVerifier(IConstraintVerifier<T> verifier,
+			Class<T> constraintElementClass);
+
 	/**
 	 * @param constraint
 	 *            Verifies <code>constraint</code>. The framework always runs the verification in a
 	 *            command. Should not yield any "useless" change because verification should always
 	 *            update the constraint status and the checksums anyways.
 	 */
-	public void verify(IConstraint constraint);
+	void verify(IConstraint constraint);
 
 	/**
 	 * @param constraint
 	 * @return <code>true</code> if <code>constraint</code> is up to date.
 	 */
-	public boolean isUpToDate(IConstraint constraint);
+	boolean isUpToDate(IConstraint constraint);
 
 	/**
 	 * @param status
 	 * @return A list of possible automatic fixes for the (constraint of) <code>status</code>.
 	 *         A status should be candidate to fixing if it is anything but successful or outdated.
 	 */
-	public List<IFix> fixes(IConstraintVerificationStatus status);
+	List<IFix> fixes(IConstraintVerificationStatus status);
 
 	/** Interface for a "fix". */
 	public interface IFix {
@@ -61,13 +66,13 @@ public interface IConstraintVerificationService {
 		 * Description of the fix. Useful to allow the user distinguish the fix in case there are
 		 * several.
 		 */
-		public String getDescription();
+		String getDescription();
 
 		/**
 		 * @param status
 		 *            Fixes (the constraint of) <code>status</code>.
 		 */
-		public void runFix(IConstraintVerificationStatus status);
+		void runFix(IConstraintVerificationStatus status);
 	}
 
 	/** Utils. We store them to avoid having again thousands of different classes for one topic. */
-- 
GitLab