Project

General

Profile

Download (5.73 KB) Statistics
| Branch: | Tag: | Revision:
1
/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for
2
 * full list of contributors). Published under the 2-clause BSD license.
3
 * See license.txt in the OpenLayers distribution or repository for the
4
 * full text of the license. */
5

    
6
/**
7
 * @requires OpenLayers/Format/SLD/v1_0_0.js
8
 */
9

    
10
/**
11
 * Class: OpenLayers.Format.SLD/v1_0_0_GeoServer
12
 * Read and write SLD version 1.0.0 with GeoServer-specific enhanced options.
13
 * See http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-sld/src/main/resources/org/geotools/sld/bindings/StyledLayerDescriptor.xsd
14
 * for more information.
15
 *
16
 * Inherits from:
17
 *  - <OpenLayers.Format.SLD.v1_0_0>
18
 */
19
OpenLayers.Format.SLD.v1_0_0_GeoServer = OpenLayers.Class(
20
    OpenLayers.Format.SLD.v1_0_0, {
21

    
22
    /**
23
     * Property: version
24
     * {String} The specific parser version.
25
     */
26
    version: "1.0.0",
27

    
28
    /**
29
     * Property: profile
30
     * {String} The specific profile
31
     */
32
    profile: "GeoServer",
33

    
34
   /**
35
     * Constructor: OpenLayers.Format.SLD.v1_0_0_GeoServer
36
     * Create a new parser for GeoServer-enhanced SLD version 1.0.0.
37
     *
38
     * Parameters:
39
     * options - {Object} An optional object whose properties will be set on
40
     *     this instance.
41
     */
42

    
43
    /**
44
     * Property: readers
45
     * Contains public functions, grouped by namespace prefix, that will
46
     *     be applied when a namespaced node is found matching the function
47
     *     name.  The function will be applied in the scope of this parser
48
     *     with two arguments: the node being read and a context object passed
49
     *     from the parent.
50
     */
51
    readers: OpenLayers.Util.applyDefaults({
52
        "sld": OpenLayers.Util.applyDefaults({
53
            "Priority": function(node, obj) {
54
                var value = this.readers.ogc._expression.call(this, node);
55
                if (value) {
56
                    obj.priority = value;
57
                }
58
            },
59
            "VendorOption": function(node, obj) {
60
                if (!obj.vendorOptions) {
61
                    obj.vendorOptions = {};
62
                }
63
                obj.vendorOptions[node.getAttribute("name")] = this.getChildValue(node);
64
            },
65
            "TextSymbolizer": function(node, rule) {
66
                OpenLayers.Format.SLD.v1_0_0.prototype.readers.sld.TextSymbolizer.apply(this, arguments);
67
                var symbolizer = this.multipleSymbolizers ? rule.symbolizers[rule.symbolizers.length-1] : rule.symbolizer["Text"];
68
                if (symbolizer.graphic === undefined) {
69
                    symbolizer.graphic = false;
70
                }
71
            }
72
        }, OpenLayers.Format.SLD.v1_0_0.prototype.readers["sld"])
73
    }, OpenLayers.Format.SLD.v1_0_0.prototype.readers),
74

    
75
    /**
76
     * Property: writers
77
     * As a compliment to the readers property, this structure contains public
78
     *     writing functions grouped by namespace alias and named like the
79
     *     node names they produce.
80
     */
81
    writers: OpenLayers.Util.applyDefaults({
82
        "sld": OpenLayers.Util.applyDefaults({
83
            "Priority": function(priority) {
84
                return this.writers.sld._OGCExpression.call(
85
                    this, "sld:Priority", priority
86
                );
87
            },
88
            "VendorOption": function(option) {
89
                return this.createElementNSPlus("sld:VendorOption", {
90
                    attributes: {name: option.name},
91
                    value: option.value
92
                });
93
            },
94
            "TextSymbolizer": function(symbolizer) {
95
                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
96
                var node = writers["sld"]["TextSymbolizer"].apply(this, arguments);
97
                if (symbolizer.graphic !== false && (symbolizer.externalGraphic || symbolizer.graphicName)) {
98
                    this.writeNode("Graphic", symbolizer, node);
99
                }
100
                if ("priority" in symbolizer) {
101
                    this.writeNode("Priority", symbolizer.priority, node);
102
                }
103
                return this.addVendorOptions(node, symbolizer);
104
            },
105
            "PointSymbolizer": function(symbolizer) {
106
                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
107
                var node = writers["sld"]["PointSymbolizer"].apply(this, arguments);
108
                return this.addVendorOptions(node, symbolizer);
109
            },
110
            "LineSymbolizer": function(symbolizer) {
111
                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
112
                var node = writers["sld"]["LineSymbolizer"].apply(this, arguments);
113
                return this.addVendorOptions(node, symbolizer);
114
            },
115
            "PolygonSymbolizer": function(symbolizer) {
116
                var writers = OpenLayers.Format.SLD.v1_0_0.prototype.writers;
117
                var node = writers["sld"]["PolygonSymbolizer"].apply(this, arguments);
118
                return this.addVendorOptions(node, symbolizer);
119
            }
120
        }, OpenLayers.Format.SLD.v1_0_0.prototype.writers["sld"])
121
    }, OpenLayers.Format.SLD.v1_0_0.prototype.writers),
122

    
123
    /**
124
     * Method: addVendorOptions
125
     * Add in the VendorOption tags and return the node again.
126
     *
127
     * Parameters:
128
     * node - {DOMElement} A DOM node.
129
     * symbolizer - {Object}
130
     *
131
     * Returns:
132
     * {DOMElement} A DOM node.
133
     */
134
    addVendorOptions: function(node, symbolizer) {
135
        var options = symbolizer.vendorOptions;
136
        if (options) {
137
            for (var key in symbolizer.vendorOptions) {
138
                this.writeNode("VendorOption", {
139
                    name: key, 
140
                    value: symbolizer.vendorOptions[key]
141
                }, node);
142
            }
143
        }
144
        return node;
145
    },
146

    
147
    CLASS_NAME: "OpenLayers.Format.SLD.v1_0_0_GeoServer"
148

    
149
});
(3-3/3)