--- /dev/null
+// MimeTypeAttribute.java\r
+// $Id: MimeTypeAttribute.java,v 1.1 2010/06/15 12:22:50 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.tools.resources.upgrade ;\r
+\r
+import java.io.DataInputStream;\r
+import java.io.DataOutputStream;\r
+import java.io.IOException;\r
+\r
+import org.w3c.www.mime.MimeType ;\r
+import org.w3c.www.mime.MimeTypeFormatException;\r
+\r
+/**\r
+ * The generic class of Mime type attributes.\r
+ */\r
+\r
+public class MimeTypeAttribute extends Attribute {\r
+\r
+ /**\r
+ * Is the given object a valid MimeTypeAttribute value ?\r
+ * @param obj The object to test.\r
+ * @return A boolean <strong>true</strong> if okay.\r
+ */\r
+\r
+ public boolean checkValue(Object obj) {\r
+ return (obj instanceof MimeType) || (obj == null) ;\r
+ }\r
+\r
+ /**\r
+ * Get the number of bytes required to save that attribute value.\r
+ * @param The value about to be pickled.\r
+ * @return The number of bytes needed to pickle that value.\r
+ */\r
+\r
+ public final int getPickleLength(Object value) {\r
+ String str = ((MimeType) value).toString();\r
+ int strlen = str.length() ;\r
+ int utflen = 0 ;\r
+\r
+ for (int i = 0 ; i < strlen ; i++) {\r
+ int c = str.charAt(i);\r
+ if ((c >= 0x0001) && (c <= 0x007F)) {\r
+ utflen++;\r
+ } else if (c > 0x07FF) {\r
+ utflen += 3;\r
+ } else {\r
+ utflen += 2;\r
+ }\r
+ }\r
+ return utflen + 2 ;\r
+ }\r
+\r
+ /**\r
+ * Pickle a MIME type to the given output stream.\r
+ * @param out The output stream to pickle to.\r
+ * @param obj The object to pickle.\r
+ * @exception IOException If some IO error occured.\r
+ */\r
+\r
+ public void pickle(DataOutputStream out, Object t) \r
+ throws IOException\r
+ {\r
+ if (t == null)\r
+ out.writeUTF("*none*");\r
+ else\r
+ out.writeUTF(((MimeType) t).toString()) ;\r
+ }\r
+\r
+ /**\r
+ * Unpickle a MIME type from the given input stream.\r
+ * @param in The input stream to unpickle from.\r
+ * @return An instance of String.\r
+ * @exception IOException If some IO error occured.\r
+ */\r
+\r
+ public Object unpickle (DataInputStream in) \r
+ throws IOException\r
+ {\r
+ try {\r
+ return new MimeType(in.readUTF()) ;\r
+ } catch (MimeTypeFormatException ex) {\r
+ return null;\r
+// throw new IOException("illegal MIME type.") ;\r
+ }\r
+ }\r
+\r
+ public MimeTypeAttribute(String name, MimeType def, Integer flags) {\r
+ super(name, def, flags) ;\r
+ this.type = "org.w3c.www.mime.MimeType";\r
+ }\r
+}\r