package org.olap4j.driver.olap4ld.linkeddata; import java.util.List; import java.util.Map; import org.olap4j.driver.olap4ld.helper.Olap4ldLinkedDataUtil; import org.semanticweb.yars.nx.Node; /** * This operator removes dimensions from a Cube, a result of a lower * LogicalOlapOp. * * @author benedikt * */ public class SliceOp implements LogicalOlapOp { public LogicalOlapOp inputOp; public List<Node[]> slicedDimensions; public SliceOp(LogicalOlapOp inputOp, List<Node[]> slicedDimensions) { this.inputOp = inputOp; this.slicedDimensions = slicedDimensions; } public String toString() { if (slicedDimensions != null && !slicedDimensions.isEmpty()) { String dimensionsStringArray[] = new String[slicedDimensions.size() - 1]; // First is header for (int i = 1; i <= dimensionsStringArray.length; i++) { Map<String, Integer> map = Olap4ldLinkedDataUtil .getNodeResultFields(slicedDimensions.get(0)); dimensionsStringArray[i - 1] = slicedDimensions.get(i)[map .get("?DIMENSION_UNIQUE_NAME")].toString(); } return "Slice (" + inputOp.toString() + ", {" + Olap4ldLinkedDataUtil.implodeArray(dimensionsStringArray, ", ") + "})"; } return "Slice (" + inputOp.toString() + ", {})"; } @Override public void accept(LogicalOlapOperatorQueryPlanVisitor v) throws QueryException { v.visit(this); // Do not use visitor but depth-first now. // if (v instanceof Olap2SparqlSesameDerivedDatasetVisitor) { // // Nothing more to visit; // } else { // // visit the projection input op // inputOp.accept(v); // } inputOp.accept(v); } }