package org.sculptor.framework.accessapi; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.sculptor.framework.accessapi.ColumnStatType.*; import org.sculptor.framework.domain.Property; public class ColumnStatRequest<T> { private static final List<ColumnStatType> ALL; private static final List<ColumnStatType> ALL_EXCEPT_SUM; private static final List<ColumnStatType> STRING_STAT; static { ALL=new ArrayList<ColumnStatType>(); ALL.addAll(Arrays.asList(new ColumnStatType[] {COUNT, MIN, MAX, AVERAGE, SUM})); ALL_EXCEPT_SUM=new ArrayList<ColumnStatType>(); ALL_EXCEPT_SUM.addAll(Arrays.asList(new ColumnStatType[] {COUNT, MIN, MAX, AVERAGE})); STRING_STAT=new ArrayList<ColumnStatType>(); STRING_STAT.addAll(Arrays.asList(new ColumnStatType[] {COUNT, MIN, MAX})); } Property<T> column; List<ColumnStatType> statFlags; public ColumnStatRequest(Property<T> column, List<ColumnStatType> flags) { this(column, flags.toArray(new ColumnStatType[flags.size()])); } public ColumnStatRequest(Property<T> column, ColumnStatType... flags) { this.column=column; if (flags.length == 0) { statFlags=ALL; } else { // expand special values ALL, ALL_EXCEPT_SUM, STRING_STAT statFlags=new ArrayList<ColumnStatType>(); for (ColumnStatType fl : flags) { if (fl.equals(ALL)) { statFlags.addAll(ALL); } else if (fl.equals(ALL_EXCEPT_SUM)) { statFlags.addAll(ALL_EXCEPT_SUM); } else if (fl.equals(STRING_STAT)) { statFlags.addAll(STRING_STAT); } else { statFlags.add(fl); } } } } // getters public List<ColumnStatType> getStatFlags() { return statFlags; } public Property<T> getColumn() { return column; } public boolean isFlag(ColumnStatType isFlag) { for (ColumnStatType setFlag : statFlags) { if (setFlag.equals(isFlag)) { return true; } } return false; } public String toString() { StringBuilder sb=new StringBuilder("ColumnStat for "); sb.append("'").append(column.getName()).append("'").append("[flags="); String sep = ""; for (ColumnStatType flag : statFlags) { sb.append(sep).append(flag.name()); sep=" | "; } return sb.append("]").toString(); } }