001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.wicket.extensions.wizard;
018:
019: import java.util.ArrayList;
020: import java.util.Iterator;
021: import java.util.List;
022:
023: /**
024: * Abstract wizard model that provides an implementation for handling
025: * {@link IWizardModelListener wizard model listeners} and provides base
026: * implementations of many methods. If you want to provide a custom
027: * implementation of {@link IWizardModel}, it is recommended you start by
028: * overriding this class.
029: *
030: * @author eelcohillenius
031: */
032: public abstract class AbstractWizardModel implements IWizardModel {
033:
034: /** Whether cancel functionality is available. */
035: private boolean cancelVisible = true;
036:
037: /** Whether the last button should be shown at all; false by default. */
038: private boolean lastVisible = false;
039:
040: /** Listeners for {@link IWizardModelListener model events}. */
041: private final List wizardModelListeners = new ArrayList(1);
042:
043: /**
044: * Construct.
045: */
046: public AbstractWizardModel() {
047: }
048:
049: /**
050: * Adds a wizard model listener.
051: *
052: * @param listener
053: * The listener to add
054: */
055: public final void addListener(IWizardModelListener listener) {
056: this .wizardModelListeners.add(listener);
057: }
058:
059: /**
060: * This implementation just fires
061: * {@link IWizardModelListener#onCancel() a cancel event}. Though this
062: * isn't a very strong contract, it gives all the power to the user of this
063: * model.
064: *
065: * @see IWizardModel#cancel()
066: */
067: public void cancel() {
068: fireWizardCancelled();
069: }
070:
071: /**
072: * This implementation just fires
073: * {@link IWizardModelListener#onFinish() a finish event}. Though this
074: * isn't a very strong contract, it gives all the power to the user of this
075: * model.
076: *
077: * @see IWizardModel#finish()
078: */
079: public void finish() {
080: fireWizardFinished();
081: }
082:
083: /**
084: * Gets whether cancel functionality is available.
085: *
086: * @return Whether cancel functionality is available
087: */
088: public boolean isCancelVisible() {
089: return cancelVisible;
090: }
091:
092: /**
093: * Checks if the last button should be displayed. This method should only
094: * return true if {@link IWizardModel#isLastAvailable} can return true at
095: * any point. Returning false will prevent the last button from appearing on
096: * the wizard at all.
097: *
098: * @return <tt>true</tt> if the previou last should be displayed,
099: * <tt>false</tt> otherwise.
100: */
101: public boolean isLastVisible() {
102: return lastVisible;
103: }
104:
105: /**
106: * Removes a wizard model listener.
107: *
108: * @param listener
109: * The listener to remove
110: */
111: public final void removeListener(IWizardModelListener listener) {
112: this .wizardModelListeners.remove(listener);
113: }
114:
115: /**
116: * Sets whether cancel functionality is available.
117: *
118: * @param cancelVisible
119: * Whether cancel functionality is available
120: */
121: public void setCancelVisible(boolean cancelVisible) {
122: this .cancelVisible = cancelVisible;
123: }
124:
125: /**
126: * Configures if the last button should be displayed.
127: *
128: * @param lastVisible
129: * <tt>true</tt> to display the last button, <tt>false</tt>
130: * otherwise.
131: * @see #isLastVisible
132: */
133: public void setLastVisible(boolean lastVisible) {
134: this .lastVisible = lastVisible;
135: }
136:
137: /**
138: * Notify listeners that the active step has changed.
139: *
140: * @param step
141: * The new step
142: */
143: protected final void fireActiveStepChanged(IWizardStep step) {
144: for (Iterator i = wizardModelListeners.iterator(); i.hasNext();) {
145: IWizardModelListener listener = (IWizardModelListener) i
146: .next();
147: listener.onActiveStepChanged(step);
148: }
149: }
150:
151: /**
152: * Notify listeners that the wizard is finished.
153: */
154: protected final void fireWizardCancelled() {
155: for (Iterator i = wizardModelListeners.iterator(); i.hasNext();) {
156: IWizardModelListener listener = (IWizardModelListener) i
157: .next();
158: listener.onCancel();
159: }
160: }
161:
162: /**
163: * Notify listeners that the wizard is finished.
164: */
165: protected final void fireWizardFinished() {
166: for (Iterator i = wizardModelListeners.iterator(); i.hasNext();) {
167: IWizardModelListener listener = (IWizardModelListener) i
168: .next();
169: listener.onFinish();
170: }
171: }
172: }
|