001: /* *************************************************************************
002:
003: Millstone(TM)
004: Open Sourced User Interface Library for
005: Internet Development with Java
006:
007: Millstone is a registered trademark of IT Mill Ltd
008: Copyright (C) 2000-2005 IT Mill Ltd
009:
010: *************************************************************************
011:
012: This library is free software; you can redistribute it and/or
013: modify it under the terms of the GNU Lesser General Public
014: license version 2.1 as published by the Free Software Foundation.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: *************************************************************************
026:
027: For more information, contact:
028:
029: IT Mill Ltd phone: +358 2 4802 7180
030: Ruukinkatu 2-4 fax: +358 2 4802 7181
031: 20540, Turku email: info@itmill.com
032: Finland company www: www.itmill.com
033:
034: Primary source for MillStone information and releases: www.millstone.org
035:
036: ********************************************************************** */
037:
038: package org.millstone.base.terminal;
039:
040: import java.util.Map;
041: import java.util.Set;
042:
043: /** <p>Listener interface for UI variable changes. The user communicates
044: * with the application using the so-called <i>variables</i>. When the user
045: * makes a change using the UI the terminal trasmits the changed variables
046: * to the application, and the components owning those variables may then
047: * process those changes.</p>
048: *
049: * <p>The variable-owning components can be linked with <i>dependency
050: * relationships</i>. A dependency between two components means that all
051: * variable change events to the depended component will be handled
052: * before any such events to the depending component.</p>
053: *
054: * <p>For example, the commit button for a text field will depend on that
055: * text field. This is because we want to handle any pending changes the
056: * user makes to the contents on the text field before before we accept the
057: * click of the commit button which starts processing the text field
058: * contents.</p>
059: *
060: * @author IT Mill Ltd.
061: * @version 3.1.1
062: * @since 3.0
063: */
064: public interface VariableOwner {
065:
066: /** Gets the variable change listeners this <code>VariableOwner</code>
067: * directly depends on. This list does not contain any indirect
068: * dependencies, for example, if A depends on B and B depends on C,
069: * the dependency list of A does not include C.
070: *
071: * @return Set of <code>VariableOwner</code>s this component directly
072: * depend on, <code>null</code> if this component does not depend on
073: * anybody.
074: */
075: public Set getDirectDependencies();
076:
077: /** Called when one or more variables handled by the implementing class
078: * are changed.
079: *
080: * @param source Source of the variable change. This is the origin of the
081: * event. For example in Web Adapter this is the request.
082: * @param variables Mapping from variable names to new variable values
083: */
084: public void changeVariables(Object source, Map variables);
085:
086: /** Makes this <code>VariableOwner</code> depend on the given
087: * <code>VariableOwner</code>. This means that any variable change
088: * events relating to <code>depended</code> must be sent before any
089: * such events that relate to this object.
090: *
091: * @param denpended the <code>VariableOwner</code> component who
092: * this component depends on
093: */
094: public void dependsOn(VariableOwner depended);
095:
096: /** Removes the given component from this component's dependency list.
097: * After the call this component will no longer depend on
098: * <code>depended</code> wdepende direct dependency from the component.
099: * Indirect dependencies are not removed.
100: *
101: * @param denpended the component to be removed from this component's
102: * dependency list.
103: */
104: public void removeDirectDependency(VariableOwner depended);
105:
106: /** <p>Tests if the variable owner is enabled or not. The terminal
107: * should not send any variable changes to disabled variable owners.
108: * </p>
109: *
110: * @return <code>true</code> if the variable owner is enabled,
111: * <code>false</code> if not
112: */
113: public boolean isEnabled();
114:
115: /** <p>Tests if the variable owner is in immediate mode or not. Being in
116: * immediate mode means that all variable changes are required to be sent
117: * back from the terminal immediately when they occur.
118: * </p>
119: *
120: * <p><strong>Note:</strong> <code>VariableOwner</code> does not include a
121: * set- method for the immediateness property. This is because not all
122: * VariableOwners wish to offer the functionality. Such VariableOwners are
123: * never in the immediate mode, thus they always return <code>false</code>
124: * in {@link #isImmediate()}.</p>
125: *
126: * @return <code>true</code> if the component is in immediate mode,
127: * <code>false</code> if not
128: */
129: public boolean isImmediate();
130:
131: /** VariableOwner error event */
132: public interface ErrorEvent extends Terminal.ErrorEvent {
133:
134: /** Get the source VariableOwner. */
135: public VariableOwner getVariableOwner();
136:
137: }
138: }
|