Added a request-restart-wrapper and some convenient redirections.
[jsvc.git] / src / dolda / jsvc / util / Rehandler.java
diff --git a/src/dolda/jsvc/util/Rehandler.java b/src/dolda/jsvc/util/Rehandler.java
new file mode 100644 (file)
index 0000000..7915f53
--- /dev/null
@@ -0,0 +1,29 @@
+package dolda.jsvc.util;
+
+import dolda.jsvc.*;
+
+public class Rehandler implements Responder {
+    private Responder next;
+
+    public Rehandler(Responder next) {
+       this.next = next;
+    }
+
+    public void respond(Request req) {
+       Responder cur = next;
+       while(true) {
+           try {
+               cur.respond(req);
+           } catch(RequestRestart t) {
+               if(req instanceof ResettableRequest) {
+                   ResettableRequest rr = (ResettableRequest)req;
+                   if(rr.canreset())
+                       rr.reset();
+               }
+               cur = t;
+               continue;
+           }
+           return;
+       }
+    }
+}