001: /*
002: * Copyright (c) 2004 JETA Software, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without modification,
005: * are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JETA Software nor the names of its contributors may
015: * be used to endorse or promote products derived from this software without
016: * specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
021: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
022: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
023: * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
024: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
025: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
026: * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: */
029:
030: package com.jeta.forms.store.memento;
031:
032: import java.io.ByteArrayInputStream;
033: import java.io.IOException;
034: import java.io.ObjectInputStream;
035: import java.util.Collection;
036:
037: import com.jeta.forms.store.JETAObjectInput;
038: import com.jeta.forms.store.JETAObjectOutput;
039:
040: /**
041: * A <code>BeanMemento</code> is used to store the state for a JETABean object
042: * and its properties. This includes the standard properties for the underlying
043: * Java bean as well as any custom properties.
044: *
045: * @author Jeff Tassin
046: */
047: public class BeanMemento extends ComponentMemento {
048: static final long serialVersionUID = -92122133275350884L;
049:
050: /**
051: * The version for this class.
052: */
053: public static final int VERSION = 2;
054:
055: /**
056: * Currently, this is "com.jeta.forms.gui.beans.JETABean". It may change in
057: * the future.
058: */
059: private String m_jetabean_class;
060:
061: /**
062: * The class name of the Swing-based Java bean whose state is represented
063: * here
064: */
065: private String m_bean_class;
066:
067: /**
068: * The bean properties(values). This includes standard as well as custom
069: * properties.
070: */
071: private PropertiesMemento m_properties;
072:
073: /**
074: * The bean state in XML form
075: *
076: * @deprecated only supported in version 1 of this class. Replaced by
077: * <code>m_properties</code>
078: */
079: private byte[] m_bean_xml;
080:
081: /**
082: * A collection of JETAProperty objects. These are custom properties
083: * associated with the bean.
084: *
085: * @deprecated only supported in version 1 of this class. Replaced by
086: * <code>m_properties</code>
087: */
088: private Collection m_custom_properties;
089:
090: /**
091: * Return true if this memento contains a value for the given property name.
092: *
093: * @param propName
094: * the name of the property
095: * @return true if this object contains a value for the property with the
096: * given name.
097: */
098: public boolean containsProperty(String propName) {
099: if (m_properties != null)
100: return m_properties.containsProperty(propName);
101: else
102: return false;
103: }
104:
105: /**
106: * Returns a collection of custom properties associated.
107: *
108: * @return a collection of JETAProperty objects. These are custom properties
109: * associated with the bean.
110: * @deprecated only suupported in version 1 of this class.
111: */
112: public Collection getCustomProperties() {
113: return m_custom_properties;
114: }
115:
116: /**
117: * Currently returns "com.jeta.forms.gui.beans.JETABean"
118: *
119: * @return the JETABean wrapper class
120: */
121: public String getJETABeanClass() {
122: return m_jetabean_class;
123: }
124:
125: /**
126: * The class name of the Swing-based Java bean whose state is represented
127: * here
128: */
129: public String getBeanClass() {
130: return m_bean_class;
131: }
132:
133: /**
134: * @deprecated Use <code>getProperties</code> instead.
135: */
136: public byte[] getBeanXML() {
137: return m_bean_xml;
138: }
139:
140: /**
141: * Returns the bean properties that are stored in this memento.
142: *
143: * @return the bean properties.
144: */
145: public PropertiesMemento getProperties() {
146: return m_properties;
147: }
148:
149: /**
150: * Method used only for testing
151: */
152: public void print() {
153: System.out.println(" BeanMemento state.................. ");
154: System.out.println(" jetabean: " + m_jetabean_class);
155: System.out.println(" bean_class: " + m_bean_class);
156: }
157:
158: /**
159: * Sets the custom properties (i.e.JETAProperty objects) for this bean.
160: *
161: * @deprecated
162: * @param props
163: * a collection of JETAProperty objects
164: */
165: public void setCustomProperties(Collection props) {
166: m_custom_properties = props;
167: }
168:
169: /**
170: * Sets the class name of the Swing-based Java bean whose state is
171: * represented here
172: */
173: public void setBeanClass(String beanClass) {
174: m_bean_class = beanClass;
175: }
176:
177: /**
178: * @return the JETABean wrapper class
179: */
180: public void setJETABeanClass(String className) {
181: m_jetabean_class = className;
182: }
183:
184: /**
185: * @deprecated Use <code>setProperties</code> instead.
186: */
187: public void setBeanXML(byte[] xml) {
188: m_bean_xml = xml;
189: }
190:
191: /**
192: * Sets the bean properties.
193: */
194: public void setProperties(PropertiesMemento props) {
195: m_properties = props;
196: }
197:
198: /**
199: * Externalizable Implementation
200: */
201: public void read(JETAObjectInput in) throws ClassNotFoundException,
202: IOException {
203: super .read(in.getSuperClassInput());
204: int version = in.readVersion();
205: m_jetabean_class = in.readString("jetabeanclass");
206: m_bean_class = in.readString("beanclass");
207:
208: if (version == 1) {
209: m_bean_xml = (byte[]) in.readObject("bean_xml");
210: m_custom_properties = (Collection) in
211: .readObject("custom_properties");
212: m_properties = null;
213: } else {
214: Object props = in.readObject("beanproperties");
215: if (props instanceof byte[]) {
216: /** deprecated support */
217: ByteArrayInputStream bis = new ByteArrayInputStream(
218: (byte[]) props);
219: ObjectInputStream ois = new ObjectInputStream(bis);
220: m_properties = (PropertiesMemento) ois.readObject();
221: } else if (props instanceof PropertiesMemento) {
222: m_properties = (PropertiesMemento) props;
223: }
224: }
225: }
226:
227: /**
228: * Externalizable Implementation
229: */
230: public void write(JETAObjectOutput out) throws IOException {
231: super .write(out.getSuperClassOutput(ComponentMemento.class));
232: out.writeVersion(VERSION);
233: out.writeObject("jetabeanclass", m_jetabean_class);
234: out.writeObject("beanclass", m_bean_class);
235: out.writeObject("beanproperties", m_properties);
236: }
237:
238: }
|