[mapguide-commits] r5143 - trunk/MgDev/Common/MdfParser

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Sep 17 14:06:36 EDT 2010


Author: waltweltonlair
Date: 2010-09-17 18:06:36 +0000 (Fri, 17 Sep 2010)
New Revision: 5143

Modified:
   trunk/MgDev/Common/MdfParser/IOAreaTypeStyle.cpp
   trunk/MgDev/Common/MdfParser/IOCompositeTypeStyle.cpp
   trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOLineTypeStyle.cpp
   trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOPointTypeStyle.cpp
   trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp
   trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/SAX2Parser.cpp
Log:
Fix some MdfParser issues

The newly submitted watermark code has issues in MdfParser, some of which I'm fixing here:
* When saving the layer definition to a version older than 1.4.0, the watermark information needs to be saved as extended data.  The code do to this was missing.
* Numerous places in the watermark serialization code were directly dereferencing the version parameter without checking if it's NULL.  NULL is a valid value for the version, and means use the latest version.
* Updated some references to layer definition 1.3.0 to 1.4.0.

I also noticed that IOPointTypeStyle, IOLineTypeStyle, IOAreaTypeStyle, and IOCompositeTypeStyle had slightly flawed
logic when saving the ShowInLegend property.  When serializing to an older LDF version the code correctly saves
these as extended data, but the version check needs was not excluding LDF 0.9.0 which does not support extended
data.


Modified: trunk/MgDev/Common/MdfParser/IOAreaTypeStyle.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOAreaTypeStyle.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOAreaTypeStyle.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -127,10 +127,10 @@
         fd << BoolToStr(areaTypeStyle->IsShowInLegend());
         fd << endStr(sShowInLegend) << std::endl;
     }
-    else
+    else if (*version >= Version(1, 0, 0))
     {
+        // save ShowInLegend as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
         inctab();
-        // earlier version - save ShowInLegend to ExtendedData1
         fdExtData << tab() << startStr(sShowInLegend);
         fdExtData << BoolToStr(areaTypeStyle->IsShowInLegend());
         fdExtData << endStr(sShowInLegend) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOCompositeTypeStyle.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOCompositeTypeStyle.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOCompositeTypeStyle.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -131,10 +131,10 @@
         fd << BoolToStr(compositeTypeStyle->IsShowInLegend());
         fd << endStr(sShowInLegend) << std::endl;
     }
-    else
+    else if (*version >= Version(1, 0, 0))
     {
+        // save ShowInLegend as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
         inctab();
-        // earlier version - save ShowInLegend to ExtendedData1
         fdExtData << tab() << startStr(sShowInLegend);
         fdExtData << BoolToStr(compositeTypeStyle->IsShowInLegend());
         fdExtData << endStr(sShowInLegend) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -69,9 +69,9 @@
     case eWatermark:
         {
             Version wdVersion;
-            if (!IODrawingLayerDefinition::GetWatermarkVersion(
-                &this->m_version, wdVersion))
+            if (!IODrawingLayerDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
                 return;
+
             WatermarkInstance* layerWatermark = new WatermarkInstance(L"", L"");
             this->m_layer->GetWatermarks()->Adopt(layerWatermark);
             IOWatermarkInstance* IO = new IOWatermarkInstance(layerWatermark, wdVersion);
@@ -139,6 +139,7 @@
     }
 }
 
+
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 1.4.0  =>  WD version 1.0.0
@@ -148,6 +149,7 @@
     return true;
 }
 
+
 void IODrawingLayerDefinition::Write(MdfStream& fd, DrawingLayerDefinition* drawingLayer, Version* version)
 {
     // verify the LDF version
@@ -161,7 +163,7 @@
         }
         else if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 4, 0)))
         {
-            // LDF in MapGuide 2007 / 2008 / 2009 / 2010 / 2012
+            // LDF in MapGuide 2007 - 2012
             strVersion = version->ToString();
         }
         else
@@ -184,6 +186,8 @@
     fd << tab() << startStr(sDrawingLayerDefinition) << std::endl;
     inctab();
 
+    MdfStringStream fdExtData;
+
     // Property: ResourceId
     fd << tab() << startStr(sResourceId);
     fd << EncodeString(drawingLayer->GetResourceID());
@@ -197,19 +201,34 @@
         fd << endStr(sOpacity) << std::endl;
     }
 
-    //Property: LayerWatermark (Optional)
-    if(*version >= Version(1, 4, 0))
+    // Property: LayerWatermark (Optional)
+    int watermarkCount = drawingLayer->GetWatermarks()->GetCount();
+    if (watermarkCount != 0)
     {
-        int watermarkCount = drawingLayer->GetWatermarks()->GetCount();
-        if(watermarkCount != 0)
+        if (!version || (*version >= Version(1, 4, 0)))
         {
-            fd << tab() << startStr(sWatermarks) << std::endl; // NOXLATE
+            // only write LayerWatermark if the LDF version is 1.4.0 or greater
+            fd << tab() << startStr(sWatermarks) << std::endl;
             inctab();
             for (int i=0; i<watermarkCount; ++i)
                 IOWatermarkInstance::Write(fd, drawingLayer->GetWatermarks()->GetAt(i), version);
             dectab();
-            fd << endStr(sWatermarks) << std::endl; // NOXLATE
+            fd << endStr(sWatermarks) << std::endl;
         }
+        else if (*version >= Version(1, 0, 0))
+        {
+            // save LayerWatermark as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
+            inctab();
+
+            fdExtData << tab() << startStr(sWatermarks) << std::endl;
+            inctab();
+            for (int i=0; i<watermarkCount; ++i)
+                IOWatermarkInstance::Write(fdExtData, drawingLayer->GetWatermarks()->GetAt(i), version);
+            dectab();
+            fdExtData << endStr(sWatermarks) << std::endl;
+
+            dectab();
+        }
     }
 
     // Property: Sheet
@@ -242,7 +261,7 @@
     }
 
     // Write any unknown XML / extended data
-    IOUnknown::Write(fd, drawingLayer->GetUnknownXml(), version);
+    IOUnknown::Write(fd, drawingLayer->GetUnknownXml(), fdExtData.str(), version);
 
     dectab();
     fd << tab() << endStr(sDrawingLayerDefinition) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -69,9 +69,9 @@
     case eWatermark:
         {
             Version wdVersion;
-            if (!IOGridLayerDefinition::GetWatermarkVersion(
-                &this->m_version, wdVersion))
+            if (!IOGridLayerDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
                 return;
+
             WatermarkInstance* layerWatermark = new WatermarkInstance(L"", L"");
             this->m_layer->GetWatermarks()->Adopt(layerWatermark);
             IOWatermarkInstance* IO = new IOWatermarkInstance(layerWatermark, wdVersion);
@@ -143,6 +143,7 @@
     }
 }
 
+
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 1.4.0  =>  WD version 1.0.0
@@ -152,6 +153,7 @@
     return true;
 }
 
+
 void IOGridLayerDefinition::Write(MdfStream& fd, GridLayerDefinition* gridLayer, Version* version)
 {
     // verify the LDF version
@@ -165,7 +167,7 @@
         }
         else if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 4, 0)))
         {
-            // LDF in MapGuide 2007 / 2008 / 2009 / 2010 / 2012
+            // LDF in MapGuide 2007 - 2012
             strVersion = version->ToString();
         }
         else
@@ -188,6 +190,8 @@
     fd << tab() << startStr(sGridLayerDefinition) << std::endl;
     inctab();
 
+    MdfStringStream fdExtData;
+
     // Property: ResourceId
     fd << tab() << startStr(sResourceId);
     fd << EncodeString(gridLayer->GetResourceID());
@@ -201,19 +205,34 @@
         fd << endStr(sOpacity) << std::endl;
     }
 
-    //Property: LayerWatermark (Optional)
-    if(*version >= Version(1, 4, 0))
+    // Property: LayerWatermark (Optional)
+    int watermarkCount = gridLayer->GetWatermarks()->GetCount();
+    if (watermarkCount != 0)
     {
-        int watermarkCount = gridLayer->GetWatermarks()->GetCount();
-        if(watermarkCount != 0)
+        if (!version || (*version >= Version(1, 4, 0)))
         {
-            fd << tab() << startStr(sWatermarks) << std::endl; // NOXLATE
+            // only write LayerWatermark if the LDF version is 1.4.0 or greater
+            fd << tab() << startStr(sWatermarks) << std::endl;
             inctab();
             for (int i=0; i<watermarkCount; ++i)
                 IOWatermarkInstance::Write(fd, gridLayer->GetWatermarks()->GetAt(i), version);
             dectab();
-            fd << endStr(sWatermarks) << std::endl; // NOXLATE
+            fd << endStr(sWatermarks) << std::endl;
         }
+        else if (*version >= Version(1, 0, 0))
+        {
+            // save LayerWatermark as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
+            inctab();
+
+            fdExtData << tab() << startStr(sWatermarks) << std::endl;
+            inctab();
+            for (int i=0; i<watermarkCount; ++i)
+                IOWatermarkInstance::Write(fdExtData, gridLayer->GetWatermarks()->GetAt(i), version);
+            dectab();
+            fdExtData << endStr(sWatermarks) << std::endl;
+
+            dectab();
+        }
     }
 
     // Property: FeatureName
@@ -239,7 +258,7 @@
         IOGridScaleRange::Write(fd, gridLayer->GetScaleRanges()->GetAt(i), version);
 
     // Write any unknown XML / extended data
-    IOUnknown::Write(fd, gridLayer->GetUnknownXml(), version);
+    IOUnknown::Write(fd, gridLayer->GetUnknownXml(), fdExtData.str(), version);
 
     dectab();
     fd << tab() << endStr(sGridLayerDefinition) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOLineTypeStyle.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOLineTypeStyle.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOLineTypeStyle.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -127,10 +127,10 @@
         fd << BoolToStr(lineTypeStyle->IsShowInLegend());
         fd << endStr(sShowInLegend) << std::endl;
     }
-    else
+    else if (*version >= Version(1, 0, 0))
     {
+        // save ShowInLegend as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
         inctab();
-        // earlier version - save ShowInLegend to ExtendedData1
         fdExtData << tab() << startStr(sShowInLegend);
         fdExtData << BoolToStr(lineTypeStyle->IsShowInLegend());
         fdExtData << endStr(sShowInLegend) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -77,9 +77,9 @@
         else if (this->m_currElemName == L"Watermark") // NOXLATE
         {
             Version wdVersion;
-            if (!IOMapDefinition::GetWatermarkVersion(
-                &this->m_version, wdVersion))
+            if (!IOMapDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
                 return;
+
             WatermarkInstance* mapWatermark = new WatermarkInstance(L"", L"");
             this->m_map->GetWatermarks()->Adopt(mapWatermark);
             IOWatermarkInstance* IO = new IOWatermarkInstance(mapWatermark, wdVersion);
@@ -120,8 +120,9 @@
     }
 }
 
+
 // Determine which WatermarkDefinition schema version to use based
-// on the supplied LDF version:
+// on the supplied MDF version:
 // * MDF version <= 1.1.0  =>  WD version 1.0.0
 bool IOMapDefinition::GetWatermarkVersion(Version* mdfVersion, Version& wmVersion)
 {
@@ -129,17 +130,36 @@
     return true;
 }
 
+
 void IOMapDefinition::Write(MdfStream& fd, MapDefinition* map, Version* version)
 {
-    MdfString strVersion = version ? version->ToString() : L"1.1.0";
-    if(*version <= Version(1, 0, 0))
+    // verify the MDF version
+    MdfString strVersion;
+    if (version)
     {
-        fd << tab() << "<MapDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"MapDefinition-1.0.0.xsd\">" << std::endl; // NOXLATE
+        if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 1, 0)))
+        {
+            // MDF in MapGuide 2007 - 2012
+            strVersion = version->ToString();
+        }
+        else
+        {
+            // unsupported MDF version
+            // TODO - need a way to return error information
+            _ASSERT(false);
+            return;
+        }
     }
     else
     {
+        // use the current highest version
+        strVersion = L"1.1.0";
+    }
+
+    if (!version || (*version >= Version(1, 1, 0)))
         fd << tab() << "<MapDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"MapDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE
-    }
+    else
+        fd << tab() << "<MapDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"MapDefinition-1.0.0.xsd\">" << std::endl; // NOXLATE
     inctab();
 
     // Property: Name
@@ -179,11 +199,11 @@
     if (map->GetFiniteDisplayScales()->GetCount() > 0)
         IOBaseMapDefinition::Write(fd, map, version);
 
-    //Property: MapWatermark (Optional)
-    if(*version >= Version(1, 1, 0))
+    // Property: MapWatermark (Optional)
+    int watermarkCount = map->GetWatermarks()->GetCount();
+    if (watermarkCount != 0)
     {
-        int watermarkCount = map->GetWatermarks()->GetCount();
-        if(watermarkCount != 0)
+        if (*version >= Version(1, 1, 0))
         {
             fd << tab() << startStr("Watermarks") << std::endl; // NOXLATE
             inctab();

Modified: trunk/MgDev/Common/MdfParser/IOPointTypeStyle.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOPointTypeStyle.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOPointTypeStyle.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -151,10 +151,10 @@
         fd << BoolToStr(pointTypeStyle->IsShowInLegend());
         fd << endStr(sShowInLegend) << std::endl;
     }
-    else
+    else if (*version >= Version(1, 0, 0))
     {
+        // save ShowInLegend as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
         inctab();
-        // earlier version - save ShowInLegend to ExtendedData1
         fdExtData << tab() << startStr(sShowInLegend);
         fdExtData << BoolToStr(pointTypeStyle->IsShowInLegend());
         fdExtData << endStr(sShowInLegend) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -154,6 +154,7 @@
 
 // Determine which SymbolDefinition schema version to use based
 // on the supplied LDF version:
+// * LDF version == 1.4.0  =>  SD version 1.1.0
 // * LDF version == 1.3.0  =>  SD version 1.1.0
 // * LDF version == 1.2.0  =>  SD version 1.1.0
 // * LDF version <= 1.1.0  =>  SD version 1.0.0

Modified: trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -74,9 +74,9 @@
     case eWatermark:
         {
             Version wdVersion;
-            if (!IOVectorLayerDefinition::GetWatermarkVersion(
-                &this->m_version, wdVersion))
+            if (!IOVectorLayerDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
                 return;
+
             WatermarkInstance* layerWatermark = new WatermarkInstance(L"", L"");
             this->m_layer->GetWatermarks()->Adopt(layerWatermark);
             IOWatermarkInstance* IO = new IOWatermarkInstance(layerWatermark, wdVersion);
@@ -171,6 +171,7 @@
     }
 }
 
+
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 1.4.0  =>  WD version 1.0.0
@@ -194,7 +195,7 @@
         }
         else if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 4, 0)))
         {
-            // LDF in MapGuide 2007 / 2008 / 2009 / 2010 / 2012
+            // LDF in MapGuide 2007 - 2012
             strVersion = version->ToString();
         }
         else
@@ -217,6 +218,8 @@
     fd << tab() << startStr(sVectorLayerDefinition) << std::endl;
     inctab();
 
+    MdfStringStream fdExtData;
+
     // Property: ResourceId
     fd << tab() << startStr(sResourceId);
     fd << EncodeString(vectorLayer->GetResourceID());
@@ -230,19 +233,34 @@
         fd << endStr(sOpacity) << std::endl;
     }
 
-    //Property: LayerWatermark (Optional)
-    if(*version >= Version(1, 4, 0))
+    // Property: LayerWatermark (Optional)
+    int watermarkCount = vectorLayer->GetWatermarks()->GetCount();
+    if (watermarkCount != 0)
     {
-        int watermarkCount = vectorLayer->GetWatermarks()->GetCount();
-        if(watermarkCount != 0)
+        if (!version || (*version >= Version(1, 4, 0)))
         {
-            fd << tab() << startStr(sWatermarks) << std::endl; // NOXLATE
+            // only write LayerWatermark if the LDF version is 1.4.0 or greater
+            fd << tab() << startStr(sWatermarks) << std::endl;
             inctab();
             for (int i=0; i<watermarkCount; ++i)
                 IOWatermarkInstance::Write(fd, vectorLayer->GetWatermarks()->GetAt(i), version);
             dectab();
-            fd << endStr(sWatermarks) << std::endl; // NOXLATE
+            fd << endStr(sWatermarks) << std::endl;
         }
+        else if (*version >= Version(1, 0, 0))
+        {
+            // save LayerWatermark as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
+            inctab();
+
+            fdExtData << tab() << startStr(sWatermarks) << std::endl;
+            inctab();
+            for (int i=0; i<watermarkCount; ++i)
+                IOWatermarkInstance::Write(fdExtData, vectorLayer->GetWatermarks()->GetAt(i), version);
+            dectab();
+            fdExtData << endStr(sWatermarks) << std::endl;
+
+            dectab();
+        }
     }
 
     // Property: FeatureName
@@ -296,7 +314,7 @@
         IOVectorScaleRange::Write(fd, vectorLayer->GetScaleRanges()->GetAt(i), version);
 
     // Write any unknown XML / extended data
-    IOUnknown::Write(fd, vectorLayer->GetUnknownXml(), version);
+    IOUnknown::Write(fd, vectorLayer->GetUnknownXml(), fdExtData.str(), version);
 
     dectab();
     fd << tab() << endStr(sVectorLayerDefinition) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/SAX2Parser.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/SAX2Parser.cpp	2010-09-17 16:58:30 UTC (rev 5142)
+++ trunk/MgDev/Common/MdfParser/SAX2Parser.cpp	2010-09-17 18:06:36 UTC (rev 5143)
@@ -64,28 +64,18 @@
 
 SAX2Parser::~SAX2Parser()
 {
-    if (m_handlerStack != NULL)
-        delete m_handlerStack;
-    if (m_parser != NULL)
-        delete m_parser;
-    if (m_map != NULL)
-        delete m_map;
-    if (m_vLayer != NULL)
-        delete m_vLayer;
-    if (m_dLayer != NULL)
-        delete m_dLayer;
-    if (m_gLayer != NULL)
-        delete m_gLayer;
-    if (m_sSymbol != NULL)
-        delete m_sSymbol;
-    if (m_cSymbol != NULL)
-        delete m_cSymbol;
-    if (m_printLayout != NULL)
-        delete m_printLayout;
-    if (m_mapViewport != NULL)
-        delete m_mapViewport;
-    if (m_watermark != NULL)
-        delete m_watermark;
+    delete m_handlerStack;
+    delete m_parser;
+
+    delete m_map;
+    delete m_vLayer;
+    delete m_dLayer;
+    delete m_gLayer;
+    delete m_sSymbol;
+    delete m_cSymbol;
+    delete m_printLayout;
+    delete m_mapViewport;
+    delete m_watermark;
 }
 
 
@@ -253,12 +243,13 @@
     return NULL;
 }
 
+
 // Returns a reference to the parser's watermark definition
 // After this call the parser no longer owns the object.
 WatermarkDefinition* SAX2Parser::DetachWatermarkDefinition()
 {
     WatermarkDefinition* ret = m_watermark;
-    m_watermark= NULL;
+    m_watermark = NULL;
     return ret;
 }
 
@@ -412,6 +403,7 @@
     fd.close();
 }
 
+
 void SAX2Parser::WriteToFile(std::string name, WatermarkDefinition* watermark, Version* version)
 {
     std::ofstream fd;
@@ -497,6 +489,7 @@
     return fd.str();
 }
 
+
 std::string SAX2Parser::SerializeToXML(WatermarkDefinition* watermark, Version* version)
 {
     MdfStringStream fd;
@@ -615,6 +608,7 @@
         {
             // set the version
             SetWatermarkDefinitionVersion(attributes);
+
             _ASSERT(m_watermark == NULL); // otherwise we leak
             m_watermark = new WatermarkDefinition();
             IOWatermarkDefinition* IO = new IOWatermarkDefinition(m_watermark, m_version);
@@ -670,13 +664,14 @@
     return m_version;
 }
 
+
 void SAX2Parser::SetMapDefinitionVersion(const Attributes& attributes)
 {
     // check for a version attribute
     int index = attributes.getIndex(W2X(L"version"));
     const XMLCh* verValue = (index >= 0)? attributes.getValue(index) : NULL;
 
-    // according to the schema map definition elements require a version
+    // according to the latest schema map definition elements require a version
     // attribute, but users may generate XML which is missing this attribute
     if (verValue)
     {
@@ -694,6 +689,7 @@
     }
 }
 
+
 void SAX2Parser::SetLayerDefinitionVersion(const Attributes& attributes)
 {
     // check for a version attribute
@@ -714,11 +710,13 @@
             m_version = MdfModel::Version(1, 2, 0);
         else if (_wcsicmp(version.c_str(), L"1.3.0") == 0)
             m_version = MdfModel::Version(1, 3, 0);
+        else if (_wcsicmp(version.c_str(), L"1.4.0") == 0)
+            m_version = MdfModel::Version(1, 4, 0);
     }
     else
     {
         // assume the latest version if the attribute is missing
-        m_version = MdfModel::Version(1, 3, 0);
+        m_version = MdfModel::Version(1, 4, 0);
     }
 }
 
@@ -747,6 +745,7 @@
     }
 }
 
+
 void SAX2Parser::SetPrintLayoutDefinitionVersion(const Attributes& attributes)
 {
     // check for a version attribute
@@ -766,6 +765,7 @@
     }
 }
 
+
 void SAX2Parser::SetPrintLayoutElementDefinitionVersion(const Attributes& attributes)
 {
     // check for a version attribute
@@ -785,14 +785,17 @@
     }
 }
 
+
 void SAX2Parser::SetWatermarkDefinitionVersion(const Attributes& attributes)
 {
-    //Although right now we only have 1.0.0 here, this function is still needed for future expandation.
+    // Although right now we only have 1.0.0 here, this function is still
+    // needed for future expansion.
+
     // check for a version attribute
     int index = attributes.getIndex(W2X(L"version"));
     const XMLCh* verValue = (index >= 0)? attributes.getValue(index) : NULL;
 
-    // according to the schema layer definition elements require a version
+    // according to the schema watermark definition elements require a version
     // attribute, but users may generate XML which is missing this attribute
     if (verValue)
     {
@@ -808,6 +811,7 @@
     }
 }
 
+
 MapDefinition* SAX2Parser::CreateClone(MapDefinition* map)
 {
     _ASSERT(NULL != map);
@@ -882,6 +886,7 @@
     return parser.DetachSymbolDefinition();
 }
 
+
 WatermarkDefinition* SAX2Parser::CreateClone(WatermarkDefinition* watermark)
 {
     _ASSERT(NULL != watermark);



More information about the mapguide-commits mailing list