Package org.geoserver.wfs.request

Source Code of org.geoserver.wfs.request.TransactionRequest$WFS20

/* (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.request;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.opengis.wfs.AllSomeType;
import net.opengis.wfs.DeleteElementType;
import net.opengis.wfs.InsertElementType;
import net.opengis.wfs.NativeType;
import net.opengis.wfs.TransactionResponseType;
import net.opengis.wfs.TransactionType;
import net.opengis.wfs.UpdateElementType;
import net.opengis.wfs.WfsFactory;
import net.opengis.wfs20.DeleteType;
import net.opengis.wfs20.InsertType;
import net.opengis.wfs20.ReplaceType;
import net.opengis.wfs20.UpdateType;
import net.opengis.wfs20.Wfs20Factory;

import org.eclipse.emf.ecore.EObject;
import org.geotools.data.Transaction;

/**
* WFS Transaction request.
*
* @author Justin Deoliveira, OpenGeo
*
*/
public abstract class TransactionRequest extends RequestObject {

    public static TransactionRequest adapt(Object request) {
        if (request instanceof TransactionType) {
            return new WFS11((EObject) request);
        }
        else if (request instanceof net.opengis.wfs20.TransactionType) {
            return new WFS20((EObject) request);
        }
        return null;
    }
   
    private Transaction transaction;
   
    protected TransactionRequest(EObject adaptee) {
        super(adaptee);
    }

    public Object getReleaseAction() {
        return eGet(adaptee, "releaseAction", Object.class);
    }
   
    public String getLockId() {
        return eGet(adaptee, "lockId", String.class);
    }
   
    public void setLockId(String lockId) {
        eSet(adaptee, "lockId", lockId);
    }
   
    public Transaction getTransaction() {
        return transaction;
    }
   
    public void setTransaction(Transaction transaction) {
        this.transaction = transaction;
    }

    public abstract boolean isReleaseActionAll();
   
    public abstract boolean isReleaseActionSome();
   
    public abstract void setReleaseActionAll();
   
    public abstract List<TransactionElement> getElements();
   
    public abstract TransactionResponse createResponse();
   
    public static class WFS11 extends TransactionRequest {
        public WFS11(EObject adaptee) {
            super(adaptee);
        }
       
        @Override
        public boolean isReleaseActionAll() {
            return ((TransactionType)adaptee).getReleaseAction() == AllSomeType.ALL_LITERAL;
        }
       
        @Override
        public boolean isReleaseActionSome() {
            return ((TransactionType)adaptee).getReleaseAction() == AllSomeType.SOME_LITERAL;
        }
       
        @Override
        public void setReleaseActionAll() {
            ((TransactionType)adaptee).setReleaseAction(AllSomeType.ALL_LITERAL);
        }
       
        @Override
        public List<TransactionElement> getElements() {
            List<TransactionElement> list = new ArrayList();
            for (Iterator it = ((TransactionType)adaptee).getGroup().valueListIterator(); it.hasNext(); ) {
                EObject el = (EObject) it.next();
                if (el instanceof DeleteElementType) {
                    list.add(new Delete.WFS11(el));
                }
                else if (el instanceof InsertElementType) {
                    list.add(new Insert.WFS11(el));
                }
                else if (el instanceof UpdateElementType) {
                    list.add(new Update.WFS11(el));
                }
                else if (el instanceof NativeType) {
                    list.add(new Native.WFS11(el));
                }
                else {
                    throw new IllegalArgumentException("Unrecognized transaction element: " + el);
                }
            }
           
            return list;
        }
       
        @Override
        public TransactionResponse createResponse() {
            WfsFactory factory = (WfsFactory) getFactory();
            TransactionResponseType tr = factory.createTransactionResponseType();
            tr.setTransactionSummary(factory.createTransactionSummaryType());
            tr.getTransactionSummary().setTotalInserted(BigInteger.valueOf(0));
            tr.getTransactionSummary().setTotalUpdated(BigInteger.valueOf(0));
            tr.getTransactionSummary().setTotalDeleted(BigInteger.valueOf(0));
            tr.setTransactionResults(factory.createTransactionResultsType());
            tr.setInsertResults(factory.createInsertResultsType());
           
            return new TransactionResponse.WFS11(tr);
        }
       
        public static TransactionType unadapt(TransactionRequest request) {
            if (request instanceof WFS11) {
                return (TransactionType) request.getAdaptee();
            }

            WfsFactory factory = (WfsFactory) WfsFactory.eINSTANCE;
            TransactionType tx = factory.createTransactionType();
           
            tx.setVersion(request.getVersion());
            tx.setHandle(request.getHandle());
            tx.setLockId(request.getLockId());
            tx.setReleaseAction(
                request.isReleaseActionAll() ? AllSomeType.ALL_LITERAL : AllSomeType.SOME_LITERAL);
            tx.setBaseUrl(request.getBaseUrl());
            tx.setExtendedProperties(request.getExtendedProperties());
           
            for (TransactionElement te : request.getElements()) {
                if (te instanceof Delete) {
                    tx.getDelete().add(Delete.WFS11.unadapt((Delete)te));
                }
                if (te instanceof Update) {
                    tx.getUpdate().add(Update.WFS11.unadapt((Update)te));
                }
                if (te instanceof Insert) {
                    tx.getInsert().add(Insert.WFS11.unadapt((Insert)te));
                }
                if (te instanceof Native) {
                    tx.getNative().add(Native.WFS11.unadapt((Native)te));
                }
            }
           
            return tx;
        }
    }
   
    public static class WFS20 extends TransactionRequest {
        public WFS20(EObject adaptee) {
            super(adaptee);
        }
       
        @Override
        public boolean isReleaseActionAll() {
            return ((net.opengis.wfs20.TransactionType)adaptee).getReleaseAction() ==
                net.opengis.wfs20.AllSomeType.ALL;
        }
       
        @Override
        public boolean isReleaseActionSome() {
            return ((net.opengis.wfs20.TransactionType)adaptee).getReleaseAction() ==
                net.opengis.wfs20.AllSomeType.SOME;
        }
       
        @Override
        public void setReleaseActionAll() {
            ((net.opengis.wfs20.TransactionType)adaptee).setReleaseAction(net.opengis.wfs20.AllSomeType.ALL);
        }
       
        @Override
        public List<TransactionElement> getElements() {
            List<TransactionElement> list = new ArrayList();
            Iterator it = ((net.opengis.wfs20.TransactionType)adaptee)
                .getAbstractTransactionAction().iterator();
            while(it.hasNext()) {
                EObject el = (EObject) it.next();
                if (el instanceof DeleteType) {
                    list.add(new Delete.WFS20(el));
                }
                else if (el instanceof InsertType) {
                    list.add(new Insert.WFS20(el));
                }
                else if (el instanceof UpdateType) {
                    list.add(new Update.WFS20(el));
                }
                else if (el instanceof ReplaceType) {
                    list.add(new Replace.WFS20(el));
                }
                else if (el instanceof net.opengis.wfs20.NativeType) {
                    list.add(new Native.WFS20(el));
                }
                else {
                    throw new IllegalArgumentException("Unrecognized transaction element: " + el);
                }
            }
            return list;
        }
       
        @Override
        public TransactionResponse createResponse() {
            Wfs20Factory factory = (Wfs20Factory) getFactory();
            net.opengis.wfs20.TransactionResponseType tr = factory.createTransactionResponseType();
            tr.setTransactionSummary(factory.createTransactionSummaryType());
            tr.getTransactionSummary().setTotalDeleted(BigInteger.valueOf(0));
            tr.getTransactionSummary().setTotalInserted(BigInteger.valueOf(0));
            tr.getTransactionSummary().setTotalUpdated(BigInteger.valueOf(0));
            tr.getTransactionSummary().setTotalReplaced(BigInteger.valueOf(0));
           
            return new TransactionResponse.WFS20(tr);
        }
    }
}
TOP

Related Classes of org.geoserver.wfs.request.TransactionRequest$WFS20

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.