public static Hierarchy getHierarchy(Cube cube, ModelConfig modelConfig, String dimensionName) { List<Dimension> dimensions = cube.getDimensions(); Dimension result = null; for (java.util.Iterator<Dimension> iterator = dimensions.iterator(); iterator.hasNext(); ) { Dimension dimension = iterator.next(); if (dimension.getUniqueName().equals("[" + dimensionName + "]")) { result = dimension; } } if (result == null) { logger.error("Could not find dimension"); throw new SpagoBIEngineRuntimeException("Could not find dimension"); } logger.debug("Found dimension " + result.getUniqueName()); // get Hierarchy Used by dimension NamedList<Hierarchy> hierarchies = result.getHierarchies(); Hierarchy hierarchy = null; if (hierarchies == null || hierarchies.size() == 0) { logger.error("Could not find hierarchies for dimension"); throw new SpagoBIEngineRuntimeException("Could not find hierarchies for dimension"); } else if (hierarchies.size() == 1) { hierarchy = hierarchies.get(0); } else { String hierarchyUsed = modelConfig.getDimensionHierarchyMap().get(dimensionName); hierarchy = hierarchies.get(hierarchyUsed); } return hierarchy; }
public SaikuFilter getFilter( String queryName, String filtername, String dimensionName, String hierarchyName, String levelName) { IQuery query = getIQuery(queryName); CellSet cs = query.getCellset(); List<SimpleCubeElement> members = new ArrayList<SimpleCubeElement>(); SimpleCubeElement dimension = null; SimpleCubeElement hierarchy = null; Set<MetadataElement> mset = new HashSet<MetadataElement>(); if (cs != null) { List<CellSetAxis> axes = new ArrayList<CellSetAxis>(); axes.addAll(cs.getAxes()); axes.add(cs.getFilterAxis()); for (CellSetAxis axis : axes) { int posIndex = 0; for (Hierarchy h : axis.getAxisMetaData().getHierarchies()) { if (h.getName().equals(hierarchyName)) { if (hierarchy == null) { hierarchy = new SimpleCubeElement(h.getName(), h.getUniqueName(), h.getCaption()); Dimension d = h.getDimension(); dimension = new SimpleCubeElement(d.getName(), d.getUniqueName(), d.getCaption()); } if (h.getLevels().size() == 1) { break; } for (Position pos : axis.getPositions()) { Member m = pos.getMembers().get(posIndex); if (m.getLevel().getName().equals(levelName)) { mset.add(m); } } break; } posIndex++; } } if (mset.size() == 0) { QueryDimension qd = query.getDimension(dimensionName); if (qd != null && qd.getAxis().getLocation() != null) { for (Selection sel : qd.getInclusions()) { if ((sel.getRootElement() instanceof Member)) { Member m = ((Member) sel.getRootElement()); if (m.getLevel().getName().equals(levelName)) { mset.add(m); } } } } } members = ObjectUtil.convert2Simple(mset); Collections.sort(members, new SaikuUniqueNameComparator()); log.debug("Create Filters: Found members in the result or query: " + members.size()); } return new SaikuFilter(filtername, null, dimension, hierarchy, members); }