Skip to content
Snippets Groups Projects
Commit c493f896 authored by Johannes Eder's avatar Johannes Eder
Browse files

Adapted migrators

parent ae1c6476
No related branches found
No related tags found
1 merge request!843865: tolerant model loader
AddMissingAnnotationsMigrationProvider.java a3f2b3cbcd39f85e15bc998650f899f55d9f563e GREEN
RemoveDuplicatedAnnotationsMigrationProvider.java f1bdb4733d5b9c6003a2b7fee59b89240a0a3b61 GREEN
RemoveOutdatedAnnotationInstanceMigrationProvider.java 29c29f2bb7515cad1de45a30ffc185001b47a016 GREEN
AddMissingAnnotationsMigrationProvider.java 83d2f324d0d1346e4cbcbc9006ad8df3babc6fd2 YELLOW
RemoveDuplicatedAnnotationsMigrationProvider.java 929e5541de79b6e50e0fad0e21e389265b1528b4 YELLOW
RemoveOutdatedAnnotationInstanceMigrationProvider.java 9e8a02f1cfcdf5138fdeb53cb968cacd1ba3b703 YELLOW
......@@ -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();
}
}
......@@ -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();
}
}
......@@ -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();
}
}
......@@ -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
......
/*-------------------------------------------------------------------------+
| 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);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment