package org.korsakow.services.finder;
import java.sql.ResultSet;
import java.util.Collection;
import javax.xml.xpath.XPathExpressionException;
import org.korsakow.ide.DataRegistry;
import org.korsakow.ide.NodeListResultSet;
import org.korsakow.ide.util.DomUtil;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class KeywordFinder
{
public static NodeList findAll() throws XPathExpressionException{
return DataRegistry.getDocument().getElementsByTagName("Keyword");
}
public static NodeList findAllSnu() throws XPathExpressionException{
return DataRegistry.getHelper().xpathAsNodeList("/korsakow/snus/Snu/keywords/Keyword");
}
public static ResultSet find(String value) throws XPathExpressionException{
return DataRegistry.getHelper().xpathAsResultSet("/korsakow/descendant::*/keywords/Keyword[value=?]", value);
}
public static ResultSet findByObject(long id) throws XPathExpressionException{
ListNodeList list = new ListNodeList();
Element objectElement = DataRegistry.getHelper().findElementByIdTag(id);
if (objectElement == null)
return new NodeListResultSet(list);
Element tableElement = DomUtil.findChildByTagName(objectElement, "keywords");
if (tableElement == null)
return new NodeListResultSet(list);
Collection<Element> children = DomUtil.findChildrenByTagName(tableElement, "Keyword");
list.addAll(children);
return new NodeListResultSet(list);
// return DataRegistry.getHelper().xpathAsResultSet("/korsakow/descendant::*[id=?]/keywords/Keyword", id);
}
public static ResultSet findByObjectRecursive(long parentId) throws XPathExpressionException {
ListNodeList list = new ListNodeList();
Element objectElement = DataRegistry.getHelper().findElementByIdTag(parentId);
NodeList tableList = objectElement.getElementsByTagName("keywords");
int tableLength = tableList.getLength();
for (int j = 0; j < tableLength; ++j)
{
Element tableElement = (Element)tableList.item(j);
Collection<Element> children = DomUtil.findChildrenByTagName(tableElement, "Keyword");
list.addAll(children);
}
return new NodeListResultSet(list);
}
public static ResultSet findByObjectTypeRecursive(String type) throws XPathExpressionException {
ListNodeList list = new ListNodeList();
NodeList objects = DataRegistry.getDocument().getElementsByTagName(type);
int length = objects.getLength();
for (int i = 0; i < length; ++i) {
Element objectElement = (Element)objects.item(i);
NodeList tableList = objectElement.getElementsByTagName("keywords");
int tableLength = tableList.getLength();
for (int j = 0; j < tableLength; ++j)
{
Element tableElement = (Element)tableList.item(j);
Collection<Element> children = DomUtil.findChildrenByTagName(tableElement, "Keyword");
list.addAll(children);
}
}
return new NodeListResultSet(list);
}
public static ResultSet findByObjectType(String type) throws XPathExpressionException{
ListNodeList list = new ListNodeList();
NodeList objects = DataRegistry.getDocument().getElementsByTagName(type);
int length = objects.getLength();
for (int i = 0; i < length; ++i) {
Element objectElement = (Element)objects.item(i);
Element tableElement = DomUtil.findChildByTagName(objectElement, "keywords");
if (tableElement == null)
continue;
Collection<Element> children = DomUtil.findChildrenByTagName(tableElement, "Keyword");
list.addAll(children);
}
return new NodeListResultSet(list);
// return DataRegistry.getHelper().xpathAsResultSet("/korsakow/descendant::*[id=?]/keywords/Keyword", id);
}
}