/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wfs.xml.v1_1_0; import java.util.Iterator; import javax.xml.namespace.QName; import net.opengis.wfs.AllSomeType; import net.opengis.wfs.DeleteElementType; import net.opengis.wfs.InsertElementType; import net.opengis.wfs.NativeType; import net.opengis.wfs.TransactionType; import net.opengis.wfs.UpdateElementType; import net.opengis.wfs.WfsFactory; import org.geotools.xml.AbstractComplexEMFBinding; import org.geotools.xml.ElementInstance; import org.geotools.xml.Node; /** * Binding object for the type http://www.opengis.net/wfs:TransactionType. * * <p> * <pre> * <code> * <xsd:complexType name="TransactionType"> * <xsd:annotation> * <xsd:documentation> * The TransactionType 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:complexContent> * <xsd:extension base="ows:GetCapabilitiesType"> * <xsd:sequence> * <xsd:element minOccurs="0" ref="wfs:LockId"> * <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 maxOccurs="unbounded" minOccurs="0"> * <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="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:extension> * </xsd:complexContent> * </xsd:complexType> * * </code> * </pre> * @generated */ public class TransactionTypeBinding extends AbstractComplexEMFBinding { WfsFactory wfsfactory; public TransactionTypeBinding(WfsFactory wfsfactory) { this.wfsfactory = wfsfactory; } /** * @generated */ public QName getTarget() { return WFS.TRANSACTIONTYPE; } /** * Sets execution mode to be before */ public int getExecutionMode() { return BEFORE; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated modifiable */ public Class getType() { return TransactionType.class; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated modifiable */ public Object parse(ElementInstance instance, Node node, Object value) throws Exception { TransactionType transaction = wfsfactory.createTransactionType(); //<xsd:element minOccurs="0" ref="wfs:LockId"> if (node.hasChild("LockId")) { transaction.setLockId((String) node.getChildValue("LockId")); } //<xsd:choice maxOccurs="unbounded" minOccurs="0"> // <xsd:element ref="wfs:Insert"/> // <xsd:element ref="wfs:Update"/> // <xsd:element ref="wfs:Delete"/> // <xsd:element ref="wfs:Native"/> //</xsd:choice> for (Iterator itr = node.getChildren().iterator(); itr.hasNext();) { Node child = (Node) itr.next(); Object cv = child.getValue(); if (cv instanceof InsertElementType) { transaction.getInsert().add(cv); } else if (cv instanceof UpdateElementType) { transaction.getUpdate().add(cv); } else if (cv instanceof DeleteElementType) { transaction.getDelete().add(cv); } else if (cv instanceof NativeType) { transaction.getNative().add(cv); } } //<xsd:attribute name="releaseAction" type="wfs:AllSomeType" use="optional"> if (node.hasAttribute(AllSomeType.class)) { transaction.setReleaseAction((AllSomeType) node.getAttributeValue(AllSomeType.class)); } return transaction; } }