001: /*
002: * VelocityDatabase.java January 2004
003: *
004: * Copyright (C) 2003, Niall Gallagher <niallg@users.sf.net>
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013: * GNU Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General
016: * Public License along with this library; if not, write to the
017: * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
018: * Boston, MA 02111-1307 USA
019: */
020:
021: package simple.template.velocity;
022:
023: import org.apache.velocity.context.Context;
024: import simple.template.Database;
025: import java.util.HashSet;
026: import java.util.Set;
027:
028: /**
029: * The <code>VelocityDatabase</code> provides an adapter database
030: * implementation for the <code>Context</code> object. This will
031: * be unsynchronized and delegates to a <code>Context</code>
032: * object internally, which can be specified on instantiation.
033: *
034: * @author Niall Gallagher
035: */
036: class VelocityDatabase implements Database {
037:
038: /**
039: * The internal storage used by this instance.
040: */
041: protected Context data;
042:
043: /**
044: * Constructor for the <code>VelocityDatabase</code>. This
045: * will create a database without any specific inner storage.
046: * This should be used by subclasses that wish to specify the
047: * storage that is used by the instance.
048: */
049: protected VelocityDatabase() {
050: super ();
051: }
052:
053: /**
054: * Constructor for the <code>VelocityDatabase</code>. This
055: * will create a database that uses the specified object as
056: * its internal storage. This should be used as an adapter for
057: * the <code>org.apache.velocity.context.Context</code> object.
058: *
059: * @param data this contains a set of mappings to be used
060: */
061: public VelocityDatabase(Context data) {
062: this .data = data;
063: }
064:
065: /**
066: * The <code>put</code> method is used to insert a mapping in
067: * the database that pairs the issued name with the issued
068: * value. The value can be referenced in future by its name.
069: * Properties set with this method will be set within this
070: * instances data source, which is available to subclasses.
071: *
072: * @param name this is the name of the value being inserted
073: * @param value this is the named value that is inserted
074: */
075: public void put(String name, Object value) {
076: data.put(name, value);
077: }
078:
079: /**
080: * The <code>get</code> method is used to retrieve the value
081: * mapped to the specified name. If a value does not exist
082: * matching the given name, then this returns null. All the
083: * property values retrieved by this method are obtained
084: * from an internal source that is accessible to subclasses.
085: *
086: * @param name this is the name of the value to be retrieved
087: *
088: * @return returns the value if it exists or null otherwise
089: */
090: public Object get(String name) {
091: return data.get(name);
092: }
093:
094: /**
095: * The <code>remove</code> method is used to remove the
096: * mapping from the database. This method either removes
097: * the value or returns silently if the name does not exist.
098: * This removes the mapping from the internal data source.
099: *
100: * @param name this is the name of the value to be removed
101: */
102: public void remove(String name) {
103: data.remove(name);
104: }
105:
106: /**
107: * To ascertain what mappings exist, the names of all values
108: * previously put into this database can be retrieved with
109: * this method. This will return a <code>Set</code> that
110: * contains the names of all the mappings added to this.
111: *
112: * @return this returns all the keys for existing mappings
113: */
114: public Set keySet() {
115: return keySet(data.getKeys());
116: }
117:
118: /**
119: * To ascertain what mappings exist, the names of all values
120: * previously put into this database can be retrieved with
121: * this method. This will return a <code>Set</code> that
122: * contains the names of all the mappings added to this.
123: *
124: * @param list this is the list of keys used by the database
125: *
126: * @return this returns the the keys for existing mappings
127: */
128: private Set keySet(Object[] list) {
129: Set set = new HashSet();
130:
131: for (int i = 0; i < list.length; i++) {
132: set.add(list[i]);
133: }
134: return set;
135: }
136:
137: /**
138: * The <code>contains</code> method is used to determine if
139: * a mapping exists for the given name. This returns true if
140: * the mapping exists or false otherwise.
141: *
142: * @param name this is the name of the mapping to determine
143: *
144: * @return returns true if a mapping exists, false otherwise
145: */
146: public boolean contains(String name) {
147: return data.containsKey(name);
148: }
149: }
|