/** 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); | |
} | |
} | |
} |