Package com.esri.gpt.control.livedata

Source Code of com.esri.gpt.control.livedata.MapBasedRendererFactory$Query

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

import com.esri.gpt.control.livedata.selector.IRegistry;
import com.esri.gpt.control.livedata.selector.ISetter;
import com.esri.gpt.framework.http.CredentialProvider;
import com.esri.gpt.framework.http.HttpClient401Exception;
import com.esri.gpt.framework.http.HttpClientRequest;
import com.esri.gpt.framework.http.XmlHandler;
import com.esri.gpt.framework.util.LogUtil;
import com.esri.gpt.framework.util.Val;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;

import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;

/**
* Map-based renderer factory.
*/
/*packge*/ abstract class MapBasedRendererFactory implements IRendererFactory {
  protected ILiveDataProperties properties;

  /**
   * Creates instance of the factory.
   * @param properties properties
   */
  public MapBasedRendererFactory(ILiveDataProperties properties) {
    this.properties = properties;
  }

  public boolean isDefinitive() {
    return false;
  }

  public void register(IRegistry reg, ISetter setter, String url) {
  }

  /**
   * Gets properties.
   * @return properties
   */
  protected ILiveDataProperties getProperties() {
    return properties;
  }

  /**
   * Access initial information from the host
   * @param url URL
   * @return capabilities
   * @throws javax.xml.parsers.ParserConfigurationException
   * @throws HttpClient401Exception if user not authenticated
   */
  protected Document accessHost(String url)
    throws ParserConfigurationException, HttpClient401Exception {
    return accessHost(url, null);
  }

  /**
   * Access initial information from the host
   * @param url URL
   * @param cp credential provider
   * @return capabilities
   * @throws javax.xml.parsers.ParserConfigurationException
   */
  protected Document accessHost(String url, CredentialProvider cp)
    throws ParserConfigurationException, HttpClient401Exception {

    // read the response from the targeted server
    InputStream responseStream = null;
    InputStream wrappedStream = null;
    try {

      HttpClientRequest cr = new HttpClientRequest();
      cr.setUrl(url);
      XmlHandler sh = new XmlHandler(false);
      cr.setContentHandler(sh);
      cr.setCredentialProvider(cp != null ? cp : CredentialProvider.getThreadLocalInstance());
      cr.execute();

      return sh.getDocument();
    } catch (IllegalArgumentException ex) {
      LogUtil.getLogger().log(Level.FINER, "Error accessing host: " + url, ex);
      return null;
    } catch (IOException ex) {
      LogUtil.getLogger().log(Level.FINER, "Error accessing host: " + url, ex);
      return null;
    } finally {
      try {
        if (wrappedStream != null) {
          wrappedStream.close();
        }
      } catch (Exception ef) {
      }
      try {
        if (responseStream != null) {
          responseStream.close();
        }
      } catch (Exception ef) {
      }
    }
  }

  /**
   * Query string reprezentation.
   */
  protected static class Query extends TreeMap<String, String> {

    /**
     * Creates instance of the query.
     */
    public Query() {
      super(String.CASE_INSENSITIVE_ORDER);
    }

    /**
     * Creates instance of the query.
     * @param query template query
     */
    public Query(Query query) {
      super(String.CASE_INSENSITIVE_ORDER);
      if (query != null) {
        this.putAll(query);
      }
    }

    /**
     * Creates instance of the query.
     * @param queryString query string
     */
    public Query(String queryString) {
      super(String.CASE_INSENSITIVE_ORDER);
      for (String param : Val.chkStr(queryString).split("&")) {
        add(param);
      }
    }

    /**
     * Adds a single parameter.
     * Parameter is a string in the format of: <key>=<value>.
     * @param param parameter to add.
     */
    public void add(String param) {
      param = Val.chkStr(param);
      int eqSignIdx = param.indexOf('=');
      if (eqSignIdx > 0) {
        String key = param.substring(0, eqSignIdx);
        String value = param.substring(eqSignIdx + 1);
        put(key, value);
      } else if (eqSignIdx == 0) {
        // do nothing; param with no name
      } else if (param.length() > 0) {
        put(param, "");
      }
    }

    /**
     * Mixes two queries.
     * @param query query to mix with this query
     * @return mixed query
     */
    public Query mixin(Query query) {
      Query mixedQuery = new Query(this);
      if (query != null) {
        for (Map.Entry<String, String> entry : query.entrySet()) {
          mixedQuery.put(entry.getKey(), entry.getValue());
        }
      }
      return mixedQuery;
    }

    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      for (Map.Entry<String, String> entry : this.entrySet()) {
        if (sb.length() > 0) {
          sb.append("&");
        }
        sb.append(entry.getKey() + "=" + entry.getValue());
      }
      return sb.toString();
    }
  }
}
TOP

Related Classes of com.esri.gpt.control.livedata.MapBasedRendererFactory$Query

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.