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; }
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()]); }
/** * 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; }