001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Kernel/Sources/es/udc/mypersonalizer/kernel/model/properties/PropertyStructure.java,v 1.1.1.1 2004/03/25 12:08:37 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:37 $
005: *
006: * =============================================================================
007: *
008: * Copyright (c) 2003, The MyPersonalizer Development Group
009: * (http://www.tic.udc.es/~fbellas/mypersonalizer/index.html) at
010: * University Of A Coruna
011: * All rights reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions are met:
015: *
016: * - Redistributions of source code must retain the above copyright notice,
017: * this list of conditions and the following disclaimer.
018: *
019: * - Redistributions in binary form must reproduce the above copyright notice,
020: * this list of conditions and the following disclaimer in the documentation
021: * and/or other materials provided with the distribution.
022: *
023: * - Neither the name of the University Of A Coruna nor the names of its
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
028: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
029: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
030: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
031: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
032: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
033: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
034: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
035: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
036: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
037: * POSSIBILITY OF SUCH DAMAGE.
038: *
039: */
040:
041: package es.udc.mypersonalizer.kernel.model.properties;
042:
043: import java.util.Map;
044: import java.util.HashMap;
045: import java.io.Serializable;
046:
047: /**
048: * This class represents a structure of properties. That is, in concept, it is
049: * like a C/C++ struct or a Java class with public attributes. The class
050: * allows to put and get properties, and to see it as a
051: * <code>java.util.Map</code> that maps simple names into properties. In
052: * general, developers should use the methods <code>get(String)</code> and
053: * <code>put()</code> of this class to accesses properties, and the method
054: * <code>getAsMap()</code> when more sophisticated operations need to be
055: * applied.
056: *
057: * @author Fernando Bellas
058: * @since 1.0
059: */
060:
061: public class PropertyStructure implements Serializable {
062:
063: /**
064: * For interoperability with possible future changes.
065: */
066: static final long serialVersionUID = -6533315290343779395L;
067:
068: /**
069: * The map used for associating simple names with properties.
070: */
071: private Map propertiesMap;
072:
073: /**
074: * Constructs an instance of this class.
075: */
076: public PropertyStructure() {
077: propertiesMap = new HashMap();
078: }
079:
080: /**
081: * Returns the property from its simple name.
082: *
083: * @param simpleName the simple name of the property to return
084: * @return the property with the specified simple name
085: * @throws PropertyNotFoundException if there not exist a property with
086: * this simple name
087: */
088: public Property get(String simpleName)
089: throws PropertyNotFoundException {
090: Property property = (Property) propertiesMap.get(simpleName);
091:
092: if (property == null) {
093: throw new PropertyNotFoundException(simpleName);
094: }
095: return property;
096: }
097:
098: /**
099: * Adds this property to the structure. If there already existed a
100: * property with the same simple name, the property passed as a parameter
101: * replaces it.
102: *
103: * @param property the property to be added to the structure.
104: */
105: public void put(Property property) {
106: propertiesMap.put(property.getSimpleName(), property);
107: }
108:
109: /**
110: * Returns a map mapping simple names into properties. Modifications to
111: * the map are allowed and affect the structure.
112: *
113: * @return the map of properties
114: */
115: public Map getAsMap() {
116: return propertiesMap;
117: }
118:
119: }
|