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.awt.Component;
033: import java.awt.Container;
034: import java.io.Externalizable;
035: import java.io.IOException;
036: import java.util.Iterator;
037: import java.util.LinkedList;
038:
039: import com.jeta.forms.store.AbstractJETAPersistable;
040: import com.jeta.forms.store.JETAObjectInput;
041: import com.jeta.forms.store.JETAObjectOutput;
042:
043: /**
044: * A list of focus keys relative to each other.
045: *
046: * @deprecated Focus is no longer supported by the designer.
047: *
048: * @author Jeff Tassin
049: */
050: public class CompositeFocusKey extends AbstractJETAPersistable
051: implements FocusKey, Cloneable, Externalizable {
052: static final long serialVersionUID = -8573867529435047276L;
053:
054: public static final int VERSION = 1;
055:
056: private LinkedList m_focus_keys = new LinkedList();
057:
058: /**
059: * ctor
060: *
061: * @param path
062: * the path to this key
063: */
064: public CompositeFocusKey() {
065:
066: }
067:
068: /**
069: * Adds a focus key to this composite
070: */
071: public void add(FocusKey fkey) {
072: m_focus_keys.add(fkey);
073: }
074:
075: /**
076: * Cloneable implementation
077: */
078: public Object clone() {
079: CompositeFocusKey result = new CompositeFocusKey();
080: result.m_focus_keys.addAll(m_focus_keys);
081: return result;
082: }
083:
084: /**
085: * FocusKey implementation. Iterates over the keys in this composite and
086: * recursively locates a component based on each element
087: */
088: public Component getComponent(Container c) {
089: Component result = null;
090:
091: if (c == null)
092: return null;
093:
094: Container parent = c;
095: Iterator iter = m_focus_keys.iterator();
096: while (iter.hasNext()) {
097: FocusKey fkey = (FocusKey) iter.next();
098: Component comp = fkey.getComponent(parent);
099: if (iter.hasNext()) {
100: if (comp instanceof Container) {
101: parent = (Container) comp;
102: } else {
103: return null;
104: }
105: } else {
106: result = comp;
107: }
108: }
109: return result;
110: }
111:
112: /**
113: * For debugging
114: */
115: public void print() {
116: Iterator iter = m_focus_keys.iterator();
117: while (iter.hasNext()) {
118: FocusKey fkey = (FocusKey) iter.next();
119: fkey.print();
120: if (iter.hasNext())
121: System.out.print(", ");
122:
123: }
124: }
125:
126: /**
127: * Externalizable Implementation
128: */
129: public void read(JETAObjectInput in) throws ClassNotFoundException,
130: IOException {
131: int version = in.readVersion();
132: m_focus_keys = (LinkedList) in.readObject("focuskeys");
133: }
134:
135: /**
136: * Externalizable Implementation
137: */
138: public void write(JETAObjectOutput out) throws IOException {
139: out.writeVersion(VERSION);
140: out.writeObject("focuskeys", m_focus_keys);
141: }
142:
143: }
|