Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / mcr-test / WWW / Doc / Programmer / samples / RelocateFrame.html
diff --git a/JMCR-Stable/mcr-test/WWW/Doc/Programmer/samples/RelocateFrame.html b/JMCR-Stable/mcr-test/WWW/Doc/Programmer/samples/RelocateFrame.html
new file mode 100644 (file)
index 0000000..33b69a5
--- /dev/null
@@ -0,0 +1,168 @@
+<!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>RelocateFrame.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">// RelocateFrame.java\r
+// $Id: RelocateFrame.html,v 1.1 2010/06/15 12:20:08 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">frames</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
+<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">jigsaw</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">www</span>.<span class="reference">http</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>.<span class="type">ProtocolException</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">NotAProtocolException</span>;\r
+\r
+<span class="comment">/**\r
+ * Emit a HTTP redirect.\r
+ */</span>\r
+<span class="reference">public</span> <span class="keyword">class</span> <span class="function-name">RelocateFrame</span> <span class="keyword">extends</span> <span class="type">HTTPFrame</span> {\r
+\r
+    <span class="comment">/**\r
+     * Name of the state to hold the PATH_INFO in the request.\r
+     */</span>\r
+    <span class="reference">public</span> <span class="type">final</span> <span class="type">static</span> \r
+       <span class="type">String</span> <span class="variable-name">PATH_INFO</span> = \r
+       "<span class="doc-string">org.w3c.jigsaw.resources.RelocateResource.PathInfo</span>";\r
+\r
+    <span class="comment">/**\r
+     * Attribute index - The relocation location.\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_LOCATION</span> = -1 ;\r
+    <span class="comment">/**\r
+     * Attribute index - Should we also handle extra path infos ?\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_HANDLE_PATHINFO</span> = -1;\r
+\r
+    <span class="type">static</span> {\r
+       <span class="type">Attribute</span> <span class="variable-name">a</span> = <span class="keyword">null</span> ;\r
+       <span class="type">Class</span>     <span class="variable-name">c</span> = <span class="keyword">null</span> ;\r
+\r
+       <span class="keyword">try</span> {\r
+           c = Class.forName("<span class="string">org.w3c.jigsaw.frames.RelocateFrame</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">// The location attribute\r
+</span>        a = <span class="keyword">new</span> <span class="type">StringAttribute</span>("<span class="string">location</span>"\r
+                               , <span class="keyword">null</span>\r
+                               , Attribute.EDITABLE|Attribute.MANDATORY) ;\r
+       ATTR_LOCATION = AttributeRegistry.registerAttribute(c, a) ;\r
+       <span class="comment">// The handle path info attribute\r
+</span>        a = <span class="keyword">new</span> <span class="type">BooleanAttribute</span>("<span class="string">handle-pathinfo</span>"\r
+                                , <span class="reference">Boolean</span>.<span class="type">TRUE</span>\r
+                                , Attribute.EDITABLE);\r
+       ATTR_HANDLE_PATHINFO = AttributeRegistry.registerAttribute(c, a);\r
+    }\r
+\r
+    <span class="comment">/**\r
+     * Get the location for the relocation\r
+     */</span>\r
+\r
+    <span class="reference">public</span> <span class="type">String</span> <span class="function-name">getLocation</span>() {\r
+       <span class="keyword">return</span> (<span class="type">String</span>) getValue(ATTR_LOCATION, <span class="keyword">null</span>) ;\r
+    }\r
+\r
+    <span class="reference">public</span> <span class="type">boolean</span> <span class="function-name">checkHandlePathInfo</span>() {\r
+       <span class="keyword">return</span> getBoolean(ATTR_HANDLE_PATHINFO, <span class="keyword">true</span>);\r
+    }\r
+\r
+    <span class="reference">public</span> <span class="type">void</span> <span class="function-name">registerResource</span>(<span class="type">FramedResource</span> <span class="variable-name">resource</span>) {\r
+       <span class="reference">super</span>.registerOtherResource(resource);\r
+    }\r
+\r
+    <span class="preprocessor">protected</span> <span class="type">boolean</span> <span class="function-name">lookupOther</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="comment">// Perform our super-class lookup strategy:\r
+</span>        <span class="keyword">if</span> ( <span class="reference">super</span>.lookupOther(ls, lr) ) {\r
+           <span class="keyword">return</span> <span class="keyword">true</span>;\r
+       } <span class="keyword">else</span> <span class="keyword">if</span> ( ! checkHandlePathInfo() ) {\r
+           <span class="keyword">return</span> <span class="keyword">false</span>;\r
+       }\r
+       <span class="comment">// Compute PATH INFO, store it as a piece of state in the request:\r
+</span>        <span class="type">StringBuffer</span> <span class="variable-name">pathinfo</span> = <span class="keyword">new</span> <span class="type">StringBuffer</span>();\r
+       <span class="keyword">while</span> ( ls.hasMoreComponents() ) {\r
+           pathinfo.append('<span class="string">/</span>');\r
+           pathinfo.append(ls.getNextComponent());\r
+       }\r
+       <span class="keyword">if</span> (ls.hasRequest() ) {\r
+           <span class="type">Request</span> <span class="variable-name">request</span> = (<span class="type">Request</span>) ls.getRequest();\r
+           request.setState(PATH_INFO, pathinfo.toString());\r
+       }\r
+       lr.setTarget(resource.getResourceReference());\r
+       <span class="keyword">return</span> <span class="keyword">true</span>;\r
+    }\r
+\r
+    <span class="comment">/**\r
+     * Emit a redirect.\r
+     * All GET requests are redirected toward the target location.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">client</span><span class="comment"> The client issuing the request.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">request</span><span class="comment"> The request to handle.\r
+     * </span><span class="keyword">@exception </span><span class="type">ProtocolException</span><span class="comment"> If the request couldn't be handled.\r
+     */</span>\r
+\r
+    <span class="preprocessor">protected</span> <span class="type">Reply</span> <span class="function-name">getOtherResource</span> (<span class="type">Request</span> <span class="variable-name">request</span>)\r
+       <span class="keyword">throws</span> <span class="type">ProtocolException</span>\r
+    {\r
+       <span class="type">String</span> <span class="variable-name">location</span> = getLocation() ;\r
+       <span class="keyword">if</span> ( location == <span class="keyword">null</span> ) {\r
+           <span class="type">Reply</span> <span class="variable-name">error</span> = request.makeReply(HTTP.INTERNAL_SERVER_ERROR) ;\r
+           error.setContent("<span class="string">The target RelocateResource doesn't define the</span>"\r
+                            + "<span class="string"> relocation location. The server is </span>"\r
+                            + "<span class="string"> misconfigured.</span>") ;\r
+           <span class="keyword">throw</span> <span class="keyword">new</span> <span class="type">HTTPException</span>(error) ;\r
+       } <span class="keyword">else</span> {\r
+           <span class="type">Reply</span>  <span class="variable-name">reply</span>    = request.makeReply(HTTP.MOVED_TEMPORARILY) ;\r
+           <span class="type">URL</span>    <span class="variable-name">loc</span>      = <span class="keyword">null</span>;\r
+           <span class="keyword">try</span> {\r
+               loc = <span class="keyword">new</span> <span class="type">URL</span>(getURL(request), location);\r
+               <span class="keyword">if</span> (checkHandlePathInfo()) {\r
+                   <span class="type">String</span> <span class="variable-name">pathinfo</span> = (<span class="type">String</span>) request.getState(PATH_INFO);\r
+                   <span class="comment">// Given the way pathinfo is computed, it starts with a /\r
+</span>                    <span class="keyword">try</span> {\r
+                       <span class="keyword">if</span> (pathinfo != <span class="keyword">null</span>)\r
+                           loc = <span class="keyword">new</span> <span class="type">URL</span>(loc.toExternalForm()+pathinfo);\r
+                       <span class="keyword">else</span> \r
+                           resource.getServer().errlog(resource, \r
+                                       "<span class="string">This resource handle Pathinfo </span>"+\r
+                                       "<span class="string">but the request has no </span>"+\r
+                                       "<span class="string">PATH_INFO state.</span>");\r
+                   } <span class="keyword">catch</span> (<span class="type">MalformedURLException</span> <span class="variable-name">ex</span>) {\r
+                       resource.getServer().errlog(resource, \r
+                                       "<span class="string">This resource handle Pathinfo </span>"+\r
+                                       "<span class="string">but the request has an invalid </span>"+\r
+                                       "<span class="string">PATH_INFO state.</span>");\r
+                   }\r
+               }\r
+           } <span class="keyword">catch</span> (<span class="type">Exception</span> <span class="variable-name">ex</span>) {\r
+               ex.printStackTrace();\r
+           }\r
+           reply.setLocation(loc);\r
+           <span class="keyword">return</span> reply ;\r
+       }\r
+    }\r
+\r
+}\r
+\r
+    </pre>\r
+  </body>\r
+</html>\r