/* (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.List;
import net.opengis.wfs.AllSomeType;
import net.opengis.wfs.LockFeatureType;
import net.opengis.wfs.WfsFactory;
import net.opengis.wfs20.Wfs20Factory;
import net.opengis.wfs20.Wfs20Package;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.FeatureMap;
/**
* WFS LockFeature request.
*
* @author Justin Deoliveira, OpenGeo
*/
public abstract class LockFeatureRequest extends RequestObject {
public static LockFeatureRequest adapt(Object request) {
if (request instanceof LockFeatureType) {
return new WFS11((EObject) request);
}
else if (request instanceof net.opengis.wfs20.LockFeatureType) {
return new WFS20((EObject) request);
}
return null;
}
protected LockFeatureRequest(EObject adaptee) {
super(adaptee);
}
public BigInteger getExpiry() {
return eGet(adaptee, "expiry", BigInteger.class);
}
public void setExpiry(BigInteger expiry) {
eSet(adaptee, "expiry", expiry);
}
public abstract List<Lock> getLocks();
public abstract void addLock(Lock lock);
public abstract boolean isLockActionSome();
public abstract void setLockActionSome();
public abstract boolean isLockActionAll();
public abstract void setLockActionAll();
public abstract Lock createLock();
public abstract LockFeatureResponse createResponse();
public static class WFS11 extends LockFeatureRequest {
public WFS11(EObject adaptee) {
super(adaptee);
}
@Override
public List<Lock> getLocks() {
List<Lock> locks = new ArrayList();
for (Object lock : eGet(adaptee, "lock", List.class)) {
locks.add(new Lock.WFS11((EObject) lock));
}
return locks;
}
@Override
public void addLock(Lock lock) {
eGet(adaptee, "lock", List.class).add(lock.getAdaptee());
}
@Override
public boolean isLockActionAll() {
return ((LockFeatureType)adaptee).getLockAction() == AllSomeType.ALL_LITERAL;
}
@Override
public void setLockActionAll() {
((LockFeatureType)adaptee).setLockAction(AllSomeType.ALL_LITERAL);
}
@Override
public boolean isLockActionSome() {
return ((LockFeatureType)adaptee).getLockAction() == AllSomeType.SOME_LITERAL;
}
@Override
public void setLockActionSome() {
((LockFeatureType)adaptee).setLockAction(AllSomeType.SOME_LITERAL);
}
@Override
public Lock createLock() {
return new Lock.WFS11(((WfsFactory)getFactory()).createLockType());
}
@Override
public LockFeatureResponse createResponse() {
return new LockFeatureResponse.WFS11(
((WfsFactory)getFactory()).createLockFeatureResponseType());
}
}
public static class WFS20 extends LockFeatureRequest {
public WFS20(EObject adaptee) {
super(adaptee);
}
@Override
public List<Lock> getLocks() {
List<Lock> locks = new ArrayList();
for (Object lock : eGet(adaptee, "abstractQueryExpression", List.class)) {
locks.add(new Lock.WFS20((EObject) lock));
}
return locks;
}
@Override
public void addLock(Lock lock) {
((FeatureMap)eGet(adaptee, "abstractQueryExpressionGroup", List.class))
.add(Wfs20Package.Literals.DOCUMENT_ROOT__QUERY, lock.getAdaptee());
}
@Override
public boolean isLockActionAll() {
return ((net.opengis.wfs20.LockFeatureType)adaptee).getLockAction()
== net.opengis.wfs20.AllSomeType.ALL;
}
@Override
public void setLockActionAll() {
((net.opengis.wfs20.LockFeatureType)adaptee).setLockAction(net.opengis.wfs20.AllSomeType.ALL);
}
@Override
public boolean isLockActionSome() {
return ((net.opengis.wfs20.LockFeatureType)adaptee).getLockAction()
== net.opengis.wfs20.AllSomeType.SOME;
}
@Override
public void setLockActionSome() {
((net.opengis.wfs20.LockFeatureType)adaptee).setLockAction(net.opengis.wfs20.AllSomeType.SOME);
}
@Override
public Lock createLock() {
return new Lock.WFS20(((Wfs20Factory)getFactory()).createQueryType());
}
@Override
public LockFeatureResponse createResponse() {
return new LockFeatureResponse.WFS20(
((Wfs20Factory)getFactory()).createLockFeatureResponseType());
}
}
}