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 defines the projected measures. Not mentioned measures in input are removed from
* the cube.
*
* @author benedikt
*
*/
public class ProjectionOp implements LogicalOlapOp {
public List<Node[]> projectedMeasures;
public LogicalOlapOp inputOp;
/**
*
* @param inputOp
* @param projections A list of projected measures using the metadata schema.
*/
public ProjectionOp(LogicalOlapOp inputOp, List<Node[]> projections) {
this.inputOp = inputOp;
this.projectedMeasures = projections;
}
public String toString() {
if (projectedMeasures != null && !projectedMeasures.isEmpty()) {
Map<String, Integer> map = Olap4ldLinkedDataUtil
.getNodeResultFields(projectedMeasures.get(0));
String measuresStringArray[] = new String[projectedMeasures.size() - 1];
// First is the header!
for (int i = 1; i < projectedMeasures.size(); i++) {
measuresStringArray[i - 1] = projectedMeasures.get(i)[map
.get("?MEASURE_UNIQUE_NAME")].toString();
}
return "Projection ("
+ inputOp.toString()
+ ", {"
+ Olap4ldLinkedDataUtil.implodeArray(measuresStringArray,
", ") + "})";
}
return "Projection (" + inputOp.toString() + ", {})";
}
@Override
public void accept(LogicalOlapOperatorQueryPlanVisitor v)
throws QueryException {
v.visit(this);
// visit the projection input op
inputOp.accept(v);
}
}