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 rolls up dimensions of a Cube (the former LogicalOlapOp) to
* for each hierarchy a specific level.
*
*
* @author benedikt
*
*/
public class RollupOp implements LogicalOlapOp {
public LogicalOlapOp inputOp;
public List<Node[]> rollupslevels;
public List<Node[]> rollupshierarchies;
public RollupOp(LogicalOlapOp slice, List<Node[]> rollupshierarchies,
List<Node[]> rollupslevels) {
this.inputOp = slice;
this.rollupslevels = rollupslevels;
this.rollupshierarchies = rollupshierarchies;
}
public String toString() {
if (rollupslevels != null && !rollupslevels.isEmpty()) {
String levelsStringArray[] = new String[rollupslevels.size() - 1];
// First is header
for (int i = 1; i < rollupslevels.size(); i++) {
Map<String, Integer> map = Olap4ldLinkedDataUtil
.getNodeResultFields(rollupslevels.get(0));
Map<String, Integer> signaturemap = Olap4ldLinkedDataUtil
.getNodeResultFields(rollupshierarchies.get(0));
levelsStringArray[i - 1] = rollupshierarchies.get(i)[signaturemap
.get("?HIERARCHY_UNIQUE_NAME")].toString()
+ " : "
+ rollupslevels.get(i)[map.get("?LEVEL_UNIQUE_NAME")]
.toString();
}
return "Rollup ("
+ inputOp.toString()
+ ", {"
+ Olap4ldLinkedDataUtil.implodeArray(levelsStringArray,
", ") + "})";
}
return "Rollup (" + inputOp.toString() + ", {})";
}
@Override
public void accept(LogicalOlapOperatorQueryPlanVisitor v)
throws QueryException {
v.visit(this);
// visit the projection input op
inputOp.accept(v);
}
}