package rocks.inspectit.shared.cs.communication.comparator; import java.util.Comparator; import rocks.inspectit.shared.all.cmr.service.ICachedDataService; import rocks.inspectit.shared.all.communication.DefaultData; /** * Result comparator implements the {@link Comparator} interface and serves to keep track on sorting * type (ascending/descending) and to provide {@link CachedDataService} to the delegating * comparator. * * @author Ivan Senic * * @param <T> * Type that can be sorted with this comparator. */ public class ResultComparator<T extends DefaultData> implements Comparator<T> { /** * Delegating comparator. */ private IDataComparator<? super T> comparator; /** * {@link CachedDataService}. */ private ICachedDataService cachedDataService; /** * True if ascending sorting is on, false if descending sorting is on. */ private boolean ascending = true; /** * No-arg constructor. */ public ResultComparator() { } /** * Constructor that sets only delegating constructor. * * @param comparator * Delegating comparator. */ public ResultComparator(IDataComparator<? super T> comparator) { this(comparator, null, true); } /** * Constructor that sets only comparator and ascending. * * @param comparator * Delegating comparator. * @param ascending * True if ascending sorting is on, false if descending sorting is on. */ public ResultComparator(IDataComparator<? super T> comparator, boolean ascending) { this(comparator, null, ascending); } /** * Secondary constructor. Initializes the {@link #ascending} with <code>true</code>. * * @param comparator * Delegating comparator. * @param cachedDataService * {@link CachedDataService}. */ public ResultComparator(IDataComparator<? super T> comparator, ICachedDataService cachedDataService) { this(comparator, cachedDataService, true); } /** * Construct that allows everything to be set. * * @param comparator * Delegating comparator. * @param cachedDataService * {@link CachedDataService}. * @param ascending * True if ascending sorting is on, false if descending sorting is on. * */ public ResultComparator(IDataComparator<? super T> comparator, ICachedDataService cachedDataService, boolean ascending) { this.comparator = comparator; this.ascending = ascending; this.cachedDataService = cachedDataService; } /** * {@inheritDoc} */ @Override public int compare(T o1, T o2) { int res = comparator.compare(o1, o2, cachedDataService); if (!ascending && (res != 0)) { return res * -1; } else { return res; } } /** * Gets {@link #cachedDataService}. * * @return {@link #cachedDataService} */ public ICachedDataService getCachedDataService() { return cachedDataService; } /** * Sets {@link #cachedDataService}. * * @param cachedDataService * New value for {@link #cachedDataService} */ public void setCachedDataService(ICachedDataService cachedDataService) { this.cachedDataService = cachedDataService; } /** * Gets {@link #comparator}. * * @return {@link #comparator} */ public IDataComparator<? super T> getComparator() { return comparator; } /** * Sets {@link #comparator}. * * @param comparator * New value for {@link #comparator} */ public void setComparator(IDataComparator<? super T> comparator) { this.comparator = comparator; } /** * Gets {@link #ascending}. * * @return {@link #ascending} */ public boolean isAscending() { return ascending; } /** * Sets {@link #ascending}. * * @param ascending * New value for {@link #ascending} */ public void setAscending(boolean ascending) { this.ascending = ascending; } }