Package com.esri.gpt.catalog.arcgis.agportal.client

Source Code of com.esri.gpt.catalog.arcgis.agportal.client.SearchClient$SearchResult

/*
* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.catalog.arcgis.agportal.client;

import com.esri.gpt.catalog.arcgis.agportal.itemInfo.ESRI_ItemInformation;
import com.esri.gpt.framework.http.HttpClientRequest;
import com.esri.gpt.framework.util.Val;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
* Search client.
* NOTE! This is EXPERIMENTAL feature. It might be removed at any time in the future.
*/
public class SearchClient {
  private String url;
 
  /**
   * Creates instance of the search client.
   * @param url search URL.
   */
  public SearchClient(String url) {
    this.url = Val.chkStr(url);
  }
 
  /**
   * List all content.
   * @return search result
   * @throws IOException if accessing server fails
   */
  public SearchResult listAll() throws IOException {
    return search(new SearchParams("*:*", 100, 1));
  }
 
  /**
   * Invokes search.
   * @param params search parameters
   * @return search result
   * @throws IOException if accessing server fails
   */
  public SearchResult search(SearchParams params) throws IOException {
    if (params.getNum()<1) return null;
    if (params.getStart()<1) return null;
   
    ItemInfoJsonAdapter itemInfoAdapter = new ItemInfoJsonAdapter();
    HttpClientRequest cr = new HttpClientRequest();
    cr.setUrl(url + "/search?q=" +params.getQuery()+ "&f=json&num=" +params.getNum()+ "&start=" + params.getStart());
    cr.execute();
   
    try {
      List<ESRI_ItemInformation> infos = new ArrayList<ESRI_ItemInformation>();
      String json = cr.readResponseAsCharacters();
      JSONObject jso = new JSONObject(json);
      String nextStart = jso.getString("nextStart");
      JSONArray records = jso.getJSONArray("results");
      for (int idx = 0; idx < records.length(); idx++) {
          JSONObject record = records.optJSONObject(idx);
          ESRI_ItemInformation ii = itemInfoAdapter.toItemInfo(record);
          infos.add(ii);
      }
      return new SearchResult(new SearchParams(params.getQuery(), params.getNum(), Val.chkInt(nextStart, -1)), infos);
    } catch (JSONException ex) {
      throw new IOException("Error reading response.", ex);
    }
  }
 
  /**
   * Search result.
   */
  public final class SearchResult {
    private SearchParams nextParams;
    private List<ESRI_ItemInformation> items;
   
    /**
     * Creates instance of the search result.
     * @param nextParams search parameters for the next chunk of the search result
     * @param items current items
     */
    public SearchResult(SearchParams nextParams, List<ESRI_ItemInformation> items) {
      this.nextParams = nextParams;
      this.items = items;
    }
   
    /**
     * Gets items.
     * @return list of items
     */
    public List<ESRI_ItemInformation> getItems() {
      return items;
    }
   
    /**
     * Continues search beginning from the end of last search.
     * @return search result
     * @throws IOException
     */
    public SearchResult next() throws IOException {
      return search(nextParams);
    }
  }

  /**
   * Search parameters.
   */
  public final class SearchParams {
    private String q;
    private int    num;
    private int    start;
   
    /**
     * Creates instance of search parameters.
     * @param q query string
     * @param num number of records to fetch
     * @param start number of the first record to fetch
     */
    public SearchParams(String q, int num, int start) {
      this.q = Val.chkStr(q);
      this.num = num;
      this.start = start;
    }
   
    /**
     * Gets query string.
     * @return query string
     */
    public String getQuery() {
      return q;
    }
   
    /**
     * Gets number of records to fetch.
     * @return number of records to fetch
     */
    public int getNum() {
      return num;
    }
   
    /**
     * Gets number of the first record to fetch.
     * @return number of the first record to fetch
     */
    public int getStart() {
      return start;
    }
  }
}
TOP

Related Classes of com.esri.gpt.catalog.arcgis.agportal.client.SearchClient$SearchResult

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.