Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / src / org / w3c / www / http / HttpExtList.java
diff --git a/JMCR-Stable/real-world application/jigsaw/src/org/w3c/www/http/HttpExtList.java b/JMCR-Stable/real-world application/jigsaw/src/org/w3c/www/http/HttpExtList.java
new file mode 100644 (file)
index 0000000..6ac3d5c
--- /dev/null
@@ -0,0 +1,206 @@
+// HttpExt.java\r
+// $Id: HttpExtList.java,v 1.1 2010/06/15 12:19:46 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1999.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+\r
+package org.w3c.www.http;\r
+\r
+import java.util.Vector;\r
+import java.util.Enumeration;\r
+\r
+/**\r
+ * @version $Revision: 1.1 $\r
+ * @author  Benoît Mahé (bmahe@w3.org)\r
+ * Parse a comma separated list of Http extension headers.\r
+ */\r
+\r
+public class HttpExtList extends BasicValue {\r
+\r
+    //\r
+    // Is this list a Mandatory, Optionnal, hop-by-Hop Mandatory or hop-by-Hop\r
+    // Optionnal?\r
+\r
+    public static final int MAN      = 0;\r
+    public static final int CMAN     = 1;\r
+    public static final int OPT      = 2;\r
+    public static final int COPT     = 3;\r
+\r
+   \r
+    Vector httpexts = null;\r
+    int    manopt   = MAN;\r
+\r
+    public int getManOptFlag() {\r
+       return manopt;\r
+    }\r
+\r
+    protected void setManOptFlag(int manopt) {\r
+       this.manopt = manopt;\r
+    }\r
+\r
+    /**\r
+     * Parse this header value into its various components.\r
+     * @exception HttpParserException if unable to parse.\r
+     */\r
+    protected void parse() \r
+       throws HttpParserException\r
+    {\r
+       //extension declaration list parser\r
+       ParseState edl = new ParseState(roff, rlen);\r
+       //attr-value pair\r
+       ParseState av  = new ParseState(0, 0);\r
+       //item parser\r
+       ParseState it  = new ParseState(0, 0);\r
+\r
+       edl.separator  = (byte) ',';\r
+       edl.spaceIsSep = false;\r
+       av.separator   = (byte) ';';\r
+       av.spaceIsSep  = false;\r
+       it.separator   = (byte) '=';\r
+       it.spaceIsSep = false;\r
+\r
+       while ( HttpParser.nextItem(raw, edl) >= 0 ) {\r
+           av.ioff   = edl.start;\r
+           av.bufend = edl.end;\r
+           HttpExt ext = new HttpExt();\r
+           \r
+           while ( HttpParser.nextItem(raw, av) >= 0 ) {\r
+               it.ioff   = av.start;\r
+               it.bufend = av.end;\r
+               // attr = value or "absoluteURI" or "field-name"\r
+               boolean unquoted       = HttpParser.unquote(raw, it);\r
+               if ( HttpParser.nextItem(raw, it) < 0 )\r
+                   error("Invalid extension item ["+av.toString(raw)+"]");\r
+               String itemNaturalCase = it.toString(raw);\r
+               String item            = it.toString(raw, true);\r
+               // if (item.charAt(0) == '"') {\r
+               if (unquoted) {\r
+                   // "absoluteURI" or "field-name"\r
+                   ext.setName(itemNaturalCase);\r
+               } else {\r
+                   it.prepare();\r
+                   HttpParser.unquote(raw, it);\r
+                   if ( HttpParser.nextItem(raw, it) < 0 )\r
+                           error("No value for attribute ["+item+"]");\r
+                   if ( item.equals("ns") ) {\r
+                       ext.setNamespace(it.toString(raw));\r
+                   } else {\r
+                       ext.addDeclExt(itemNaturalCase, it.toString(raw));\r
+                   }\r
+               }\r
+               av.prepare();\r
+           }\r
+           edl.prepare();\r
+           httpexts.addElement(ext);\r
+       }\r
+    }\r
+\r
+    protected void updateByteValue() {\r
+       HttpBuffer buf = new HttpBuffer();\r
+       //Dump all extensions declaration\r
+       int len = httpexts.size();\r
+       for (int i=0; i < len; i++) {\r
+           HttpExt ext = (HttpExt) httpexts.elementAt(i);\r
+           if (i != 0)\r
+               buf.append(", ");\r
+           buf.appendQuoted(ext.getName());\r
+           if (ext.needsHeaders()) {\r
+               buf.append(";");\r
+               buf.append("ns",(byte)'=',ext.getNamespace());\r
+           }\r
+           Enumeration e = ext.getDeclExtNames();\r
+           while (e.hasMoreElements()) {\r
+               String name = (String) e.nextElement();\r
+               buf.append("; ");\r
+               buf.append(name, (byte)'=', ext.getDeclExt(name));\r
+           }\r
+       }\r
+       raw  = buf.getByteCopy();\r
+       roff = 0;\r
+       rlen = raw.length;\r
+    }\r
+\r
+    /**\r
+     * Add an Http extension header.\r
+     * @param ext an HttpExt.\r
+     */\r
+    public void addHttpExt(HttpExt ext) {\r
+       validate();\r
+       httpexts.addElement(ext);\r
+    }\r
+\r
+    /**\r
+     * Get all Http extensions header.\r
+     * @return an HttpExt array.\r
+     */\r
+    public HttpExt[] getHttpExts() {\r
+       validate();\r
+       HttpExt exts[] = new HttpExt[httpexts.size()];\r
+       httpexts.copyInto(exts);\r
+       return exts;\r
+      }\r
+\r
+    public int getLength() {\r
+       validate();\r
+       return httpexts.size();\r
+    }\r
+\r
+    /**\r
+     * Get an Http extension header.\r
+     * @param name The extension identifier (AbsoluteURI or field name)\r
+     * @return an HttpExt or <strong>null</strong>.\r
+     */\r
+    public HttpExt getHttpExt(String name) {\r
+       validate();\r
+       for (int i=0; i < httpexts.size(); i++) {\r
+           HttpExt ext = (HttpExt) httpexts.elementAt(i);\r
+           if (ext.getName().equals(name))\r
+               return ext;\r
+       }\r
+       return null;\r
+    }\r
+\r
+    public Object getValue() {\r
+       return this;\r
+    }\r
+\r
+    /**\r
+     * for user.\r
+     * @param exts the HttpExt array.\r
+     */\r
+    public HttpExtList(HttpExt exts[]) {\r
+       this.isValid  = true;\r
+       int len       = exts.length;\r
+       this.httpexts = new Vector(len);\r
+       if (exts != null) {\r
+           for (int i=0; i < len; i++)\r
+               httpexts.addElement(exts[i]);\r
+       }\r
+    }\r
+\r
+    /**\r
+     * Constructor, for User\r
+     * @param old the old Http extension declaration list \r
+     * If you want to reply the same extensions, use this\r
+     * contructor.\r
+     */\r
+    public HttpExtList(HttpExtList old) {\r
+       this.isValid  = true;\r
+       old.validate();\r
+       int len       = old.httpexts.size();\r
+       this.httpexts = new Vector(len);\r
+       for (int i=0; i < len; i++) {   \r
+           HttpExt newext = new HttpExt((HttpExt)old.httpexts.elementAt(i));\r
+           this.httpexts.addElement(newext);\r
+       }\r
+       this.manopt = old.manopt;\r
+    }\r
+\r
+    /**\r
+     * for parser only\r
+     */\r
+    protected HttpExtList() {\r
+       this.isValid = false;\r
+       this.httpexts = new Vector(2);\r
+    }\r
+\r
+}\r