diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/base/.ratings b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/base/.ratings index 5f40ddbfa04ee8d811b9ea9f2e12a7d6da9920cf..cec2e82057b59c0972379d5bc179d7871268ed8a 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/base/.ratings +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/base/.ratings @@ -5,6 +5,5 @@ ElementCompositorBase.java 8667281b2e5988b11390cf77deab5d118f297ab1 GREEN MultiViolationConstraintCheckerBase.java e2f17f02fae75a17e955d48734ed043323f26f04 GREEN PrototypeProviderBase.java 62de3ea391ecb515883490517aa2e94ab812d91b GREEN RemoveDeprecatedArtifactsMigrationProviderBase.java 48ded3c14cd7f3fe567c820eebf46c40214cf304 YELLOW -RemoveUnknownFeatureMigrationProviderBase.java 0ffeb1f02a3f7476abcb467ebe07d3c5d5561b86 GREEN TransformationContextChainBase.java b5195a9bde6d50268dda80fed993477d7a4447ee GREEN TransformationProviderBase.java 0c3d114c6a3d854f74630417c05dd889ed02acdf GREEN diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/base/RemoveUnknownFeatureMigrationProviderBase.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/base/RemoveUnknownFeatureMigrationProviderBase.java deleted file mode 100644 index 177a231e5b84a515b4fcbe2fec679f032617019d..0000000000000000000000000000000000000000 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/base/RemoveUnknownFeatureMigrationProviderBase.java +++ /dev/null @@ -1,133 +0,0 @@ -/*-------------------------------------------------------------------------+ -| Copyright 2015 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 java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.util.FeatureMap; -import org.eclipse.emf.ecore.xml.type.AnyType; -import org.fortiss.tooling.kernel.extension.IMigrationProvider; -import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; - -/** - * Base class for {@link IMigrationProvider}s to selectively remove unknown features from a model. - * - * @author barner - */ -public abstract class RemoveUnknownFeatureMigrationProviderBase 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 - - /** Type of container previously owning the known unknown feature. */ - protected Class<?> containerType; - - /** - * {@link EClass} representing how {@code anyType} references the unknown feature - * (e.g., {@link org.eclipse.emf.ecore.EcorePackage.Literals#EREFERENCE} or - * {@link org.eclipse.emf.ecore.EcorePackage.Literals#EATTRIBUTE}). - */ - private EClass fieldType; - - /** Name of field of {@code anyType} that is used to reference the unknown feature. */ - private String fieldName; - - /** Class name of unknown feature to be removed. */ - private String className; - - /** Constructs a new {@link RemoveUnknownFeatureMigrationProviderBase}. */ - protected RemoveUnknownFeatureMigrationProviderBase(Class<?> containerType, EClass fieldType, - final String fieldName, final String className) { - this.containerType = containerType; - this.fieldType = fieldType; - this.fieldName = fieldName; - this.className = className; - } - - /** {@inheritDoc} */ - @Override - public boolean needMigration(ITopLevelElement modelElement, - Map<EObject, AnyType> unknownFeatures) { - - return doInternal(unknownFeatures, false); - } - - /** {@inheritDoc} */ - @Override - public void migrate(ITopLevelElement modelElement, Map<EObject, AnyType> unknownFeatures) { - doInternal(unknownFeatures, true); - } - - /** - * Helper method to implement {@link #needMigration(ITopLevelElement, Map)} and - * {@link #migrate(ITopLevelElement, Map)}. - * - * @param unknownFeatures - * Set of unknown features to be investigated / manipulated - * - * @param migrate - * If {@code true}, the respective unknown features are removed. Otherwise, the - * return value indicates, if the migration is required. - * - * @return {@code true} iff there are unknown features that should be / have been removed. - */ - private boolean doInternal(Map<EObject, AnyType> unknownFeatures, boolean migrate) { - boolean rval = false; - for(EObject object : unknownFeatures.keySet()) { - if(containerType.isAssignableFrom(object.eClass().getInstanceClass())) { - AnyType anyType = unknownFeatures.get(object); - FeatureMap featureMap = anyType.getMixed(); - List<FeatureMap.Entry> toRemove = new ArrayList<FeatureMap.Entry>(); - for(FeatureMap.Entry feature : featureMap) { - EStructuralFeature eStructuralFeature = feature.getEStructuralFeature(); - if(eStructuralFeature.eClass().equals(fieldType) && - eStructuralFeature.getName().equals(fieldName) && - getUnknownEClassName(feature).equals(className)) { - if(migrate) { - toRemove.add(feature); - rval = true; - } else { - return true; - } - } - } - featureMap.removeAll(toRemove); - } - } - - return rval; - } - - /** - * Returns the name of an unknown {@link EClass} (i.e., that is not part of the meta-model (any - * more)) represented by a given {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}. - * - * In case the {@link EClass} is not represented by {@link AnyType} (e.g., because the - * {@link EClass} is (still) part of the meta-model), {@code null} is returned. - */ - private String getUnknownEClassName(FeatureMap.Entry feature) { - if(feature.getValue() instanceof AnyType) { - AnyType type = (AnyType)feature.getValue(); - return type.eClass().getName(); - } - - return null; - } -}