KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > archie > impl > AttributeNameParser


1 package org.sapia.archie.impl;
2
3 import java.util.StringTokenizer JavaDoc;
4
5 import org.sapia.archie.Name;
6 import org.sapia.archie.NameParser;
7 import org.sapia.archie.NamePart;
8 import org.sapia.archie.ProcessingException;
9
10 /**
11  * @author Yanick Duchesne
12  * <dl>
13  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2003 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
14  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
15  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
16  * </dl>
17  */

18 public class AttributeNameParser implements NameParser{
19   
20   static final char QMARK = '?';
21   static final String JavaDoc AMP = "&";
22   static final char EQ = '=';
23   static final String JavaDoc SLASH = "/";
24   static final char SEPARATOR = '/';
25   
26   /**
27    * @see org.sapia.archie.NameParser#asString(org.sapia.archie.Name)
28    */

29   public String JavaDoc asString(Name name) {
30     StringBuffer JavaDoc buff = new StringBuffer JavaDoc();
31     for(int i = 0; i < name.count(); i++){
32       buff.append(name.get(i).asString());
33       if(i < name.count() - 1){
34         buff.append(SEPARATOR);
35       }
36     }
37     return buff.toString();
38   }
39   /**
40    * @see org.sapia.archie.NameParser#parse(java.lang.String)
41    */

42   public Name parse(String JavaDoc name) throws ProcessingException {
43     Name n = new Name();
44     StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
45
46     for (int i = 0; i < name.length(); i++) {
47       if (name.charAt(i) == SEPARATOR) {
48         n.add(parseNamePart(buf.toString()));
49         buf.delete(0, buf.length());
50       } else {
51         buf.append(name.charAt(i));
52       }
53     }
54
55     if (buf.length() > 0) {
56       n.add(parseNamePart(buf.toString()));
57     }
58
59     return n;
60   }
61   /**
62    * @see org.sapia.archie.NameParser#parseNamePart(java.lang.String)
63    */

64   public NamePart parseNamePart(String JavaDoc namePart) throws ProcessingException {
65     AttributeNamePart anp = new AttributeNamePart();
66     parseName(anp, namePart);
67     return anp;
68   }
69   private void parseName(AttributeNamePart anp, String JavaDoc name) {
70     int idx = name.indexOf(QMARK);
71
72     if (idx < 0) {
73       anp.setName(name);
74
75       return;
76     }
77
78     anp.setName(name.substring(0, idx));
79
80     if (idx == (name.length() - 1)) {
81       return;
82     }
83
84     parseProperties(anp, name.substring(idx + 1));
85   }
86
87   /* takes prop1=val1&prop2=val2&prop3=val3 */
88   private void parseProperties(AttributeNamePart anp, String JavaDoc props) {
89     StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(props, AMP);
90     String JavaDoc token;
91
92     while (st.hasMoreTokens()) {
93       token = st.nextToken();
94       parseProperty(anp, token);
95     }
96   }
97
98   /* takes prop1=val1 */
99   private void parseProperty(AttributeNamePart anp, String JavaDoc prop) {
100     String JavaDoc name = null;
101     String JavaDoc value = null;
102
103     int idx = prop.indexOf(EQ);
104
105     if (idx < 0) {
106       if (prop.length() > 0) {
107         name = prop;
108       }
109     } else {
110       name = prop.substring(0, idx);
111
112       if (idx != (prop.length() - 1)) {
113         value = prop.substring(idx + 1);
114       }
115     }
116
117     if (name != null && value != null) {
118       anp.addProperty(name, value);
119     }
120   }
121 }
122
Popular Tags