Package org.geoserver.wfs

Source Code of org.geoserver.wfs.WFSWorkspaceQualifier

package org.geoserver.wfs;

import java.util.Iterator;
import java.util.List;

import javax.xml.namespace.QName;

import net.opengis.ows10.GetCapabilitiesType;
import net.opengis.wfs.DeleteElementType;
import net.opengis.wfs.DescribeFeatureTypeType;
import net.opengis.wfs.GetFeatureType;
import net.opengis.wfs.GetFeatureWithLockType;
import net.opengis.wfs.InsertElementType;
import net.opengis.wfs.LockFeatureType;
import net.opengis.wfs.LockType;
import net.opengis.wfs.QueryType;
import net.opengis.wfs.TransactionType;
import net.opengis.wfs.UpdateElementType;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.NamespaceInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.ows.Request;
import org.geoserver.ows.WorkspaceQualifyingCallback;
import org.geoserver.ows.util.OwsUtils;
import org.geoserver.platform.Operation;
import org.geoserver.platform.Service;
import org.opengis.feature.Feature;
import org.opengis.feature.type.Name;

public class WFSWorkspaceQualifier extends WorkspaceQualifyingCallback {

    public WFSWorkspaceQualifier(Catalog catalog) {
        super(catalog);
    }

    @Override
    protected void qualifyRequest(WorkspaceInfo workspace, LayerInfo layer, Service service, Request request) {
    }
   
    @Override
    protected void qualifyRequest(WorkspaceInfo workspace, LayerInfo layer, Operation operation, Request request) {
        NamespaceInfo ns = catalog.getNamespaceByPrefix(workspace.getName());
       
        GetCapabilitiesType caps =
            (GetCapabilitiesType) OwsUtils.parameter(operation.getParameters(), GetCapabilitiesType.class);
        if (caps != null) {
            caps.setNamespace(workspace.getName());
            return;
        }
       
        DescribeFeatureTypeType dft =
            (DescribeFeatureTypeType) OwsUtils.parameter(operation.getParameters(), DescribeFeatureTypeType.class);
        if (dft != null) {
            qualifyTypeNames(dft.getTypeName(), workspace, ns);
            return;
        }
       
        GetFeatureType gf =
            (GetFeatureType) OwsUtils.parameter(operation.getParameters(), GetFeatureType.class);
        if (gf != null) {
            for (QueryType q : (List<QueryType>)gf.getQuery()) {
                qualifyTypeNames(q.getTypeName(), workspace, ns);
            }
            return;
        }
       
        GetFeatureWithLockType gfwl =
            (GetFeatureWithLockType) OwsUtils.parameter(operation.getParameters(), GetFeatureWithLockType.class);
        if (gfwl != null) {
            for (QueryType q : (List<QueryType>)gfwl.getQuery()) {
                qualifyTypeNames(q.getTypeName(), workspace, ns);
            }
            return;
        }
       
        LockFeatureType lf =
            (LockFeatureType) OwsUtils.parameter(operation.getParameters(), LockFeatureType.class);
        if (lf != null) {
            for (LockType lock : (List<LockType>)lf.getLock()) {
                lock.setTypeName(qualifyTypeName(lock.getTypeName(), workspace, ns));
            }
            return;
        }
       
        TransactionType t =
            (TransactionType) OwsUtils.parameter(operation.getParameters(), TransactionType.class);
        if (t != null) {
            for (Iterator i = t.getUpdate().iterator(); i.hasNext(); ) {
                UpdateElementType up = (UpdateElementType) i.next();
                up.setTypeName(qualifyTypeName(up.getTypeName(), workspace, ns));
            }
            for (Iterator i = t.getDelete().iterator(); i.hasNext(); ) {
                DeleteElementType del = (DeleteElementType) i.next();
                del.setTypeName(qualifyTypeName(del.getTypeName(), workspace, ns));
            }
            for (Iterator i = t.getInsert().iterator(); i.hasNext();) {
                InsertElementType in = (InsertElementType) i.next();
               
                //in the insert case the objects are gt feature types which are not mutable
                // so we just check them and throw an exception if a name does not match
                for (Iterator j = in.getFeature().iterator(); j.hasNext(); ) {
                    Feature f = (Feature) j.next();
                    Name n = f.getType().getName();
                    if (n.getNamespaceURI() != null && !ns.getURI().equals(n.getNamespaceURI())) {
                        throw new WFSException("No such feature type " + n);
                    }
                }
            }
        }
    }
   
    void qualifyTypeNames(List names, WorkspaceInfo ws, NamespaceInfo ns) {
        for (int i = 0; i < names.size(); i++) {
            QName name = (QName) names.get(i);
            names.set(i, qualifyTypeName(name, ws, ns));
        }
    }
   
    QName qualifyTypeName(QName name, WorkspaceInfo ws, NamespaceInfo ns) {
        return new QName(ns.getURI(), name.getLocalPart(), ws.getName());
    }

}
TOP

Related Classes of org.geoserver.wfs.WFSWorkspaceQualifier

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.