package org.korsakow.services.tdg; import javax.xml.xpath.XPathExpressionException; import org.korsakow.ide.DataRegistry; import org.korsakow.ide.XPathHelper; import org.korsakow.ide.util.DomUtil; import org.w3c.dom.Element; /** * Keywords are identified by their value */ public class KeywordTDG { public static final String NODE_NAME = "Keyword"; public static int replace(long object_id, String keyword, float weight) throws XPathExpressionException{ Element tableElement = createKeywordTable(object_id); Element element = XPathHelper.xpathAsElement(tableElement, XPathHelper.formatQuery("Keyword[value=?]", keyword)); if (element == null) { element = DataRegistry.getDocument().createElement(NODE_NAME); tableElement.appendChild(element); } // Element element = DataRegistry.getHelper().xpathAsElement(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]/keywords/Keyword[value=?]", object_id, keyword)); // if (element == null) { // element = DataRegistry.getHelper().appendElement(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]/keywords", object_id), NODE_NAME); // } DataRegistry.getHelper().setString(element, "value", keyword); DataRegistry.getHelper().setFloat(element, "weight", weight); return 1; } public static int insert(long object_id, String keyword, float weight) throws XPathExpressionException{ return replace(object_id, keyword, weight); } public static int update(long object_id, String keyword, float weight) throws XPathExpressionException{ return replace(object_id, keyword, weight); } public static int delete(long object_id, String keyword) throws XPathExpressionException { Element objectElement = DataRegistry.getHelper().findElementByIdTag(object_id); if (objectElement == null) return 0; Element tableElement = DomUtil.findChildByTagName(objectElement, "keywords"); if (tableElement == null) return 0; Element element = XPathHelper.xpathAsElement(tableElement, XPathHelper.formatQuery("Keyword[value=?]", keyword)); if (element != null) element.getParentNode().removeChild(element); return 1; // NodeList list = DataRegistry.getHelper().removeNodes(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]/keywords/Keyword[value=?]", object_id, keyword)); // return list.getLength(); } public static int deleteByObject(long object_id) throws XPathExpressionException { Element objectElement = DataRegistry.getHelper().findElementByIdTag(object_id); if (objectElement == null) return 0; Element tableElement = DomUtil.findChildByTagName(objectElement, "keywords"); if (tableElement == null) return 0; int count = tableElement.getChildNodes().getLength(); while (tableElement.hasChildNodes()) tableElement.removeChild(tableElement.getFirstChild()); return count; // NodeList list = DataRegistry.getHelper().removeNodes("/korsakow/descendant::*[id=?]/keywords/Keyword", object_id); // return list.getLength(); } public static Element createKeywordTable(long object_id) throws XPathExpressionException { Element objectElement = DataRegistry.getHelper().findElementByIdTag(object_id); Element tableElement = DomUtil.findChildByTagName(objectElement, "keywords"); if (tableElement == null) { tableElement = DataRegistry.getHelper().appendUniqueElement(objectElement, "keywords"); } return tableElement; // if (DataRegistry.getHelper().xpathAsElement("/korsakow/descendant::*[id=?]/keywords", object_id) == null) { // DataRegistry.getHelper().appendElement(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]", object_id), "keywords"); // } } public static void dropTable (long object_id) throws XPathExpressionException{ Element objectElement = DataRegistry.getHelper().findElementByIdTag(object_id); Element tableElement = DomUtil.findChildByTagName(objectElement, "keywords"); if (tableElement != null) tableElement.getParentNode().removeChild(tableElement); // DataRegistry.getHelper().removeNodes("/korsakow/descendant::*[id=?]/keywords", object_id); } }