/*
Copyright (C) 2001, 2006 United States Government
as represented by the Administrator of the
National Aeronautics and Space Administration.
All Rights Reserved.
*/
package gov.nasa.worldwind.wms;
import org.w3c.dom.*;
import javax.xml.xpath.XPath;
import java.util.ArrayList;
/**
* Version-dependent class for gathering information from a wms capabilities document.
*
* @author Tom Gaskins
* @version $Id: CapabilitiesV111.java 2471 2007-07-31 21:50:57Z tgaskins $
*/
public class CapabilitiesV111 extends Capabilities
{
public CapabilitiesV111(Document doc, XPath xpath)
{
super(doc, xpath);
}
@Override
public BoundingBox getLayerGeographicBoundingBox(Element layer)
{
Element e = this.getElement(layer, "ancestor-or-self::wms:Layer/wms:LatLonBoundingBox");
return e == null ? null : BoundingBox.createFromStrings("CRS:84",
this.getText(e, "@wms:minx"), this.getText(e, "@wms:maxx"),
this.getText(e, "@wms:miny"), this.getText(e, "@wms:maxy"),
null, null);
}
public BoundingBox[] getLayerBoundingBoxes(Element layer)
{
Element[] es = this.getElements(layer, "ancestor-or-self::wms:Layer/wms:BoundingBox");
if (es == null)
return null;
ArrayList<BoundingBox> bboxes = new ArrayList<BoundingBox>();
ArrayList<String> crses = new ArrayList<String>();
for (Element e : es)
{
if (e == null)
continue;
BoundingBox bb = BoundingBox.createFromStrings(this.getBoundingBoxSRS(e),
this.getBoundingBoxMinx(e), this.getBoundingBoxMaxx(e),
this.getBoundingBoxMiny(e), this.getBoundingBoxMaxy(e),
this.getBoundingBoxResx(e), this.getBoundingBoxResy(e));
if (bb != null)
{
// Add the bbox only if the ancestor's crs is not one of those in the node's crs.
if (bb.getCrs() != null && !crses.contains(bb.getCrs()))
{
crses.add(bb.getCrs());
bboxes.add(bb);
}
}
}
return bboxes.size() > 0 ? bboxes.toArray(new BoundingBox[bboxes.size()]) : null;
}
@Override
public String getLayerMaxScaleDenominator(Element layer)
{
return this.getText(layer, "ancestor-or-self::wms:Layer/wms:ScaleHint/@wms:max");
}
@Override
public String getLayerMinScaleDenominator(Element layer)
{
return this.getText(layer, "ancestor-or-self::wms:Layer/wms:ScaleHint/@wms:min");
}
}