package com.google.gwt.ricordo.client;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.ricordo.client.event.AnnotAppEvent;
import com.google.gwt.ricordo.client.event.AnnotAppEventHandler;
import com.google.gwt.ricordo.client.event.AnnotVariableEvent;
import com.google.gwt.ricordo.client.event.AnnotVariableEventHandler;
import com.google.gwt.ricordo.client.event.BackToMainEvent;
import com.google.gwt.ricordo.client.event.BackToMainEventHandler;
import com.google.gwt.ricordo.client.event.CancelAnnotEvent;
import com.google.gwt.ricordo.client.event.CancelAnnotEventHandler;
import com.google.gwt.ricordo.client.event.CompAppEvent;
import com.google.gwt.ricordo.client.event.CompAppEventHandler;
import com.google.gwt.ricordo.client.event.MSyntaxQueryCancelEvent;
import com.google.gwt.ricordo.client.event.MSyntaxQueryCancelHandler;
import com.google.gwt.ricordo.client.event.MSyntaxQueryConstructEvent;
import com.google.gwt.ricordo.client.event.MSyntaxQueryConstructEventHandler;
import com.google.gwt.ricordo.client.event.MSyntaxQuerySelectEvent;
import com.google.gwt.ricordo.client.event.MSyntaxQuerySelectEventHandler;
import com.google.gwt.ricordo.client.event.ModelDetailsCancelledEvent;
import com.google.gwt.ricordo.client.event.ModelDetailsCancelledEventHandler;
import com.google.gwt.ricordo.client.event.ModelDetailsEvent;
import com.google.gwt.ricordo.client.event.ModelDetailsEventHandler;
import com.google.gwt.ricordo.client.event.QueryAppEvent;
import com.google.gwt.ricordo.client.event.QueryAppEventHandler;
import com.google.gwt.ricordo.client.presenter.AnnotVariablePresenter;
import com.google.gwt.ricordo.client.presenter.AnnotationPresenter;
import com.google.gwt.ricordo.client.presenter.CompositePresenter;
import com.google.gwt.ricordo.client.presenter.ManchesterSyntaxPresenter;
import com.google.gwt.ricordo.client.presenter.ModelDetailsPresenter;
import com.google.gwt.ricordo.client.presenter.Presenter;
import com.google.gwt.ricordo.client.presenter.QueryPresenter;
import com.google.gwt.ricordo.client.presenter.RicordoMainPresenter;
import com.google.gwt.ricordo.client.view.AnnotVariableView;
import com.google.gwt.ricordo.client.view.AnnotationView;
import com.google.gwt.ricordo.client.view.CompositeView;
import com.google.gwt.ricordo.client.view.ManchesterSyntaxView;
import com.google.gwt.ricordo.client.view.ModelDetailsView;
import com.google.gwt.ricordo.client.view.QueryView;
import com.google.gwt.ricordo.client.view.RicordoMainView;
import com.google.gwt.ricordo.client.view.TitlePanel;
import com.google.gwt.ricordo.shared.ModelSearch;
import com.google.gwt.ricordo.shared.VariableSearch;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.HasWidgets;
public class AppController implements Presenter, ValueChangeHandler<String> {
public static String QUERY_PAGE = "query";
public static String COMPOSITE_PAGE = "composite";
public static String VARANNOT_PAGE="variableAnnot";
private final HandlerManager eventBus;
private final QueryServiceAsync rpcService;
private HasWidgets container;
public AppController(QueryServiceAsync rpcService, HandlerManager eventBus) {
this.eventBus = eventBus;
this.rpcService = rpcService;
bind();
}
private void bind() {
History.addValueChangeHandler(this);
eventBus.addHandler(QueryAppEvent.TYPE,
new QueryAppEventHandler() {
public void onQueryAppEvent(QueryAppEvent event) {
doQueryAppEvent();
}
});
eventBus.addHandler(ModelDetailsEvent.TYPE,
new ModelDetailsEventHandler() {
public void onEditContact(ModelDetailsEvent event) {
doEditContact(event.getModelSearch());
}
});
eventBus.addHandler(ModelDetailsCancelledEvent.TYPE,
new ModelDetailsCancelledEventHandler() {
public void onEditContactCancelled(ModelDetailsCancelledEvent event) {
doEditContactCancelled(event.getModelSearch());
}
});
eventBus.addHandler(CompAppEvent.TYPE,
new CompAppEventHandler() {
public void onCompAppEvent(CompAppEvent event) {
doCompAppEvent();
}
});
eventBus.addHandler(AnnotAppEvent.TYPE,
new AnnotAppEventHandler() {
public void onAnnotAppEvent(AnnotAppEvent event) {
doAnnotAppEvent();
}
});
eventBus.addHandler(AnnotVariableEvent.TYPE,
new AnnotVariableEventHandler() {
public void onVariableSelect(AnnotVariableEvent event) {
doVariableSelect(event.getVariableSearch());
}
});
eventBus.addHandler(BackToMainEvent.TYPE,
new BackToMainEventHandler() {
public void onBackToMain(BackToMainEvent event) {
doBackToMain();
}
});
eventBus.addHandler(CancelAnnotEvent.TYPE,
new CancelAnnotEventHandler() {
public void onAnnotCancelled(CancelAnnotEvent event) {
doAnnotCancel(event.getVariableSearch());
}
});
eventBus.addHandler(MSyntaxQuerySelectEvent.TYPE,
new MSyntaxQuerySelectEventHandler() {
public void onSelectMancesterQuery(MSyntaxQuerySelectEvent event) {
doSelectManchesterQuery(event.getManQuery(), event.getParentPage(), event.getVariableSearch());
}
});
eventBus.addHandler(MSyntaxQueryCancelEvent.TYPE,
new MSyntaxQueryCancelHandler() {
public void onCancelMancesterQuery(MSyntaxQueryCancelEvent event) {
doCancelManchesterQuery(event.getParentPage(),event.getVariableSearch());
}
});
eventBus.addHandler(MSyntaxQueryConstructEvent.TYPE,
new MSyntaxQueryConstructEventHandler() {
public void onConstructManchesterQuery(MSyntaxQueryConstructEvent event) {
doConstructManchesterQuery(event.getParentPage(),event.getVariableSearch());
}
});
}
private void doQueryAppEvent(){
History.newItem(QUERY_PAGE,false);
Presenter presenter = new QueryPresenter(rpcService, eventBus, new QueryView());
presenter.go(container);
}
private void doEditContact(ModelSearch modelSearch) {
History.newItem("edit", false);
Presenter presenter = new ModelDetailsPresenter(rpcService, eventBus, new ModelDetailsView(), modelSearch);
presenter.go(container);
}
private void doEditContactCancelled(ModelSearch modelSearch) {
History.newItem(QUERY_PAGE);
Presenter presenter = new QueryPresenter(rpcService, eventBus, new QueryView(),modelSearch);
presenter.go(container);
}
private void doCompAppEvent(){
History.newItem(COMPOSITE_PAGE,false);
Presenter presenter = new CompositePresenter(rpcService,eventBus, new CompositeView());
presenter.go(container);
}
private void doAnnotAppEvent(){
History.newItem("annotation",false);
Presenter presenter = new AnnotationPresenter(rpcService,eventBus, new AnnotationView());
presenter.go(container);
}
private void doVariableSelect(VariableSearch variableSearch) {
History.newItem(VARANNOT_PAGE, false);
Presenter presenter = new AnnotVariablePresenter(rpcService, eventBus, new AnnotVariableView(), variableSearch);
presenter.go(container);
}
private void doBackToMain() {
History.newItem("ricordoapp");
}
private void doAnnotCancel(VariableSearch variableSearch) {
History.newItem("annotation");
Presenter presenter = new AnnotationPresenter(rpcService,eventBus, new AnnotationView(), variableSearch);
presenter.go(container);
}
private void doSelectManchesterQuery(String manQuery, String parentPage, VariableSearch variableSearch) {
Presenter presenter = null;
if (parentPage.equals(QUERY_PAGE)) {
History.newItem(QUERY_PAGE);
presenter = new QueryPresenter(rpcService, eventBus, new QueryView(), manQuery);
} else if (parentPage.equals(COMPOSITE_PAGE)) {
History.newItem(COMPOSITE_PAGE);
presenter = new CompositePresenter(rpcService, eventBus, new CompositeView(), manQuery);
} else if (parentPage.equals(VARANNOT_PAGE)){
History.newItem(VARANNOT_PAGE);
presenter = new AnnotVariablePresenter(rpcService, eventBus, new AnnotVariableView(), manQuery, variableSearch);
}
presenter.go(container);
}
private void doCancelManchesterQuery(String parentPage, VariableSearch variableSearch) {
Presenter presenter = null;
if(parentPage.equals(QUERY_PAGE)){
History.newItem(QUERY_PAGE);
presenter = new QueryPresenter(rpcService,eventBus, new QueryView());
}
else if (parentPage.equals(COMPOSITE_PAGE)){
History.newItem(COMPOSITE_PAGE);
presenter = new CompositePresenter(rpcService, eventBus, new CompositeView());
}
else if (parentPage.equals(VARANNOT_PAGE)){
History.newItem(VARANNOT_PAGE);
presenter = new AnnotVariablePresenter(rpcService, eventBus, new AnnotVariableView(), variableSearch);
}
presenter.go(container);
}
private void doConstructManchesterQuery(String parentPage, VariableSearch variableSearch) {
History.newItem("manchesterQuery");
Presenter presenter= null;
if(parentPage.equals(VARANNOT_PAGE)){
presenter= new ManchesterSyntaxPresenter(rpcService, eventBus, new ManchesterSyntaxView(TitlePanel.QUERY_TITLE), parentPage,variableSearch);
}else{
presenter= new ManchesterSyntaxPresenter(rpcService,eventBus, new ManchesterSyntaxView(TitlePanel.QUERY_TITLE),parentPage);
}
presenter.go(container);
}
public void go(final HasWidgets container) {
this.container = container;
if ("".equals(History.getToken())) {
History.newItem("ricordoapp");
}
else {
History.fireCurrentHistoryState();
}
}
public void onValueChange(ValueChangeEvent<String> event) {
String token = event.getValue();
if (token != null) {
Presenter presenter = null;
if (token.equals("ricordoapp")) {
presenter = new RicordoMainPresenter(rpcService, eventBus, new RicordoMainView());
}
else if (token.equals(QUERY_PAGE)) {
presenter = new QueryPresenter(rpcService, eventBus, new QueryView());
}
if (presenter != null) {
presenter.go(container);
}
}
}
}