aboutsummaryrefslogtreecommitdiffstats
path: root/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodePrinter.java
diff options
context:
space:
mode:
Diffstat (limited to 'common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodePrinter.java')
-rw-r--r--common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodePrinter.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodePrinter.java b/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodePrinter.java
new file mode 100644
index 0000000000..6b2c7dfbff
--- /dev/null
+++ b/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodePrinter.java
@@ -0,0 +1,93 @@
+package org.openecomp.mso.yangDecoder.transform.impl;
+import org.openecomp.mso.yangDecoder.transform.api.NormalizedNodeVisitor;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+
+
+/**
+ * Created by 10036837 on 16-7-21.
+ */
+public class NormalizedNodePrinter implements NormalizedNodeVisitor {
+ StringBuilder result;
+ private static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ public NormalizedNodePrinter(StringBuilder result) {
+ this.result = result;
+ }
+ private final static String endl=System.getProperty("line.separator");
+ public final static String getEndl(){
+ return endl;
+ }
+ private static String spaces(int n) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < n; i++) {
+ builder.append(' ');
+ }
+ return builder.toString();
+ }
+
+ @Override
+ public void visitNode(int level, String parentPath, NormalizedNode<?, ?> normalizedNode, boolean start) {
+ if(normalizedNode == null)
+ {
+ return;
+ }
+ if(normalizedNode.getNodeType() == null)
+ {
+ return;
+ }
+
+ String localName = normalizedNode.getNodeType().getLocalName();
+ if (normalizedNode instanceof LeafNode || normalizedNode instanceof LeafSetEntryNode) {
+ if(normalizedNode.getValue() instanceof byte[]){
+ result.append(spaces((level-1) * 4) + "<" + localName + ">" + (normalizedNode.getValue() == null ? "" : base64Encode((byte[]) normalizedNode.getValue())) + "</" + localName + ">"+endl);
+ }
+ else {
+ String svalue=normalizedNode.getValue().toString();
+ if(normalizedNode.getValue() instanceof QName){
+ QName qn=(QName)normalizedNode.getValue();
+ svalue= qn.getLocalName();
+ }
+ result.append(spaces((level - 1) * 4) + "<" + localName + ">" + (normalizedNode.getValue() == null ? "" :svalue) + "</" + localName + ">"+endl);
+ }
+ } else {
+ if (start) {
+ if (level == 1) {
+ result.append(spaces((level-1) * 4) + "<" + localName + " xmlns=\"" + normalizedNode.getNodeType().getNamespace() + "\">"+endl);
+ } else {
+ result.append(spaces((level-1) * 4) + "<" + localName + ">"+endl);
+ }
+ } else {
+ result.append(spaces((level-1) * 4) + "</" + localName + ">"+endl);
+ }
+ }
+ }
+ private String base64Encode(byte[] in) {
+ StringBuilder out = new StringBuilder((in.length * 4) / 3);
+ int b;
+ for (int i = 0; i < in.length; i += 3) {
+ b = (in[i] & 0xFC) >> 2;
+ out.append(CODES.charAt(b));
+ b = (in[i] & 0x03) << 4;
+ if (i + 1 < in.length) {
+ b |= (in[i + 1] & 0xF0) >> 4;
+ out.append(CODES.charAt(b));
+ b = (in[i + 1] & 0x0F) << 2;
+ if (i + 2 < in.length) {
+ b |= (in[i + 2] & 0xC0) >> 6;
+ out.append(CODES.charAt(b));
+ b = in[i + 2] & 0x3F;
+ out.append(CODES.charAt(b));
+ } else {
+ out.append(CODES.charAt(b));
+ out.append('=');
+ }
+ } else {
+ out.append(CODES.charAt(b));
+ out.append("==");
+ }
+ }
+ return out.toString();
+ }
+} \ No newline at end of file