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

📄 describelayertransformer.java

📁 电子地图服务器,搭建自己的地图服务
💻 JAVA
字号:
/* 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.wms.responses.helpers;

import org.geoserver.ows.util.RequestUtils;
import org.geoserver.platform.GeoServerExtensions;
import org.geotools.xml.transform.TransformerBase;
import org.geotools.xml.transform.Translator;
import org.springframework.context.ApplicationContext;
import org.vfny.geoserver.global.GeoServer;
import org.vfny.geoserver.global.MapLayerInfo;
import org.vfny.geoserver.wms.requests.DescribeLayerRequest;
import org.xml.sax.ContentHandler;
import org.xml.sax.helpers.AttributesImpl;
import java.util.Iterator;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;


/**
 * <code>org.geotools.xml.transform.TransformerBase</code> specialized in
 * producing a WMS DescribeLayer response.
 *
 * @author Gabriel Roldan, Axios Engineering
 * @version $Id: DescribeLayerTransformer.java 7522 2007-09-12 22:00:10Z saul.farber $
 */
public class DescribeLayerTransformer extends TransformerBase {
    /** The base url upon URLs which point to 'me' should be based. */
    private String baseUrl;
    
    private GeoServer geoserver;

    /**
     * Creates a new DescribeLayerTransformer object.
     *
     * @param baseUrl the url string wich holds the validation
     * schemas and DTD's on this server instance.
     */
    public DescribeLayerTransformer(String baseUrl, GeoServer gs) {
        super();

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

        this.baseUrl = baseUrl;
        this.geoserver = gs;
    }

    /**
     * Creates and returns a Translator specialized in producing
     * a DescribeLayer response document.
     *
     * @param handler the content handler to send sax events to.
     *
     * @return a new <code>DescribeLayerTranslator</code>
     */
    public Translator createTranslator(ContentHandler handler) {
        return new DescribeLayerTranslator(handler);
    }

    /**
     * Gets the <code>Transformer</code> created by the overriden method in
     * the superclass and adds it the DOCTYPE token pointing to the
     * DescribeLayer DTD on this server instance.
     *
     * <p>
     * The DTD is set at the fixed location given by the <code>schemaBaseUrl</code>
     * passed to the constructor <code>+ "wms/1.1.1/WMS_DescribeLayerResponse.dtd</code>.
     * </p>
     *
     * @return a Transformer propoerly configured to produce DescribeLayer responses.
     *
     * @throws TransformerException if it is thrown by <code>super.createTransformer()</code>
     */
    public Transformer createTransformer() throws TransformerException {
        Transformer transformer = super.createTransformer();
        String dtdUrl = RequestUtils.proxifiedBaseURL(baseUrl,geoserver.getProxyBaseUrl()) + "schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd";
        transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, dtdUrl);

        return transformer;
    }

    /**
     * Sends SAX events to produce a DescribeLayer response document.
     *
     * @author Gabriel Roldan, Axios Engineering
     * @version $Id: DescribeLayerTransformer.java 7522 2007-09-12 22:00:10Z saul.farber $
     */
    private static class DescribeLayerTranslator extends TranslatorSupport {
        /**
         * Creates a new DescribeLayerTranslator object.
         *
         * @param handler DOCUMENT ME!
         */
        public DescribeLayerTranslator(ContentHandler handler) {
            super(handler, null, null);
        }

        /**
         * Encode the object.
         *
         * @param o The Object to encode.
         *
         * @throws IllegalArgumentException if the Object is not encodeable.
         */
        public void encode(Object o) throws IllegalArgumentException {
            if (!(o instanceof DescribeLayerRequest)) {
                throw new IllegalArgumentException();
            }

            DescribeLayerRequest req = (DescribeLayerRequest) o;

            AttributesImpl version = new AttributesImpl();
            version.addAttribute("", "version", "version", "", "1.0.0");

            start("WMS_DescribeLayerResponse", version);

            handleLayers(req);

            end("WMS_DescribeLayerResponse");
        }

        /**
         * As currently GeoServer does not have support for nested layers, this
         * method declares a <code>LayerDescription</code> element for each
         * featuretype requested.
         *
         * @param req
         */
        private void handleLayers(DescribeLayerRequest req) {
            MapLayerInfo layer;

            String url = RequestUtils.proxifiedBaseURL(req.getBaseUrl(),req.getServiceRef().getGeoServer().getProxyBaseUrl()) + "wfs/WfsDispatcher?";

            AttributesImpl layerAtts = new AttributesImpl();
            layerAtts.addAttribute("", "name", "name", "", "");
            layerAtts.addAttribute("", "wfs", "wfs", "", url);

            AttributesImpl queryAtts = new AttributesImpl();
            queryAtts.addAttribute("", "typeName", "typeName", "", "");

            for (Iterator it = req.getLayers().iterator(); it.hasNext();) {
                layer = (MapLayerInfo) it.next();
                layerAtts.setAttribute(0, "", "name", "name", "", layer.getName());
                start("LayerDescription", layerAtts);

                queryAtts.setAttribute(0, "", "typeName", "typeName", "", layer.getName());
                element("Query", null, queryAtts);

                end("LayerDescription");
            }
        }
    }
}

⌨️ 快捷键说明

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