/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.gwt2.plugin.wms.client.capabilities.v1_3_0; import java.util.ArrayList; import java.util.List; import org.geomajas.gwt2.client.service.AbstractXmlNodeWrapper; import org.geomajas.gwt2.plugin.wms.client.capabilities.WmsGetCapabilitiesInfo; import org.geomajas.gwt2.plugin.wms.client.capabilities.WmsLayerInfo; import org.geomajas.gwt2.plugin.wms.client.capabilities.WmsRequestInfo; import org.geomajas.gwt2.plugin.wms.client.capabilities.v1_1_1.WmsRequestInfo111; import com.google.gwt.xml.client.Element; import com.google.gwt.xml.client.Node; import com.google.gwt.xml.client.NodeList; /** * Implementation of the {@link org.geomajas.gwt2.plugin.wms.client.capabilities.WmsGetCapabilitiesInfo} * for WMS version 1.3.0. * * @author Pieter De Graef */ public class WmsGetCapabilitiesInfo130 extends AbstractXmlNodeWrapper implements WmsGetCapabilitiesInfo { private static final long serialVersionUID = 100L; private List<WmsRequestInfo> requests; private List<WmsLayerInfo> layers; private WmsLayerInfo130 rootLayer; public WmsGetCapabilitiesInfo130(Node node) { super(node); } public List<WmsRequestInfo> getRequests() { if (requests == null) { parse(getNode()); } return requests; } public List<WmsLayerInfo> getLayers() { if (layers == null) { parse(getNode()); } return layers; } @Override public WmsLayerInfo getRootLayer() { if (rootLayer == null) { parse(getNode()); } return rootLayer; } protected void parse(Node node) { if (node instanceof Element) { Element element = (Element) node; requests = new ArrayList<WmsRequestInfo>(5); NodeList requestParentNode = element.getElementsByTagName("Request"); NodeList requestNodes = requestParentNode.item(0).getChildNodes(); for (int i = 0; i < requestNodes.getLength(); i++) { Node requestNode = requestNodes.item(i); WmsRequestInfo111 requestInfo = new WmsRequestInfo130(requestNode); if (requestInfo.getRequestType() != null) { requests.add(requestInfo); } } NodeList layerNodes = element.getElementsByTagName("Layer"); layers = new ArrayList<WmsLayerInfo>(); if (layerNodes.getLength() > 0) { Node rootNode = layerNodes.item(0); rootLayer = new WmsLayerInfo130(rootNode); if (rootLayer.getName() != null) { layers.add(rootLayer); } addChildrenRecursive(rootLayer, layers); } else { throw new IllegalArgumentException("Capabilities has no root layer !"); } } } private void addChildrenRecursive(WmsLayerInfo130 parentLayer, List<WmsLayerInfo> namedLayers) { Node parentNode = parentLayer.getNode(); if (parentNode.getChildNodes() != null) { for (int i = 0; i < parentNode.getChildNodes().getLength(); i++) { Node child = parentNode.getChildNodes().item(i); String nodeName = child.getNodeName(); if ("Layer".equals(nodeName)) { WmsLayerInfo130 childLayer = new WmsLayerInfo130(child); addChildrenRecursive(childLayer, namedLayers); if (childLayer.getName() != null) { namedLayers.add(childLayer); } parentLayer.getLayers().add(childLayer); } } } } }