package es.upm.fi.dia.oeg.map4rdf.client.widget; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.customware.gwt.presenter.client.EventBus; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.LayoutPanel; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.ResizeComposite; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Widget; import es.upm.fi.dia.oeg.map4rdf.client.event.BufferSetPointEvent; import es.upm.fi.dia.oeg.map4rdf.client.event.RoutesAddPointEvent; import es.upm.fi.dia.oeg.map4rdf.client.presenter.DashboardPresenter; import es.upm.fi.dia.oeg.map4rdf.client.resource.BrowserResources; import es.upm.fi.dia.oeg.map4rdf.client.util.GeoResourceGeometry; import es.upm.fi.dia.oeg.map4rdf.client.util.PanelWithGeoResourceGeometry; import es.upm.fi.dia.oeg.map4rdf.client.util.RoutesAddGeoResourceType; import es.upm.fi.dia.oeg.map4rdf.share.GeoResource; import es.upm.fi.dia.oeg.map4rdf.share.Geometry; import es.upm.fi.dia.oeg.map4rdf.share.GeoprocessingType; public class PopupGeoprocessingViewWidget extends ResizeComposite { private int width; private int height; private GeoprocessingType type; private EventBus eventBus; private List<GeoResourceGeometry> searchResources; private Map<ClickHandler,PanelWithGeoResourceGeometry> searchRelationHandler; private LayoutPanel panel; private Panel search; private BrowserResources browserResources; private ScrollPanel scrollPanel; private DashboardPresenter dashboardPresenter; public PopupGeoprocessingViewWidget(int width,int height,EventBus eventBus,DashboardPresenter dashboardPresenter,GeoprocessingType type,BrowserResources browserResources){ this.width=width; this.height=height; this.browserResources=browserResources; this.eventBus=eventBus; this.dashboardPresenter=dashboardPresenter; this.type=type; searchRelationHandler=new HashMap<ClickHandler, PanelWithGeoResourceGeometry>(); searchResources=new ArrayList<GeoResourceGeometry>(); initWidget(createUi()); } public void clear(){ search.clear(); searchRelationHandler.clear(); searchResources.clear(); } private Widget createUi() { panel = new LayoutPanel(); panel.setSize(width+"px", height+"px"); panel.setStyleName(browserResources.css().searchPanel()); search = new FlowPanel(); scrollPanel = new ScrollPanel(); scrollPanel.setWidget(search); panel.add(scrollPanel); return panel; } public void addSearchResultGeoResource(String label,GeoResourceGeometry geoResourceGeometry){ GeoResource resource= geoResourceGeometry.getResource(); searchResources.add(geoResourceGeometry); Anchor anchor = new Anchor(label, resource.getUri()); anchor.setTarget("_blank"); FlowPanel anchorContainer = new FlowPanel(); Button button = new Button(); button.setSize("32px","28px"); button.getElement().appendChild(new Image(browserResources.plusIcon()).getElement()); anchorContainer.add(button); anchorContainer.add(new InlineHTML("<a> </a>")); anchorContainer.add(anchor); ClickHandler handler = new ClickHandler() { @Override public void onClick(ClickEvent event) { addOrSetResource(this); dashboardPresenter.getDisplay().closeMainPopup(); } }; button.addClickHandler(handler); searchRelationHandler.put(handler, new PanelWithGeoResourceGeometry(geoResourceGeometry,anchorContainer)); search.add(anchorContainer); } private void addOrSetResource(ClickHandler handler){ GeoResource resource=searchRelationHandler.get(handler).getGeoResourceGeometry().getResource(); Geometry geometry=searchRelationHandler.get(handler).getGeoResourceGeometry().getGeometry(); switch (type) { case Route: eventBus.fireEvent(new RoutesAddPointEvent(resource, geometry,RoutesAddGeoResourceType.RoutesPopup)); break; case Buffer: eventBus.fireEvent(new BufferSetPointEvent(resource, geometry)); break; default: break; } } }