KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > groboutils > pmti > v1 > defimpl > AbstractEditableAttribute


1 /*
2  * @(#)AbstractEditableAttribute.java
3  *
4  * Copyright (C) 2002-2003 Matt Albrecht
5  * groboclown@users.sourceforge.net
6  * http://groboutils.sourceforge.net
7  *
8  * Part of the GroboUtils package at:
9  * http://groboutils.sourceforge.net
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a
12  * copy of this software and associated documentation files (the "Software"),
13  * to deal in the Software without restriction, including without limitation
14  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  * and/or sell copies of the Software, and to permit persons to whom the
16  * Software is furnished to do so, subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included in
19  * all copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27  * DEALINGS IN THE SOFTWARE.
28  */

29 package net.sourceforge.groboutils.pmti.v1.defimpl;
30
31 import net.sourceforge.groboutils.pmti.v1.IEditableAttribute;
32 import net.sourceforge.groboutils.pmti.v1.IAttributeInfo;
33 import net.sourceforge.groboutils.pmti.v1.IAttribute;
34  
35
36 /**
37  * This uses delegation to allow for maximum flexibility in creating new
38  * editable attributes based on this class through subclassing.
39  *
40  * @author Matt Albrecht <a HREF="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
41  * @version $Date: 2003/02/10 22:51:57 $
42  * @since July 12, 2002
43  */

44 public abstract class AbstractEditableAttribute implements IEditableAttribute
45 {
46     private Object JavaDoc newvalue;
47     private boolean valueChanged = false;
48     private IAttribute baseAttrib;
49     
50     
51     public AbstractEditableAttribute( IAttribute base )
52     {
53         if (base == null)
54         {
55             throw new IllegalArgumentException JavaDoc("no null arguments");
56         }
57         this.baseAttrib = base;
58     }
59     
60     
61     
62     /**
63      * Returns the current (possibly modified) value for this attribute.
64      */

65     public Object JavaDoc getValue()
66     {
67         Object JavaDoc ret;
68         if (this.valueChanged)
69         {
70             ret = this.newvalue;
71         }
72         else
73         {
74             ret = this.baseAttrib.getValue();
75         }
76         return ret;
77     }
78     
79     
80     /**
81      * Returns the meta-information for this attribute.
82      */

83     public IAttributeInfo getInfo()
84     {
85         return this.baseAttrib.getInfo();
86     }
87     
88     
89     /**
90      * @exception IllegalArgumentException thrown if the value argument is
91      * invalid.
92      */

93     public void setValue( Object JavaDoc value )
94     {
95         if (!isValidValue( value ))
96         {
97             throw new IllegalArgumentException JavaDoc( "invalid value "+value );
98         }
99         Object JavaDoc orig = this.baseAttrib.getValue();
100         if ( value == orig || ( value != null && value.equals( orig ) ) )
101         {
102             // no change from the original
103
this.valueChanged = false;
104         }
105         else
106         {
107             this.valueChanged = true;
108             this.newvalue = value;
109         }
110     }
111     
112     
113     /**
114      * @return <tt>true</tt> if the <tt>setValue( Object )</tt> method has
115      * been called on this instance and the actual value has changed
116      * (via inspection with <tt>==</tt> and <tt>equals()</tt>),
117      * otherwise <tt>false</tt>.
118      */

119     public boolean hasValueChanged()
120     {
121         return this.valueChanged;
122     }
123     
124     
125     /**
126      *
127      */

128     public abstract boolean isValidValue( Object JavaDoc value );
129 }
130
131
Popular Tags