package es.upm.fi.dia.oeg.map4rdf.client.view; import net.customware.gwt.dispatch.client.DispatchAsync; import net.customware.gwt.presenter.client.EventBus; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.ResizeComposite; import com.google.gwt.user.client.ui.TabLayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import es.upm.fi.dia.oeg.map4rdf.client.action.GetConfigurationParameter; import es.upm.fi.dia.oeg.map4rdf.client.action.SingletonResult; import es.upm.fi.dia.oeg.map4rdf.client.conf.ConfIDInterface; import es.upm.fi.dia.oeg.map4rdf.client.event.OnSelectedConfiguration; import es.upm.fi.dia.oeg.map4rdf.client.event.OnSelectedConfigurationHandler; import es.upm.fi.dia.oeg.map4rdf.client.presenter.BufferPresenter; import es.upm.fi.dia.oeg.map4rdf.client.presenter.DashboardPresenter; import es.upm.fi.dia.oeg.map4rdf.client.presenter.GeoprocessingPresenter; import es.upm.fi.dia.oeg.map4rdf.client.presenter.RoutesPresenter; import es.upm.fi.dia.oeg.map4rdf.client.resource.BrowserMessages; import es.upm.fi.dia.oeg.map4rdf.client.util.WidgetsNames; import es.upm.fi.dia.oeg.map4rdf.share.conf.ParameterNames; public class GeoprocessingView extends ResizeComposite implements GeoprocessingPresenter.Display{ private RoutesPresenter routesPresenter; private DashboardPresenter dashboardPresenter; private BrowserMessages browserMessages; private BufferPresenter bufferPresenter; private TabLayoutPanel panel; public static interface Stylesheet { String geoprocessingLabel(); String searchBox(); String distanceBox(); String routesResourceBox(); } @Inject public GeoprocessingView(final ConfIDInterface configID,RoutesPresenter routesPresenter, BufferPresenter bufferPresenter, BrowserMessages browserMessages, final DispatchAsync dispatchAsync, EventBus eventBus){ this.routesPresenter=routesPresenter; this.bufferPresenter=bufferPresenter; this.browserMessages=browserMessages; routesPresenter.getDisplay().setGeoprocessingDisplay(this); bufferPresenter.getDisplay().setGeoprocessingDisplay(this); if(configID.existsConfigID()){ initAsync(configID.getConfigID(), dispatchAsync); }else{ eventBus.addHandler(OnSelectedConfiguration.getType(), new OnSelectedConfigurationHandler() { @Override public void onSelectecConfiguration(String configID) { initAsync(configID, dispatchAsync); } }); } panel = new TabLayoutPanel(22, Unit.PX); initWidget(panel); } private void initAsync(String configID, DispatchAsync dispatchAsync){ dispatchAsync.execute(new GetConfigurationParameter(configID,ParameterNames.SUMMARY_WIDGETS), new AsyncCallback<SingletonResult<String>>() { @Override public void onFailure(Throwable caught) { } @Override public void onSuccess(SingletonResult<String> value) { if(value.getValue()!=null && !value.getValue().isEmpty()){ createAsyncUi(value.getValue()); } } }); } private void createAsyncUi(String widgets) { if(widgets!=null){ if(widgets.contains(WidgetsNames.ROUTES)){ panel.add(routesPresenter.getDisplay().asWidget(),browserMessages.routes()); panel.selectTab(routesPresenter.getDisplay().asWidget()); } if(widgets.contains(WidgetsNames.BUFFER)){ panel.add(bufferPresenter.getDisplay().asWidget(),browserMessages.buffer()); panel.selectTab(bufferPresenter.getDisplay().asWidget()); } } } @Override public Widget asWidget() { return this; } @Override public void setDashboardPresenter(DashboardPresenter dashboardPresenter) { this.dashboardPresenter=dashboardPresenter; routesPresenter.getDisplay().setDashboardPresenter(dashboardPresenter); bufferPresenter.getDisplay().setDashboardPresenter(dashboardPresenter); } @Override public void doSelectedView(Widget widget) { //if(widget isChildrenOf panel) if(panel.getWidgetIndex(widget)!=-1){ panel.selectTab(widget); if(dashboardPresenter!=null){ dashboardPresenter.getDisplay().doSelectedWestWidget(this); } } } @Override public int getContentHeight() { return panel.getOffsetHeight(); } @Override public int getContentWidth() { return panel.getOffsetWidth(); } @Override public void onResize(){ panel.onResize(); routesPresenter.getDisplay().resize(); } }