de.swm.gwt.client.AbstractListPresenter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swm-gwt-client Show documentation
Show all versions of swm-gwt-client Show documentation
Plain GWT Swm erweiterungen, auch zur benutzung in mobilen Geraeten
package de.swm.gwt.client;
import de.swm.gwt.client.eventbus.ICustomData;
import de.swm.gwt.client.eventbus.IEvent;
import de.swm.gwt.client.eventbus.IEventHandler;
import de.swm.gwt.client.exception.MessagingUncaughtExceptionHandler;
import de.swm.gwt.client.interfaces.ILocation;
/**
* Abstrahierung des List Presenters.
*
* @author wiese.daniel
* copyright (C) 2010-13, SWM Services GmbH
*
* @param
* der Typ des DTO's
* @param der Typ des Formulars
*/
public abstract class AbstractListPresenter> implements IListPresenter {
private final ILocation contentPanel;
private ILocation lastRenderInLocation;
private Y formToControl;
/**
*
* Default constructor.
*
* @param contentPanel
* das Contentpanel
* @param formToControl das zu steuernde Formular
*/
public AbstractListPresenter(ILocation contentPanel, Y formToControl) {
this.contentPanel = contentPanel;
this.formToControl = formToControl;
formToControl.setPresenter(this);
}
/**
* Erzeugt einen event handler der ein show event behandelt - der konkrte Present muss
* dann die Methode handleShow
ueberschreiben.
*
* @return der event handler
*/
protected IEventHandler createShowHandler() {
return new IEventHandler() {
@Override
public void handleEvent(IEvent eventType, ILocation location, ICustomData customData) {
handleShow(eventType, location, customData);
}
};
}
/**
* Erzeugt einen event handler der ein hide event behandelt - der konkrte Present muss
* dann die Methode handleHide
ueberschreiben.
*
* @return der event handler
*/
protected IEventHandler createHideHandler() {
return new IEventHandler() {
@Override
public void handleEvent(IEvent eventType, ILocation location, ICustomData customData) {
handleHide(eventType, location, customData);
}
};
}
/**
* Erzeugt einen event handler der ein update event behandelt - der konkrte Present muss
* dann die Methode handleModelUpdate
ueberschreiben.
*
* @return der event handler
*/
protected IEventHandler createModelUpdateHandler() {
return new IEventHandler() {
@Override
public void handleEvent(IEvent eventType, ILocation location, ICustomData customData) {
handleModelUpdate(eventType, location, customData);
}
};
}
/**
* Erzeugt einen event handler der ein hide event behandelt - der konkrete Present muss
* dann die Methode handleHide
ueberschreiben.
*
* @return der event handler
*/
protected IEventHandler createModelDeletedHandler() {
return new IEventHandler() {
@Override
public void handleEvent(IEvent eventType, ILocation location, ICustomData customData) {
handleModelDelete(eventType, location, customData);
}
};
}
/**
* Erzeugt einen event handler der ein fehler event behandelt - der konkrete Present kann
* dann die Methode handleServerCallFailed
ueberschreiben.
*
* @return der event handler
*/
protected IEventHandler createServerCallFailedHandler(){
return new IEventHandler() {
@Override
public void handleEvent(IEvent eventType, ILocation location, ICustomData customData) {
handleServerCallFailed(eventType, location, customData);
}
};
}
/**
* Wird bei einem on Fehler aufgerufen.
*
* @param eventType der Event-Typ
* @param location die ziel Location zum Rendern
* @param customData use case spezifischen Daten
*/
protected void handleServerCallFailed(IEvent eventType, ILocation location, ICustomData customData) {
new MessagingUncaughtExceptionHandler(true).onUncaughtException(new RuntimeException("Beim Zugriff auf " +
"den Server ist eine Exception aufgetreten"));
}
/**
* Wird bei einem on Show-Event aufgerufen (bereits implementiert) - kann bei bedarf ueberschrieben werden.
*
* @param eventType der Event-Typ
* @param location die ziel Location zum Rendern
* @param customData use case spezifischen Daten
*/
protected void handleShow(IEvent eventType, ILocation location, ICustomData customData) {
getForm().render(getCurrentLocation(location));
}
/**
* Wird bei einem on Hide-Event aufgerufen (bereits implementiert) - kann bei bedarf ueberschrieben werden.
*
* @param eventType der Event-Typ
* @param location die ziel Location zum Rendern
* @param customData use case spezifischen Daten
*/
protected void handleHide(IEvent eventType, ILocation location, ICustomData customData) {
getForm().remove(getCurrentLocation(location));
}
protected void handleModelUpdate(IEvent eventType, ILocation location, ICustomData customData) {
getForm().onLoad();
if (customData != null && customData.userObject() != null) {
getForm().selectRow((T) customData.userObject());
}
}
/**
* Wird bei einem on Delete-Event aufgerufen (bereits implementiert) - kann bei bedarf ueberschrieben werden.
*
* @param eventType der Event-Typ
* @param location die ziel Location zum Rendern
* @param customData use case spezifischen Daten
*/
protected void handleModelDelete(IEvent eventType, ILocation location, ICustomData customData) {
getForm().onLoad();
}
/**
* Liefert das Formular, das der Presenter steuert.
* @return das Formular
*/
protected Y getForm() {
return formToControl;
}
/**
* {@inheritDoc}
* Hook-Methode, die ggf. ueberschrieben werden kann.
*/
@Override
public void onAddClicked() {
//Leere Implementierung, damit nicht jeder Presenter die Methode implementieren muss.
}
/**
* {@inheritDoc}
* Hook-Methode, die ggf. ueberschrieben werden kann.
*/
@Override
public void onRowSelected(T dto) {
//Leere Implementierung, damit nicht jeder Presenter die Methode implementieren muss.
}
/**
* Liefert den Content Pannel.
*
* @return den Content pannel.
*/
public ILocation getContentPanel() {
return contentPanel;
}
/**
* Setzt die letzte Location, in die dieses Formular hineingerendert wurde.
*
* @param lastRenderInLocation
* die letzte location in die dieses Formular hineingerendert wurde.
*/
public void setLastRenderInLocation(ILocation lastRenderInLocation) {
this.lastRenderInLocation = lastRenderInLocation;
}
/**
* Liefert die richtige derzeitige location des zugehoerigen Views.
*
* @param custom
* null oder aktuelle alternative location
* @return die location
*/
protected ILocation getCurrentLocation(ILocation custom) {
if (custom != null) {
return custom;
}
if (lastRenderInLocation != null) {
return lastRenderInLocation;
}
return this.contentPanel;
}
}