Package org.geoserver.wfs.kvp

Source Code of org.geoserver.wfs.kvp.NamespaceKvpParser

/* 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.wfs.kvp;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;

import javax.xml.XMLConstants;

import org.geoserver.ows.FlatKvpParser;
import org.geoserver.ows.KvpParser;
import org.xml.sax.helpers.NamespaceSupport;

/**
* Parses a list of namespace declarations of the form {@code
* <xmlns(foo=http://name.space1)[,xmlns(bar=http://name.space2)]+> } into a
* {@link NamespaceSupport}.
*
* @author groldan
*
*/
public class NamespaceKvpParser extends KvpParser {

    public NamespaceKvpParser(String key) {
        super(key, NamespaceSupport.class);
    }

    /**
     * @param value
     *            a list of namespace declarations of the form {@code
     *            <xmlns(foo=http://name.space1)[,xmlns(bar=http://name.space2)]+> }
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
    public NamespaceSupport parse(final String value) throws Exception {
        List<String> decls = (List<String>) new FlatKvpParser("", String.class).parse(value);
        NamespaceSupport ctx = new NamespaceSupport();

        String[] parts;
        String prefix;
        String uri;
        for (String decl : decls) {
            decl = decl.trim();
            if (!decl.startsWith("xmlns(") || !decl.endsWith(")")) {
                throw new IllegalArgumentException("Illegal namespace declaration, "
                        + "should be of the form xmlns(<prefix>=<ns uri>): " + decl);
            }
            decl = decl.substring("xmlns(".length());
            decl = decl.substring(0, decl.length() - 1);
            parts = decl.split("=");
            if (parts.length == 1) {
                prefix = XMLConstants.DEFAULT_NS_PREFIX;
                uri = parts[0];
            } else if (parts.length == 2) {
                prefix = parts[0];
                uri = parts[1];
            } else {
                throw new IllegalArgumentException("Illegal namespace declaration, "
                        + "should be of the form prefix=<namespace uri>: " + decl);
            }

            try {
                new URI(uri);
            } catch (URISyntaxException e) {
                throw new IllegalArgumentException("Illegal namespace declaration: " + decl);
            }
            ctx.declarePrefix(prefix, uri);
        }

        return ctx;
    }
}
TOP

Related Classes of org.geoserver.wfs.kvp.NamespaceKvpParser

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.