reassign writers instead of creating a different geometry instance. r=bartvde (closes #3407)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@12171 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -502,8 +502,9 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"MultiPoint": function(geometry) {
|
"MultiPoint": function(geometry) {
|
||||||
var node = this.createElementNSPlus("gml:MultiPoint");
|
var node = this.createElementNSPlus("gml:MultiPoint");
|
||||||
for(var i=0; i<geometry.components.length; ++i) {
|
var components = geometry.components || [geometry];
|
||||||
this.writeNode("pointMember", geometry.components[i], node);
|
for(var i=0, ii=components.length; i<ii; ++i) {
|
||||||
|
this.writeNode("pointMember", components[i], node);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
@@ -514,8 +515,9 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"MultiLineString": function(geometry) {
|
"MultiLineString": function(geometry) {
|
||||||
var node = this.createElementNSPlus("gml:MultiLineString");
|
var node = this.createElementNSPlus("gml:MultiLineString");
|
||||||
for(var i=0; i<geometry.components.length; ++i) {
|
var components = geometry.components || [geometry];
|
||||||
this.writeNode("lineStringMember", geometry.components[i], node);
|
for(var i=0, ii=components.length; i<ii; ++i) {
|
||||||
|
this.writeNode("lineStringMember", components[i], node);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
@@ -526,9 +528,10 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"MultiPolygon": function(geometry) {
|
"MultiPolygon": function(geometry) {
|
||||||
var node = this.createElementNSPlus("gml:MultiPolygon");
|
var node = this.createElementNSPlus("gml:MultiPolygon");
|
||||||
for(var i=0; i<geometry.components.length; ++i) {
|
var components = geometry.components || [geometry];
|
||||||
|
for(var i=0, ii=components.length; i<ii; ++i) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
"polygonMember", geometry.components[i], node
|
"polygonMember", components[i], node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
|
|||||||
@@ -378,8 +378,9 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
|||||||
},
|
},
|
||||||
"MultiCurve": function(geometry) {
|
"MultiCurve": function(geometry) {
|
||||||
var node = this.createElementNSPlus("gml:MultiCurve");
|
var node = this.createElementNSPlus("gml:MultiCurve");
|
||||||
for(var i=0, len=geometry.components.length; i<len; ++i) {
|
var components = geometry.components || [geometry];
|
||||||
this.writeNode("curveMember", geometry.components[i], node);
|
for(var i=0, len=components.length; i<len; ++i) {
|
||||||
|
this.writeNode("curveMember", components[i], node);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
@@ -394,8 +395,9 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
|||||||
},
|
},
|
||||||
"MultiSurface": function(geometry) {
|
"MultiSurface": function(geometry) {
|
||||||
var node = this.createElementNSPlus("gml:MultiSurface");
|
var node = this.createElementNSPlus("gml:MultiSurface");
|
||||||
for(var i=0, len=geometry.components.length; i<len; ++i) {
|
var components = geometry.components || [geometry];
|
||||||
this.writeNode("surfaceMember", geometry.components[i], node);
|
for(var i=0, len=components.length; i<len; ++i) {
|
||||||
|
this.writeNode("surfaceMember", components[i], node);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
* {Object} Maps feature states to node names.
|
* {Object} Maps feature states to node names.
|
||||||
*/
|
*/
|
||||||
stateName: null,
|
stateName: null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor: OpenLayers.Format.WFST.v1
|
* Constructor: OpenLayers.Format.WFST.v1
|
||||||
* Instances of this class are not created directly. Use the
|
* Instances of this class are not created directly. Use the
|
||||||
@@ -241,42 +241,43 @@ OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"Transaction": function(obj) {
|
"Transaction": function(obj) {
|
||||||
var options = obj && obj.options;
|
obj = obj || {};
|
||||||
|
var options = obj.options || {};
|
||||||
var node = this.createElementNSPlus("wfs:Transaction", {
|
var node = this.createElementNSPlus("wfs:Transaction", {
|
||||||
attributes: {
|
attributes: {
|
||||||
service: "WFS",
|
service: "WFS",
|
||||||
version: this.version,
|
version: this.version,
|
||||||
handle: options && options.handle
|
handle: options.handle
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var i, len;
|
var i, len;
|
||||||
var features = obj && obj.features;
|
var features = obj.features;
|
||||||
if(features) {
|
if(features) {
|
||||||
var name, feature, geometry;
|
// temporarily re-assigning geometry types
|
||||||
|
if (options.multi === true) {
|
||||||
|
OpenLayers.Util.extend(this.geometryTypes, {
|
||||||
|
"OpenLayers.Geometry.Point": "MultiPoint",
|
||||||
|
"OpenLayers.Geometry.LineString": (this.multiCurve === true) ? "MultiCurve": "MultiLineString",
|
||||||
|
"OpenLayers.Geometry.Polygon": (this.multiSurface === true) ? "MultiSurface" : "MultiPolygon"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var name, feature;
|
||||||
for(i=0, len=features.length; i<len; ++i) {
|
for(i=0, len=features.length; i<len; ++i) {
|
||||||
feature = features[i];
|
feature = features[i];
|
||||||
name = this.stateName[feature.state];
|
name = this.stateName[feature.state];
|
||||||
if(name) {
|
if(name) {
|
||||||
geometry = feature.geometry;
|
|
||||||
if (options && options.multi === true && geometry) {
|
|
||||||
var type = geometry.CLASS_NAME.split(".").pop();
|
|
||||||
if (type.indexOf("Multi") != 0) {
|
|
||||||
var Cls = OpenLayers.Geometry["Multi" + type];
|
|
||||||
if (Cls) {
|
|
||||||
feature = OpenLayers.Util.applyDefaults({
|
|
||||||
geometry: new Cls([geometry])
|
|
||||||
}, feature);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.writeNode(name, {
|
this.writeNode(name, {
|
||||||
feature: feature,
|
feature: feature,
|
||||||
options: options
|
options: options
|
||||||
}, node);
|
}, node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// switch back to original geometry types assignment
|
||||||
|
if (options.multi === true) {
|
||||||
|
this.setGeometryTypes();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (options && options.nativeElements) {
|
if (options.nativeElements) {
|
||||||
for (i=0, len=options.nativeElements.length; i<len; ++i) {
|
for (i=0, len=options.nativeElements.length; i<len; ++i) {
|
||||||
this.writeNode("wfs:Native",
|
this.writeNode("wfs:Native",
|
||||||
options.nativeElements[i], node);
|
options.nativeElements[i], node);
|
||||||
|
|||||||
@@ -176,7 +176,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_write_multi(t) {
|
function test_write_multi(t) {
|
||||||
t.plan(1);
|
t.plan(2);
|
||||||
var format = new OpenLayers.Format.WFST({
|
var format = new OpenLayers.Format.WFST({
|
||||||
featureNS: "http://www.openplans.org/topp",
|
featureNS: "http://www.openplans.org/topp",
|
||||||
featureType: "states",
|
featureType: "states",
|
||||||
@@ -203,11 +203,13 @@
|
|||||||
var features = [insertFeature, updateFeature];
|
var features = [insertFeature, updateFeature];
|
||||||
|
|
||||||
var expected = readXML("TransactionMulti");
|
var expected = readXML("TransactionMulti");
|
||||||
|
var geomTypes = OpenLayers.Util.extend({}, format.geometryTypes);
|
||||||
var got = format.writers["wfs"]["Transaction"].apply(format, [{
|
var got = format.writers["wfs"]["Transaction"].apply(format, [{
|
||||||
features: features,
|
features: features,
|
||||||
options: {multi: true}}
|
options: {multi: true}}
|
||||||
]);
|
]);
|
||||||
t.xml_eq(got, expected, "Transaction request with multi option created correctly");
|
t.xml_eq(got, expected, "Transaction request with multi option created correctly");
|
||||||
|
t.eq(format.geometryTypes, geomTypes, "geometry types unchanged after write with multi option");
|
||||||
}
|
}
|
||||||
|
|
||||||
function readXML(id) {
|
function readXML(id) {
|
||||||
|
|||||||
Reference in New Issue
Block a user