/** * {@inheritDoc} */ @Override public String toString() { return "XQueryTrigger [module=" + module + ", function=" + function + ", collection=" + getCollection() + ", enabled=" + isEnabled() + ", actions=" + getActions().toString() + "]"; }
@Override public void write(ObjectDataOutput out, XQueryTrigger xTrigger) throws IOException { super.writeTrigger(out, xTrigger); out.writeUTF(xTrigger.getModule()); out.writeUTF(xTrigger.getFunction()); }
@Override @SuppressWarnings("unchecked") public XQueryTrigger read(ObjectDataInput in) throws IOException { Object[] fields = super.readTrigger(in); String module = in.readUTF(); String function = in.readUTF(); XQueryTrigger xTrigger = new XQueryTrigger((int) fields[0], (Date) fields[1], (String) fields[2], module, function, (Boolean) fields[3], (Boolean) fields[4], (String) fields[5]); xTrigger.setActions((Collection<TriggerAction>) fields[6]); return xTrigger; }
@Override public String compileTrigger(Module module, XQueryTrigger trigger) throws BagriException { long stamp = System.currentTimeMillis(); logger.trace("compileTrigger.enter; got trigger: {}", trigger); String query = "import module namespace " + module.getPrefix() + "=\"" + module.getNamespace() + "\" at \"" + module.getName() + "\";\n" + "declare variable $doc external;\n\n" + trigger.getFunction() + "($doc)\n"; StaticQueryContext sqc = prepareStaticContext(module.getBody()); logger.trace("getModuleExpression; compiling query: {}", query); try { sqc.compileQuery(query); } catch (XPathException ex) { String error = getError(ex, sqc); //logger.error("compileQuery.error", ex); logger.info("compileTrigger.error; message: {}", error); throw new BagriException(error, BagriException.ecQueryCompile); } stamp = System.currentTimeMillis() - stamp; logger.trace("compileTrigger.exit; time taken: {}", stamp); return query; }
TriggerDefinition addTrigger(boolean java, String container, String implementation, boolean synchronous, String collection, java.util.Collection<TriggerAction> actions) { TriggerDefinition trigger; if (java) { trigger = new JavaTrigger(1, new Date(), getCurrentUser(), container, implementation, synchronous, true, collection); } else { trigger = new XQueryTrigger(1, new Date(), getCurrentUser(), container, implementation, synchronous, true, collection); } trigger.setActions(actions); Schema schema = getEntity(); if (schema.addTrigger(trigger)) { // store schema! flushEntity(schema); return trigger; } return null; }
private Trigger createXQueryTrigger(XQueryTrigger trigger) { Module module = getModule(trigger.getModule()); if (module == null) { logger.info("createXQueryTrigger; not module found for name: {}, trigger registration failed", trigger.getModule()); return null; } if (!module.isEnabled()) { logger.info("createXQueryTrigger; module {} disabled, trigger registration failed", trigger.getModule()); return null; } if (!xqComp.getModuleState(module)) { logger.info("createXQueryTrigger; module {} is invalid, trigger registration failed", trigger.getModule()); return null; } try { String query = xqComp.compileTrigger(module, trigger); // TODO: implement tx-scope XQuery trigger too.. return new XQueryTriggerImpl(query); } catch (BagriException ex) { logger.info("createXQueryTrigger; trigger function {} is invalid, trigger registration failed", trigger.getFunction()); } return null; }