[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