[mapguide-commits] r4368 - in sandbox/adsk/2.1:
Common/MapGuideCommon/MapLayer Common/MapGuideCommon/Services
Common/PlatformBase/MapLayer Common/PlatformBase/Services
Server/src/Services/Mapping Server/src/Services/Resource
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Thu Dec 3 17:28:20 EST 2009
Author: brucedechant
Date: 2009-12-03 17:28:19 -0500 (Thu, 03 Dec 2009)
New Revision: 4368
Added:
sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.cpp
sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.h
Modified:
sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.cpp
sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.h
sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Map.cpp
sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.cpp
sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.h
sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.cpp
sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.h
sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.cpp
sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.h
sandbox/adsk/2.1/Server/src/Services/Mapping/LegendPlotUtil.cpp
sandbox/adsk/2.1/Server/src/Services/Mapping/MappingUtil.cpp
sandbox/adsk/2.1/Server/src/Services/Resource/Makefile.am
sandbox/adsk/2.1/Server/src/Services/Resource/ResourceOperationFactory.cpp
sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.cpp
sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.h
sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.vcproj
sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceServiceBuild.cpp
Log:
Fix for trac ticket 1069 - Improve MgMap creation performance
http://trac.osgeo.org/mapguide/ticket/1069
Notes:
- This submission implements RFC 73
- Updated MgMap creation to use NEW GetResourceContents() API
Modified: sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.cpp
===================================================================
--- sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -26,6 +26,7 @@
MgLayer::MgLayer()
: MgLayerBase()
{
+ m_initIdProps = true;
}
//////////////////////////////////////////////////////////////
@@ -34,6 +35,7 @@
MgLayer::MgLayer(MgResourceIdentifier* layerDefinition, MgResourceService* resourceService)
: MgLayerBase(layerDefinition, resourceService)
{
+ m_initIdProps = true;
GetLayerInfoFromDefinition(resourceService);
}
@@ -43,12 +45,26 @@
MgLayer::MgLayer(MgResourceIdentifier* layerDefinition, MgResourceService* resourceService, bool initIdProps)
: MgLayerBase(layerDefinition, resourceService)
{
+ m_initIdProps = initIdProps;
if (initIdProps)
{
GetLayerInfoFromDefinition(resourceService);
}
}
+//////////////////////////////////////////////////////////////////
+/// Creates an MgLayerBase object from a layer definition, pulls identity properties if required, and init layer definition if required.
+///
+MgLayer::MgLayer(MgResourceIdentifier* layerDefinition, MgResourceService* resourceService, bool initIdProps, bool initLayerDefinition)
+ : MgLayerBase(layerDefinition, resourceService, initLayerDefinition)
+{
+ m_initIdProps = initIdProps;
+ if (initIdProps && initLayerDefinition)
+ {
+ GetLayerInfoFromDefinition(resourceService);
+ }
+}
+
//////////////////////////////////////////////////////////////
// Destruct a MgLayerBase object
//
@@ -84,47 +100,51 @@
//
void MgLayer::GetLayerInfoFromDefinition(MgResourceService* resourceService)
{
- MG_TRY()
+ MgLayerBase::GetLayerInfoFromDefinition(resourceService);
- // Generate Id field information for feature sources
- m_idProps.clear();
- if (!m_featureName.empty())
+ if(m_initIdProps && resourceService != NULL)
{
- // If we cannot pull the identity properties, silently ignore it.
- try
+ MG_TRY()
+
+ // Generate Id field information for feature sources
+ m_idProps.clear();
+ if (!m_featureName.empty())
{
- //TODO: Pull site connection directly from resource service
- Ptr<MgUserInformation> userInfo = resourceService->GetUserInfo();
- Ptr<MgSiteConnection> conn = new MgSiteConnection();
- conn->Open(userInfo);
+ // If we cannot pull the identity properties, silently ignore it.
+ try
+ {
+ //TODO: Pull site connection directly from resource service
+ Ptr<MgUserInformation> userInfo = resourceService->GetUserInfo();
+ Ptr<MgSiteConnection> conn = new MgSiteConnection();
+ conn->Open(userInfo);
- Ptr<MgFeatureService> featureService = dynamic_cast<MgFeatureService*>(conn->CreateService(MgServiceType::FeatureService));
- Ptr<MgResourceIdentifier> resId = new MgResourceIdentifier(m_featureSourceId);
+ Ptr<MgFeatureService> featureService = dynamic_cast<MgFeatureService*>(conn->CreateService(MgServiceType::FeatureService));
+ Ptr<MgResourceIdentifier> resId = new MgResourceIdentifier(m_featureSourceId);
- // If the class name is fully qualified (prefixed with a schema name),
- // then use it to determine the schema name.
- STRING className;
- STRING schemaName;
- ParseFeatureName(featureService, className, schemaName);
-
- // Get the identity properties
- Ptr<MgStringCollection> classNames = new MgStringCollection();
- classNames->Add(className);
- Ptr<MgClassDefinitionCollection> classDefs = featureService->GetIdentityProperties(resId, schemaName, classNames);
- if (NULL != classDefs.p && classDefs->GetCount() == 1)
+ // If the class name is fully qualified (prefixed with a schema name),
+ // then use it to determine the schema name.
+ STRING className;
+ STRING schemaName;
+ ParseFeatureName(featureService, className, schemaName);
+
+ // Get the identity properties
+ Ptr<MgStringCollection> classNames = new MgStringCollection();
+ classNames->Add(className);
+ Ptr<MgClassDefinitionCollection> classDefs = featureService->GetIdentityProperties(resId, schemaName, classNames);
+ if (NULL != classDefs.p && classDefs->GetCount() == 1)
+ {
+ Ptr<MgClassDefinition> classDef = classDefs->GetItem(0);
+ PopulateIdentityProperties(classDef);
+ }
+ }
+ catch (MgException* e)
{
- Ptr<MgClassDefinition> classDef = classDefs->GetItem(0);
- PopulateIdentityProperties(classDef);
+ e->Release();
+ // Do nothing here. A failure to pull selection id's is not critical at this point
}
}
- catch (MgException* e)
- {
- e->Release();
- // Do nothing here. A failure to pull selection id's is not critical at this point
- }
+ MG_CATCH_AND_THROW(L"MgLayer.GetLayerInfoFromDefinition")
}
-
- MG_CATCH_AND_THROW(L"MgLayer.GetLayerInfoFromDefinition")
}
//////////////////////////////////////////////////////////////
Modified: sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.h
===================================================================
--- sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.h 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Layer.h 2009-12-03 22:28:19 UTC (rev 4368)
@@ -234,6 +234,12 @@
///
MgLayer(MgResourceIdentifier* layerDefinition, MgResourceService* resourceService, bool initIdProps);
+ //////////////////////////////////////////////////////////////////
+ /// \brief
+ /// Creates an MgLayerBase object from a layer definition, pulls identity properties if required, and init layer definition if required.
+ ///
+ MgLayer(MgResourceIdentifier* layerDefinition, MgResourceService* resourceService, bool initIdProps, bool initLayerDefinition);
+
//////////////////////////////////////////////////////////////////
/// Parse the layer definition XML and extracts scale ranges,
/// feature source and feature class from it
@@ -301,6 +307,8 @@
MgMapBase* GetMap();
+ bool m_initIdProps;
+
CLASS_ID:
static const INT32 m_cls_id = MapGuide_MapLayer_Layer;
Modified: sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Map.cpp
===================================================================
--- sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Map.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/MapGuideCommon/MapLayer/Map.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -249,6 +249,42 @@
double displayOrder = LAYER_ZORDER_TOP;
+ //Get all the layers (normal layer or base layer) and get the contents of them in a single request.
+ Ptr<MgStringCollection> layerIds = new MgStringCollection();
+ MapLayerCollection* normalLayers = mdef->GetLayers();
+ if(normalLayers)
+ {
+ for(int i = 0; i < normalLayers->GetCount(); i ++)
+ {
+ layerIds->Add(normalLayers->GetAt(i)->GetLayerResourceID());
+ }
+ }
+ BaseMapLayerGroupCollection* baseLayerGroups = mdef->GetBaseMapLayerGroups();
+ if(baseLayerGroups)
+ {
+ for(int i = 0; i < baseLayerGroups->GetCount(); i ++)
+ {
+ BaseMapLayerGroup* baseGroup = (BaseMapLayerGroup*)baseLayerGroups->GetAt(i);
+ BaseMapLayerCollection* baseLayers = baseGroup->GetLayers();
+ if(baseLayers)
+ {
+ for(int j = 0; j < baseLayers->GetCount(); j ++)
+ {
+ layerIds->Add(baseLayers->GetAt(j)->GetLayerResourceID());
+ }
+ }
+ }
+ }
+ std::map<STRING, STRING> layerContentPair;
+ if(layerIds->GetCount() != 0)
+ {
+ Ptr<MgStringCollection> layerContents = m_resourceService->GetResourceContents(layerIds, NULL);
+ for(int i = 0; i < layerIds->GetCount(); i ++)
+ {
+ layerContentPair.insert(std::pair<STRING, STRING>(layerIds->GetItem(i), layerContents->GetItem(i)));
+ }
+ }
+
//build the runtime layers and attach them to their groups
SCALERANGES scaleRanges;
MapLayerCollection* layers = mdef->GetLayers();
@@ -260,7 +296,8 @@
//create a runtime layer from this layer and add it to the layer collection
//pull identity properties as a batch process after the layers are created
Ptr<MgResourceIdentifier> layerDefId = new MgResourceIdentifier(layer->GetLayerResourceID());
- Ptr<MgLayerBase> rtLayer = new MgLayer(layerDefId, m_resourceService, false);
+ Ptr<MgLayerBase> rtLayer = new MgLayer(layerDefId, m_resourceService, false, false);
+ rtLayer->SetLayerResourceContent(layerContentPair[layerDefId->ToString()]);
rtLayer->SetName(layer->GetName());
rtLayer->SetVisible(layer->IsVisible());
rtLayer->SetLayerType(MgLayerType::Dynamic);
@@ -344,7 +381,8 @@
{
//create a runtime layer from this base layer and add it to the layer collection
Ptr<MgResourceIdentifier> layerDefId = new MgResourceIdentifier(baseLayer->GetLayerResourceID());
- Ptr<MgLayerBase> rtLayer = new MgLayer(layerDefId, m_resourceService);
+ Ptr<MgLayerBase> rtLayer = new MgLayer(layerDefId, m_resourceService, true, false);
+ rtLayer->SetLayerResourceContent(layerContentPair[layerDefId->ToString()]);
rtLayer->SetName(baseLayer->GetName());
rtLayer->SetVisible(true);
rtLayer->SetLayerType(MgLayerType::BaseMap);
Modified: sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.cpp
===================================================================
--- sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -544,6 +544,67 @@
return byteReader.Detach();
}
+///////////////////////////////////////////////////////////////////////////
+/// \brief
+/// Gets the contents of the specified resources.
+///
+MgStringCollection* MgProxyResourceService::GetResourceContents(MgStringCollection* resources,
+ MgStringCollection* preProcessTags)
+{
+ Ptr<MgStringCollection> resourceContents;
+
+ MG_TRY()
+
+ MgCommand cmd;
+
+ cmd.ExecuteCommand(m_connProp, // Connection
+ MgCommand::knObject, // Return type expected
+ MgResourceService::opIdGetResourceContents, // Command Code
+ 2, // Count of arguments
+ Resource_Service, // Service Id
+ BUILD_VERSION(2,1,0), // Operation version
+ MgCommand::knObject, resources, // Argument#1
+ MgCommand::knObject, preProcessTags, // Argument#2
+ MgCommand::knNone); // End of argument
+
+ SetWarning(cmd.GetWarningObject());
+
+ resourceContents = (MgStringCollection*)cmd.GetReturnValue().val.m_obj;
+
+ // Decrypt the document if Substitution pre-processing is required.
+ if(preProcessTags != NULL && resourceContents != NULL && preProcessTags->GetCount() == resourceContents->GetCount())
+ {
+ for(INT32 i = 0; i < resourceContents->GetCount(); i ++)
+ {
+ STRING tag = preProcessTags->GetItem(i);
+
+ if (MgResourcePreProcessingType::Substitution == tag)
+ {
+ STRING cipherContent = resourceContents->GetItem(i);
+
+ string cipherText, plainText;
+ MgUtil::WideCharToMultiByte(cipherContent, cipherText);
+
+ MG_CRYPTOGRAPHY_TRY()
+
+ MgCryptographyUtil cryptoUtil;
+
+ cryptoUtil.DecryptString(cipherText, plainText);
+
+ MG_CRYPTOGRAPHY_CATCH_AND_THROW(L"MgProxyResourceService.GetResourceContents")
+
+ STRING decryptedContent;
+ MgUtil::MultiByteToWideChar(plainText, decryptedContent);
+ resourceContents->SetItem(i, decryptedContent);
+ }
+ }
+ }
+
+ MG_CATCH_AND_THROW(L"MgProxyResourceService.GetResourceContents")
+
+ return resourceContents.Detach();
+}
+
///////////////////////////////////////////////////////////////////////////////
/// <summary>
/// Changes the owner of an existing resource.
Modified: sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.h
===================================================================
--- sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.h 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/MapGuideCommon/Services/ProxyResourceService.h 2009-12-03 22:28:19 UTC (rev 4368)
@@ -497,6 +497,31 @@
virtual MgByteReader* GetResourceContent(MgResourceIdentifier* resource,
CREFSTRING preProcessTags);
+ ///////////////////////////////////////////////////////////////////////////
+ /// \brief
+ /// Gets the contents of the specified resources.
+ ///
+ /// \param resources
+ /// A collection of resource identifiers describing the resources.
+ /// \param preProcessTags
+ /// Pre-processing to apply to resource before returning content.
+ /// If this parameter is NULL, it means no pre-processing.
+ /// If this parameter is not NULL, it must be a collection of pre-processing types, and it should be
+ /// one to one matching the collection of parameter resources.
+ /// See MgResourcePreProcessingType for a list of supported pre-processing tags.
+ ///
+ /// \return
+ /// MgStringCollection object representing the collection of corresponding resource contents.
+ ///
+ /// \exception MgInvalidRepositoryTypeException
+ /// \exception MgInvalidRepositoryNameException
+ /// \exception MgInvalidResourcePathException
+ /// \exception MgInvalidResourceNameException
+ /// \exception MgInvalidResourceTypeException
+ ///
+ virtual MgStringCollection* GetResourceContents(MgStringCollection* resources,
+ MgStringCollection* preProcessTags);
+
//////////////////////////////////////////////////////////////////
/// \brief
/// Gets the header associated with the specified resource.
Modified: sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.cpp
===================================================================
--- sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -40,7 +40,9 @@
m_expandInLegend(false),
m_needRefresh(false),
m_layers(NULL),
- m_displayOrder(0.0)
+ m_displayOrder(0.0),
+ m_resourceContent(L""),
+ m_forceReadFromServer(false)
{
}
@@ -58,7 +60,9 @@
m_expandInLegend(false),
m_needRefresh(false),
m_layers(NULL),
- m_displayOrder(0.)
+ m_displayOrder(0.),
+ m_resourceContent(L""),
+ m_forceReadFromServer(false)
{
m_definition = layerDefinition;
if(SAFE_ADDREF((MgResourceIdentifier*)m_definition) != NULL)
@@ -70,7 +74,34 @@
MgUtil::GenerateUuid(m_objectId);
}
+//////////////////////////////////////////////////////////////
+// Creates an MgLayerBase object from a layer definition and init layer definition if required.
+//
+MgLayerBase::MgLayerBase(MgResourceIdentifier* layerDefinition, MgResourceService* resourceService, bool initLayerDefinition)
+ : m_type(MgLayerType::Dynamic),
+ m_group((MgLayerGroup*)NULL),
+ m_visible(true),
+ m_selectable(false),
+ m_hasTooltips(false),
+ m_displayInLegend(false),
+ m_expandInLegend(false),
+ m_needRefresh(false),
+ m_layers(NULL),
+ m_displayOrder(0.0),
+ m_resourceContent(L""),
+ m_forceReadFromServer(false)
+{
+ m_definition = layerDefinition;
+ if(SAFE_ADDREF((MgResourceIdentifier*)m_definition) != NULL)
+ m_name = m_definition->GetName();
+ if(initLayerDefinition)
+ GetLayerInfoFromDefinition(resourceService);
+
+ //Generate a unique id for this layer
+ MgUtil::GenerateUuid(m_objectId);
+}
+
//////////////////////////////////////////////////////////////
// Returns the name of the layer
//
@@ -268,13 +299,43 @@
m_definition = SAFE_ADDREF((MgResourceIdentifier*)layerDefinition);
m_name = m_definition->GetName();
+ m_forceReadFromServer = true;
GetLayerInfoFromDefinition(resourceService);
+ m_forceReadFromServer = false;
if(m_layers != NULL)
m_layers->GetMap()->OnLayerDefinitionChanged(this);
}
+//////////////////////////////////////////////////////////////////
+/// Gets the layer's resource content.
+///
+STRING MgLayerBase::GetLayerResourceContent()
+{
+ return m_resourceContent;
+}
+//////////////////////////////////////////////////////////////////
+/// Sets the resource content for this layer.
+///
+void MgLayerBase::SetLayerResourceContent(CREFSTRING resourceContent)
+{
+ if(resourceContent == L"")
+ {
+ throw new MgNullArgumentException(L"MgLayerBase.SetLayerResourceContent", __LINE__, __WFILE__, NULL, L"", NULL);
+ }
+
+ if(m_resourceContent == resourceContent)
+ return;
+
+ m_resourceContent = resourceContent;
+
+ GetLayerInfoFromDefinition(NULL);
+
+ if(m_layers != NULL)
+ m_layers->GetMap()->OnLayerDefinitionChanged(this);
+}
+
//////////////////////////////////////////////////////////////
// Indicates whether an entry for the layer should appear in the legend.
//
@@ -523,6 +584,29 @@
return ldef;
}
+//static method to create the layer definition
+MdfModel::LayerDefinition* MgLayerBase::GetLayerDefinition(CREFSTRING resourceContent)
+{
+ // get and parse the layer definition
+ MdfParser::SAX2Parser parser;
+ parser.ParseString(resourceContent.c_str(), resourceContent.length());
+
+ if (!parser.GetSucceeded())
+ {
+ STRING errorMsg = parser.GetErrorMessage();
+ MgStringCollection arguments;
+ arguments.Add(errorMsg);
+ throw new MgInvalidLayerDefinitionException(L"MgLayerBase::GetLayerDefinition", __LINE__, __WFILE__, &arguments, L"", NULL);
+ }
+
+ // detach the feature layer definition from the parser - it's
+ // now the caller's responsibility to delete it
+ MdfModel::LayerDefinition* ldef = parser.DetachLayerDefinition();
+ assert(ldef != NULL);
+
+ return ldef;
+}
+
//////////////////////////////////////////////////////////////
// Parse the layer definition XML and extracts scale ranges,
// feature source and feature class from it
@@ -536,7 +620,20 @@
MG_TRY()
- auto_ptr<MdfModel::LayerDefinition> ldf(MgLayerBase::GetLayerDefinition(resourceService, m_definition));
+ auto_ptr<MdfModel::LayerDefinition> ldf;
+ if(!m_forceReadFromServer && m_resourceContent != L"")
+ {
+ ldf.reset(MgLayerBase::GetLayerDefinition(m_resourceContent));
+ }
+ else
+ {
+ ldf.reset(MgLayerBase::GetLayerDefinition(resourceService, m_definition));
+ //cache the resource content
+ MdfParser::SAX2Parser parser;
+ std::string content = parser.SerializeToXML(ldf.get(), NULL);
+ MgUtil::MultiByteToWideChar(content, m_resourceContent);
+ }
+
if(ldf.get() != NULL)
{
m_featureSourceId = ldf->GetResourceID();
Modified: sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.h
===================================================================
--- sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.h 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/PlatformBase/MapLayer/LayerBase.h 2009-12-03 22:28:19 UTC (rev 4368)
@@ -845,6 +845,7 @@
INTERNAL_API:
static MdfModel::LayerDefinition* GetLayerDefinition(MgResourceService* svcResource, MgResourceIdentifier* resId);
+ static MdfModel::LayerDefinition* GetLayerDefinition(CREFSTRING resourceContent);
//////////////////////////////////////////////////////////////////
/// Internal mapping of identifiers for selection purposes
@@ -865,6 +866,12 @@
//////////////////////////////////////////////////////////////////
/// \brief
+ /// Creates an MgLayerBase object from a layer definition and init layer definition if required.
+ ///
+ MgLayerBase(MgResourceIdentifier* layerDefinition, MgResourceService* resourceService, bool initLayerDefinition);
+
+ //////////////////////////////////////////////////////////////////
+ /// \brief
/// Serialize data to a stream
///
/// \param stream
@@ -959,7 +966,17 @@
/// Returns id property list
virtual IdPropertyList& GetIdPropertyList();
+ //////////////////////////////////////////////////////////////////
+ /// \brief
+ /// Gets the layer's resource content.
+ ///
+ virtual STRING GetLayerResourceContent();
+ //////////////////////////////////////////////////////////////////
+ /// \brief
+ /// Sets the resource content for this layer.
+ ///
+ virtual void SetLayerResourceContent(CREFSTRING resourceContent);
protected:
/// \brief
@@ -997,6 +1014,7 @@
protected:
Ptr<MgResourceIdentifier> m_definition;
+ STRING m_resourceContent;
STRING m_name;
STRING m_objectId;
INT32 m_type;
@@ -1016,6 +1034,7 @@
STRING m_schemaName;
STRING m_geometry;
IdPropertyList m_idProps;
+ bool m_forceReadFromServer;
};
/// \}
Modified: sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.cpp
===================================================================
--- sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -138,6 +138,16 @@
return GetResourceContent(resource, preProcessTags);
}
+///////////////////////////////////////////////////////////////////////////
+/// \brief
+/// Gets the contents of the specified resources.
+///
+MgStringCollection* MgResourceService::GetResourceContents(MgStringCollection* resources,
+ MgStringCollection* preProcessTags)
+{
+ throw new MgNotImplementedException(L"MgResourceService.GetResourceContents", __LINE__, __WFILE__, NULL, L"", NULL);
+}
+
//////////////////////////////////////////////////////////////////
/// <summary>
/// Returns tagged data for the specified resource.
Modified: sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.h
===================================================================
--- sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.h 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Common/PlatformBase/Services/ResourceService.h 2009-12-03 22:28:19 UTC (rev 4368)
@@ -946,6 +946,31 @@
///
MgByteReader* GetResourceContent(MgResourceIdentifier* resource);
+ ///////////////////////////////////////////////////////////////////////////
+ /// \brief
+ /// Gets the contents of the specified resources.
+ ///
+ /// \param resources
+ /// A collection of resource identifiers describing the resources.
+ /// \param preProcessTags
+ /// Pre-processing to apply to resource before returning content.
+ /// If this parameter is NULL, it means no pre-processing.
+ /// If this parameter is not NULL, it must be a collection of pre-processing types, and it should be
+ /// one to one matching the collection of parameter resources.
+ /// See MgResourcePreProcessingType for a list of supported pre-processing tags.
+ ///
+ /// \return
+ /// MgStringCollection object representing the collection of corresponding resource contents.
+ ///
+ /// \exception MgInvalidRepositoryTypeException
+ /// \exception MgInvalidRepositoryNameException
+ /// \exception MgInvalidResourcePathException
+ /// \exception MgInvalidResourceNameException
+ /// \exception MgInvalidResourceTypeException
+ ///
+ virtual MgStringCollection* GetResourceContents(MgStringCollection* resources,
+ MgStringCollection* preProcessTags);
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief
/// Gets the Metadata content of a resource.
@@ -1919,6 +1944,7 @@
opIdEnumerateUnmanagedData = 0x1111EF1A,
opIdResourceExists = 0x1111EF1B,
opIdEnumerateResourceDocuments = 0x1111EF1C,
+ opIdGetResourceContents = 0x1111EF1D,
};
};
Modified: sandbox/adsk/2.1/Server/src/Services/Mapping/LegendPlotUtil.cpp
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Mapping/LegendPlotUtil.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Mapping/LegendPlotUtil.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -237,8 +237,9 @@
//bottom of the legend -- where we stop drawing
double bottomLimit = legendOffsetY + legendSpec->GetMarginBottom();
- // Process the layers
+ // build the list of layers that need to be processed
Ptr<MgLayerCollection> layers = map->GetLayers();
+ Ptr<MgStringCollection> layerIds = new MgStringCollection();
for (int i = 0; i < layers->GetCount(); i++)
{
Ptr<MgLayerBase> mapLayer = layers->GetItem(i);
@@ -258,9 +259,55 @@
if (!bRequiredInLegend)
continue;
+ Ptr<MgResourceIdentifier> layerId = mapLayer->GetLayerDefinition();
+ layerIds->Add(layerId->ToString());
+ }
+
+ // get resource data
+ if (layerIds->GetCount() != 0)
+ {
+ Ptr<MgStringCollection> layerContents = m_svcResource->GetResourceContents(layerIds, NULL);
+ for (int i = 0; i < layerIds->GetCount(); i++)
+ {
+ for (int j = 0; j < layers->GetCount(); j++)
+ {
+ Ptr<MgLayerBase> mapLayer = layers->GetItem(j);
+ Ptr<MgResourceIdentifier> layerId = mapLayer->GetLayerDefinition();
+ if (layerId->ToString() == layerIds->GetItem(i))
+ {
+ mapLayer->SetLayerResourceContent(layerContents->GetItem(i));
+ break;
+ }
+ }
+ }
+ }
+
+ // process the layers
+ for (int i = 0; i < layers->GetCount(); i++)
+ {
+ Ptr<MgLayerBase> mapLayer = layers->GetItem(i);
+
+ // layer is not currently visible -- don't add to legend
+ if (!mapLayer->IsVisible())
+ continue;
+
+ Ptr<MgLayerGroup> group = mapLayer->GetGroup();
+
+ bool bRequiredInLegend = false;
+ if (group == NULL && mggroup == NULL)
+ bRequiredInLegend = true;
+ else if (group.p && mggroup && group->GetObjectId() == mggroup->GetObjectId())
+ bRequiredInLegend = true;
+
+ if (!bRequiredInLegend)
+ continue;
+
+ STRING content = mapLayer->GetLayerResourceContent();
+ if (content.empty())
+ continue;
+
// get layer definition
- Ptr<MgResourceIdentifier> layerid = mapLayer->GetLayerDefinition();
- auto_ptr<MdfModel::LayerDefinition> ldf(MgMappingUtil::GetLayerDefinition(m_svcResource, layerid));
+ auto_ptr<MdfModel::LayerDefinition> ldf(MgLayerBase::GetLayerDefinition(content));
// Get bitmaps for rules/themes
MdfModel::VectorLayerDefinition* vl = dynamic_cast<MdfModel::VectorLayerDefinition*>(ldf.get());
Modified: sandbox/adsk/2.1/Server/src/Services/Mapping/MappingUtil.cpp
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Mapping/MappingUtil.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Mapping/MappingUtil.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -399,17 +399,12 @@
// stylization operation.
TransformCacheMap transformCache;
+ Ptr<MgStringCollection> layerIds = new MgStringCollection();
+ // Get the layers' resource content in a single request
for (int i = layers->GetCount()-1; i >= 0; i--)
{
- auto_ptr<MdfModel::LayerDefinition> ldf;
- RSMgFeatureReader* rsReader = NULL;
-
Ptr<MgLayerBase> mapLayer = layers->GetItem(i);
- #ifdef _DEBUG
- printf(" StylizeLayers() **LAYERSTART** Name:%S VAS:%S\n", (mapLayer->GetName()).c_str(), mapLayer->IsVisibleAtScale(scale)? L"True" : L"False");
- #endif
-
//don't send data if layer is not currently visible
if ((!selection) && (!mapLayer->IsVisible()))
continue;
@@ -428,16 +423,51 @@
continue;
}
+ Ptr<MgResourceIdentifier> mapLayerId = mapLayer->GetLayerDefinition();
+ layerIds->Add(mapLayerId->ToString());
+ }
+ if(layerIds->GetCount() != 0)
+ {
+ Ptr<MgStringCollection> layerContents = svcResource->GetResourceContents(layerIds, NULL);
+ for(int i = 0; i < layerIds->GetCount(); i ++)
+ {
+ for(int j = 0; j < layers->GetCount(); j ++)
+ {
+ Ptr<MgLayerBase> mapLayer = layers->GetItem(j);
+ Ptr<MgResourceIdentifier> mapLayerId = mapLayer->GetLayerDefinition();
+ if(mapLayerId->ToString() == layerIds->GetItem(i))
+ {
+ mapLayer->SetLayerResourceContent(layerContents->GetItem(i));
+ break;
+ }
+ }
+ }
+ }
+
+ for (int i = layers->GetCount()-1; i >= 0; i--)
+ {
+ auto_ptr<MdfModel::LayerDefinition> ldf;
+ RSMgFeatureReader* rsReader = NULL;
+
+ Ptr<MgLayerBase> mapLayer = layers->GetItem(i);
+
+ #ifdef _DEBUG
+ printf(" StylizeLayers() **LAYERSTART** Name:%S VAS:%S\n", (mapLayer->GetName()).c_str(), mapLayer->IsVisibleAtScale(scale)? L"True" : L"False");
+ #endif
+
+ if(mapLayer->GetLayerResourceContent() == L"")
+ continue;
+
MG_SERVER_MAPPING_SERVICE_TRY()
//get layer definition
- Ptr<MgResourceIdentifier> layerid = mapLayer->GetLayerDefinition();
- ldf.reset(GetLayerDefinition(svcResource, layerid));
+ ldf.reset(MgLayerBase::GetLayerDefinition(mapLayer->GetLayerResourceContent()));
Ptr<MgLayerGroup> group = mapLayer->GetGroup();
MgLogDetail logDetail(MgServiceType::MappingService, MgLogDetail::InternalTrace, L"MgMappingUtil.StylizeLayers", mgStackParams);
logDetail.AddString(L"Map",map->GetName());
+ Ptr<MgResourceIdentifier> layerid = mapLayer->GetLayerDefinition();
logDetail.AddResourceIdentifier(L"LayerId",layerid);
logDetail.Create();
Modified: sandbox/adsk/2.1/Server/src/Services/Resource/Makefile.am
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/Makefile.am 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/Makefile.am 2009-12-03 22:28:19 UTC (rev 4368)
@@ -66,6 +66,7 @@
OpGetRepositoryContent.cpp \
OpGetRepositoryHeader.cpp \
OpGetResourceContent.cpp \
+ OpGetResourceContents.cpp \
OpGetResourceData.cpp \
OpGetResourceHeader.cpp \
OpGetResourceModifiedDate.cpp \
@@ -145,6 +146,7 @@
OpGetRepositoryContent.h \
OpGetRepositoryHeader.h \
OpGetResourceContent.h \
+ OpGetResourceContents.h \
OpGetResourceData.h \
OpGetResourceHeader.h \
OpGetResourceModifiedDate.h \
Added: sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.cpp
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.cpp (rev 0)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -0,0 +1,130 @@
+//
+// Copyright (C) 2004-2009 by Autodesk, Inc.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of version 2.1 of the GNU Lesser
+// General Public License as published by the Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+
+#include "ResourceServiceDefs.h"
+#include "OpGetResourceContents.h"
+#include "ServerResourceService.h"
+#include "LogManager.h"
+
+
+///----------------------------------------------------------------------------
+/// <summary>
+/// Constructs the object.
+/// </summary>
+///----------------------------------------------------------------------------
+MgOpGetResourceContents::MgOpGetResourceContents()
+{
+}
+
+
+///----------------------------------------------------------------------------
+/// <summary>
+/// Destructs the object.
+/// </summary>
+///----------------------------------------------------------------------------
+MgOpGetResourceContents::~MgOpGetResourceContents()
+{
+}
+
+
+///----------------------------------------------------------------------------
+/// <summary>
+/// Executes the operation.
+/// </summary>
+///
+/// <exceptions>
+/// MgException
+/// </exceptions>
+///----------------------------------------------------------------------------
+void MgOpGetResourceContents::Execute()
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT(" (%t) MgOpGetResourceContents::Execute()\n")));
+
+ MG_LOG_OPERATION_MESSAGE(L"GetResourceContents");
+
+ MG_RESOURCE_SERVICE_TRY()
+
+ MG_LOG_OPERATION_MESSAGE_INIT(m_packet.m_OperationVersion, m_packet.m_NumArguments);
+
+ ACE_ASSERT(m_stream != NULL);
+
+ if (2 == m_packet.m_NumArguments)
+ {
+ Ptr<MgStringCollection> resources = (MgStringCollection*)m_stream->GetObject();
+ Ptr<MgStringCollection> preProcessTags = (MgStringCollection*)m_stream->GetObject();
+
+ BeginExecution();
+
+ MG_LOG_OPERATION_MESSAGE_PARAMETERS_START();
+ MG_LOG_OPERATION_MESSAGE_ADD_STRING((NULL == resources) ? L"MgStringCollection" : resources->GetLogString().c_str());
+ MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+ MG_LOG_OPERATION_MESSAGE_ADD_STRING((NULL == preProcessTags) ? L"MgStringCollection" : preProcessTags->GetLogString().c_str());
+ MG_LOG_OPERATION_MESSAGE_PARAMETERS_END();
+
+ Validate();
+
+ Ptr<MgStringCollection> resourceContents = m_service->GetResourceContents(resources, preProcessTags);
+
+ // Encrypt the document if substitution pre-processing is required.
+ if(preProcessTags != NULL && resourceContents != NULL && preProcessTags->GetCount() == resourceContents->GetCount())
+ {
+ for(INT32 i = 0; i < resourceContents->GetCount(); i ++)
+ {
+ STRING tag = preProcessTags->GetItem(i);
+
+ if (MgResourcePreProcessingType::Substitution == tag)
+ {
+ STRING plainText = resourceContents->GetItem(i);
+
+ MgCryptographyManager cryptoManager;
+ STRING cipherText = cryptoManager.EncryptString(plainText);
+
+ resourceContents->SetItem(i, cipherText);
+ }
+ }
+ }
+
+ EndExecution(resourceContents);
+ }
+ else
+ {
+ MG_LOG_OPERATION_MESSAGE_PARAMETERS_START();
+ MG_LOG_OPERATION_MESSAGE_PARAMETERS_END();
+ }
+
+ if (!m_argsRead)
+ {
+ throw new MgOperationProcessingException(L"MgOpGetResourceContents.Execute",
+ __LINE__, __WFILE__, NULL, L"", NULL);
+ }
+
+ // Successful operation
+ MG_LOG_OPERATION_MESSAGE_ADD_STRING(MgResources::Success.c_str());
+
+ MG_RESOURCE_SERVICE_CATCH(L"MgOpGetResourceContents.Execute")
+
+ if (mgException != NULL)
+ {
+ // Failed operation
+ MG_LOG_OPERATION_MESSAGE_ADD_STRING(MgResources::Failure.c_str());
+ }
+
+ // Add access log entry for operation
+ MG_LOG_OPERATION_MESSAGE_ACCESS_ENTRY();
+
+ MG_RESOURCE_SERVICE_THROW()
+}
Property changes on: sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.cpp
___________________________________________________________________
Added: svn:eol-style
+ native
Added: sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.h
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.h (rev 0)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.h 2009-12-03 22:28:19 UTC (rev 4368)
@@ -0,0 +1,33 @@
+//
+// Copyright (C) 2004-2009 by Autodesk, Inc.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of version 2.1 of the GNU Lesser
+// General Public License as published by the Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+
+#ifndef MGOPGETRESOURCECONTENTS_H
+#define MGOPGETRESOURCECONTENTS_H
+
+#include "ResourceOperation.h"
+
+class MgOpGetResourceContents : public MgResourceOperation
+{
+public:
+ MgOpGetResourceContents();
+ virtual ~MgOpGetResourceContents();
+
+public:
+ virtual void Execute();
+};
+
+#endif
Property changes on: sandbox/adsk/2.1/Server/src/Services/Resource/OpGetResourceContents.h
___________________________________________________________________
Added: svn:eol-style
+ native
Modified: sandbox/adsk/2.1/Server/src/Services/Resource/ResourceOperationFactory.cpp
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/ResourceOperationFactory.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/ResourceOperationFactory.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -278,6 +278,18 @@
}
break;
+ case MgResourceService::opIdGetResourceContents:
+ switch (VERSION_NO_PHASE(operationVersion))
+ {
+ case VERSION_SUPPORTED(2,1):
+ handler.reset(new MgOpGetResourceContents());
+ break;
+ default:
+ throw new MgInvalidOperationVersionException(
+ L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
+ }
+ break;
+
case MgResourceService::opIdGetResourceHeader:
switch (VERSION_NO_PHASE(operationVersion))
{
Modified: sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.cpp
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -908,6 +908,66 @@
///----------------------------------------------------------------------------
/// <summary>
+/// Gets the contents of the specified resources.
+/// </summary>
+///
+/// <exceptions>
+/// MgException
+/// </exceptions>
+///----------------------------------------------------------------------------
+MgStringCollection* MgServerResourceService::GetResourceContents(MgStringCollection* resources,
+ MgStringCollection* preProcessTags)
+{
+ Ptr<MgStringCollection> resourceContents = new MgStringCollection();
+
+ MG_RESOURCE_SERVICE_TRY()
+
+ if (NULL == resources)
+ {
+ throw new MgNullArgumentException(
+ L"MgServerResourceService.GetResourceContents", __LINE__, __WFILE__, NULL, L"", NULL);
+ }
+ bool hasPreprocess = (NULL != preProcessTags);
+ if(hasPreprocess && resources->GetCount() != preProcessTags->GetCount())
+ {
+ throw new MgInvalidArgumentException(
+ L"MgServerResourceService.GetResourceContents", __LINE__, __WFILE__, NULL, L"", NULL);
+ }
+
+ MgLogDetail logDetail(MgServiceType::ResourceService, MgLogDetail::Trace, L"MgServerResourceService.GetResourceContents", mgStackParams);
+ logDetail.AddObject(L"Resources", resources);
+ logDetail.AddObject(L"PreProcessTags", preProcessTags);
+ logDetail.Create();
+
+ // Iterator resources to get the content
+ for(INT32 i = 0; i < resources->GetCount(); i ++)
+ {
+ STRING resource = resources->GetItem(i);
+ STRING preProcessTag = hasPreprocess ? (preProcessTags->GetItem(i)) : L"";
+
+ Ptr<MgResourceIdentifier> resourceId = new MgResourceIdentifier(resource);
+
+ Ptr<MgByteReader> byteReader;
+ auto_ptr<MgApplicationRepositoryManager> repositoryMan(
+ CreateApplicationRepositoryManager(resourceId));
+
+ MG_RESOURCE_SERVICE_BEGIN_OPERATION(false)
+
+ byteReader = repositoryMan->GetResourceContent(resourceId, preProcessTag);
+
+ MG_RESOURCE_SERVICE_END_OPERATION(sm_retryAttempts)
+
+ STRING plainText = byteReader->ToString();
+ resourceContents->Add(plainText);
+ }
+
+ MG_RESOURCE_SERVICE_CATCH_AND_THROW(L"MgServerResourceService.GetResourceContents")
+
+ return resourceContents.Detach();
+}
+
+///----------------------------------------------------------------------------
+/// <summary>
/// Gets the header associated with the specified resource.
/// </summary>
///
Modified: sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.h
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.h 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.h 2009-12-03 22:28:19 UTC (rev 4368)
@@ -62,6 +62,8 @@
MgByteReader* content, MgByteReader* header);
virtual MgByteReader* GetRepositoryContent(
MgResourceIdentifier* resource);
+ virtual MgStringCollection* GetResourceContents(MgStringCollection* resources,
+ MgStringCollection* preProcessTags);
virtual MgByteReader* GetRepositoryHeader(
MgResourceIdentifier* resource);
virtual void ApplyResourcePackage(MgByteReader* packageStream);
Modified: sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.vcproj
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.vcproj 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceService.vcproj 2009-12-03 22:28:19 UTC (rev 4368)
@@ -1093,6 +1093,46 @@
>
</File>
<File
+ RelativePath=".\OpGetResourceContents.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\OpGetResourceContents.h"
+ >
+ </File>
+ <File
RelativePath=".\OpGetResourceData.cpp"
>
<FileConfiguration
Modified: sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceServiceBuild.cpp
===================================================================
--- sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceServiceBuild.cpp 2009-12-03 05:13:48 UTC (rev 4367)
+++ sandbox/adsk/2.1/Server/src/Services/Resource/ServerResourceServiceBuild.cpp 2009-12-03 22:28:19 UTC (rev 4368)
@@ -46,6 +46,7 @@
#include "OpGetRepositoryContent.cpp"
#include "OpGetRepositoryHeader.cpp"
#include "OpGetResourceContent.cpp"
+#include "OpGetResourceContents.cpp"
#include "OpGetResourceData.cpp"
#include "OpGetResourceHeader.cpp"
#include "OpGetResourceModifiedDate.cpp"
More information about the mapguide-commits
mailing list