⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 putstyles.java

📁 电子地图服务器,搭建自己的地图服务
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* 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.vfny.geoserver.sld.servlets;

import org.geoserver.ows.util.XmlCharsetDetector;
import org.geotools.styling.SLDParser;
import org.geotools.styling.StyleFactory;
import org.geotools.styling.StyleFactoryFinder;
import org.geotools.styling.StyledLayerDescriptor;
import org.vfny.geoserver.ExceptionHandler;
import org.vfny.geoserver.Response;
import org.vfny.geoserver.ServiceException;
import org.vfny.geoserver.config.ConfigRequests;
import org.vfny.geoserver.config.DataConfig;
import org.vfny.geoserver.config.FeatureTypeConfig;
import org.vfny.geoserver.config.StyleConfig;
import org.vfny.geoserver.global.ConfigurationException;
import org.vfny.geoserver.global.GeoserverDataDirectory;
import org.vfny.geoserver.global.WMS;
import org.vfny.geoserver.servlets.AbstractService;
import org.vfny.geoserver.sld.SldException;
import org.vfny.geoserver.sld.requests.PutStylesKvpReader;
import org.vfny.geoserver.sld.requests.PutStylesRequest;
import org.vfny.geoserver.sld.responses.PutStylesResponse;
import org.vfny.geoserver.util.SLDValidator;
import org.vfny.geoserver.util.requests.readers.KvpRequestReader;
import org.vfny.geoserver.util.requests.readers.XmlRequestReader;
import org.vfny.geoserver.wms.WmsException;
import org.vfny.geoserver.wms.requests.GetMapXmlReader;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.CharArrayReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.math.BigDecimal;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.ParserConfigurationException;


public class PutStyles extends AbstractService {
    private static Logger LOGGER = org.geotools.util.logging.Logging.getLogger("org.vfny.geoserver.sld.servlets");
    public final String success_mime_type = "application/vnd.ogc.success+xml";
    private static final StyleFactory styleFactory = StyleFactoryFinder.createStyleFactory();

    public PutStyles() {
        super("WMS", "PutStyles", null);
    }

    protected boolean isServiceEnabled(HttpServletRequest req) {
        return true;
    }

    protected Response getResponseHandler() {
        return new PutStylesResponse();
    }

    protected KvpRequestReader getKvpReader(Map params) {
        return new PutStylesKvpReader(params, this);
    }

    protected XmlRequestReader getXmlRequestReader() {
        /**
        * @todo Implement this org.vfny.geoserver.servlets.AbstractService
        *       abstract method
        */
        throw new java.lang.UnsupportedOperationException(
            "Method getXmlRequestReader() not yet implemented.");
    }

    protected ExceptionHandler getExceptionHandler() {
        // TODO Auto-generated method stub
        /**
        * @todo Implement this org.vfny.geoserver.servlets.AbstractService
        *       abstract method
        */
        throw new java.lang.UnsupportedOperationException(
            "Method getXmlRequestReader() not yet implemented.");
    }

    /**
     * doGet:
     *
     *
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        LOGGER.info("PutStyles.doGet()");

        Map requestParams = new HashMap();
        String paramName;
        String paramValue;

        // gather the parameters
        for (Enumeration pnames = request.getParameterNames(); pnames.hasMoreElements();) {
            paramName = (String) pnames.nextElement();
            paramValue = request.getParameter(paramName);
            requestParams.put(paramName.toUpperCase(), paramValue);
        }

        PutStylesKvpReader requestReader = new PutStylesKvpReader(requestParams, this);

        PutStylesRequest serviceRequest; // the request object we will deal with

        try {
            serviceRequest = (PutStylesRequest) requestReader.getRequest(request);
        } catch (ServiceException e) {
            e.printStackTrace();

            return;
        }

        ServletContext context = request.getSession().getServletContext();

        try {
            processSLD(serviceRequest, request, response, context);
        } catch (SldException e) {
            throw new ServletException(e);
        } catch (IOException e) {
            throw new ServletException(e);
        }
    }

    /**
     * doPost:
     *
     *
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response, Reader requestXml)
        throws ServletException, IOException {
        LOGGER.fine("PutStyles POST");

        if (requestXml == null) {
            requestXml = new BufferedReader(XmlCharsetDetector.getCharsetAwareReader(
                        request.getInputStream()));
        }

        File temp = File.createTempFile("putStylesPost", "xml");
        temp.deleteOnExit();

        FileOutputStream fos = new FileOutputStream(temp);
        BufferedOutputStream out = new BufferedOutputStream(fos);
        StringBuffer sb = new StringBuffer();

        if (requestXml == null) {
            throw new NullPointerException();
        }

        int c;

        while (-1 != (c = requestXml.read())) {
            char chr = (char) c;
            out.write(c);
            sb.append(chr);
        }

        requestXml.close();
        out.flush();
        out.close();
        requestXml = new BufferedReader(new FileReader(temp)); // pretend like nothing has happened

        PutStylesRequest serviceRequest = new PutStylesRequest(this);
        serviceRequest.setSldBody(sb.toString()); // save the SLD body in the request object

        ServletContext context = request.getSession().getServletContext();

        try {
            processSLD(serviceRequest, request, response, context);
        } catch (SldException e) {
            throw new ServletException(e);
        } catch (IOException e) {
            throw new ServletException(e);
        }
    }

    private Node generateDOM(Reader reader) {
        javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory
            .newInstance();

        dbf.setExpandEntityReferences(false);
        dbf.setValidating(false);
        dbf.setNamespaceAware(true);

        javax.xml.parsers.DocumentBuilder db;
        Node rootNode = null;

        try {
            db = dbf.newDocumentBuilder();

            InputSource input = new InputSource(reader);
            org.w3c.dom.Document dom = db.parse(input);

            rootNode = dom.getDocumentElement();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return rootNode;
    }

    /**
    * Give a node and the name of a child of that node, return it. This doesnt
    * do anything complex.
    *
    * @param parentNode
    * @param wantedChildName
    *
    * @return
    */
    public Node getNode(Node parentNode, String wantedChildName) {
        NodeList children = parentNode.getChildNodes();

        for (int i = 0; i < children.getLength(); i++) {
            Node child = children.item(i);

            if ((child == null) || (child.getNodeType() != Node.ELEMENT_NODE)) {
                continue;
            }

            String childName = child.getLocalName();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -