OpenLayers OpenLayers

Changeset 6358

Show
Ignore:
Timestamp:
02/24/08 15:25:27 (11 months ago)
Author:
tschaub
Message:

Adding more complete style parsing to the WMC format. The format now has support for named, linked (SLD), and inline (SLD_BODY) styles. r=ahocevar (closes #1313)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openlayers/lib/OpenLayers/Format/WMC/v1.js

    r6131 r6358  
    123123            childNode = children[i]; 
    124124            if(childNode.nodeType == 1) { 
    125                 prefix = (childNode.prefix == this.rootPrefix) ? 
    126                             this.defaultPrefix : 
    127                             this.getNamespacePrefix(childNode.namespaceURI); 
     125                prefix = this.getNamespacePrefix(childNode.namespaceURI); 
    128126                local = childNode.nodeName.split(":").pop(); 
    129127                processor = this["read_" + prefix + "_" + local]; 
     
    313311        this.runChildNodes(style, node); 
    314312        if(node.getAttribute("current") == "1") { 
    315             layerInfo.params.style = style.name; 
     313            // three style types to consider 
     314            // 1) linked SLD 
     315            // 2) inline SLD 
     316            // 3) named style 
     317            // running child nodes always gets name, optionally gets href or body 
     318            if(style.href) { 
     319                layerInfo.params.sld = style.href; 
     320            } else if(style.body) { 
     321                layerInfo.params.sld_body = style.body; 
     322            } else { 
     323                layerInfo.params.styles = style.name; 
     324            } 
    316325        } 
    317326        layerInfo.styles.push(style); 
     327    }, 
     328     
     329    /** 
     330     * Method: read_wmc_SLD 
     331     */ 
     332    read_wmc_SLD: function(style, node) { 
     333        this.runChildNodes(style, node); 
     334        // style either comes back with an href or a body property 
     335    }, 
     336     
     337    /** 
     338     * Method: read_sld_StyledLayerDescriptor 
     339     */ 
     340    read_sld_StyledLayerDescriptor: function(sld, node) { 
     341        var xml = OpenLayers.Format.XML.prototype.write.apply(this, [node]); 
     342        sld.body = xml; 
    318343    }, 
    319344 
     
    732757            "Style", null, {current: "1"} 
    733758        ); 
    734         var name = layer.params["STYLES"] ? 
    735             layer.params["STYLES"] : this.defaultStyleName; 
    736          
    737         style.appendChild(this.createElementDefaultNS("Name", name)); 
    738         style.appendChild(this.createElementDefaultNS( 
    739             "Title", this.defaultStyleTitle 
    740         )); 
     759         
     760        // Style can come from one of three places (prioritized as below): 
     761        // 1) an SLD parameter 
     762        // 2) and SLD_BODY parameter 
     763        // 3) the STYLES parameter 
     764         
     765        if(layer.params["SLD"]) { 
     766            // create link from SLD parameter 
     767            var sld = this.createElementDefaultNS("SLD"); 
     768            var link = this.write_wmc_OnlineResource(layer.params["SLD"]); 
     769            sld.appendChild(link); 
     770            style.appendChild(sld); 
     771        } else if(layer.params["SLD_BODY"]) { 
     772            // include sld fragment from SLD_BODY parameter 
     773            var sld = this.createElementDefaultNS("SLD"); 
     774            var body = layer.params["SLD_BODY"]; 
     775            // read in body as xml doc - assume proper namespace declarations 
     776            var doc = OpenLayers.Format.XML.prototype.read.apply(this, [body]); 
     777            // append to StyledLayerDescriptor node 
     778            var imported = doc.documentElement; 
     779            if(sld.ownerDocument && sld.ownerDocument.importNode) { 
     780                imported = sld.ownerDocument.importNode(imported, true); 
     781            } 
     782            sld.appendChild(imported); 
     783            style.appendChild(sld);             
     784        } else { 
     785            // use name(s) from STYLES parameter 
     786            var name = layer.params["STYLES"] ? 
     787                layer.params["STYLES"] : this.defaultStyleName; 
     788             
     789            style.appendChild(this.createElementDefaultNS("Name", name)); 
     790            style.appendChild(this.createElementDefaultNS( 
     791                "Title", this.defaultStyleTitle 
     792            )); 
     793        } 
    741794        node.appendChild(style); 
    742795        return node; 
  • trunk/openlayers/tests/list-tests.html

    r6313 r6358  
    3333    <li>Format/test_WMC.html</li> 
    3434    <li>Format/WMC/test_v1_1_0.html</li> 
     35    <li>Format/WMC/test_v1.html</li> 
    3536    <li>Format/test_XML.html</li> 
    3637    <li>test_Icon.html</li>