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.gui.form;
031:
032: import java.awt.BorderLayout;
033:
034: import javax.swing.border.Border;
035:
036: import com.jeta.forms.components.panel.FormPanel;
037: import com.jeta.forms.gui.beans.JETABean;
038: import com.jeta.forms.gui.beans.JETABeanFactory;
039: import com.jeta.forms.gui.common.FormException;
040: import com.jeta.forms.gui.common.FormUtils;
041: import com.jeta.forms.store.memento.BeanMemento;
042: import com.jeta.forms.store.memento.ComponentMemento;
043: import com.jeta.forms.store.memento.StateRequest;
044:
045: /**
046: * This is a GridComponent wrapper around a Swing component.
047: *
048: * @author Jeff Tassin
049: */
050: public class StandardComponent extends GridComponent {
051: /**
052: * A border used to add some padding between the component and the grid
053: * lines during design mode.
054: */
055: private static Border m_design_border = javax.swing.BorderFactory
056: .createEmptyBorder(2, 2, 2, 2);
057:
058: /**
059: * Creates an unitialized <code>StandardComponent</code> instance.
060: */
061: public StandardComponent() {
062: if (FormUtils.isDesignMode())
063: setBorder(m_design_border);
064: }
065:
066: /**
067: * Creates a <code>StandardComponent</code> instance with the specified
068: * GridView.
069: *
070: * @param parentView
071: * the view that contains this component
072: */
073: public StandardComponent(GridView parentView) {
074: super (parentView);
075: if (FormUtils.isDesignMode())
076: setBorder(m_design_border);
077: }
078:
079: /**
080: * Creates a <code>StandardComponent</code> instance with the specified
081: * JETABean and GridView.
082: *
083: * @param jbean
084: * the JETABean object that contains the Swing component.
085: * @param parentView
086: * the GridView that contains this component.
087: */
088: public StandardComponent(JETABean jbean, GridView parentView) {
089: super (jbean, parentView);
090: setBean(jbean);
091: if (FormUtils.isDesignMode())
092: setBorder(m_design_border);
093:
094: /** ----- for debugging purposes ----------- */
095: // if ( jbean == null )
096: // setBorder( javax.swing.BorderFactory.createLineBorder(
097: // java.awt.Color.red ) );
098: }
099:
100: /**
101: * Saves this component's state as a memento. Included are the properties of
102: * the underlying Swing component.
103: *
104: * @return the state of this component as a memento
105: */
106: public ComponentMemento getState(StateRequest sr)
107: throws FormException {
108: BeanMemento bm = new BeanMemento();
109: bm.setCellConstraints(getConstraints().createCellConstraints());
110: bm.setComponentClass(getClass().getName());
111: JETABean jbean = getBean();
112: if (jbean != null) {
113: jbean.getState(bm, sr);
114: }
115: return bm;
116: }
117:
118: /**
119: * Print for debugging
120: */
121: public void print() {
122: JETABean jbean = getBean();
123: if (jbean == null) {
124: System.out.println("StandardComponent name = " + getName()
125: + " hash: " + hashCode() + " bean: null");
126: } else {
127: System.out.println("StandardComponent name = " + getName()
128: + " hash: " + hashCode() + " bean: "
129: + jbean.getDelegate());
130: }
131: }
132:
133: /**
134: * PostInitialize is called once after all components in a form have been
135: * re-instantiated and the state has been set at runtime (not design time).
136: * This gives each property and component a chance to do some last minute
137: * initializations that might depend on the top level parent.
138: */
139: public void postInitialize(FormPanel panel) {
140: JETABean jbean = getBean();
141: if (jbean != null) {
142: jbean.postInitialize(panel);
143: }
144: }
145:
146: /**
147: * Sets the JETABean associated with this component. The JETABean contains
148: * the Java Bean that is displayed on the form.
149: *
150: * @param jetabean
151: * the JETABean instance.
152: */
153: protected void setBean(JETABean jetabean) {
154: FormUtils.safeAssert(getComponentCount() == 0);
155: super .setBean(jetabean);
156: removeAll();
157: setLayout(new BorderLayout());
158: if (jetabean != null) {
159: add(jetabean, BorderLayout.CENTER);
160: }
161: }
162:
163: /**
164: * Sets the state of this component to a previously saved state. This
165: * includes adding the underlying Java bean (i.e. Swing component) to this
166: * component.
167: *
168: * @param memento
169: * the state of a StandardComponent
170: */
171: public void setState(ComponentMemento state) throws FormException {
172: try {
173: BeanMemento bm = (BeanMemento) state;
174:
175: /**
176: * this is required when running outside the designer. it is needed
177: * to support custom swing components that are scrollable
178: */
179: if (FormUtils.isRuntime()) {
180: JETABeanFactory.tryRegisterCustomFactory(bm
181: .getBeanClass(), true);
182: }
183:
184: JETABean jbean = JETABeanFactory.createBean(bm
185: .getBeanClass(), null, false, true);
186: if (jbean == null) {
187: jbean = new JETABean();
188: }
189:
190: if (jbean != null) {
191: setBean(jbean);
192: jbean.setState(bm);
193: }
194: } catch (Exception e) {
195: e.printStackTrace();
196: }
197: }
198: }
|