001: /*
002: * @(#)DefaultIssueState.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.IIssueState;
032: import net.sourceforge.groboutils.pmti.v1.IAttributeSet;
033:
034: /**
035: * Describes the state of an Issue. Issue states may have additional
036: * information associated with them, and as such uses the Attribute methodology
037: * in the same way an Issue does. All implementations of <tt>IIssueState</tt>
038: * must be immutable, unless they are also instances of
039: * <tt>IEditableIssueState</tt>.
040: *
041: * @author Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
042: * @version $Date: 2003/02/10 22:51:58 $
043: * @since July 12, 2002
044: */
045: public class DefaultIssueState implements IIssueState {
046: private String name;
047: private String desc;
048: private boolean open;
049: private IAttributeSet attribs;
050:
051: public DefaultIssueState(String n, String d, boolean o,
052: IAttributeSet s) {
053: if (n == null || d == null || s == null) {
054: throw new IllegalArgumentException("no null arguments");
055: }
056:
057: this .name = n;
058: this .desc = d;
059: this .open = o;
060: this .attribs = s;
061: }
062:
063: /**
064: * Returns the short name of the state.
065: *
066: * @return the short readable name of the state.
067: */
068: public String getName() {
069: return this .name;
070: }
071:
072: /**
073: * Retrieves a long, human-readable, description of the state.
074: *
075: * @return the state's description.
076: */
077: public String getDescription() {
078: return this .desc;
079: }
080:
081: /**
082: * A broad category for the state - it means that the issue has not been
083: * resolved yet, and the code is still open for changes based on this
084: * issue.
085: * <P>
086: * <tt>isOpen()</tt> must always return the opposite of
087: * <tt>isClosed()</tt>; that is, the following code:
088: * <PRE>
089: * isOpen() == !isClosed()
090: * </PRE>
091: * <i>must always</i> evaluate to <tt>true</tt>.
092: */
093: public boolean isOpen() {
094: return this .open;
095: }
096:
097: /**
098: * A broad category for the state - it means that the issue has been
099: * resolved, and the code is no longer open for changes based on this
100: * issue.
101: * <P>
102: * <tt>isClosed()</tt> must always return the opposite of
103: * <tt>isOpen()</tt>; that is, the following code:
104: * <PRE>
105: * isOpen() == !isClosed()
106: * </PRE>
107: * <i>must always</i> evaluate to <tt>true</tt>.
108: */
109: public boolean isClosed() {
110: return !isOpen();
111: }
112:
113: /**
114: * Returns a list of all attributes associated with this state. All
115: * states of a particular type should have the same set of issues. If
116: * the problem tracker does not have attributes associated with an issue
117: * state, then this must still return a non-<tt>null</tt>, but the set
118: * will be empty.
119: *
120: * @return the set of tracker-specific and issue type-specific attributes
121: * and values associated with this issue. Can never return
122: * <tt>null</tt>.
123: */
124: public IAttributeSet getAttributes() {
125: return this.attribs;
126: }
127: }
|