001package io.ebean.meta;
002
003import java.util.Comparator;
004
005/**
006 * Comparator for timed metrics sorted by name and then count.
007 */
008public class SortMetric {
009
010  public static final Comparator<MetaCountMetric> COUNT_NAME = new CountName();
011
012  public static final Comparator<MetaTimedMetric> NAME = new Name();
013  public static final Comparator<MetaTimedMetric> COUNT = new Count();
014  public static final Comparator<MetaTimedMetric> TOTAL = new Total();
015  public static final Comparator<MetaTimedMetric> MEAN = new Mean();
016  public static final Comparator<MetaTimedMetric> MAX = new Max();
017
018  private static int stringCompare(String name, String name2) {
019    if (name == null) {
020      return name2 == null ? 0 : -1;
021    }
022    if (name2 == null) {
023      return 1;
024    }
025    return name.compareTo(name2);
026  }
027
028  /**
029   * Sort MetaCountMetric's by name.
030   */
031  public static class CountName implements Comparator<MetaCountMetric> {
032
033    @Override
034    public int compare(MetaCountMetric o1, MetaCountMetric o2) {
035      return stringCompare(o1.getName(), o2.getName());
036    }
037  }
038
039  /**
040   * Sort by name.
041   */
042  public static class Name implements Comparator<MetaTimedMetric> {
043
044    @Override
045    public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
046      int i = stringCompare(o1.getName(), o2.getName());
047      return i != 0 ? i : Long.compare(o1.getCount(), o2.getCount());
048    }
049  }
050
051  /**
052   * Sort by count desc.
053   */
054  public static class Count implements Comparator<MetaTimedMetric> {
055
056    @Override
057    public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
058      return Long.compare(o2.getCount(), o1.getCount());
059    }
060  }
061
062  /**
063   * Sort by total time desc.
064   */
065  public static class Total implements Comparator<MetaTimedMetric> {
066
067    @Override
068    public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
069      return Long.compare(o2.getTotal(), o1.getTotal());
070    }
071  }
072
073  /**
074   * Sort by mean desc.
075   */
076  public static class Mean implements Comparator<MetaTimedMetric> {
077
078    @Override
079    public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
080      return Long.compare(o2.getMean(), o1.getMean());
081    }
082  }
083
084  /**
085   * Sort by max desc.
086   */
087  public static class Max implements Comparator<MetaTimedMetric> {
088
089    @Override
090    public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
091      return Long.compare(o2.getMax(), o1.getMax());
092    }
093  }
094}