summaryrefslogtreecommitdiff
path: root/misc/openlayers/lib/OpenLayers/Format/WMC/v1.js
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/lib/OpenLayers/Format/WMC/v1.js')
-rw-r--r--misc/openlayers/lib/OpenLayers/Format/WMC/v1.js1267
1 files changed, 0 insertions, 1267 deletions
diff --git a/misc/openlayers/lib/OpenLayers/Format/WMC/v1.js b/misc/openlayers/lib/OpenLayers/Format/WMC/v1.js
deleted file mode 100644
index 6c9a5c3..0000000
--- a/misc/openlayers/lib/OpenLayers/Format/WMC/v1.js
+++ /dev/null
@@ -1,1267 +0,0 @@
-/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for
- * full list of contributors). Published under the 2-clause BSD license.
- * See license.txt in the OpenLayers distribution or repository for the
- * full text of the license. */
-
-/**
- * @requires OpenLayers/Format/WMC.js
- * @requires OpenLayers/Format/XML.js
- */
-
-/**
- * Class: OpenLayers.Format.WMC.v1
- * Superclass for WMC version 1 parsers.
- *
- * Inherits from:
- * - <OpenLayers.Format.XML>
- */
-OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
-
- /**
- * Property: namespaces
- * {Object} Mapping of namespace aliases to namespace URIs.
- */
- namespaces: {
- ol: "http://openlayers.org/context",
- wmc: "http://www.opengis.net/context",
- sld: "http://www.opengis.net/sld",
- xlink: "http://www.w3.org/1999/xlink",
- xsi: "http://www.w3.org/2001/XMLSchema-instance"
- },
-
- /**
- * Property: schemaLocation
- * {String} Schema location for a particular minor version.
- */
- schemaLocation: "",
-
- /**
- * Method: getNamespacePrefix
- * Get the namespace prefix for a given uri from the <namespaces> object.
- *
- * Returns:
- * {String} A namespace prefix or null if none found.
- */
- getNamespacePrefix: function(uri) {
- var prefix = null;
- if(uri == null) {
- prefix = this.namespaces[this.defaultPrefix];
- } else {
- for(prefix in this.namespaces) {
- if(this.namespaces[prefix] == uri) {
- break;
- }
- }
- }
- return prefix;
- },
-
- /**
- * Property: defaultPrefix
- */
- defaultPrefix: "wmc",
-
- /**
- * Property: rootPrefix
- * {String} Prefix on the root node that maps to the context namespace URI.
- */
- rootPrefix: null,
-
- /**
- * Property: defaultStyleName
- * {String} Style name used if layer has no style param. Default is "".
- */
- defaultStyleName: "",
-
- /**
- * Property: defaultStyleTitle
- * {String} Default style title. Default is "Default".
- */
- defaultStyleTitle: "Default",
-
- /**
- * Constructor: OpenLayers.Format.WMC.v1
- * Instances of this class are not created directly. Use the
- * <OpenLayers.Format.WMC> constructor instead.
- *
- * Parameters:
- * options - {Object} An optional object whose properties will be set on
- * this instance.
- */
- initialize: function(options) {
- OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
- },
-
- /**
- * Method: read
- * Read capabilities data from a string, and return a list of layers.
- *
- * Parameters:
- * data - {String} or {DOMElement} data to read/parse.
- *
- * Returns:
- * {Array} List of named layers.
- */
- read: function(data) {
- if(typeof data == "string") {
- data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
- }
- var root = data.documentElement;
- this.rootPrefix = root.prefix;
- var context = {
- version: root.getAttribute("version")
- };
- this.runChildNodes(context, root);
- return context;
- },
-
- /**
- * Method: runChildNodes
- */
- runChildNodes: function(obj, node) {
- var children = node.childNodes;
- var childNode, processor, prefix, local;
- for(var i=0, len=children.length; i<len; ++i) {
- childNode = children[i];
- if(childNode.nodeType == 1) {
- prefix = this.getNamespacePrefix(childNode.namespaceURI);
- local = childNode.nodeName.split(":").pop();
- processor = this["read_" + prefix + "_" + local];
- if(processor) {
- processor.apply(this, [obj, childNode]);
- }
- }
- }
- },
-
- /**
- * Method: read_wmc_General
- */
- read_wmc_General: function(context, node) {
- this.runChildNodes(context, node);
- },
-
- /**
- * Method: read_wmc_BoundingBox
- */
- read_wmc_BoundingBox: function(context, node) {
- context.projection = node.getAttribute("SRS");
- context.bounds = new OpenLayers.Bounds(
- node.getAttribute("minx"), node.getAttribute("miny"),
- node.getAttribute("maxx"), node.getAttribute("maxy")
- );
- },
-
- /**
- * Method: read_wmc_LayerList
- */
- read_wmc_LayerList: function(context, node) {
- // layersContext is an array containing info for each layer
- context.layersContext = [];
- this.runChildNodes(context, node);
- },
-
- /**
- * Method: read_wmc_Layer
- */
- read_wmc_Layer: function(context, node) {
- var layerContext = {
- visibility: (node.getAttribute("hidden") != "1"),
- queryable: (node.getAttribute("queryable") == "1"),
- formats: [],
- styles: [],
- metadata: {}
- };
-
- this.runChildNodes(layerContext, node);
- // set properties common to multiple objects on layer options/params
- context.layersContext.push(layerContext);
- },
-
- /**
- * Method: read_wmc_Extension
- */
- read_wmc_Extension: function(obj, node) {
- this.runChildNodes(obj, node);
- },
-
- /**
- * Method: read_ol_units
- */
- read_ol_units: function(layerContext, node) {
- layerContext.units = this.getChildValue(node);
- },
-
- /**
- * Method: read_ol_maxExtent
- */
- read_ol_maxExtent: function(obj, node) {
- var bounds = new OpenLayers.Bounds(
- node.getAttribute("minx"), node.getAttribute("miny"),
- node.getAttribute("maxx"), node.getAttribute("maxy")
- );
- obj.maxExtent = bounds;
- },
-
- /**
- * Method: read_ol_transparent
- */
- read_ol_transparent: function(layerContext, node) {
- layerContext.transparent = this.getChildValue(node);
- },
-
- /**
- * Method: read_ol_numZoomLevels
- */
- read_ol_numZoomLevels: function(layerContext, node) {
- layerContext.numZoomLevels = parseInt(this.getChildValue(node));
- },
-
- /**
- * Method: read_ol_opacity
- */
- read_ol_opacity: function(layerContext, node) {
- layerContext.opacity = parseFloat(this.getChildValue(node));
- },
-
- /**
- * Method: read_ol_singleTile
- */
- read_ol_singleTile: function(layerContext, node) {
- layerContext.singleTile = (this.getChildValue(node) == "true");
- },
-
- /**
- * Method: read_ol_tileSize
- */
- read_ol_tileSize: function(layerContext, node) {
- var obj = {"width": node.getAttribute("width"), "height": node.getAttribute("height")};
- layerContext.tileSize = obj;
- },
-
- /**
- * Method: read_ol_isBaseLayer
- */
- read_ol_isBaseLayer: function(layerContext, node) {
- layerContext.isBaseLayer = (this.getChildValue(node) == "true");
- },
-
- /**
- * Method: read_ol_displayInLayerSwitcher
- */
- read_ol_displayInLayerSwitcher: function(layerContext, node) {
- layerContext.displayInLayerSwitcher = (this.getChildValue(node) == "true");
- },
-
- /**
- * Method: read_wmc_Server
- */
- read_wmc_Server: function(layerContext, node) {
- layerContext.version = node.getAttribute("version");
- layerContext.url = this.getOnlineResource_href(node);
- layerContext.metadata.servertitle = node.getAttribute("title");
- },
-
- /**
- * Method: read_wmc_FormatList
- */
- read_wmc_FormatList: function(layerContext, node) {
- this.runChildNodes(layerContext, node);
- },
-
- /**
- * Method: read_wmc_Format
- */
- read_wmc_Format: function(layerContext, node) {
- var format = {
- value: this.getChildValue(node)
- };
- if(node.getAttribute("current") == "1") {
- format.current = true;
- }
- layerContext.formats.push(format);
- },
-
- /**
- * Method: read_wmc_StyleList
- */
- read_wmc_StyleList: function(layerContext, node) {
- this.runChildNodes(layerContext, node);
- },
-
- /**
- * Method: read_wmc_Style
- */
- read_wmc_Style: function(layerContext, node) {
- var style = {};
- this.runChildNodes(style, node);
- if(node.getAttribute("current") == "1") {
- style.current = true;
- }
- layerContext.styles.push(style);
- },
-
- /**
- * Method: read_wmc_SLD
- */
- read_wmc_SLD: function(style, node) {
- this.runChildNodes(style, node);
- // style either comes back with an href or a body property
- },
-
- /**
- * Method: read_sld_StyledLayerDescriptor
- */
- read_sld_StyledLayerDescriptor: function(sld, node) {
- var xml = OpenLayers.Format.XML.prototype.write.apply(this, [node]);
- sld.body = xml;
- },
-
- /**
- * Method: read_sld_FeatureTypeStyle
- */
- read_sld_FeatureTypeStyle: function(sld, node) {
- var xml = OpenLayers.Format.XML.prototype.write.apply(this, [node]);
- sld.body = xml;
- },
-
- /**
- * Method: read_wmc_OnlineResource
- */
- read_wmc_OnlineResource: function(obj, node) {
- obj.href = this.getAttributeNS(
- node, this.namespaces.xlink, "href"
- );
- },
-
- /**
- * Method: read_wmc_Name
- */
- read_wmc_Name: function(obj, node) {
- var name = this.getChildValue(node);
- if(name) {
- obj.name = name;
- }
- },
-
- /**
- * Method: read_wmc_Title
- */
- read_wmc_Title: function(obj, node) {
- var title = this.getChildValue(node);
- if(title) {
- obj.title = title;
- }
- },
-
- /**
- * Method: read_wmc_MetadataURL
- */
- read_wmc_MetadataURL: function(layerContext, node) {
- layerContext.metadataURL = this.getOnlineResource_href(node);
- },
-
- /**
- * Method: read_wmc_KeywordList
- */
- read_wmc_KeywordList: function(context, node) {
- context.keywords = [];
- this.runChildNodes(context.keywords, node);
- },
-
- /**
- * Method: read_wmc_Keyword
- */
- read_wmc_Keyword: function(keywords, node) {
- keywords.push(this.getChildValue(node));
- },
-
- /**
- * Method: read_wmc_Abstract
- */
- read_wmc_Abstract: function(obj, node) {
- var abst = this.getChildValue(node);
- if(abst) {
- obj["abstract"] = abst;
- }
- },
-
- /**
- * Method: read_wmc_LogoURL
- */
- read_wmc_LogoURL: function(context, node) {
- context.logo = {
- width: node.getAttribute("width"),
- height: node.getAttribute("height"),
- format: node.getAttribute("format"),
- href: this.getOnlineResource_href(node)
- };
- },
-
- /**
- * Method: read_wmc_DescriptionURL
- */
- read_wmc_DescriptionURL: function(context, node) {
- context.descriptionURL = this.getOnlineResource_href(node);
- },
-
- /**
- * Method: read_wmc_ContactInformation
- */
- read_wmc_ContactInformation: function(obj, node) {
- var contact = {};
- this.runChildNodes(contact, node);
- obj.contactInformation = contact;
- },
-
- /**
- * Method: read_wmc_ContactPersonPrimary
- */
- read_wmc_ContactPersonPrimary: function(contact, node) {
- var personPrimary = {};
- this.runChildNodes(personPrimary, node);
- contact.personPrimary = personPrimary;
- },
-
- /**
- * Method: read_wmc_ContactPerson
- */
- read_wmc_ContactPerson: function(primaryPerson, node) {
- var person = this.getChildValue(node);
- if (person) {
- primaryPerson.person = person;
- }
- },
-
- /**
- * Method: read_wmc_ContactOrganization
- */
- read_wmc_ContactOrganization: function(primaryPerson, node) {
- var organization = this.getChildValue(node);
- if (organization) {
- primaryPerson.organization = organization;
- }
- },
-
- /**
- * Method: read_wmc_ContactPosition
- */
- read_wmc_ContactPosition: function(contact, node) {
- var position = this.getChildValue(node);
- if (position) {
- contact.position = position;
- }
- },
-
- /**
- * Method: read_wmc_ContactAddress
- */
- read_wmc_ContactAddress: function(contact, node) {
- var contactAddress = {};
- this.runChildNodes(contactAddress, node);
- contact.contactAddress = contactAddress;
- },
-
- /**
- * Method: read_wmc_AddressType
- */
- read_wmc_AddressType: function(contactAddress, node) {
- var type = this.getChildValue(node);
- if (type) {
- contactAddress.type = type;
- }
- },
-
- /**
- * Method: read_wmc_Address
- */
- read_wmc_Address: function(contactAddress, node) {
- var address = this.getChildValue(node);
- if (address) {
- contactAddress.address = address;
- }
- },
-
- /**
- * Method: read_wmc_City
- */
- read_wmc_City: function(contactAddress, node) {
- var city = this.getChildValue(node);
- if (city) {
- contactAddress.city = city;
- }
- },
-
- /**
- * Method: read_wmc_StateOrProvince
- */
- read_wmc_StateOrProvince: function(contactAddress, node) {
- var stateOrProvince = this.getChildValue(node);
- if (stateOrProvince) {
- contactAddress.stateOrProvince = stateOrProvince;
- }
- },
-
- /**
- * Method: read_wmc_PostCode
- */
- read_wmc_PostCode: function(contactAddress, node) {
- var postcode = this.getChildValue(node);
- if (postcode) {
- contactAddress.postcode = postcode;
- }
- },
-
- /**
- * Method: read_wmc_Country
- */
- read_wmc_Country: function(contactAddress, node) {
- var country = this.getChildValue(node);
- if (country) {
- contactAddress.country = country;
- }
- },
-
- /**
- * Method: read_wmc_ContactVoiceTelephone
- */
- read_wmc_ContactVoiceTelephone: function(contact, node) {
- var phone = this.getChildValue(node);
- if (phone) {
- contact.phone = phone;
- }
- },
-
- /**
- * Method: read_wmc_ContactFacsimileTelephone
- */
- read_wmc_ContactFacsimileTelephone: function(contact, node) {
- var fax = this.getChildValue(node);
- if (fax) {
- contact.fax = fax;
- }
- },
-
- /**
- * Method: read_wmc_ContactElectronicMailAddress
- */
- read_wmc_ContactElectronicMailAddress: function(contact, node) {
- var email = this.getChildValue(node);
- if (email) {
- contact.email = email;
- }
- },
-
- /**
- * Method: read_wmc_DataURL
- */
- read_wmc_DataURL: function(layerContext, node) {
- layerContext.dataURL = this.getOnlineResource_href(node);
- },
-
- /**
- * Method: read_wmc_LegendURL
- */
- read_wmc_LegendURL: function(style, node) {
- var legend = {
- width: node.getAttribute('width'),
- height: node.getAttribute('height'),
- format: node.getAttribute('format'),
- href: this.getOnlineResource_href(node)
- };
- style.legend = legend;
- },
-
- /**
- * Method: read_wmc_DimensionList
- */
- read_wmc_DimensionList: function(layerContext, node) {
- layerContext.dimensions = {};
- this.runChildNodes(layerContext.dimensions, node);
- },
- /**
- * Method: read_wmc_Dimension
- */
- read_wmc_Dimension: function(dimensions, node) {
- var name = node.getAttribute("name").toLowerCase();
-
- var dim = {
- name: name,
- units: node.getAttribute("units") || "",
- unitSymbol: node.getAttribute("unitSymbol") || "",
- userValue: node.getAttribute("userValue") || "",
- nearestValue: node.getAttribute("nearestValue") === "1",
- multipleValues: node.getAttribute("multipleValues") === "1",
- current: node.getAttribute("current") === "1",
- "default": node.getAttribute("default") || ""
- };
- var values = this.getChildValue(node);
- dim.values = values.split(",");
-
- dimensions[dim.name] = dim;
- },
-
- /**
- * Method: write
- *
- * Parameters:
- * context - {Object} An object representing the map context.
- * options - {Object} Optional object.
- *
- * Returns:
- * {String} A WMC document string.
- */
- write: function(context, options) {
- var root = this.createElementDefaultNS("ViewContext");
- this.setAttributes(root, {
- version: this.VERSION,
- id: (options && typeof options.id == "string") ?
- options.id :
- OpenLayers.Util.createUniqueID("OpenLayers_Context_")
- });
-
- // add schemaLocation attribute
- this.setAttributeNS(
- root, this.namespaces.xsi,
- "xsi:schemaLocation", this.schemaLocation
- );
-
- // required General element
- root.appendChild(this.write_wmc_General(context));
-
- // required LayerList element
- root.appendChild(this.write_wmc_LayerList(context));
-
- return OpenLayers.Format.XML.prototype.write.apply(this, [root]);
- },
-
- /**
- * Method: createElementDefaultNS
- * Shorthand for createElementNS with namespace from <defaultPrefix>.
- * Can optionally be used to set attributes and a text child value.
- *
- * Parameters:
- * name - {String} The qualified node name.
- * childValue - {String} Optional value for text child node.
- * attributes - {Object} Optional object representing attributes.
- *
- * Returns:
- * {Element} An element node.
- */
- createElementDefaultNS: function(name, childValue, attributes) {
- var node = this.createElementNS(
- this.namespaces[this.defaultPrefix],
- name
- );
- if(childValue) {
- node.appendChild(this.createTextNode(childValue));
- }
- if(attributes) {
- this.setAttributes(node, attributes);
- }
- return node;
- },
-
- /**
- * Method: setAttributes
- * Set multiple attributes given key value pairs from an object.
- *
- * Parameters:
- * node - {Element} An element node.
- * obj - {Object} An object whose properties represent attribute names and
- * values represent attribute values.
- */
- setAttributes: function(node, obj) {
- var value;
- for(var name in obj) {
- value = obj[name].toString();
- if(value.match(/[A-Z]/)) {
- // safari lowercases attributes with setAttribute
- this.setAttributeNS(node, null, name, value);
- } else {
- node.setAttribute(name, value);
- }
- }
- },
-
- /**
- * Method: write_wmc_General
- * Create a General node given an context object.
- *
- * Parameters:
- * context - {Object} Context object.
- *
- * Returns:
- * {Element} A WMC General element node.
- */
- write_wmc_General: function(context) {
- var node = this.createElementDefaultNS("General");
-
- // optional Window element
- if(context.size) {
- node.appendChild(this.createElementDefaultNS(
- "Window", null,
- {
- width: context.size.w,
- height: context.size.h
- }
- ));
- }
-
- // required BoundingBox element
- var bounds = context.bounds;
- node.appendChild(this.createElementDefaultNS(
- "BoundingBox", null,
- {
- minx: bounds.left.toPrecision(18),
- miny: bounds.bottom.toPrecision(18),
- maxx: bounds.right.toPrecision(18),
- maxy: bounds.top.toPrecision(18),
- SRS: context.projection
- }
- ));
-
- // required Title element
- node.appendChild(this.createElementDefaultNS(
- "Title", context.title
- ));
-
- // optional KeywordList element
- if (context.keywords) {
- node.appendChild(this.write_wmc_KeywordList(context.keywords));
- }
-
- // optional Abstract element
- if (context["abstract"]) {
- node.appendChild(this.createElementDefaultNS(
- "Abstract", context["abstract"]
- ));
- }
-
- // Optional LogoURL element
- if (context.logo) {
- node.appendChild(this.write_wmc_URLType("LogoURL", context.logo.href, context.logo));
- }
-
- // Optional DescriptionURL element
- if (context.descriptionURL) {
- node.appendChild(this.write_wmc_URLType("DescriptionURL", context.descriptionURL));
- }
-
- // Optional ContactInformation element
- if (context.contactInformation) {
- node.appendChild(this.write_wmc_ContactInformation(context.contactInformation));
- }
-
- // OpenLayers specific map properties
- node.appendChild(this.write_ol_MapExtension(context));
-
- return node;
- },
-
- /**
- * Method: write_wmc_KeywordList
- */
- write_wmc_KeywordList: function(keywords) {
- var node = this.createElementDefaultNS("KeywordList");
-
- for (var i=0, len=keywords.length; i<len; i++) {
- node.appendChild(this.createElementDefaultNS(
- "Keyword", keywords[i]
- ));
- }
- return node;
- },
- /**
- * Method: write_wmc_ContactInformation
- */
- write_wmc_ContactInformation: function(contact) {
- var node = this.createElementDefaultNS("ContactInformation");
-
- if (contact.personPrimary) {
- node.appendChild(this.write_wmc_ContactPersonPrimary(contact.personPrimary));
- }
- if (contact.position) {
- node.appendChild(this.createElementDefaultNS(
- "ContactPosition", contact.position
- ));
- }
- if (contact.contactAddress) {
- node.appendChild(this.write_wmc_ContactAddress(contact.contactAddress));
- }
- if (contact.phone) {
- node.appendChild(this.createElementDefaultNS(
- "ContactVoiceTelephone", contact.phone
- ));
- }
- if (contact.fax) {
- node.appendChild(this.createElementDefaultNS(
- "ContactFacsimileTelephone", contact.fax
- ));
- }
- if (contact.email) {
- node.appendChild(this.createElementDefaultNS(
- "ContactElectronicMailAddress", contact.email
- ));
- }
- return node;
- },
-
- /**
- * Method: write_wmc_ContactPersonPrimary
- */
- write_wmc_ContactPersonPrimary: function(personPrimary) {
- var node = this.createElementDefaultNS("ContactPersonPrimary");
- if (personPrimary.person) {
- node.appendChild(this.createElementDefaultNS(
- "ContactPerson", personPrimary.person
- ));
- }
- if (personPrimary.organization) {
- node.appendChild(this.createElementDefaultNS(
- "ContactOrganization", personPrimary.organization
- ));
- }
- return node;
- },
-
- /**
- * Method: write_wmc_ContactAddress
- */
- write_wmc_ContactAddress: function(contactAddress) {
- var node = this.createElementDefaultNS("ContactAddress");
- if (contactAddress.type) {
- node.appendChild(this.createElementDefaultNS(
- "AddressType", contactAddress.type
- ));
- }
- if (contactAddress.address) {
- node.appendChild(this.createElementDefaultNS(
- "Address", contactAddress.address
- ));
- }
- if (contactAddress.city) {
- node.appendChild(this.createElementDefaultNS(
- "City", contactAddress.city
- ));
- }
- if (contactAddress.stateOrProvince) {
- node.appendChild(this.createElementDefaultNS(
- "StateOrProvince", contactAddress.stateOrProvince
- ));
- }
- if (contactAddress.postcode) {
- node.appendChild(this.createElementDefaultNS(
- "PostCode", contactAddress.postcode
- ));
- }
- if (contactAddress.country) {
- node.appendChild(this.createElementDefaultNS(
- "Country", contactAddress.country
- ));
- }
- return node;
- },
-
- /**
- * Method: write_ol_MapExtension
- */
- write_ol_MapExtension: function(context) {
- var node = this.createElementDefaultNS("Extension");
-
- var bounds = context.maxExtent;
- if(bounds) {
- var maxExtent = this.createElementNS(
- this.namespaces.ol, "ol:maxExtent"
- );
- this.setAttributes(maxExtent, {
- minx: bounds.left.toPrecision(18),
- miny: bounds.bottom.toPrecision(18),
- maxx: bounds.right.toPrecision(18),
- maxy: bounds.top.toPrecision(18)
- });
- node.appendChild(maxExtent);
- }
-
- return node;
- },
-
- /**
- * Method: write_wmc_LayerList
- * Create a LayerList node given an context object.
- *
- * Parameters:
- * context - {Object} Context object.
- *
- * Returns:
- * {Element} A WMC LayerList element node.
- */
- write_wmc_LayerList: function(context) {
- var list = this.createElementDefaultNS("LayerList");
-
- for(var i=0, len=context.layersContext.length; i<len; ++i) {
- list.appendChild(this.write_wmc_Layer(context.layersContext[i]));
- }
-
- return list;
- },
-
- /**
- * Method: write_wmc_Layer
- * Create a Layer node given a layer context object.
- *
- * Parameters:
- * context - {Object} A layer context object.}
- *
- * Returns:
- * {Element} A WMC Layer element node.
- */
- write_wmc_Layer: function(context) {
- var node = this.createElementDefaultNS(
- "Layer", null, {
- queryable: context.queryable ? "1" : "0",
- hidden: context.visibility ? "0" : "1"
- }
- );
-
- // required Server element
- node.appendChild(this.write_wmc_Server(context));
-
- // required Name element
- node.appendChild(this.createElementDefaultNS(
- "Name", context.name
- ));
-
- // required Title element
- node.appendChild(this.createElementDefaultNS(
- "Title", context.title
- ));
-
- // optional Abstract element
- if (context["abstract"]) {
- node.appendChild(this.createElementDefaultNS(
- "Abstract", context["abstract"]
- ));
- }
-
- // optional DataURL element
- if (context.dataURL) {
- node.appendChild(this.write_wmc_URLType("DataURL", context.dataURL));
- }
-
- // optional MetadataURL element
- if (context.metadataURL) {
- node.appendChild(this.write_wmc_URLType("MetadataURL", context.metadataURL));
- }
-
- return node;
- },
-
- /**
- * Method: write_wmc_LayerExtension
- * Add OpenLayers specific layer parameters to an Extension element.
- *
- * Parameters:
- * context - {Object} A layer context object.
- *
- * Returns:
- * {Element} A WMC Extension element (for a layer).
- */
- write_wmc_LayerExtension: function(context) {
- var node = this.createElementDefaultNS("Extension");
-
- var bounds = context.maxExtent;
- var maxExtent = this.createElementNS(
- this.namespaces.ol, "ol:maxExtent"
- );
- this.setAttributes(maxExtent, {
- minx: bounds.left.toPrecision(18),
- miny: bounds.bottom.toPrecision(18),
- maxx: bounds.right.toPrecision(18),
- maxy: bounds.top.toPrecision(18)
- });
- node.appendChild(maxExtent);
-
- if (context.tileSize && !context.singleTile) {
- var size = this.createElementNS(
- this.namespaces.ol, "ol:tileSize"
- );
- this.setAttributes(size, context.tileSize);
- node.appendChild(size);
- }
-
- var properties = [
- "transparent", "numZoomLevels", "units", "isBaseLayer",
- "opacity", "displayInLayerSwitcher", "singleTile"
- ];
- var child;
- for(var i=0, len=properties.length; i<len; ++i) {
- child = this.createOLPropertyNode(context, properties[i]);
- if(child) {
- node.appendChild(child);
- }
- }
-
- return node;
- },
-
- /**
- * Method: createOLPropertyNode
- * Create a node representing an OpenLayers property. If the property is
- * null or undefined, null will be returned.
- *
- * Parameters:
- * obj - {Object} An object.
- * prop - {String} A property.
- *
- * Returns:
- * {Element} A property node.
- */
- createOLPropertyNode: function(obj, prop) {
- var node = null;
- if(obj[prop] != null) {
- node = this.createElementNS(this.namespaces.ol, "ol:" + prop);
- node.appendChild(this.createTextNode(obj[prop].toString()));
- }
- return node;
- },
-
- /**
- * Method: write_wmc_Server
- * Create a Server node given a layer context object.
- *
- * Parameters:
- * context - {Object} Layer context object.
- *
- * Returns:
- * {Element} A WMC Server element node.
- */
- write_wmc_Server: function(context) {
- var server = context.server;
- var node = this.createElementDefaultNS("Server");
- var attributes = {
- service: "OGC:WMS",
- version: server.version
- };
- if (server.title) {
- attributes.title = server.title;
- }
- this.setAttributes(node, attributes);
-
- // required OnlineResource element
- node.appendChild(this.write_wmc_OnlineResource(server.url));
-
- return node;
- },
-
- /**
- * Method: write_wmc_URLType
- * Create a LogoURL/DescriptionURL/MetadataURL/DataURL/LegendURL node given a object and elementName.
- *
- * Parameters:
- * elName - {String} Name of element (LogoURL/DescriptionURL/MetadataURL/LegendURL)
- * url - {String} URL string value
- * attr - {Object} Optional attributes (width, height, format)
- *
- * Returns:
- * {Element} A WMC element node.
- */
- write_wmc_URLType: function(elName, url, attr) {
- var node = this.createElementDefaultNS(elName);
- node.appendChild(this.write_wmc_OnlineResource(url));
- if (attr) {
- var optionalAttributes = ["width", "height", "format"];
- for (var i=0; i<optionalAttributes.length; i++) {
- if (optionalAttributes[i] in attr) {
- node.setAttribute(optionalAttributes[i], attr[optionalAttributes[i]]);
- }
- }
- }
- return node;
- },
-
- /**
- * Method: write_wmc_DimensionList
- */
- write_wmc_DimensionList: function(context) {
- var node = this.createElementDefaultNS("DimensionList");
- var required_attributes = {
- name: true,
- units: true,
- unitSymbol: true,
- userValue: true
- };
- for (var dim in context.dimensions) {
- var attributes = {};
- var dimension = context.dimensions[dim];
- for (var name in dimension) {
- if (typeof dimension[name] == "boolean") {
- attributes[name] = Number(dimension[name]);
- } else {
- attributes[name] = dimension[name];
- }
- }
- var values = "";
- if (attributes.values) {
- values = attributes.values.join(",");
- delete attributes.values;
- }
-
- node.appendChild(this.createElementDefaultNS(
- "Dimension", values, attributes
- ));
- }
- return node;
- },
-
- /**
- * Method: write_wmc_FormatList
- * Create a FormatList node given a layer context.
- *
- * Parameters:
- * context - {Object} Layer context object.
- *
- * Returns:
- * {Element} A WMC FormatList element node.
- */
- write_wmc_FormatList: function(context) {
- var node = this.createElementDefaultNS("FormatList");
- for (var i=0, len=context.formats.length; i<len; i++) {
- var format = context.formats[i];
- node.appendChild(this.createElementDefaultNS(
- "Format",
- format.value,
- (format.current && format.current == true) ?
- {current: "1"} : null
- ));
- }
-
- return node;
- },
-
- /**
- * Method: write_wmc_StyleList
- * Create a StyleList node given a layer context.
- *
- * Parameters:
- * layer - {Object} Layer context object.
- *
- * Returns:
- * {Element} A WMC StyleList element node.
- */
- write_wmc_StyleList: function(layer) {
- var node = this.createElementDefaultNS("StyleList");
-
- var styles = layer.styles;
- if (styles && OpenLayers.Util.isArray(styles)) {
- var sld;
- for (var i=0, len=styles.length; i<len; i++) {
- var s = styles[i];
- // three style types to consider
- // [1] linked SLD
- // [2] inline SLD
- // [3] named style
- // running child nodes always gets name, optionally gets href or body
- var style = this.createElementDefaultNS(
- "Style",
- null,
- (s.current && s.current == true) ?
- {current: "1"} : null
- );
- if(s.href) { // [1]
- sld = this.createElementDefaultNS("SLD");
- // Name is optional.
- if (s.name) {
- sld.appendChild(this.createElementDefaultNS("Name", s.name));
- }
- // Title is optional.
- if (s.title) {
- sld.appendChild(this.createElementDefaultNS("Title", s.title));
- }
- // LegendURL is optional
- if (s.legend) {
- sld.appendChild(this.write_wmc_URLType("LegendURL", s.legend.href, s.legend));
- }
-
- var link = this.write_wmc_OnlineResource(s.href);
- sld.appendChild(link);
- style.appendChild(sld);
- } else if(s.body) { // [2]
- sld = this.createElementDefaultNS("SLD");
- // Name is optional.
- if (s.name) {
- sld.appendChild(this.createElementDefaultNS("Name", s.name));
- }
- // Title is optional.
- if (s.title) {
- sld.appendChild(this.createElementDefaultNS("Title", s.title));
- }
- // LegendURL is optional
- if (s.legend) {
- sld.appendChild(this.write_wmc_URLType("LegendURL", s.legend.href, s.legend));
- }
-
- // read in body as xml doc - assume proper namespace declarations
- var doc = OpenLayers.Format.XML.prototype.read.apply(this, [s.body]);
- // append to StyledLayerDescriptor node
- var imported = doc.documentElement;
- if(sld.ownerDocument && sld.ownerDocument.importNode) {
- imported = sld.ownerDocument.importNode(imported, true);
- }
- sld.appendChild(imported);
- style.appendChild(sld);
- } else { // [3]
- // both Name and Title are required.
- style.appendChild(this.createElementDefaultNS("Name", s.name));
- style.appendChild(this.createElementDefaultNS("Title", s.title));
- // Abstract is optional
- if (s['abstract']) { // abstract is a js keyword
- style.appendChild(this.createElementDefaultNS(
- "Abstract", s['abstract']
- ));
- }
- // LegendURL is optional
- if (s.legend) {
- style.appendChild(this.write_wmc_URLType("LegendURL", s.legend.href, s.legend));
- }
- }
- node.appendChild(style);
- }
- }
-
- return node;
- },
-
- /**
- * Method: write_wmc_OnlineResource
- * Create an OnlineResource node given a URL.
- *
- * Parameters:
- * href - {String} URL for the resource.
- *
- * Returns:
- * {Element} A WMC OnlineResource element node.
- */
- write_wmc_OnlineResource: function(href) {
- var node = this.createElementDefaultNS("OnlineResource");
- this.setAttributeNS(node, this.namespaces.xlink, "xlink:type", "simple");
- this.setAttributeNS(node, this.namespaces.xlink, "xlink:href", href);
- return node;
- },
-
- /**
- * Method: getOnlineResource_href
- */
- getOnlineResource_href: function(node) {
- var object = {};
- var links = node.getElementsByTagName("OnlineResource");
- if(links.length > 0) {
- this.read_wmc_OnlineResource(object, links[0]);
- }
- return object.href;
- },
-
-
- CLASS_NAME: "OpenLayers.Format.WMC.v1"
-
-});