@Override public void write(ObjectDataOutput out, Module xModule) throws IOException { super.writeEntity(out, xModule); out.writeUTF(xModule.getName()); out.writeUTF(xModule.getFileName()); out.writeUTF(xModule.getDescription()); out.writeUTF(xModule.getPrefix()); out.writeUTF(xModule.getNamespace()); out.writeUTF(xModule.getBody()); out.writeBoolean(xModule.isEnabled()); }
/** * {@inheritDoc} */ @Override public String toString() { return "Module [name=" + name + ", version=" + getVersion() + ", fileName=" + fileName + ", description=" + description + ", created at=" + getCreatedAt() + ", by=" + getCreatedBy() + ", prefix=" + prefix + ", namespace=" + namespace + ", enabled=" + enabled + "]"; }
public static Module loadModule(Module module) throws IOException { if (module == null) { return null; } String body = readTextFile(module.getFileName()); module.setBody(body); return module; }
private void storeModule(Module module) { try { writeTextFile(module.getFileName(), module.getBody()); } catch (IOException ex) { logger.warn("storeModule.error", ex.getMessage()); } }
@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; }
@Override public boolean getModuleState(Module module) { try { String query = "import module namespace test=\"" + module.getNamespace() + "\" at \"" + module.getName() + "\";\n\n"; query += "1213"; StaticQueryContext sqc = prepareStaticContext(module.getBody()); logger.trace("getModuleExpression; compiling query: {}", query); sqc.compileQuery(query); return true; } catch (XPathException ex) { return false; } }
append(module.getPrefix()).append("=\"").append(module.getNamespace()). append("\" at \"").append(module.getName()).append("\";\n"); // + int offset = query.length();
private Module getModule(String moduleName) { for (Module module: repo.getModules()) { if (moduleName.equals(module.getName())) { return module; } Path path = Paths.get(module.getFileName()); if (moduleName.equals(path.getFileName().toString())) { return module; } } return null; }
@Override @SuppressWarnings("unchecked") protected Map<String, Module> loadEntities() { Collection<Module> modules = (Collection<Module>) cfg.getEntities(Module.class); Map<String, Module> result = new HashMap<String, Module>(modules.size()); for (Module module: modules) { result.put(module.getName(), module); } return result; }
@ManagedAttribute(description="Returns registered Module name") public String getNamespace() { return getEntity().getNamespace(); }
private void deleteModule(Module module) { Path path = Paths.get(module.getFileName()); try { Files.deleteIfExists(path); } catch (IOException ex) { logger.error("deleteModule.error", ex); } }
@Override public StreamSource[] resolve(String moduleURI, String baseURI, String[] locations) throws XPathException { logger.trace("resolve.enter; got module: {}, base: {}, locations: {}", moduleURI, baseURI, locations); String moduleName; if (locations.length > 0) { // locations contains something to use.. Path path = Paths.get(URI.create(locations[0])); moduleName = path.getFileName().toString(); } else { // moduleURI is the module namespace! moduleName = moduleURI; } Module module = getModule(moduleName); if (module != null) { logger.trace("resolve.exit; returning module: {}", module.getBody()); Reader mReader = new StringReader(module.getBody()); return new StreamSource[] {new StreamSource(mReader)}; } else { // throw ex? logger.warn("resolve.exit; no module found for name: {}", moduleName); } return new StreamSource[0]; }
@Override public Object process(Entry<String, Module> entry) { logger.debug("process.enter; entry: {}", entry); if (entry.getValue() != null) { Module module = entry.getValue(); if (module.getVersion() == getVersion()) { entry.setValue(null); auditEntity(AuditType.delete, module); return module; } else { // throw ex ? logger.warn("process; outdated module version: {}; entry version: {}; process terminated", getVersion(), entry.getValue().getVersion()); } } return null; }
@Override public Object process(Entry<String, Module> entry) { logger.debug("process.enter; entry: {}", entry); if (entry.getValue() == null) { String name = entry.getKey(); String body = "module namespace ns = \"" + namespace + "\";"; Module module = new Module(getVersion(), new Date(), getAdmin(), name, fileName, description, prefix, namespace, body, true); entry.setValue(module); auditEntity(AuditType.create, module); return module; } return null; }
@ManagedAttribute(description="Returns Module description") public String getDescription() { return getEntity().getDescription(); }
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; }
private XQueryExpression getModuleExpression(Module module) throws BagriException { //logger.trace("getModuleExpression.enter; got namespace: {}, name: {}, body: {}", namespace, name, body); String query = "import module namespace test=\"" + module.getNamespace() + "\" at \"" + module.getName() + "\";\n\n1213"; StaticQueryContext sqc = null; try { //sqc.compileLibrary(query); - works in Saxon-EE only sqc = prepareStaticContext(module.getBody()); logger.trace("getModuleExpression; compiling query: {}", query); //logger.trace("getModuleExpression.exit; time taken: {}", stamp); return sqc.compileQuery(query); //sqc.getCompiledLibrary("test")... } catch (XPathException ex) { String error = getError(ex, sqc); logger.error("getModuleExpression.error; " + error, ex); //logger.info("getModuleExpression.error; message: {}", error); throw new BagriException(error, BagriException.ecQueryCompile); } }
private Module getModule(String module) { Collection<Module> modules = repo.getModules(); for (Module xModule: modules) { if (module.equals(xModule.getName())) { return xModule; } } logger.trace("getModule; modules: {}", modules); return null; }
@ManagedAttribute(description="Returns Module file name") public String getFileName() { return getEntity().getFileName(); }
@ManagedOperation(description="Returns Module body") public String getBody() { return getEntity().getBody(); }