// Copyright (C) 2004-2006 Autodesk, Inc. // // This library is free software; you can redistribute it and/or // modify it under the terms of version 2.1 of the GNU Lesser // General Public License as published by the Free Software Foundation. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA using System; using System.Diagnostics; using OSGeo.FDO.Common.Xml; using OSGeo.FDO.Xml; using OSGeo.FDO.Common.Gml212; using OSGeo.FDO.Commands.Schema; using OSGeo.FDO.Schema; using OSGeo.FDO.Commands.Feature; using OSGeo.FDO.Expression; namespace Fdo_Test { /// /// Summary description for mgGmlTest. /// public class mgGmlTest { public mgGmlTest() { Console.WriteLine("start mgGmlTest"); } public void testInstantiateFeatureReader() { Console.WriteLine("start mgGmlTest.testInstantiateFeatureReader"); XmlReader fileReader = null; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, null); Debug.Assert(featureReader != null); //Console.WriteLine("finish mgGmlTest.testInstantiateFeatureReader"); } public void testSimpleFeature() { Console.WriteLine("start mgGmlTest.testSimpleFeature"); // without schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_simple_feature.xml"); Debug.Assert(fileReader != null); XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, null); Debug.Assert(featureReader != null); int count = 0; while (featureReader.ReadNext()) { count++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); } Debug.Assert(count == 3); } // with schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_simple_feature.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_simple_feature_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); int count = 0; while (featureReader.ReadNext()) { count++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); } Debug.Assert(count == 3); } //Console.WriteLine("finish mgGmlTest.testSimpleFeature"); } public void testSimpleGeometry() { Console.WriteLine("start mgGmlTest.testSimpleGeometry"); // without schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_simple_geometry.xml"); Debug.Assert(fileReader != null); XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, null); Debug.Assert(featureReader != null); int count = 0; while (featureReader.ReadNext()) { count++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); testGeometryProperty(featureReader, "Bounds"); testGeometryProperty(featureReader, "gml/pointProperty"); testGeometryProperty(featureReader, "gml/lineStringProperty"); } Debug.Assert(count == 2); } // with schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_simple_geometry.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_simple_geometry_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); featureFlags.SchemaMappings = schemaMappings; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); int count = 0; while (featureReader.ReadNext()) { count++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); testGeometryProperty(featureReader, "Bounds"); testGeometryProperty(featureReader, "gml/pointProperty"); testGeometryProperty(featureReader, "gml/lineStringProperty"); } Debug.Assert(count == 2); } //Console.WriteLine("finish mgGmlTest.testSimpleGeometry"); } public void testNestedGeometry() { Console.WriteLine("start mgGmlTest.testNestedGeometry"); // without schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_nested_geometry.xml"); Debug.Assert(fileReader != null); XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, null); Debug.Assert(featureReader != null); int count = 0; while (featureReader.ReadNext()) { count++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); testGeometryProperty(featureReader, "Bounds"); testGeometryProperty(featureReader, "gml/polygonProperty"); } Debug.Assert(count == 2); } // with schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_nested_geometry.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_nested_geometry_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); featureFlags.SchemaMappings = schemaMappings; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); int count = 0; while (featureReader.ReadNext()) { count++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); testGeometryProperty(featureReader, "Bounds"); testGeometryProperty(featureReader, "gml/polygonProperty"); } Debug.Assert(count == 2); } //Console.WriteLine("finish mgGmlTest.testNestedGeometry"); } public void testMultiGeometry() { Console.WriteLine("start mgGmlTest.testMultiGeometry"); // without schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_multi_geometry.xml"); Debug.Assert(fileReader != null); XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, null); Debug.Assert(featureReader != null); int count = 0; while(featureReader.ReadNext()) { count ++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); testGeometryProperty(featureReader, "gml/multiPointProperty"); testGeometryProperty(featureReader, "gml/multiLineStringProperty"); testGeometryProperty(featureReader, "gml/multiPolygonProperty"); testGeometryProperty(featureReader, "gml/multiGeometryProperty"); } Debug.Assert(count == 2); } // with schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_multi_geometry.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_multi_geometry_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); featureFlags.SchemaMappings = schemaMappings; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); int count = 0; while(featureReader.ReadNext()) { count ++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); testGeometryProperty(featureReader, "gml/multiPointProperty"); testGeometryProperty(featureReader, "gml/multiLineStringProperty"); testGeometryProperty(featureReader, "gml/multiPolygonProperty"); testGeometryProperty(featureReader, "gml/multiGeometryProperty"); } Debug.Assert(count == 2); } //Console.WriteLine("finish mgGmlTest.testMultiGeometry"); } public void testSimpleObject() { Console.WriteLine("start mgGmlTest.testSimpleObject"); // without schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_simple_object.xml"); Debug.Assert(fileReader != null); XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, null); Debug.Assert(featureReader != null); int count = 0; while(featureReader.ReadNext()) { count ++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); IFeatureReader obj = featureReader.GetFeatureObject("genericObject"); Debug.Assert(obj != null); int objCount = 0; while(obj.ReadNext()) { objCount++; string objName = obj.GetString("name"); Debug.Assert(objName != null); } Debug.Assert(objCount == 2); } Debug.Assert(count == 2); } // with schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_simple_object.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_simple_object_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); featureFlags.SchemaMappings = schemaMappings; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); int count = 0; while(featureReader.ReadNext()) { count ++; string name = featureReader.GetString("NAME"); Debug.Assert(name != null); IFeatureReader obj = featureReader.GetFeatureObject("genericObject"); Debug.Assert(obj != null); int objCount = 0; while(obj.ReadNext()) { objCount++; string objName = obj.GetString("name"); Debug.Assert(objName != null); } Debug.Assert(objCount == 2); } Debug.Assert(count == 2); } //Console.WriteLine("finish mgGmlTest.testSimpleObject"); } public void testNestedObject() { Console.WriteLine("start mgGmlTest.testNestedObject"); // without schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_nested_object.xml"); Debug.Assert(fileReader != null); XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, null); Debug.Assert(featureReader != null); int count = 0; while(featureReader.ReadNext()) { count ++; //top level string name = featureReader.GetString("NAME"); Debug.Assert(name != null); //nested level IFeatureReader nestedObject = featureReader.GetFeatureObject("genericObject"); Debug.Assert(nestedObject != null); while(nestedObject.ReadNext()) { string nestedName = nestedObject.GetString("name"); Debug.Assert(nestedName != null); //inner level IFeatureReader innerObject = nestedObject.GetFeatureObject("genericObject"); Debug.Assert(innerObject != null); while(innerObject.ReadNext()) { string innerName = innerObject.GetString("name"); Debug.Assert(innerName != null); } } } Debug.Assert(count == 2); } // with schemas { XmlReader fileReader = new XmlReader("TestFiles\\gml_nested_object.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_nested_object_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); featureFlags.SchemaMappings = schemaMappings; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); int count = 0; while(featureReader.ReadNext()) { count ++; //top level string name = featureReader.GetString("NAME"); Debug.Assert(name != null); //nested level IFeatureReader nestedObject = featureReader.GetFeatureObject("genericObject"); Debug.Assert(nestedObject != null); while(nestedObject.ReadNext()) { string nestedName = nestedObject.GetString("name"); Debug.Assert(nestedName != null); //inner level IFeatureReader innerObject = nestedObject.GetFeatureObject("genericObject"); Debug.Assert(innerObject != null); while(innerObject.ReadNext()) { string innerName = innerObject.GetString("name"); Debug.Assert(innerName != null); } } } Debug.Assert(count == 2); } //Console.WriteLine("finish mgGmlTest.testNestedObject"); } public void testBLOBBase64() { Console.WriteLine("start mgGmlTest.testBLOBBase64"); string[] orgText = { "An infestation of locusts that decimated crops, the worst drought in 15 years, and Niger's government keeping grain prices too high for too long have now caused a region in the brink of a crisis.", "It was a crisis-in-the-making that should have been averted, says Mark Malloch Brown, chief of staff to the U.N. secretary-general. \"What is happening was largely foreseeable as early as November,\" he says." }; XmlReader fileReader = new XmlReader("TestFiles\\gml_blob.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo_customer", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_blob_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo_customer", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); featureFlags.SchemaMappings = schemaMappings; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); featureReader.FeatureSchemas = schemas; int count = 0; while (featureReader.ReadNext()) { String name = featureReader.GetString("NAME"); Debug.Assert(name != null); BLOBValue binData = (BLOBValue)(featureReader.GetLOB("binData")); byte[] binData1 = binData.Data; string s = (new System.Text.ASCIIEncoding()).GetString(binData1); Debug.Assert(s == orgText[count]); count++; } Debug.Assert(count == 2); } public void testBLOBHex() { string[] orgText = { "infestation", }; XmlReader fileReader = new XmlReader("TestFiles\\gml_blob_hex.xml"); Debug.Assert(fileReader != null); FeatureSchemaCollection schemas = new FeatureSchemaCollection(null); XmlFlags flags = new XmlFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); schemas.ReadXml("TestFiles\\gml_blob_hex_schema.xml", flags); PhysicalSchemaMappingCollection schemaMappings = schemas.XmlSchemaMappings; XmlFeatureFlags featureFlags = new XmlFeatureFlags("fdo.osgeo.org/schemas/feature", XmlFlags.ErrorLevel.ErrorLevel_VeryLow); featureFlags.SchemaMappings = schemaMappings; XmlFeatureReader featureReader = new XmlFeatureReader(fileReader, featureFlags); Debug.Assert(featureReader != null); int count = 0; while(featureReader.ReadNext()) { // !!! BUG !!! TEST is FAILING and has been temporarily commented out..... //String name = featureReader.GetString("NAME"); //Debug.Assert(name != null); //BLOBValue binData = (BLOBValue)(featureReader.GetLOB("binData")); //byte[] binData1 = binData.Data; //Debug.Assert(object.Equals(binData1, orgText)); //char* src = (char*)binData1.GetData(); //how to convert char[] to byte[] or vice verse //Debug.Assert(strncmp(src, orgText[count], strlen(orgText[count])) == 0); count ++; } Debug.Assert(count == 1); } private void testGeometryProperty(XmlFeatureReader featureReader, string propName) { byte[] geom = featureReader.GetGeometry(propName); Debug.Assert(geom != null); } } }