package jp.aonir.fuzzyxml.util;
import java.util.ArrayList;
import java.util.List;
import jp.aonir.fuzzyxml.FuzzyXMLElement;
import jp.aonir.fuzzyxml.FuzzyXMLNode;
public class NodeSelectUtil {
/**
* @param element
* @param filter
* @return
*/
public static FuzzyXMLNode[] getChildren(FuzzyXMLElement element, NodeFilter filter) {
List<FuzzyXMLNode> result = new ArrayList<FuzzyXMLNode>();
FuzzyXMLNode[] children = element.getChildren();
for (int i = 0; i < children.length; i++) {
if (filter.filter(children[i])) {
result.add(children[i]);
}
}
return result.toArray(new FuzzyXMLNode[result.size()]);
}
/**
* @param element
* @param filter
* @return
*/
public static FuzzyXMLNode[] getNodeByFilter(FuzzyXMLElement element, NodeFilter filter) {
List<FuzzyXMLNode> result = new ArrayList<FuzzyXMLNode>();
if (filter.filter(element)) {
result.add(element);
}
searchNodeByFilter(element, filter, result);
return result.toArray(new FuzzyXMLElement[result.size()]);
}
private static void searchNodeByFilter(FuzzyXMLElement element, NodeFilter filter, List<FuzzyXMLNode> result) {
FuzzyXMLNode[] children = element.getChildren();
for (int i = 0; i < children.length; i++) {
if (filter.filter(children[i])) {
result.add(children[i]);
}
if (children[i] instanceof FuzzyXMLElement) {
searchNodeByFilter((FuzzyXMLElement) children[i], filter, result);
}
}
}
/**
* @param element
* @param id
* @return id
*/
public static FuzzyXMLElement getElementById(FuzzyXMLElement element, String id) {
FuzzyXMLElement[] elements = getElementByAttribute(element, "id", id);
if (elements.length == 0) {
return null;
}
return elements[0];
}
/**
* @param element
* @param name
* @param value
* @return
*/
public static FuzzyXMLElement[] getElementByAttribute(FuzzyXMLElement element, String name, String value) {
List<FuzzyXMLElement> result = new ArrayList<FuzzyXMLElement>();
searchElementByAttribute(element, name, value, result);
return result.toArray(new FuzzyXMLElement[result.size()]);
}
private static void searchElementByAttribute(FuzzyXMLElement element, String name, String value, List<FuzzyXMLElement> result) {
if (value.equals(element.getAttributeValue(name))) {
result.add(element);
}
FuzzyXMLNode[] children = element.getChildren();
for (int i = 0; i < children.length; i++) {
if (children[i] instanceof FuzzyXMLElement) {
searchElementByAttribute(element, name, value, result);
}
}
}
/**
* @param element
* @param name
* @return
*/
public static FuzzyXMLElement[] getElementByTagName(FuzzyXMLElement element, String name) {
List<FuzzyXMLElement> result = new ArrayList<FuzzyXMLElement>();
searchElementByTagName(element, name, result);
return result.toArray(new FuzzyXMLElement[result.size()]);
}
private static void searchElementByTagName(FuzzyXMLElement element, String name, List<FuzzyXMLElement> result) {
if (element.getName().equals(name)) {
result.add(element);
}
FuzzyXMLNode[] children = element.getChildren();
for (int i = 0; i < children.length; i++) {
if (children[i] instanceof FuzzyXMLElement) {
searchElementByTagName(element, name, result);
}
}
}
}