/**
*
*/
package com.piki.client.mvp.place;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.piki.client.mvp.HasEventBus;
import com.piki.client.mvp.ChangeablePresenter;
import com.piki.client.mvp.Presenter;
import com.piki.client.mvp.SimpleViewBinder;
/**
* @author HaraldPaul
*
*/
public abstract class AbstractPresenterActivity<P extends Presenter> implements PresenterActivity {
protected P presenter = null;
/**
*
*/
private AbstractPresenterActivity() {
super();
}
protected AbstractPresenterActivity(P presenter) {
this();
this.presenter = presenter;
}
@Override
public String mayStop() {
if (presenter == null)
throw new IllegalStateException("missing presenter");
if (presenter instanceof ChangeablePresenter) {
ChangeablePresenter cp = (ChangeablePresenter) presenter;
return (cp.isModify() ? cp.getName() + "hat sich geändert" : null);
}
return null;
}
@Override
public void onCancel() {
if (presenter == null)
throw new IllegalStateException("missing presenter");
presenter.close();
}
@Override
public void onStop() {
if (presenter == null)
throw new IllegalStateException("missing presenter");
if (presenter instanceof ChangeablePresenter) {
ChangeablePresenter cp = (ChangeablePresenter) presenter;
cp.save();
cp.close();
}
}
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
if (presenter == null)
throw new IllegalStateException("missing presenter");
if (presenter instanceof HasEventBus) {
HasEventBus hasEventBus = (HasEventBus) presenter;
hasEventBus.setEventBus(eventBus);
}
presenter.show(new SimpleViewBinder(panel));
}
abstract public void goTo(Place place);
/**
* @return the presenter
*/
public Presenter getPresenter() {
return presenter;
}
}