[mapguide-commits] r9601 - trunk/MgDev/Common/Foundation/System

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Sep 11 04:14:02 PDT 2019


Author: jng
Date: 2019-09-11 04:14:02 -0700 (Wed, 11 Sep 2019)
New Revision: 9601

Modified:
   trunk/MgDev/Common/Foundation/System/Resources.cpp
   trunk/MgDev/Common/Foundation/System/Resources.h
Log:
Apply patch to give better context for MgResourcesLoadFailedException

Fixes #2206

Modified: trunk/MgDev/Common/Foundation/System/Resources.cpp
===================================================================
--- trunk/MgDev/Common/Foundation/System/Resources.cpp	2019-09-11 11:07:08 UTC (rev 9600)
+++ trunk/MgDev/Common/Foundation/System/Resources.cpp	2019-09-11 11:14:02 UTC (rev 9601)
@@ -48,6 +48,7 @@
 const STRING MgResources::BetaReleaseDetected           = L"Beta release detected.  Beta version will expire in: %1 day(s).";
 const STRING MgResources::PreviewReleaseDetected        = L"Preview release detected.  Preview version will expire in: %1 day(s).";
 const STRING MgResources::InvalidLicense                = L"You have an invalid license.";
+const STRING MgResources::InvalidExtendedLocale         = L"The given extended locale is invalid";
 const STRING MgResources::LicenseAlreadyExists          = L"Cannot create a new license, one already exists.";
 const STRING MgResources::LicenseCheckoutCancel         = L"The license checkout was canceled by the user.";
 const STRING MgResources::LicenseInvalidSerialNumber    = L"Invalid serial number.";
@@ -54,9 +55,10 @@
 const STRING MgResources::LicenseCheckoutError          = L"Generic license checkout error.";
 const STRING MgResources::LicenseNotFound               = L"The license was not found.";
 const STRING MgResources::PreCacheMapsStart             = L"Precaching the following Maps:";
+const STRING MgResources::ResourceFileNotFound          = L"The resource file could not be found";
+const STRING MgResources::CouldNotParseResourceFile     = L"The resource file could not be parsed";
+const STRING MgResources::NoParentSectionForResourceDirective = L"No parent section found for current directive at offset %1";
 
-
-
 // The following resource strings are for the commandline options for the server. These are not in the resources file because
 // the server has not even started at this point.
 const STRING MgResources::ServerCmdDaemon               = L"daemon"; // Do not translate
@@ -307,6 +309,7 @@
             MgStringCollection arguments;
             arguments.Add(strResourceFilename.c_str());
             arguments.Add(locale.c_str());
+            arguments.Add(MgResources::InvalidExtendedLocale);
 
             throw new MgResourcesLoadFailedException(L"MgResources.LoadResources",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
@@ -317,7 +320,11 @@
     if (NULL != pResources)
     {
         bool bSuccess = false;
-        if (MgFileUtil::PathnameExists(strResourceFilename) && true == ParseFile(strResourceFilename, pResources))
+        STRING sCause = MgResources::Unknown;
+        bool bPathExists = MgFileUtil::PathnameExists(strResourceFilename);
+        bool bParsedFile = ParseFile(strResourceFilename, pResources, locale);
+
+        if (bPathExists && true == bParsedFile)
         {
             m_resourceCache[locale] = pResources;
             bSuccess = true;
@@ -330,12 +337,40 @@
                 // try to find the resource file of the parent locale, i.e. "en"
                 STRING strParentLocale = locale.substr(0, ParentLocaleLength);
                 STRING strParentResourceFilename = GetResourceFilename(strParentLocale);
-                if (MgFileUtil::PathnameExists(strParentResourceFilename) && true == ParseFile(strParentResourceFilename, pResources))
+
+                bPathExists = MgFileUtil::PathnameExists(strParentResourceFilename);
+                bParsedFile = ParseFile(strParentResourceFilename, pResources, strParentLocale);
+
+                if (bPathExists && true == bParsedFile)
                 {
                     m_resourceCache[locale] = pResources;
                     bSuccess = true;
                 }
+                else //bSuccess still false
+                {
+                    //One of the above (bPathExists or bParseFile) was false. Find out which
+                    if (!bPathExists)
+                    {
+                        sCause = MgResources::ResourceFileNotFound;
+                    }
+                    else if (!bParsedFile)
+                    {
+                        sCause = MgResources::CouldNotParseResourceFile;
+                    }
+                }
             }
+            else //bSuccess still false
+            {
+                //One of the above (bPathExists or bParseFile) was false. Find out which
+                if (!bPathExists)
+                {
+                    sCause = MgResources::ResourceFileNotFound;
+                }
+                else if (!bParsedFile)
+                {
+                    sCause = MgResources::CouldNotParseResourceFile;
+                }
+            }
         }
 
         if (!bSuccess)
@@ -343,6 +378,7 @@
             MgStringCollection arguments;
             arguments.Add(strResourceFilename.c_str());
             arguments.Add(locale.c_str());
+            arguments.Add(sCause);
 
             throw new MgResourcesLoadFailedException(L"MgResources.LoadResources",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
@@ -513,7 +549,7 @@
 }
 
 
-bool MgResources::ParseFile(CREFSTRING strResourceFileName, ResourceFile* pResourceFile)
+bool MgResources::ParseFile(CREFSTRING strResourceFileName, ResourceFile* pResourceFile, CREFSTRING locale)
 {
     bool bParsed = false;
 
@@ -573,6 +609,17 @@
                     }
                     else
                     {
+                        //This will at least tell us *where* in the file we're having problems with
+                        MgStringCollection arguments;
+                        arguments.Add(strResourceFileName);
+                        arguments.Add(locale);
+
+                        MgStringCollection args2;
+                        STRING sOffset;
+                        MgUtil::Int32ToString(offset, sOffset);
+                        STRING sCause = MgResources::FormatMessage(MgResources::NoParentSectionForResourceDirective, &args2);
+
+                        arguments.Add(sCause);
                         throw new MgResourcesLoadFailedException(L"MgResources.ParseFile", __LINE__, __WFILE__, NULL, L"", NULL);
                     }
                 }

Modified: trunk/MgDev/Common/Foundation/System/Resources.h
===================================================================
--- trunk/MgDev/Common/Foundation/System/Resources.h	2019-09-11 11:07:08 UTC (rev 9600)
+++ trunk/MgDev/Common/Foundation/System/Resources.h	2019-09-11 11:14:02 UTC (rev 9601)
@@ -237,6 +237,7 @@
     static const STRING BetaReleaseDetected;
     static const STRING PreviewReleaseDetected;
     static const STRING InvalidLicense;
+    static const STRING InvalidExtendedLocale;
     static const STRING LicenseAlreadyExists;
     static const STRING LicenseNotFound;
     static const STRING LicenseCheckoutCancel;
@@ -243,8 +244,10 @@
     static const STRING LicenseCheckoutError;
     static const STRING LicenseInvalidSerialNumber;
     static const STRING PreCacheMapsStart;
+    static const STRING ResourceFileNotFound;
+    static const STRING CouldNotParseResourceFile;
+    static const STRING NoParentSectionForResourceDirective;
 
-
     static const STRING UsingDefaultResourceFile;
 
     static const STRING Resource_Exception_Section;
@@ -293,7 +296,7 @@
     void DeleteResourceFile(ResourceFile* file);
 
     /// Helper function to read in UTF8 resource file and parse it
-    bool ParseFile(CREFSTRING strResourceFileName, ResourceFile* resourceFile);
+    bool ParseFile(CREFSTRING strResourceFileName, ResourceFile* resourceFile, CREFSTRING locale);
 
     /// Pointer to a process-wide singleton.
     static Ptr<MgResources> m_resources;



More information about the mapguide-commits mailing list