From: <jbo...@li...> - 2005-11-03 15:54:49
|
Author: rem...@jb... Date: 2005-11-03 10:54:43 -0500 (Thu, 03 Nov 2005) New Revision: 1491 Modified: trunk/labs/jbossweb/src/share/classes/org/jboss/web/rewrite/RewriteValve.java Log: - Fix control flow flag (they modify the index, so should be done last). - RewriteMap instances may implement Lifecycle to get start/stop calls. Modified: trunk/labs/jbossweb/src/share/classes/org/jboss/web/rewrite/RewriteValve.java =================================================================== --- trunk/labs/jbossweb/src/share/classes/org/jboss/web/rewrite/RewriteValve.java 2005-11-03 09:30:47 UTC (rev 1490) +++ trunk/labs/jbossweb/src/share/classes/org/jboss/web/rewrite/RewriteValve.java 2005-11-03 15:54:43 UTC (rev 1491) @@ -25,6 +25,7 @@ import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Hashtable; +import java.util.Iterator; import java.util.Map; import java.util.StringTokenizer; @@ -178,7 +179,12 @@ } else if (result instanceof RewriteCond) { conditions.add(result); } else if (result instanceof Object[]) { - maps.put(((Object[]) result)[0], ((Object[]) result)[1]); + String mapName = (String) ((Object[]) result)[0]; + RewriteMap map = (RewriteMap) ((Object[]) result)[1]; + maps.put(mapName, map); + if (map instanceof Lifecycle) { + ((Lifecycle) map).start(); + } } } catch (IOException e) { container.getLogger().error("Error reading configuration", e); @@ -207,6 +213,14 @@ } public void stop() throws LifecycleException { + Iterator values = maps.values().iterator(); + while (values.hasNext()) { + RewriteMap map = (RewriteMap) values.next(); + if (map instanceof Lifecycle) { + ((Lifecycle) map).stop(); + } + } + maps.clear(); rules = null; } @@ -255,31 +269,8 @@ rewritten = true; } - // Control flow processing - - // - chain (skip remaining chained rules if this one does not match) - if (rules[i].isChain() && newtest == null) { - for (int j = i; j < rules.length; j++) { - if (!rules[j].isChain()) { - i = j; - break; - } - } - } - // - last (stop rewriting here) - if (rules[i].isLast() && newtest != null) { - break; - } - // - next (redo again) - if (rules[i].isNext() && newtest != null) { - i = 0; - } - // - skip (n rules) - if (newtest != null) { - i += rules[i].getSkip(); - } - - // Final reply: + // Final reply + // - forbidden if (rules[i].isForbidden() && newtest != null) { response.sendError(HttpServletResponse.SC_FORBIDDEN); @@ -300,7 +291,8 @@ break; } - // Reply modification: + // Reply modification + // - cookie if (rules[i].isCookie() && newtest != null) { response.addCookie(new Cookie(rules[i].getCookieName(), @@ -321,6 +313,32 @@ // apparently needed, which feels weird (in Servlet API land, the query // string is separate) + // Control flow processing + + // - chain (skip remaining chained rules if this one does not match) + if (rules[i].isChain() && newtest == null) { + for (int j = i; j < rules.length; j++) { + if (!rules[j].isChain()) { + i = j; + break; + } + } + continue; + } + // - last (stop rewriting here) + if (rules[i].isLast() && newtest != null) { + break; + } + // - next (redo again) + if (rules[i].isNext() && newtest != null) { + i = 0; + continue; + } + // - skip (n rules) + if (newtest != null) { + i += rules[i].getSkip(); + } + } if (rewritten) { |