[mapguide-commits] r4929 - in trunk/MgDev/Server/src: Common/Manager Services/Resource

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu May 27 01:01:20 EDT 2010


Author: stevedang
Date: 2010-05-27 01:01:19 -0400 (Thu, 27 May 2010)
New Revision: 4929

Modified:
   trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp
   trunk/MgDev/Server/src/Common/Manager/CacheManager.h
   trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp
Log:
#1366: Resource Change Notification optimization (for tile cache).

Server/src/Common/Manager/CacheManager.cpp
Server/src/Common/Manager/CacheManager.h
- Added a new helper method, MgCacheManager::IsResourceChangeNotificationNeeded, to determine if a cache notification is needed for a specific resource if it has been changed.

Server/src/Services/Resource/ApplicationRepositoryManager.cpp
- Updated MgApplicationRepositoryManager::NotifyResourceChanged method to check if a resource change notification is needed before adding the resource to the change list.

Modified: trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp	2010-05-26 00:15:15 UTC (rev 4928)
+++ trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp	2010-05-27 05:01:19 UTC (rev 4929)
@@ -313,3 +313,48 @@
 
     return cacheItem.Detach();
 }
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief
+/// Determine if a cache notification is needed for the specified resource
+/// if it has been changed.
+///
+bool MgCacheManager::IsResourceChangeNotificationNeeded(MgResourceIdentifier* resource)
+{
+    bool notificationNeeded = false; 
+
+    // Note that the filter below may be changed in the future or whenever
+    // a new resource type is supported.
+    // Currently, the cache manager only needs to know if the following types
+    // of resources have been changed:
+    //
+    // Feature Service cache:
+    //      MgResourceType::FeatureSource
+    // Tile cache:
+    //      MgResourceType::MapDefinition
+    //      MgResourceType::LayerDefinition
+    //      MgResourceType::DrawingSource
+    //      MgResourceType::FeatureSource
+    //      MgResourceType::SymbolDefinition
+    //      MgResourceType::SymbolLibrary
+
+    if (NULL != resource)
+    {
+        STRING resourceType = resource->GetResourceType();
+
+        if (MgResourceType::Map                          != resourceType
+         && MgResourceType::Folder                       != resourceType
+         && MgResourceType::LoadProcedure                != resourceType
+         && MgResourceType::PrintLayout                  != resourceType
+         && MgResourceType::Selection                    != resourceType
+         && MgResourceType::WebLayout                    != resourceType
+         && MgResourceType::ApplicationDefinition        != resourceType
+         && MgResourceType::PrintLayoutDefinition        != resourceType
+         && MgResourceType::PrintLayoutElementDefinition != resourceType)
+        {
+            notificationNeeded = true; 
+        }
+    }
+
+    return notificationNeeded; 
+}

Modified: trunk/MgDev/Server/src/Common/Manager/CacheManager.h
===================================================================
--- trunk/MgDev/Server/src/Common/Manager/CacheManager.h	2010-05-26 00:15:15 UTC (rev 4928)
+++ trunk/MgDev/Server/src/Common/Manager/CacheManager.h	2010-05-27 05:01:19 UTC (rev 4929)
@@ -62,6 +62,8 @@
     MgFeatureSourceCacheItem* GetFeatureSourceCacheItem(MgResourceIdentifier* resource);
     MgSpatialContextCacheItem* GetSpatialContextCacheItem(MgResourceIdentifier* resource);
 
+    bool IsResourceChangeNotificationNeeded(MgResourceIdentifier* resource);
+
 /// Data Members
 
 private:

Modified: trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp	2010-05-26 00:15:15 UTC (rev 4928)
+++ trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp	2010-05-27 05:01:19 UTC (rev 4929)
@@ -152,21 +152,13 @@
 void MgApplicationRepositoryManager::NotifyResourceChanged(
     MgResourceIdentifier& resource)
 {
-    STRING resourceType = resource.GetResourceType();
+    MgCacheManager* cacheManager = MgCacheManager::GetInstance();
 
-    // Note that the filter below may be changed in the future. Currently,
-    // the cache manager only needs to know if the following types of
-    // resources have been changed:
-    if (MgResourceType::MapDefinition    == resourceType
-     || MgResourceType::LayerDefinition  == resourceType
-     || MgResourceType::DrawingSource    == resourceType
-     || MgResourceType::FeatureSource    == resourceType
-     || MgResourceType::SymbolDefinition == resourceType
-     || MgResourceType::SymbolLibrary    == resourceType)
+    if (cacheManager->IsResourceChangeNotificationNeeded(&resource))
     {
         // Request the cache manager to release the lock on the resource/data
         // file that may be currently opened by the FDO connection manager.
-        MgCacheManager::GetInstance()->NotifyResourceChanged(&resource);
+        cacheManager->NotifyResourceChanged(&resource);
 
         // Insert the specified resource into the changed resource set.
         m_changedResources.insert(resource.ToString());



More information about the mapguide-commits mailing list