001: /*
002: * @(#)DefaultAttributeSet.java
003: *
004: * Copyright (C) 2002-2003 Matt Albrecht
005: * groboclown@users.sourceforge.net
006: * http://groboutils.sourceforge.net
007: *
008: * Part of the GroboUtils package at:
009: * http://groboutils.sourceforge.net
010: *
011: * Permission is hereby granted, free of charge, to any person obtaining a
012: * copy of this software and associated documentation files (the "Software"),
013: * to deal in the Software without restriction, including without limitation
014: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
015: * and/or sell copies of the Software, and to permit persons to whom the
016: * Software is furnished to do so, subject to the following conditions:
017: *
018: * The above copyright notice and this permission notice shall be included in
019: * all copies or substantial portions of the Software.
020: *
021: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
022: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
023: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
024: * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
025: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
026: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
027: * DEALINGS IN THE SOFTWARE.
028: */
029: package net.sourceforge.groboutils.pmti.v1.defimpl;
030:
031: import net.sourceforge.groboutils.pmti.v1.IAttributeSet;
032: import net.sourceforge.groboutils.pmti.v1.IAttribute;
033:
034: import java.util.Hashtable;
035: import java.util.Enumeration;
036:
037: /**
038: * Contains a queryable set of attribute name-value pairs associated with
039: * issue types. Implementations may have direct accessors for these
040: * attributes. Common attributes include: who reported the issue, a list
041: * of comments written about this issue, and a history of the changes the
042: * issue has gone through. All <tt>IAttributeSet</tt> implementations must be
043: * immutable, unless they also implement <tt>IEditableAttributeSet</tt>.
044: *
045: * @author Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
046: * @version $Date: 2003/02/10 22:51:58 $
047: * @since July 12, 2002
048: */
049: public class DefaultAttributeSet implements IAttributeSet {
050: private Hashtable attribs;
051:
052: public DefaultAttributeSet(IAttribute[] a) {
053: if (a == null) {
054: throw new IllegalArgumentException("no null arguments");
055: }
056:
057: this .attribs = new Hashtable();
058: for (int i = 0; i < a.length; ++i) {
059: if (a[i] != null) {
060: this .attribs.put(a[i].getInfo().getName(), a[i]);
061: }
062: }
063: }
064:
065: /**
066: * Returns a list of all attributes.
067: */
068: public IAttribute[] getAttributes()
069: {
070: IAttribute a[] = createAttributeArray( this .attribs.size() );
071: Enumeration enum = this .attribs.elements();
072: for (int i = 0; enum.hasMoreElements(); ++i)
073: {
074: a[i] = (IAttribute)enum.nextElement();
075: }
076: return a;
077: }
078:
079: /**
080: *
081: */
082: public String[] getAttributeNames()
083: {
084: String s[] = new String[ this .attribs.size() ];
085: Enumeration enum = this .attribs.keys();
086: for (int i = 0; enum.hasMoreElements(); ++i)
087: {
088: s[i] = (String)enum.nextElement();
089: }
090: return s;
091: }
092:
093: /**
094: * Finds the attribute for the given name.
095: *
096: * @return the attribute for the name, or <tt>null</tt> if no such
097: * attribute exists.
098: */
099: public IAttribute getAttribute(String name) {
100: if (name == null) {
101: return null;
102: }
103: return (IAttribute) this .attribs.get(name);
104: }
105:
106: protected IAttribute[] createAttributeArray(int size) {
107: return new IAttribute[size];
108: }
109: }
|