Package com.esri.gpt.control.livedata

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

/* 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.geometry.Envelope;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;

/**
* Map based renderer.
*/
/*packge*/ abstract class MapBasedRenderer implements IRenderer {

  /**
   * Gets layer declaration.
   * @return layer declaration code
   */
  protected abstract String newLayerDeclaration();

  /**
   * Gets map height adjustment.
   * @return map height adjustment
   */
  protected abstract int getMapHeightAdjustment();

  /**
   * Initializes new layer.
   * @return initializes new layer
   */
  protected String initializeNewLayer() { return ""; }
 
  /**
   * Finalizes live data layer.
   * @return layer finalization code
   */
  protected String finalizeNewLayer() { return ""; };
 
  /**
   * Gets extent.
   * @return extent
   */
  protected Envelope getExtent() { return null; }

  /**
   * Checks if base map layer supposed to be generated.
   * @return <code>true</code> if base map layer supposed to be generated
   */
  protected boolean generateBaseMap() {
    return true;
  }

  @Override
  public void render(Writer writer) throws IOException {
    String newLayer = newLayerDeclaration();
    boolean isNewLayer = newLayer.length()>0;

    PrintWriter pwriter = new PrintWriter(writer);
    pwriter.println("{");
    pwriter.println("init: function(widget){");
    pwriter.println(
      "    var node = widget.getPlaceholder();\r\n"+
      "    var style = widget.getMapStyle();\r\n"+
      "    var geometryService = widget.getGeometryServiceUrl();\r\n"+
      "    var mapService = widget.getMapServiceUrl();\r\n"+
      "    var mapVisibleLayers = widget.getMapVisibleLayers();\r\n"+
      "    var mapInitialExtent = widget.getMapInitialExtent();\r\n"+
      "    var styles = style.split(\";\");\r\n" +
      "    for (var i=0; i<styles.length; i++) {\r\n" +
      "       if (styles[i].indexOf(\"height\")>=0) {\r\n" +
      "          var helm = styles[i].split(\":\");\r\n" +
      "          if (helm.length==2) {\r\n" +
      "             var height = parseInt(helm[1]);\r\n" +
      "             height = height + (" +getMapHeightAdjustment()+ ");\r\n" +
      "             styles[i] = \"height: \" + height + \"px\";\r\n" +
      "          }\r\n" +
      "       }\r\n" +
      "       if (styles[i].indexOf(\"width\")>=0) {\r\n" +
      "          var welm = styles[i].split(\":\");\r\n" +
      "          if (welm.length==2) {\r\n" +
      "             var width = parseInt(welm[1]);\r\n" +
      "             width -= 2;\r\n" +
      "             styles[i] = \"width: \" + width + \"px\";\r\n" +
      "          }\r\n" +
      "       }\r\n" +
      "    }\r\n" +
      "    style = styles.join(\";\");"
    );
    pwriter.print("node.innerHTML =\"");
    writeToolbarNode(pwriter,isNewLayer);
    writeMapNode(pwriter);
    pwriter.println("\";");
    pwriter.println("node.geometryService = (geometryService!=null && geometryService.length>0)? new esri.tasks.GeometryService(geometryService): null;");
    pwriter.println("node.liveDataMap = new esri.Map(widget.getMapId());");
    pwriter.println("dojo.connect(window,\"onresize\",node.liveDataMap,\"reposition\");");
    if (generateBaseMap()) {
      pwriter.println("if (widget.getMapServiceType()==\"openstreet\") {");
      pwriter.println("  node.baseMapLayer = new esri.layers.OpenStreetMapLayer();");
      pwriter.println("} else if (widget.getMapServiceType()==\"dynamic\") {");
      pwriter.println("  node.baseMapLayer = new esri.layers.ArcGISDynamicMapServiceLayer(mapService);");
      pwriter.println("  node.baseMapLayer.setImageFormat(\"jpg\");");
      pwriter.println("} else if (widget.getMapServiceType()==\"tiled\") {");
      pwriter.println("  node.baseMapLayer = new esri.layers.ArcGISTiledMapServiceLayer(mapService);");
      pwriter.println("} else if (widget.getMapServiceType()==\"wms\") {");
      pwriter.println("  node.baseMapLayer = new esri.layers.WMSLayer(mapService);");
      pwriter.println("  if (esri.version < 2.4) {");
      pwriter.println("    node.baseMapLayer.extent = new esri.geometry.Extent({\"xmin\":-180,\"ymin\":-90,\"xmax\":180,\"ymax\":90,\"spatialReference\":{\"wkid\":4326}});");
      pwriter.println("  }");
      pwriter.println("  node.baseMapLayer.setVisibleLayers(eval(mapVisibleLayers));");
      pwriter.println("  node.baseMapLayer.setImageFormat(\"png\");");
      pwriter.println("} else if (widget.getMapServiceType()==\"wmts\") {");
      pwriter.println("    var layerInfo = new esri.layers.WMTSLayerInfo({");
      pwriter.println("        identifier: \"world\",");
      pwriter.println("        tileMatrixSet: \"EPSG:4326\",");
      pwriter.println("        format: \"png\"");
      pwriter.println("    });");
      pwriter.println("    var options = {");
      pwriter.println("      serviceMode: \"KVP\",");
      pwriter.println("      layerInfo: layerInfo");
      pwriter.println("    };");
      pwriter.println("  node.baseMapLayer = new esri.layers.WMTSLayer(mapService,options);");
      pwriter.println("}");
      pwriter.println("node.liveDataMap.addLayer(node.baseMapLayer);");
      pwriter.println("if (widget.getMapServiceType() == \"openstreet\") {");
      pwriter.println("    dojo.create(\"div\",{\"class\": \"openstreetmapPreview\", innerHTML: \"Map data © OpenStreetMap contributors, CC-BY-SA\"},\"gpt_LiveData_0-preview_layers\",\"last\");");
      pwriter.println("}");
      pwriter.println("dojo.query(\".logo-med\").style(\"bottom\",\"40px\");");
    }
    if (isNewLayer) {
      pwriter.println("node.liveDataLayer = " + newLayer + ";");
      pwriter.println(finalizeNewLayer());
      pwriter.println("if (widget.getMapServiceType()==\"openstreet\") {");
      pwriter.println(initializeNewLayer());
      pwriter.println("}");
      String extentDef = createExtentDef();
      if (!generateBaseMap()) {
        pwriter.println("node.liveDataMap.addLayer(node.liveDataLayer);");
      }
      pwriter.println("dojo.connect(node.liveDataMap,\"onLoad\",null,function(map) {\r\n"
                    + "  var extentDef = " + (extentDef!=null? extentDef: "null") + ";\r\n"
                    + "  var initialExtent = null;\r\n"
                    + "  if (mapInitialExtent!=null && mapInitialExtent.length>0) {\r\n"
                    + "    try {\r\n"
                    + "      initialExtent = eval(\"new esri.geometry.Extent({\"+mapInitialExtent+\"})\");\r\n"
                    + "    } catch (err) {\r\n"
                    + "      initialExtent = null;\r\n"
                    + "    }\r\n"
                    + "  }\r\n"
                    + "  if (initialExtent!=null) {\r\n"
                    + "    gpt.LiveData.setExtent(node.liveDataMap,initialExtent,node.geometryService);\r\n"
                    + "  } else if (extentDef!=null) {\r\n"
                    + "    gpt.LiveData.setExtent(node.liveDataMap,extentDef,node.geometryService);\r\n"
                    + "  }"
                    + "});");
    }
    pwriter.println("node.navToolbar = new esri.toolbars.Navigation(node.liveDataMap);");
    pwriter.println("dojo.connect(dojo.byId(\"zoomfullext-hook\"),\"onclick\",null,function(event) { gpt.LiveData.setExtent(node.liveDataMap,new esri.geometry.Extent({xmin: -90, ymin: -180, xmax: 90, ymax: 180, spatialReference: {wkid: 4326}}),node.geometryService); });");
    pwriter.println("dojo.connect(dojo.byId(\"zoomprev-hook\"),\"onclick\",null,function(event) {node.navToolbar.zoomToPrevExtent();});");
    pwriter.println("dojo.connect(dojo.byId(\"zoomnext-hook\"),\"onclick\",null,function(event) {node.navToolbar.zoomToNextExtent();});");
    if (generateBaseMap() && isNewLayer) {
      pwriter.println("dojo.connect(dojo.byId(\"showhide-hook\"),\"onclick\",null,function(event) {if (dojo.byId(\"showhide\").checked) {node.baseMapLayer.show();} else {node.baseMapLayer.hide();} });");
    }
    pwriter.println("dijit.Tooltip.defaultPosition = [\"below\", \"above\"];");
    pwriter.println("new dijit.Tooltip( { connectId: [\"zoomfullext-hook\"], label: \"<div class=\\\"toolTip\\\">\" + widget.getTooltips()[0] + \"</div>\" } );");
    pwriter.println("new dijit.Tooltip( { connectId: [\"zoomprev-hook\"], label: \"<div class=\\\"toolTip\\\">\" + widget.getTooltips()[1] + \"</div>\" } );");
    pwriter.println("new dijit.Tooltip( { connectId: [\"zoomnext-hook\"], label: \"<div class=\\\"toolTip\\\">\" + widget.getTooltips()[2] + \"</div>\" } );");
    if (generateBaseMap() && isNewLayer) {
      pwriter.println("new dijit.Tooltip( { connectId: [\"showhide-hook\"], label: \"<div class=\\\"toolTip\\\">\" + widget.getTooltips()[3] + \"</div>\" } );");
    }
    pwriter.println("} }");
  }

  /**
   * Writes toolbar node.
   * @param writer writer
   * @param isNewLayer flag indicating if there is a new layer
   * @throws java.io.IOException if writting fails
   */
  private void writeToolbarNode(PrintWriter writer, boolean isNewLayer) throws IOException {
    writer.print("<div id=\\\"navToolbar\\\" class=\\\"dijit dijitToolbar\\\">");
    writer.print("<table width=\\\"100%\\\" border=\\\"0\\\">");
    writer.print("<tr>");
    writer.print("<td>");
    writeButtonNode(writer, "zoomfullext", "zoomfullextIcon");
    writeButtonNode(writer, "zoomprev", "zoomprevIcon");
    writeButtonNode(writer, "zoomnext", "zoomnextIcon");
    if (generateBaseMap() && isNewLayer) {
      writer.print("<span id=\\\"showhide-hook\\\" class=\\\"dijit dijitReset dijitLeft dijitInline dijitButton previewButton\\\"");
      writer.print("<span class=\\\"dijitReset dijitRight dijitInline\\\">");
      writer.print("<span class=\\\"dijitReset dijitInline\\\">");
      writer.print("<input type=\\\"checkbox\\\" id=\\\"showhide\\\" checked=\\\"checked\\\" style=\\\"vertical-align: center;\\\"/><label for=\\\"showhide\\\" style=\\\"vertical-align: center;\\\">\" +widget.getBasemapLabel()+ \"</label>");
      writer.print("</span>");
      writer.print("</span>");
      writer.print("</span>");
    }
    writer.print("</td>");
    writer.print("</tr>");
    writer.print("</table>");
    writer.print("</div>");
  }

  /**
   * Writes button node.
   * @param writer writer
   * @param id button id
   * @param styleClass additional style class determining background icon
   * @param onClick onclick event code
   * @throws java.io.IOException if writting fails
   */
  private void writeButtonNode(PrintWriter writer, String id, String styleClass) throws IOException {
    writer.print("<span id=\\\"" +id+ "-hook\\\" class=\\\"dijit dijitReset dijitLeft dijitInline dijitButton previewButton\\\"");
    writer.print("<span class=\\\"dijitReset dijitRight dijitInline\\\">");
    writer.print("<span class=\\\"dijitReset dijitInline dijitButtonNode\\\">");
    writer.print("<button waistate=\\\"labelledby-zoomin_label\\\" type=\\\"button\\\" name=\\\"\\\" class=\\\"dijitReset dijitStretch dijitButtonContents\\\" id=\\\"" +id+ "\\\" tabindex=\\\"-1\\\" style=\\\"-moz-user-select: none;\\\">");
    writer.print("<span class=\\\"dijitReset dijitInline " +styleClass+ "\\\">");
    writer.print("<span class=\\\"dijitReset dijitToggleButtonIconChar\\\">✓</span>");
    writer.print("</span>");
    writer.print("</button>");
    writer.print("</span>");
    writer.print("</span>");
    writer.write("</span>");
  }

  /**
   * Writes map node.
   * @param writer writer
   * @throws java.io.IOException if writting fails
   */
  private void writeMapNode(PrintWriter writer) throws IOException {
    writer.print("<div id=\\\"\" +widget.getMapId()+ \"\\\" class=\\\"tundra\\\" style=\\\"\" + widget.getMapStyle() + \"\\\">");
  }

  /**
   * Creates extent definition.
   * @return extent definition
   */
  protected String createExtentDef() {
    Envelope e = getExtent();
    return e!=null? "new esri.geometry.Extent({" +
      "xmin:" +e.getMinX()+ "," +
      "ymin:" +e.getMinY()+ "," +
      "xmax:" +e.getMaxX()+ "," +
      "ymax:" +e.getMaxY()+ "," +
      "spatialReference:{wkid:" +e.getWkid()+ "}})": null;
  }
}
TOP

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

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.