/* * Copyright 2013 Robert von Burg <eitch@eitchnet.ch> */ package li.strolch.model.query.ordering; import java.util.Comparator; import li.strolch.exception.StrolchException; import li.strolch.model.GroupedParameterizedElement; import li.strolch.model.parameter.Parameter; /** * @author Robert von Burg <eitch@eitchnet.ch> */ public class ByParamComparator<T extends GroupedParameterizedElement> implements Comparator<T> { private String bagKey; private String paramKey; private boolean ascending; public ByParamComparator(String bagKey, String paramKey, boolean ascending) { this.bagKey = bagKey; this.paramKey = paramKey; this.ascending = ascending; } @Override public int compare(T o1, T o2) { Parameter<?> param1 = o1.getParameter(bagKey, paramKey); if (param1 == null) throw new StrolchException("Sorting parameter bag=" + bagKey + ", param=" + paramKey + " does not exist on " + o1.getLocator()); Parameter<?> param2 = o2.getParameter(bagKey, paramKey); if (param2 == null) throw new StrolchException("Sorting parameter bag=" + bagKey + ", param=" + paramKey + " does not exist on " + o2.getLocator()); return this.ascending ? param1.compareTo(param2) : param2.compareTo(param1); } }