package de.galan.verjson.core;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.lang3.ObjectUtils;
import com.google.common.collect.Lists;
import de.galan.verjson.step.Step;
import de.galan.verjson.step.transformation.Transformation;
import de.galan.verjson.step.validation.Validation;
/**
* Sorts {@link ProxyStep}s, small sourceVersions before larger. Order inside a sourceVersion: Validation,
* Transformation, other.
*
* @author daniel
*/
public class ProxyStepComparator implements Comparator<ProxyStep> {
List<Class<?>> order = Lists.newArrayList();
public ProxyStepComparator() {
order.add(Transformation.class);
order.add(Validation.class);
}
@Override
public int compare(ProxyStep s1, ProxyStep s2) {
int result = ObjectUtils.compare(s1.getSourceVersion(), s2.getSourceVersion());
if (result == 0) {
Class<? extends Step> c1 = s1.getStep().getClass();
Class<? extends Step> c2 = s2.getStep().getClass();
if (!c1.equals(c2)) {
if (Validation.class.isAssignableFrom(c1)) {
result = -1;
}
else if (Validation.class.isAssignableFrom(c2)) {
result = 1;
}
else if (Transformation.class.isAssignableFrom(c1)) {
result = -1;
}
//else if (Transformation.class.isAssignableFrom(c2)) {
else {
result = 1;
}
}
}
return result;
}
}