CommaSeparatedField.java
00001 package edu.virtualschool.jwaa.field;
00002
00003 import java.util.ArrayList;
00004 import java.util.Iterator;
00005
00006 import org.apache.log4j.Logger;
00007
00017 public final class CommaSeparatedField extends GenericField
00018 {
00019 public final ArrayList arrayValue;
00020
00021 public final static String sqlType = "varchar(255)";
00022 public final static CommaSeparatedField Null =
00023 new CommaSeparatedField(null, "");
00024 final static Logger logger =
00025 Logger.getLogger(CommaSeparatedField.class.getName());
00026
00027 public CommaSeparatedField(Object value)
00028 {
00029 this(value, "");
00030 }
00031 public CommaSeparatedField(Object value, Object defaultValue)
00032 {
00033 super(value, defaultValue);
00034 arrayValue = unpack(stringValue);
00035 }
00036 public CommaSeparatedField(ArrayList arrayValue)
00037 {
00038 super(pack(arrayValue), "");
00039 this.arrayValue = arrayValue;
00040 }
00041 public ArrayList getArrayValue()
00042 {
00043 return arrayValue;
00044 }
00045 public static String pack(ArrayList arrayValue)
00046 {
00047 StringBuffer buf = new StringBuffer();
00048 for (Iterator iterator = arrayValue.iterator(); iterator.hasNext();)
00049 {
00050 final String string = (String) iterator.next();
00051 final int len = string.length();
00052 for (int j = 0; j < len; j++)
00053 {
00054 int c = string.charAt(j);
00055
00056 if (c == ',' && (j < len - 1))
00057 buf.append(",,");
00058 else
00059 buf.append((char) c);
00060 }
00061 if (iterator.hasNext())
00062 buf.append((char) ',');
00063 }
00064 return buf.toString();
00065 }
00066 public static ArrayList unpack(String value)
00067 {
00068 ArrayList array = new ArrayList();
00069 if (value == null)
00070 return array;
00071 StringBuffer s = new StringBuffer();
00072 for (int i = 0; i < value.length(); i++)
00073 {
00074 int c = value.charAt(i);
00075 if (c == ',')
00076 {
00077 c = value.charAt(++i);
00078 if (c == ',')
00079 s.append(",");
00080 else
00081 {
00082 array.add(s.toString());
00083 s.setLength(0);
00084 s.append((char) c);
00085 }
00086 }
00087 else
00088 {
00089 s.append((char) c);
00090 }
00091 }
00092 array.add(s.toString());
00093 return array;
00094 }
00095 public static CommaSeparatedField createFromArray(Object[] array)
00096 {
00097 ArrayList list = new ArrayList(array.length);
00098 for (int i = 0; i < array.length; i++)
00099 list.add(array[i]);
00100 return new CommaSeparatedField(list);
00101 }
00102 }