[Liblas-commits] hg-main-tree: add more cases for converting data type names into...

liblas-commits at liblas.org liblas-commits at liblas.org
Tue May 24 17:27:19 EDT 2011


details:   http://hg.libpc.orghg-main-tree/rev/ad148d95ce64
changeset: 723:ad148d95ce64
user:      Howard Butler <hobu.inc at gmail.com>
date:      Tue May 24 16:26:30 2011 -0500
description:
add more cases for converting data type names into Dimension::Field enums
Subject: hg-main-tree: add a getSchema() method for the xml schema reader

details:   http://hg.libpc.orghg-main-tree/rev/320e3b8cbe13
changeset: 724:320e3b8cbe13
user:      Howard Butler <hobu.inc at gmail.com>
date:      Tue May 24 16:26:52 2011 -0500
description:
add a getSchema() method for the xml schema reader
Subject: hg-main-tree: add simple i/o testing of the XML schema reader/writer

details:   http://hg.libpc.orghg-main-tree/rev/67f95ecb3aed
changeset: 725:67f95ecb3aed
user:      Howard Butler <hobu.inc at gmail.com>
date:      Tue May 24 16:27:10 2011 -0500
description:
add simple i/o testing of the XML schema reader/writer

diffstat:

 include/libpc/XMLSchema.hpp |   1 +
 src/XMLSchema.cpp           |  46 +++++++++++++----------------
 test/unit/XMLSchemaTest.cpp |  68 +++++++++++++++++++-------------------------
 3 files changed, 52 insertions(+), 63 deletions(-)

diffs (210 lines):

diff -r a828f88d3f17 -r 67f95ecb3aed include/libpc/XMLSchema.hpp
--- a/include/libpc/XMLSchema.hpp	Tue May 24 12:47:21 2011 -0500
+++ b/include/libpc/XMLSchema.hpp	Tue May 24 16:27:10 2011 -0500
@@ -135,6 +135,7 @@
     Reader(std::istream* xml, std::istream* schema);
     ~Reader();
 
+    inline libpc::Schema getSchema() { return m_schema; }
 
 
 protected:
diff -r a828f88d3f17 -r 67f95ecb3aed src/XMLSchema.cpp
--- a/src/XMLSchema.cpp	Tue May 24 12:47:21 2011 -0500
+++ b/src/XMLSchema.cpp	Tue May 24 16:27:10 2011 -0500
@@ -37,7 +37,6 @@
 
 #include <sstream>
 #include <iostream>
-#include <istream>
 #include <list>
 #include <cstdlib>
 #include <map>
@@ -519,22 +518,6 @@
 Dimension::DataType Reader::GetDimensionType(std::string const& interpretation)
 {
 
-    // enum DataType
-    // {
-    //     Int8,
-    //     Uint8,
-    //     Int16,
-    //     Uint16,
-    //     Int32,
-    //     Uint32,
-    //     Int64,
-    //     Uint64,
-    //     Float,       // 32 bits
-    //     Double,       // 64 bits
-    //     Undefined
-    // };
-
-
     if (!compare_no_case(interpretation.c_str(), "int8_t") ||
         !compare_no_case(interpretation.c_str(), "int8"))
         return Dimension::Int8;
@@ -605,31 +588,41 @@
     if (!compare_no_case(name.c_str(), "Intensity"))
         return Dimension::Field_Intensity;
 
-    if (!compare_no_case(name.c_str(), "Return Number"))
+    if (!compare_no_case(name.c_str(), "Return Number") ||
+        !compare_no_case(name.c_str(), "ReturnNumber"))
         return Dimension::Field_ReturnNumber;
 
-    if (!compare_no_case(name.c_str(), "Number of Returns"))
+    if (!compare_no_case(name.c_str(), "Number of Returns") ||
+        !compare_no_case(name.c_str(), "NumberOfReturns"))
         return Dimension::Field_NumberOfReturns;
 
     if (!compare_no_case(name.c_str(), "Number of Returns"))
         return Dimension::Field_NumberOfReturns;
 
-    if (!compare_no_case(name.c_str(), "Scan Direction"))
+    if (!compare_no_case(name.c_str(), "Scan Direction") ||
+        !compare_no_case(name.c_str(), "ScanDirectionFlag") ||
+        !compare_no_case(name.c_str(), "ScanDirection"))
         return Dimension::Field_ScanDirectionFlag;
 
-    if (!compare_no_case(name.c_str(), "Flightline Edge"))
+    if (!compare_no_case(name.c_str(), "Flightline Edge") ||
+        !compare_no_case(name.c_str(), "EdgeOfFlightLine") ||
+        !compare_no_case(name.c_str(), "FlightlineEdge"))
         return Dimension::Field_EdgeOfFlightLine;
 
     if (!compare_no_case(name.c_str(), "Classification"))
         return Dimension::Field_Classification;
 
-    if (!compare_no_case(name.c_str(), "Scan Angle Rank"))
+    if (!compare_no_case(name.c_str(), "Scan Angle Rank") ||
+        !compare_no_case(name.c_str(), "ScanAngle") ||
+        !compare_no_case(name.c_str(), "ScanAngleRank"))
         return Dimension::Field_ScanAngleRank;
 
-    if (!compare_no_case(name.c_str(), "User Data"))
+    if (!compare_no_case(name.c_str(), "User Data") ||
+        !compare_no_case(name.c_str(), "UserData"))
         return Dimension::Field_UserData;
 
-    if (!compare_no_case(name.c_str(), "Point Source ID"))
+    if (!compare_no_case(name.c_str(), "Point Source ID")||
+        !compare_no_case(name.c_str(), "PointSourceId"))
         return Dimension::Field_PointSourceId;
 
     if (!compare_no_case(name.c_str(), "Time"))
@@ -644,6 +637,8 @@
     if (!compare_no_case(name.c_str(), "Blue"))
         return Dimension::Field_Blue;
 
+    if (!compare_no_case(name.c_str(), "Alpha"))
+        return Dimension::Field_Alpha;
 
     return Dimension::Field_INVALID;
 }
@@ -663,7 +658,7 @@
 
     xmlTextWriterPtr w = static_cast<xmlTextWriterPtr>(writer.get());     
     xmlTextWriterFlush(w);
-    printf("xml: %s", (const char *) b->content);
+    // printf("xml: %s", (const char *) b->content);
     return std::string((const char *) b->content, b->size);
     
 }
@@ -695,6 +690,7 @@
     boost::uint32_t output = static_cast<boost::uint32_t>(precision);
     return output;
 }
+
 void Writer::writeSchema(TextWriterPtr writer)
 {
 
diff -r a828f88d3f17 -r 67f95ecb3aed test/unit/XMLSchemaTest.cpp
--- a/test/unit/XMLSchemaTest.cpp	Tue May 24 12:47:21 2011 -0500
+++ b/test/unit/XMLSchemaTest.cpp	Tue May 24 16:27:10 2011 -0500
@@ -59,7 +59,7 @@
 std::string ReadXML(std::string filename)
 {
 
-    std::istream* infile = Utils::openFile(filename, true);
+    std::istream* infile = Utils::openFile(filename);
     std::ifstream::pos_type size;
     // char* data;
     std::vector<char> data;
@@ -93,48 +93,40 @@
 
 BOOST_AUTO_TEST_CASE(test_schema_read)
 {
-    std::istream* xml_stream = Utils::openFile(TestConfig::g_data_path+"schemas/8-dimension-schema.xml");
-    std::istream* xsd_stream = Utils::openFile(TestConfig::g_data_path+"/schemas/LAS.xsd");
+    // std::istream* xml_stream = Utils::openFile(TestConfig::g_data_path+"schemas/8-dimension-schema.xml");
+    // std::istream* xsd_stream = Utils::openFile(TestConfig::g_data_path+"/schemas/LAS.xsd");
     
+    std::string xml = ReadXML(TestConfig::g_data_path+"schemas/8-dimension-schema.xml");
+    std::string xsd = ReadXML(TestConfig::g_data_path+"/schemas/LAS.xsd");
+    libpc::schema::Reader reader(xml, xsd);
     
-    libpc::schema::Reader schema(xml_stream, xsd_stream);
+    libpc::Schema schema = reader.getSchema();
     
+    libpc::schema::Writer writer(schema);
+    std::string xml_output = writer.write();
+
+    libpc::schema::Reader reader2(xml_output, xsd);
+    libpc::Schema schema2 = reader2.getSchema();
+    
+    libpc::Schema::Dimensions const& dims1 = schema.getDimensions();
+    libpc::Schema::Dimensions const& dims2 = schema2.getDimensions();
+    
+    BOOST_CHECK_EQUAL(dims1.size(), dims2.size());
+    
+    for (boost::uint32_t i = 0; i < dims2.size(); ++i)
+    {
+        libpc::Dimension const& dim1 = schema.getDimension(i);
+        libpc::Dimension const& dim2 = schema2.getDimension(i);
+    
+        BOOST_CHECK_EQUAL(dim1.getDataType(), dim2.getDataType());
+        BOOST_CHECK_EQUAL(dim1.getByteSize(), dim2.getByteSize());
+
+        BOOST_CHECK_EQUAL(dim1.getField(), dim2.getField());
+        BOOST_CHECK_EQUAL(dim1.getDescription(), dim2.getDescription());
+        
+    }
     
 }
 
 
-BOOST_AUTO_TEST_CASE(test_schema_writer)
-{
-    libpc::drivers::las::LasReader reader(TestConfig::g_data_path+"1.2-with-color.las");
-    BOOST_CHECK(reader.getDescription() == "Las Reader");
-
-    const Schema& schema = reader.getSchema();
-    SchemaLayout layout(schema);
-     
-    Schema s(schema);
-    Dimension& d = s.getDimension(15);
-    d.setMinimum(14.00);
-    d.setMaximum(142.00);
-    libpc::schema::Writer sw(s);
-    sw.write();// << std::endl;
-    
-    
-}
-// BOOST_AUTO_TEST_CASE(clean_up)
-// {
-//     if (!ShouldRunTest()) return;
-//     
-//     libpc::drivers::oci::Options options = GetOptions();
-//     
-//     Connection connection = Connect(options);
-// 
-//     std::string base_table_name = options.GetPTree().get<std::string>("base_table_name");
-//     std::string block_table_name = options.GetPTree().get<std::string>("block_table_name");
-//     
-//     std::string drop_base_table = "DROP TABLE " + base_table_name;
-//     std::string drop_block_table = "DROP TABLE " + block_table_name;
-//     RunSQL(connection, drop_base_table);
-//     RunSQL(connection, drop_block_table);    
-// }
-
 BOOST_AUTO_TEST_SUITE_END()


More information about the Liblas-commits mailing list