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:
034: import com.jeta.forms.store.AbstractJETAPersistable;
035: import com.jeta.forms.store.JETAObjectInput;
036: import com.jeta.forms.store.JETAObjectOutput;
037:
038: /**
039: * This class is used to wrap a Form when it is stored to a file. When you
040: * deserialize a form file (.jfrm), this is the object you get from the
041: * deserialization. We wrap all forms in a FormPackage in case we need to add
042: * some information to the file at a later date that is outside the scope of the
043: * FormMemento. Only one FormPackage object is used per file. [FormPackage]
044: * [forms version] [FormMemento] ----- the main form [FormMemento] ---- a nested
045: * form [BeanMemento] --- a java bean [BeanMemento] --- a java bean
046: * [BeanMemento] ---- a java bean [BeanMemento] ---- a java bean [...]
047: *
048: * @author Jeff Tassin
049: */
050: public class FormPackage extends AbstractJETAPersistable {
051: static final long serialVersionUID = -1091037320216196430L;
052:
053: /**
054: * The version of this class.
055: */
056: public static final int VERSION = 2;
057:
058: /**
059: * The form memento we are packaging.
060: */
061: private FormMemento m_form_memento;
062:
063: /**
064: * The version of the current forms runtime
065: */
066: private static FormsVersion2 FORMS_RUNTIME_VERSION = new FormsVersion2();
067:
068: /**
069: * Creates a <code>FormPackage</code> instance.
070: */
071: public FormPackage() {
072:
073: }
074:
075: /**
076: * Creates a <code>FormPackage</code> instance with the specified
077: * FormMemento object.
078: */
079: public FormPackage(FormMemento fm) {
080: m_form_memento = fm;
081: }
082:
083: /**
084: * Returns the FormMemento associated with this object.
085: *
086: * @return the form mememento
087: */
088: public FormMemento getMemento() {
089: return m_form_memento;
090: }
091:
092: /**
093: * JETAPersistable Implementation
094: */
095: public void read(JETAObjectInput in) throws ClassNotFoundException,
096: IOException {
097: int class_version = in.readVersion();
098: if (class_version >= 2) {
099: Object obj = in.readObject("fileversion");
100: if (obj instanceof FormsVersion2) {
101: FormsVersion2 file_version = (FormsVersion2) obj;
102: if (FORMS_RUNTIME_VERSION.compareTo(file_version) < 0) {
103: System.err
104: .println("Encountered a form file with a version greater than that supported by this runtime. File version: "
105: + file_version
106: + " Current runtime version: "
107: + VERSION);
108: }
109: }
110: }
111: m_form_memento = (FormMemento) in.readObject("form");
112: }
113:
114: /**
115: * JETAPersistable Implementation
116: */
117: public void write(JETAObjectOutput out) throws IOException {
118: out.writeVersion(VERSION);
119: out.writeObject("fileversion", FORMS_RUNTIME_VERSION);
120: out.writeObject("form", m_form_memento);
121: }
122:
123: }
|