blob: ae9420e14e56bd5bfbd1acdc2d9fcceb0138968e [file] [log] [blame]
/** Copyright (C) Conformiq Software Oy, Ltd.
* All rights reserved.
*
* Created Wed Aug 27 16:48:45 2008.
*
* @file
*
* @author Tommi Vainikainen
*
*
*/
package com.conformiq.adaptation.ttcn;
import com.conformiq.qtronic2.QMLArray;
import com.conformiq.qtronic2.QMLBoolean;
import com.conformiq.qtronic2.QMLNumber;
import com.conformiq.qtronic2.QMLOptional;
import com.conformiq.qtronic2.QMLRecord;
import com.conformiq.qtronic2.QMLRecordField;
import com.conformiq.qtronic2.QMLString;
import com.conformiq.qtronic2.QMLValue;
import com.conformiq.qtronic2.QMLValueVisitor;
import java.math.BigDecimal;
public class TemplateDumper implements QMLValueVisitor {
private PrettyPrinter out;
public TemplateDumper(PrettyPrinter out) {
this.out = out;
}
@Override
public void visit(QMLRecord r) {
if (r == null) {
out.print("{ /* null record */ }");
return;
}
out.print("{");
out.endl();
out.print(" ");
out.block();
for (int i = 0; i < r.getNumberOfFields(); i++) {
if (i > 0) {
out.print(",");
out.endl();
}
QMLRecordField f = r.getField(i);
out.print(TTCNScripter.makeValidTTCN3Identifier(f.getName()));
out.print(" := ");
QMLValue v = f.getValue();
if (v != null)
v.accept(this);
else
out.print("{ /* NULL */ }");
}
out.endl();
out.resume();
out.print("}");
}
@Override
public void visit(QMLString x) {
assert (x != null);
String v = x.getValue();
out.print("\"");
for (int i = 0; i < v.length(); i++) {
switch (v.charAt(i)) {
case '\n':
out.print("\\n");
break;
case '\r':
out.print("\\r");
break;
case '\t':
out.print("\\t");
break;
case '\"':
case '\\':
out.print("\\");
// PASS THROUGH
default:
out.print(v.charAt(i));
break;
}
}
out.print("\"");
}
@Override
public void visit(QMLBoolean x) {
assert (x != null);
out.print((x.getValue() ? "true" : "false"));
}
@Override
public void visit(QMLNumber x) {
assert (x != null);
if (x.isBigInteger())
{
out.print(x.getBigInteger());
}
else
{
BigDecimal num = new BigDecimal(x.getNumerator()).setScale(20);
BigDecimal den = new BigDecimal(x.getDenominator());
out.print(num.divide(den, BigDecimal.ROUND_UP));
}
}
@Override
public void visit(QMLArray array) {
if (array == null) {
out.print("{ /* null */ }");
return;
}
out.print("{");
out.endl();
out.print(" ");
out.block();
for (int i = 0; i < array.getNumberOfElements(); i++) {
if (i > 0) {
out.print(",");
out.endl();
}
QMLValue v = array.getValue(i);
if (v != null)
v.accept(this);
else
out.print("{ /* null */ }");
}
out.endl();
out.resume();
out.print("}");
}
@Override
public void visit(QMLOptional o) {
QMLValue v = o.getValue();
if (v == null) {
out.print("omit");
} else {
v.accept(this);
}
}
}