Package org.geomajas.widget.searchandfilter.client.widget.search

Source Code of org.geomajas.widget.searchandfilter.client.widget.search.SearchController

/*
* 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.search;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.geomajas.global.Api;
import org.geomajas.gwt.client.map.feature.Feature;
import org.geomajas.gwt.client.map.layer.VectorLayer;
import org.geomajas.gwt.client.widget.MapWidget;
import org.geomajas.widget.featureinfo.client.widget.DockableWindow;
import org.geomajas.widget.searchandfilter.client.SearchAndFilterMessages;
import org.geomajas.widget.searchandfilter.client.util.DataCallback;
import org.geomajas.widget.searchandfilter.client.util.SearchCommService;
import org.geomajas.widget.searchandfilter.client.widget.search.SearchWidget.SearchRequestEvent;
import org.geomajas.widget.searchandfilter.client.widget.search.SearchWidget.SearchRequestHandler;

import com.google.gwt.core.client.GWT;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.layout.HLayout;

/**
* Controller to handle the searches.
*
* @see {@link SearchWidgetRegistry}.
* @author Kristof Heirwegh
* @since 1.0.0
*/
@Api
public class SearchController implements SearchRequestHandler {

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

  private final Set<SearchHandler> searchHandlers = new HashSet<SearchHandler>();
  private MapWidget mapWidget;
  private boolean modalSearch;
  private Window modalWindow;

  /**
   * Construct search controller.
   *
   * @param mapWidget map widget
   * @param modalSearch should result be shown in a modal window
   */
  public SearchController(MapWidget mapWidget, boolean modalSearch) {
    this.mapWidget = mapWidget;
    this.modalSearch = modalSearch;
  }

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

  public void onSearchRequested(SearchRequestEvent event) {
    final SearchEvent searchEvent = new SearchEvent();
    searchEvent.setCriterion(event.getCriterion());
    fireSearchStartEvent(searchEvent);
    SearchCommService.searchByCriterion(event.getCriterion(), mapWidget,
        new DataCallback<Map<VectorLayer, List<Feature>>>() {

          public void execute(Map<VectorLayer, List<Feature>> result) {
            searchEvent.setResult(result);
            fireSearchDoneEvent(searchEvent);
            fireSearchEndEvent(searchEvent);

          }
        }, new ErrorHandler() {

          public void execute() {
            destroyModalWindow();
            SC.say(messages.searchControllerFailureMessage());
          }
        });
  }

  /**
   * For instance {@link org.geomajas.widget.searchandfilter.client.widget.multifeaturelistgrid.MultiFeatureListGrid}.
   *
   * @param handler handler to process the search results
   */
  public void addSearchHandler(SearchHandler handler) {
    searchHandlers.add(handler);
  }

  public void removeSearchHandler(SearchHandler handler) {
    searchHandlers.remove(handler);
  }

  public boolean isModalSearch() {
    return modalSearch;
  }

  public void setModalSearch(boolean modalSearch) {
    this.modalSearch = modalSearch;
  }

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

  private void fireSearchStartEvent(SearchEvent event) {
    showModalWindow();
    for (SearchHandler handler : searchHandlers) {
      handler.onSearchStart(event);
    }
  }

  private void fireSearchDoneEvent(SearchEvent event) {
    for (SearchHandler handler : searchHandlers) {
      handler.onSearchDone(event);
    }
  }

  private void fireSearchEndEvent(SearchEvent event) {
    for (SearchHandler handler : searchHandlers) {
      handler.onSearchEnd(event);
    }
    hideModalWindow();
  }

  private void showModalWindow() {
    if (isModalSearch()) {
      if (modalWindow == null) {
        HLayout layout = new HLayout();
        layout.setHeight(20);
        layout.setWidth100();
        layout.addMember(new Img("[ISOMORPHIC]/geomajas/ajax-loader.gif", 18, 18));
        layout.addMember(new Label(messages.searchControllerSearchingMessage()));
        modalWindow = new DockableWindow();
        modalWindow.setTitle(messages.searchControllerSearchingTitle());
        modalWindow.setAlign(Alignment.CENTER);
        modalWindow.setPadding(20);
        modalWindow.setHeight(100);
        modalWindow.setWidth(300);
        modalWindow.addItem(layout);
        modalWindow.setAutoCenter(true);
        modalWindow.setShowMinimizeButton(false);
        modalWindow.setShowCloseButton(false);
        modalWindow.setIsModal(true);
        modalWindow.setShowModalMask(true);
        modalWindow.setKeepInParentRect(true);
      }
      modalWindow.show();
    }
  }

  private void hideModalWindow() {
    if (modalWindow != null) {
      modalWindow.hide();
    }
  }

  private void destroyModalWindow() {
    if (modalWindow != null) {
      modalWindow.destroy();
    }
  }
}
TOP

Related Classes of org.geomajas.widget.searchandfilter.client.widget.search.SearchController

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.