001: /*
002: * $Id: AbstractPropertyReader.java,v 1.27 2007/09/18 08:45:08 agoubard Exp $
003: *
004: * Copyright 2003-2007 Orange Nederland Breedband B.V.
005: * See the COPYRIGHT file for redistribution and use restrictions.
006: */
007: package org.xins.common.collections;
008:
009: import java.util.Iterator;
010: import java.util.Map;
011:
012: import org.xins.common.MandatoryArgumentChecker;
013:
014: /**
015: * Base for <code>PropertyReader</code> implementations that use an underlying
016: * <code>Map</code> instance.
017: *
018: * @version $Revision: 1.27 $ $Date: 2007/09/18 08:45:08 $
019: * @author <a href="mailto:ernst@ernstdehaan.com">Ernst de Haan</a>
020: * @author <a href="mailto:anthony.goubard@japplis.com">Anthony Goubard</a>
021: *
022: * @since XINS 1.0.0
023: */
024: public abstract class AbstractPropertyReader implements PropertyReader {
025:
026: /**
027: * The mappings from property keys to values. Never <code>null</code>.
028: */
029: private final Map _properties;
030:
031: /**
032: * Constructs a new <code>AbstractPropertyReader</code>.
033: *
034: * @param map
035: * the map containing the data of this <code>PropertyReader</code>,
036: * cannot be <code>null</code>.
037: *
038: * @throws IllegalArgumentException
039: * if <code>map == null</code>.
040: *
041: * @since XINS 1.4.0
042: */
043: protected AbstractPropertyReader(Map map)
044: throws IllegalArgumentException {
045:
046: // Check preconditions
047: MandatoryArgumentChecker.check("map", map);
048:
049: // Initialize fields
050: _properties = map;
051: }
052:
053: /**
054: * Gets the value of the property with the specified name.
055: *
056: * @param name
057: * the name of the property, cannot be <code>null</code>.
058: *
059: * @return
060: * the value of the property, or <code>null</code> if it is not set.
061: *
062: * @throws IllegalArgumentException
063: * if <code>name == null</code>.
064: */
065: public String get(String name) throws IllegalArgumentException {
066:
067: // Check preconditions
068: MandatoryArgumentChecker.check("name", name);
069:
070: // Retrieve the value
071: Object value = _properties.get(name);
072: return (String) value;
073: }
074:
075: /**
076: * Gets an iterator that iterates over all the property names. The
077: * {@link Iterator} will return only {@link String} instances.
078: *
079: * @return
080: * the {@link Iterator} that will iterate over all the names, never
081: * <code>null</code>.
082: */
083: public Iterator getNames() {
084: return _properties.keySet().iterator();
085: }
086:
087: /**
088: * Returns the number of entries.
089: *
090: * @return
091: * the size, always >= 0.
092: */
093: public int size() {
094: return _properties.size();
095: }
096:
097: /**
098: * Returns the <code>Map</code> that contains the properties.
099: *
100: * @return
101: * the {@link Map} used to store the properties in, cannot be
102: * <code>null</code>.
103: *
104: * @since XINS 1.4.0
105: */
106: protected Map getPropertiesMap() {
107: return _properties;
108: }
109:
110: /**
111: * Compares this object with the specified argument for equality.
112: *
113: * @param obj
114: * the object to compare with, can be <code>null</code>.
115: *
116: * @return
117: * <code>true</code> if the objects <code>a</code> and <code>b</code>
118: * are considered to be equal, <code>false</code> if they are considered
119: * different.
120: */
121: public boolean equals(Object obj) {
122: return PropertyReaderUtils.equals(this , obj);
123: }
124:
125: /**
126: * Returns a hash code value for this object.
127: *
128: * @return
129: * a hash code value for this object.
130: */
131: public int hashCode() {
132: return PropertyReaderUtils.hashCode(this);
133: }
134: }
|