org.bigtester.ate.model.page.atewebdriver.ReadXmlFile.java Source code

Java tutorial

Introduction

Here is the source code for org.bigtester.ate.model.page.atewebdriver.ReadXmlFile.java

Source

/*******************************************************************************
 * ATE, Automation Test Engine
 *
 * Copyright 2015, Montreal PROT, or individual contributors as
 * indicated by the @author tags or express copyright attribution
 * statements applied by the authors.  All third-party contributions are
 * distributed under license by Montreal PROT.
 *
 * 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 org.bigtester.ate.model.page.atewebdriver;

import java.io.File;
import java.io.PrintStream;
import java.util.Iterator;

import org.bigtester.ate.GlobalUtils;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.eclipse.jdt.annotation.Nullable;

// TODO: Auto-generated Javadoc
/**
 * This class ReadXmlFile defines ....
 * @author Jun Yang
 *
 */
public final class ReadXmlFile {

    /** The Constant REPOFILENAME. */
    @Nullable
    /** The Constant REPOFILENAME. */
    public static final String REPOFILENAME = "browserdriver/repo.xml";
    /** The Constant REPOFILENAME. */
    public static final String VERSION = "version";

    /** The Constant ONE. */
    public final static int ONE = 1;

    private ReadXmlFile() {
    };

    /**
    * {@inheritDoc}
    */
    public static @Nullable String parserXml(String... args) {
        SAXReader saxReader = new SAXReader();
        File inputXml = new File(args[0]);
        Element nextLevelNode;
        String nodeValue = null; //NOPMD

        try {
            Document document = saxReader.read(inputXml);
            Element root = document.getRootElement();
            int argsNum = 1;
            Element currentLevelNode = root;
            while (argsNum < args.length) {
                if (currentLevelNode == null)
                    throw GlobalUtils.createNotInitializedException("repo.xml is not correct,cannot find node");
                else {
                    nodeValue = args[argsNum];
                    if (argsNum == ONE)
                        nextLevelNode = getNodeByName(currentLevelNode, nodeValue);
                    else
                        nextLevelNode = getNodeByValue(currentLevelNode, nodeValue);
                    argsNum++;
                    currentLevelNode = nextLevelNode;
                }
            }
            if (null == currentLevelNode)
                throw GlobalUtils.createNotInitializedException("repo.xml is not correct ");
            else
                nodeValue = getNodeValue(currentLevelNode);
        } catch (DocumentException e) {
            PrintStream out = System.out;
            out.println(e.getMessage());
        }
        return nodeValue;
    }

    /**
     * Gets the node by value.
     *
     * @param fatherNode the father node
     * @param value the value
     * @return the node by value
     */
    public static @Nullable Element getNodeByValue(Element fatherNode, @Nullable String value) {
        Element node = null; //NOPMD
        String nodeValue;

        for (Iterator<?> i = fatherNode.elementIterator(); i.hasNext();) {
            node = (Element) i.next();
            if (null == node)
                throw GlobalUtils
                        .createNotInitializedException("repo.xml is not correct, cannot get node by value ");
            else
                nodeValue = getNodeValue(node);
            if (nodeValue.equals(value))
                break;
        }
        return node;
    }

    /**
     * Gets the node by name.
     *
     * @param fatherNode the father node
     * @param value the value
     * @return the node by name
     */
    public static @Nullable Element getNodeByName(Element fatherNode, @Nullable String value) {
        Element node = null; //NOPMD

        for (Iterator<?> i = fatherNode.elementIterator(); i.hasNext();) {
            node = (Element) i.next();
            if (node == null)
                throw GlobalUtils.createNotInitializedException("repo.xml is not correct, cannot get node by name");
            else if (node.getName().equals(value))
                break;
        }
        return node;
    }

    /**
     * Gets the node value.
     *
     * @param node the node
     * @return the node value
     */
    public static String getNodeValue(Element node) {

        Attribute attri = node.attribute("id");
        String nodeValue = attri.getValue();
        if (null == nodeValue)
            throw GlobalUtils.createNotInitializedException("repo.xml is not correct,cannot get node value");
        return nodeValue;
    }
}