package ch.vorburger.appviewsnflows.vaadin; import com.vaadin.ui.Component; /** * Abstract base class with typical implementation of Event interface. * * @author Michael Vorburger */ public abstract class AbstractView<T> extends ch.vorburger.appviewsnflows.AbstractView implements View<T> { private/* final */Presenter presenter; private final Component root; abstract protected Component createRootComponent(); public AbstractView(Presenter presenter) { super(null/* presenter.getFlow() */); // TODO ! this.presenter = presenter; root = createRootComponent(); } @Override public final Component getRootComponent() { return root; } @Override public void setModel(T model) { throw new UnsupportedOperationException(); } @Override public void setSubView(String slotName, View<?> subView) { throw new UnsupportedOperationException(slotName); } protected Presenter getPresenter() { if (presenter == null) { throw new IllegalStateException("Presenter not set on View"); } return presenter; } public void setPresenter(Presenter presenter) { if (this.presenter == null) { this.presenter = presenter; } else { throw new IllegalStateException("Presenter already set"); } } }