KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfree > ui > action > DowngradeActionMap


1 /* ========================================================================
2  * JCommon : a free general purpose class library for the Java(tm) platform
3  * ========================================================================
4  *
5  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
6  *
7  * Project Info: http://www.jfree.org/jcommon/index.html
8  *
9  * This library is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22  * USA.
23  *
24  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
25  * in the United States and other countries.]
26  *
27  * -----------------------
28  * DowngradeActionMap.java
29  * -----------------------
30  * (C)opyright 2003, by Thomas Morgner and Contributors.
31  *
32  * Original Author: Thomas Morgner;
33  * Contributor(s): David Gilbert (for Object Refinery Limited);
34  *
35  * $Id: DowngradeActionMap.java,v 1.3 2005/10/18 13:22:13 mungady Exp $
36  *
37  * Changes
38  * -------
39  * 28-Oct-2003 : Initial version
40  * 07-Jun-2004 : Corrected source headers (DG);
41  *
42  */

43
44 package org.jfree.ui.action;
45
46 import java.util.ArrayList JavaDoc;
47 import java.util.HashMap JavaDoc;
48
49 import javax.swing.Action JavaDoc;
50
51 /**
52  * An actionmap, which is JDK 1.2.2 compatible.
53  * <p>
54  * This implementation does not implement the ActionMap interface of
55  * JDK 1.3 or higher to maintain the compatibility with JDK 1.2 which
56  * does not know this interface.
57  * <p>
58  * The usage is still the same.
59  *
60  * @author Thomas Morger
61  */

62 public class DowngradeActionMap {
63
64     /** A map containing the key to action mapping. */
65     private final HashMap JavaDoc actionMap;
66   
67     /** A list containing the actionkeys in their order of addition. */
68     private final ArrayList JavaDoc actionList;
69   
70     /** The parent of this action map. */
71     private DowngradeActionMap parent;
72
73     /**
74      * Default Constructor. Creates a new empty map.
75      */

76     public DowngradeActionMap() {
77         this.actionMap = new HashMap JavaDoc();
78         this.actionList = new ArrayList JavaDoc();
79     }
80
81     /**
82      * Sets this <code>ActionMap</code>'s parent.
83      *
84      * @param map the <code>ActionMap</code> that is the parent of this one
85      */

86     public void setParent(final DowngradeActionMap map) {
87         this.parent = map;
88     }
89
90     /**
91      * Returns this <code>ActionMap</code>'s parent.
92      *
93      * @return the <code>ActionMap</code> that is the parent of this one,
94      * or null if this <code>ActionMap</code> has no parent
95      */

96     public DowngradeActionMap getParent() {
97         return this.parent;
98     }
99
100     /**
101      * Adds a binding for <code>key</code> to <code>action</code>.
102      * If <code>action</code> is null, this removes the current binding
103      * for <code>key</code>.
104      * <p>In most instances, <code>key</code> will be
105      * <code>action.getValue(NAME)</code>.
106      *
107      * @param key the key for the action.
108      * @param action the action to be added.
109      */

110     public void put(final Object JavaDoc key, final Action JavaDoc action) {
111         if (action == null) {
112             remove(key);
113         }
114         else {
115            if (this.actionMap.containsKey(key)) {
116                remove(key);
117            }
118            this.actionMap.put(key, action);
119            this.actionList.add (key);
120         }
121     }
122
123     /**
124      * Returns the binding for <code>key</code>, messaging the
125      * parent <code>ActionMap</code> if the binding is not locally defined.
126      *
127      * @param key the key to be queried.
128      * @return the action for this key, or null if there is no such action.
129      */

130     public Action JavaDoc get(final Object JavaDoc key) {
131         final Action JavaDoc retval = (Action JavaDoc) this.actionMap.get(key);
132         if (retval != null) {
133             return retval;
134         }
135         if (this.parent != null) {
136             return this.parent.get(key);
137         }
138         return null;
139     }
140
141     /**
142      * Removes the binding for <code>key</code> from this <code>ActionMap</code>.
143      *
144      * @param key the key to be removed.
145      */

146     public void remove(final Object JavaDoc key) {
147         this.actionMap.remove(key);
148         this.actionList.remove(key);
149     }
150
151     /**
152      * Removes all the mappings from this <code>ActionMap</code>.
153      */

154     public void clear() {
155         this.actionMap.clear();
156         this.actionList.clear();
157     }
158
159     /**
160      * Returns the <code>Action</code> names that are bound in this <code>ActionMap</code>.
161      *
162      * @return the keys which are directly bound to this map.
163      */

164     public Object JavaDoc[] keys() {
165         return this.actionList.toArray();
166     }
167
168     /**
169      * Returns the number of bindings.
170      *
171      * @return the number of entries in this map.
172      */

173     public int size() {
174         return this.actionMap.size();
175     }
176
177     /**
178      * Returns an array of the keys defined in this <code>ActionMap</code> and
179      * its parent. This method differs from <code>keys()</code> in that
180      * this method includes the keys defined in the parent.
181      *
182      * @return all keys of this map and all parents.
183      */

184     public Object JavaDoc[] allKeys() {
185         if (this.parent == null) {
186             return keys();
187         }
188         final Object JavaDoc[] parentKeys = this.parent.allKeys();
189         final Object JavaDoc[] key = keys();
190         final Object JavaDoc[] retval = new Object JavaDoc[parentKeys.length + key.length];
191         System.arraycopy(key, 0, retval, 0, key.length);
192         System.arraycopy(retval, 0, retval, key.length, retval.length);
193         return retval;
194     }
195
196 }
197
Popular Tags