/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.wms.xml; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; import javax.naming.OperationNotSupportedException; import org.geotools.data.ows.LayerDescription; import org.geotools.data.wms.xml.WMSSchema.WMSAttribute; import org.geotools.data.wms.xml.WMSSchema.WMSComplexType; import org.geotools.data.wms.xml.WMSSchema.WMSElement; import org.geotools.xml.PrintHandler; import org.geotools.xml.schema.Attribute; import org.geotools.xml.schema.Element; import org.geotools.xml.schema.ElementGrouping; import org.geotools.xml.schema.ElementValue; import org.geotools.xml.schema.Sequence; import org.geotools.xml.schema.impl.SequenceGT; import org.geotools.xml.xsi.XSISimpleTypes; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * * * @source $URL$ */ public class WMSDescribeLayerTypes { public static class WMS_DescribeLayerResponse extends WMSSchema.WMSComplexType { private static WMSComplexType instance = new WMS_DescribeLayerResponse(); public static WMSComplexType getInstance() { return instance; } private static Element[] elems = new Element[] { new WMSElement("LayerDescription", _LayerDescription.getInstance(), 0, Integer.MAX_VALUE) }; private static Sequence seq = new SequenceGT(elems); private static Attribute[] attrs = new Attribute[] { new WMSAttribute("version", XSISimpleTypes.String.getInstance()) }; /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getAttributes() */ public Attribute[] getAttributes() { return attrs; } /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getChild() */ public ElementGrouping getChild() { return seq; } /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getChildElements() */ public Element[] getChildElements() { return elems; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getValue(org.geotools.xml.schema.Element, org.geotools.xml.schema.ElementValue[], org.xml.sax.Attributes, java.util.Map) */ public Object getValue( Element element, ElementValue[] value, Attributes attrs, Map hints ) throws SAXException, OperationNotSupportedException { LayerDescription[] layerDescs = new LayerDescription[value.length]; for (int i = 0; i < value.length; i++) { layerDescs[i] = (LayerDescription) value[i].getValue(); } return layerDescs; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getName() */ public String getName() { return "WMS_DescribeLayerResponse"; //$NON-NLS-1$ } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getInstanceType() */ public Class getInstanceType() { return LayerDescription[].class; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#canEncode(org.geotools.xml.schema.Element, java.lang.Object, java.util.Map) */ public boolean canEncode( Element element, Object value, Map hints ) { return false; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#encode(org.geotools.xml.schema.Element, java.lang.Object, org.geotools.xml.PrintHandler, java.util.Map) */ public void encode( Element element, Object value, PrintHandler output, Map hints ) throws IOException, OperationNotSupportedException { throw new OperationNotSupportedException(); } } public static class _LayerDescription extends WMSComplexType { private static WMSComplexType instance = new _LayerDescription(); public static WMSComplexType getInstance() { return instance; } private static Element[] elems = new Element[] { new WMSElement("Query", _Query.getInstance(), 0, Integer.MAX_VALUE) }; private static Sequence seq = new SequenceGT(elems); private static Attribute[] attrs = new Attribute[] { new WMSAttribute(null, "name", WMSSchema.NAMESPACE, XSISimpleTypes.String.getInstance(), Attribute.REQUIRED, null, null, false), new WMSAttribute("wfs", XSISimpleTypes.String.getInstance()), new WMSAttribute("owsType", XSISimpleTypes.String.getInstance()), new WMSAttribute("owsURL", XSISimpleTypes.String.getInstance()) }; /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getAttributes() */ public Attribute[] getAttributes() { return attrs; } /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getChild() */ public ElementGrouping getChild() { return seq; } /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getChildElements() */ public Element[] getChildElements() { return elems; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getValue(org.geotools.xml.schema.Element, org.geotools.xml.schema.ElementValue[], org.xml.sax.Attributes, java.util.Map) */ public Object getValue( Element element, ElementValue[] value, Attributes attrs, Map hints ) throws SAXException, OperationNotSupportedException { LayerDescription layerDesc = new LayerDescription(); String[] queries = new String[value.length]; for (int i = 0; i < value.length; i++) { queries[i] = (String) value[i].getValue(); } layerDesc.setQueries(queries); String name = attrs.getValue("name"); layerDesc.setName(name); String owsType = attrs.getValue("owsType"); layerDesc.setOwsType(owsType); try { URL wfs = new URL(attrs.getValue("wfs")); layerDesc.setWfs(wfs); } catch (MalformedURLException e) { } try { URL owsURL = new URL(attrs.getValue("owsURL")); layerDesc.setOwsURL(owsURL); } catch (MalformedURLException e) { } return layerDesc; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getName() */ public String getName() { return "LayerDescription"; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getInstanceType() */ public Class getInstanceType() { return LayerDescription.class; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#canEncode(org.geotools.xml.schema.Element, java.lang.Object, java.util.Map) */ public boolean canEncode( Element element, Object value, Map hints ) { return false; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#encode(org.geotools.xml.schema.Element, java.lang.Object, org.geotools.xml.PrintHandler, java.util.Map) */ public void encode( Element element, Object value, PrintHandler output, Map hints ) throws IOException, OperationNotSupportedException { throw new OperationNotSupportedException(); } } public static class _Query extends WMSComplexType { private static WMSComplexType instance = new _Query(); public static WMSComplexType getInstance() { return instance; } public static Attribute[] attrs = new Attribute[] { new WMSAttribute(null, "typeName", WMSSchema.NAMESPACE, XSISimpleTypes.String.getInstance(), Attribute.REQUIRED, null, null, false) }; /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getAttributes() */ public Attribute[] getAttributes() { return attrs; } /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getChild() */ public ElementGrouping getChild() { return null; } /* (non-Javadoc) * @see org.geotools.xml.schema.ComplexType#getChildElements() */ public Element[] getChildElements() { return null; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getValue(org.geotools.xml.schema.Element, org.geotools.xml.schema.ElementValue[], org.xml.sax.Attributes, java.util.Map) */ public Object getValue( Element element, ElementValue[] value, Attributes attrs, Map hints ) throws SAXException, OperationNotSupportedException { return attrs.getValue("typeName"); } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getName() */ public String getName() { return "Query"; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#getInstanceType() */ public Class getInstanceType() { return String.class; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#canEncode(org.geotools.xml.schema.Element, java.lang.Object, java.util.Map) */ public boolean canEncode( Element element, Object value, Map hints ) { return false; } /* (non-Javadoc) * @see org.geotools.xml.schema.Type#encode(org.geotools.xml.schema.Element, java.lang.Object, org.geotools.xml.PrintHandler, java.util.Map) */ public void encode( Element element, Object value, PrintHandler output, Map hints ) throws IOException, OperationNotSupportedException { throw new OperationNotSupportedException(); } } }