From c493f896fb855950f7a97b63e48bcf257a78ee97 Mon Sep 17 00:00:00 2001
From: Johannes Eder <eder@fortiss.org>
Date: Mon, 9 Dec 2019 14:36:08 +0100
Subject: [PATCH] Adapted migrators

Issue-Ref: 3865
Issue-Url: https://af3-developer.fortiss.org/issues/3865

Signed-off-by: Johannes Eder <eder@fortiss.org>
---
 .../fortiss/tooling/base/migration/.ratings   |  6 +-
 ...ddMissingAnnotationsMigrationProvider.java |  5 +-
 ...uplicatedAnnotationsMigrationProvider.java |  5 +-
 ...edAnnotationInstanceMigrationProvider.java |  5 +-
 .../fortiss/tooling/kernel/extension/.ratings |  2 +-
 ...recatedArtifactsMigrationProviderBase.java | 95 -------------------
 6 files changed, 16 insertions(+), 102 deletions(-)
 delete mode 100644 org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/RemoveDeprecatedArtifactsMigrationProviderBase.java

diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/.ratings b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/.ratings
index 5633daf96..e5635e1fa 100644
--- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/.ratings
+++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/.ratings
@@ -1,3 +1,3 @@
-AddMissingAnnotationsMigrationProvider.java a3f2b3cbcd39f85e15bc998650f899f55d9f563e GREEN
-RemoveDuplicatedAnnotationsMigrationProvider.java f1bdb4733d5b9c6003a2b7fee59b89240a0a3b61 GREEN
-RemoveOutdatedAnnotationInstanceMigrationProvider.java 29c29f2bb7515cad1de45a30ffc185001b47a016 GREEN
+AddMissingAnnotationsMigrationProvider.java 83d2f324d0d1346e4cbcbc9006ad8df3babc6fd2 YELLOW
+RemoveDuplicatedAnnotationsMigrationProvider.java 929e5541de79b6e50e0fad0e21e389265b1528b4 YELLOW
+RemoveOutdatedAnnotationInstanceMigrationProvider.java 9e8a02f1cfcdf5138fdeb53cb968cacd1ba3b703 YELLOW
diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/AddMissingAnnotationsMigrationProvider.java b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/AddMissingAnnotationsMigrationProvider.java
index a3f2b3cbc..83d2f324d 100644
--- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/AddMissingAnnotationsMigrationProvider.java
+++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/AddMissingAnnotationsMigrationProvider.java
@@ -19,6 +19,7 @@ import static org.fortiss.tooling.base.utils.AnnotationUtils.instantiateAnnotati
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 import org.eclipse.emf.ecore.EObject;
@@ -49,9 +50,11 @@ public class AddMissingAnnotationsMigrationProvider implements IMigrationProvide
 
 	/** {@inheritDoc} */
 	@Override
-	public void migrate(ITopLevelElement modelElement, Map<EObject, AnyType> unknownFeatures) {
+	public Map<EObject, AnyType> migrate(ITopLevelElement modelElement,
+			Map<EObject, AnyType> unknownFeatures) {
 		EObject rootElement = modelElement.getRootModelElement();
 		instantiateAnnotationsRecursive(rootElement);
 		migratedProjects.add(modelElement);
+		return Collections.emptyMap();
 	}
 }
diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveDuplicatedAnnotationsMigrationProvider.java b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveDuplicatedAnnotationsMigrationProvider.java
index f1bdb4733..929e5541d 100644
--- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveDuplicatedAnnotationsMigrationProvider.java
+++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveDuplicatedAnnotationsMigrationProvider.java
@@ -19,6 +19,7 @@ import static org.fortiss.tooling.kernel.utils.EcoreUtils.getChildrenWithType;
 import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickInstanceOf;
 import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
 
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -87,7 +88,8 @@ public class RemoveDuplicatedAnnotationsMigrationProvider implements IMigrationP
 
 	/** {@inheritDoc} */
 	@Override
-	public void migrate(ITopLevelElement topLevelElement, Map<EObject, AnyType> unknownFeatures) {
+	public Map<EObject, AnyType> migrate(ITopLevelElement topLevelElement,
+			Map<EObject, AnyType> unknownFeatures) {
 
 		doInternal(topLevelElement, true);
 
@@ -95,5 +97,6 @@ public class RemoveDuplicatedAnnotationsMigrationProvider implements IMigrationP
 		error(ToolingBaseActivator.getDefault(),
 				"Duplicate annotations have been removed from \"" + uri.lastSegment() +
 						"\". Please report this incident since it indicates an internal problem.");
+		return Collections.emptyMap();
 	}
 }
diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveOutdatedAnnotationInstanceMigrationProvider.java b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveOutdatedAnnotationInstanceMigrationProvider.java
index 29c29f2bb..9e8a02f1c 100644
--- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveOutdatedAnnotationInstanceMigrationProvider.java
+++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/migration/RemoveOutdatedAnnotationInstanceMigrationProvider.java
@@ -19,6 +19,7 @@ import static org.eclipse.emf.ecore.util.EcoreUtil.delete;
 import static org.fortiss.tooling.common.util.LambdaUtils.isAssignableFromAny;
 import static org.fortiss.tooling.kernel.utils.EcoreUtils.getChildrenWithType;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -67,12 +68,14 @@ public abstract class RemoveOutdatedAnnotationInstanceMigrationProvider<T extend
 
 	/** {@inheritDoc} */
 	@Override
-	public void migrate(ITopLevelElement modelElement, Map<EObject, AnyType> unknownFeatures) {
+	public Map<EObject, AnyType> migrate(ITopLevelElement modelElement,
+			Map<EObject, AnyType> unknownFeatures) {
 		EObject rootModelElement = modelElement.getRootModelElement();
 		for(T annotation : getChildrenWithType(rootModelElement, annotationType)) {
 			if(!isAssignableFromAny(modelElementTypes, annotation.getSpecificationOf())) {
 				delete(annotation);
 			}
 		}
+		return Collections.emptyMap();
 	}
 }
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/.ratings b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/.ratings
index 0a98fb5c5..fcb76b135 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/.ratings
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/.ratings
@@ -6,7 +6,7 @@ IEclipseResourceStorageLocationProvider.java 0ab7f304d52a9d86f01f66e308e9a7ca420
 IElementCompositor.java 5b0ab1732f71b3f8467e0276c844f0dd549e191f GREEN
 ILibraryElementHandler.java 00ef5b25c63b8570006e6f6748aed0da1f33a5f1 GREEN
 ILogMessageHandler.java 9ab53e836a095ef00fd84ecc0375167edf593b46 GREEN
-IMigrationProvider.java fdb1078dfca10a82a18f79b862d7b8644e80e14e GREEN
+IMigrationProvider.java cbf0d03c7b89ecdba79a67ae60a547fe058dd5d8 YELLOW
 IPrototypeProvider.java d5e3dbae19b5654caf28b81da6b1609d3c12be12 GREEN
 IStorageProvider.java d9b14cdd254d0c956dc5715c1c4d4d955a705dd5 GREEN
 ITransformationProvider.java a4ee2ea08720bb2fce29806062eb01499bb5071e GREEN
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/RemoveDeprecatedArtifactsMigrationProviderBase.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/RemoveDeprecatedArtifactsMigrationProviderBase.java
deleted file mode 100644
index 4a1b67622..000000000
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/RemoveDeprecatedArtifactsMigrationProviderBase.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*-------------------------------------------------------------------------+
-| Copyright 2018 fortiss GmbH                                              |
-|                                                                          |
-| Licensed under the Apache License, Version 2.0 (the "License");          |
-| you may not use this file except in compliance with the License.         |
-| You may obtain a copy of the License at                                  |
-|                                                                          |
-|    http://www.apache.org/licenses/LICENSE-2.0                            |
-|                                                                          |
-| Unless required by applicable law or agreed to in writing, software      |
-| distributed under the License is distributed on an "AS IS" BASIS,        |
-| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-| See the License for the specific language governing permissions and      |
-| limitations under the License.                                           |
-+--------------------------------------------------------------------------*/
-package org.fortiss.tooling.kernel.extension.base;
-
-import static org.conqat.lib.commons.reflect.ReflectionUtils.isInstanceOfAny;
-import static org.eclipse.emf.ecore.util.EcoreUtil.delete;
-import static org.fortiss.tooling.common.util.LambdaUtils.asStream;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.xml.type.AnyType;
-import org.fortiss.tooling.kernel.extension.IMigrationProvider;
-import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
-import org.fortiss.tooling.kernel.model.INamedCommentedElement;
-
-/**
- * Remove artificats related to deprecated use case model.
- * 
- * @author barner
- */
-public abstract class RemoveDeprecatedArtifactsMigrationProviderBase implements IMigrationProvider { // NO_UCD
-	// Migrators are retired after a release, but this base class should be available when needed.
-	// See https://af3-developer.fortiss.org/projects/autofocus3/wiki/Model_Migration
-
-	/** Returns the {@link Collection} of deprecated artifact types to be removed from the model. */
-	protected abstract Collection<Class<? extends EObject>> getDeprecatedArtifacts();
-
-	/**
-	 * Returns the {@link Collection} of deprecated root artifact types (possibly empty subset of
-	 * {@link #getDeprecatedArtifacts()}) for which a comment is added to the migrated model that
-	 * deprecated artifacts have been removed.
-	 */
-	protected abstract Collection<Class<? extends EObject>> getDeprecatedRootArtifacts();
-
-	/** Returns the {@link Stream} of deprecated model elements to be removed. */
-	private Stream<EObject> getDeprecatedModelElements(ITopLevelElement modelElement) {
-		Stream<EObject> root = asStream(modelElement.getRootModelElement().eAllContents());
-		Collection<Class<? extends EObject>> deprArtifacts = getDeprecatedArtifacts();
-		return root.filter(
-				e -> isInstanceOfAny(e, deprArtifacts.toArray(new Class[deprArtifacts.size()])));
-	}
-
-	/** {@inheritDoc} */
-
-	@Override
-	public boolean needMigration(ITopLevelElement modelElement,
-			Map<EObject, AnyType> unknownFeatures) {
-
-		return getDeprecatedModelElements(modelElement).findAny().isPresent();
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public void migrate(ITopLevelElement modelElement, Map<EObject, AnyType> unknownFeatures) {
-		EObject object;
-		do {
-			object = null;
-			Stream<EObject> deprecatedModelElements = getDeprecatedModelElements(modelElement);
-			Optional<EObject> anyObject = deprecatedModelElements.findAny();
-			if(anyObject.isPresent()) {
-				object = anyObject.get();
-				if(object.eContainer() instanceof INamedCommentedElement) {
-					INamedCommentedElement parent = (INamedCommentedElement)object.eContainer();
-					if(parent.getComment() == null || parent.getComment().isEmpty()) {
-						for(Class<? extends EObject> rootType : getDeprecatedRootArtifacts()) {
-							if(rootType.isAssignableFrom(object.getClass())) {
-								parent.setComment(rootType.getSimpleName() +
-										" models are no longer supported. This sub-model has been removed automatically!");
-								break;
-							}
-						}
-					}
-				}
-				delete(object);
-			}
-		} while(object != null);
-	}
-}
-- 
GitLab