Package com.esri.gpt.catalog.arcgis.metadata

Source Code of com.esri.gpt.catalog.arcgis.metadata.WMSServerHandler

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

import com.esri.arcgisws.EnvelopeN;
import com.esri.arcgisws.ServiceDescription;
import com.esri.gpt.catalog.arcgis.metadata.ServiceInfo.LayerInfo;
import com.esri.gpt.control.georss.GeometryService;
import com.esri.gpt.framework.geometry.Envelope;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Handles the collection of metadata for an ArcGIS WMS service (WMSServer).
*/
public class WMSServerHandler extends OGCServerHandler {
  private static final Logger LOGGER = Logger.getLogger(WMSServerHandler.class.getCanonicalName());
 
  /** constructors ============================================================ */

  /** Default constructor. */
  public WMSServerHandler() {
    super("WMS");
  }

  @Override
  public ServiceInfo createServiceInfo(ServiceInfo parentInfo, ServiceDescription desc, String currentRestUrl, String currentSoapUrl) {
    ServiceInfo serviceInfo = super.createServiceInfo(parentInfo, desc, currentRestUrl, currentSoapUrl);
    String thumbnailUrl = createThumbnailUrl(serviceInfo);
    serviceInfo.setThumbnailUrl(thumbnailUrl);
    String textInfo = createTextInfo(serviceInfo);
    serviceInfo.setText(textInfo);
    return serviceInfo;
  }
 
  /**
   * Creates text info.
   * @param parentInfo parent info
   * @param serviceInfo service info
   * @return text info
   */
  private String createTextInfo(ServiceInfo serviceInfo) {
    StringBuilder ti = new StringBuilder();
   
    ti.append("{");
   
    ti.append("\"title\":\"").append(serviceInfo.getName()).append("\",");
    ti.append("\"url\":\"").append(serviceInfo.getSoapUrl()).append("\",");
    ti.append("\"mapUrl\":\"").append(serviceInfo.getSoapUrl()).append("?\",");
    ti.append("\"version\":\"").append("1.3.0").append("\",");

    ti.append("\"layers\":[");
   
    StringBuilder lb = new StringBuilder();
    for (LayerInfo li : serviceInfo.getLayersInfo()) {
      if (lb.length()>0) {
        lb.append(",");
      }
      lb.append("{");
      lb.append("\"name\":\"").append(li.getName()).append("\",");
      lb.append("\"title\":\"").append(li.getTitle()).append("\"");
      lb.append("}");
    }
    ti.append(lb);
   
    ti.append("],");

    ti.append("\"copyright\":\"").append(serviceInfo.getCopyright()).append("\",");
   
    ti.append("\"spatialReferences\":[");
    ti.append("4326");
    if (serviceInfo.getEnvelope() instanceof EnvelopeN) {
      EnvelopeN e = (EnvelopeN) serviceInfo.getEnvelope();
      if (e.getSpatialReference()!=null && e.getSpatialReference().getWKID()!=null && e.getSpatialReference().getWKID()!=4326) {
        ti.append(",").append(e.getSpatialReference().getWKID().toString());
      }
    }
    ti.append("],");
   
    ti.append("\"format\":").append("null");
   
    ti.append("}");
   
    return ti.toString();
  }
 
  /**
   * Creates thumbnail URL.
   * @param serviceInfo service info
   * @return thumbnail URL
   */
  private String createThumbnailUrl(ServiceInfo serviceInfo) {
    if (serviceInfo.getEnvelope() instanceof EnvelopeN) {
      EnvelopeN e = (EnvelopeN) serviceInfo.getEnvelope();
      Envelope envelope = new Envelope(e.getXMin(), e.getYMin(), e.getXMax(), e.getYMax());
      envelope.setWkid(e.getSpatialReference()!=null && e.getSpatialReference().getWKID()!=null? e.getSpatialReference().getWKID().toString(): "4326");
     
      GeometryService gs = GeometryService.createDefaultInstance();
      try {
        List<Envelope> envelopes = gs.project(Arrays.asList(new Envelope[]{envelope}), "4326");
        if (!envelopes.isEmpty()) {
          envelope = envelopes.get(0);
         
          StringBuilder thumbnailURL = new StringBuilder();
          thumbnailURL.append(serviceInfo.getSoapUrl());
          thumbnailURL.append("?SERVICE=WMS&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=TRUE&STYLES=&VERSION=1.3.0");
          thumbnailURL.append("&layers=");
         
          StringBuilder liSB = new StringBuilder();
          for (LayerInfo li : serviceInfo.getLayersInfo()) {
            if (liSB.length()>0) {
              liSB.append(",");
            }
            liSB.append(li.getName());
          }
            thumbnailURL.append(liSB);
         
          thumbnailURL.append("&WIDTH=200&HEIGHT=133&CRS=EPSG:4326");

          StringBuilder bboxSB = new StringBuilder();
          bboxSB.append(envelope.getMinY()).append(",").append(envelope.getMinX()).append(",").append(envelope.getMaxY()).append(",").append(envelope.getMaxX());
         
          thumbnailURL.append("&BBOX=").append(bboxSB);
         
          return thumbnailURL.toString();
        }
      } catch (Exception ex) {
        LOGGER.log(Level.WARNING, "Unable to create thumbnail URL for WMS service.", ex);
      }
    }
   
    return "";
  }
 
}
TOP

Related Classes of com.esri.gpt.catalog.arcgis.metadata.WMSServerHandler

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.