/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.wfsv.xml.v1_1_0;
import java.math.BigInteger;
import javax.xml.namespace.QName;
import net.opengis.wfs.QueryType;
import net.opengis.wfs.ResultTypeType;
import net.opengis.wfsv.GetVersionedFeatureType;
import net.opengis.wfsv.WfsvFactory;
import org.geotools.xml.AbstractComplexBinding;
import org.geotools.xml.ElementInstance;
import org.geotools.xml.Node;
/**
* Binding object for the type
* http://www.opengis.net/wfsv:GetVersionedFeatureType.
*
* <p>
*
* <pre>
* <code>
* <xsd:complexType name="GetVersionedFeatureType">
* <xsd:annotation>
* <xsd:documentation>
* The GetVersionedFeature extends GetFeature by returning a collection
* of AbstractVersionedFeature, which do contain more information about
* the last change occurred on each feature.
* </xsd:documentation>
* </xsd:annotation>
* <xsd:complexContent>
* <xsd:extension base="wfs:GetFeatureType"/>
* </xsd:complexContent>
* </xsd:complexType>
*
* </code>
* </pre>
*
* </p>
*
* @generated
*/
public class GetVersionedFeatureTypeBinding extends AbstractComplexBinding {
private WfsvFactory wfsvFactory;
public GetVersionedFeatureTypeBinding(WfsvFactory wfsvFactory) {
this.wfsvFactory = wfsvFactory;
}
/**
* @generated
*/
public QName getTarget() {
return WFSV.GetVersionedFeatureType;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated modifiable
*/
public Class getType() {
return GetVersionedFeatureTypeBinding.class;
}
// public int getExecutionMode() {
// return Binding.OVERRIDE;
// }
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated modifiable
*/
public Object parse(ElementInstance instance, Node node, Object value)
throws Exception {
GetVersionedFeatureType getFeature = wfsvFactory.createGetVersionedFeatureType();
// lt;xsd:element maxOccurs="unbounded" ref="wfs:Query"/>
getFeature.getQuery().addAll(node.getChildValues(QueryType.class));
// <xsd:attribute default="results" name="resultType"
// type="wfs:ResultTypeType" use="optional">
// Funny, it seems resultType is not being parsed, still a string...
if (node.hasAttribute("resultType")) {
Object rt = node.getAttributeValue("resultType");
if ("results".equals(rt)) {
getFeature.setResultType(ResultTypeType.RESULTS_LITERAL);
} else if ("hits".equals(rt)) {
getFeature.setResultType(ResultTypeType.HITS_LITERAL);
} else {
getFeature.setResultType((ResultTypeType) rt);
}
}
if (node.hasAttribute("version")) {
getFeature.setVersion((String) node
.getAttributeValue("version"));
}
// <xsd:attribute default="text/xml; subtype=gml/3.1.1"
// name="outputFormat" type="xsd:string" use="optional">
if (node.hasAttribute("outputFormat")) {
getFeature.setOutputFormat((String) node
.getAttributeValue("outputFormat"));
} else if("1.0.0".equals(getFeature.getVersion())) {
// use GML2 output by default for 1.0 requests
getFeature.setOutputFormat("GML2");
}
// <xsd:attribute name="maxFeatures" type="xsd:positiveInteger"
// use="optional">
if (node.hasAttribute("maxFeatures")) {
getFeature.setMaxFeatures((BigInteger) node
.getAttributeValue("maxFeatures"));
}
// <xsd:attribute name="traverseXlinkDepth" type="xsd:string"
// use="optional">
if (node.hasAttribute("traverseXlinkDepth")) {
getFeature.setTraverseXlinkDepth((String) node
.getAttributeValue("traverseXlinkDepth"));
}
// <xsd:attribute name="traverseXlinkExpiry"
// type="xsd:positiveInteger" use="optional">
if (node.hasAttribute("traverseXlinkExpiry")) {
getFeature.setTraverseXlinkExpiry((BigInteger) node
.getAttributeValue("traverseXlinkExpiry"));
}
return getFeature;
}
}