⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myagscustomcriteriahandler.java

📁 采用java实现的arcgis server程序
💻 JAVA
字号:
/*
 * Copyright (c) 2008 ESRI
 *
 * All rights reserved under the copyright laws of the United States
 * and applicable international laws, treaties, and conventions.
 *
 * You may freely redistribute and use this sample code, with or
 * without modification, provided you include the original copyright
 * notice and use restrictions.
 *
 * See use restrictions at <install>/ArcGIS/java/samples/userestrictions.
 */

package com.esri.adf.sample.criteria;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import com.esri.adf.web.ags.data.query.AGSQueryFunctionality;
import com.esri.adf.web.ags.data.query.AGSTextCriteriaHandler;
import com.esri.adf.web.data.WebLayerInfo;
import com.esri.adf.web.data.query.LayerDefinition;
import com.esri.adf.web.data.query.QueryCriteria;
import com.esri.adf.web.data.query.QueryCriteriaHandler;
import com.esri.adf.web.data.query.QueryFunctionality;
import com.esri.adf.web.data.query.QueryResult;
import com.esri.adf.web.data.query.TextCriteria;
import com.esri.adf.web.data.query.WebQuery;

/*
 * Handler class that implements the custom Query criteria.
 */
public class MyAGSCustomCriteriaHandler implements QueryCriteriaHandler, Serializable {
  private static final long serialVersionUID = 1L;

  /*
   * Handles a query based on a TextCriteriaHandler and combines the QueryResult with the results obtained from a SQL
   * query on an RDBMS. Apache Derby is used in this case. The properties from the SQL query on derby tables is combined
   * with the QueryResult of a TextCriteria query.
   */
  public List<QueryResult> handleCriteria(QueryCriteria criteria, List<? extends WebLayerInfo> layers, WebQuery query,
      QueryFunctionality queryFunc) {

    try {
      if (criteria == null || layers == null || query == null || queryFunc == null) {
        return Collections.emptyList();
      }
      if (!(queryFunc instanceof AGSQueryFunctionality)) {
        return Collections.emptyList();
      }
      if (!(criteria instanceof MyCustomCriteria)) {
        return Collections.emptyList();
      }

      if (criteria.getMaxRecordCount() == 0) {
        return Collections.emptyList();
      }

      AGSTextCriteriaHandler handler = new AGSTextCriteriaHandler();
      TextCriteria textCriteria = new TextCriteria();
      textCriteria.setSearchText("California");

      List<String> searchFields = new ArrayList<String>();
      searchFields.add("STATE_NAME");

      List<String> returnFields = new ArrayList<String>();
      returnFields.add("STATE_NAME");
      returnFields.add("STATE_ABBR");

      LayerDefinition lyrDef1 = new LayerDefinition();
      lyrDef1.setResourceId("myCustomCriteriaResource");
      lyrDef1.setLayerId(2);
      lyrDef1.setDisplayFieldName("STATE_NAME");
      lyrDef1.setSearchFields(searchFields);
      lyrDef1.setReturnFields(returnFields);
      lyrDef1.setMaxRecordCount(3);
      lyrDef1.setResultTemplate(LayerDefinition.DEFAULT_TEMPLATE);
      lyrDef1.setCalloutTemplate(LayerDefinition.DEFAULT_TEMPLATE);
      List<LayerDefinition> lyrDefs = new ArrayList<LayerDefinition>(1);
      lyrDefs.add(lyrDef1);
      textCriteria.setLayerDefinitions(lyrDefs);

      List<QueryResult> results = handler.handleCriteria(textCriteria, layers, query, queryFunc);

      // Read from the DataBase
      Class.forName("org.apache.derby.jdbc.ClientDriver"); // Please change the driver here.

	   //Change the connection string below to match your connection string.
      Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1088/MyDB;");

      Statement statement = conn.createStatement();
      ResultSet rset = statement.executeQuery("select * from US where name = 'California'");

      Map<String, Object> details = null;

      while (rset.next()) {
        int pop2008 = rset.getInt(2);
        int ageUnder5 = rset.getInt(3);

        for (QueryResult result : results) {
          if (result == null) {
            continue;
          }
          details = result.getDetails();
          details.put("Pop2008", Integer.valueOf(pop2008));
          details.put("Age_Under_5", new Integer(ageUnder5));
          result.getLayerDefinition().getSearchFields().add("Pop2008");
          result.getLayerDefinition().getSearchFields().add("Age_Under_5");

        }
      }
        conn.close();
        statement.close();

      return results;
    } catch (Exception ex) {
      ex.printStackTrace();
    }

    return null;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -