From: <mr...@us...> - 2004-06-14 18:46:46
|
Update of /cvsroot/struts/struts-flow/src/java/net/sf/struts/flow In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22463/src/java/net/sf/struts/flow Modified Files: FlowAction.java FlowMapping.java FlowPlugIn.java Log Message: Added ability to specify a script base with the plugin and have each action mapping specify their own script, resolved against the script base. Index: FlowAction.java =================================================================== RCS file: /cvsroot/struts/struts-flow/src/java/net/sf/struts/flow/FlowAction.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** FlowAction.java 5 Jun 2004 00:01:42 -0000 1.6 --- FlowAction.java 14 Jun 2004 18:46:34 -0000 1.7 *************** *** 41,51 **** /** ! * Gets the interpreter * *@return The interpreter value */ ! public JavaScriptInterpreter getInterpreter() { return (JavaScriptInterpreter) servlet.getServletContext().getAttribute(FlowPlugIn.INTERPRETER_KEY); } --- 41,62 ---- /** ! * Gets the interpreter when no script is specified * *@return The interpreter value */ ! protected JavaScriptInterpreter getInterpreter() { return (JavaScriptInterpreter) servlet.getServletContext().getAttribute(FlowPlugIn.INTERPRETER_KEY); } + + /** + * Gets the interpreter for the requested script + * + *@param script The script to load the interpeter for + *@return The interpreter value + */ + protected JavaScriptInterpreter getInterpreter(String script) { + Map map = (Map)servlet.getServletContext().getAttribute(FlowPlugIn.INTERPRETERS_KEY); + return (JavaScriptInterpreter) map.get(script); + } *************** *** 97,100 **** --- 108,118 ---- contid = mapping.getParameter(); } + + JavaScriptInterpreter interp = null; + if (flowMapping.getScript() == null) { + interp = getInterpreter(); + } else { + interp = getInterpreter(flowMapping.getScript()); + } String func = flowMapping.getFunction(); *************** *** 110,117 **** } else { // call control script function ! getInterpreter().callFunction(func, args, context); // retrieve page, continuation ID, and attributes from chain context - System.out.println("forward type:" + context.get(Constants.FORWARD_NAME_KEY).getClass().getName()); String page = (String) JSContext.jsobjectToObject(context.get(Constants.FORWARD_NAME_KEY)); contid = (String) context.get(Constants.CONTINUATION_ID_KEY); --- 128,134 ---- } else { // call control script function ! interp.callFunction(func, args, context); // retrieve page, continuation ID, and attributes from chain context String page = (String) JSContext.jsobjectToObject(context.get(Constants.FORWARD_NAME_KEY)); contid = (String) context.get(Constants.CONTINUATION_ID_KEY); *************** *** 125,129 **** // kick off continuation context.put("id", "5"); ! getInterpreter().handleContinuation( request.getParameter("contid"), new LinkedList(), context); --- 142,146 ---- // kick off continuation context.put("id", "5"); ! interp.handleContinuation( request.getParameter("contid"), new LinkedList(), context); Index: FlowMapping.java =================================================================== RCS file: /cvsroot/struts/struts-flow/src/java/net/sf/struts/flow/FlowMapping.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** FlowMapping.java 3 Jun 2004 19:33:29 -0000 1.2 --- FlowMapping.java 14 Jun 2004 18:46:34 -0000 1.3 *************** *** 29,33 **** public class FlowMapping extends ActionMapping { ! private String func = null; --- 29,54 ---- public class FlowMapping extends ActionMapping { ! private String func; ! private String script; ! ! ! /** ! * Returns the value of script. ! * ! *@return The script value ! */ ! public String getScript() { ! return script; ! } ! ! ! /** ! * Sets the value of script. ! * ! *@param script The value to assign script. ! */ ! public void setScript(String script) { ! this.script = script; ! } Index: FlowPlugIn.java =================================================================== RCS file: /cvsroot/struts/struts-flow/src/java/net/sf/struts/flow/FlowPlugIn.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** FlowPlugIn.java 3 Jun 2004 19:33:29 -0000 1.5 --- FlowPlugIn.java 14 Jun 2004 18:46:34 -0000 1.6 *************** *** 36,48 **** /** ! * Initializes the Flow interpreter and loads system and user scripts. User ! * scripts should be specified as a comma-delimited list using the "scripts" ! * plugin parameter. Scripts can be located either in the webapp directory, as ! * an absolute path on the filesystem, or in the classpath like in a jar file. * <p> * * The following optional properties can be specified:</p> * <ul> * <li> <code>debugger</code> - Whether to enable the Swing debugger</li> * <li> <code>reloadScripts</code> - Whether to enable the reloading of * scripts if their contents have been modified. The check for modification --- 36,59 ---- /** ! * Initializes the Flow interpreter and loads system and user scripts. There ! * are two mutually exclusive ways to specify scripts: ! * <ol> ! * <li> <code>scripts</code> - A comma-delimited list of scripts to load. All ! * loaded scripts share the same script scope.</li> ! * <li> <code>scriptBase</code> - The base path to use when resolving ! * scripts. Each action mapping then needs to set the <code>script</code> ! * property for the name of the actual script. The scripts will be looked up ! * by concatinating the script base with the script name. Each script gets ! * its own scope.</li> ! * </ol> * <p> * + * Scripts can be located either in the webapp directory, as an absolute path + * on the filesystem, or in the classpath like in a jar file. </p> <p> + * * The following optional properties can be specified:</p> * <ul> * <li> <code>debugger</code> - Whether to enable the Swing debugger</li> + * * <li> <code>reloadScripts</code> - Whether to enable the reloading of * scripts if their contents have been modified. The check for modification *************** *** 60,71 **** public final static String INTERPRETER_KEY = "interpreter"; /** Commons Logging instance. */ private static Log log = LogFactory.getLog(FlowPlugIn.class); - private JavaScriptInterpreter interp; private ServletContext context; - - /** List of user scripts to load */ private String scripts = null; private boolean debugger = false; --- 71,83 ---- public final static String INTERPRETER_KEY = "interpreter"; + /** Servlet context key flow interpreters are stored under */ + public final static String INTERPRETERS_KEY = "interpreters"; + /** Commons Logging instance. */ private static Log log = LogFactory.getLog(FlowPlugIn.class); private ServletContext context; private String scripts = null; + private String scriptBase = null; private boolean debugger = false; *************** *** 97,100 **** --- 109,122 ---- /** + * Sets the base path to resolve scripts against + * + *@param scriptBase The base path + */ + public void setScriptBase(String scriptBase) { + this.scriptBase = scriptBase; + } + + + /** * Sets the value of reloadScripts. * *************** *** 146,179 **** throws ServletException { ! if (scripts == null || scripts.length() <= 0) { ! throw new ServletException("No scripts defined"); } context = servlet.getServletContext(); ! StringTokenizer st = new StringTokenizer(scripts, ","); Factory.setLogger(new CommonsLogger()); ! List streamList = new ArrayList(); ! try { ! interp = new JavaScriptInterpreter(); ! interp.setDebugger(debugger); ! interp.setCheckTime(checkTime); ! interp.setReloadScripts(reloadScripts); ! interp.initialize(); ! interp.register("/system.js"); ! interp.register("/struts.js"); ! while (st.hasMoreTokens()) { ! String scriptPath = st.nextToken().trim(); ! if (log.isInfoEnabled()) { ! log.info("Registering script '" + scriptPath + "'"); } ! interp.register(scriptPath); } ! } catch (Exception ex) { ! throw new ServletException("Unable to create JavaScript interpreter", ex); } ! Factory.getContinuationsManager().setDefaultTimeToLive(ttl); - context.setAttribute(INTERPRETER_KEY, interp); } --- 168,225 ---- throws ServletException { ! if ((scripts == null || scripts.length() == 0) && scriptBase == null) { ! throw new ServletException("No scripts or script base defined"); } context = servlet.getServletContext(); ! Factory.setLogger(new CommonsLogger()); + Factory.getContinuationsManager().setDefaultTimeToLive(ttl); ! if (scripts != null && scripts.length() == 0) { ! StringTokenizer st = new StringTokenizer(scripts, ","); ! List streamList = new ArrayList(); ! try { ! JavaScriptInterpreter interp = createInterpreter(); ! while (st.hasMoreTokens()) { ! String scriptPath = st.nextToken().trim(); ! if (log.isInfoEnabled()) { ! log.info("Registering script '" + scriptPath + "'"); ! } ! interp.register(scriptPath); ! context.setAttribute(INTERPRETER_KEY, interp); } ! } catch (Exception ex) { ! throw new ServletException("Unable to create global JavaScript interpreter", ex); } ! } else { ! Map map = ! new HashMap() { ! public Object get(Object key) { ! JavaScriptInterpreter interp = (JavaScriptInterpreter) super.get(key); ! if (interp == null) { ! if (log.isDebugEnabled()) { ! log.debug("Creating interpreter for " + key); ! } ! interp = createInterpreter(); ! interp.register(scriptBase + key); ! put(key, interp); ! } ! return interp; ! } ! }; ! context.setAttribute(INTERPRETERS_KEY, map); } ! } + private JavaScriptInterpreter createInterpreter() { + JavaScriptInterpreter interp = new JavaScriptInterpreter(); + interp.setDebugger(debugger); + interp.setCheckTime(checkTime); + interp.setReloadScripts(reloadScripts); + interp.initialize(); + interp.register("/system.js"); + interp.register("/struts.js"); + return interp; } *************** *** 189,193 **** context.removeAttribute(INTERPRETER_KEY); ! interp = null; context = null; scripts = null; --- 235,240 ---- context.removeAttribute(INTERPRETER_KEY); ! context.removeAttribute(INTERPRETERS_KEY); ! scriptBase = null; context = null; scripts = null; |