package edu.isi.karma.modeling.alignment.learner;
import java.util.Comparator;
import java.util.List;
public class SteinerNodesCoherenceComparator implements Comparator<SteinerNodes> {
@Override
public int compare(SteinerNodes sn1, SteinerNodes sn2) {
if (sn1.getCoherence() == null && sn2.getCoherence() == null)
return 0;
else if (sn1.getCoherence() == null)
return -1;
else if (sn2.getCoherence() == null)
return 1;
else {
List<CoherenceItem> l1 = sn1.getCoherence().getItems();
List<CoherenceItem> l2 = sn2.getCoherence().getItems();
if ( (l1 == null || l1.isEmpty()) && (l2 == null || l2.isEmpty()) )
return 0;
else if (l1 == null || l1.isEmpty())
return -1;
else if (l2 == null || l2.isEmpty())
return 1;
else {
int i = 0;
while (i < l1.size() && i < l2.size()) {
if (l1.get(i).compareTo(l2.get(i)) == 0)
i++;
else
return l1.get(i).compareTo(l2.get(i));
}
if (i < l2.size()) return -1; // l1 has less coherence items
else if (i < l1.size()) return 1; // l2 has less coherence items
// else return 0;
else {
if (sn1.getConfidence().getConfidenceValue() < sn2.getConfidence().getConfidenceValue())
return -1;
else if (sn1.getConfidence().getConfidenceValue() > sn2.getConfidence().getConfidenceValue())
return 1;
else {
if (sn1.getNonModelNodesCount() > sn2.getNonModelNodesCount())
return -1;
else if (sn1.getNonModelNodesCount() < sn2.getNonModelNodesCount())
return 1;
else return 0;
}
}
}
}
}
}