--- /dev/null
+// HttpAcceptCharset.java\r
+// $Id: HttpAcceptCharset.java,v 1.1 2010/06/15 12:19:44 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1996.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+\r
+package org.w3c.www.http;\r
+\r
+public class HttpAcceptCharset extends BasicValue {\r
+ String charset = null;\r
+ double quality = 1.0;\r
+ HttpAcceptCharsetList list = null;\r
+\r
+ /**\r
+ * parse.\r
+ * @exception HttpParserException if parsing failed.\r
+ */\r
+ protected void parse() \r
+ throws HttpParserException\r
+ {\r
+ ParseState ps = new ParseState(roff, rlen);\r
+ ps.separator = (byte) ';';\r
+ ps.spaceIsSep = false;\r
+ // Get the charset:\r
+ if ( HttpParser.nextItem(raw, ps) < 0 )\r
+ error("Invalid Accept-Charset: no charset.");\r
+ this.charset = new String(raw, 0, ps.start, ps.end-ps.start);\r
+ // And the optional quality:\r
+ ps.prepare();\r
+ ps.separator = (byte) '=';\r
+ if ( HttpParser.nextItem(raw, ps) < 0 ) {\r
+ this.quality = 1.0;\r
+ } else {\r
+ ps.prepare();\r
+ this.quality = HttpParser.parseQuality(raw, ps);\r
+ }\r
+ }\r
+\r
+ protected void invalidateByteValue() {\r
+ super.invalidateByteValue();\r
+ if ( list != null )\r
+ list.invalidateByteValue();\r
+ }\r
+\r
+ protected void updateByteValue() {\r
+ HttpBuffer buf = new HttpBuffer();\r
+ buf.append(charset);\r
+ buf.append(';');\r
+ buf.append(quality);\r
+ raw = buf.getByteCopy();\r
+ roff = 0;\r
+ rlen = raw.length;\r
+ }\r
+\r
+ public Object getValue() {\r
+ validate();\r
+ return this;\r
+ }\r
+\r
+ /**\r
+ * Get this accept charset clause charset.\r
+ * @return A String encoding the charset token.\r
+ */\r
+\r
+ public String getCharset() {\r
+ validate();\r
+ return charset;\r
+ }\r
+\r
+ /**\r
+ * Set the charset accepted by this clause.\r
+ * @param charset The accepted charset.\r
+ */\r
+\r
+ public void setCharset(String charset) {\r
+ if ( this.charset.equals(charset) )\r
+ return;\r
+ invalidateByteValue();\r
+ this.charset = charset;\r
+ }\r
+\r
+ /**\r
+ * Get the quality at which this charset is accepted.\r
+ * @return A double value, encoding the quality, or <strong>1.0</strong>\r
+ * if undefined.\r
+ */\r
+\r
+ public double getQuality() {\r
+ validate();\r
+ return quality;\r
+ }\r
+\r
+ /**\r
+ * Set the quality under which this charset is accepted.\r
+ * @param q The quality for this charset.\r
+ */\r
+\r
+ public void setQuality(double quality) {\r
+ if ( this.quality != quality )\r
+ invalidateByteValue();\r
+ this.quality = quality;\r
+ }\r
+\r
+ HttpAcceptCharset(HttpAcceptCharsetList list, byte raw[], int o, int l) {\r
+ this.list = list;\r
+ this.raw = raw;\r
+ this.roff = o;\r
+ this.rlen = l;\r
+ this.isValid = false;\r
+ }\r
+\r
+ HttpAcceptCharset(boolean isValid, String charset, double quality) {\r
+ this.isValid = isValid;\r
+ setCharset(charset);\r
+ setQuality(quality);\r
+ }\r
+\r
+ public HttpAcceptCharset() {\r
+ this.isValid = false;\r
+ }\r
+\r
+}\r