001    // License: GPL.
002    package org.openstreetmap.josm.data.gpx;
003    
004    import java.util.Collection;
005    import java.util.HashMap;
006    import java.util.Map;
007    
008    /**
009     * Base class for various classes in the GPX model.
010     *
011     * @author Frederik Ramm <frederik@remote.org>
012     * @since 444
013     */
014    public class WithAttributes {
015    
016        /**
017         * The "attr" hash is used to store the XML payload (not only XML attributes!)
018         */
019        public Map<String, Object> attr = new HashMap<String, Object>(0);
020    
021        /**
022         * Returns the String value to which the specified key is mapped, 
023         * or {@code null} if this map contains no String mapping for the key.
024         *  
025         * @param key the key whose associated value is to be returned
026         * @return the String value to which the specified key is mapped, 
027         *         or {@code null} if this map contains no String mapping for the key
028         */
029        public String getString(String key) {
030            Object value = attr.get(key);
031            return (value instanceof String) ? (String)value : null;
032        }
033        
034        /**
035         * Returns the Collection value to which the specified key is mapped, 
036         * or {@code null} if this map contains no Collection mapping for the key.
037         *  
038         * @param key the key whose associated value is to be returned
039         * @return the Collection value to which the specified key is mapped, 
040         *         or {@code null} if this map contains no Collection mapping for the key
041         * @since 5502
042         */
043        public Collection<?> getCollection(String key) {
044            Object value = attr.get(key);
045            return (value instanceof Collection<?>) ? (Collection<?>)value : null;
046        }
047    }