package org.korsakow.services.tdg; import javax.xml.xpath.XPathException; import javax.xml.xpath.XPathExpressionException; import org.korsakow.ide.DataRegistry; import org.korsakow.ide.util.DomUtil; import org.w3c.dom.Element; public class RuleTDG { public static final String NODE_NAME = "Rule"; public static int insert(long object_id, long version, String type, String name, long trigger_time) throws XPathException{ return insert(object_id, DataRegistry.getMaxId(), version, type, name, trigger_time); } public static int insert(long object_id, long id, long version, String type, String name, long trigger_time) throws XPathExpressionException{ Element tableElement = createRuleTable(object_id); Element element = DomUtil.findChildByIdTag(tableElement, NODE_NAME, ""+id); if (element != null) return 0; element = DataRegistry.getDocument().createElement(NODE_NAME); tableElement.appendChild(element); // createRuleTable(object_id); // Element element = DataRegistry.getHelper().appendElement(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]/rules", object_id), NODE_NAME); DataRegistry.getHelper().setLong(element, "id", id); DataRegistry.getHelper().setLong(element, "version", version); return update(id, version, type, name, trigger_time); } public static int update(long id, long version, String type, String name, long trigger_time) throws XPathExpressionException{ Element element = DataRegistry.getHelper().findElementByIdTag(id); // Element element = DataRegistry.getHelper().xpathAsElement(XPathHelper.formatQuery("/korsakow/descendant::*/rules/Rule[id=? and version=?]", id, version)); if (element == null) return 0; DataRegistry.getHelper().setLong(element, "id", id); DataRegistry.getHelper().setString(element, "name", name); DataRegistry.getHelper().setLong(element, "version", version+1); DataRegistry.getHelper().setString(element, "type", type); DataRegistry.getHelper().setLong(element, "triggerTime", trigger_time); return 1; } public static int delete(long id, long version) throws XPathExpressionException { Element element = DataRegistry.getHelper().findElementByIdTag(id); if (DomUtil.getLong(element, "version") != version) return 0; element.getParentNode().removeChild(element); return 1; // NodeList list = DataRegistry.getHelper().removeNodes(XPathHelper.formatQuery("/korsakow/descendant::*/rules/Rule[id=? and version=?]", id, version)); // return list.getLength(); } public static int deleteByResource(long resource_id) throws XPathExpressionException { Element objectElement = DataRegistry.getHelper().findElementByIdTag(resource_id); if (objectElement == null) return 0; Element tableElement = DomUtil.findChildByTagName(objectElement, "rules"); if (tableElement == null) return 0; int count = tableElement.getChildNodes().getLength(); while (tableElement.hasChildNodes()) tableElement.removeChild(tableElement.getFirstChild()); return count; // NodeList list = DataRegistry.getHelper().removeNodes(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]/rules", resource_id)); // return list.getLength(); } public static Element createRuleTable(long object_id) throws XPathExpressionException { Element objectElement = DataRegistry.getHelper().findElementByIdTag(object_id); Element tableElement = DomUtil.findChildByTagName(objectElement, "rules"); if (tableElement == null) { tableElement = DataRegistry.getHelper().appendUniqueElement(objectElement, "rules"); } return tableElement; // if (DataRegistry.getHelper().xpathAsElement(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]/rules", object_id)) == null) { // DataRegistry.getHelper().appendElement(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]", object_id), "rules"); // } } public static void dropTable (long object_id) throws XPathExpressionException{ Element objectElement = DataRegistry.getHelper().findElementByIdTag(object_id); Element tableElement = DomUtil.findChildByTagName(objectElement, "rules"); if (tableElement != null) tableElement.getParentNode().removeChild(tableElement); // DataRegistry.getHelper().removeNodes(XPathHelper.formatQuery("/korsakow/descendant::*[id=?]/rules", object_id)); } }