001: /*
002: * Copyright 2004-2008 Andy Clark
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.cyberneko.html;
018:
019: import org.apache.xerces.xni.Augmentations;
020:
021: import java.util.Enumeration;
022: import java.util.Hashtable;
023:
024: /**
025: * This class is here to overcome the XNI changes to the
026: * <code>Augmentations</code> interface. In early versions of XNI, the
027: * augmentations interface contained a <code>clear()</code> method to
028: * remove all of the items from the augmentations instance. A later
029: * version of XNI changed this method to <code>removeAllItems()</code>.
030: * Therefore, this class extends the augmentations interface and
031: * explicitly implements both of these methods.
032: * <p>
033: * <strong>Note:</strong>
034: * This code is inspired by performance enhancements submitted by
035: * Marc-André Morissette.
036: *
037: * @author Andy Clark
038: */
039: public class HTMLAugmentations implements Augmentations {
040:
041: //
042: // Data
043: //
044:
045: /** Augmentation items. */
046: protected Hashtable fItems = new Hashtable();
047:
048: //
049: // Public methods
050: //
051:
052: // since Xerces 2.3.0
053:
054: /** Removes all of the elements in this augmentations object. */
055: public void removeAllItems() {
056: fItems.clear();
057: } // removeAllItems()
058:
059: // from Xerces 2.0.0 (beta4) until 2.3.0
060:
061: /** Removes all of the elements in this augmentations object. */
062: public void clear() {
063: fItems.clear();
064: } // clear()
065:
066: //
067: // Augmentations methods
068: //
069:
070: /**
071: * Add additional information identified by a key to the Augmentations
072: * structure.
073: *
074: * @param key Identifier, can't be <code>null</code>
075: * @param item Additional information
076: *
077: * @return The previous value of the specified key in the Augmentations
078: * structure, or <code>null</code> if it did not have one.
079: */
080: public Object putItem(String key, Object item) {
081: return fItems.put(key, item);
082: } // putItem(String, Object):Object
083:
084: /**
085: * Get information identified by a key from the Augmentations structure.
086: *
087: * @param key Identifier, can't be <code>null</code>
088: *
089: * @return The value to which the key is mapped in the Augmentations
090: * structure; <code>null</code> if the key is not mapped to any
091: * value.
092: */
093: public Object getItem(String key) {
094: return fItems.get(key);
095: } // getItem(String):Object
096:
097: /**
098: * Remove additional info from the Augmentations structure
099: *
100: * @param key Identifier, can't be <code>null</code>
101: * @return The previous value of the specified key in the Augmentations
102: * structure, or <code>null</code> if it did not have one.
103: */
104: public Object removeItem(String key) {
105: return fItems.remove(key);
106: } // removeItem(String):Object
107:
108: /**
109: * Returns an enumeration of the keys in the Augmentations structure.
110: */
111: public Enumeration keys() {
112: return fItems.keys();
113: } // keys():Enumeration
114:
115: } // class HTMLAugmentations
|