package org.goko.core.gcode.rs274ngcv3.modifier; import java.util.Comparator; import org.goko.core.gcode.rs274ngcv3.element.IModifier; public class ModifierSorter implements Comparator<IModifier<?>> { /** Type of sorting */ public enum EnumModifierSortType{ ORDER, ORDER_INVERSE } /** Type of sorting used in this sorter */ private EnumModifierSortType sortType; public ModifierSorter(EnumModifierSortType sortType) { super(); this.sortType = sortType; } /** (inheritDoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(IModifier<?> arg0, IModifier<?> arg1) { int result = 0; switch (sortType) { case ORDER: result = compareByOrder(arg0, arg1); break; case ORDER_INVERSE:result = compareByOrderInverse(arg0, arg1); break; } return result; } private int compareByOrder(IModifier<?> arg0, IModifier<?> arg1) { int result = compareByIdGCodeProvider(arg0, arg1); if(result == 0){ result = arg0.getOrder() - arg1.getOrder(); } return result; } private int compareByOrderInverse(IModifier<?> arg0, IModifier<?> arg1) { int result = compareByIdGCodeProvider(arg0, arg1); if(result == 0){ result = arg1.getOrder() - arg0.getOrder(); } return result; } private int compareByIdGCodeProvider(IModifier<?> arg0, IModifier<?> arg1) { return arg0.getIdGCodeProvider().compareTo(arg1.getIdGCodeProvider()); } }