use of mondrian.spi.SegmentColumn in project mondrian by pentaho.
the class CacheControlImpl method findAxisValues.
public static SegmentColumn[] findAxisValues(CellRegion region) {
final List<SegmentColumn> list = new ArrayList<SegmentColumn>();
final CellRegionVisitor visitor = new CellRegionVisitorImpl() {
public void visit(MemberCellRegion region) {
if (region.dimension.isMeasures()) {
return;
}
final Map<String, Set<Comparable>> levels = new HashMap<String, Set<Comparable>>();
for (Member member : region.memberList) {
while (true) {
if (member == null || member.isAll()) {
break;
}
final String ccName = ((RolapLevel) member.getLevel()).getKeyExp().getGenericExpression();
if (!levels.containsKey(ccName)) {
levels.put(ccName, new HashSet<Comparable>());
}
levels.get(ccName).add((Comparable) ((RolapMember) member).getKey());
member = member.getParentMember();
}
}
for (Entry<String, Set<Comparable>> entry : levels.entrySet()) {
// Now sort and convert to an ArraySortedSet.
final Comparable[] keys = entry.getValue().toArray(new Comparable[entry.getValue().size()]);
if (keys.length == 1 && keys[0].equals(true)) {
list.add(new SegmentColumn(entry.getKey(), -1, null));
} else {
Arrays.sort(keys, Util.SqlNullSafeComparator.instance);
// noinspection unchecked
list.add(new SegmentColumn(entry.getKey(), -1, new ArraySortedSet(keys)));
}
}
}
public void visit(MemberRangeCellRegion region) {
// We translate all ranges into wildcards.
// FIXME Optimize this by resolving the list of members
// into an actual list of values for ConstrainedColumn
list.add(new SegmentColumn(region.level.getKeyExp().getGenericExpression(), -1, null));
}
};
((CellRegionImpl) region).accept(visitor);
return list.toArray(new SegmentColumn[list.size()]);
}
Aggregations