/*******************************************************************************
* 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;
}
}