Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / WWW / Doc / Programmer / samples / VirtualHostFrame.html
diff --git a/JMCR-Stable/real-world application/jigsaw/WWW/Doc/Programmer/samples/VirtualHostFrame.html b/JMCR-Stable/real-world application/jigsaw/WWW/Doc/Programmer/samples/VirtualHostFrame.html
new file mode 100644 (file)
index 0000000..9f4f9fd
--- /dev/null
@@ -0,0 +1,130 @@
+<!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>VirtualHostFrame.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">// VirtualHostFrame.java\r
+// $Id: VirtualHostFrame.html,v 1.1 2010/06/15 12:20:07 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1998.\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">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="comment">/**\r
+ * For Virtual Hosting.\r
+ */</span>\r
+<span class="reference">public</span> <span class="keyword">class</span> <span class="function-name">VirtualHostFrame</span> <span class="keyword">extends</span> <span class="type">HTTPFrame</span> {\r
+\r
+    <span class="comment">/**\r
+     * Attribute index - The default root (for unknown hosts)\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_FOLLOWUP</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
+\r
+       <span class="keyword">try</span> {\r
+           c = Class.forName("<span class="string">org.w3c.jigsaw.frames.VirtualHostFrame</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 our default root:\r
+</span>        a = <span class="keyword">new</span> <span class="type">StringAttribute</span>("<span class="string">followup</span>"\r
+                               , <span class="keyword">null</span>\r
+                               , Attribute.EDITABLE);\r
+       ATTR_FOLLOWUP = AttributeRegistry.registerAttribute(c, a);\r
+    }\r
+\r
+    <span class="preprocessor">protected</span> <span class="type">ResourceReference</span> <span class="variable-name">followup</span> = <span class="keyword">null</span>;\r
+\r
+    <span class="comment">/**\r
+     * Get the name of the resource used as a followup.\r
+     * </span><span class="keyword">@return </span><span class="comment">A String giving the name of the resource to be used as the\r
+     * default.\r
+     */</span>\r
+\r
+    <span class="reference">public</span> <span class="type">String</span> <span class="function-name">getFollowup</span>() {\r
+       <span class="keyword">return</span> getString(ATTR_FOLLOWUP, <span class="keyword">null</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="comment">/**\r
+     * Lookup the followup resource.\r
+     * </span><span class="keyword">@return </span><span class="comment">The loaded resource for the current followup.\r
+     */</span>\r
+\r
+    <span class="reference">public</span> <span class="type">synchronized</span> <span class="type">ResourceReference</span> <span class="function-name">lookupFollowup</span>() {\r
+       <span class="keyword">if</span> ( followup == <span class="keyword">null</span> ) {\r
+           <span class="type">String</span> <span class="variable-name">name</span>  = getFollowup();\r
+           <span class="keyword">if</span> ( name != <span class="keyword">null</span> ) \r
+               followup = getServer().loadRoot(name);\r
+           <span class="keyword">if</span> ( followup == <span class="keyword">null</span> ) {\r
+               getServer().errlog(getIdentifier()\r
+                                  + "<span class="string">[</span>" + getClass().getName() + "<span class="string">]: </span>"\r
+                                  + "<span class="string">unable to restore \"</span>" + name + "<span class="string">\" </span>"\r
+                                  + "<span class="string"> from root store.</span>");\r
+           }\r
+       }\r
+       <span class="keyword">return</span> followup;\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">// Try to lookup on the host header:\r
+</span>        <span class="type">ResourceReference</span> <span class="variable-name">vrroot</span> = <span class="keyword">null</span>;\r
+       <span class="type">ContainerResource</span> <span class="variable-name">root</span> = <span class="keyword">null</span>;\r
+       \r
+       root = (<span class="type">ContainerResource</span>)getResource();\r
+       <span class="type">Request</span> <span class="variable-name">r</span> = (<span class="type">Request</span>)ls.getRequest();\r
+       <span class="keyword">if</span> ( r != <span class="keyword">null</span> ) {\r
+           <span class="type">String</span>  <span class="variable-name">host</span> = r.getHost();\r
+           <span class="keyword">if</span> ( host != <span class="keyword">null</span> ) {\r
+               vrroot = root.lookup(host.toLowerCase());\r
+           }\r
+       }\r
+       <span class="keyword">if</span> ( vrroot == <span class="keyword">null</span> )\r
+           vrroot  = lookupFollowup();\r
+       <span class="comment">// Check for what we got:\r
+</span>        <span class="keyword">if</span> (vrroot == <span class="keyword">null</span>)\r
+           <span class="keyword">return</span> <span class="reference">super</span>.lookupOther(ls, lr);\r
+       <span class="keyword">try</span> {\r
+           lr.setTarget(vrroot);\r
+           <span class="type">FramedResource</span> <span class="variable-name">resource</span> = (<span class="type">FramedResource</span>) vrroot.lock();\r
+           <span class="type">boolean</span> <span class="variable-name">done</span> = \r
+             (resource != <span class="keyword">null</span> ) ? resource.lookup(ls, lr) : <span class="keyword">false</span>;\r
+           <span class="keyword">if</span> (! done)\r
+             lr.setTarget(<span class="keyword">null</span>);\r
+             <span class="comment">// because the vroot eats the lookup state components\r
+</span>              <span class="comment">// we have to return true.\r
+</span>              <span class="comment">// Should not be continued by the caller.\r
+</span>            <span class="keyword">return</span> <span class="keyword">true</span>;\r
+       } <span class="keyword">catch</span> (<span class="type">InvalidResourceException</span> <span class="variable-name">ex</span>) {\r
+           <span class="keyword">return</span> <span class="keyword">false</span>;\r
+       } <span class="keyword">finally</span> {\r
+           vrroot.unlock();\r
+       }\r
+    }\r
+}\r
+\r
+    </pre>\r
+  </body>\r
+</html>\r