Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / mcr-test / WWW / Doc / Programmer / samples / ResourceFilter.html
diff --git a/JMCR-Stable/mcr-test/WWW/Doc/Programmer/samples/ResourceFilter.html b/JMCR-Stable/mcr-test/WWW/Doc/Programmer/samples/ResourceFilter.html
new file mode 100644 (file)
index 0000000..c1ee3c8
--- /dev/null
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"\r
+                      "http://www.w3.org/TR/REC-html40/strict.dtd">\r
+<html>\r
+  <head>\r
+    <title>ResourceFilter.java</title>\r
+    <meta name="Author" content="Benoit Mahe">\r
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+    <meta name="Generator" content="*emacs: emacs-css">\r
+\r
+    <link rel="Stylesheet" media="screen" type="text/css" href="default-html.css">\r
+  </head>\r
+  <body>\r
+\r
+    <pre>\r
+<span class="comment">// ResourceFilter.java\r
+// $Id: ResourceFilter.html,v 1.1 2010/06/15 12:20:03 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1996.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+</span>\r
+<span class="keyword">package</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">tools</span>.<span class="type">resources</span> ;\r
+\r
+<span class="keyword">import</span> <span class="reference">java</span>.<span class="reference">util</span>.*;\r
+<span class="keyword">import</span> <span class="reference">java</span>.<span class="reference">io</span>.*;\r
+\r
+<span class="reference">public</span> <span class="keyword">class</span> <span class="function-name">ResourceFilter</span> <span class="keyword">extends</span> <span class="type">ResourceFrame</span> \r
+    <span class="keyword">implements</span> <span class="type">FilterInterface</span> {\r
+\r
+    <span class="comment">/**\r
+     * Get our target resource.\r
+     */</span>\r
+    \r
+    <span class="reference">public</span> <span class="type">Resource</span> <span class="function-name">getTargetResource</span>() {\r
+       <span class="type">Resource</span> <span class="variable-name">target</span> = (<span class="type">Resource</span>) getResource();\r
+       <span class="keyword">while</span> (target <span class="keyword">instanceof</span> <span class="type">ResourceFrame</span>) {\r
+           target = ((<span class="type">ResourceFrame</span>)target).getResource();\r
+       }\r
+       <span class="keyword">return</span> target;\r
+    }\r
+    \r
+    <span class="comment">/**\r
+     * Lookup time filtering.\r
+     * This method is called while Jigsaw performs resource lookup. Each time\r
+     * a lookup end up on the target resource of that filter, this method\r
+     * will be called.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">ls</span><span class="comment"> The current lookup state.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">lr</span><span class="comment"> The current lookup result.\r
+     * </span><span class="keyword">@return </span><span class="comment">A boolean, &lt;strong&gt;true&lt;/strong&gt; if this filter has performed\r
+     * the whole lookup, and side-effect the lookup result appropriatelly,\r
+     * &lt;strong&gt;false&lt;/strong&gt; otherwise.\r
+     */</span>\r
+    \r
+    <span class="reference">public</span> <span class="type">boolean</span> <span class="function-name">lookup</span>(<span class="type">LookupState</span> <span class="variable-name">ls</span>, <span class="type">LookupResult</span> <span class="variable-name">lr</span>) \r
+       <span class="keyword">throws</span> <span class="type">ProtocolException</span>\r
+    {\r
+       <span class="keyword">return</span> <span class="keyword">false</span>;\r
+    }\r
+    \r
+    <span class="comment">/**\r
+     * Simplified ingoingFilter API.\r
+     * This is a default, simplified API to the ingoing filter method.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">request</span><span class="comment"> The request to filter.\r
+     * </span><span class="keyword">@return </span><span class="comment">A Reply instance, or &lt;strong&gt;null&lt;/strong&gt; if processing\r
+     * should continue normally.\r
+     * </span><span class="keyword">@exception </span><span class="type">HTTPException</span><span class="comment"> If processing should be interrupted, because\r
+     * an abnormal situation occured.\r
+     */</span>\r
+    \r
+    <span class="reference">public</span> <span class="type">ReplyInterface</span> <span class="function-name">ingoingFilter</span>(<span class="type">RequestInterface</span> <span class="variable-name">request</span>) \r
+       <span class="keyword">throws</span> <span class="type">ProtocolException</span>\r
+    {\r
+       <span class="keyword">return</span> <span class="keyword">null</span>;\r
+    }\r
+    \r
+    <span class="comment">/**\r
+     * The ingoingFilter method.\r
+     * This is the method that really gets called by Jigsaw core. By default\r
+     * it will invoke the simpler &lt;code&gt;ingoingFilter&lt;/code&gt; method,\r
+     * taking only the request has a parameter.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">request</span><span class="comment"> The request that is about to be handled.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">filters</span><span class="comment"> The whole filter list to be applied to the resource.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">i</span><span class="comment"> A pointer into the above array, indicating which filters\r
+     * have already been triggered (the one whose index are lower than \r
+     * &lt;strong&gt;i&lt;/strong&gt;), and what filters have to be triggered (the one\r
+     * whose index are greater or equal to &lt;strong&gt;i+1&lt;/strong&gt;).\r
+     * </span><span class="keyword">@return </span><span class="comment">A Reply instance, if the filter did know how to answer\r
+     * the request without further processing, &lt;strong&gt;null&lt;/strong&gt;\r
+     * otherwise.\r
+     */</span>\r
+    \r
+    <span class="reference">public</span> <span class="type">ReplyInterface</span> <span class="function-name">ingoingFilter</span>(<span class="type">RequestInterface</span> <span class="variable-name">request</span>,\r
+                                       <span class="type">FilterInterface</span> <span class="variable-name">filters</span>[], \r
+                                       <span class="type">int</span> <span class="variable-name">i</span>)\r
+       <span class="keyword">throws</span> <span class="type">ProtocolException</span>\r
+    {\r
+       <span class="keyword">return</span> ingoingFilter(request);\r
+    }\r
+    \r
+\r
+    <span class="comment">/**\r
+     * Simplified API to the outgoing filter metho.\r
+     * This is a simplified API to the ougoing filter method, you can either\r
+     * overide this method, or the more powerfull one.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">request</span><span class="comment"> The original request.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">reply</span><span class="comment"> It's original reply.\r
+     * </span><span class="keyword">@return </span><span class="comment">A Reply instance, or &lt;strong&gt;null&lt;/strong&gt; if processing\r
+     * should continue normally.\r
+     * </span><span class="keyword">@exception </span><span class="type">HTTPException</span><span class="comment"> If processing should be interrupted, because\r
+     * an abnormal situation occured.\r
+     */</span>\r
+    \r
+    <span class="reference">public</span> <span class="type">ReplyInterface</span> <span class="function-name">outgoingFilter</span>(<span class="type">RequestInterface</span> <span class="variable-name">request</span>,\r
+                                        <span class="type">ReplyInterface</span> <span class="variable-name">reply</span>) \r
+       <span class="keyword">throws</span> <span class="type">ProtocolException</span>\r
+    {\r
+       <span class="keyword">return</span> <span class="keyword">null</span>;\r
+    }\r
+    \r
+    <span class="reference">public</span> <span class="type">ReplyInterface</span> <span class="function-name">exceptionFilter</span>(<span class="type">RequestInterface</span> <span class="variable-name">request</span>,\r
+                                         <span class="type">ProtocolException</span> <span class="variable-name">ex</span>,\r
+                                         <span class="type">FilterInterface</span> <span class="variable-name">filters</span>[],\r
+                                         <span class="type">int</span> <span class="variable-name">i</span>) {\r
+       <span class="keyword">return</span> <span class="keyword">null</span>;\r
+    }\r
+    \r
+    <span class="comment">/**\r
+     * The outgoingFilter method.\r
+     * This method is the one that gets called by Jigsaw core. By default it\r
+     * will call the simpler &lt;code&gt;outgoingFilter&lt;/code&gt; method that takes\r
+     * only the request and the reply as parameters.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">request</span><span class="comment"> The request that has been processed.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">reply</span><span class="comment"> The original reply as emitted by the resource.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">filters</span><span class="comment"> The whole filter that applies to the resource.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">i</span><span class="comment"> The current index of filters. The &lt;em&gt;i&lt;/em&gt; filter is ourself,\r
+     * filters with lower indexes have already been applied, and filters with\r
+     * greater indexes are still to be applied.\r
+     * </span><span class="keyword">@return </span><span class="comment">A Reply instance, if that filter know how to complete the\r
+     * request processing, or &lt;strong&gt;null&lt;/strong&gt; if reminaing filters\r
+     * are to be called by Jigsaw engine.\r
+     */</span>\r
+    \r
+    <span class="reference">public</span> <span class="type">ReplyInterface</span> <span class="function-name">outgoingFilter</span>(<span class="type">RequestInterface</span> <span class="variable-name">request</span>,\r
+                                        <span class="type">ReplyInterface</span> <span class="variable-name">reply</span>,\r
+                                        <span class="type">FilterInterface</span> <span class="variable-name">filters</span>[],\r
+                                        <span class="type">int</span> <span class="variable-name">fidx</span>) \r
+       <span class="keyword">throws</span> <span class="type">ProtocolException</span>\r
+    {\r
+       <span class="type">ReplyInterface</span> <span class="variable-name">fr</span> = outgoingFilter(request, reply);\r
+       <span class="keyword">return</span> (fr != reply) ? fr : <span class="keyword">null</span>;\r
+    }\r
+\r
+    <span class="reference">public</span> <span class="type">OutputStream</span> <span class="function-name">outputFilter</span>(<span class="type">RequestInterface</span> <span class="variable-name">request</span>,\r
+                                    <span class="type">ReplyInterface</span> <span class="variable-name">reply</span>,\r
+                                    <span class="type">OutputStream</span> <span class="variable-name">output</span>) {\r
+       <span class="keyword">return</span> output;\r
+    }\r
+}\r
+\r
+    </pre>\r
+  </body>\r
+</html>\r