Example #1
0
  LayerInfo createLayer(ResourceInfo r, String name, NamespaceInfo ns) {
    String lId = newId();
    StyleInfo s = styles.peekLast();

    final LayerInfo l = createNiceMock(LayerInfo.class);
    layers.add(l);

    expect(l.getId()).andReturn(lId).anyTimes();
    expect(l.getName()).andReturn(name).anyTimes();
    expect(l.getType()).andReturn(LayerInfo.Type.VECTOR).anyTimes();
    expect(l.getResource()).andReturn(r).anyTimes();
    expect(l.getDefaultStyle()).andReturn(s).anyTimes();
    expect(l.isEnabled()).andReturn(true).anyTimes();
    expect(l.isAdvertised()).andReturn(true).anyTimes();

    expect(catalog.getLayer(lId)).andReturn(l).anyTimes();
    expect(catalog.getLayerByName(name)).andReturn(l).anyTimes();
    expect(catalog.getLayerByName(ns.getPrefix() + ":" + name)).andReturn(l).anyTimes();
    expect(catalog.getLayerByName(new NameImpl(ns.getPrefix(), name))).andReturn(l).anyTimes();
    expect(catalog.getLayerByName(new NameImpl(ns.getURI(), name))).andReturn(l).anyTimes();
    expect(catalog.getLayers(r)).andReturn(Arrays.asList(l)).anyTimes();
    l.accept((CatalogVisitor) anyObject());
    expectLastCall()
        .andAnswer(
            new VisitAnswer() {
              @Override
              protected void doVisit(CatalogVisitor visitor) {
                visitor.visit(l);
              }
            })
        .anyTimes();

    callback.onLayer(name, l, this);
    return l;
  }
Example #2
0
  public MockCatalogBuilder layerGroup(
      String name, List<String> layerNames, List<String> styleNames) {

    final LayerGroupInfo lg = createMock(LayerGroupInfo.class);
    layerGroups.add(lg);

    expect(lg.getId()).andReturn(newId()).anyTimes();
    expect(lg.getName()).andReturn(name).anyTimes();

    List<PublishedInfo> grpLayers = new ArrayList<PublishedInfo>();
    List<StyleInfo> grpStyles = new ArrayList<StyleInfo>();
    for (int i = 0; i < layerNames.size(); i++) {
      String layerName = layerNames.get(i);
      LayerInfo l = null;
      for (LayerInfo layer : layers) {
        if (layerName.equals(layer.getName())) {
          l = layer;
          break;
        }
      }

      if (l == null) {
        throw new RuntimeException("No such layer: " + layerName);
      }

      grpLayers.add(l);

      StyleInfo s = null;
      if (styleNames != null) {
        String styleName = styleNames.get(i);
        for (StyleInfo style : styles) {
          if (styleName.equals(style.getName())) {
            s = style;
            break;
          }
        }
      }

      grpStyles.add(s);
    }
    expect(lg.getLayers()).andReturn(grpLayers).anyTimes();
    expect(lg.getStyles()).andReturn(grpStyles).anyTimes();

    lg.accept((CatalogVisitor) anyObject());
    expectLastCall()
        .andAnswer(
            new VisitAnswer() {
              @Override
              protected void doVisit(CatalogVisitor visitor) {
                visitor.visit(lg);
              }
            })
        .anyTimes();

    expect(catalog.getLayerGroupByName(name)).andReturn(lg).anyTimes();

    callback.onLayerGroup(name, lg, this);
    replay(lg);
    return this;
  }
  /**
   * Reads a REST service endpoint, determines what type of service it is if possible, and creates
   * and returns an array of corresponding LayerInfo objects if applicable.
   *
   * @param url the REST service endpoint URL.
   * @param useAsBasemap
   * @return an array of LayerInfo objects. The length of the array will be one unless it's a
   *     multi-layer service such as a feature service.
   */
  public static LayerInfo[] readService(URL url, boolean useAsBasemap) throws Exception {
    final String urlString = url.toString();
    StringBuilder urlSb = new StringBuilder(urlString);
    if (0 > urlString.indexOf('?')) {
      urlSb.append("?");
    } else {
      urlSb.append("&");
    }
    urlSb.append("f=json");
    url = new URL(urlSb.toString());
    BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
    StringBuilder contentSb = new StringBuilder();
    String line;
    while (null != (line = reader.readLine())) {
      contentSb.append(line);
    }

    JSONObject jsonObject = new JSONObject(contentSb.toString());
    LayerInfo layerInfo = useAsBasemap ? new BasemapLayerInfo((String) null) : new LayerInfo();
    layerInfo.setDatasetPath(urlString);
    layerInfo.setVisible(true);
    ArrayList<LayerInfo> layerInfos = new ArrayList<LayerInfo>();
    if (jsonObject.has("singleFusedMapCache")) {
      // It's a map service
      if ("true".equals(jsonObject.getString("singleFusedMapCache"))) {
        layerInfo.setLayerType(LayerType.TILED_MAP_SERVICE);
      } else {
        layerInfo.setLayerType(LayerType.DYNAMIC_MAP_SERVICE);
      }
    } else if (jsonObject.has("layers")) {
      // It's a feature service; get all the layers
      layerInfo = null;
      JSONArray layersArray = jsonObject.getJSONArray("layers");
      for (int i = 0; i < layersArray.length(); i++) {
        try {
          JSONObject layerJson = layersArray.getJSONObject(i);
          LayerInfo thisLayerInfo =
              useAsBasemap ? new BasemapLayerInfo((String) null) : new LayerInfo();
          StringBuilder datasetPath = new StringBuilder(urlString);
          if (!urlString.endsWith("/")) {
            datasetPath.append("/");
          }
          datasetPath.append(layerJson.getInt("id"));
          thisLayerInfo.setDatasetPath(datasetPath.toString());
          thisLayerInfo.setName(layerJson.getString("name"));
          thisLayerInfo.setVisible(true);
          thisLayerInfo.setLayerType(LayerType.FEATURE_SERVICE);
          layerInfos.add(thisLayerInfo);
        } catch (JSONException ex) {
          Logger.getLogger(RestServiceReader.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
    } else if (jsonObject.has("drawingInfo")) {
      // It's a single feature service layer
      layerInfo.setDatasetPath(urlString);
      layerInfo.setName(jsonObject.getString("name"));
      layerInfo.setVisible(true);
      layerInfo.setLayerType(LayerType.FEATURE_SERVICE);
    } else if (jsonObject.has("pixelSizeX")) {
      // It's an image service
      layerInfo.setLayerType(LayerType.IMAGE_SERVICE);
    } else {
      throw new Exception("Unsupported service type: " + urlString);
    }
    if (null != layerInfo) {
      try {
        if (jsonObject.has("documentInfo")
            && jsonObject.getJSONObject("documentInfo").has("Title")) {
          layerInfo.setName(jsonObject.getJSONObject("documentInfo").getString("Title"));
        }
      } catch (JSONException ex) {
        Logger.getLogger(RestServiceReader.class.getName()).log(Level.SEVERE, null, ex);
      }
      if (null == layerInfo.getName() && jsonObject.has("mapName")) {
        try {
          layerInfo.setName(jsonObject.getString("mapName"));
        } catch (JSONException ex) {
          Logger.getLogger(RestServiceReader.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
      if (null == layerInfo.getName() && jsonObject.has("name")) {
        try {
          layerInfo.setName(jsonObject.getString("name"));
        } catch (JSONException ex) {
          Logger.getLogger(RestServiceReader.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
      layerInfos.add(layerInfo);
    }
    return layerInfos.toArray(new LayerInfo[layerInfos.size()]);
  }
Example #4
0
 /**
  * This method returns LayerInfo for specified layer name
  *
  * @param name
  * @return
  */
 public LayerInfo getLayerInfoByName(String name) {
   for (LayerInfo layerInfo : layers) {
     if (layerInfo.getName().equalsIgnoreCase(name)) return layerInfo;
   }
   return null;
 }