2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Copyright (C) 2017 Amdocs
8 * =============================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 * ============LICENSE_END=========================================================
24 package org.onap.appc.ccadaptor;
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.List;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 public class XmlUtil {
35 private static final Logger log = LoggerFactory.getLogger(XmlUtil.class);
37 public static String getXml(Map<String, String> varmap, String var) {
38 Object o = createStructure(varmap, var);
39 return generateXml(o, 0);
42 private static Object createStructure(Map<String, String> flatmap, String var) {
43 if (flatmap.containsKey(var)) {
44 return flatmap.get(var);
47 Map<String, Object> mm = new HashMap<>();
48 for (String k : flatmap.keySet()) {
49 if (k.startsWith(var + ".")) {
50 int i1 = k.indexOf('.', var.length() + 1);
51 int i2 = k.indexOf('[', var.length() + 1);
53 if (i1 > 0 && i1 < i3) {
56 if (i2 > 0 && i2 < i3) {
59 String k1 = k.substring(var.length() + 1, i3);
60 String var1 = k.substring(0, i3);
61 if (!mm.containsKey(k1)) {
62 Object str = createStructure(flatmap, var1);
63 if (str != null && (!(str instanceof String) || ((String) str).trim().length() > 0)) {
73 boolean arrayFound = false;
74 for (String k : flatmap.keySet()) {
75 if (k.startsWith(var + "[")) {
82 List<Object> ll = new ArrayList<>();
84 int length = Integer.MAX_VALUE;
85 String lengthStr = flatmap.get(var + "_length");
86 if (lengthStr != null) {
88 length = Integer.parseInt(lengthStr);
89 } catch (Exception e) {
90 log.warn("Invalid number for " + var + "_length:" + lengthStr);
94 for (int i = 0; i < length; i++) {
95 Object v = createStructure(flatmap, var + '[' + i + ']');
110 @SuppressWarnings("unchecked")
111 private static String generateXml(Object o, int indent) {
116 if (o instanceof String) {
120 if (o instanceof Map) {
121 StringBuilder ss = new StringBuilder();
122 Map<String, Object> mm = (Map<String, Object>) o;
123 for (String k : mm.keySet()) {
124 Object v = mm.get(k);
125 if (v instanceof String) {
126 ss.append(pad(indent)).append('<').append(k).append('>');
128 ss.append("</").append(k).append('>').append('\n');
129 } else if (v instanceof Map) {
130 ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
131 ss.append(generateXml(v, indent + 1));
132 ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
133 } else if (v instanceof List) {
134 List<Object> ll = (List<Object>) v;
135 for (Object o1 : ll) {
136 ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
137 ss.append(generateXml(o1, indent + 1));
138 ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
142 return ss.toString();
148 private static String pad(int n) {
150 for (int i = 0; i < n; i++) {