diff --git a/src/ol/parser/geojson.js b/src/ol/parser/geojson.js index 1df8ebf4d4..9bbabaff23 100644 --- a/src/ol/parser/geojson.js +++ b/src/ol/parser/geojson.js @@ -1,4 +1,4 @@ -goog.provide('ol.parser.geojson'); +goog.provide('ol.parser.GeoJSON'); goog.require('ol.Feature'); goog.require('ol.geom.Geometry'); @@ -8,6 +8,16 @@ goog.require('ol.geom.MultiPoint'); goog.require('ol.geom.MultiPolygon'); goog.require('ol.geom.Point'); goog.require('ol.geom.Polygon'); +goog.require('ol.parser.Parser'); + + + +/** + * @constructor + * @extends {ol.parser.Parser} + */ +ol.parser.GeoJSON = function() {}; +goog.inherits(ol.parser.GeoJSON, ol.parser.Parser); /** @@ -17,10 +27,10 @@ goog.require('ol.geom.Polygon'); * ol.geom.Geometry|Array.} Parsed geometry or array * of geometries. */ -ol.parser.geojson.read = function(str) { +ol.parser.GeoJSON.prototype.read = function(str) { // TODO: add options and accept projection var json = /** @type {GeoJSONObject} */ (JSON.parse(str)); - return ol.parser.geojson.parse_(json); + return ol.parser.GeoJSON.prototype.parse_(json); }; @@ -31,43 +41,43 @@ ol.parser.geojson.read = function(str) { * of geometries. * @private */ -ol.parser.geojson.parse_ = function(json) { +ol.parser.GeoJSON.prototype.parse_ = function(json) { var result; switch (json.type) { case 'FeatureCollection': - result = ol.parser.geojson.parseFeatureCollection_( + result = this.parseFeatureCollection_( /** @type {GeoJSONFeatureCollection} */ (json)); break; case 'Feature': - result = ol.parser.geojson.parseFeature_( + result = this.parseFeature_( /** @type {GeoJSONFeature} */ (json)); break; case 'GeometryCollection': - result = ol.parser.geojson.parseGeometryCollection_( + result = this.parseGeometryCollection_( /** @type {GeoJSONGeometryCollection} */ (json)); break; case 'Point': - result = ol.parser.geojson.parsePoint_( + result = this.parsePoint_( /** @type {GeoJSONGeometry} */ (json)); break; case 'LineString': - result = ol.parser.geojson.parseLineString_( + result = this.parseLineString_( /** @type {GeoJSONGeometry} */ (json)); break; case 'Polygon': - result = ol.parser.geojson.parsePolygon_( + result = this.parsePolygon_( /** @type {GeoJSONGeometry} */ (json)); break; case 'MultiPoint': - result = ol.parser.geojson.parseMultiPoint_( + result = this.parseMultiPoint_( /** @type {GeoJSONGeometry} */ (json)); break; case 'MultiLineString': - result = ol.parser.geojson.parseMultiLineString_( + result = this.parseMultiLineString_( /** @type {GeoJSONGeometry} */ (json)); break; case 'MultiPolygon': - result = ol.parser.geojson.parseMultiPolygon_( + result = this.parseMultiPolygon_( /** @type {GeoJSONGeometry} */ (json)); break; default: @@ -82,11 +92,11 @@ ol.parser.geojson.parse_ = function(json) { * @return {ol.Feature} Parsed feature. * @private */ -ol.parser.geojson.parseFeature_ = function(json) { +ol.parser.GeoJSON.prototype.parseFeature_ = function(json) { var geomJson = json.geometry, geometry = null; if (geomJson) { - geometry = /** @type {ol.geom.Geometry} */ (ol.parser.geojson.parse_( + geometry = /** @type {ol.geom.Geometry} */ (this.parse_( /** @type {GeoJSONGeometry} */ (geomJson))); } var feature = new ol.Feature(); @@ -101,14 +111,14 @@ ol.parser.geojson.parseFeature_ = function(json) { * @return {Array.} Parsed array of features. * @private */ -ol.parser.geojson.parseFeatureCollection_ = function(json) { +ol.parser.GeoJSON.prototype.parseFeatureCollection_ = function(json) { var features = json.features, len = features.length, result = new Array(len), i; for (i = 0; i < len; ++i) { - result[i] = ol.parser.geojson.parse_( + result[i] = this.parse_( /** @type {GeoJSONFeature} */ (features[i])); } return result; @@ -120,14 +130,14 @@ ol.parser.geojson.parseFeatureCollection_ = function(json) { * @return {Array.} Parsed array of geometries. * @private */ -ol.parser.geojson.parseGeometryCollection_ = function(json) { +ol.parser.GeoJSON.prototype.parseGeometryCollection_ = function(json) { var geometries = json.geometries, len = geometries.length, result = new Array(len), i; for (i = 0; i < len; ++i) { - result[i] = ol.parser.geojson.parse_( + result[i] = this.parse_( /** @type {GeoJSONGeometry} */ (geometries[i])); } return result; @@ -139,7 +149,7 @@ ol.parser.geojson.parseGeometryCollection_ = function(json) { * @return {ol.geom.LineString} Parsed linestring. * @private */ -ol.parser.geojson.parseLineString_ = function(json) { +ol.parser.GeoJSON.prototype.parseLineString_ = function(json) { return new ol.geom.LineString(json.coordinates); }; @@ -149,7 +159,7 @@ ol.parser.geojson.parseLineString_ = function(json) { * @return {ol.geom.MultiLineString} Parsed multi-linestring. * @private */ -ol.parser.geojson.parseMultiLineString_ = function(json) { +ol.parser.GeoJSON.prototype.parseMultiLineString_ = function(json) { return new ol.geom.MultiLineString(json.coordinates); }; @@ -159,7 +169,7 @@ ol.parser.geojson.parseMultiLineString_ = function(json) { * @return {ol.geom.MultiPoint} Parsed multi-point. * @private */ -ol.parser.geojson.parseMultiPoint_ = function(json) { +ol.parser.GeoJSON.prototype.parseMultiPoint_ = function(json) { return new ol.geom.MultiPoint(json.coordinates); }; @@ -169,7 +179,7 @@ ol.parser.geojson.parseMultiPoint_ = function(json) { * @return {ol.geom.MultiPolygon} Parsed multi-polygon. * @private */ -ol.parser.geojson.parseMultiPolygon_ = function(json) { +ol.parser.GeoJSON.prototype.parseMultiPolygon_ = function(json) { return new ol.geom.MultiPolygon(json.coordinates); }; @@ -179,7 +189,7 @@ ol.parser.geojson.parseMultiPolygon_ = function(json) { * @return {ol.geom.Point} Parsed multi-point. * @private */ -ol.parser.geojson.parsePoint_ = function(json) { +ol.parser.GeoJSON.prototype.parsePoint_ = function(json) { return new ol.geom.Point(json.coordinates); }; @@ -189,6 +199,6 @@ ol.parser.geojson.parsePoint_ = function(json) { * @return {ol.geom.Polygon} Parsed polygon. * @private */ -ol.parser.geojson.parsePolygon_ = function(json) { +ol.parser.GeoJSON.prototype.parsePolygon_ = function(json) { return new ol.geom.Polygon(json.coordinates); }; diff --git a/src/ol/parser/parser.js b/src/ol/parser/parser.js new file mode 100644 index 0000000000..1c96acc41a --- /dev/null +++ b/src/ol/parser/parser.js @@ -0,0 +1,21 @@ +goog.provide('ol.parser.Parser'); + + + +/** + * @constructor + */ +ol.parser.Parser = function() {}; + +/** + * @param {*} data Data to deserialize. + * @return {*} Parsed data. + */ +ol.parser.Parser.prototype.read = goog.abstractMethod; + + +/** + * @param {*} obj Object to serialize. + * @return {*} Serialized object. + */ +ol.parser.Parser.prototype.write = goog.abstractMethod; diff --git a/src/ol/parser/xml.js b/src/ol/parser/xml.js index 6e07cf645c..20c14d21af 100644 --- a/src/ol/parser/xml.js +++ b/src/ol/parser/xml.js @@ -1,9 +1,12 @@ goog.provide('ol.parser.XML'); +goog.require('ol.parser.Parser'); + /** * @constructor + * @extends {ol.parser.Parser} */ ol.parser.XML = function() { this.regExes = { @@ -13,6 +16,7 @@ ol.parser.XML = function() { trimComma: (/\s*,\s*/g) }; }; +goog.inherits(ol.parser.XML, ol.parser.Parser); /** diff --git a/test/spec/ol/parser/geojson.test.js b/test/spec/ol/parser/geojson.test.js index 624b95b07b..9914a06b44 100644 --- a/test/spec/ol/parser/geojson.test.js +++ b/test/spec/ol/parser/geojson.test.js @@ -1,6 +1,8 @@ -goog.provide('ol.test.parser.geojson'); +goog.provide('ol.test.parser.GeoJSON'); -describe('ol.parser.geojson', function() { +describe('ol.parser.GeoJSON', function() { + + var parser = new ol.parser.GeoJSON(); var data = { 'type': 'FeatureCollection', @@ -74,7 +76,7 @@ describe('ol.parser.geojson', function() { coordinates: [10, 20] }); - var obj = ol.parser.geojson.read(str); + var obj = parser.read(str); expect(obj).toBeA(ol.geom.Point); expect(obj.getCoordinates()).toEqual([10, 20]); }); @@ -85,7 +87,7 @@ describe('ol.parser.geojson', function() { coordinates: [[10, 20], [30, 40]] }); - var obj = ol.parser.geojson.read(str); + var obj = parser.read(str); expect(obj).toBeA(ol.geom.LineString); expect(obj.getCoordinates()).toEqual([[10, 20], [30, 40]]); }); @@ -99,7 +101,7 @@ describe('ol.parser.geojson', function() { coordinates: [outer, inner1, inner2] }); - var obj = ol.parser.geojson.read(str); + var obj = parser.read(str); expect(obj).toBeA(ol.geom.Polygon); expect(obj.rings.length).toBe(3); expect(obj.rings[0]).toBeA(ol.geom.LinearRing); @@ -116,7 +118,7 @@ describe('ol.parser.geojson', function() { ] }); - var array = ol.parser.geojson.read(str); + var array = parser.read(str); expect(array.length).toBe(2); expect(array[0]).toBeA(ol.geom.Point); expect(array[1]).toBeA(ol.geom.LineString); @@ -124,7 +126,7 @@ describe('ol.parser.geojson', function() { it('parses feature collection', function() { var str = JSON.stringify(data), - array = ol.parser.geojson.read(str); + array = parser.read(str); expect(array.length).toBe(2); @@ -145,4 +147,9 @@ describe('ol.parser.geojson', function() { }); -goog.require('ol.parser.geojson'); +goog.require('ol.Feature'); +goog.require('ol.geom.LinearRing'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.parser.GeoJSON');