Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

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         // double internal comma signs
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 }