Package com.esri.gpt.control.livedata

Source Code of com.esri.gpt.control.livedata.LiveDataController

/* 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.framework.context.RequestContext;
import com.esri.gpt.framework.jsf.BaseActionListener;
import com.esri.gpt.framework.util.LogUtil;
import com.esri.gpt.framework.util.Val;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.faces.context.FacesContext;
import javax.faces.el.VariableResolver;
import javax.servlet.http.HttpServletRequest;

/**
* Live data controller.
*/
public class LiveDataController extends BaseActionListener implements ILiveDataProperties {

  private String _frameStyle;
  private String _frameStyleWide;
  private int _mapHeightAdjustment;

  /**
   * Gets current instance of the controller.
   * @return current instance of the controller
   */
  public static LiveDataController getCurrentInstance() {
    FacesContext fc = FacesContext.getCurrentInstance();
    VariableResolver vr = fc.getApplication().getVariableResolver();
    return (LiveDataController) vr.resolveVariable(fc, "LiveDataController");
  }

  /**
   * Gets service URL.
   * @return URL of the service
   */
  public String getServiceUrl() {
    HttpServletRequest request = getServletRequest();
    return Val.chkStr(request.getParameter("url") != null ? request.getParameter("url") : request.getQueryString());
  }

  /**
   * Gets URL of the info.
   * @return URL of the info
   */
  public String getInfoUrl() {
    HttpServletRequest request = getServletRequest();
    return Val.chkStr(request.getParameter("info"));
  }

  /**
   * Gets URL for the embeded snippet.
   * @return URL for the embeded snippet
   */
  public String getEmbededUrl() {
    return getEmbededUrl(getServiceUrl());
  }

  /**
   * Gets URL for the embeded snippet.
   * @param serviceUrl service URL
   * @return URL for the embeded snippet
   */
  public String getEmbededUrl(String serviceUrl) {
    HttpServletRequest request = getServletRequest();
    return getEmbedRoot(request) + "?url=" + encodeUrlParam(serviceUrl) + getWidgetSize();
  }

  /**
   * Gets definition of the embeded snippet.
   * @return definition of the embeded snippet
   */
  public String getEmbededSnippet() {
    return "<iframe src=\"" + getEmbededUrl() + "\" style=\"" + getFrameStyle() + "\" frameborder=\"0\" scrolling=\"no\"></iframe>";
  }

  /**
   * Sets widget frame style.
   * @param frameStyle widget frame style
   */
  public void setFrameStyle(String frameStyle) {
    this._frameStyle = frameStyle;
  }

  /**
   * Gets widget frame style.
   * @return widget frame style
   */
  @Override
  public String getFrameStyle() {
    return _frameStyle;
  }

  /**
   * Sets widget frame style.
   * @param frameStyle widget frame style
   */
  public void setFrameStyleWide(String frameStyle) {
    this._frameStyleWide = frameStyle;
  }

  /**
   * Gets widget frame style.
   * @return widget frame style
   */
  public String getFrameStyleWide() {
    return _frameStyleWide;
  }

  /**
   * Gets map height adjustment.
   * @return map height adjustment
   */
  @Override
  public int getMapHeightAdjustment() {
    return _mapHeightAdjustment;
  }

  /**
   * Sets map height adjustment.
   * @param mapHeightAdjustment map height adjustment
   */
  public void setMapHeightAdjustment(int mapHeightAdjustment) {
    this._mapHeightAdjustment = mapHeightAdjustment;
  }

  /**
   * Gets widget size.
   * @return widget size string based upon frame size
   */
  private String getWidgetSize() {
    StringBuilder sb = new StringBuilder();

    String style = getInfoUrl().length() > 0? getFrameStyle(): getFrameStyleWide();
    String [] styleElements = style.split(";");
    for (String styleElement : styleElements) {
      int colonIdx = styleElement.indexOf(":");
      if (colonIdx>=0) {
        String elementName = Val.chkStr(styleElement.substring(0, colonIdx));
        String elementValue = Val.chkStr(styleElement.substring(colonIdx+1)).replaceAll(" ", "");
        if (elementName.equalsIgnoreCase("width") && elementValue.length()>0) {
          sb.append("&");
          sb.append("width=").append(elementValue);
        } else if (elementName.equalsIgnoreCase("height") && elementValue.length()>0) {
          sb.append("&");
          sb.append("height=").append(elementValue);
        }
      }
    }

    return sb.toString();
  }

  /**
   * Encodes a URL parameter value.
   * @param value the URL parameter value to encode
   * @return the encoded parameter value
   */
  private static String encodeUrlParam(String value) {
    value = Val.chkStr(value);
    try {
      return URLEncoder.encode(value, "UTF-8");
    } catch (UnsupportedEncodingException ex) {
      LogUtil.getLogger().severe("Unsupported encoding: UTF-8");
      return value;
    }
  }

  /**
   * Gets servlet request
   * @return servlet request
   */
  private HttpServletRequest getServletRequest() {
    RequestContext context = this.extractRequestContext();
    return (HttpServletRequest) context.getServletRequest();
  }

  /**
   * Gets embded URL.
   * @param request HTTP request
   * @return URL of the embeded snippet handler
   */
  private static String getEmbedRoot(HttpServletRequest request) {
    return getContextRoot(request) + "/catalog/livedata/embed.jsp";
  }

  /**
   * Gets context root.
   * @param request HTTP request
   * @return context root
   */
  private static String getContextRoot(HttpServletRequest request) {
    return RequestContext.resolveBaseContextPath(request);
  }
}
TOP

Related Classes of com.esri.gpt.control.livedata.LiveDataController

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.