[mapguide-commits] r5870 - in sandbox/adsk/2.3r: . Common/PlatformBase/MapLayer

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Sun May 29 22:57:06 EDT 2011


Author: christinebao
Date: 2011-05-29 19:57:06 -0700 (Sun, 29 May 2011)
New Revision: 5870

Modified:
   sandbox/adsk/2.3r/
   sandbox/adsk/2.3r/Common/PlatformBase/MapLayer/LayerBase.cpp
Log:
Integrate r5595 from trunk to branches/2.3r.
Fix ticket http://trac.osgeo.org/mapguide/ticket/1601
MgLayer constructor is not thread safe



Property changes on: sandbox/adsk/2.3r
___________________________________________________________________
Modified: svn:mergeinfo
   - /:5504
/trunk/MgDev:5504,5539,5561-5562
   + /:5504
/trunk/MgDev:5504,5539,5561-5562,5595

Modified: sandbox/adsk/2.3r/Common/PlatformBase/MapLayer/LayerBase.cpp
===================================================================
--- sandbox/adsk/2.3r/Common/PlatformBase/MapLayer/LayerBase.cpp	2011-05-27 10:58:43 UTC (rev 5869)
+++ sandbox/adsk/2.3r/Common/PlatformBase/MapLayer/LayerBase.cpp	2011-05-30 02:57:06 UTC (rev 5870)
@@ -637,10 +637,33 @@
     }
     else
     {
-        ldf.reset(MgLayerBase::GetLayerDefinition(resourceService, m_definition));
+        Ptr<MgResourceIdentifier> resourceId = MgLayerBase::GetLayerDefinition();
+        // get and parse the layer definition
+        Ptr<MgByteReader> reader = resourceService->GetResourceContent(resourceId, L"");
+        Ptr<MgByteSink> sink = new MgByteSink(reader);
+        Ptr<MgByte> bytes = sink->ToBuffer();
+
+        assert(bytes->GetLength() > 0);
+
+        MdfParser::SAX2Parser parser;
+        parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
+
+        if (!parser.GetSucceeded())
+        {
+            STRING errorMsg = parser.GetErrorMessage();
+            MgStringCollection arguments;
+            arguments.Add(errorMsg);
+            throw new MgInvalidLayerDefinitionException(L"MgLayerBase::GetLayerDefinition", __LINE__, __WFILE__, &arguments, L"", NULL);
+        }
+
+        MdfModel::LayerDefinition* ldef = parser.DetachLayerDefinition();
+        assert(ldef != NULL);
+    
+        ldf.reset(ldef);
+
         //cache the resource content
-        MdfParser::SAX2Parser parser;
-        std::string content = parser.SerializeToXML(ldf.get(), NULL);
+        std::string content;
+        content.assign((const char*) bytes->Bytes(), bytes->GetLength());
         MgUtil::MultiByteToWideChar(content, m_resourceContent);
     }
 



More information about the mapguide-commits mailing list