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