package com.openkm.module.base; import javax.jcr.Node; import javax.jcr.Session; import javax.jcr.ValueFormatException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import bsh.EvalError; import bsh.Interpreter; import com.openkm.bean.Document; import com.openkm.bean.Folder; import com.openkm.bean.Scripting; public class BaseScriptingModule { private static Logger log = LoggerFactory.getLogger(BaseScriptingModule.class); /** * Check for scripts and evaluate * * @param node Node modified (Document or Folder) * @param user User who generated the modification event * @param eventType Type of modification event */ public static void checkScripts(Session session, Node scriptNode, Node eventNode, String eventType) { log.debug("checkScripts({}, {}, {}, {})", new Object[] { session, scriptNode, eventNode, eventType }); try { checkScriptsHelper(session, scriptNode, eventNode, eventType); } catch (ValueFormatException e) { e.printStackTrace(); } catch (javax.jcr.PathNotFoundException e) { e.printStackTrace(); } catch (javax.jcr.RepositoryException e) { e.printStackTrace(); } log.debug("checkScripts: void"); } /** * Check script helper method for recursion. */ private static void checkScriptsHelper(Session session, Node scriptNode, Node eventNode, String eventType) throws javax.jcr.RepositoryException { log.debug("checkScriptsHelper({}, {}, {}, {})", new Object[] { session, scriptNode, eventNode, eventType }); if (scriptNode.isNodeType(Folder.TYPE) || scriptNode.isNodeType(Document.TYPE)) { if (scriptNode.isNodeType(Scripting.TYPE)) { String code = scriptNode.getProperty(Scripting.SCRIPT_CODE).getString(); // Evaluate script Interpreter i = new Interpreter(); try { i.set("session", session); i.set("scriptNode", scriptNode); i.set("eventNode", eventNode); i.set("eventType", eventType); i.eval(code); } catch (EvalError e) { log.warn(e.getMessage(), e); } } // Check for script in parent node checkScriptsHelper(session, scriptNode.getParent(), eventNode, eventType); } log.debug("checkScriptsHelper: void"); } }