KickJava   Java API By Example, From Geeks To Geeks.

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


1 package org.sapia.archie.impl;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Map JavaDoc;
7
8 import org.sapia.archie.AbstractNode;
9 import org.sapia.archie.Entry;
10 import org.sapia.archie.NameParser;
11 import org.sapia.archie.NamePart;
12 import org.sapia.archie.NodeFactory;
13 import org.sapia.archie.ProcessingException;
14
15
16 /**
17  * An instance of this class tolerates only one value for a given name.
18  *
19  * @author Yanick Duchesne
20  *
21  * <dl>
22  * <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>
23  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
24  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
25  * </dl>
26  */

27 public class SingleValueNode extends AbstractNode {
28   protected Map JavaDoc _values;
29
30   public SingleValueNode(Map JavaDoc children, Map JavaDoc values, NodeFactory fac)
31                   throws ProcessingException {
32     super(children, fac);
33     _values = values;
34   }
35   
36   public SingleValueNode(NameParser parser, Map JavaDoc children, Map JavaDoc values, NodeFactory fac)
37                   throws ProcessingException {
38     super(parser, children, fac);
39     _values = values;
40   }
41
42   /**
43    * @see org.sapia.archie.Node#getValue(NamePart)
44    */

45   public Object JavaDoc getValue(NamePart name) {
46     Object JavaDoc val = _values.get(name);
47
48     if (val != null) {
49       return onRead(name, val);
50     }
51
52     return val;
53   }
54   
55   /**
56    * @see org.sapia.archie.Node#removeValue(NamePart)
57    */

58   public Object JavaDoc removeValue(NamePart name) {
59     Object JavaDoc val = getValue(name);
60     _values.remove(name);
61     return val;
62   }
63
64
65   /**
66    * @see org.sapia.archie.Node#putValue(NamePart, Object, boolean)
67    */

68   public boolean putValue(NamePart name, Object JavaDoc value, boolean overwrite) {
69     if (!overwrite && _values.containsKey(name)) {
70       return false;
71     } else {
72       value = onWrite(name, value);
73       _values.put(name, value);
74
75       return true;
76     }
77   }
78
79   /**
80    * @see org.sapia.archie.Node#getValueCount()
81    */

82   public int getValueCount() {
83     return _values.size();
84   }
85   
86   /**
87    * @see org.sapia.archie.Node#getValueNames()
88    */

89   public Iterator JavaDoc getValueNames() {
90     return _values.keySet().iterator();
91   }
92   
93   /**
94    * @see org.sapia.archie.Node#getEntries()
95    */

96   public Iterator JavaDoc getEntries() {
97     List JavaDoc entries = new ArrayList JavaDoc(_values.size());
98     Iterator JavaDoc items = _values.entrySet().iterator();
99     Map.Entry JavaDoc entry;
100     while(items.hasNext()){
101       entry = (Map.Entry JavaDoc)items.next();
102       entries.add(new Entry(entry.getKey().toString(), entry.getValue()));
103     }
104     return entries.iterator();
105   }
106
107   protected Object JavaDoc onRead(NamePart np, Object JavaDoc toRead) {
108     return toRead;
109   }
110
111   protected Object JavaDoc onWrite(NamePart np, Object JavaDoc o) {
112     return o;
113   }
114 }
115
Popular Tags