Package org.geoserver.gss.xml

Source Code of org.geoserver.gss.xml.GSSXmlReader

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.gss.xml;

import java.io.Reader;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.xml.namespace.QName;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.NamespaceInfo;
import org.geoserver.config.GeoServer;
import org.geoserver.gss.GetDiffResponseType;
import org.geoserver.gss.PostDiffType;
import org.geoserver.ows.XmlRequestReader;
import org.geoserver.wfs.WFSException;
import org.geotools.util.Version;
import org.geotools.xml.Configuration;
import org.geotools.xml.Parser;
import org.xml.sax.InputSource;

/**
* Xml reader for GSS 1.1.0 xml requests.
*
* @author Justin Deoliveira, The Open Planning Project
* @author Andrea Aime - OpenGeo
*
* TODO: there is too much duplication with the WFS readers, factor it out.
*/
public class GSSXmlReader extends XmlRequestReader {
    /**
     * Xml Configuration
     */
    Configuration configuration;
   
    /**
     * Access to the global configuration
     */
    GeoServer geoServer;

    public GSSXmlReader(String element, GeoServer gs, Configuration configuration) {
        super(new QName(GSS.NAMESPACE, element), new Version("1.0.0"), "gss");
            this.configuration = configuration;
            this.geoServer = gs;
    }
   
    public Object read(Object request, Reader reader, Map kvp) throws Exception {
        Parser parser = new Parser(configuration);
        parser.setValidating(true);
       
        //"inject" namespace mappings
        Catalog catalog = geoServer.getCatalog();
        List<NamespaceInfo> namespaces = catalog.getNamespaces();
        for ( NamespaceInfo ns : namespaces ) {
            if ( ns.equals( catalog.getDefaultNamespace() ) ) 
                continue;
           
            parser.getNamespaces().declarePrefix(
                ns.getPrefix(), ns.getURI());
        }
      
        //set the input source with the correct encoding
        InputSource source = new InputSource(reader);
        source.setEncoding(geoServer.getGlobal().getCharset());

        Object parsed = parser.parse(source);

        // unfortunately insert elements in transactions cannot be validated...
        if(!(parsed instanceof PostDiffType) && !(parsed instanceof GetDiffResponseType)) {
            if (!parser.getValidationErrors().isEmpty()) {
                WFSException exception = new WFSException("Invalid request", "InvalidParameterValue");
   
                for (Iterator e = parser.getValidationErrors().iterator(); e.hasNext();) {
                    Exception error = (Exception) e.next();
                    exception.getExceptionText().add(error.getLocalizedMessage());
                }
   
                throw exception;
            }
        }

        return parsed;
    }
}
TOP

Related Classes of org.geoserver.gss.xml.GSSXmlReader

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.