Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / mcr-test / WWW / Doc / Programmer / samples / HeaderFilter.html
diff --git a/JMCR-Stable/mcr-test/WWW/Doc/Programmer/samples/HeaderFilter.html b/JMCR-Stable/mcr-test/WWW/Doc/Programmer/samples/HeaderFilter.html
new file mode 100644 (file)
index 0000000..eb5304e
--- /dev/null
@@ -0,0 +1,162 @@
+<!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>HeaderFilter.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">// HeaderFilter.java\r
+// $Id: HeaderFilter.html,v 1.1 2010/06/15 12:20:05 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">jigsaw</span>.<span class="type">filters</span>;\r
+\r
+<span class="keyword">import</span> <span class="reference">java</span>.<span class="reference">net</span>.*;\r
+\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">tools</span>.<span class="reference">resources</span>.*;\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">tools</span>.<span class="reference">resources</span>.<span class="type">ProtocolException</span>;\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">www</span>.<span class="reference">http</span>.*;\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">jigsaw</span>.<span class="reference">http</span>.*;\r
+\r
+<span class="comment">/**\r
+ * Enforces a specific header value on all replies.\r
+ * Usefull for testing.\r
+ */</span>\r
+\r
+<span class="reference">public</span> <span class="keyword">class</span> <span class="function-name">HeaderFilter</span> <span class="keyword">extends</span> <span class="type">ResourceFilter</span> {\r
+    <span class="comment">/**\r
+     * Attribute index - The header name to add to replies.\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_HEADER_NAME</span> = -1;\r
+    <span class="comment">/**\r
+     * Attribute index - The header value.\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_HEADER_VALUE</span> = -1;\r
+    <span class="comment">/**\r
+     * Attribute index - SHould we use no-cache on that header.\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_NOCACHE</span> = -1;\r
+    <span class="comment">/**\r
+     * Attribute index - Should we use connection on that header.\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_CONNECTION</span> = -1;\r
+\r
+    <span class="type">static</span> {\r
+       <span class="type">Class</span> <span class="variable-name">c</span> = <span class="keyword">null</span>;\r
+       <span class="type">Attribute</span> <span class="variable-name">a</span> = <span class="keyword">null</span>;\r
+       <span class="keyword">try</span> {\r
+           c = Class.forName("<span class="string">org.w3c.jigsaw.filters.HeaderFilter</span>");\r
+       } <span class="keyword">catch</span> (<span class="type">Exception</span> <span class="variable-name">ex</span>) {\r
+           ex.printStackTrace();\r
+           System.exit(1);\r
+       }\r
+       <span class="comment">// Register the header name attribute:\r
+</span>        a = <span class="keyword">new</span> <span class="type">StringAttribute</span>("<span class="string">header-name</span>"\r
+                               , <span class="keyword">null</span>\r
+                               , Attribute.EDITABLE);\r
+       ATTR_HEADER_NAME = AttributeRegistry.registerAttribute(c, a);\r
+       <span class="comment">// Register the header value attribute.\r
+</span>        a = <span class="keyword">new</span> <span class="type">StringAttribute</span>("<span class="string">header-value</span>"\r
+                               , <span class="keyword">null</span>\r
+                               , Attribute.EDITABLE);\r
+       ATTR_HEADER_VALUE = AttributeRegistry.registerAttribute(c, a);\r
+       <span class="comment">// Register the nocache attribute.\r
+</span>        a = <span class="keyword">new</span> <span class="type">BooleanAttribute</span>("<span class="string">no-cache</span>"\r
+                                , <span class="reference">Boolean</span>.<span class="type">FALSE</span>\r
+                                , Attribute.EDITABLE);\r
+       ATTR_NOCACHE = AttributeRegistry.registerAttribute(c, a);\r
+       <span class="comment">// Register the connection attribute.\r
+</span>        a = <span class="keyword">new</span> <span class="type">BooleanAttribute</span>("<span class="string">connection</span>"\r
+                                , <span class="reference">Boolean</span>.<span class="type">FALSE</span>\r
+                                , Attribute.EDITABLE);\r
+       ATTR_CONNECTION = AttributeRegistry.registerAttribute(c, a);\r
+    }\r
+\r
+       \r
+    <span class="comment">/**\r
+     * Get the header to set, if any.\r
+     * </span><span class="keyword">@return </span><span class="comment">A String encoded header name, or &lt;strong&gt;null&lt;/strong&gt;.\r
+     */</span>\r
+\r
+    <span class="reference">public</span> <span class="type">String</span> <span class="function-name">getHeaderName</span>() {\r
+       <span class="type">String</span> <span class="variable-name">value</span> = getString(ATTR_HEADER_NAME, <span class="keyword">null</span>);\r
+       <span class="keyword">if</span> ( value != <span class="keyword">null</span> )\r
+           <span class="keyword">return</span> value.toLowerCase();\r
+       <span class="keyword">return</span> <span class="keyword">null</span>;\r
+    }\r
+\r
+    <span class="comment">/**\r
+     * Get the header value to set, if any.\r
+     * </span><span class="keyword">@return </span><span class="comment">A String encoded value for the header to set, or &lt;strong&gt;\r
+     * null&lt;/strong&gt;.\r
+     */</span>\r
+    \r
+    <span class="reference">public</span> <span class="type">String</span> <span class="function-name">getHeaderValue</span>() {\r
+       <span class="keyword">return</span> getString(ATTR_HEADER_VALUE, <span class="keyword">null</span>);\r
+    }\r
+\r
+    <span class="comment">/**\r
+     * Should we add this header's name to the &lt;code&gt;no-cache&lt;/code&gt; \r
+     * directive.\r
+     * </span><span class="keyword">@return </span><span class="comment">A boolean.\r
+     */</span>\r
+\r
+    <span class="reference">public</span> <span class="type">boolean</span> <span class="function-name">checkNoCache</span>() {\r
+       <span class="keyword">return</span> getBoolean(ATTR_NOCACHE, <span class="keyword">false</span>);\r
+    }\r
+\r
+    <span class="comment">/**\r
+     * Should we add this header to the connection header.\r
+     * </span><span class="keyword">@return </span><span class="comment">A boolean.\r
+     */</span>\r
+\r
+    <span class="reference">public</span> <span class="type">boolean</span> <span class="function-name">checkConnection</span>() {\r
+       <span class="keyword">return</span> getBoolean(ATTR_CONNECTION, <span class="keyword">false</span>);\r
+    }\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 outgoing filter decorates the reply appropriately.\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"> The originial reply.\r
+     * </span><span class="keyword">@return </span><span class="comment">Always &lt;strong&gt;null&lt;/strong&gt;.\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">req</span>,\r
+                                        <span class="type">ReplyInterface</span> <span class="variable-name">rep</span>) \r
+       <span class="keyword">throws</span> <span class="type">ProtocolException</span>\r
+    {\r
+       <span class="type">Reply</span> <span class="variable-name">reply</span> = (<span class="type">Reply</span>) rep;\r
+       <span class="type">String</span> <span class="variable-name">hname</span> = getHeaderName();\r
+       <span class="keyword">if</span> ( hname != <span class="keyword">null</span> ) {\r
+           <span class="type">String</span> <span class="variable-name">hvalue</span> = getHeaderValue();\r
+           <span class="keyword">if</span> ( hvalue == <span class="keyword">null</span> ) {\r
+               reply.removeHeader(hname);\r
+           } <span class="keyword">else</span> {\r
+               reply.setValue(hname, hvalue);\r
+           }\r
+           <span class="keyword">if</span> ( checkNoCache() )\r
+               reply.addNoCache(hname);\r
+           <span class="keyword">if</span> ( checkConnection() )\r
+               reply.addConnection(hname);\r
+       }\r
+       <span class="keyword">return</span> <span class="keyword">null</span>;\r
+    }\r
+}\r
+\r
+    </pre>\r
+  </body>\r
+</html>\r