io.selendroid.server.model.internal.JsonXmlUtil.java Source code

Java tutorial

Introduction

Here is the source code for io.selendroid.server.model.internal.JsonXmlUtil.java

Source

/*
 * Copyright 2012-2014 eBay Software Foundation and selendroid committers.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package io.selendroid.server.model.internal;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import io.selendroid.server.util.SelendroidLogger;

import org.json.JSONArray;
import org.json.JSONObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class JsonXmlUtil {
    public static Document buildXmlDocument(JSONObject tree) {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        try {
            builder = builderFactory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            SelendroidLogger.error("Failed to create documentBuilder", e);
            throw new RuntimeException(e);
        }
        Document document = builder.newDocument();

        // document.setXMLEncoding("UTF-8");
        Element root = document.createElement("views");
        document.appendChild(root);
        buildXmlNode(tree, root, document);
        return document;
    }

    private static String extractTagName(String clazz) {
        if (clazz.contains(".")) {
            String[] elements = clazz.split("\\.");
            String simpleClassName = elements[elements.length - 1];
            if (simpleClassName.contains("$")) {
                return replaceDollarCharacter(clazz);
            }
            return simpleClassName;
        } else if (clazz.contains("$")) {
            return replaceDollarCharacter(clazz);
        }
        return clazz;
    }

    private static String replaceDollarCharacter(String simpleClassName) {
        String[] subElememts = simpleClassName.split("\\$");
        return subElememts[subElememts.length - 1];
    }

    private static void buildXmlNode(JSONObject from, Element parent, Document document) {
        if (from == null) {
            return;
        }

        Element node = document.createElement(extractTagName(from.optString("type")));
        parent.appendChild(node);

        node.setAttribute("name", from.optString("name"));
        node.setAttribute("label", from.optString("label"));
        node.setAttribute("value", from.optString("value"));
        node.setAttribute("ref", from.optString("ref"));
        node.setAttribute("id", from.optString("id"));
        node.setAttribute("shown", from.optString("shown"));

        JSONObject rect = from.optJSONObject("rect");
        if (rect != null) {
            Element rectNode = document.createElement("rect");
            JSONObject size = rect.optJSONObject("size");
            JSONObject origin = rect.optJSONObject("origin");

            rectNode.setAttribute("x", origin.optString("x"));
            rectNode.setAttribute("y", origin.optString("y"));
            rectNode.setAttribute("height", size.optString("height"));
            rectNode.setAttribute("width", size.optString("width"));

            node.appendChild(rectNode);
        }

        JSONArray array = from.optJSONArray("children");
        if (array != null) {
            for (int i = 0; i < array.length(); i++) {
                JSONObject n = array.optJSONObject(i);
                buildXmlNode(n, node, document);
            }
        }
    }
}