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.properties;
031:
032: import java.io.IOException;
033: import java.util.Collection;
034: import java.util.Iterator;
035: import java.util.LinkedList;
036:
037: import com.jeta.forms.gui.beans.JETABean;
038: import com.jeta.forms.store.JETAObjectInput;
039: import com.jeta.forms.store.JETAObjectOutput;
040:
041: /**
042: * Describes a series of line properties that make up a compound line. In the
043: * designer, the user can use either a horizontal or vertical line component.
044: * These components are really compound lines. This provides the ability to
045: * support '3D' line separators on forms. The <code>CompoundLineProperty</code>
046: * is used to store the attributes for each line in a compound line component.
047: *
048: * @author Jeff Tassin
049: */
050: public class CompoundLineProperty extends JETAProperty {
051: static final long serialVersionUID = 8321803759018530163L;
052:
053: /**
054: * The version of this class
055: */
056: public static final int VERSION = 2;
057:
058: /**
059: * A list of lines (LineProperty objects) that make up this compound line.
060: * The order is from left/top ---> right/bottom.
061: */
062: private LinkedList m_lines = new LinkedList();
063:
064: /**
065: * The postion of the line (for horizontal lines: TOP, CENTER,BOTTOM. for
066: * vertical: LEFT,CENTER,RIGHT )
067: */
068: private int m_position;
069:
070: public static final String PROPERTY_ID = "lineDefinition";
071:
072: /**
073: * Creates an empty <code>CompoundLineProperty</code>
074: */
075: public CompoundLineProperty() {
076: super (PROPERTY_ID);
077: }
078:
079: /**
080: * Creates a <code>CompoundLineProperty</code> with the specified line.
081: *
082: * @param lp
083: * a property that describes a single line.
084: */
085: public CompoundLineProperty(LineProperty lp) {
086: super (PROPERTY_ID);
087: addLine(lp);
088: }
089:
090: /**
091: * Returns a collection of <code>LineProperty</code> objects that make up
092: * this compound line.
093: *
094: * @return a collection of <code>LineProperty</code> objects.
095: */
096: public Collection getLines() {
097: return m_lines;
098: }
099:
100: /**
101: * Adds a line to this compound line.
102: *
103: * @param lp
104: * the line property to add
105: */
106: public void addLine(LineProperty lp) {
107: if (lp != null) {
108: m_lines.addLast(lp);
109: }
110: }
111:
112: /**
113: * The position of the lines relative to their containment area.
114: *
115: * @return the position value, one of the following constants defined in
116: * <code>HorizontalLineComponent</code> or defined in
117: * <code>VerticalLineComponent</code>
118: * <code>LEFT</code>,
119: * <code>CENTER</code>, <code>RIGHT</code>, <code>TOP</code>
120: * or <code>BOTTOM</code>.
121: */
122: public int getPosition() {
123: return m_position;
124: }
125:
126: /**
127: * Returns an iterator to the lines <code>LineProperty</code> objects in
128: * this compound line.
129: *
130: * @return an iterator to the lines (LineProperty objects)in this compound
131: * line.
132: */
133: public Iterator iterator() {
134: return m_lines.iterator();
135: }
136:
137: /**
138: * Prints this component state to the console
139: */
140: public void print() {
141: Iterator iter = iterator();
142: while (iter.hasNext()) {
143: LineProperty prop = (LineProperty) iter.next();
144: prop.print();
145: }
146: }
147:
148: /**
149: * Clears all existing line properties from this object and adds the
150: * specified set of lines
151: *
152: * @param lines
153: * a collection of <code>LineProperty</code> objects to add to
154: * this compound line.
155: */
156: public void setLines(Collection lines) {
157: m_lines.clear();
158: m_lines.addAll(lines);
159: }
160:
161: /**
162: * Sets the position of the lines relative to their bounds.
163: *
164: * @param pos
165: * the position value, one of the following constants defined in
166: * <code>HorizontalLineComponent</code> or defined in
167: * <code>VerticalLineComponent</code>
168: * <code>LEFT</code>,
169: * <code>CENTER</code>, <code>RIGHT</code>,
170: * <code>TOP</code> or <code>BOTTOM</code>.
171: */
172: public void setPosition(int pos) {
173: m_position = pos;
174: }
175:
176: /**
177: * Sets this property to that of another <code>CompoundLineProperty</code>
178: *
179: * @param prop
180: * a <code>CompoundLineProperty</code>
181: */
182: public void setValue(Object prop) {
183: if (prop instanceof CompoundLineProperty) {
184: CompoundLineProperty cb = (CompoundLineProperty) prop;
185: m_lines.clear();
186: m_lines.addAll(cb.m_lines);
187: m_position = cb.m_position;
188: }
189: }
190:
191: /**
192: * JETAProperty implementation. no op fo this property.
193: */
194: public void updateBean(JETABean jbean) {
195: }
196:
197: /**
198: * JETAPersistable Implementation
199: */
200: public void read(JETAObjectInput in) throws ClassNotFoundException,
201: IOException {
202: super .read(in.getSuperClassInput());
203: int version = in.readVersion();
204: m_lines = (LinkedList) in.readObject("lines");
205: if (version > 1)
206: m_position = in.readInt("position");
207: }
208:
209: /**
210: * JETAPersistable Implementation
211: */
212: public void write(JETAObjectOutput out) throws IOException {
213: super .write(out.getSuperClassOutput(JETAProperty.class));
214: out.writeVersion(VERSION);
215: out.writeObject("lines", m_lines);
216: out.writeInt("position", m_position);
217: }
218:
219: }
|