/*
* 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.xml.wfs;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.naming.OperationNotSupportedException;
import org.geotools.data.Query;
import org.geotools.data.wfs.v1_0_0.Action;
import org.geotools.data.wfs.v1_0_0.LockRequest;
import org.geotools.data.wfs.v1_0_0.LockResult;
import org.geotools.data.wfs.v1_0_0.TransactionResult;
import org.geotools.data.wfs.v1_0_0.WFSTransactionState;
import org.geotools.data.wfs.v1_0_0.Action.DeleteAction;
import org.geotools.data.wfs.v1_0_0.Action.InsertAction;
import org.geotools.data.wfs.v1_0_0.Action.UpdateAction;
import org.geotools.filter.FidFilter;
import org.geotools.filter.FilterFactoryFinder;
import org.geotools.xml.PrintHandler;
import org.geotools.xml.SchemaFactory;
import org.geotools.xml.filter.FilterSchema;
import org.geotools.xml.filter.FilterSchema.FilterElement;
import org.geotools.xml.gml.GMLSchema;
import org.geotools.xml.schema.Attribute;
import org.geotools.xml.schema.AttributeValue;
import org.geotools.xml.schema.Choice;
import org.geotools.xml.schema.Element;
import org.geotools.xml.schema.ElementGrouping;
import org.geotools.xml.schema.ElementValue;
import org.geotools.xml.schema.Facet;
import org.geotools.xml.schema.Schema;
import org.geotools.xml.schema.Sequence;
import org.geotools.xml.schema.SimpleType;
import org.geotools.xml.schema.impl.ChoiceGT;
import org.geotools.xml.schema.impl.FacetGT;
import org.geotools.xml.schema.impl.SequenceGT;
import org.geotools.xml.wfs.WFSBasicComplexTypes.FeatureCollectionType;
import org.geotools.xml.wfs.WFSBasicComplexTypes.QueryType;
import org.geotools.xml.wfs.WFSSchema.WFSAttribute;
import org.geotools.xml.wfs.WFSSchema.WFSComplexType;
import org.geotools.xml.wfs.WFSSchema.WFSElement;
import org.geotools.xml.xsi.XSISimpleTypes;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.Name;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.helpers.AttributesImpl;
import com.vividsolutions.jts.geom.Geometry;
/**
* <p>
* DOCUMENT ME!
* </p>
*
* @author dzwiers
*
* @source $URL$
*/
public class WFSTransactionComplexTypes {
/**
* <p>
* This class represents an TransactionType within the WFS Schema. This
* includes both the data and parsing functionality associated with a
* TransactionType.
* </p>
*
* @see WFSComplexType
*/
static class TransactionType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new TransactionType();
// <xsd:complexType name="TransactionType">
// <xsd:annotation>
// <xsd:documentation>
// The TranactionType defines the Transaction operation. A
// Transaction element contains one or more Insert, Update
// Delete and Native elements that allow a client application
// to create, modify or remove feature instances from the
// feature repository that a Web Feature Service controls.
// </xsd:documentation>
// </xsd:annotation>
// <xsd:sequence>
// <xsd:element ref="wfs:LockId" minOccurs="0">
// <xsd:annotation>
// <xsd:documentation>
// In order for a client application to operate upon locked
// feature instances, the Transaction request must include
// the LockId element. The content of this element must be
// the lock identifier the client application obtained from
// a previous GetFeatureWithLock or LockFeature operation.
//
// If the correct lock identifier is specified the Web
// Feature Service knows that the client application may
// operate upon the locked feature instances.
//
// No LockId element needs to be specified to operate upon
// unlocked features.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// <xsd:choice minOccurs="0" maxOccurs="unbounded">
// <xsd:element ref="wfs:Insert"/>
// <xsd:element ref="wfs:Update"/>
// <xsd:element ref="wfs:Delete"/>
// <xsd:element ref="wfs:Native"/>
// </xsd:choice>
// </xsd:sequence>
// <xsd:attribute name="version"
// type="xsd:string" use="required" fixed="1.0.0"/>
// <xsd:attribute name="service"
// type="xsd:string" use="required" fixed="WFS"/>
// <xsd:attribute name="handle"
// type="xsd:string" use="optional"/>
// <xsd:attribute name="releaseAction"
// type="wfs:AllSomeType" use="optional">
// <xsd:annotation>
// <xsd:documentation>
// The releaseAction attribute is used to control how a Web
// Feature service releases locks on feature instances after
// a Transaction request has been processed.
//
// Valid values are ALL or SOME.
//
// A value of ALL means that the Web Feature Service should
// release the locks of all feature instances locked with the
// specified lockId, regardless or whether or not the features
// were actually modified.
//
// A value of SOME means that the Web Feature Service will
// only release the locks held on feature instances that
// were actually operated upon by the transaction. The lockId
// that the client application obtained shall remain valid and
// the other, unmodified, feature instances shall remain locked.
// If the expiry attribute was specified in the original operation
// that locked the feature instances, then the expiry counter
// will be reset to give the client application that same amount
// of time to post subsequent transactions against the locked
// features.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:attribute>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("LockId", XSISimpleTypes.String.getInstance(),
0, 1, false, null),
new WFSElement("Insert", InsertElementType.getInstance()),
new WFSElement("Update", UpdateElementType.getInstance()),
new WFSElement("Delete", DeleteElementType.getInstance()),
new WFSElement("Native", NativeType.getInstance())
};
private static Sequence child = new SequenceGT(new ElementGrouping[] {
elems[0],
new ChoiceGT(null, 0, Integer.MAX_VALUE,
new Element[] { elems[1], elems[2], elems[3], elems[4] })
});
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("version",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED) {
public String getFixed() {
return "1.0.0";
}
}
,
new WFSAttribute("service",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED) {
public String getFixed() {
return "WFS";
}
}
,
new WFSAttribute("handle", XSISimpleTypes.String.getInstance(),
Attribute.OPTIONAL),
new WFSAttribute("lockAction", AllSomeType.getInstance(),
Attribute.OPTIONAL)
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "TransactionType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return WFSTransactionState.class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof WFSTransactionState;
}
/**
* @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 {
if (!canEncode(element, value, hints)) {
throw new IOException("Cannot encode");
}
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[0].getName(), null, "string", attrs[0].getFixed());
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[1].getName(), null, "string", attrs[1].getFixed());
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[3].getName(), null, "string", "ALL");
WFSTransactionState transactionRequest = (WFSTransactionState) value;
output.startElement(element.getNamespace(), element.getName(),
attributes);
if (transactionRequest.getLockId() != null) {
elems[0].getType().encode(elems[0],
transactionRequest.getLockId(), output, hints);
}
Iterator actions = transactionRequest.getAllActions().iterator();
while (actions.hasNext()) {
Action a = (Action) actions.next();
switch (a.getType()) {
case Action.DELETE:
elems[3].getType().encode(elems[3], a, output, hints);
break;
case Action.INSERT:
elems[1].getType().encode(elems[1], a, output, hints);
break;
case Action.UPDATE:
elems[2].getType().encode(elems[2], a, output, hints);
break;
default:
elems[4].getType().encode(elems[4], a, output, hints);
}
}
output.endElement(element.getNamespace(), element.getName());
}
}
static class GetFeatureWithLockType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new FeatureCollectionType();
// <xsd:complexType name="GetFeatureWithLockType">
// <xsd:annotation>
// <xsd:documentation>
// A GetFeatureWithLock request operates identically to a
// GetFeature request expect that it attempts to lock the
// feature instances in the result set and includes a lock
// identifier in its response to a client. A lock identifier
// is an identifier generated by a Web Feature Service that
// a client application can use, in subsequent operations,
// to reference the locked set of feature instances.
// </xsd:documentation>
// </xsd:annotation>
// <xsd:sequence>
// <xsd:element ref="wfs:Query" maxOccurs="unbounded"/>
// </xsd:sequence>
// <xsd:attribute name="version"
// type="xsd:string" use="required" fixed="1.0.0"/>
// <xsd:attribute name="service"
// type="xsd:string" use="required" fixed="WFS"/>
// <xsd:attribute name="handle"
// type="xsd:string" use="optional"/>
// <xsd:attribute name="expiry"
// type="xsd:positiveInteger" use="optional"/>
// <xsd:attribute name="outputFormat"
// type="xsd:string" use="optional" default="GML2"/>
// <xsd:attribute name="maxFeatures"
// type="xsd:positiveInteger" use="optional"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("Query", QueryType.getInstance(), 1,
Integer.MAX_VALUE, false, null)
};
private static Sequence child = new SequenceGT(elems);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("version",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED) {
public String getFixed() {
return "1.0.0";
}
}
,
new WFSAttribute("service",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED) {
public String getFixed() {
return "WFS";
}
}
,
new WFSAttribute("handle", XSISimpleTypes.String.getInstance(),
Attribute.OPTIONAL),
new WFSAttribute("outputFormat",
XSISimpleTypes.String.getInstance(), Attribute.OPTIONAL,
"GML2"),
new WFSAttribute("maxFeatures",
XSISimpleTypes.PositiveInteger.getInstance(),
Attribute.OPTIONAL)
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "GetFeatureWithLockType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return Query.class;
}
/**
* @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) {
if ((element.getType() != null)
&& getName().equals(element.getType().getName())) {
return ((value == null) || value instanceof Query);
}
return false;
}
/**
* @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 {
if (canEncode(element, value, hints)) {
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[0].getName(), null, "string", attrs[0].getFixed());
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[1].getName(), null, "string", attrs[1].getFixed());
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[2].getName(), null, "string", attrs[3].getDefault());
Query query = (Query) value;
if ((query != null)
&& (query.getMaxFeatures() != Query.DEFAULT_MAX)) {
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
elems[3].getName(), null, "integer",
"" + query.getMaxFeatures());
}
if (hints != null) {
String lockId = (String) hints.get(WFSBasicComplexTypes.LOCK_KEY);
if (lockId != null) {
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
elems[2].getName(), null, "string", lockId);
}
}
output.startElement(element.getNamespace(), element.getName(),
attributes);
elems[0].getType().encode(elems[0], value, output, hints);
output.endElement(element.getNamespace(), element.getName());
} else {
throw new OperationNotSupportedException(
"not a valid value/element for a DescribeFeatureTypeType.");
}
}
}
static class LockFeatureType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new FeatureCollectionType();
// <xsd:complexType name="LockFeatureType">
// <xsd:annotation>
// <xsd:documentation>
// This type defines the LockFeature operation. The LockFeature
// element contains one or more Lock elements that define
// which features of a particular type should be locked. A lock
// identifier (lockId) is returned to the client application which
// can be used by subsequent operations to reference the locked
// features.
// </xsd:documentation>
// </xsd:annotation>
// <xsd:sequence>
// <xsd:element name="Lock" type="wfs:LockType" maxOccurs="unbounded">
// <xsd:annotation>
// <xsd:documentation>
// The lock element is used to indicate which feature
// instances of particular type are to be locked.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// </xsd:sequence>
// <xsd:attribute name="version"
// type="xsd:string" use="required" fixed="1.0.0"/>
// <xsd:attribute name="service"
// type="xsd:string" use="required" fixed="WFS"/>
// <xsd:attribute name="expiry"
// type="xsd:positiveInteger" use="optional"/>
// <xsd:attribute name="lockAction"
// type="wfs:AllSomeType" use="optional">
// <xsd:annotation>
// <xsd:documentation>
// The lockAction attribute is used to indicate what
// a Web Feature Service should do when it encounters
// a feature instance that has already been locked by
// another client application.
//
// Valid values are ALL or SOME.
//
// ALL means that the Web Feature Service must acquire
// locks on all the requested feature instances. If it
// cannot acquire those locks then the request should
// fail. In this instance, all locks acquired by the
// operation should be released.
//
// SOME means that the Web Feature Service should lock
// as many of the requested features as it can.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:attribute>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("Lock", LockType.getInstance(), 1,
Integer.MAX_VALUE, false, null),
};
private Sequence child = new SequenceGT(elems);
private Attribute[] attrs = new Attribute[] {
new WFSAttribute("version",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED) {
public String getFixed() {
return "1.0.0";
}
}
,
new WFSAttribute("service",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED) {
public String getFixed() {
return "WFS";
}
}
,
new WFSAttribute("expiry",
XSISimpleTypes.PositiveInteger.getInstance(),
Attribute.OPTIONAL),
new WFSAttribute("lockAction", AllSomeType.getInstance(),
Attribute.OPTIONAL)
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "LockFeatureType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return LockRequest.class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof LockRequest;
}
/**
* @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 {
if (!canEncode(element, value, hints)) {
throw new IOException("Cannot encode");
}
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[0].getName(), null, "string", attrs[0].getFixed());
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[1].getName(), null, "string", attrs[1].getFixed());
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[3].getName(), null, "string", "ALL");
LockRequest lockRequest = (LockRequest) value;
if ((lockRequest != null) && (lockRequest.getDuration() > 0)) {
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
elems[2].getName(), null, "integer",
"" + lockRequest.getDuration());
}
output.startElement(element.getNamespace(), element.getName(),
attributes);
Object[] t = new Object[2];
for (int i = 0; i < lockRequest.getTypeNames().length; i++) {
t[0] = lockRequest.getTypeNames()[i];
t[1] = lockRequest.getFilters()[i];
elems[0].getType().encode(elems[0], t, output, hints);
}
output.endElement(element.getNamespace(), element.getName());
}
}
static class LockType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new LockType();
// <xsd:complexType name="LockType">
// <xsd:annotation>
// <xsd:documentation>
// This type defines the Lock element. The Lock element
// defines a locking operation on feature instances of
// a single type. An OGC Filter is used to constrain the
// scope of the operation. Features to be locked can be
// identified individually by using their feature identifier
// or they can be locked by satisfying the spatial and
// non-spatial constraints defined in the filter.
// </xsd:documentation>
// </xsd:annotation>
// <xsd:sequence>
// <xsd:element ref="ogc:Filter" minOccurs="0" maxOccurs="1"/>
// </xsd:sequence>
// <xsd:attribute name="handle"
// type="xsd:string" use="optional"/>
// <xsd:attribute name="typeName"
// type="xsd:QName" use="required"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement(FilterSchema.getInstance().getElements()[2]
.getName(),
FilterSchema.getInstance().getElements()[2].getType(), 0,
1, false,
FilterSchema.getInstance().getElements()[2]
.getSubstitutionGroup()) {
public URI getNamespace() {
return FilterSchema.NAMESPACE;
}
}
,
};
private static Sequence child = new SequenceGT(elems);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("handle", XSISimpleTypes.String.getInstance(),
Attribute.OPTIONAL),
new WFSAttribute("typeName",
XSISimpleTypes.QName.getInstance(), Attribute.REQUIRED)
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "LockType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return Object[].class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof Object[] && (((Object[]) value).length == 2);
}
/**
* @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 {
if (!canEncode(element, value, hints)) {
throw new IOException("Cannot encode");
}
Object[] t = (Object[]) value;
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[1].getName(), null, "string", (String) t[0]);
LockRequest lockRequest = (LockRequest) value;
if ((lockRequest != null) && (lockRequest.getDuration() > 0)) {
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
elems[2].getName(), null, "integer",
"" + lockRequest.getDuration());
}
output.startElement(element.getNamespace(), element.getName(),
attributes);
elems[0].getType().encode(elems[0], t[1], output, hints);
output.endElement(element.getNamespace(), element.getName());
}
}
static class InsertElementType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new InsertElementType();
// <xsd:complexType name="InsertElementType">
// <xsd:sequence>
// <xsd:element ref="gml:_Feature" maxOccurs="unbounded"/>
// </xsd:sequence>
// <xsd:attribute name="handle" type="xsd:string" use="optional"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement(GMLSchema.getInstance().getElements()[0].getName(),
GMLSchema.getInstance().getElements()[0].getType(), 1,
Integer.MAX_VALUE,
GMLSchema.getInstance().getElements()[0].isAbstract(),
GMLSchema.getInstance().getElements()[0]
.getSubstitutionGroup()) {
public URI getNamespace() {
return GMLSchema.NAMESPACE;
}
}
};
private static Sequence child = new SequenceGT(elems);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("handler",
XSISimpleTypes.String.getInstance(), Attribute.OPTIONAL),
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "InsertElementType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return InsertAction.class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof InsertAction;
}
/**
* @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 {
if (!canEncode(element, value, hints)) {
return;
}
output.startElement(element.getNamespace(), element.getName(), null);
InsertAction a = (InsertAction) value;
// find element definition
// should exist when original from a WFS ...
SimpleFeature f = a.getFeature();
SimpleFeatureType featureType = f.getFeatureType();
Name name = featureType.getName();
Schema schema = SchemaFactory.getInstance( name.getNamespaceURI() );
Element[] els = schema.getElements();
Element e = null;
if (els != null) {
for (int i = 0; i < els.length; i++){
String typeName = featureType.getTypeName();
if (typeName.indexOf(':')>=0) {
typeName = typeName.substring(typeName.indexOf(':')+1);
}
if (typeName.equals(els[i].getName())) {
e = els[i];
i = els.length;
}
}
}
// write it
elems[0].getType().encode(e, f, output, hints);
output.endElement(element.getNamespace(), element.getName());
}
}
static class UpdateElementType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new UpdateElementType();
// <xsd:complexType name="UpdateElementType">
// <xsd:sequence>
// <xsd:element ref="wfs:Property" maxOccurs="unbounded" />
// <xsd:element ref="ogc:Filter" minOccurs="0" maxOccurs="1">
// <xsd:annotation>
// <xsd:documentation>
// The Filter element is used to constrain the scope
// of the update operation to those features identified
// by the filter. Feature instances can be specified
// explicitly and individually using the identifier of
// each feature instance OR a set of features to be
// operated on can be identified by specifying spatial
// and non-spatial constraints in the filter.
// If no filter is specified, then the update operation
// applies to all feature instances.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// </xsd:sequence>
// <xsd:attribute name="handle" type="xsd:string" use="optional"/>
// <xsd:attribute name="typeName" type="xsd:QName" use="required"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("Property", PropertyType.getInstance(), 0,
Integer.MAX_VALUE, true, null),
new WFSElement(FilterSchema.getInstance().getElements()[2]
.getName(),
FilterSchema.getInstance().getElements()[2].getType(), 0,
1, false,
FilterSchema.getInstance().getElements()[2]
.getSubstitutionGroup()) {
public URI getNamespace() {
return FilterSchema.NAMESPACE;
}
}
};
private static Sequence child = new SequenceGT(elems);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("handler",
XSISimpleTypes.String.getInstance(), Attribute.OPTIONAL),
new WFSAttribute("typeName",
XSISimpleTypes.QName.getInstance(), Attribute.REQUIRED),
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "UpdateElementType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return UpdateAction.class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof UpdateAction;
}
/**
* @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 {
if (!canEncode(element, value, hints)) {
return;
}
UpdateAction a = (UpdateAction) value;
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[1].getName(), null, "string", a.getTypeName());
output.startElement(element.getNamespace(), element.getName(),
attributes);
Object[] prop = new Object[2];
String[] names = a.getPropertyNames();
for (int i = 0; i < names.length; i++) {
prop[0] = names[i];
prop[1] = a.getProperty(names[i]);
elems[0].getType().encode(elems[0], prop, output, hints);
}
elems[1].getType().encode(elems[1], a.getFilter(), output, hints);
output.endElement(element.getNamespace(), element.getName());
}
}
static class DeleteElementType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new DeleteElementType();
// <xsd:complexType name="DeleteElementType">
// <xsd:sequence>
// <xsd:element ref="ogc:Filter" minOccurs="1" maxOccurs="1">
// <xsd:annotation>
// <xsd:documentation>
// The Filter element is used to constrain the scope
// of the delete operation to those features identified
// by the filter. Feature instances can be specified
// explicitly and individually using the identifier of
// each feature instance OR a set of features to be
// operated on can be identified by specifying spatial
// and non-spatial constraints in the filter.
// If no filter is specified then an exception should
// be raised since it is unlikely that a client application
// intends to delete all feature instances.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// </xsd:sequence>
// <xsd:attribute name="handle" type="xsd:string" use="optional"/>
// <xsd:attribute name="typeName" type="xsd:QName" use="required"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement(FilterSchema.getInstance().getElements()[2]
.getName(),
FilterSchema.getInstance().getElements()[2].getType(), 0,
1, false,
FilterSchema.getInstance().getElements()[2]
.getSubstitutionGroup()) {
public URI getNamespace() {
return FilterSchema.NAMESPACE;
}
}
};
private static Sequence child = new SequenceGT(elems);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("handler",
XSISimpleTypes.String.getInstance(), Attribute.OPTIONAL),
new WFSAttribute("typeName",
XSISimpleTypes.QName.getInstance(), Attribute.REQUIRED),
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "DeleteElementType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return DeleteAction.class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof DeleteAction;
}
/**
* @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 {
if (!canEncode(element, value, hints)) {
return;
}
DeleteAction a = (DeleteAction) value;
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[1].getName(), null, "string", a.getTypeName());
output.startElement(element.getNamespace(), element.getName(),
attributes);
elems[0].getType().encode(elems[0], a.getFilter(), output, hints);
output.endElement(element.getNamespace(), element.getName());
}
}
static class NativeType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new NativeType();
// <xsd:complexType name="NativeType">
// <xsd:attribute name="vendorId" type="xsd:string" use="required">
// <xsd:annotation>
// <xsd:documentation>
// The vendorId attribute is used to specify the name of
// vendor who's vendor specific command the client
// application wishes to execute.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:attribute>
// <xsd:attribute name="safeToIgnore" type="xsd:boolean" use="required">
// <xsd:annotation>
// <xsd:documentation>
// In the event that a Web Feature Service does not recognize
// the vendorId or does not recognize the vendor specific command,
// the safeToIgnore attribute is used to indicate whether the
// exception can be safely ignored. A value of TRUE means that
// the Web Feature Service may ignore the command. A value of
// FALSE means that a Web Feature Service cannot ignore the
// command and an exception should be raised if a problem is
// encountered.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:attribute>
// </xsd:complexType>
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("vendorId",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED),
new WFSAttribute("safeToIgnore",
XSISimpleTypes.Boolean.getInstance(), Attribute.REQUIRED),
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return null;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "NativeType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return Action.class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof Action && (((Action) value).getType() == 0);
}
/**
* @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 {
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[0].getName(), null, "string", "www.refractions.net");
// TODO? force failures on unknown actions? allowing ignores here
attributes.addAttribute(WFSSchema.NAMESPACE.toString(),
attrs[1].getName(), null, "string", "true");
output.element(element.getNamespace(), element.getName(), attributes);
}
}
static class PropertyType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new PropertyType();
// <xsd:complexType name="PropertyType">
// <xsd:sequence>
// <xsd:element name="Name" type="xsd:string">
// <xsd:annotation>
// <xsd:documentation>
// The Name element contains the name of a feature property
// to be updated.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// <xsd:element name="Value" minOccurs="0">
// <xsd:annotation>
// <xsd:documentation>
// The Value element contains the replacement value for the
// named property.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// </xsd:sequence>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("Name", XSISimpleTypes.String.getInstance()),
// TODO correctly represent the value element
new WFSElement("Value", WFSEmptyType.getInstance(), 0, 1, true,
null) {
public boolean isMixed() {
return true;
}
}
,
};
private static Sequence child = new SequenceGT(elems);
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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, SAXNotSupportedException {
throw new SAXNotSupportedException("");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "PropertyType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return Object[].class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName()) && (value != null)
&& value instanceof Object[] && (((Object[]) value).length == 2);
}
/**
* @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 {
if (!canEncode(element, value, hints)) {
throw new OperationNotSupportedException("Cannot encode "
+ element + " in PropertyType");
}
Object[] t = (Object[]) value;
output.startElement(element.getNamespace(), element.getName(), null);
elems[0].getType().encode(elems[0], t[0], output, hints);
if (t[1] != null) {
// elems[1].getType().encode(elems[1], t[1], output, hints);
// can only be a primative, geometry or feature for version 2.0
// in the future use output.findElement(t[1]) ... posibly with a newer search order
output.startElement(elems[1].getNamespace(),elems[1].getName(),null);
if(t[1] instanceof SimpleFeature){
// Feature
GMLSchema.getInstance().getElements()[0].getType().encode(GMLSchema.getInstance().getElements()[0],t[1],output,hints);
}else{
if(t[1] instanceof Geometry){
// Geometry
GMLSchema.getInstance().getElements()[29].getType().encode(GMLSchema.getInstance().getElements()[0],t[1],output,hints);
}else{
// primative
output.characters(t[1].toString());
}}
output.endElement(elems[1].getNamespace(),elems[1].getName());
}
output.endElement(element.getNamespace(), element.getName());
}
}
static class WFS_LockFeatureResponseType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new WFS_LockFeatureResponseType();
// <xsd:complexType name="WFS_LockFeatureResponseType">
// <xsd:annotation>
// <xsd:documentation>
// The WFS_LockFeatureResponseType is used to define an
// element to contains the response to a LockFeature
// operation.
// </xsd:documentation>
// </xsd:annotation>
// <xsd:sequence>
// <xsd:element ref="wfs:LockId">
// <xsd:annotation>
// <xsd:documentation>
// The WFS_LockFeatureResponse includes a LockId element
// that contains a lock identifier. The lock identifier
// can be used by a client, in subsequent operations, to
// operate upon the locked feature instances.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// <xsd:element name="FeaturesLocked"
// type="wfs:FeaturesLockedType" minOccurs="0">
// <xsd:annotation>
// <xsd:documentation>
// The LockFeature or GetFeatureWithLock operations
// identify and attempt to lock a set of feature
// instances that satisfy the constraints specified
// in the request. In the event that the lockAction
// attribute (on the LockFeature or GetFeatureWithLock
// elements) is set to SOME, a Web Feature Service will
// attempt to lock as many of the feature instances from
// the result set as possible.
//
// The FeaturesLocked element contains list of ogc:FeatureId
// elements enumerating the feature instances that a WFS
// actually managed to lock.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// <xsd:element name="FeaturesNotLocked"
// type="wfs:FeaturesNotLockedType" minOccurs="0">
// <xsd:annotation>
// <xsd:documentation>
// In contrast to the FeaturesLocked element, the
// FeaturesNotLocked element contains a list of
// ogc:Filter elements identifying feature instances
// that a WFS did not manage to lock because they were
// already locked by another process.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// </xsd:sequence>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("LockId", XSISimpleTypes.String.getInstance()),
new WFSElement("FeaturesLocked",
FeaturesLockedType.getInstance(), 0, 1, true, null),
new WFSElement("FeaturesNotLocked",
FeaturesNotLockedType.getInstance(), 0, 1, true, null)
};
private static Sequence child = new SequenceGT(elems);
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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, SAXNotSupportedException {
if ((element == null) || (value == null)
|| (element.getType() == null)) {
throw new SAXException("Invalid parameters : null found");
}
if ((value.length < 1) || (value.length > 3)) {
throw new SAXException("Invalid children: too few or too many");
}
if (!getName().equals(element.getType().getName())) {
throw new SAXException("Invalid type name for element provided");
}
String lockId = (String) value[0].getValue();
FidFilter in = null;
FidFilter out = null;
int i = 1;
if ((i < value.length)
&& elems[1].getType().getName().equals(value[i].getElement()
.getType()
.getName())) {
in = (FidFilter) value[i++];
}
if ((i < value.length)
&& elems[2].getType().getName().equals(value[i].getElement()
.getType()
.getName())) {
out = (FidFilter) value[i++];
}
return new LockResult(lockId, in, out);
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "WFS_LockFeatureResponseType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return LockResult.class;
}
/**
* @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;
}
/**
* @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 OperationNotSupportedException {
throw new OperationNotSupportedException();
}
}
static class FeaturesLockedType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new FeaturesLockedType();
// <xsd:complexType name="FeaturesLockedType">
// <xsd:sequence maxOccurs="unbounded">
// <xsd:element ref="ogc:FeatureId"/>
// </xsd:sequence>
// </xsd:complexType>
private static Element[] elems = new Element[] {
FilterSchema.getInstance().getElements()[1],
};
private static Sequence child = new SequenceGT(null, elems, 1,
Integer.MAX_VALUE);
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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, SAXNotSupportedException {
if ((element == null) || (value == null)
|| (element.getType() == null)) {
throw new SAXException("Invalid parameters : null found");
}
if (value.length < 1) {
throw new SAXException("Invalid children: too few");
}
if (!getName().equals(element.getType().getName())) {
throw new SAXException("Invalid type name for element provided");
}
Set fidSet = new HashSet();
for (int i = 0; i < value.length; i++)
fidSet.addAll(Arrays.asList(
((FidFilter) value[i].getValue()).getFids()));
FidFilter r = FilterFactoryFinder.createFilterFactory().createFidFilter();
r.addAllFids(fidSet);
return r;
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "FeaturesLockedType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return FidFilter.class;
}
/**
* @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;
}
/**
* @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 OperationNotSupportedException {
throw new OperationNotSupportedException();
}
}
static class FeaturesNotLockedType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new FeaturesNotLockedType();
// <xsd:complexType name="FeaturesNotLockedType">
// <xsd:sequence maxOccurs="unbounded">
// <xsd:element ref="ogc:FeatureId"/>
// </xsd:sequence>
// </xsd:complexType>
private static Element[] elems = new Element[] {
FilterSchema.getInstance().getElements()[1],
};
private static Sequence child = new SequenceGT(null, elems, 1,
Integer.MAX_VALUE);
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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, SAXNotSupportedException {
if ((element == null) || (value == null)
|| (element.getType() == null)) {
throw new SAXException("Invalid parameters : null found");
}
if (value.length < 1) {
throw new SAXException("Invalid children: too few");
}
if (!getName().equals(element.getType().getName())) {
throw new SAXException("Invalid type name for element provided");
}
Set fidSet = new HashSet();
for (int i = 0; i < value.length; i++)
fidSet.addAll(Arrays.asList(
((FidFilter) value[i].getValue()).getFids()));
FidFilter r = FilterFactoryFinder.createFilterFactory().createFidFilter();
r.addAllFids(fidSet);
return r;
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "FeaturesNotLockedType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return FidFilter.class;
}
/**
* @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;
}
/**
* @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 OperationNotSupportedException {
throw new OperationNotSupportedException();
}
}
static class WFS_TransactionResponseType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new WFS_TransactionResponseType();
// <xsd:complexType name="WFS_TransactionResponseType">
// <xsd:annotation>
// <xsd:documentation>
// The WFS_TransactionResponseType defines the format of
// the XML document that a Web Feature Service generates
// in response to a Transaction request. The response
// includes the completion status of the transaction
// and the feature identifiers of any newly created
// feature instances.
// </xsd:documentation>
// </xsd:annotation>
// <xsd:sequence>
// <xsd:element name="InsertResult"
// type="wfs:InsertResultType"
// minOccurs="0" maxOccurs="unbounded">
// <xsd:annotation>
// <xsd:documentation>
// The InsertResult element contains a list of ogc:FeatureId
// elements that identify any newly created feature instances.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// <xsd:element name="TransactionResult"
// type="wfs:TransactionResultType">
// <xsd:annotation>
// <xsd:documentation>
// The TransactionResult element contains a Status element
// indicating the completion status of a transaction. In
// the event that the transaction fails, additional element
// may be included to help locate which part of the transaction
// failed and why.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// </xsd:sequence>
// <xsd:attribute name="version"
// type="xsd:string" use="required" fixed="1.0.0"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("InsertResult", InsertResultType.getInstance(),
0, Integer.MAX_VALUE, true, null),
new WFSElement("TransactionResult",
TransactionResultType.getInstance()),
};
private static Sequence child = new SequenceGT(elems);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("version",
XSISimpleTypes.String.getInstance(), Attribute.REQUIRED) {
public String getFixed() {
return "1.0.0";
}
}
,
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
if ((element == null) || (value == null)
|| (element.getType() == null)) {
throw new SAXException("Invalid parameters : null found");
}
if (value.length < 1) {
throw new SAXException("Invalid children: too few");
}
if (!getName().equals(element.getType().getName())) {
throw new SAXException("Invalid type name for element provided");
}
List fidSet = new ArrayList();
for (int i = 0; i < (value.length - 1); i++)
fidSet.addAll( (Collection) value[i].getValue());
Object[] t = (Object[]) value[value.length - 1].getValue();
int status = ((Integer) t[0]).intValue();
SAXException error = (SAXException) ((t.length < 2) ? null : t[1]);
return new TransactionResult(status, fidSet, error);
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "WFS_TransactionResponseType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return TransactionResult.class;
}
/**
* @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;
}
/**
* @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 OperationNotSupportedException {
throw new OperationNotSupportedException();
}
}
static class TransactionResultType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new TransactionResultType();
// <xsd:complexType name="TransactionResultType">
// <xsd:sequence>
// <xsd:element name="Status" type="wfs:StatusType">
// <xsd:annotation>
// <xsd:documentation>
// The Status element contains an element indicating the
// completion status of a transaction. The SUCCESS element
// is used to indicate successful completion. The FAILED
// element is used to indicate that an exception was
// encountered.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// <xsd:element name="Locator" type="xsd:string" minOccurs="0">
// <xsd:annotation>
// <xsd:documentation>
// In the event that an exception was encountered while
// processing a transaction, a Web Feature Service may
// use the Locator element to try and identify the part
// of the transaction that failed. If the element(s)
// contained in a Transaction element included a handle
// attribute, then a Web Feature Service may report the
// handle to identify the offending element.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// <xsd:element name="Message" type="xsd:string" minOccurs="0">
// <xsd:annotation>
// <xsd:documentation>
// The Message element may contain an exception report
// generated by a Web Feature Service when an exception
// is encountered.
// </xsd:documentation>
// </xsd:annotation>
// </xsd:element>
// </xsd:sequence>
// <xsd:attribute name="handle" type="xsd:string" use="optional"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("Status", StatusType.getInstance()),
new WFSElement("Locator", XSISimpleTypes.String.getInstance(),
0, 1, true, null),
new WFSElement("Message", XSISimpleTypes.String.getInstance(),
0, 1, true, null)
};
private static Sequence child = new SequenceGT(elems);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("handle", XSISimpleTypes.String.getInstance(),
Attribute.OPTIONAL),
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
if ((element == null) || (value == null)
|| (element.getType() == null)) {
throw new SAXException("Invalid parameters : null found");
}
if (value.length < 1) {
throw new SAXException("Invalid children: too few");
}
if (!getName().equals(element.getType().getName())) {
throw new SAXException("Invalid type name for element provided");
}
Object[] t = new Object[2];
t[0] = value[0].getValue();
String locator = null;
String message = null;
if (value.length > 1) {
if ((value[1].getElement() != null)
&& elems[1].getName().equals(value[1].getElement()
.getName())) {
locator = (String) value[1].getValue();
if ((value[2].getElement() != null)
&& elems[2].getName().equals(value[2].getElement()
.getName())) {
message = (String) value[2].getValue();
}
} else {
if ((value[1].getElement() != null)
&& elems[2].getName().equals(value[1].getElement()
.getName())) {
message = (String) value[1].getValue();
}
}
}
t[1] = (message == null)
? ((locator == null) ? null : new SAXException(locator))
: ((locator == null) ? new SAXException(message)
: new SAXException(message + ":" + locator));
return t;
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "TransactionResultType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
// [int][SAXException]
return Object[].class;
}
/**
* @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;
}
/**
* @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 OperationNotSupportedException {
throw new OperationNotSupportedException();
}
}
static class InsertResultType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new InsertResultType();
// <xsd:complexType name="InsertResultType">
// <xsd:sequence>
// <xsd:element ref="ogc:FeatureId" maxOccurs="unbounded"/>
// </xsd:sequence>
// <xsd:attribute name="handle" type="xsd:string" use="optional"/>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new FilterElement(FilterSchema.getInstance().getElements()[1].getName(), FilterSchema.getInstance().getElements()[1].getType(), FilterSchema.getInstance().getElements()[1].getSubstitutionGroup()){
public int getMaxOccurs(){
return Integer.MAX_VALUE;
}
},
};
private static Sequence child = new SequenceGT(null, elems, 1,
Integer.MAX_VALUE);
private static Attribute[] attrs = new Attribute[] {
new WFSAttribute("handle", XSISimpleTypes.String.getInstance(),
Attribute.OPTIONAL),
};
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return attrs;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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 attrs1, Map hints)
throws SAXException, SAXNotSupportedException {
if ((element == null) || (value == null)
|| (element.getType() == null)) {
throw new SAXException("Invalid parameters : null found");
}
if (value.length < 1) {
throw new SAXException("Invalid children: too few");
}
if (!getName().equals(element.getType().getName())) {
throw new SAXException("Invalid type name for element provided");
}
List fidList = new ArrayList();
for (int i = 0; i < value.length; i++)
fidList.addAll(Arrays.asList(
((FidFilter) value[i].getValue()).getFids()));
return fidList;
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "InsertResultType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return FidFilter.class;
}
/**
* @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;
}
/**
* @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 OperationNotSupportedException {
throw new OperationNotSupportedException();
}
}
static class StatusType extends WFSComplexType {
// singleton instance
private static final WFSComplexType instance = new StatusType();
// <xsd:complexType name="StatusType">
// <xsd:choice>
// <xsd:element ref="wfs:SUCCESS"/>
// <xsd:element ref="wfs:FAILED"/>
// <xsd:element ref="wfs:PARTIAL"/>
// </xsd:choice>
// </xsd:complexType>
private static Element[] elems = new Element[] {
new WFSElement("SUCCESS", WFSEmptyType.getInstance()),
new WFSElement("FAILED", WFSEmptyType.getInstance()),
new WFSElement("FAILED", WFSEmptyType.getInstance()),
};
private static Choice child = new ChoiceGT(elems);
public static WFSComplexType getInstance() {
return instance;
}
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return child;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return elems;
}
/**
* @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, SAXNotSupportedException {
if ((element == null) || (value == null)
|| (element.getType() == null)) {
throw new SAXException("Invalid parameters : null found");
}
if ((value.length < 1) || (value.length > 1)) {
throw new SAXException("Invalid children: too few or too many");
}
if (!getName().equals(element.getType().getName())) {
throw new SAXException("Invalid type name for element provided");
}
if ((value[0].getElement() == null)
|| (value[0].getElement().getName() == null)) {
throw new SAXException(
"Invalid child element: no name was provided");
}
return new Integer(TransactionResult.parseStatus(
value[0].getElement().getName()));
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "StatusType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return Integer.class;
}
/**
* @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;
}
/**
* @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 OperationNotSupportedException {
throw new OperationNotSupportedException();
}
}
private static class WFSEmptyType extends WFSComplexType {
private static WFSComplexType instance = new WFSEmptyType();
public static WFSComplexType getInstance() {
return instance;
}
// <xsd:complexType name="EmptyType"/>
/**
* @see org.geotools.xml.schema.ComplexType#getAttributes()
*/
public Attribute[] getAttributes() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChild()
*/
public ElementGrouping getChild() {
return null;
}
/**
* @see org.geotools.xml.schema.ComplexType#getChildElements()
*/
public Element[] getChildElements() {
return null;
}
/**
* @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){
return null;
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "EmptyType";
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return null;
}
/**
* @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 element != null;
}
/**
* @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{
output.element(element.getNamespace(), element.getName(), null);
}
}
private static class AllSomeType implements SimpleType {
private static SimpleType instance = new AllSomeType();
private static Facet[] facets = new Facet[] {
new FacetGT(Facet.ENUMERATION, "ALL"),
new FacetGT(Facet.ENUMERATION, "SOME")
};
public static SimpleType getInstance() {
return instance;
}
// <xsd:simpleType name="AllSomeType">
// <xsd:restriction base="xsd:string">
// <xsd:enumeration value="ALL"/>
// <xsd:enumeration value="SOME"/>
// </xsd:restriction>
// </xsd:simpleType>
/**
* @see org.geotools.xml.schema.SimpleType#getFinal()
*/
public int getFinal() {
return 0;
}
/**
* @see org.geotools.xml.schema.SimpleType#getId()
*/
public String getId() {
return null;
}
/**
* @see org.geotools.xml.schema.SimpleType#toAttribute(org.geotools.xml.schema.Attribute, java.lang.Object, java.util.Map)
*/
public AttributeValue toAttribute(Attribute attribute, Object value,
Map hints) {
return null;
}
/**
* @see org.geotools.xml.schema.SimpleType#canCreateAttributes(org.geotools.xml.schema.Attribute, java.lang.Object, java.util.Map)
*/
public boolean canCreateAttributes(Attribute attribute, Object value,
Map hints) {
return false;
}
/**
* @see org.geotools.xml.schema.SimpleType#getChildType()
*/
public int getChildType() {
return RESTRICTION;
}
/**
* @see org.geotools.xml.schema.SimpleType#getParents()
*/
public SimpleType[] getParents() {
return new SimpleType[] { XSISimpleTypes.String.getInstance(), };
}
/**
* @see org.geotools.xml.schema.SimpleType#getFacets()
*/
public Facet[] getFacets() {
return facets;
}
/**
* @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, SAXNotSupportedException {
if ((value == null) || (value.length != 1) || (element == null)
|| (element.getType() == null)) {
throw new SAXNotSupportedException("invalid inputs");
}
if (value[0].getValue() instanceof String) {
String t = (String) value[0].getValue();
if ("ALL".equals(t) || "SOME".equals(t)) {
return t;
}
throw new SAXException("Invalid value: not ALL or NONE");
}
throw new SAXNotSupportedException("Invalid child value type.");
}
/**
* @see org.geotools.xml.schema.Type#getName()
*/
public String getName() {
return "AllSomeType";
}
/**
* @see org.geotools.xml.schema.Type#getNamespace()
*/
public URI getNamespace() {
return WFSSchema.NAMESPACE;
}
/**
* @see org.geotools.xml.schema.Type#getInstanceType()
*/
public Class getInstanceType() {
return String.class;
}
/**
* @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 (element != null) && (element.getType() != null)
&& getName().equals(element.getType().getName())
&& value instanceof String
&& ("ALL".equals(value) || "SOME".equals(value));
}
/**
* @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{
if (canEncode(element, value, hints)) {
output.startElement(element.getNamespace(), element.getName(),
null);
}
output.characters((String) value);
output.endElement(element.getNamespace(), element.getName());
}
/**
* @see org.geotools.xml.schema.Type#findChildElement(java.lang.String)
*/
public Element findChildElement(String name) {
return null;
}
}
}