[mapguide-commits] r7568 - in trunk/MgDev: . Common/MapGuideCommon/MapLayer Common/MapGuideCommon/Resources Common/MapGuideCommon/Services Common/Schema Common/Stylization Desktop Server/src/Services/Feature Server/src/Services/Mapping Server/src/UnitTesting Web/src/HttpHandler Web/src/mapadmin/HelpDocs Web/src/mapviewerphp Web/src/viewerfiles

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Jun 6 06:35:15 PDT 2013


Author: jng
Date: 2013-06-06 06:35:14 -0700 (Thu, 06 Jun 2013)
New Revision: 7568

Added:
   trunk/MgDev/Common/Schema/RuntimeMap-2.6.0.xsd
   trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp
   trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.h
   trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp
   trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.h
Modified:
   trunk/MgDev/
   trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.cpp
   trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.h
   trunk/MgDev/Common/MapGuideCommon/Resources/mapguide_en.res
   trunk/MgDev/Common/MapGuideCommon/Services/MappingDefs.h
   trunk/MgDev/Common/MapGuideCommon/Services/MappingService.h
   trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.cpp
   trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.h
   trunk/MgDev/Common/Stylization/SE_Renderer.cpp
   trunk/MgDev/Desktop/
   trunk/MgDev/Server/src/Services/Feature/ServerFeatureUtil.cpp
   trunk/MgDev/Server/src/Services/Mapping/Makefile.am
   trunk/MgDev/Server/src/Services/Mapping/MappingOperationFactory.cpp
   trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp
   trunk/MgDev/Server/src/Services/Mapping/MappingUtil.h
   trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.cpp
   trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.h
   trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj
   trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj.filters
   trunk/MgDev/Server/src/Services/Mapping/ServerMappingServiceBuild.cpp
   trunk/MgDev/Server/src/UnitTesting/TestMappingService.cpp
   trunk/MgDev/Server/src/UnitTesting/TestMappingService.h
   trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj
   trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj.filters
   trunk/MgDev/Web/src/HttpHandler/HttpHandlerBuild.cpp
   trunk/MgDev/Web/src/HttpHandler/HttpRequest.cpp
   trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp
   trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h
   trunk/MgDev/Web/src/HttpHandler/Makefile.am
   trunk/MgDev/Web/src/mapadmin/HelpDocs/
   trunk/MgDev/Web/src/mapadmin/HelpDocs/configuring_servers.htm
   trunk/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php
   trunk/MgDev/Web/src/viewerfiles/
   trunk/MgDev/Web/src/viewerfiles/quickplot.js
Log:
RFC 134: Merge implementation from sandbox to trunk


Property changes on: trunk/MgDev
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev:6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/rfc94:5099-5163
   + /branches/2.4/MgDev:6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/jng/createruntimemap:7486-7555
/sandbox/rfc94:5099-5163

Modified: trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.cpp
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -150,7 +150,20 @@
     MgResource::Save(resourceService, resId);
 }
 
+//////////////////////////////////////////////////////////////////
+// Save the resource
+//
+void MgSelection::Save(MgResourceService* resourceService, CREFSTRING sessionId, CREFSTRING mapName)
+{
+    if (sessionId.empty())
+    {
+        throw new MgSessionExpiredException(L"MgSelection.Save",__LINE__,__WFILE__, NULL, L"MgSelectionSaveWithEmptySession", NULL);
+    }
 
+    Ptr<MgResourceIdentifier> resId = new MgResourceIdentifier(GetResourceName(sessionId, mapName));
+    MgResource::Save(resourceService, resId);
+}
+
 //////////////////////////////////////////////////////////////////
 STRING MgSelection::GetResourceName(CREFSTRING sessionId, CREFSTRING mapName)
 {

Modified: trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Common/MapGuideCommon/MapLayer/Selection.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -189,6 +189,9 @@
     //
     virtual ~MgSelection();
 
+INTERNAL_API:
+    void Save(MgResourceService* resourceService, CREFSTRING sessionId, CREFSTRING mapName);
+
 protected:
 
     void Dispose();

Modified: trunk/MgDev/Common/MapGuideCommon/Resources/mapguide_en.res
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Resources/mapguide_en.res	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Common/MapGuideCommon/Resources/mapguide_en.res	2013-06-06 13:35:14 UTC (rev 7568)
@@ -259,6 +259,7 @@
 MgInvalidGeometryTooFewCoordinates                    = The geometry is invalid because it has too few coordinates.
 MgInvalidGeometryType                                 = The geometry type is invalid because it is not recognized.
 MgInvalidHour                                         = The hour is invalid because it must be between 0 and 23.
+MgInvalidImageFormat                                  = Invalid Image Format: %1
 MgInvalidImageSizeTooBig                              = The requested image size exceeds the maximum.
 MgInvalidIpConfigurationForSiteServer                 = The site server (%1) must have the same IP address as this local server (%2).
 MgInvalidIpConfigurationForSupportServer              = The site server (%1) must have a different IP address than this support server (%2).

Modified: trunk/MgDev/Common/MapGuideCommon/Services/MappingDefs.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/MappingDefs.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Common/MapGuideCommon/Services/MappingDefs.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -103,6 +103,8 @@
     static const int GeneratePlot2              = 0x1111EE09;
     static const int GeneratePlot3              = 0x1111EE0A;
     static const int GenerateLegendImage        = 0x1111EE0D;
+    static const int CreateRuntimeMap           = 0x1111EE0E;
+    static const int CreateRuntimeMap2          = 0x1111EE0F;
 };
 /// \endcond
 

Modified: trunk/MgDev/Common/MapGuideCommon/Services/MappingService.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/MappingService.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Common/MapGuideCommon/Services/MappingService.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -315,6 +315,7 @@
         MgMapPlotCollection* mapPlots,
         MgDwfVersion* dwfVersion) = 0;
 
+    ////////////////////////////////////////////////////////////////////////////////
     /// \brief
     /// GenerateLegendImage() returns the legend image for the specified layer.
     ///
@@ -372,6 +373,100 @@
                                               INT32 geomType,
                                               INT32 themeCategory) = 0;
 
+    ////////////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new runtime map from the specified Map Definition resource id and returns an XML-based description of the runtime
+    /// map
+    ///
+    /// <!-- Syntax in .Net, Java, and PHP -->
+    /// \htmlinclude DotNetSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude JavaSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude PHPSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    ///
+    /// \param mapDefinition (MgResourceIdentifier)
+    /// MgResourceIdentifier object identifying the map definition resource.
+    /// \param requestedFeatures (int)
+    /// A bitmask representing the desired information to return in the XML response: 
+    /// 1=Layer/Group structure, 2=Layer Icons, 4=Layer Feature Source Information
+    /// \param iconsPerScaleRange (int)
+    /// The number of legend icons per scale range to render inline in the XML response as base64 strings. 
+    /// If a scale range contains a number of rules that exceeds this value, only the first and
+    /// last rules of a type style in the scale range will have inline icons
+    ///
+    /// \remarks
+    /// The bitmask values of 2 (Layer Icons) and 4 (Layer Feature Source Information) have no effect if 1 (Layer/Group structure)
+    /// is not specified
+    ///
+    /// \return
+    /// Returns an XML-based description of the runtime map
+    ///
+    virtual MgByteReader* CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                           CREFSTRING sessionId,
+                                           INT32 requestedFeatures,
+                                           INT32 iconsPerScaleRange) = 0;
+
+    ////////////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new runtime map from the specified Map Definition resource id and returns an XML-based description of the runtime
+    /// map
+    ///
+    /// <!-- Syntax in .Net, Java, and PHP -->
+    /// \htmlinclude DotNetSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude JavaSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude PHPSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    ///
+    /// \param mapDefinition (MgResourceIdentifier)
+    /// MgResourceIdentifier object identifying the map definition resource.
+    /// \param targetMapName (String/string)
+    /// The desired name of the runtime map
+    /// \param sessionId (String/string)
+    /// The session ID
+    /// \param iconFormat (String/string)
+    /// The desired image format for icons (from MgImageFormats)
+    /// \param iconWidth (int)
+    /// The width of each individual inline legend icons. Has no effect if icons was not requested in the response.
+    /// \param iconHeight (int)
+    /// The height of each individual inline legend icons. Has no effect if icons was not requested in the response.
+    /// \param requestedFeatures (int)
+    /// A bitmask representing the desired information to return in the XML response: 
+    /// 1=Layer/Group structure, 2=Layer Icons, 4=Layer Feature Source Information
+    /// \param iconsPerScaleRange (int)
+    /// The number of legend icons per scale range to render inline in the XML response as base64 strings. 
+    /// If a scale range contains a number of rules that exceeds this value, only the first and
+    /// last rules of a type style in the scale range will have inline icons
+    ///
+    /// \remarks
+    /// The bitmask values of 2 (Layer Icons) and 4 (Layer Feature Source Information) have no effect if 1 (Layer/Group structure)
+    /// is not specified
+    ///
+    /// \return
+    /// Returns an XML-based description of the runtime map
+    ///
+    /// \exception MgInvalidArgumentException
+    /// \exception MgNullArgumentException
+    ///
+    virtual MgByteReader* CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                           CREFSTRING targetMapName,
+                                           CREFSTRING sessionId,
+                                           CREFSTRING iconFormat,
+                                           INT32 iconWidth,
+                                           INT32 iconHeight,
+                                           INT32 requestedFeatures,
+                                           INT32 iconsPerScaleRange) = 0;
+                                             
+
 EXTERNAL_API:
 
     //////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -543,7 +638,9 @@
         opIdQueryFeaturesWms        =  0x1111EE08,
         opIdGeneratePlot2           =  0x1111EE09,
         opIdGeneratePlot3           =  0x1111EE0A,
-        opIdGenerateLegendImage     =  0x1111EE0D
+        opIdGenerateLegendImage     =  0x1111EE0D,
+        opIdCreateRuntimeMap        =  0x1111EE0E,
+        opIdCreateRuntimeMap2       =  0x1111EE0F
     };
 };
 /// \}

Modified: trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.cpp
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -377,6 +377,136 @@
     return (MgByteReader*)cmd.GetReturnValue().val.m_obj;
 }
 
+////////////////////////////////////////////////////////////////////////////////
+/// \brief
+/// Creates a new runtime map from the specified Map Definition resource id and returns an XML-based description of the runtime
+/// map
+///
+/// <!-- Syntax in .Net, Java, and PHP -->
+/// \htmlinclude DotNetSyntaxTop.html
+/// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+/// \htmlinclude SyntaxBottom.html
+/// \htmlinclude JavaSyntaxTop.html
+/// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+/// \htmlinclude SyntaxBottom.html
+/// \htmlinclude PHPSyntaxTop.html
+/// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+/// \htmlinclude SyntaxBottom.html
+///
+/// \param mapDefinition (MgResourceIdentifier)
+/// MgResourceIdentifier object identifying the map definition resource.
+/// \param requestedFeatures (int)
+/// A bitmask representing the desired information to return in the XML response: 
+/// 1=Layer/Group structure, 2=Layer Icons, 4=Layer Feature Source Information
+/// \param iconsPerScaleRange (int)
+/// The number of legend icons per scale range to render inline in the XML response as base64 strings. 
+/// If a scale range contains a number of rules that exceeds this value, only the first and
+/// last rules of a type style in the scale range will have inline icons
+///
+/// \remarks
+/// The bitmask values of 2 (Layer Icons) and 4 (Layer Feature Source Information) have no effect if 1 (Layer/Group structure)
+/// is not specified
+///
+/// \return
+/// Returns an XML-based description of the runtime map
+///
+MgByteReader* MgProxyMappingService::CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                                      CREFSTRING sessionId,
+                                                      INT32 requestedFeatures,
+                                                      INT32 iconsPerScaleRange)
+{
+    MgCommand cmd;
+
+    cmd.ExecuteCommand(m_connProp,
+                       MgCommand::knObject,
+                       MgMappingServiceOpId::CreateRuntimeMap,
+                       4,
+                       Mapping_Service,
+                       BUILD_VERSION(2,6,0),
+                       MgCommand::knObject,    mapDefinition,
+                       MgCommand::knString,    sessionId,
+                       MgCommand::knInt32,     requestedFeatures,
+                       MgCommand::knInt32,     iconsPerScaleRange,
+                       MgCommand::knNone);
+
+    SetWarning(cmd.GetWarningObject());
+
+    return (MgByteReader*)cmd.GetReturnValue().val.m_obj;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+/// \brief
+/// Creates a new runtime map from the specified Map Definition resource id and returns an XML-based description of the runtime
+/// map
+///
+/// <!-- Syntax in .Net, Java, and PHP -->
+/// \htmlinclude DotNetSyntaxTop.html
+/// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+/// \htmlinclude SyntaxBottom.html
+/// \htmlinclude JavaSyntaxTop.html
+/// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+/// \htmlinclude SyntaxBottom.html
+/// \htmlinclude PHPSyntaxTop.html
+/// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+/// \htmlinclude SyntaxBottom.html
+///
+/// \param mapDefinition (MgResourceIdentifier)
+/// MgResourceIdentifier object identifying the map definition resource.
+/// \param targetMapName (String/string)
+/// The desired name of the runtime map
+/// \param sessionId (String/string)
+/// The session ID
+/// \param iconWidth (int)
+/// The width of each individual inline legend icons. Has no effect if icons was not requested in the response.
+/// \param iconHeight (int)
+/// The height of each individual inline legend icons. Has no effect if icons was not requested in the response.
+/// \param requestedFeatures (int)
+/// A bitmask representing the desired information to return in the XML response: 
+/// 1=Layer/Group structure, 2=Layer Icons, 4=Layer Feature Source Information
+/// \param iconsPerScaleRange (int)
+/// The number of legend icons per scale range to render inline in the XML response as base64 strings. 
+/// If a scale range contains a number of rules that exceeds this value, only the first and
+/// last rules of a type style in the scale range will have inline icons
+///
+/// \remarks
+/// The bitmask values of 2 (Layer Icons) and 4 (Layer Feature Source Information) have no effect if 1 (Layer/Group structure)
+/// is not specified
+///
+/// \return
+/// Returns an XML-based description of the runtime map
+///
+MgByteReader* MgProxyMappingService::CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                                      CREFSTRING targetMapName,
+                                                      CREFSTRING sessionId,
+                                                      CREFSTRING iconFormat,
+                                                      INT32 iconWidth,
+                                                      INT32 iconHeight,
+                                                      INT32 requestedFeatures,
+                                                      INT32 iconsPerScaleRange)
+{
+    MgCommand cmd;
+
+    cmd.ExecuteCommand(m_connProp,
+                       MgCommand::knObject,
+                       MgMappingServiceOpId::CreateRuntimeMap2,
+                       8,
+                       Mapping_Service,
+                       BUILD_VERSION(2,6,0),
+                       MgCommand::knObject,    mapDefinition,
+                       MgCommand::knString,    targetMapName,
+                       MgCommand::knString,    sessionId,
+                       MgCommand::knString,    iconFormat,
+                       MgCommand::knInt32,     iconWidth,
+                       MgCommand::knInt32,     iconHeight,
+                       MgCommand::knInt32,     requestedFeatures,
+                       MgCommand::knInt32,     iconsPerScaleRange,
+                       MgCommand::knNone);
+
+    SetWarning(cmd.GetWarningObject());
+
+    return (MgByteReader*)cmd.GetReturnValue().val.m_obj;
+}
+
 //////////////////////////////////////////////////////////////////
 /// \brief
 /// Sets the connection properties for the Proxy Service.  This

Modified: trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Common/MapGuideCommon/Services/ProxyMappingService.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -336,6 +336,96 @@
                                               INT32 geomType,
                                               INT32 themeCategory);
 
+    ////////////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new runtime map from the specified Map Definition resource id and returns an XML-based description of the runtime
+    /// map
+    ///
+    /// <!-- Syntax in .Net, Java, and PHP -->
+    /// \htmlinclude DotNetSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude JavaSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude PHPSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    ///
+    /// \param mapDefinition (MgResourceIdentifier)
+    /// MgResourceIdentifier object identifying the map definition resource.
+    /// \param requestedFeatures (int)
+    /// A bitmask representing the desired information to return in the XML response: 
+    /// 1=Layer/Group structure, 2=Layer Icons, 4=Layer Feature Source Information
+    /// \param iconsPerScaleRange (int)
+    /// The number of legend icons per scale range to render inline in the XML response as base64 strings. 
+    /// If a scale range contains a number of rules that exceeds this value, only the first and
+    /// last rules of a type style in the scale range will have inline icons
+    ///
+    /// \remarks
+    /// The bitmask values of 2 (Layer Icons) and 4 (Layer Feature Source Information) have no effect if 1 (Layer/Group structure)
+    /// is not specified
+    ///
+    /// \return
+    /// Returns an XML-based description of the runtime map
+    ///
+    virtual MgByteReader* CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                           CREFSTRING sessionId,
+                                           INT32 requestedFeatures,
+                                           INT32 iconsPerScaleRange);
+
+    ////////////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new runtime map from the specified Map Definition resource id and returns an XML-based description of the runtime
+    /// map
+    ///
+    /// <!-- Syntax in .Net, Java, and PHP -->
+    /// \htmlinclude DotNetSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude JavaSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude PHPSyntaxTop.html
+    /// virtual MgByteReader CreateRuntimeMap(MgResourceIdentifier mapDefinition, int iconWidth, int iconHeight, int requestedFeatures, int iconsPerScaleRange);
+    /// \htmlinclude SyntaxBottom.html
+    ///
+    /// \param mapDefinition (MgResourceIdentifier)
+    /// MgResourceIdentifier object identifying the map definition resource.
+    /// \param targetMapName (String/string)
+    /// The desired name of the runtime map
+    /// \param sessionId (String/string)
+    /// The session ID
+    /// \param iconFormat (String/string)
+    /// The desired image format for icons (from MgImageFormats)
+    /// \param iconWidth (int)
+    /// The width of each individual inline legend icons. Has no effect if icons was not requested in the response.
+    /// \param iconHeight (int)
+    /// The height of each individual inline legend icons. Has no effect if icons was not requested in the response.
+    /// \param requestedFeatures (int)
+    /// A bitmask representing the desired information to return in the XML response: 
+    /// 1=Layer/Group structure, 2=Layer Icons, 4=Layer Feature Source Information
+    /// \param iconsPerScaleRange (int)
+    /// The number of legend icons per scale range to render inline in the XML response as base64 strings. 
+    /// If a scale range contains a number of rules that exceeds this value, only the first and
+    /// last rules of a type style in the scale range will have inline icons
+    ///
+    /// \remarks
+    /// The bitmask values of 2 (Layer Icons) and 4 (Layer Feature Source Information) have no effect if 1 (Layer/Group structure)
+    /// is not specified
+    ///
+    /// \return
+    /// Returns an XML-based description of the runtime map
+    ///
+    virtual MgByteReader* CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                           CREFSTRING targetMapName,
+                                           CREFSTRING sessionId,
+                                           CREFSTRING iconFormat,
+                                           INT32 iconWidth,
+                                           INT32 iconHeight,
+                                           INT32 requestedFeatures,
+                                           INT32 iconsPerScaleRange);
+
 INTERNAL_API:
     //////////////////////////////////////////////////////////////////
     /// \brief

Added: trunk/MgDev/Common/Schema/RuntimeMap-2.6.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/RuntimeMap-2.6.0.xsd	                        (rev 0)
+++ trunk/MgDev/Common/Schema/RuntimeMap-2.6.0.xsd	2013-06-06 13:35:14 UTC (rev 7568)
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+  <xs:element name="RuntimeMap">
+    <xs:annotation>
+      <xs:documentation>Describes information about a Runtime Map, so that client applications can interact with it</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="SiteVersion" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The MapGuide Site Version</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="Name" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The name of the runtime map. This is the value required for any mapagent operation that require a MAPNAME parameter</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="MapDefinition" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The resource id of the Map Definition from which this runtime map was created from</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="BackgroundColor" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The map's background color in ARGB hex string format</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="DisplayDpi" type="xs:integer">
+          <xs:annotation>
+            <xs:documentation>The number of dots per inch of the map display</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="IconMimeType" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>The mime type of all inline icons</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="CoordinateSystem" type="CoordinateSystemType" />
+        <xs:element name="Extents" type="Envelope" />
+        <xs:element name="Group" type="RuntimeMapGroup" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element name="Layer" type="RuntimeMapLayer" minOccurs="0" maxOccurs="unbounded" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="CoordinateSystemType">
+    <xs:annotation>
+      <xs:documentation>Describes the coordinate system of the runtime map</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Wkt" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The WKT string of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MentorCode" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The CS-Map code of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="EpsgCode" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The EPSG code of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MetersPerUnit" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>The meters-per-unit value of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="RuntimeMapGroup">
+    <xs:annotation>
+      <xs:documentation>Describes a group of Runtime Map Layers</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the group</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Type" type="xs:integer">
+        <xs:annotation>
+          <xs:documentation>The type of this group. Can be tiled or dynamic. Uses the value of MgLayerGroupType</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The group's legend label</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ObjectId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The group's unique id. Use this value for turning on/off this group in a GETDYNAMICMAPOVERLAYIMAGE request</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ParentId" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The group's parent group id. Use this value for determining parent-child relationships when building a layer/group hierarchy</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DisplayInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this group should be displayed in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this group should be initially expanded in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Visible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this group is potentially visible. Note that this may be true even though the group is not visible. This will occur if one of the groups this group is organized within is not visible.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ActuallyVisible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates the actual visibility of the group. The visibility depends on the visible property of the group, and the visible property of each group this group is organized within.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="RuntimeMapLayer">
+    <xs:annotation>
+      <xs:documentation>Describes a runtime instance of a Layer Definition</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the layer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Type" type="xs:integer">
+        <xs:annotation>
+          <xs:documentation>The type of this layer. Can be tiled or dynamic. Uses the value of MgLayerType</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The layer's legend label</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ObjectId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The layer's unique id. Use this value for turning on/off this layer in a GETDYNAMICMAPOVERLAYIMAGE request</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ParentId" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The layer's parent group id. Use this value for determining parent-child relationships when building a layer/group hierarchy</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DisplayInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this layer should be displayed in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this layer should be initially expanded (if layer is themed) in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Visible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this layer is potentially visible. Note that this may be true even though the layer is not visible. This will occur if the visible flag of one of the groups this layer is organized within is not visible or when the current viewScale property of the map is outside the scale ranges defined for this layer.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ActuallyVisible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates the actual visibility of the layer. The visibility depends on the visible property of the group, and the visible property of each group this group is organized within.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LayerDefinition" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The Layer Definition from which this runtime layer was created from</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="FeatureSource" type="FeatureSourceInfo" minOccurs="0" />
+      <xs:element name="ScaleRange" type="ScaleRangeInfo" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="FeatureSourceInfo">
+    <xs:annotation>
+      <xs:documentation>Describe the Feature Source information for a runtime layer</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The Feature Source resource id</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ClassName" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The qualified FDO class name</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Geometry" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the default Geometry property</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ScaleRangeInfo">
+    <xs:annotation>
+      <xs:documentation>Describes a scale range of the runtime layer</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="MinScale" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>The minimum scale of this scale range</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxScale" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>The maximum scale of this scale range</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="FeatureStyle" type="FeatureStyleInfo" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>The feature style for a given geometry type.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="FeatureStyleInfo">
+    <xs:annotation>
+      <xs:documentation>Defines the style rules for a given geometry type</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Type" type="xs:integer">
+        <xs:annotation>
+          <xs:documentation>The geometry type that this rule is applicable to (1=point, 2=line, 3=area, 4=composite)</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Rule" type="RuleInfo" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="RuleInfo">
+    <xs:annotation>
+      <xs:documentation>Describes a stylization rule in a layer's scale range</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The legend label for this rule</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Filter" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The FDO filter that features must match in order for them to be stylized using this particular rule</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Icon" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Defines the icon for this rule. The icon's image content is in base64 format</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Envelope">
+    <xs:annotation>
+      <xs:documentation>Specifies an envelope (a rectangle) using two corner points.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LowerLeftCoordinate">
+        <xs:annotation>
+          <xs:documentation>Specifies the lower left corner of the envelope.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="X" type="xs:string"/>
+            <xs:element name="Y" type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="UpperRightCoordinate">
+        <xs:annotation>
+          <xs:documentation>Specifies the upper right corner of the envelope.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="X" type="xs:string"/>
+            <xs:element name="Y" type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
\ No newline at end of file


Property changes on: trunk/MgDev/Common/Stylization/SE_Renderer.cpp
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Common/Stylization/SE_Renderer.cpp:6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Common/Stylization/SE_Renderer.cpp:6327-6445
/sandbox/rfc94/Common/Stylization/SE_Renderer.cpp:5099-5163
/trunk/MgDev/Common/Stylization/SE_Renderer.cpp:6250-6326
   + /branches/2.4/MgDev/Common/Stylization/SE_Renderer.cpp:6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Common/Stylization/SE_Renderer.cpp:6327-6445
/sandbox/jng/createruntimemap/Common/Stylization/SE_Renderer.cpp:7486-7555
/sandbox/rfc94/Common/Stylization/SE_Renderer.cpp:5099-5163
/trunk/MgDev/Common/Stylization/SE_Renderer.cpp:6250-6326


Property changes on: trunk/MgDev/Desktop
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Desktop:6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006,7152
/branches/2.5/MgDev/Desktop:7511
/sandbox/rfc94/Desktop:5099-5163
   + /branches/2.4/MgDev/Desktop:6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006,7152
/branches/2.5/MgDev/Desktop:7511
/sandbox/jng/createruntimemap/Desktop:7486-7555
/sandbox/rfc94/Desktop:5099-5163


Property changes on: trunk/MgDev/Server/src/Services/Feature/ServerFeatureUtil.cpp
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Server/src/Services/Feature/ServerFeatureUtil.cpp:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Server/src/Services/Feature/ServerFeatureUtil.cpp:6327-6481
/sandbox/rfc94/Server/src/Services/Feature/ServerFeatureUtil.cpp:5099-5163
/trunk/MgDev/Server/src/Services/Feature/ServerFeatureUtil.cpp:6250-6326
   + /branches/2.4/MgDev/Server/src/Services/Feature/ServerFeatureUtil.cpp:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Server/src/Services/Feature/ServerFeatureUtil.cpp:6327-6481
/sandbox/jng/createruntimemap/Server/src/Services/Feature/ServerFeatureUtil.cpp:7486-7555
/sandbox/rfc94/Server/src/Services/Feature/ServerFeatureUtil.cpp:5099-5163
/trunk/MgDev/Server/src/Services/Feature/ServerFeatureUtil.cpp:6250-6326

Modified: trunk/MgDev/Server/src/Services/Mapping/Makefile.am
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/Makefile.am	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/Makefile.am	2013-06-06 13:35:14 UTC (rev 7568)
@@ -35,6 +35,7 @@
   MappingOperationFactory.cpp \
   MappingServiceHandler.cpp \
   MappingUtil.cpp \
+  OpCreateRuntimeMap.cpp \
   OpGenerateLegendImage.cpp \
   OpGenerateLegendPlot.cpp \
   OpGenerateMap.cpp \
@@ -56,6 +57,7 @@
   MappingOperationFactory.h \
   MappingServiceHandler.h \
   MappingUtil.h \
+  OpCreateRuntimeMap.h \
   OpGenerateLegendImage.h \
   OpGenerateLegendPlot.h \
   OpGenerateMap.h \

Modified: trunk/MgDev/Server/src/Services/Mapping/MappingOperationFactory.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/MappingOperationFactory.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/MappingOperationFactory.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -18,6 +18,7 @@
 #include "ServerMappingServiceDefs.h"
 #include "MappingOperationFactory.h"
 
+#include "OpCreateRuntimeMap.h"
 #include "OpGenerateMap.h"
 #include "OpGenerateMapUpdate.h"
 #include "OpGeneratePlot.h"
@@ -195,6 +196,30 @@
         }
         break;
 
+    case MgMappingService::opIdCreateRuntimeMap:
+        switch (VERSION_NO_PHASE(operationVersion))
+        {
+        case VERSION_SUPPORTED(2,6):
+            handler.reset(new MgOpCreateRuntimeMap());
+            break;
+        default:
+            throw new MgInvalidOperationVersionException(
+                L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
+        }
+        break;
+
+    case MgMappingService::opIdCreateRuntimeMap2:
+        switch (VERSION_NO_PHASE(operationVersion))
+        {
+        case VERSION_SUPPORTED(2,6):
+            handler.reset(new MgOpCreateRuntimeMap());
+            break;
+        default:
+            throw new MgInvalidOperationVersionException(
+                L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
+        }
+        break;
+
     default:
         throw new MgInvalidOperationException(
             L"MgMappingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);

Modified: trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -1201,7 +1201,8 @@
                                      MdfModel::FeatureTypeStyle* fts,
                                      INT32 imgWidth,
                                      INT32 imgHeight,
-                                     INT32 themeCategory)
+                                     INT32 themeCategory,
+                                     CREFSTRING format)
 {
     if (!fts)
         return NULL;
@@ -1219,9 +1220,6 @@
     // draw the preview
     StylizationUtil::DrawStylePreview(imgWidth, imgHeight, themeCategory, fts, &er, &se_sman);
 
-    // TODO: use user-specified format
-    RS_String format = L"PNG";
-
     auto_ptr<RS_ByteData> data;
     data.reset(er.Save(format, imgWidth, imgHeight));
 
@@ -1229,8 +1227,14 @@
     {
         // put this into a byte source
         Ptr<MgByteSource> bs = new MgByteSource(data->GetBytes(), data->GetNumBytes());
-        bs->SetMimeType(MgMimeType::Png);
 
+        if (format == MgImageFormats::Gif)
+            bs->SetMimeType(MgMimeType::Gif);
+        else if (format == MgImageFormats::Jpeg)
+            bs->SetMimeType(MgMimeType::Jpeg);
+        else if (format == MgImageFormats::Png || format == MgImageFormats::Png8)
+            bs->SetMimeType(MgMimeType::Png);
+
         return bs->GetReader();
     }
 


Property changes on: trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Server/src/Services/Mapping/MappingUtil.cpp:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Server/src/Services/Mapping/MappingUtil.cpp:6327-6535
/sandbox/rfc94/Server/src/Services/Mapping/MappingUtil.cpp:5099-5163
/trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp:6250-6326
   + /branches/2.4/MgDev/Server/src/Services/Mapping/MappingUtil.cpp:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Server/src/Services/Mapping/MappingUtil.cpp:6327-6535
/sandbox/jng/createruntimemap/Server/src/Services/Mapping/MappingUtil.cpp:7486-7555
/sandbox/rfc94/Server/src/Services/Mapping/MappingUtil.cpp:5099-5163
/trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp:6250-6326

Modified: trunk/MgDev/Server/src/Services/Mapping/MappingUtil.h
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/MappingUtil.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/MappingUtil.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -86,7 +86,7 @@
 
     static MdfModel::MapDefinition* GetMapDefinition(MgResourceService* svcResource, MgResourceIdentifier* resId);
 
-    static MgByteReader* DrawFTS(MgResourceService* svcResource, MdfModel::FeatureTypeStyle* fts, INT32 imgWidth, INT32 imgHeight, INT32 themeCategory);
+    static MgByteReader* DrawFTS(MgResourceService* svcResource, MdfModel::FeatureTypeStyle* fts, INT32 imgWidth, INT32 imgHeight, INT32 themeCategory, CREFSTRING format = L"PNG");
     static double ComputeStylizationOffset(MgMap* map, MdfModel::VectorScaleRange* scaleRange, double scale);
 
     static MgEnvelope* TransformExtent(MgEnvelope* extent, MgCoordinateSystemTransform* xform);

Added: trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp	                        (rev 0)
+++ trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -0,0 +1,162 @@
+//
+//  Copyright (C) 2004-2013 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 "ServerMappingServiceDefs.h"
+#include "OpCreateRuntimeMap.h"
+
+
+///----------------------------------------------------------------------------
+/// <summary>
+/// Constructs the object.
+/// </summary>
+///----------------------------------------------------------------------------
+MgOpCreateRuntimeMap::MgOpCreateRuntimeMap()
+{
+}
+
+
+///----------------------------------------------------------------------------
+/// <summary>
+/// Destructs the object.
+/// </summary>
+///----------------------------------------------------------------------------
+MgOpCreateRuntimeMap::~MgOpCreateRuntimeMap()
+{
+}
+
+
+///----------------------------------------------------------------------------
+/// <summary>
+/// Executes the operation.
+/// </summary>
+///
+/// <exceptions>
+/// MgException
+/// </exceptions>
+///----------------------------------------------------------------------------
+void MgOpCreateRuntimeMap::Execute()
+{
+    ACE_DEBUG((LM_DEBUG, ACE_TEXT("  (%t) MgOpCreateRuntimeMap::Execute()\n")));
+
+    MG_LOG_OPERATION_MESSAGE(L"CreateRuntimeMap");
+
+    MG_TRY()
+
+    MG_LOG_OPERATION_MESSAGE_INIT(m_packet.m_OperationVersion, m_packet.m_NumArguments);
+
+    ACE_ASSERT(m_stream != NULL);
+
+    if (8 == m_packet.m_NumArguments)
+    {
+        STRING targetMapName;
+        STRING sessionId;
+        STRING iconFormat;
+        INT32 iconWidth, iconHeight, requestedFeatures, iconsPerScaleRange;
+
+        Ptr<MgResourceIdentifier> mapDefinition = (MgResourceIdentifier*)m_stream->GetObject();
+        m_stream->GetString(targetMapName);
+        m_stream->GetString(sessionId);
+        m_stream->GetString(iconFormat);
+        m_stream->GetInt32(iconWidth);
+        m_stream->GetInt32(iconHeight);
+        m_stream->GetInt32(requestedFeatures);
+        m_stream->GetInt32(iconsPerScaleRange);
+
+        BeginExecution();
+
+        MG_LOG_OPERATION_MESSAGE_PARAMETERS_START();
+        MG_LOG_OPERATION_MESSAGE_ADD_STRING((NULL == mapDefinition) ? L"MgResourceIdentifier" : mapDefinition->ToString().c_str());
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_STRING(targetMapName);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_STRING(sessionId);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_STRING(iconFormat);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_INT32(iconWidth);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_INT32(iconHeight);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_INT32(requestedFeatures);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_INT32(iconsPerScaleRange);
+        MG_LOG_OPERATION_MESSAGE_PARAMETERS_END();
+
+        Validate();
+
+        Ptr<MgByteReader> byteReader =
+            m_service->CreateRuntimeMap(mapDefinition, targetMapName, sessionId, iconFormat, iconWidth, iconHeight, requestedFeatures, iconsPerScaleRange);
+
+        EndExecution(byteReader);
+    }
+    else if (4 == m_packet.m_NumArguments)
+    {
+        STRING sessionId;
+        INT32 requestedFeatures, iconsPerScaleRange;
+
+        Ptr<MgResourceIdentifier> mapDefinition = (MgResourceIdentifier*)m_stream->GetObject();
+        m_stream->GetString(sessionId);
+        m_stream->GetInt32(requestedFeatures);
+        m_stream->GetInt32(iconsPerScaleRange);
+
+        BeginExecution();
+
+        MG_LOG_OPERATION_MESSAGE_PARAMETERS_START();
+        MG_LOG_OPERATION_MESSAGE_ADD_STRING((NULL == mapDefinition) ? L"MgResourceIdentifier" : mapDefinition->ToString().c_str());
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_STRING(sessionId);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_INT32(requestedFeatures);
+        MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+        MG_LOG_OPERATION_MESSAGE_ADD_INT32(iconsPerScaleRange);
+        MG_LOG_OPERATION_MESSAGE_PARAMETERS_END();
+
+        Validate();
+
+        Ptr<MgByteReader> byteReader =
+            m_service->CreateRuntimeMap(mapDefinition, sessionId, requestedFeatures, iconsPerScaleRange);
+
+        EndExecution(byteReader);
+    }
+    else
+    {
+        MG_LOG_OPERATION_MESSAGE_PARAMETERS_START();
+        MG_LOG_OPERATION_MESSAGE_PARAMETERS_END();
+    }
+
+    if (!m_argsRead)
+    {
+        throw new MgOperationProcessingException(L"MgOpCreateRuntimeMap.Execute",
+            __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    // Successful operation
+    MG_LOG_OPERATION_MESSAGE_ADD_STRING(MgResources::Success.c_str());
+
+    MG_CATCH(L"MgOpCreateRuntimeMap.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_THROW()
+}

Added: trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.h
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.h	                        (rev 0)
+++ trunk/MgDev/Server/src/Services/Mapping/OpCreateRuntimeMap.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -0,0 +1,31 @@
+//
+//  Copyright (C) 2004-2013 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 MG_OP_CREATE_RUNTIME_MAP_H
+#define MG_OP_CREATE_RUNTIME_MAP_H
+
+class MgOpCreateRuntimeMap : public MgMappingOperation
+{
+    public:
+        MgOpCreateRuntimeMap();
+        virtual ~MgOpCreateRuntimeMap();
+
+    public:
+        virtual void Execute();
+};
+
+#endif
\ No newline at end of file

Modified: trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -43,7 +43,12 @@
 
 #define LEGEND_BITMAP_SIZE 16
 
+#define REQUEST_LAYER_STRUCTURE         1 /* Request layer and group structure */
+#define REQUEST_LAYER_ICONS             2 /* Request layer scale and icon information */
+#define REQUEST_LAYER_FEATURE_SOURCE    4 /* Request information about a layer's feature source */
 
+typedef std::map<STRING, MdfModel::LayerDefinition*> LayerDefinitionMap;
+
 //for use by observation mesh transformation
 const STRING SRS_LL84 = L"GEOGCS[\"LL84\",DATUM[\"WGS84\",SPHEROID[\"WGS84\",6378137,298.25722293287],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"Degrees\",0.01745329252]]";
 
@@ -1685,7 +1690,7 @@
             }
 
             if (fts)
-                byteReader = MgMappingUtil::DrawFTS(m_svcResource, fts, imgWidth, imgHeight, themeCategory);
+                byteReader = MgMappingUtil::DrawFTS(m_svcResource, fts, imgWidth, imgHeight, themeCategory, format);
             else
             {
                 //return the fixed array
@@ -1856,3 +1861,466 @@
 {
     // Do nothing.  No connection properties are required for Server-side service objects.
 }
+
+MgByteReader* MgServerMappingService::CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                                       CREFSTRING sessionId,
+                                                       INT32 requestedFeatures,
+                                                       INT32 iconsPerScaleRange)
+{
+    CHECKNULL(mapDefinition, L"MgServerMappingService.CreateRuntimeMap");
+    STRING mapName = mapDefinition->GetName();
+    return CreateRuntimeMap(mapDefinition, mapName, sessionId, MgImageFormats::Png, LEGEND_BITMAP_SIZE, LEGEND_BITMAP_SIZE, requestedFeatures, iconsPerScaleRange);
+}
+
+MgByteReader* MgServerMappingService::CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                                       CREFSTRING targetMapName,
+                                                       CREFSTRING sessionId,
+                                                       CREFSTRING iconFormat,
+                                                       INT32 iconWidth,
+                                                       INT32 iconHeight,
+                                                       INT32 requestedFeatures,
+                                                       INT32 iconsPerScaleRange)
+{
+    CHECKARGUMENTNULL(mapDefinition, L"MgServerMappingService.CreateRuntimeMap");
+    LayerDefinitionMap layerDefinitionMap;
+    if (MgImageFormats::Png != iconFormat &&
+        MgImageFormats::Gif != iconFormat &&
+        MgImageFormats::Png8 != iconFormat &&
+        MgImageFormats::Jpeg != iconFormat)
+    {
+        MgStringCollection args;
+        args.Add(iconFormat);
+        throw new MgInvalidArgumentException(L"MgServerMappingService.CreateRuntimeMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageFormat", &args);
+    }
+    Ptr<MgByteReader> byteReader;
+
+    MG_SERVER_MAPPING_SERVICE_TRY()
+
+    if (m_svcResource == NULL)
+        InitializeResourceService();
+
+    Ptr<MgSiteConnection> siteConn = new MgSiteConnection();
+    Ptr<MgUserInformation> userInfo = new MgUserInformation(sessionId);
+    siteConn->Open(userInfo);
+    Ptr<MgMap> map = new MgMap(siteConn);
+    map->Create(mapDefinition, targetMapName);
+    
+    STRING sStateId = L"Session:";
+    sStateId += sessionId;
+    sStateId += L"//";
+    sStateId += targetMapName;
+    sStateId += L".";
+    sStateId += MgResourceType::Map;
+
+    Ptr<MgResourceIdentifier> mapStateId = new MgResourceIdentifier(sStateId);
+    Ptr<MgSelection> sel = new MgSelection(map);
+    //Call our special Save() API that doesn't try to look for a MgUserInformation that's not
+    //there
+    sel->Save(m_svcResource, sessionId, targetMapName);
+    map->Save(m_svcResource, mapStateId);
+
+    //TODO: Possible future caching opportunity?
+    std::string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";  // NOXLATE
+    xml.append("<RuntimeMap xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"RuntimeMap-2.6.0.xsd\">\n");
+    // ------------------------------ Site Version ----------------------------------//
+    xml.append("<SiteVersion>");
+    MgServerManager* serverMgr = MgServerManager::GetInstance();
+    xml.append(MgUtil::WideCharToMultiByte(serverMgr->GetSiteVersion()));
+    xml.append("</SiteVersion>\n");
+    // ------------------------------ Session ID --------------------------------- //
+    xml.append("<SessionId>");
+    xml.append(MgUtil::WideCharToMultiByte(sessionId));
+    xml.append("</SessionId>\n");
+    // ------------------------------ Map Name --------------------------------- //
+    xml.append("<Name>");
+    xml.append(MgUtil::WideCharToMultiByte(targetMapName));
+    xml.append("</Name>\n");
+    // ------------------------------ Map Definition ID --------------------------------- //
+    xml.append("<MapDefinition>");
+    xml.append(MgUtil::WideCharToMultiByte(mapDefinition->ToString()));
+    xml.append("</MapDefinition>\n");
+    // ------------------------------ Background Color ---------------------------------- //
+    xml.append("<BackgroundColor>");
+    xml.append(MgUtil::WideCharToMultiByte(map->GetBackgroundColor()));
+    xml.append("</BackgroundColor>\n");
+    // ------------------------------ Display DPI --------------------------------------- //
+    xml.append("<DisplayDpi>");
+    std::string sDpi;
+    MgUtil::Int32ToString(map->GetDisplayDpi(), sDpi);
+    xml.append(sDpi);
+    xml.append("</DisplayDpi>\n");
+    // ------------------------------ Icon Image Format --------------------------------- //
+    if ((requestedFeatures & REQUEST_LAYER_ICONS) == REQUEST_LAYER_ICONS)
+    {
+        xml.append("<IconMimeType>");
+        if (iconFormat == MgImageFormats::Gif)
+            xml.append(MgUtil::WideCharToMultiByte(MgMimeType::Gif));
+        else if (iconFormat == MgImageFormats::Jpeg)
+            xml.append(MgUtil::WideCharToMultiByte(MgMimeType::Jpeg));
+        else if (iconFormat == MgImageFormats::Png || iconFormat == MgImageFormats::Png8)
+            xml.append(MgUtil::WideCharToMultiByte(MgMimeType::Png));
+        xml.append("</IconMimeType>\n");
+    }
+    // ------------------------------ Coordinate System --------------------------------- //
+    xml.append("<CoordinateSystem>\n");
+    xml.append("<Wkt>");
+    STRING srs = map->GetMapSRS();
+    xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(srs)));
+    xml.append("</Wkt>\n");
+    Ptr<MgCoordinateSystemFactory> fact = new MgCoordinateSystemFactory();
+    std::string sEpsg;
+    std::string sMentor;
+    std::string sMpu;
+    try
+    {
+        Ptr<MgCoordinateSystem> cs = fact->Create(srs);
+        if (!srs.empty())
+            MgUtil::DoubleToString(cs->ConvertCoordinateSystemUnitsToMeters(1.0), sMpu);
+        else
+            sMpu = "1.0";
+        sMentor = MgUtil::WideCharToMultiByte(cs->GetCsCode());
+        INT32 epsg = cs->GetEpsgCode();
+        MgUtil::Int32ToString(epsg, sEpsg);
+    }
+    catch (MgException* ex)
+    {
+        SAFE_RELEASE(ex);
+    }
+    xml.append("<MentorCode>");
+    xml.append(sMentor);
+    xml.append("</MentorCode>\n");
+    xml.append("<EpsgCode>");
+    xml.append(sEpsg);
+    xml.append("</EpsgCode>\n");
+    xml.append("<MetersPerUnit>");
+    xml.append(sMpu);
+    xml.append("</MetersPerUnit>\n");
+    xml.append("</CoordinateSystem>");
+    // ------------------------------ Extents --------------------------------- //
+    std::string sExtents;
+    Ptr<MgEnvelope> extents = map->GetMapExtent();
+    extents->ToXml(sExtents);
+    xml.append("<Extents>\n");
+    xml.append(sExtents);
+    xml.append("</Extents>");
+    // ---------------------- Optional things if requested -------------------- //
+    if ((requestedFeatures & REQUEST_LAYER_STRUCTURE) == REQUEST_LAYER_STRUCTURE)
+    {
+        //Build our LayerDefinition map for code below that requires it
+        if ((requestedFeatures & REQUEST_LAYER_ICONS) == REQUEST_LAYER_ICONS)
+        {
+            Ptr<MgStringCollection> layerIds = new MgStringCollection();
+            Ptr<MgLayerCollection> layers = map->GetLayers();
+            for (INT32 i = 0; i < layers->GetCount(); i++)
+            {
+                Ptr<MgLayerBase> layer = layers->GetItem(i);
+                Ptr<MgResourceIdentifier> ldfId = layer->GetLayerDefinition();
+                layerIds->Add(ldfId->ToString());
+            }
+
+            Ptr<MgStringCollection> layerContents = m_svcResource->GetResourceContents(layerIds, NULL);
+            for (INT32 i = 0; i < layerIds->GetCount(); i++)
+            {
+                STRING ldfId = layerIds->GetItem(i);
+                STRING content = layerContents->GetItem(i);
+                MdfModel::LayerDefinition* ldf = MgLayerBase::GetLayerDefinition(content);
+                layerDefinitionMap[ldfId] = ldf;
+            }
+        }
+
+        // ----------- Some pre-processing before we do groups/layers ------------- //
+        Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
+        Ptr<MgLayerCollection> layers = map->GetLayers();
+        for (INT32 i = 0; i < groups->GetCount(); i++)
+        {
+            Ptr<MgLayerGroup> group = groups->GetItem(i);
+            Ptr<MgLayerGroup> parent = group->GetGroup();
+            CreateGroupItem(group, parent, xml);
+        }
+        for (INT32 i = 0; i < layers->GetCount(); i++)
+        {
+            Ptr<MgLayerBase> layer = layers->GetItem(i);
+            Ptr<MgLayerGroup> parent = layer->GetGroup();
+            
+            MdfModel::LayerDefinition* layerDef = NULL;
+            Ptr<MgResourceIdentifier> layerid = layer->GetLayerDefinition();
+            LayerDefinitionMap::iterator it = layerDefinitionMap.find(layerid->ToString());
+            if (it != layerDefinitionMap.end())
+                layerDef = it->second;
+
+            CreateLayerItem(requestedFeatures, iconsPerScaleRange, iconFormat, iconWidth, iconHeight, layer, parent, layerDef, xml);
+        }
+    }
+    else //Base Layer Groups need to be outputted regardless, otherwise a client application doesn't have enough information to build GETTILEIMAGE requests
+    {
+        Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
+        for (INT32 i = 0; i < groups->GetCount(); i++)
+        {
+            Ptr<MgLayerGroup> group = groups->GetItem(i);
+            if (group->GetLayerGroupType() != MgLayerGroupType::BaseMap)
+                continue;
+
+            Ptr<MgLayerGroup> parent = group->GetGroup();
+            CreateGroupItem(group, parent, xml);
+        }
+    }
+    // ------------------------ Finite Display Scales (if any) ------------------------- //
+    INT32 fsCount = map->GetFiniteDisplayScaleCount();
+    if (fsCount > 0)
+    {
+        for (INT32 i = 0; i < fsCount; i++)
+        {
+            xml.append("<FiniteDisplayScale>");
+            double dScale = map->GetFiniteDisplayScaleAt(i);
+            std::string sScale;
+            MgUtil::DoubleToString(dScale, sScale);
+            xml.append(sScale);
+            xml.append("</FiniteDisplayScale>\n");
+        }
+    }
+    xml.append("</RuntimeMap>");
+
+    Ptr<MgByteSource> byteSource = new MgByteSource((BYTE_ARRAY_IN)xml.c_str(), (INT32)xml.length());
+    byteSource->SetMimeType(MgMimeType::Xml);
+    byteReader = byteSource->GetReader();
+
+    MG_SERVER_MAPPING_SERVICE_CATCH(L"MgServerMappingService.CreateRuntimeMap")
+
+    //Cleanup our LayerDefinition pointers. Do it here so we don't leak on any exception
+    for (LayerDefinitionMap::iterator it = layerDefinitionMap.begin(); it != layerDefinitionMap.end(); it++)
+    {
+        MdfModel::LayerDefinition* ldf = it->second;
+        delete ldf;
+    }
+    layerDefinitionMap.clear();
+
+    MG_SERVER_MAPPING_SERVICE_THROW()
+
+    return byteReader.Detach();
+}
+
+void MgServerMappingService::CreateGroupItem(MgLayerGroup* group, MgLayerGroup* parent, std::string& xml)
+{
+    MG_SERVER_MAPPING_SERVICE_TRY()
+
+    STRING groupName = group->GetName();
+    xml.append("<Group>\n");
+    xml.append("<Name>");
+    xml.append(MgUtil::WideCharToMultiByte(groupName));
+    xml.append("</Name>\n");
+    xml.append("<Type>");
+    INT32 gType = group->GetLayerGroupType();
+    std::string sType;
+    MgUtil::Int32ToString(gType, sType);
+    xml.append(sType);
+    xml.append("</Type>\n");
+    xml.append("<LegendLabel>");
+    xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(group->GetLegendLabel())));
+    xml.append("</LegendLabel>\n");
+    xml.append("<ObjectId>");
+    xml.append(MgUtil::WideCharToMultiByte(group->GetObjectId()));
+    xml.append("</ObjectId>\n");
+    if (NULL != parent)
+    {
+        xml.append("<ParentId>");
+        xml.append(MgUtil::WideCharToMultiByte(parent->GetObjectId()));
+        xml.append("</ParentId>\n");
+    }
+    xml.append("<DisplayInLegend>");
+    xml.append(group->GetDisplayInLegend() ? "true" : "false");
+    xml.append("</DisplayInLegend>\n");
+    xml.append("<ExpandInLegend>");
+    xml.append(group->GetExpandInLegend() ? "true" : "false");
+    xml.append("</ExpandInLegend>\n");
+    xml.append("<Visible>");
+    xml.append(group->GetVisible() ? "true" : "false");
+    xml.append("</Visible>\n");
+    xml.append("<ActuallyVisible>");
+    xml.append(group->IsVisible() ? "true" : "false");
+    xml.append("</ActuallyVisible>\n");
+    xml.append("</Group>");
+
+    MG_SERVER_MAPPING_SERVICE_CATCH_AND_THROW(L"MgServerMappingService.CreateGroupItem")
+}
+
+void MgServerMappingService::CreateLayerItem(INT32 requestedFeatures, INT32 iconsPerScaleRange, CREFSTRING iconFormat, INT32 iconWidth, INT32 iconHeight, MgLayerBase* layer, MgLayerGroup* parent, MdfModel::LayerDefinition* ldf, std::string& xml)
+{
+    MG_SERVER_MAPPING_SERVICE_TRY()
+
+    xml.append("<Layer>\n");
+    xml.append("<Name>");
+    xml.append(MgUtil::WideCharToMultiByte(layer->GetName()));
+    xml.append("</Name>\n");
+    xml.append("<Type>");
+    std::string sLayerType;
+    MgUtil::Int32ToString(layer->GetLayerType(), sLayerType);
+    xml.append(sLayerType);
+    xml.append("</Type>\n");
+    xml.append("<LegendLabel>");
+    xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(layer->GetLegendLabel())));
+    xml.append("</LegendLabel>\n");
+    xml.append("<ObjectId>");
+    xml.append(MgUtil::WideCharToMultiByte(layer->GetObjectId()));
+    xml.append("</ObjectId>\n");
+    if (NULL != parent)
+    {
+        xml.append("<ParentId>");
+        xml.append(MgUtil::WideCharToMultiByte(parent->GetObjectId()));
+        xml.append("</ParentId>\n");
+    }
+    xml.append("<Selectable>");
+    xml.append(layer->GetSelectable() ? "true" : "false");
+    xml.append("</Selectable>\n");
+    xml.append("<DisplayInLegend>");
+    xml.append(layer->GetDisplayInLegend() ? "true" : "false");
+    xml.append("</DisplayInLegend>\n");
+    xml.append("<ExpandInLegend>");
+    xml.append(layer->GetExpandInLegend() ? "true" : "false");
+    xml.append("</ExpandInLegend>\n");
+    xml.append("<Visible>");
+    xml.append(layer->GetVisible() ? "true" : "false");
+    xml.append("</Visible>\n");
+    xml.append("<ActuallyVisible>");
+    xml.append(layer->IsVisible() ? "true" : "false");
+    xml.append("</ActuallyVisible>\n");
+    xml.append("<LayerDefinition>");
+    Ptr<MgResourceIdentifier> layerDefId = layer->GetLayerDefinition();
+    STRING ldfId = layerDefId->ToString();
+    xml.append(MgUtil::WideCharToMultiByte(ldfId));
+    xml.append("</LayerDefinition>\n");
+    // ----------------------- Optional things if requested ------------------------- //
+    if ((requestedFeatures & REQUEST_LAYER_FEATURE_SOURCE) == REQUEST_LAYER_FEATURE_SOURCE)
+    {
+        xml.append("<FeatureSource>\n");
+        xml.append("<ResourceId>");
+        xml.append(MgUtil::WideCharToMultiByte(layer->GetFeatureSourceId()));
+        xml.append("</ResourceId>\n");
+        xml.append("<ClassName>");
+        xml.append(MgUtil::WideCharToMultiByte(layer->GetFeatureClassName()));
+        xml.append("</ClassName>\n");
+        xml.append("<Geometry>");
+        xml.append(MgUtil::WideCharToMultiByte(layer->GetFeatureGeometryName()));
+        xml.append("</Geometry>\n");
+        xml.append("</FeatureSource>\n");
+    }
+    
+    if (NULL != ldf)
+    {
+        MdfModel::VectorLayerDefinition* vl = dynamic_cast<MdfModel::VectorLayerDefinition*>(ldf);
+        if (NULL != vl)
+        {
+            MdfModel::VectorScaleRangeCollection* vsrs = vl->GetScaleRanges();
+            for (INT32 i = 0; i < vsrs->GetCount(); i++)
+            {
+                MdfModel::VectorScaleRange* vsr = vsrs->GetAt(i);
+                xml.append("<ScaleRange>\n");
+                xml.append("<MinScale>");
+                std::string sMinScale;
+                MgUtil::DoubleToString(vsr->GetMinScale(), sMinScale);
+                xml.append(sMinScale);
+                xml.append("</MinScale>\n");
+                xml.append("<MaxScale>");
+                std::string sMaxScale;
+                MgUtil::DoubleToString(vsr->GetMaxScale(), sMaxScale);
+                xml.append(sMaxScale);
+                xml.append("</MaxScale>\n");
+
+                double dScale = (vsr->GetMaxScale() + vsr->GetMinScale()) / 2.0;
+                MdfModel::FeatureTypeStyleCollection* ftsc = vsr->GetFeatureTypeStyles();
+
+                INT32 nIconCount = 0;
+                for (INT32 j = 0; j < ftsc->GetCount(); j++)
+                {
+                    MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(j);
+                    if (fts->IsShowInLegend())
+                    {
+                        MdfModel::RuleCollection* rules = fts->GetRules();
+                        nIconCount += rules->GetCount();
+                    }
+                }
+
+                //This theme will be compressed if we're over the specified limit for this scale range
+                bool bCompress = (nIconCount > iconsPerScaleRange);
+
+                for (INT32 j = 0; j < ftsc->GetCount(); j++)
+                {
+                    MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(j);
+                    if (!fts->IsShowInLegend())
+                        continue;
+
+                    MdfModel::PointTypeStyle*       pts = dynamic_cast<MdfModel::PointTypeStyle*>(fts);
+                    MdfModel::LineTypeStyle*        lts = dynamic_cast<MdfModel::LineTypeStyle*>(fts);
+                    MdfModel::AreaTypeStyle*        ats = dynamic_cast<MdfModel::AreaTypeStyle*>(fts);
+                    MdfModel::CompositeTypeStyle*   cts = dynamic_cast<MdfModel::CompositeTypeStyle*>(fts);
+                        
+                    INT32 geomType = 0;
+                    if (pts)
+                        geomType = 1;
+                    else if (lts)
+                        geomType = 2;
+                    else if (ats)
+                        geomType = 3;
+                    else if (cts)
+                        geomType = 4;
+
+                    //Geometry type and Theme Category are required so that deferred icon requests can be made
+                    //back to the GetLegendImage(), especially if we exceed the icons-per-scale-range limit
+                    //Geometry type is specified here, theme category is inferred from rule item positioning.
+                    xml.append("<FeatureStyle>\n");
+                    xml.append("<Type>");
+                    std::string sGeomType;
+                    MgUtil::Int32ToString(geomType, sGeomType);
+                    xml.append(sGeomType);
+                    xml.append("</Type>\n");
+                    MdfModel::RuleCollection* rules = fts->GetRules();
+                    for (INT32 r = 0; r < rules->GetCount(); r++)
+                    {
+                        MdfModel::Rule* rule = rules->GetAt(r);
+                        bool bRequestIcon = false;
+                        if (!bCompress)
+                        {
+                            bRequestIcon = true;
+                        }
+                        else //This is a compressed theme
+                        {
+                            bRequestIcon = (r == 0 || r == rules->GetCount() - 1); //Only first and last rule
+                        }
+
+                        xml.append("<Rule>\n");
+                        xml.append("<LegendLabel>");
+                        xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(rule->GetLegendLabel())));
+                        xml.append("</LegendLabel>\n");
+                        xml.append("<Filter>");
+                        xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(rule->GetFilter())));
+                        xml.append("</Filter>\n");
+                        if (bRequestIcon)
+                        {
+                            xml.append("<Icon>");
+                            Ptr<MgByteReader> iconReader = MgMappingUtil::DrawFTS(m_svcResource, fts, iconWidth, iconHeight, r, iconFormat);
+                            Ptr<MgByteSink> sink = new MgByteSink(iconReader);
+                            Ptr<MgByte> bytes = sink->ToBuffer();
+                            Ptr<MgMemoryStreamHelper> streamHelper = new MgMemoryStreamHelper((INT8*) bytes->Bytes(), bytes->GetLength(), false);
+                            std::string b64 = streamHelper->ToBase64();
+                            xml.append(b64);
+                            xml.append("</Icon>");
+                        }
+                        xml.append("</Rule>\n");
+                    }
+                    xml.append("</FeatureStyle>\n");
+                }
+
+                xml.append("</ScaleRange>\n");
+            }
+        }
+        else
+        {
+            xml.append("<ScaleRange/>");
+        }
+    }
+    else
+        xml.append("<ScaleRange/>");
+
+    xml.append("</Layer>");
+
+    MG_SERVER_MAPPING_SERVICE_CATCH_AND_THROW(L"MgServerMappingService.CreateLayerItem")
+}
\ No newline at end of file

Modified: trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.h
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -116,11 +116,27 @@
             INT32 geomType,
             INT32 themeCategory);
 
+        virtual MgByteReader* CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                               CREFSTRING sessionId,
+                                               INT32 requestedFeatures,
+                                               INT32 iconsPerScaleRange);
+
+        virtual MgByteReader* CreateRuntimeMap(MgResourceIdentifier* mapDefinition,
+                                               CREFSTRING targetMapName,
+                                               CREFSTRING sessionId,
+                                               CREFSTRING iconFormat,
+                                               INT32 iconWidth,
+                                               INT32 iconHeight,
+                                               INT32 requestedFeatures,
+                                               INT32 iconsPerScaleRange);
+
         void SetConnectionProperties(MgConnectionProperties* connProp);
 
 // Data Members
 
     private:
+        void CreateGroupItem(MgLayerGroup* group, MgLayerGroup* parent, std::string& xml);
+        void CreateLayerItem(INT32 requestedFeatures, INT32 iconsPerScaleRange, CREFSTRING iconFormat, INT32 iconWidth, INT32 iconHeight, MgLayerBase* layer, MgLayerGroup* parent, MdfModel::LayerDefinition* ldf, std::string& xml);
         bool FeatureTypeStyleSupportsGeomType(MdfModel::FeatureTypeStyle* fts, INT32 geomType);
         void MakeUIGraphicsForScaleRange(std::list<RS_UIGraphic>& uiGraphics, std::vector<MgByte*>& uiGraphicSources, MdfModel::VectorScaleRange* sr);
 

Modified: trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj	2013-06-06 13:35:14 UTC (rev 7568)
@@ -208,6 +208,12 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="OpCreateRuntimeMap.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="OpGenerateLegendImage.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
@@ -315,6 +321,7 @@
   <ItemGroup>
     <ClInclude Include="MappingOperation.h" />
     <ClInclude Include="MappingOperationFactory.h" />
+    <ClInclude Include="OpCreateRuntimeMap.h" />
     <ClInclude Include="OpGenerateLegendImage.h" />
     <ClInclude Include="OpGenerateLegendPlot.h" />
     <ClInclude Include="OpGenerateMap.h" />

Modified: trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj.filters
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj.filters	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/ServerMappingService.vcxproj.filters	2013-06-06 13:35:14 UTC (rev 7568)
@@ -46,6 +46,9 @@
     <ClCompile Include="SEMgSymbolManager.cpp" />
     <ClCompile Include="ServerMappingService.cpp" />
     <ClCompile Include="ServerMappingServiceBuild.cpp" />
+    <ClCompile Include="OpCreateRuntimeMap.cpp">
+      <Filter>Ops</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="MappingOperation.h">
@@ -90,6 +93,9 @@
     <ClInclude Include="ServerMappingDllExport.h" />
     <ClInclude Include="ServerMappingService.h" />
     <ClInclude Include="ServerMappingServiceDefs.h" />
+    <ClInclude Include="OpCreateRuntimeMap.h">
+      <Filter>Ops</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="ServerMappingService.rc" />

Modified: trunk/MgDev/Server/src/Services/Mapping/ServerMappingServiceBuild.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/ServerMappingServiceBuild.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/Services/Mapping/ServerMappingServiceBuild.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -21,6 +21,7 @@
 #include "MappingOperation.cpp"
 #include "MappingOperationFactory.cpp"
 #include "MappingServiceHandler.cpp"
+#include "OpCreateRuntimeMap.cpp"
 #include "OpGeneratePlot.cpp"
 #include "OpGenerateMap.cpp"
 #include "OpGenerateMapUpdate.cpp"

Modified: trunk/MgDev/Server/src/UnitTesting/TestMappingService.cpp
===================================================================
--- trunk/MgDev/Server/src/UnitTesting/TestMappingService.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/UnitTesting/TestMappingService.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -55,9 +55,9 @@
     // This must be done before calling CreateSession()
     MgUserInformation::SetCurrentUserInfo(userInfo);
 
-    STRING session = svcSite->CreateSession();
-    assert(!session.empty());
-    userInfo->SetMgSessionId(session);
+    m_session = svcSite->CreateSession();
+    assert(!m_session.empty());
+    userInfo->SetMgSessionId(m_session);
 
     // Set the current MgUserInformation
     MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -251,7 +251,105 @@
     ACE_DEBUG((LM_INFO, ACE_TEXT("\nMapping Service tests completed.\n\n")));
 }
 
+void TestMappingService::TestCase_CreateRuntimeMap()
+{
+    try
+    {
+        //make a runtime map
+        Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+        STRING format = MgImageFormats::Png;
+        //call the API
+        Ptr<MgByteReader> rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan1", m_session, format, 16, 16, 0, 25);
+        Ptr<MgByteSink> sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapBarebones.xml");
 
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan2", m_session, format, 16, 16, 1, 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroups.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan3", m_session, format, 16, 16, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsPNG16x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan4", m_session, format, 16, 16, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourcePNG16x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan5", m_session, format, 32, 32, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsPNG32x32.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan6", m_session, format, 32, 32, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourcePNG32x32.xml");
+
+        format = MgImageFormats::Gif;
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan3", m_session, format, 16, 16, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsGIF16x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan4", m_session, format, 16, 16, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourceGIF16x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan5", m_session, format, 32, 32, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsGIF32x32.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan6", m_session, format, 32, 32, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourceGIF32x32.xml");
+
+        format = MgImageFormats::Jpeg;
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan3", m_session, format, 16, 16, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsJPEG16x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan4", m_session, format, 16, 16, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourceJPEG16x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan5", m_session, format, 32, 32, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsJPEG32x32.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan6", m_session, format, 32, 32, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourceJPEG32x32.xml");
+
+        format = MgImageFormats::Png8;
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan3", m_session, format, 16, 16, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsPNG816x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan4", m_session, format, 16, 16, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourcePNG816x16.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan5", m_session, format, 32, 32, (1 | 2), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsPNG832x32.xml");
+
+        rtMap = m_svcMapping->CreateRuntimeMap(mdfres, L"UnitTestSheboygan6", m_session, format, 32, 32, (1 | 2 | 4), 25);
+        sink = new MgByteSink(rtMap);
+        sink->ToFile(L"../UnitTestFiles/RuntimeMapLayersAndGroupsWithIconsAndFeatureSourcePNG832x32.xml");
+    }
+    catch(MgException* e)
+    {
+        STRING message = e->GetDetails(TEST_LOCALE);
+        SAFE_RELEASE(e);
+        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+    }
+    catch(...)
+    {
+        throw;
+    }
+}
+
+
 void TestMappingService::TestCase_GetMap()
 {
     try

Modified: trunk/MgDev/Server/src/UnitTesting/TestMappingService.h
===================================================================
--- trunk/MgDev/Server/src/UnitTesting/TestMappingService.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Server/src/UnitTesting/TestMappingService.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -34,6 +34,7 @@
     CPPUNIT_TEST(TestCase_GetPlotUsingExtents);
     CPPUNIT_TEST(TestCase_GetPlotUsingExtentsAndExpandToFit);
     CPPUNIT_TEST(TestCase_GetLegendPlot);
+    CPPUNIT_TEST(TestCase_CreateRuntimeMap);
     //CPPUNIT_TEST(TestCase_QueryFeaturesImageMap);
 
     CPPUNIT_TEST(TestEnd); // This must be the very last unit test
@@ -49,6 +50,7 @@
     void TestStart();
     void TestEnd();
 
+    void TestCase_CreateRuntimeMap();
     void TestCase_GetMap();
     void TestCase_GetMapUpdate();
     void TestCase_SaveMap();
@@ -68,6 +70,8 @@
     Ptr<MgSiteConnection> m_siteConnection;
     Ptr<MgResourceService> m_svcResource;
     Ptr<MgMappingService> m_svcMapping;
+
+    STRING m_session;
 };
 
 #endif // TESTMAPPINGSERVICE_H_

Added: trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp	                        (rev 0)
+++ trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -0,0 +1,148 @@
+//
+//  Copyright (C) 2004-2013 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 "HttpHandler.h"
+#include "HttpCreateRuntimeMap.h"
+#include "VectorLayerDefinition.h"
+#include "PointTypeStyle.h"
+#include "AreaTypeStyle.h"
+#include "LineTypeStyle.h"
+#include "CompositeTypeStyle.h"
+
+#define REQUEST_LAYER_STRUCTURE         1 /* Request layer and group structure */
+#define REQUEST_LAYER_ICONS             2 /* Request layer scale and icon information */
+#define REQUEST_LAYER_FEATURE_SOURCE    4 /* Request information about a layer's feature source */
+
+HTTP_IMPLEMENT_CREATE_OBJECT(MgHttpCreateRuntimeMap)
+
+/// <summary>
+/// Initializes the common parameters and parameters specific to this request.
+/// </summary>
+/// <param name="name">Input
+/// MgHttpRequest
+/// This contains all the parameters of the request.
+/// </param>
+/// <returns>
+/// nothing
+/// </returns>
+MgHttpCreateRuntimeMap::MgHttpCreateRuntimeMap(MgHttpRequest *hRequest)
+{
+    InitializeCommonParameters(hRequest);
+
+    Ptr<MgHttpRequestParam> params = hRequest->GetRequestParam();
+    m_mapDefinition = params->GetParameterValue(MgHttpResourceStrings::reqMappingMapDefinition);
+    STRING mask = params->GetParameterValue(MgHttpResourceStrings::reqMappingRequestedFeatures);
+    if (mask.empty())
+        m_requestDataMask = 0;
+    else
+        m_requestDataMask = MgUtil::StringToInt32(mask);
+    m_iconLimitPerScaleRange = 25;
+    STRING sIconsPerScaleRange = params->GetParameterValue(MgHttpResourceStrings::reqMappingIconsPerScaleRange);
+    if (!sIconsPerScaleRange.empty())
+    {
+        m_iconLimitPerScaleRange = MgUtil::StringToInt32(sIconsPerScaleRange);
+    }
+    STRING sTargetMapName = params->GetParameterValue(MgHttpResourceStrings::reqMappingTargetMapName);
+    if (!sTargetMapName.empty())
+    {
+        m_targetMapName = sTargetMapName;
+    }
+    m_iconFormat = MgImageFormats::Png;
+    m_iconWidth = 16;
+    m_iconHeight = 16;
+    STRING sIconFormat = params->GetParameterValue(MgHttpResourceStrings::reqMappingIconFormat);
+    if (!sIconFormat.empty())
+    {
+        m_iconFormat = sIconFormat;
+    }
+    STRING sIconWidth = params->GetParameterValue(MgHttpResourceStrings::reqMappingIconWidth);
+    if (!sIconWidth.empty())
+    {
+        m_iconWidth = MgUtil::StringToInt32(sIconWidth);
+    }
+    STRING sIconHeight = params->GetParameterValue(MgHttpResourceStrings::reqMappingIconHeight);
+    if (!sIconHeight.empty())
+    {
+        m_iconHeight = MgUtil::StringToInt32(sIconHeight);
+    }
+}
+
+/// <summary>
+/// Executes the specific request.
+/// </summary>
+/// <returns>
+/// MgHttpResponse
+/// This contains the response (including MgHttpResult and StatusCode) from the server.
+/// </returns>
+void MgHttpCreateRuntimeMap::Execute(MgHttpResponse& hResponse)
+{
+    Ptr<MgHttpResult> hResult = hResponse.GetResult();
+
+    MG_HTTP_HANDLER_TRY()
+
+    // Check common parameters
+    ValidateCommonParameters();
+
+    Ptr<MgByteReader> byteReader;
+
+    Ptr<MgResourceIdentifier> mdfId = new MgResourceIdentifier(m_mapDefinition);
+    STRING mapName = mdfId->GetName();
+
+    // Do we have a target map name? Use that instead
+    if (!m_targetMapName.empty())
+        mapName = m_targetMapName;
+
+    // Create a new session id if we don't have one
+    STRING sessionId = m_userInfo->GetMgSessionId();
+    if (sessionId.empty())
+    {
+        // Get the site
+        Ptr<MgSite> mgSite = m_siteConn->GetSite();
+        // Run API command
+        sessionId = mgSite->CreateSession();
+        m_userInfo->SetMgSessionId(sessionId);
+    }
+
+    Ptr<MgMappingService> mappingService = (MgMappingService*)CreateService(MgServiceType::MappingService);
+    byteReader = mappingService->CreateRuntimeMap(mdfId, mapName, sessionId, m_iconFormat, m_iconWidth, m_iconHeight, m_requestDataMask, m_iconLimitPerScaleRange);
+    // Convert to requested response format, if necessary
+    ProcessFormatConversion(byteReader);
+
+    hResult->SetResultObject(byteReader, byteReader->GetMimeType());
+
+    MG_HTTP_HANDLER_CATCH_AND_THROW_EX(L"MgHttpCreateRuntimeMap.Execute")
+}
+
+/// <summary>
+/// This method is responsible for checking if
+/// a valid version was given
+/// </summary>
+/// <returns>Returns nothing</returns>
+void MgHttpCreateRuntimeMap::ValidateOperationVersion()
+{
+    MG_HTTP_HANDLER_TRY()
+
+    // There are multiple supported versions
+    INT32 version = m_userInfo->GetApiVersion();
+    if (version != MG_API_VERSION(2,6,0))
+    {
+        throw new MgInvalidOperationVersionException(
+        L"MgHttpCreateRuntimeMap.ValidateOperationVersion", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    MG_HTTP_HANDLER_CATCH_AND_THROW(L"MgHttpCreateRuntimeMap.ValidateOperationVersion");
+}

Added: trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.h
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.h	                        (rev 0)
+++ trunk/MgDev/Web/src/HttpHandler/HttpCreateRuntimeMap.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -0,0 +1,73 @@
+//
+//  Copyright (C) 2004-2013 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 _HTTP_CREATE_RUNTIME_MAP_
+#define _HTTP_CREATE_RUNTIME_MAP_
+
+typedef std::map<STRING, MdfModel::LayerDefinition*> LayerDefinitionMap;
+
+class MgHttpCreateRuntimeMap : public MgHttpRequestResponseHandler
+{
+HTTP_DECLARE_CREATE_OBJECT()
+
+public:
+    /// <summary>
+    /// Initializes the common parameters of the request.
+    /// </summary>
+    /// <param name="name">Input
+    /// MgHttpRequest
+    /// This contains all the parameters of the request.
+    /// </param>
+    /// <returns>
+    /// nothing
+    /// </returns>
+    MgHttpCreateRuntimeMap(MgHttpRequest *hRequest);
+
+    /// <summary>
+    /// Executes the specific request.
+    /// </summary>
+    /// <param name="hResponse">Input
+    /// This contains the response (including MgHttpResult and StatusCode) from the server.
+    /// </param>
+    void Execute(MgHttpResponse& hResponse);
+
+    /// <summary>
+    /// Returns the classification of this request/response handler
+    /// </summary>
+    /// <returns>
+    /// Classification of handler
+    /// </returns>
+    MgRequestClassification GetRequestClassification() { return MgHttpRequestResponseHandler::mrcViewer; }
+
+    /// <summary>
+    /// This method is responsible for checking if
+    /// a valid version was given
+    /// </summary>
+    /// <returns>Returns nothing</returns>
+    virtual void ValidateOperationVersion();
+
+private:
+    STRING m_targetMapName;
+    STRING m_mapDefinition;
+    STRING m_iconFormat;
+    INT32 m_iconWidth;
+    INT32 m_iconHeight;
+    INT32 m_requestDataMask;
+    INT32 m_iconLimitPerScaleRange;
+};
+
+#endif  // _HTTP_CREATE_RUNTIME_MAP_

Modified: trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj	2013-06-06 13:35:14 UTC (rev 7568)
@@ -216,6 +216,12 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="HttpCreateRuntimeMap.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="HttpDeleteRepository.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
@@ -941,6 +947,7 @@
     <ClInclude Include="HttpChangeResourceOwner.h" />
     <ClInclude Include="HttpCopyResource.h" />
     <ClInclude Include="HttpCreateRepository.h" />
+    <ClInclude Include="HttpCreateRuntimeMap.h" />
     <ClInclude Include="HttpDeleteRepository.h" />
     <ClInclude Include="HttpDeleteResource.h" />
     <ClInclude Include="HttpDeleteResourceData.h" />

Modified: trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj.filters
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj.filters	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Web/src/HttpHandler/HttpHandler.vcxproj.filters	2013-06-06 13:35:14 UTC (rev 7568)
@@ -383,6 +383,9 @@
     <ClCompile Include="JsonDoc.cpp" />
     <ClCompile Include="XmlJsonConvert.cpp" />
     <ClCompile Include="HttpReaderStreamer.cpp" />
+    <ClCompile Include="HttpCreateRuntimeMap.cpp">
+      <Filter>Mapping Service</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="HttpApplyResourcePackage.h">
@@ -754,6 +757,9 @@
     <ClInclude Include="JsonDoc.h" />
     <ClInclude Include="XmlJsonConvert.h" />
     <ClInclude Include="HttpReaderStreamer.h" />
+    <ClInclude Include="HttpCreateRuntimeMap.h">
+      <Filter>Mapping Service</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="HttpHandler.rc" />

Modified: trunk/MgDev/Web/src/HttpHandler/HttpHandlerBuild.cpp
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpHandlerBuild.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Web/src/HttpHandler/HttpHandlerBuild.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -27,6 +27,7 @@
 #include "HttpCreateRepository.cpp"
 #include "HttpCreateSession.cpp"
 #include "HttpGetSessionTimeout.cpp"
+#include "HttpCreateRuntimeMap.cpp"
 #include "HttpCsConvertWktToCoordinateSystemCode.cpp"
 #include "HttpCsConvertCoordinateSystemCodeToWkt.cpp"
 #include "HttpCsConvertEpsgCodeToWkt.cpp"

Modified: trunk/MgDev/Web/src/HttpHandler/HttpRequest.cpp
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpRequest.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Web/src/HttpHandler/HttpRequest.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -74,6 +74,7 @@
 #include "HttpGetFdoCacheInfo.h"
 
 // Http Mapping Service operations
+#include "HttpCreateRuntimeMap.h"
 #include "HttpGetMap.h"
 #include "HttpGetMapUpdate.h"
 #include "HttpGetPlot.h"
@@ -341,6 +342,7 @@
 {
     //declare each Http class creator, associate the operation name with it
     //
+    httpClassCreators[MgHttpResourceStrings::opCreateRuntimeMap] = MgHttpCreateRuntimeMap::CreateObject;
     httpClassCreators[MgHttpResourceStrings::opGetMap] = MgHttpGetMap::CreateObject;
     httpClassCreators[MgHttpResourceStrings::opGetMapUpdate] = MgHttpGetMapUpdate::CreateObject;
     httpClassCreators[MgHttpResourceStrings::opGetDrawing] = MgHttpGetDrawing::CreateObject;

Modified: trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp	2013-06-06 13:35:14 UTC (rev 7568)
@@ -190,6 +190,7 @@
 const STRING MgHttpResourceStrings::opGetDrawingCoordinateSpace = L"GETDRAWINGCOORDINATESPACE";
 
 // Mapping Service Operation Requests
+const STRING MgHttpResourceStrings::opCreateRuntimeMap = L"CREATERUNTIMEMAP";
 const STRING MgHttpResourceStrings::opGetMap = L"GETMAP";
 const STRING MgHttpResourceStrings::opGetMapUpdate = L"GETMAPUPDATE";
 const STRING MgHttpResourceStrings::opGetPlot = L"GETPLOT";
@@ -216,6 +217,12 @@
 const STRING MgHttpResourceStrings::reqMappingFormat = L"FORMAT";
 const STRING MgHttpResourceStrings::reqMappingType = L"TYPE";
 const STRING MgHttpResourceStrings::reqMappingThemeCategory = L"THEMECATEGORY";
+const STRING MgHttpResourceStrings::reqMappingRequestedFeatures = L"REQUESTEDFEATURES";
+const STRING MgHttpResourceStrings::reqMappingIconsPerScaleRange = L"ICONSPERSCALERANGE";
+const STRING MgHttpResourceStrings::reqMappingTargetMapName = L"TARGETMAPNAME";
+const STRING MgHttpResourceStrings::reqMappingIconWidth = L"ICONWIDTH";
+const STRING MgHttpResourceStrings::reqMappingIconHeight = L"ICONHEIGHT";
+const STRING MgHttpResourceStrings::reqMappingIconFormat = L"ICONFORMAT";
 
 // Predefined Rendering Service Request Parameters
 const STRING MgHttpResourceStrings::reqRenderingMapDefinition = L"MAPDEFINITION";

Modified: trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h	2013-06-06 13:35:14 UTC (rev 7568)
@@ -153,6 +153,12 @@
     static const STRING reqMappingFormat;
     static const STRING reqMappingType;
     static const STRING reqMappingThemeCategory;
+    static const STRING reqMappingRequestedFeatures;
+    static const STRING reqMappingIconsPerScaleRange;
+    static const STRING reqMappingTargetMapName;
+    static const STRING reqMappingIconWidth;
+    static const STRING reqMappingIconHeight;
+    static const STRING reqMappingIconFormat;
 
     // PREDEFINED RENDERING REQUEST PARAMETERS
     static const STRING reqRenderingMapDefinition;
@@ -293,6 +299,7 @@
     static const STRING opGetDrawingCoordinateSpace;
 
     // Mapping services
+    static const STRING opCreateRuntimeMap;
     static const STRING opGetMap;
     static const STRING opGetMapUpdate;
     static const STRING opGetPlot;

Modified: trunk/MgDev/Web/src/HttpHandler/Makefile.am
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/Makefile.am	2013-06-06 12:46:08 UTC (rev 7567)
+++ trunk/MgDev/Web/src/HttpHandler/Makefile.am	2013-06-06 13:35:14 UTC (rev 7568)
@@ -24,6 +24,7 @@
   HttpClearTileCache.cpp \
   HttpCopyResource.cpp \
   HttpCreateRepository.cpp \
+  HttpCreateRuntimeMap.cpp \
   HttpCreateSession.cpp \
   HttpCsConvertWktToCoordinateSystemCode.cpp \
   HttpCsConvertCoordinateSystemCodeToWkt.cpp \
@@ -149,6 +150,7 @@
   HttpClearTileCache.h \
   HttpCopyResource.h \
   HttpCreateRepository.h \
+  HttpCreateRuntimeMap.h \
   HttpCreateSession.h \
   HttpCsConvertWktToCoordinateSystemCode.h \
   HttpCsConvertCoordinateSystemCodeToWkt.h \


Property changes on: trunk/MgDev/Web/src/mapadmin/HelpDocs
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Web/src/mapadmin/HelpDocs:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Web/src/mapadmin/HelpDocs:6413
/sandbox/rfc94/Web/src/mapadmin/HelpDocs:5099-5163
   + /branches/2.4/MgDev/Web/src/mapadmin/HelpDocs:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Web/src/mapadmin/HelpDocs:6413
/sandbox/jng/createruntimemap/Web/src/mapadmin/HelpDocs:7486-7555
/sandbox/rfc94/Web/src/mapadmin/HelpDocs:5099-5163


Property changes on: trunk/MgDev/Web/src/mapadmin/HelpDocs/configuring_servers.htm
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Web/src/mapadmin/HelpDocs/configuring_servers.htm:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Web/src/mapadmin/HelpDocs/configuring_servers.htm:6327-6435
/sandbox/rfc94/Web/src/mapadmin/HelpDocs/configuring_servers.htm:5099-5163
/trunk/MgDev/Web/src/mapadmin/HelpDocs/configuring_servers.htm:6250-6326
   + /branches/2.4/MgDev/Web/src/mapadmin/HelpDocs/configuring_servers.htm:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4j/Web/src/mapadmin/HelpDocs/configuring_servers.htm:6327-6435
/sandbox/jng/createruntimemap/Web/src/mapadmin/HelpDocs/configuring_servers.htm:7486-7555
/sandbox/rfc94/Web/src/mapadmin/HelpDocs/configuring_servers.htm:5099-5163
/trunk/MgDev/Web/src/mapadmin/HelpDocs/configuring_servers.htm:6250-6326


Property changes on: trunk/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4jbeta2/Web/src/mapviewerphp/quickplotgeneratepicture.php:6334-6374
/sandbox/rfc94/Web/src/mapviewerphp/quickplotgeneratepicture.php:5099-5163
   + /branches/2.4/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.4jbeta2/Web/src/mapviewerphp/quickplotgeneratepicture.php:6334-6374
/sandbox/jng/createruntimemap/Web/src/mapviewerphp/quickplotgeneratepicture.php:7486-7555
/sandbox/rfc94/Web/src/mapviewerphp/quickplotgeneratepicture.php:5099-5163


Property changes on: trunk/MgDev/Web/src/viewerfiles
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Web/src/viewerfiles:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.2gp/Web/src/viewerfiles:5392
   + /branches/2.4/MgDev/Web/src/viewerfiles:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.2gp/Web/src/viewerfiles:5392
/sandbox/jng/createruntimemap/Web/src/viewerfiles:7486-7555


Property changes on: trunk/MgDev/Web/src/viewerfiles/quickplot.js
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/2.4/MgDev/Web/src/viewerfiles/quickplot.js:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.2gp/Web/src/viewerfiles/quickplot.js:5392
/sandbox/adsk/2.4j/Web/src/viewerfiles/quickplot.js:6327-6474
/trunk/MgDev/Web/src/viewerfiles/quickplot.js:6250-6326
   + /branches/2.4/MgDev/Web/src/viewerfiles/quickplot.js:6738-6741,6749-6756,6777-6783,6785-6787,6789,6791-6794,6796-6801,6954-6962,6986-7006
/sandbox/adsk/2.2gp/Web/src/viewerfiles/quickplot.js:5392
/sandbox/adsk/2.4j/Web/src/viewerfiles/quickplot.js:6327-6474
/sandbox/jng/createruntimemap/Web/src/viewerfiles/quickplot.js:7486-7555
/trunk/MgDev/Web/src/viewerfiles/quickplot.js:6250-6326



More information about the mapguide-commits mailing list