NodeCalcPrinter.java
/**
* Copyright (c) 2018, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.timeseries.ast;
import org.apache.commons.lang3.tuple.Pair;
/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public class NodeCalcPrinter implements NodeCalcVisitor<String, Void> {
public static String print(NodeCalc nodeCalc) {
return nodeCalc.accept(new NodeCalcPrinter(), null, 0);
}
@Override
public String visit(IntegerNodeCalc nodeCalc, Void arg) {
return Integer.toString(nodeCalc.getValue());
}
@Override
public String visit(FloatNodeCalc nodeCalc, Void arg) {
return Float.toString(nodeCalc.getValue());
}
@Override
public String visit(DoubleNodeCalc nodeCalc, Void arg) {
return Double.toString(nodeCalc.getValue());
}
@Override
public String visit(BigDecimalNodeCalc nodeCalc, Void arg) {
return nodeCalc.getValue().toString();
}
@Override
public String visit(BinaryOperation nodeCalc, Void arg, String left, String right) {
return "(" + left + " " + nodeCalc.getOperator() + " " + right + ")";
}
@Override
public String visit(UnaryOperation nodeCalc, Void arg, String child) {
return "(" + child + ")." + nodeCalc.getOperator() + "()";
}
@Override
public String visit(MinNodeCalc nodeCalc, Void arg, String child) {
return child + ".min(" + nodeCalc.getMin() + ")";
}
@Override
public String visit(MaxNodeCalc nodeCalc, Void arg, String child) {
return child + ".max(" + nodeCalc.getMax() + ")";
}
@Override
public String visit(CachedNodeCalc nodeCalc, Void arg, String child) {
return child;
}
@Override
public String visit(TimeNodeCalc nodeCalc, Void arg, String child) {
return "(" + child + ").time()";
}
@Override
public String visit(TimeSeriesNameNodeCalc nodeCalc, Void arg) {
return "timeSeries['" + nodeCalc.getTimeSeriesName() + "']";
}
@Override
public String visit(TimeSeriesNumNodeCalc nodeCalc, Void arg) {
return "timeSeries[" + nodeCalc.getTimeSeriesNum() + "]";
}
@Override
public String visit(BinaryMinCalc nodeCalc, Void arg, String left, String right) {
return "min(" + left + ", " + right + ")";
}
@Override
public String visit(BinaryMaxCalc nodeCalc, Void arg, String left, String right) {
return "max(" + left + ", " + right + ")";
}
@Override
public NodeCalc iterate(TimeNodeCalc nodeCalc, Void arg) {
return nodeCalc.getChild();
}
@Override
public NodeCalc iterate(UnaryOperation nodeCalc, Void arg) {
return nodeCalc.getChild();
}
@Override
public NodeCalc iterate(MinNodeCalc nodeCalc, Void arg) {
return nodeCalc.getChild();
}
@Override
public NodeCalc iterate(MaxNodeCalc nodeCalc, Void arg) {
return nodeCalc.getChild();
}
@Override
public NodeCalc iterate(CachedNodeCalc nodeCalc, Void arg) {
return nodeCalc.getChild();
}
@Override
public Pair<NodeCalc, NodeCalc> iterate(AbstractBinaryNodeCalc nodeCalc, Void arg) {
return Pair.of(nodeCalc.getLeft(), nodeCalc.getRight());
}
}