package net.jorgemanrubia.emfcomparison;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;

public class EMFComparator extends EcoreUtil.EqualityHelper {
	
	class EObjectComparator implements Comparator<EObject> {
		public int compare(EObject object1, EObject object2) {
			String targetString1 = extractComparisonString(object1);
			String targetString2 = extractComparisonString(object2);

			return targetString1.compareTo(targetString2);
		}

		private String extractComparisonString(EObject object) {
			return object.toString().replaceAll(
					object.getClass().getName(), "").replaceAll(
					Integer.toHexString(object.hashCode()), "");
		}
	}

	@Override
	public boolean equals(List list1, List list2) {
		Comparator comparator = new EObjectComparator();

		List<EObject> sortedList1 = new ArrayList<EObject>(list1);
		List<EObject> sortedList2 = new ArrayList<EObject>(list2);

		Collections.sort(sortedList1, comparator);
		Collections.sort(sortedList2, comparator);
		
		return super.equals(sortedList1, sortedList2);
	}
}