Exemplo n.º 1
0
  /**
   * Executes the spatial search using the search string provided.
   *
   * @param searchString
   * @param listModel
   */
  @Override
  public void onNewSearchString(final String searchString, final DefaultListModel listModel) {

    // No serach is selected
    if (this.searchByObject == null) {
      return;
    }

    // Check if a map search is currently running and if so, cancel it
    if (searchTask != null && TaskManager.getInstance().isTaskRunning(searchTask.getId())) {
      TaskManager.getInstance().removeTask(searchTask);
    }

    final List<SpatialSearchResultTO> searchResults = new ArrayList<SpatialSearchResultTO>();
    final String queryName = this.searchByObject.getQueryName();
    final String searchTitle = this.searchByObject.getTitle();
    listModel.clear();

    searchTask =
        new SolaTask<Void, Void>() {

          @Override
          public Void doTask() {
            // Perform the search on a background thread
            setMessage(
                MessageUtility.getLocalizedMessage(
                        ClientMessage.PROGRESS_MSG_MAP_SEARCHING, new String[] {searchTitle})
                    .getMessage());
            try {
              // Allow a small delay on the background thread so that the tread can be cancelled
              // before executing the search if the user is still typing.
              Thread.sleep(500);
              searchResults.addAll(
                  WSManager.getInstance()
                      .getSearchService()
                      .searchSpatialObjects(queryName, searchString, map.getSrid()));
            } catch (InterruptedException ex) {
            }
            return null;
          }

          @Override
          public void taskDone() {
            // Update the GUI using the primary EDT thread
            if (searchResults.size() > 0) {
              // Convert the TOs to Beans
              List<SpatialSearchResultBean> beanList =
                  TypeConverters.TransferObjectListToBeanList(
                      searchResults, SpatialSearchResultBean.class, null);
              // Sort the beans and then display them in the list.
              Collections.sort(beanList);
              for (SpatialSearchResultBean bean : beanList) {
                listModel.addElement(bean);
              }
            }
          }
        };
    TaskManager.getInstance().runTask(searchTask);
  }