--- /dev/null
+// DAVIfList.java\r
+// $Id: DAVIfList.java,v 1.1 2010/06/15 12:27:43 smhuang Exp $\r
+// (c) COPYRIGHT MIT, INRIA and Keio, 2000.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+package org.w3c.www.webdav;\r
+\r
+import java.util.Vector;\r
+import java.util.LinkedList;\r
+import java.util.ListIterator;\r
+\r
+import org.w3c.www.http.BasicValue;\r
+\r
+/**\r
+ * @version $Revision: 1.1 $\r
+ * @author Benoît Mahé (bmahe@w3.org)\r
+ */\r
+public class DAVIfList extends BasicValue {\r
+\r
+ public static final boolean debug = false;\r
+\r
+ DAVIf davifs[] = null;\r
+\r
+ boolean tagged = false;\r
+\r
+ protected void parse() {\r
+ Vector vdavifs = new Vector();\r
+\r
+ if (debug) {\r
+ System.out.println("PARSING IF HEADER");\r
+ }\r
+ // for end of list ( ... )\r
+ ParseState list = new ParseState(0, raw.length);\r
+ list.separator = (byte) ')';\r
+ list.spaceIsSep = false;\r
+ // for beginning of list\r
+ ParseState blist = new ParseState(0, 0);\r
+ blist.separator = (byte) '(';\r
+ blist.spaceIsSep = false;\r
+ // for state token <...>\r
+ ParseState st = new ParseState(0, 0);\r
+ st.separator = (byte) '>';\r
+ st.spaceIsSep = false;\r
+\r
+ DAVIf davif = null;\r
+ if (DAVParser.nextItem(raw, list) >= 0) {\r
+ if (DAVParser.startsWith(raw, list, '<')) {\r
+ tagged = true;\r
+ do {\r
+ if (DAVParser.startsWith(raw, list, '<')) {\r
+ davif = null;\r
+ }\r
+ blist.prepare(list);\r
+ while (DAVParser.nextItem(raw, blist) >= 0) {\r
+ // the tagged resource\r
+ if ((DAVParser.startsWith(raw, blist, '<')) &&\r
+ (davif == null)) \r
+ {\r
+ davif = new DAVIf(blist.toString(raw));\r
+ vdavifs.addElement(davif);\r
+ if (debug) {\r
+ System.out.println("Res : "+\r
+ davif.getResource());\r
+ }\r
+ //list.start = st.end;\r
+ } else {\r
+ // another list for our tagged resource\r
+ if (debug) {\r
+ String slist = blist.toString(raw);\r
+ System.out.println("LIST : "+slist);\r
+ }\r
+ davif.addList(raw, blist.start, blist.end);\r
+ }\r
+ }\r
+ } while (DAVParser.nextItem(raw, list) >= 0);\r
+ } else {\r
+ // (... ... ...) (... ... ...)\r
+ tagged = false;\r
+ davif = new DAVIf();\r
+ vdavifs.addElement(davif);\r
+ do {\r
+ blist.prepare(list);\r
+ while (DAVParser.nextItem(raw, blist) >= 0) {\r
+ if (debug) {\r
+ System.out.println(blist.toString(raw));\r
+ }\r
+ davif.addList(raw, blist.start, blist.end);\r
+ }\r
+ } while (DAVParser.nextItem(raw, list) >= 0);\r
+ }\r
+ }\r
+ // Ok good\r
+ davifs = new DAVIf[vdavifs.size()];\r
+ vdavifs.copyInto(davifs);\r
+ }\r
+\r
+ protected void updateByteValue() {\r
+ if (davifs != null) {\r
+ StringBuffer buf = new StringBuffer();\r
+ for (int i = 0; i < davifs.length ; i++) {\r
+ DAVIf davif = davifs[i];\r
+ if (davif.hasResource()) {\r
+ buf.append("<").append(davif.getResource()).append("> ");\r
+ }\r
+ ListIterator iterator = davif.getTokenListIterator();\r
+ while (iterator.hasNext()) {\r
+ LinkedList list = (LinkedList) iterator.next();\r
+ ListIterator it = list.listIterator(0);\r
+ buf.append("(");\r
+ while (it.hasNext()) {\r
+ Object token = (String) it.next();\r
+ String item = token.toString();\r
+ if (it.hasNext()) {\r
+ buf.append(item).append(" ");\r
+ } else {\r
+ buf.append(item);\r
+ }\r
+ }\r
+ buf.append(")");\r
+ }\r
+ }\r
+ raw = buf.toString().getBytes();\r
+ roff = 0;\r
+ rlen = raw.length;\r
+ } else {\r
+ raw = new byte[0];\r
+ roff = 0;\r
+ rlen = 0;\r
+ }\r
+ }\r
+\r
+ public Object getValue() {\r
+ validate();\r
+ return davifs;\r
+ }\r
+\r
+ public boolean isTaggedList() {\r
+ return tagged;\r
+ }\r
+\r
+ public DAVIfList() {\r
+ this.isValid = false;\r
+ }\r
+ \r
+}\r