[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