import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class XmlJsonUtil {
+public final class XmlJsonUtil {
private static final Logger log = LoggerFactory.getLogger(XmlJsonUtil.class);
+ private XmlJsonUtil() {
+ // Preventing instantiation of the same.
+ }
+
public static String getXml(Map<String, String> varmap, String var) {
boolean escape = true;
if (var.startsWith("'")) {
escape = false;
}
+ boolean quotes = true;
+ if (var.startsWith("\"")) {
+ var = var.substring(1);
+ quotes = false;
+ }
+
Object o = createStructure(varmap, var);
- return generateJson(o, escape);
+ return generateJson(o, escape, quotes);
}
private static Object createStructure(Map<String, String> flatmap, String var) {
try {
length = Integer.parseInt(lengthStr);
} catch (Exception e) {
- log.warn("Invalid number for " + var + "_length:" + lengthStr);
+ log.warn("Invalid number for {}_length:{}", var, lengthStr, e);
}
}
if (o instanceof Map) {
StringBuilder ss = new StringBuilder();
Map<String, Object> mm = (Map<String, Object>) o;
- for (String k : mm.keySet()) {
- Object v = mm.get(k);
+ for (Map.Entry<String, Object> entry: mm.entrySet()) {
+ Object v = entry.getValue();
+ String key = entry.getKey();
if (v instanceof String) {
String s = escape ? escapeXml((String) v) : (String) v;
- ss.append(pad(indent)).append('<').append(k).append('>');
+ ss.append(pad(indent)).append('<').append(key).append('>');
ss.append(s);
- ss.append("</").append(k).append('>').append('\n');
+ ss.append("</").append(key).append('>').append('\n');
} else if (v instanceof Map) {
- ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
+ ss.append(pad(indent)).append('<').append(key).append('>').append('\n');
ss.append(generateXml(v, indent + 1, escape));
- ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
+ ss.append(pad(indent)).append("</").append(key).append('>').append('\n');
} else if (v instanceof List) {
List<Object> ll = (List<Object>) v;
for (Object o1 : ll) {
- ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
+ ss.append(pad(indent)).append('<').append(key).append('>').append('\n');
ss.append(generateXml(o1, indent + 1, escape));
- ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
+ ss.append(pad(indent)).append("</").append(key).append('>').append('\n');
}
}
}
return null;
}
- private static String generateJson(Object o, boolean escape) {
+ private static String generateJson(Object o, boolean escape, boolean quotes) {
if (o == null)
return null;
StringBuilder ss = new StringBuilder();
- generateJson(ss, o, 0, false, escape);
+ generateJson(ss, o, 0, false, escape, quotes);
return ss.toString();
}
@SuppressWarnings("unchecked")
- private static void generateJson(StringBuilder ss, Object o, int indent, boolean padFirst, boolean escape) {
+ private static void generateJson(StringBuilder ss, Object o, int indent, boolean padFirst, boolean escape, boolean quotes) {
if (o instanceof String) {
String s = escape ? escapeJson((String) o) : (String) o;
if (padFirst)
ss.append(pad(indent));
- ss.append('"').append(s).append('"');
+ if (quotes) {
+ ss.append('"').append(s).append('"');
+ } else {
+ ss.append(s);
+ }
return;
}
ss.append("{\n");
boolean first = true;
- for (String k : mm.keySet()) {
+ for (Map.Entry<String, Object> entry : mm.entrySet()) {
if (!first)
ss.append(",\n");
first = false;
-
- Object v = mm.get(k);
- ss.append(pad(indent + 1)).append('"').append(k).append("\": ");
- generateJson(ss, v, indent + 1, false, escape);
+ Object v = entry.getValue();
+ String key = entry.getKey();
+ ss.append(pad(indent + 1)).append('"').append(key).append("\": ");
+ generateJson(ss, v, indent + 1, false, escape, true);
}
ss.append("\n");
ss.append(",\n");
first = false;
- generateJson(ss, o1, indent + 1, true, escape);
+ generateJson(ss, o1, indent + 1, true, escape, quotes);
}
ss.append("\n");
return sb.toString();
}
- public static String removeEmptyStructJson(String s) {
+ public static String removeEmptyStructJson(String template, String s) {
int k = 0;
while (k < s.length()) {
boolean curly = true;
if (i5 < 0)
i5 = s.length();
- s = s.substring(0, i4) + s.substring(i5);
- k = 0;
+ /*If template mandates empty construct to be present, those should not be removed.*/
+ if ((template != null) && template.contains(s.substring(i4))) {
+ k = i1 + 1;
+ } else {
+ s = s.substring(0, i4) + s.substring(i5);
+ k = 0;
+ }
} else
k = i1 + 1;
} else
}
private static String pad(int n) {
- String s = "";
+ StringBuilder s = new StringBuilder();
for (int i = 0; i < n; i++)
- s += '\t';
- return s;
+ s.append(Character.toString('\t'));
+ return s.toString();
}
}