Frames | No Frames |
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.4 2007/11/02 17:50:37 taqua 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; 47: import java.util.HashMap; 48: import javax.swing.Action; 49: 50: /** 51: * An actionmap, which is JDK 1.2.2 compatible. 52: * <p> 53: * This implementation does not implement the ActionMap interface of 54: * JDK 1.3 or higher to maintain the compatibility with JDK 1.2 which 55: * does not know this interface. 56: * <p> 57: * The usage is still the same. 58: * 59: * @author Thomas Morger 60: */ 61: public class DowngradeActionMap { 62: 63: /** A map containing the key to action mapping. */ 64: private final HashMap actionMap; 65: 66: /** A list containing the actionkeys in their order of addition. */ 67: private final ArrayList actionList; 68: 69: /** The parent of this action map. */ 70: private DowngradeActionMap parent; 71: 72: /** 73: * Default Constructor. Creates a new empty map. 74: */ 75: public DowngradeActionMap() { 76: this.actionMap = new HashMap(); 77: this.actionList = new ArrayList(); 78: } 79: 80: /** 81: * Sets this <code>ActionMap</code>'s parent. 82: * 83: * @param map the <code>ActionMap</code> that is the parent of this one 84: */ 85: public void setParent(final DowngradeActionMap map) { 86: this.parent = map; 87: } 88: 89: /** 90: * Returns this <code>ActionMap</code>'s parent. 91: * 92: * @return the <code>ActionMap</code> that is the parent of this one, 93: * or null if this <code>ActionMap</code> has no parent 94: */ 95: public DowngradeActionMap getParent() { 96: return this.parent; 97: } 98: 99: /** 100: * Adds a binding for <code>key</code> to <code>action</code>. 101: * If <code>action</code> is null, this removes the current binding 102: * for <code>key</code>. 103: * <p>In most instances, <code>key</code> will be 104: * <code>action.getValue(NAME)</code>. 105: * 106: * @param key the key for the action. 107: * @param action the action to be added. 108: */ 109: public void put(final Object key, final Action action) { 110: if (action == null) { 111: remove(key); 112: } 113: else { 114: if (this.actionMap.containsKey(key)) { 115: remove(key); 116: } 117: this.actionMap.put(key, action); 118: this.actionList.add (key); 119: } 120: } 121: 122: /** 123: * Returns the binding for <code>key</code>, messaging the 124: * parent <code>ActionMap</code> if the binding is not locally defined. 125: * 126: * @param key the key to be queried. 127: * @return the action for this key, or null if there is no such action. 128: */ 129: public Action get(final Object key) { 130: final Action retval = (Action) this.actionMap.get(key); 131: if (retval != null) { 132: return retval; 133: } 134: if (this.parent != null) { 135: return this.parent.get(key); 136: } 137: return null; 138: } 139: 140: /** 141: * Removes the binding for <code>key</code> from this <code>ActionMap</code>. 142: * 143: * @param key the key to be removed. 144: */ 145: public void remove(final Object key) { 146: this.actionMap.remove(key); 147: this.actionList.remove(key); 148: } 149: 150: /** 151: * Removes all the mappings from this <code>ActionMap</code>. 152: */ 153: public void clear() { 154: this.actionMap.clear(); 155: this.actionList.clear(); 156: } 157: 158: /** 159: * Returns the <code>Action</code> names that are bound in this <code>ActionMap</code>. 160: * 161: * @return the keys which are directly bound to this map. 162: */ 163: public Object[] keys() { 164: return this.actionList.toArray(); 165: } 166: 167: /** 168: * Returns the number of bindings. 169: * 170: * @return the number of entries in this map. 171: */ 172: public int size() { 173: return this.actionMap.size(); 174: } 175: 176: /** 177: * Returns an array of the keys defined in this <code>ActionMap</code> and 178: * its parent. This method differs from <code>keys()</code> in that 179: * this method includes the keys defined in the parent. 180: * 181: * @return all keys of this map and all parents. 182: */ 183: public Object[] allKeys() { 184: if (this.parent == null) { 185: return keys(); 186: } 187: final Object[] parentKeys = this.parent.allKeys(); 188: final Object[] key = keys(); 189: final Object[] retval = new Object[parentKeys.length + key.length]; 190: System.arraycopy(key, 0, retval, 0, key.length); 191: System.arraycopy(retval, 0, retval, key.length, retval.length); 192: return retval; 193: } 194: 195: }