package com.insightfullogic.honest_profiler.core.aggregation.result;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_SELF_COUNT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_SELF_COUNT_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_SELF_TIME;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_SELF_TIME_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_TOTAL_COUNT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_TOTAL_COUNT_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_TOTAL_TIME;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.BASE_TOTAL_TIME_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.KEY;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_SELF_COUNT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_SELF_COUNT_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_SELF_TIME;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_SELF_TIME_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_TOTAL_COUNT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_TOTAL_COUNT_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_TOTAL_TIME;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.NEW_TOTAL_TIME_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_COUNT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_COUNT_DIFF;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_COUNT_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_COUNT_PCT_DIFF;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_TIME;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_TIME_DIFF;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_TIME_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.SELF_TIME_PCT_DIFF;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_COUNT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_COUNT_DIFF;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_COUNT_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_COUNT_PCT_DIFF;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_TIME;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_TIME_DIFF;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_TIME_PCT;
import static com.insightfullogic.honest_profiler.core.aggregation.filter.Target.TOTAL_TIME_PCT_DIFF;
import java.util.Arrays;
import java.util.List;
import com.insightfullogic.honest_profiler.core.aggregation.filter.Target;
import com.insightfullogic.honest_profiler.core.aggregation.result.diff.DiffEntry;
import com.insightfullogic.honest_profiler.core.aggregation.result.diff.DiffNode;
import com.insightfullogic.honest_profiler.core.aggregation.result.straight.Entry;
import com.insightfullogic.honest_profiler.core.aggregation.result.straight.Node;
/**
* ItemType enumerates the different types of aggregation data items, and associates them with the {@link Target}s which
* are applicable to items of this type.
* <p>
* {@link Node} and {@link DiffNode} are not explicitly enumerated, since they subclass {@link Entry} and
* {@link DiffEntry} respectively, and have the same {@link Target}s.
*/
public enum ItemType
{
ENTRY(KEY, SELF_TIME, TOTAL_TIME, SELF_COUNT, TOTAL_COUNT, SELF_TIME_PCT, TOTAL_TIME_PCT,
SELF_COUNT_PCT, TOTAL_COUNT_PCT),
DIFFENTRY(KEY, BASE_SELF_TIME, BASE_TOTAL_TIME, BASE_SELF_COUNT, BASE_TOTAL_COUNT,
BASE_SELF_TIME_PCT, BASE_TOTAL_TIME_PCT, BASE_SELF_COUNT_PCT, BASE_TOTAL_COUNT_PCT,
NEW_SELF_TIME, NEW_TOTAL_TIME, NEW_SELF_COUNT, NEW_TOTAL_COUNT, NEW_SELF_TIME_PCT,
NEW_TOTAL_TIME_PCT, NEW_SELF_COUNT_PCT, NEW_TOTAL_COUNT_PCT, SELF_TIME_DIFF,
TOTAL_TIME_DIFF, SELF_COUNT_DIFF, TOTAL_COUNT_DIFF, SELF_TIME_PCT_DIFF, TOTAL_TIME_PCT_DIFF,
SELF_COUNT_PCT_DIFF, TOTAL_COUNT_PCT_DIFF),
FLAMEGRAPH();
// Instance Properties
private List<Target> allowedTargets;
// Instance Constructors
/**
* Constructor which associates {@link Target}s with the ItemType.
* <p>
* @param allowedTargets the {@link Target}s which are applicable for data items of this type
*/
private ItemType(Target... allowedTargets)
{
this.allowedTargets = Arrays.asList(allowedTargets);
}
// Instance Accessors
/**
* Returns the {@link Target}s which are applicable for data items of this type.
* <p>
* @return the {@link Target}s which are applicable for data items of this type
*/
public List<Target> getAllowedTargets()
{
return allowedTargets;
}
}