001 /*
002 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.swing;
027
028 /**
029 * An enumeration for keys used as client properties within the Swing
030 * implementation.
031 * <p>
032 * This enum holds only a small subset of the keys currently used within Swing,
033 * but we may move more of them here in the future.
034 * <p>
035 * Adding an item to, and using, this class instead of {@code String} for
036 * client properties protects against conflicts with developer-set client
037 * properties. Using this class also avoids a problem with {@code StringBuilder}
038 * and {@code StringBuffer} keys, whereby the keys are not recognized upon
039 * deserialization.
040 * <p>
041 * When a client property value associated with one of these keys does not
042 * implement {@code Serializable}, the result during serialization depends
043 * on how the key is defined here. Historically, client properties with values
044 * not implementing {@code Serializable} have simply been dropped and left out
045 * of the serialized representation. To define keys with such behavior in this
046 * enum, provide a value of {@code false} for the {@code reportValueNotSerializable}
047 * property. When migrating existing properties to this enum, one may wish to
048 * consider using this by default, to preserve backward compatibility.
049 * <p>
050 * To instead have a {@code NotSerializableException} thrown when a
051 * {@code non-Serializable} property is encountered, provide the value of
052 * {@code true} for the {@code reportValueNotSerializable} property. This
053 * is useful when the property represents something that the developer
054 * needs to know about when it cannot be serialized.
055 *
056 * @author Shannon Hickey
057 * @version 1.6 05/05/07
058 */
059 enum ClientPropertyKey {
060
061 /**
062 * Key used by JComponent for storing InputVerifier.
063 */
064 JComponent_INPUT_VERIFIER(true),
065
066 /**
067 * Key used by JComponent for storing TransferHandler.
068 */
069 JComponent_TRANSFER_HANDLER(true),
070
071 /**
072 * Key used by JComponent for storing AncestorNotifier.
073 */
074 JComponent_ANCESTOR_NOTIFIER(true),
075
076 /**
077 * Key used by PopupFactory to force heavy weight popups for a
078 * component.
079 */
080 PopupFactory_FORCE_HEAVYWEIGHT_POPUP(true);
081
082 /**
083 * Whether or not a {@code NotSerializableException} should be thrown
084 * during serialization, when the value associated with this key does
085 * not implement {@code Serializable}.
086 */
087 private final boolean reportValueNotSerializable;
088
089 /**
090 * Constructs a key with the {@code reportValueNotSerializable} property
091 * set to {@code false}.
092 */
093 private ClientPropertyKey() {
094 this (false);
095 }
096
097 /**
098 * Constructs a key with the {@code reportValueNotSerializable} property
099 * set to the given value.
100 */
101 private ClientPropertyKey(boolean reportValueNotSerializable) {
102 this .reportValueNotSerializable = reportValueNotSerializable;
103 }
104
105 /**
106 * Returns whether or not a {@code NotSerializableException} should be thrown
107 * during serialization, when the value associated with this key does
108 * not implement {@code Serializable}.
109 */
110 public boolean getReportValueNotSerializable() {
111 return reportValueNotSerializable;
112 }
113 }
|