/**
* Copyright (c) 2013 committers of YAKINDU and others.
* 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.refactoring.refactor.util;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.EcoreUtil.EqualityHelper;
import org.eclipse.emf.ecore.util.FeatureMap;
import org.eclipse.emf.ecore.util.FeatureMapUtil;
/**
* Modified {@link EqualityHelper} for test cases to ignore whitespaces in string comparisons and
* resolve proxy elements when necessary.
*
* @author thomas kutz - Initial contribution and API
*
*/
@SuppressWarnings("serial")
public class StatechartEqualityHelper extends EqualityHelper{
@Override
public boolean equals(EObject eObject1, EObject eObject2) {
if (eObject1!=null && eObject1.eIsProxy()) {
EcoreUtil.resolve(eObject1, eObject2.eResource());
}
if (eObject2!=null && eObject2.eIsProxy()) {
EcoreUtil.resolve(eObject2, eObject1.eResource());
}
return super.equals(eObject1, eObject2);
}
@Override
protected boolean haveEqualAttribute(EObject eObject1, EObject eObject2,
EAttribute attribute) {
Object value1 = eObject1.eGet(attribute);
Object value2 = eObject2.eGet(attribute);
// If the first value is null, the second value must be null.
//
if (value1 == null) {
return value2 == null;
}
// Since the first value isn't null, if the second one is, they aren't equal.
//
if (value2 == null) {
return false;
}
// If this is a feature map...
//
if (FeatureMapUtil.isFeatureMap(attribute)) {
// The feature maps must be equal.
//
FeatureMap featureMap1 = (FeatureMap)value1;
FeatureMap featureMap2 = (FeatureMap)value2;
return equalFeatureMaps(featureMap1, featureMap2);
}
else {
if (value1 instanceof String && value2 instanceof String) {
String wsFreeValue1 = removeWhitespaces((String)value1);
String wsFreeValue2 = removeWhitespaces((String)value2);
return wsFreeValue1.equals(wsFreeValue2);
}
return value1.equals(value2);
}
}
private String removeWhitespaces(String input) {
return input.replaceAll("\\s", "");
}
}