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.util.HashMap;
034: import java.util.Iterator;
035:
036: import com.jeta.forms.store.AbstractJETAPersistable;
037: import com.jeta.forms.store.JETAObjectInput;
038: import com.jeta.forms.store.JETAObjectOutput;
039:
040: /**
041: * Defines a set of FormGroup objects that define the column or row groups for a
042: * given form. For a given form, you should have two FormGroupSet objects: one
043: * for the row groups and one for the column groups.
044: *
045: * @author Jeff Tassin
046: */
047: public class FormGroupSet extends AbstractJETAPersistable {
048: static final long serialVersionUID = -7806433967830846242L;
049:
050: /**
051: * The version for this class.
052: */
053: public static final int VERSION = 1;
054:
055: /**
056: * An map of FormGroup keys to FormGroup objects m_groups<Integer,FormGroup>
057: * The Integer key is an arbitrary integer that defines the group.
058: */
059: private HashMap m_groups = new HashMap();
060:
061: /**
062: * Creates an unitialized <code>FormGroupSet</code> instance.
063: */
064: public FormGroupSet() {
065: }
066:
067: /**
068: * Assigns a row /column to a group with the given key. If no group exists,
069: * then a new group is created.
070: *
071: * @param groupKey
072: * the key number for the group. This is the group index.
073: * @param index
074: * the 1-based row or column.
075: */
076: public void assignToGroup(Integer groupKey, int index) {
077: if (groupKey == null)
078: return;
079:
080: removeAssignment(index);
081: if (groupKey.intValue() == 0)
082: return;
083:
084: FormGroup group = (FormGroup) m_groups.get(groupKey);
085: if (group == null) {
086: group = new FormGroup();
087: m_groups.put(groupKey, group);
088: }
089: group.assign(index);
090: }
091:
092: /**
093: * Returns the group that the given column or row is assigned to.
094: *
095: * @param index
096: * the 1-based row or column
097: * @return the group that the given column/row is assigned to. Null is
098: * returned if no group is found.
099: */
100: public FormGroup getGroup(int index) {
101: Iterator iter = m_groups.values().iterator();
102: while (iter.hasNext()) {
103: FormGroup group = (FormGroup) iter.next();
104: if (group.contains(index))
105: return group;
106: }
107: return null;
108: }
109:
110: /**
111: * Returns the group id that the given row or column is assigned to.
112: *
113: * @param index
114: * the 1-based row or column.
115: * @return the group that the given column/row is assigned to. Null is
116: * returned if no group is found.
117: */
118: public Integer getGroupId(int index) {
119: Iterator iter = m_groups.keySet().iterator();
120: while (iter.hasNext()) {
121: Integer key = (Integer) iter.next();
122: FormGroup group = (FormGroup) m_groups.get(key);
123: if (group != null && group.contains(index))
124: return key;
125: }
126: return null;
127: }
128:
129: /**
130: * Removes a row or column from the group it is assigned to.
131: *
132: * @param index
133: * the 1-based row or column
134: */
135: public void removeAssignment(int index) {
136: Iterator iter = m_groups.values().iterator();
137: while (iter.hasNext()) {
138: FormGroup group = (FormGroup) iter.next();
139: group.remove(index);
140: if (group.size() == 0)
141: iter.remove();
142: }
143: }
144:
145: /**
146: * Returns this group definition as an array that is suitable for the
147: * FormLayout.
148: *
149: * @return this group definition as an array that is suitable for the
150: * FormLayout. See:
151: * {@link com.jgoodies.forms.layout.FormLayout.setColumnGroups} See:
152: * {@link com.jgoodies.forms.layout.FormLayout.setRowGroups}
153: */
154: public int[][] toArray() {
155: int[][] result = new int[m_groups.size()][];
156: int count = 0;
157: Iterator iter = m_groups.values().iterator();
158: while (iter.hasNext()) {
159: FormGroup group = (FormGroup) iter.next();
160: int[] grp_array = group.toArray();
161: assert (grp_array.length > 0);
162: result[count] = grp_array;
163: count++;
164: }
165: return result;
166: }
167:
168: /**
169: * Externalizable Implementation
170: */
171: public void read(JETAObjectInput in) throws ClassNotFoundException,
172: IOException {
173: int version = in.readVersion();
174: m_groups = (HashMap) in.readObject("groups");
175: }
176:
177: /**
178: * Externalizable Implementation
179: */
180: public void write(JETAObjectOutput out) throws IOException {
181: out.writeVersion(VERSION);
182: out.writeObject("groups", m_groups);
183: }
184:
185: }
|