Package org.geomajas.widget.searchandfilter.client.widget.geometricsearch

Source Code of org.geomajas.widget.searchandfilter.client.widget.geometricsearch.SelectionSearch

/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2011 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.widget.searchandfilter.client.widget.geometricsearch;

import java.util.ArrayList;
import java.util.List;

import org.geomajas.gwt.client.map.MapView.ZoomOption;
import org.geomajas.gwt.client.map.feature.Feature;
import org.geomajas.gwt.client.map.layer.VectorLayer;
import org.geomajas.gwt.client.map.store.VectorLayerStore;
import org.geomajas.gwt.client.spatial.Bbox;
import org.geomajas.gwt.client.spatial.geometry.Geometry;
import org.geomajas.widget.searchandfilter.client.SearchAndFilterMessages;
import org.geomajas.widget.searchandfilter.client.util.SearchCommService;
import org.geomajas.widget.searchandfilter.client.util.DataCallback;

import com.google.gwt.core.client.GWT;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.SpinnerItem;
import com.smartgwt.client.widgets.layout.VLayout;

/**
* @author Kristof Heirwegh
* @author Bruce Palmkoeck
*/
public class SelectionSearch extends AbstractGeometricSearchMethod {

  private SearchAndFilterMessages messages = GWT.create(SearchAndFilterMessages.class);

  private static final String BTN_ADD_IMG = "[ISOMORPHIC]/geomajas/osgeo/selected-add.png";
  private static final String BTN_FOCUS_IMG =  "[ISOMORPHIC]/geomajas/osgeo/zoom-selection.png";

  private DynamicForm frmBuffer;
  private SpinnerItem spiBuffer;
  private Geometry geometry;

  public String getTitle() {
    return messages.geometricSearchWidgetSelectionSearchTitle();
  }

  public void reset() {
    geometry = null;
    frmBuffer.reset();
  }

  public Canvas getSearchCanvas() {
    VLayout mainLayout = new VLayout(20);
    mainLayout.setWidth100();
    mainLayout.setHeight100();
    mainLayout.setPadding(5);

    Label titleBar = new Label(messages.geometricSearchWidgetSelectionSearchTitle());
    titleBar.setBackgroundColor("#E0E9FF");
    titleBar.setWidth100();
    titleBar.setHeight(20);
    titleBar.setPadding(5);

    IButton btnZoom = new IButton(messages.geometricSearchWidgetSelectionSearchZoomToSelection());
    btnZoom.setIcon(BTN_FOCUS_IMG);
    btnZoom.setAutoFit(true);
    btnZoom.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        onZoomClick();
      }
    });

    IButton btnAdd = new IButton(messages.geometricSearchWidgetSelectionSearchAddSelection());
    btnAdd.setIcon(BTN_ADD_IMG);
    btnAdd.setAutoFit(true);
    btnAdd.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        onAddClick();
      }
    });

    frmBuffer = new DynamicForm();
    frmBuffer.setWidth100();
    spiBuffer = new SpinnerItem();
    spiBuffer.setTitle(messages.geometricSearchWidgetBufferLabel());
    spiBuffer.setDefaultValue(5);
    spiBuffer.setMin(0);
    spiBuffer.setWidth(60);
    frmBuffer.setFields(spiBuffer);

    // ----------------------------------------------------------

    mainLayout.addMember(titleBar);
    mainLayout.addMember(btnZoom);
    mainLayout.addMember(frmBuffer);
    mainLayout.addMember(btnAdd);

    return mainLayout;
  }

  private void onAddClick() {
    List<Geometry> geoms = new ArrayList<Geometry>();
    for (VectorLayer layer : mapWidget.getMapModel().getVectorLayers()) {
      if (layer.isShowing()) {
        VectorLayerStore store = layer.getFeatureStore();
        for (String featureId : layer.getSelectedFeatures()) {
          Feature f = store.getPartialFeature(featureId);
          if (f.isSelected()) {
            geoms.add(f.getGeometry());
          }
        }
      }
    }
    if (geoms.size() == 0) {
      SC.say(messages.geometricSearchWidgetSelectionSearchNothingSelected());
    } else {
      Integer buffer = (Integer) spiBuffer.getValue();
      if (buffer != 0) {
        SearchCommService.mergeAndBufferGeometries(geoms, buffer, new DataCallback<Geometry[]>() {
          public void execute(Geometry[] result) {
            updateGeometry(geometry, result[1]);
            geometry = result[1];
          }
        });
      } else {
        SearchCommService.mergeGeometries(geoms, new DataCallback<Geometry>() {
          public void execute(Geometry result) {
            updateGeometry(geometry, result);
            geometry = result;
          }
        });
      }
    }
  }

  private void onZoomClick() {
    Bbox bounds = null;
    for (VectorLayer layer : mapWidget.getMapModel().getVectorLayers()) {
      if (layer.isShowing()) {
        VectorLayerStore store = layer.getFeatureStore();
        for (String featureId : layer.getSelectedFeatures()) {
          Feature f = store.getPartialFeature(featureId);
          if (bounds == null) {
            bounds = f.getGeometry().getBounds();
          } else {
            bounds = bounds.union(f.getGeometry().getBounds());
          }
        }
      }
    }
    if (bounds == null) {
      SC.say(messages.geometricSearchWidgetSelectionSearchNothingSelected());
    } else {
      mapWidget.getMapModel().getMapView().applyBounds(bounds, ZoomOption.LEVEL_FIT);
    }
  }
}
TOP

Related Classes of org.geomajas.widget.searchandfilter.client.widget.geometricsearch.SelectionSearch

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.