Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java195
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

Back to the top