ingo@41: package de.intevation.flys.client.client.ui;
ingo@41:
ingo@41: import java.util.ArrayList;
ingo@41: import java.util.List;
ingo@41:
ingo@41: import com.google.gwt.core.client.GWT;
ingo@41:
ingo@41: import com.smartgwt.client.widgets.Canvas;
ingo@41: import com.smartgwt.client.widgets.events.ClickEvent;
ingo@41: import com.smartgwt.client.widgets.events.ClickHandler;
ingo@41:
ingo@41: import de.intevation.flys.client.client.event.HasStepForwardHandlers;
ingo@41: import de.intevation.flys.client.client.event.StepForwardEvent;
ingo@41: import de.intevation.flys.client.client.event.StepForwardHandler;
ingo@41: import de.intevation.flys.client.shared.model.Data;
ingo@51: import de.intevation.flys.client.shared.model.DataList;
ingo@41:
ingo@41:
ingo@41: /**
ingo@41: * An abstract UIProvider that provides some basic methods.
ingo@41: *
ingo@41: * @author Ingo Weinzierl
ingo@41: */
ingo@41: public abstract class AbstractUIProvider
ingo@41: implements UIProvider, HasStepForwardHandlers, ClickHandler
ingo@41: {
ingo@41: /** The StepForwardHandlers.*/
ingo@41: protected List forwardHandlers;
ingo@41:
ingo@41:
ingo@41: /**
ingo@41: * Creates a new UIProvider instance of this class.
ingo@41: */
ingo@41: public AbstractUIProvider() {
ingo@41: forwardHandlers = new ArrayList();
ingo@41: }
ingo@41:
ingo@41:
ingo@41: /**
ingo@41: * Appends a StepForwardHandler that wants to listen to StepForwardEvents.
ingo@41: *
ingo@41: * @param handler A new StepForwardHandler.
ingo@41: */
ingo@41: public void addStepForwardHandler(StepForwardHandler handler) {
ingo@41: if (handler != null) {
ingo@41: forwardHandlers.add(handler);
ingo@41: }
ingo@41: }
ingo@41:
ingo@41:
ingo@41: /**
ingo@41: * This method is called after the user has clicked on the 'next' button to
ingo@41: * step to the next state.
ingo@41: *
ingo@41: * @param e The StepForwardEvent.
ingo@41: */
ingo@41: protected void fireStepForwardEvent(StepForwardEvent e) {
ingo@41: GWT.log("AbstractUIProvider - fireStepForwardEvent() handlers: " + forwardHandlers.size());
ingo@41: for (StepForwardHandler handler: forwardHandlers) {
ingo@41: handler.onStepForward(e);
ingo@41: }
ingo@41: }
ingo@41:
ingo@41:
ingo@41: /**
ingo@41: * This method is used to listen to click events on the 'next' button. The
ingo@41: * fireStepForwardEvent() method is called here.
ingo@41: *
ingo@41: * @param e The click event.
ingo@41: */
ingo@41: public void onClick(ClickEvent e) {
ingo@41: Data[] data = getData();
ingo@41:
ingo@41: fireStepForwardEvent(new StepForwardEvent(data));
ingo@41: }
ingo@41:
ingo@41:
ingo@41: /**
ingo@41: * This method needs to be implemented by concrete subclasses. It should
ingo@41: * create a new Canvas object with a representation of data.
ingo@41: *
ingo@41: * @param data The data that should be displayed.
ingo@41: *
ingo@41: * @return a Canvas object that displays data.
ingo@41: */
ingo@51: public abstract Canvas create(DataList data);
ingo@41:
ingo@41:
ingo@41: /**
ingo@41: * This method needs to be implemented by concrete subclasses. It should
ingo@41: * return the selected data.
ingo@41: *
ingo@41: * @return the selected data.
ingo@41: */
ingo@41: protected abstract Data[] getData();
ingo@41: }
ingo@41: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :