--- /dev/null
+// StringArrayAttribute.java\r
+// $Id: StringArrayAttribute.java,v 1.1 2010/06/15 12:22:51 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
+/**\r
+ * The generic description of an StringArrayAttribute.\r
+ */\r
+\r
+public class StringArrayAttribute extends Attribute {\r
+\r
+ /**\r
+ * Turn a StringArray attribute into a String.\r
+ * We use the <em>normal</em> property convention, which is to separate\r
+ * each item with a <strong>|</strong>.\r
+ * @return A String based encoding for that value.\r
+ */\r
+\r
+ public String stringify(Object value) {\r
+ if ((value == null) || ( ! (value instanceof String[])) )\r
+ return null;\r
+ String as[] = (String[]) value;\r
+ StringBuffer sb = new StringBuffer();\r
+ for (int i = 0 ; i < as.length ; i++) {\r
+ if ( i > 0 )\r
+ sb.append('|');\r
+ sb.append(as[i]);\r
+ }\r
+ return sb.toString();\r
+ }\r
+\r
+ /**\r
+ * Is the given object a valid StringArrayAttribute 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 String[]) ;\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 int getPickleLength(Object value) {\r
+ String strs[] = (String[]) value;\r
+ int sz = 4;\r
+ for (int n = 0 ; n < strs.length ; n++) {\r
+ String str = strs[n];\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
+ sz += (utflen+2);\r
+ }\r
+ return sz;\r
+ }\r
+\r
+ /**\r
+ * Pickle a String array 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 sa) \r
+ throws IOException\r
+ {\r
+ String strs[] = (String[]) sa ;\r
+ out.writeInt(strs.length) ;\r
+ for (int i = 0 ; i < strs.length ; i++)\r
+ out.writeUTF(strs[i]) ;\r
+ }\r
+\r
+ /**\r
+ * Unpickle an String array 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
+ int cnt = in.readInt() ;\r
+ String strs[] = new String[cnt] ;\r
+ for (int i = 0 ; i < cnt ; i++)\r
+ strs[i] = in.readUTF() ;\r
+ return strs ;\r
+ }\r
+\r
+ public StringArrayAttribute(String name, String def[], Integer flags) {\r
+ super(name, def, flags) ;\r
+ this.type = "java.lang.String[]";\r
+ }\r
+\r
+}\r