diff options
Diffstat (limited to 'deprecated/org.eclipse.papyrus.uml.compare/src/org/eclipse/papyrus/uml/compare/diff/UMLReferenceCheck.java')
-rw-r--r-- | deprecated/org.eclipse.papyrus.uml.compare/src/org/eclipse/papyrus/uml/compare/diff/UMLReferenceCheck.java | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/deprecated/org.eclipse.papyrus.uml.compare/src/org/eclipse/papyrus/uml/compare/diff/UMLReferenceCheck.java b/deprecated/org.eclipse.papyrus.uml.compare/src/org/eclipse/papyrus/uml/compare/diff/UMLReferenceCheck.java deleted file mode 100644 index f8f2632df6b..00000000000 --- a/deprecated/org.eclipse.papyrus.uml.compare/src/org/eclipse/papyrus/uml/compare/diff/UMLReferenceCheck.java +++ /dev/null @@ -1,195 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2010 CEA LIST. - * - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Tatiana Fesenko (CEA LIST) - Initial API and implementation - * - *****************************************************************************/ -package org.eclipse.papyrus.uml.compare.diff; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.emf.compare.FactoryException; -import org.eclipse.emf.compare.diff.engine.check.ReferencesCheck; -import org.eclipse.emf.compare.diff.metamodel.DiffGroup; -import org.eclipse.emf.compare.match.internal.statistic.ResourceSimilarity; -import org.eclipse.emf.compare.match.metamodel.Match2Elements; -import org.eclipse.emf.compare.util.EFactory; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.emf.ecore.util.EcoreUtil.CrossReferencer; - -/** - * Implementation of ReferenceCheck that doesn't show numerous bulk changes as described in Bug 316819#c1 - */ -public class UMLReferenceCheck extends ReferencesCheck { - - /** - * Instantiates a new uML reference check. - * - * @param referencer the referencer - */ - public UMLReferenceCheck(CrossReferencer referencer) { - super(referencer); - } - - /* (non-Javadoc) - * @see org.eclipse.emf.compare.diff.engine.check.ReferencesCheck#checkReferenceUpdates(org.eclipse.emf.compare.diff.metamodel.DiffGroup, org.eclipse.emf.compare.match.metamodel.Match2Elements, org.eclipse.emf.ecore.EReference) - */ - @Override - protected void checkReferenceUpdates(DiffGroup root, Match2Elements mapping, EReference reference) throws FactoryException { - if(reference.isMany() && isSimilarSingleReference(mapping, reference)) { - return; - } - super.checkReferenceUpdates(root, mapping, reference); - } - - /* (non-Javadoc) - * @see org.eclipse.emf.compare.diff.engine.check.ReferencesCheck#shouldBeIgnored(org.eclipse.emf.ecore.EReference) - */ - @Override - protected boolean shouldBeIgnored(EReference reference) { -// if (isTaggedValue(reference)) { -// return false; -// } - return super.shouldBeIgnored(reference); - } - - /** - * Checks if is tagged value. - * - * @param reference the reference - * @return true, if is tagged value - */ - protected boolean isTaggedValue(EReference reference) { - // improve condition - return reference.isDerived(); - } - - /** - * Checks if is similar single reference. - * - * @param mapping the mapping - * @param reference the reference - * @return true, if is similar single reference - * @throws FactoryException the factory exception - */ - private boolean isSimilarSingleReference(Match2Elements mapping, EReference reference) throws FactoryException { - final double similarReferenceURIThreshold = 0.8d; - final List<Object> leftElementObjReferences = convertFeatureMapList(EFactory.eGetAsList(mapping.getLeftElement(), reference.getName())); - final List<Object> rightElementObjReferences = convertFeatureMapList(EFactory.eGetAsList(mapping.getRightElement(), reference.getName())); - - - // All values should be EObjects - final List<EObject> leftElementReferences = new ArrayList<EObject>(); - final List<EObject> rightElementReferences = new ArrayList<EObject>(); - for(Object left : leftElementObjReferences) { - leftElementReferences.add((EObject)left); - } - for(Object right : rightElementObjReferences) { - rightElementReferences.add((EObject)right); - } - - final List<EObject> deletedReferences = computeDeletedReferences(leftElementReferences, rightElementReferences); - final List<EObject> addedReferences = computeAddedReferences(leftElementReferences, rightElementReferences); - if(addedReferences.size() == 1 && deletedReferences.size() == 1) { - EObject addedValue = addedReferences.get(0); - EObject deletedValue = deletedReferences.get(0); - - final double uriSimilarity = ResourceSimilarity.computeURISimilarity(EcoreUtil.getURI(addedValue), EcoreUtil.getURI(deletedValue)); - if(uriSimilarity >= similarReferenceURIThreshold) { - return true; - } - } - return false; - } - - /** - * Compute added references. - * - * @param leftReferences the left references - * @param rightReferences the right references - * @return the list - */ - private List<EObject> computeAddedReferences(List<EObject> leftReferences, List<EObject> rightReferences) { - final List<EObject> deletedReferences = new ArrayList<EObject>(); - final List<EObject> addedReferences = new ArrayList<EObject>(); - final double similarReferenceURIThreshold = 0.8d; - - if(leftReferences != null) { - addedReferences.addAll(leftReferences); - } - if(rightReferences != null) { - deletedReferences.addAll(rightReferences); - } - final List<EObject> matchedOldReferences = getMatchedReferences(deletedReferences); - - // "Added" references are the references from the left element that - // have no matching "right" counterpart - addedReferences.removeAll(matchedOldReferences); - - return addedReferences; - } - - /** - * This will create and populate a {@link List} with all the references from the <code>rightReferences</code> {@link List} that cannot be - * matched in the <code>leftReferences</code> {@link List}. - * - * @param leftReferences - * List of the left element reference values. - * @param rightReferences - * List of the right element reference values. - * @return {@link List} of all the references that have been deleted from the left (local) element since - * the right (distant) element. - */ - private List<EObject> computeDeletedReferences(List<EObject> leftReferences, List<EObject> rightReferences) { - final List<EObject> deletedReferences = new ArrayList<EObject>(); - final List<EObject> addedReferences = new ArrayList<EObject>(); - final double similarReferenceURIThreshold = 0.8d; - - if(leftReferences != null) { - addedReferences.addAll(leftReferences); - } - if(rightReferences != null) { - deletedReferences.addAll(rightReferences); - } - final List<EObject> matchedNewReferences = getMatchedReferences(addedReferences); - - // "deleted" references are the references from the right element that - // have no counterpart in the left element - deletedReferences.removeAll(matchedNewReferences); - - return deletedReferences; - } - - /** - * Gets the matched references. - * - * @param references the references - * @return the matched references - */ - private List<EObject> getMatchedReferences(List<EObject> references) { - final List<EObject> matchedReferences = new ArrayList<EObject>(); - final Iterator<EObject> refIterator = references.iterator(); - while(refIterator.hasNext()) { - final Object currentReference = refIterator.next(); - if(currentReference != null) { - final EObject currentMapped = getMatchedEObject((EObject)currentReference); - if(currentMapped != null) { - matchedReferences.add(currentMapped); - } - } - } - return matchedReferences; - } - -}
\ No newline at end of file |