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.IOException;
033: import java.io.Serializable;
034: import java.util.Collection;
035: import java.util.HashMap;
036: import java.util.Iterator;
037:
038: import com.jeta.forms.store.AbstractJETAPersistable;
039: import com.jeta.forms.store.JETAObjectInput;
040: import com.jeta.forms.store.JETAObjectOutput;
041: import com.jeta.forms.store.support.PropertyMap;
042:
043: /**
044: * This class is used to store properties for a Java Bean. This class stores
045: * both standard and custom properties.
046: *
047: * @author Jeff Tassin
048: */
049: public class PropertiesMemento extends AbstractJETAPersistable {
050: static final long serialVersionUID = -3299575217906477613L;
051:
052: public static final int VERSION = 2;
053:
054: /**
055: * The Component class associated with this memento. This is the class name
056: * of the Java bean. For example: javax.swing.JButton
057: */
058: private String m_class_name;
059:
060: /**
061: * A map of property names to their value: m_standard_props<String,Object>
062: * The key is the name of the property. The value is the property value.
063: * This value must be serializable or it will not be stored.
064: */
065: private PropertyMap m_props = new PropertyMap();
066:
067: /**
068: * Creates an uninitialized <code>PropertiesMemento</code> instance.
069: */
070: public PropertiesMemento() {
071:
072: }
073:
074: /**
075: * Creates a <code>PropertiesMemento</code> instance with the given Java
076: * bean class name.
077: *
078: * @param className
079: * the name of the Java bean class associated with this memento.
080: */
081: public PropertiesMemento(String className) {
082: m_class_name = className;
083: }
084:
085: /**
086: * Returns the class name of the Java Bean component associated with this
087: * memento.
088: *
089: * @return the Java bean class name associated with this memento.
090: */
091: public String getBeanClassName() {
092: return m_class_name;
093: }
094:
095: /**
096: * Adds a property value to this memento.
097: *
098: * @param name
099: * the name of the property to add to this memento.
100: * @param value
101: * the property value.
102: */
103: public void addProperty(String name, Serializable value) {
104: m_props.put(name, value);
105: }
106:
107: /**
108: * Return true if this memento contains a value for the given property name.
109: *
110: * @param propName
111: * the name of the property
112: * @return true if this object contains a value for the property with the
113: * given name.
114: */
115: public boolean containsProperty(String propName) {
116: return m_props.containsKey(propName);
117: }
118:
119: /**
120: * Return the value associated with the standard property <i>name</i>. If
121: * the <i>name</i> property is not contained by this memento, null is
122: * returned.
123: *
124: * @return the value of the name property.
125: */
126: public String getComponentName() {
127: Object obj = getPropertyValue("name");
128: if (obj != null)
129: return obj.toString();
130: else
131: return null;
132: }
133:
134: /**
135: * Return the names of the properties contained by this memento.
136: */
137: public Collection getPropertyNames() {
138: return m_props.keySet();
139: }
140:
141: /**
142: * Returns the value for the given property
143: *
144: * @param propName
145: * the name of the property
146: * @return the value for the property. Null if the property is not contained
147: * by this memento.
148: */
149: public Object getPropertyValue(String propName) {
150: return m_props.get(propName);
151: }
152:
153: /**
154: * Prints this object to the console
155: */
156: public void print() {
157: System.out.println("................ properties memento: "
158: + getBeanClassName() + " ..............");
159: java.util.Iterator iter = m_props.keySet().iterator();
160: while (iter.hasNext()) {
161: String pname = (String) iter.next();
162: System.out.println(" " + pname + " = "
163: + m_props.get(pname));
164: }
165: }
166:
167: /**
168: * Sets the class name of the Java Bean associated with this memento.
169: *
170: * @param cname
171: * the class name of the Java Bean to set.
172: */
173: public void setBeanClassName(String cname) {
174: m_class_name = cname;
175: }
176:
177: /**
178: * JETAPersistable Implementation
179: */
180: public void read(JETAObjectInput in) throws ClassNotFoundException,
181: IOException {
182: int version = in.readVersion();
183: m_class_name = (String) in.readObject("classname");
184: if (version <= 1) {
185: Object obj = in.readObject("properties");
186: if (obj instanceof HashMap)
187: m_props = new PropertyMap((HashMap) obj);
188: else
189: m_props = (PropertyMap) obj;
190:
191: if (m_props == null)
192: m_props = new PropertyMap();
193:
194: HashMap custom_props = (HashMap) in
195: .readObject("customproperties");
196: if (custom_props != null) {
197: Iterator iter = custom_props.keySet().iterator();
198: while (iter.hasNext()) {
199: Object key = iter.next();
200: m_props.put(key, custom_props.get(key));
201: }
202: }
203: } else {
204: Object obj = in.readObject("properties");
205: if (obj instanceof HashMap)
206: m_props = new PropertyMap((HashMap) obj);
207: else
208: m_props = (PropertyMap) obj;
209: }
210: }
211:
212: /**
213: * JETAPersistable Implementation
214: */
215: public void write(JETAObjectOutput out) throws IOException {
216: out.writeVersion(VERSION);
217: out.writeObject("classname", m_class_name);
218: out.writeObject("properties", m_props);
219: }
220:
221: }
|