001: package webman.stager;
002:
003: import java.util.*;
004:
005: /**
006: * Hilfsklasse zur Zusammenfassung aller SiteTransmitter-Properties
007: * Primärer Unterschied zu Java-Properties ist die CaseInsensivität der Keys
008: * @author torsten
009: * @version $Revision: 1.6 $
010: */
011: public class PropertySet {
012: private Hashtable hashtable;
013:
014: /**
015: * Konstruiert leeres PropertySet
016: */
017: public PropertySet() {
018: hashtable = new Hashtable();
019: }
020:
021: /**
022: * wandelt Properties oder property-artige Hashtable in PropertySet um
023: * @param eine Hashtable mit Strings als Keys
024: */
025: public PropertySet(Hashtable h) {
026: this ();
027: Enumeration keys = h.keys();
028: String key;
029: while (keys.hasMoreElements()) {
030: key = (String) (keys.nextElement());
031: set(key.toLowerCase(), h.get(key));
032: }
033: }
034:
035: /**
036: * wandelt Properties aus einem com.teamkonzept.lib.PropertyManager in PropertySet um
037: * @param ein com.teamkonzept.lib.PropertyManager
038: */
039: public PropertySet(com.teamkonzept.lib.PropertyManager p) {
040: this ();
041: Enumeration keys = p.getKeys();
042: String key;
043: while (keys.hasMoreElements()) {
044: key = (String) (keys.nextElement());
045: set(key.toLowerCase(), p.getValue(key));
046: }
047: }
048:
049: /**
050: * setzt eine Property des gegebenen Namens auf den gegebenen Wert.
051: * ist die Property schon vorhanden, so wird sie überschrieben
052: * Nullwerte werden nicht eingetragen
053: * @param key Name der Property
054: * @param value Wert der Property; null wird nicht weitergereicht
055: */
056: public void set(String key, Object value) {
057: if (value != null) //man darf keine Nullwerte einfügen!
058: {
059: hashtable.put(key.toLowerCase().trim(), value);
060: }
061: }
062:
063: /**
064: * @param key Name der Property
065: * @return Property mit diesem Namen; wenn key nicht vorhanden, dann null
066: */
067: public String get(String key) {
068: String result = (String) (hashtable.get(key.toLowerCase()
069: .trim()));
070: if (result != null) {
071: return result.trim();
072: } else {
073: return null;
074: }
075: }
076:
077: /**
078: * alle vorhandenen Properties, deren Keys mit einem bestimmten Wort beginnen,
079: * werden aus den PropertySet gelesen und als Vector zurückgegeben
080: * dabei werden die Werte sortiert nach der lexikalischen Reihenfolge der Key-Suffixe
081: * @param Zeichenkette, mit der die entsprechenden Keys beginnen
082: * @return einen sortierter Vector mit allen zutreffenden Propertywerten
083: */
084: public Vector getPropertyGroup(String keyStub) {
085: //Auslese der gesuchten Keys
086: Vector selectedKeys = new Vector();
087: Enumeration allKeys = hashtable.keys();
088: String key;
089: keyStub = keyStub.toLowerCase();
090: while (allKeys.hasMoreElements()) {
091: key = (String) (allKeys.nextElement());
092: if (key.startsWith(keyStub)) {
093: selectedKeys.add(key);
094: }
095: }
096: //Keys lexikalisch aufsteigend sortieren
097: Object[] array = selectedKeys.toArray();
098: Arrays.sort(array);
099: //Values in dieser Reihenfolge rausholen
100: Vector result = new Vector();
101: for (int i = 0; i < array.length; i++) {
102: result.add(get((String) array[i]));
103: }
104: return result;
105: }
106:
107: /**
108: * alle vorhandenen ReceiverProperties (erkennbar am Präfix "Receiver" werden aus den PropertySet
109: * gelesen und als Hashtable zurückgegeben
110: * @return einen Hashtable mit allen vorhandenen ReceiverProperties
111: */
112: public Hashtable getReceiverProperties() {
113: Hashtable result = new Hashtable();
114: Enumeration keys = hashtable.keys();
115: String key;
116: while (keys.hasMoreElements()) {
117: key = (String) (keys.nextElement());
118: if (key.toLowerCase().startsWith("receiver")) {
119: result.put(key, hashtable.get(key));
120: }
121: }
122: return result;
123: }
124:
125: //DEBUG:
126: String debugDump() {
127: final String NEW_LINE = System.getProperty("line.separator");
128: Enumeration keys = hashtable.keys();
129: String key, result = "";
130: while (keys.hasMoreElements()) {
131: key = (String) keys.nextElement();
132: result += "DEBUG: key=" + key + " value=" + get(key)
133: + NEW_LINE;
134: }
135: return result;
136: }
137: }
|