[mapguide-commits] r8485 - in trunk/Tools/Maestro: . Generated OSGeo.MapGuide.ObjectModel.Tests OSGeo.MapGuide.ObjectModel.Tests/Properties OSGeo.MapGuide.ObjectModel.Tests/Resources OSGeo.MapGuide.ObjectModels OSGeo.MapGuide.ObjectModels/Properties OSGeo.MapGuide.ObjectModels/TileSetDefinition OSGeo.MapGuide.ObjectModels/TileSetDefinition/v3_0_0

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon Dec 29 08:18:37 PST 2014


Author: jng
Date: 2014-12-29 08:18:37 -0800 (Mon, 29 Dec 2014)
New Revision: 8485

Added:
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Resources/UT_BaseMap.tsd
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/TileSetDefinitionTests.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/TileSetInterfaces.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/v3_0_0/
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/v3_0_0/TileSetImpl.cs
Modified:
   trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/OSGeo.MapGuide.ObjectModel.Tests.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/ObjectFactoryTests.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.resx
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ObjectFactory.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypeRegistry.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypes.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.Designer.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.resx
   trunk/Tools/Maestro/UnitTests.playlist
Log:
#2515: Add support for the TileSetDefinition 3.0.0 schema in MGOS 3.0. Add a new ITileSetDefinition interface to model the new resource. Add tests for creating and deserializing Tile Set Definitions

Modified: trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs
===================================================================
--- trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -4,7 +4,7 @@
 //    <NameSpace>OSGeo.MapGuide.ObjectModels.TileSetDefinition</NameSpace><Collection>BindingList</Collection><codeType>CSharp</codeType><EnableDataBinding>True</EnableDataBinding><EnableLazyLoading>False</EnableLazyLoading><TrackingChangesEnable>False</TrackingChangesEnable><GenTrackingClasses>False</GenTrackingClasses><HidePrivateFieldInIDE>True</HidePrivateFieldInIDE><EnableSummaryComment>True</EnableSummaryComment><VirtualProp>False</VirtualProp><IncludeSerializeMethod>True</IncludeSerializeMethod><UseBaseClass>False</UseBaseClass><GenBaseClass>False</GenBaseClass><GenerateCloneMethod>True</GenerateCloneMethod><GenerateDataContracts>False</GenerateDataContracts><CodeBaseTag>Net20</CodeBaseTag><SerializeMethodName>Serialize</SerializeMethodName><DeserializeMethodName>Deserialize</DeserializeMethodName><SaveToFileMethodName>SaveToFile</SaveToFileMethodName><LoadFromFileMethodName>LoadFromFile</LoadFromFileMethodName><GenerateXMLAttributes>True</GenerateXMLAttributes><Order
 XMLAttrib>False</OrderXMLAttrib><EnableEncoding>False</EnableEncoding><AutomaticProperties>False</AutomaticProperties><GenerateShouldSerialize>False</GenerateShouldSerialize><DisableDebug>False</DisableDebug><PropNameSpecified>Default</PropNameSpecified><Encoder>UTF8</Encoder><CustomUsings></CustomUsings><ExcludeIncludedTypes>False</ExcludeIncludedTypes><EnableInitializeFields>False</EnableInitializeFields>
 //  </auto-generated>
 // ------------------------------------------------------------------------------
-namespace OSGeo.MapGuide.ObjectModels.TileSetDefinition {
+namespace OSGeo.MapGuide.ObjectModels.TileSetDefinition.v3_0_0 {
     using System;
     using System.Diagnostics;
     using System.Xml.Serialization;

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/OSGeo.MapGuide.ObjectModel.Tests.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/OSGeo.MapGuide.ObjectModel.Tests.csproj	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/OSGeo.MapGuide.ObjectModel.Tests.csproj	2014-12-29 16:18:37 UTC (rev 8485)
@@ -75,9 +75,11 @@
       <DependentUpon>Resources.resx</DependentUpon>
     </Compile>
     <Compile Include="ResourceTests.cs" />
+    <Compile Include="TileSetDefinitionTests.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="packages.config" />
+    <None Include="Resources\UT_BaseMap.tsd" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Properties\Resources.resx">

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/ObjectFactoryTests.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/ObjectFactoryTests.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/ObjectFactoryTests.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -24,10 +24,17 @@
 using NUnit.Framework;
 using OSGeo.MapGuide.ObjectModels;
 using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
 using OSGeo.MapGuide.ObjectModels.LoadProcedure;
+using OSGeo.MapGuide.ObjectModels.MapDefinition;
+using OSGeo.MapGuide.ObjectModels.SymbolDefinition;
+using OSGeo.MapGuide.ObjectModels.TileSetDefinition;
+using OSGeo.MapGuide.ObjectModels.WatermarkDefinition;
+using OSGeo.MapGuide.ObjectModels.WebLayout;
 using System;
 using System.Collections.Generic;
 using System.Collections.Specialized;
+using System.IO;
 using System.Linq;
 using System.Text;
 
@@ -63,8 +70,8 @@
         [Test()]
         public void RegisterResourceSerializerTest()
         {
-            ResourceSerializationCallback serFunc = (res) => null;
-            ResourceDeserializationCallback deserFunc = (stream) => null;
+            Func<IResource, Stream> serFunc = (res) => null;
+            Func<string, IResource> deserFunc = (stream) => null;
 
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterResourceSerializer(new ResourceTypeDescriptor("FeatureSource", "1.0.0"), null, null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterResourceSerializer(new ResourceTypeDescriptor("FeatureSource", "1.0.0"), serFunc, null));
@@ -79,7 +86,7 @@
         [Test()]
         public void RegisterCompoundSymbolFactoryMethodTest()
         {
-            CompoundSymbolDefCreatorFunc func = () => null;
+            Func<ICompoundSymbolDefinition> func = () => null;
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterCompoundSymbolFactoryMethod(null, null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterCompoundSymbolFactoryMethod(new Version(1, 0, 0), null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterCompoundSymbolFactoryMethod(null, func));
@@ -91,7 +98,7 @@
         [Test()]
         public void RegisterSimpleSymbolFactoryMethodTest()
         {
-            SimpleSymbolDefCreatorFunc func = () => null;
+            Func<ISimpleSymbolDefinition> func = () => null;
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterSimpleSymbolFactoryMethod(null, null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterSimpleSymbolFactoryMethod(new Version(1, 0, 0), null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterSimpleSymbolFactoryMethod(null, func));
@@ -103,7 +110,7 @@
         [Test()]
         public void RegisterLayerFactoryMethodTest()
         {
-            LayerCreatorFunc func = (lt) => null;
+            Func<LayerType, ILayerDefinition> func = (lt) => null;
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterLayerFactoryMethod(null, null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 0, 0), null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterLayerFactoryMethod(null, func));
@@ -115,7 +122,7 @@
         [Test()]
         public void RegisterLoadProcedureFactoryMethodTest()
         {
-            LoadProcCreatorFunc func = () => null;
+            Func<ILoadProcedure> func = () => null;
             foreach (LoadType lt in Enum.GetValues(typeof(LoadType)))
             {
                 Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterLoadProcedureFactoryMethod(LoadType.Dwf, null));
@@ -125,7 +132,7 @@
         [Test()]
         public void RegisterWebLayoutFactoryMethodTest()
         {
-            WebLayoutCreatorFunc func = (mdfId) => null;
+            Func<string, IWebLayout> func = (mdfId) => null;
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterWebLayoutFactoryMethod(null, null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterWebLayoutFactoryMethod(null, func));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(1, 0, 0), null));
@@ -137,7 +144,7 @@
         [Test()]
         public void RegisterMapDefinitionFactoryMethodTest()
         {
-            MapDefinitionCreatorFunc func = () => null;
+            Func<IMapDefinition> func = () => null;
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterMapDefinitionFactoryMethod(null, null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterMapDefinitionFactoryMethod(null, func));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterMapDefinitionFactoryMethod(new Version(1, 0, 0), null));
@@ -149,7 +156,7 @@
         [Test()]
         public void RegisterWatermarkDefinitionFactoryMethodTest()
         {
-            WatermarkCreatorFunc func = (st) => null;
+            Func<SymbolDefinitionType, IWatermarkDefinition> func = (st) => null;
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterWatermarkDefinitionFactoryMethod(null, null));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterWatermarkDefinitionFactoryMethod(null, func));
             Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterWatermarkDefinitionFactoryMethod(new Version(1, 0, 0), null));
@@ -159,6 +166,18 @@
         }
 
         [Test()]
+        public void RegisterTileSetDefinitionFactoryMethodTest()
+        {
+            Func<ITileSetDefinition> func = () => null;
+            Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterTileSetDefinitionFactoryMethod(null, null));
+            Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterTileSetDefinitionFactoryMethod(null, func));
+            Assert.Throws<ArgumentNullException>(() => ObjectFactory.RegisterTileSetDefinitionFactoryMethod(new Version(1, 0, 0), null));
+            //Already exists
+            Assert.Throws<ArgumentException>(() => ObjectFactory.RegisterTileSetDefinitionFactoryMethod(new Version(3, 0, 0), func));
+            Assert.DoesNotThrow(() => ObjectFactory.RegisterTileSetDefinitionFactoryMethod(new Version(4, 0, 0), func));
+        }
+
+        [Test()]
         public void CreateMetadataTest()
         {
             var meta = ObjectFactory.CreateMetadata();

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.Designer.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.Designer.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -130,6 +130,29 @@
         
         /// <summary>
         ///   Looks up a localized string similar to <?xml version="1.0" encoding="UTF-8"?>
+        ///<TileSetDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="TileSetDefinition-3.0.0.xsd">
+        ///  <TileStoreParameters>
+        ///    <TileProvider>Default</TileProvider>
+        ///    <Parameter>
+        ///      <Name>TilePath</Name>
+        ///      <Value>%MG_TILE_CACHE_PATH%</Value>
+        ///    </Parameter>
+        ///    <Parameter>
+        ///      <Name>TileWidth</Name>
+        ///      <Value>256</Value>
+        ///    </Parameter>
+        ///    <Parameter>
+        ///      <Name>TileHeight</Name>
+        ///      <Value>256</Value> [rest of string was truncated]";.
+        /// </summary>
+        internal static string UT_BaseMap {
+            get {
+                return ResourceManager.GetString("UT_BaseMap", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to <?xml version="1.0" encoding="UTF-8"?>
         ///<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MapDefinition-3.0.0.xsd" version="3.0.0">
         ///  <Name>Base Map linked to Tile Set</Name>
         ///  <CoordinateSystem>PROJCS["WGS84.PseudoMercator",GEOGCS["LL84",DATUM["WGS84",SPHEROID["WGS84",6378137.000,298.25722293]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Popular Visualisation Pseudo Mercator"],PARAMETER["false_easting",0.000],PARAMETER["false_no [rest of string was truncated]";.

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.resx	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Properties/Resources.resx	2014-12-29 16:18:37 UTC (rev 8485)
@@ -127,6 +127,9 @@
   <data name="FeatureSource_1_0_0" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\FeatureSource-1.0.0.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
   </data>
+  <data name="UT_BaseMap" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\UT_BaseMap.tsd;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
   <data name="UT_LinkedTileSet" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\UT_LinkedTileSet.mdf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
   </data>

Added: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Resources/UT_BaseMap.tsd
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Resources/UT_BaseMap.tsd	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/Resources/UT_BaseMap.tsd	2014-12-29 16:18:37 UTC (rev 8485)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TileSetDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="TileSetDefinition-3.0.0.xsd">
+  <TileStoreParameters>
+    <TileProvider>Default</TileProvider>
+    <Parameter>
+      <Name>TilePath</Name>
+      <Value>%MG_TILE_CACHE_PATH%</Value>
+    </Parameter>
+    <Parameter>
+      <Name>TileWidth</Name>
+      <Value>256</Value>
+    </Parameter>
+    <Parameter>
+      <Name>TileHeight</Name>
+      <Value>256</Value>
+    </Parameter>
+    <Parameter>
+      <Name>TileFormat</Name>
+      <Value>PNG</Value>
+    </Parameter>
+    <Parameter>
+      <Name>FiniteScaleList</Name>
+      <Value>200000,100000,50000,25000,12500,6250,3125,1562.5,781.25,390.625</Value>
+    </Parameter>
+    <Parameter>
+      <Name>CoordinateSystem</Name>
+      <Value>GEOGCS["LL84",DATUM["WGS 84",SPHEROID["WGS 84",6378137,298.25722293287],TOWGS84[0,0,0,0,0,0,0]],PRIMEM["Greenwich",0],UNIT["Degrees",0.01745329252]]</Value>
+    </Parameter>
+  </TileStoreParameters>
+  <Extents>
+    <MinX>-87.79786601383196</MinX>
+    <MaxX>-87.66452777186925</MaxX>
+    <MinY>43.6868578621819</MinY>
+    <MaxY>43.8037962206133</MaxY>
+  </Extents>
+  <BaseMapLayerGroup>
+    <Name>BaseLayers</Name>
+    <Visible>true</Visible>
+    <ShowInLegend>true</ShowInLegend>
+    <ExpandInLegend>true</ExpandInLegend>
+    <LegendLabel>Base Layers</LegendLabel>
+    <BaseMapLayer>
+      <Name>Parcels</Name>
+      <ResourceId>Library://UnitTests/Layers/Parcels.LayerDefinition</ResourceId>
+      <Selectable>true</Selectable>
+      <ShowInLegend>true</ShowInLegend>
+      <LegendLabel>Parcels</LegendLabel>
+      <ExpandInLegend>false</ExpandInLegend>
+    </BaseMapLayer>
+    <BaseMapLayer>
+      <Name>VotingDistricts</Name>
+      <ResourceId>Library://UnitTests/Layers/VotingDistricts.LayerDefinition</ResourceId>
+      <Selectable>true</Selectable>
+      <ShowInLegend>true</ShowInLegend>
+      <LegendLabel>Voting Districts</LegendLabel>
+      <ExpandInLegend>false</ExpandInLegend>
+    </BaseMapLayer>
+  </BaseMapLayerGroup>
+</TileSetDefinition>

Added: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/TileSetDefinitionTests.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/TileSetDefinitionTests.cs	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModel.Tests/TileSetDefinitionTests.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -0,0 +1,126 @@
+#region Disclaimer / License
+
+// Copyright (C) 2014, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// 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 Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+
+using NUnit.Framework;
+using OSGeo.MapGuide.ObjectModels;
+using OSGeo.MapGuide.ObjectModels.TileSetDefinition;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.ObjectModel.Tests
+{
+    [TestFixture]
+    public class TileSetDefinitionTests
+    {
+        [Test]
+        public void CreateTest()
+        {
+            var res = ObjectFactory.CreateTileSetDefinition(new Version(3, 0, 0));
+            Assert.IsInstanceOf<ITileSetDefinition>(res);
+            ITileSetDefinition tsd = (ITileSetDefinition)res;
+            Assert.AreEqual("Default", tsd.TileStoreParameters.TileProvider);
+            tsd.SetXYZProviderParameters();
+            Assert.AreEqual("XYZ", tsd.TileStoreParameters.TileProvider);
+            var p = tsd.GetParameter("TileFormat");
+            Assert.NotNull(p);
+            Assert.AreEqual("PNG", p.Value);
+            Assert.AreEqual("PNG", tsd.GetTileFormat());
+            p = tsd.GetParameter("TilePath");
+            Assert.NotNull(p);
+            Assert.AreEqual("%MG_TILE_CACHE_PATH%", p.Value);
+            Assert.AreEqual("%MG_TILE_CACHE_PATH%", tsd.GetTilePath());
+
+            tsd.SetDefaultProviderParameters(256, 256, "coordsys", new double[] { 100.5, 200.5, 300.5 });
+            p = tsd.GetParameter("TileWidth");
+            Assert.NotNull(p);
+            Assert.AreEqual("256", p.Value);
+            Assert.AreEqual(256, tsd.GetDefaultTileWidth());
+            p = tsd.GetParameter("TileHeight");
+            Assert.NotNull(p);
+            Assert.AreEqual("256", p.Value);
+            Assert.AreEqual(256, tsd.GetDefaultTileHeight());
+            p = tsd.GetParameter("CoordinateSystem");
+            Assert.NotNull(p);
+            Assert.AreEqual("coordsys", p.Value);
+            Assert.AreEqual("coordsys", tsd.GetDefaultCoordinateSystem());
+            p = tsd.GetParameter("FiniteScaleList");
+            Assert.NotNull(p);
+            Assert.AreEqual("300.5,200.5,100.5", p.Value);
+            var value = tsd.GetDefaultFiniteScaleList();
+            Assert.AreEqual(3, value.Length);
+            Assert.Contains(100.5, value);
+            Assert.Contains(200.5, value);
+            Assert.Contains(300.5, value);
+            p = tsd.GetParameter("TileFormat");
+            Assert.NotNull(p);
+            Assert.AreEqual("PNG", p.Value);
+            Assert.AreEqual("PNG", tsd.GetTileFormat());
+            p = tsd.GetParameter("TilePath");
+            Assert.NotNull(p);
+            Assert.AreEqual("%MG_TILE_CACHE_PATH%", p.Value);
+            Assert.AreEqual("%MG_TILE_CACHE_PATH%", tsd.GetTilePath());
+        }
+
+        [Test]
+        public void DeserializationTest()
+        {
+            var res = ObjectFactory.DeserializeXml(Properties.Resources.UT_BaseMap);
+            Assert.IsInstanceOf<ITileSetDefinition>(res);
+            ITileSetDefinition tsd = (ITileSetDefinition)res;
+            Assert.AreEqual("%MG_TILE_CACHE_PATH%", tsd.GetTilePath());
+            Assert.AreEqual(256, tsd.GetDefaultTileWidth());
+            Assert.AreEqual(256, tsd.GetDefaultTileHeight());
+            Assert.AreEqual("PNG", tsd.GetTileFormat());
+            
+            var values = tsd.GetDefaultFiniteScaleList();
+            Assert.AreEqual(10, values.Length);
+            Assert.Contains(200000, values);
+            Assert.Contains(100000, values);
+            Assert.Contains(50000, values);
+            Assert.Contains(25000, values);
+            Assert.Contains(12500, values);
+            Assert.Contains(6250, values);
+            Assert.Contains(3125, values);
+            Assert.Contains(1562.5, values);
+            Assert.Contains(781.25, values);
+            Assert.Contains(390.625, values);
+            Assert.IsNotNullOrEmpty(tsd.GetDefaultCoordinateSystem());
+            
+            var ext = tsd.Extents;
+            Assert.AreEqual(-87.79786601383196, ext.MinX);
+            Assert.AreEqual(-87.66452777186925, ext.MaxX);
+            Assert.AreEqual(43.6868578621819, ext.MinY);
+            Assert.AreEqual(43.8037962206133, ext.MaxY);
+
+            Assert.AreEqual(1, tsd.BaseGroups.Count());
+            var grp = tsd.BaseGroups.First();
+            Assert.AreEqual("BaseLayers", grp.Name);
+            Assert.True(grp.Visible);
+            Assert.True(grp.ShowInLegend);
+            Assert.True(grp.ExpandInLegend);
+            Assert.AreEqual("Base Layers", grp.LegendLabel);
+            Assert.AreEqual(2, grp.BaseMapLayer.Count());
+        }
+    }
+}

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj	2014-12-29 16:18:37 UTC (rev 8485)
@@ -167,6 +167,9 @@
     <Compile Include="..\Generated\SymbolLibrary-1.0.0.designer.cs">
       <Link>SymbolLibrary\v1.0.0\SymbolLibrary-1.0.0.designer.cs</Link>
     </Compile>
+    <Compile Include="..\Generated\TileSetDefinition-3.0.0.designer.cs">
+      <Link>TileSetDefinition\v3_0_0\TileSetDefinition-3.0.0.designer.cs</Link>
+    </Compile>
     <Compile Include="..\Generated\UnmanagedDataList-1.0.0.designer.cs">
       <Link>Common\UnmanagedDataList-1.0.0.designer.cs</Link>
     </Compile>
@@ -278,6 +281,8 @@
     <Compile Include="SymbolDefinition\v2_4_0\SymbolDefinitionImpl.cs" />
     <Compile Include="SymbolLibrary\v1.0.0\SymbolLibraryImpl.cs" />
     <Compile Include="SymbolLibrary\SymbolLibraryInterfaces.cs" />
+    <Compile Include="TileSetDefinition\TileSetInterfaces.cs" />
+    <Compile Include="TileSetDefinition\v3_0_0\TileSetImpl.cs" />
     <Compile Include="UntypedResource.cs" />
     <Compile Include="Utility.cs" />
     <Compile Include="WatermarkDefinition\v2_3_0\WatermarkDefinitionImpl.cs" />
@@ -300,6 +305,7 @@
   <ItemGroup>
     <None Include="CoreTypes.cd" />
   </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ObjectFactory.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ObjectFactory.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ObjectFactory.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -31,6 +31,7 @@
 using OSGeo.MapGuide.ObjectModels.PrintLayout;
 using OSGeo.MapGuide.ObjectModels.SymbolDefinition;
 using OSGeo.MapGuide.ObjectModels.SymbolLibrary;
+using OSGeo.MapGuide.ObjectModels.TileSetDefinition;
 using OSGeo.MapGuide.ObjectModels.WatermarkDefinition;
 using OSGeo.MapGuide.ObjectModels.WebLayout;
 using System;
@@ -56,47 +57,11 @@
 using WL110 = OSGeo.MapGuide.ObjectModels.WebLayout.v1_1_0;
 using WL240 = OSGeo.MapGuide.ObjectModels.WebLayout.v2_4_0;
 using WL260 = OSGeo.MapGuide.ObjectModels.WebLayout.v2_6_0;
+using Tsd300 = OSGeo.MapGuide.ObjectModels.TileSetDefinition.v3_0_0;
 
 namespace OSGeo.MapGuide.ObjectModels
 {
     /// <summary>
-    /// Factory method signature for creating layer definitions
-    /// </summary>
-    public delegate ILayerDefinition LayerCreatorFunc(LayerType type);
-
-    /// <summary>
-    /// Factory method signature for creating load procedures
-    /// </summary>
-    public delegate ILoadProcedure LoadProcCreatorFunc();
-
-    /// <summary>
-    /// Factory method signature for creating web layouts
-    /// </summary>
-    public delegate IWebLayout WebLayoutCreatorFunc(string mapDefinitionId);
-
-    /// <summary>
-    /// Factory method signature for creating compound symbol definitions
-    /// </summary>
-    public delegate ICompoundSymbolDefinition CompoundSymbolDefCreatorFunc();
-
-    /// <summary>
-    /// Factory method signature for creating simple symbol definitions
-    /// </summary>
-    public delegate ISimpleSymbolDefinition SimpleSymbolDefCreatorFunc();
-
-    /// <summary>
-    /// Factory method signature for creating watermarks
-    /// </summary>
-    /// <returns></returns>
-    public delegate IWatermarkDefinition WatermarkCreatorFunc(SymbolDefinitionType type);
-
-    /// <summary>
-    /// Factory method signature for creating map definitions
-    /// </summary>
-    /// <returns></returns>
-    public delegate IMapDefinition MapDefinitionCreatorFunc();
-
-    /// <summary>
     /// Factory class to create MapGuide resource objects with either pre-defined or
     /// sensible default values. This is recommended over creating the objects directly
     /// as this ensures that there are no null child properties where the XML schema forbids
@@ -112,23 +77,25 @@
     /// </summary>
     public class ObjectFactory
     {
-        private static Dictionary<Version, LayerCreatorFunc> _layerFactories;
-        private static Dictionary<LoadType, LoadProcCreatorFunc> _loadProcFactories;
-        private static Dictionary<Version, WebLayoutCreatorFunc> _wlFactories;
-        private static Dictionary<Version, SimpleSymbolDefCreatorFunc> _simpleSymbolFactories;
-        private static Dictionary<Version, CompoundSymbolDefCreatorFunc> _compoundSymbolFactories;
-        private static Dictionary<Version, MapDefinitionCreatorFunc> _mapDefinitionFactories;
-        private static Dictionary<Version, WatermarkCreatorFunc> _watermarkFactories;
+        private static Dictionary<Version, Func<LayerType, ILayerDefinition>> _layerFactories;
+        private static Dictionary<LoadType, Func<ILoadProcedure>> _loadProcFactories;
+        private static Dictionary<Version, Func<string, IWebLayout>> _wlFactories;
+        private static Dictionary<Version, Func<ISimpleSymbolDefinition>> _simpleSymbolFactories;
+        private static Dictionary<Version, Func<ICompoundSymbolDefinition>> _compoundSymbolFactories;
+        private static Dictionary<Version, Func<IMapDefinition>> _mapDefinitionFactories;
+        private static Dictionary<Version, Func<SymbolDefinitionType, IWatermarkDefinition>> _watermarkFactories;
+        private static Dictionary<Version, Func<ITileSetDefinition>> _tileSetDefinitionFactories;
 
         static ObjectFactory()
         {
-            _layerFactories = new Dictionary<Version, LayerCreatorFunc>();
-            _wlFactories = new Dictionary<Version, WebLayoutCreatorFunc>();
-            _loadProcFactories = new Dictionary<LoadType, LoadProcCreatorFunc>();
-            _simpleSymbolFactories = new Dictionary<Version, SimpleSymbolDefCreatorFunc>();
-            _compoundSymbolFactories = new Dictionary<Version, CompoundSymbolDefCreatorFunc>();
-            _mapDefinitionFactories = new Dictionary<Version, MapDefinitionCreatorFunc>();
-            _watermarkFactories = new Dictionary<Version, WatermarkCreatorFunc>();
+            _layerFactories = new Dictionary<Version,Func<LayerType,ILayerDefinition>>();
+            _wlFactories = new Dictionary<Version,Func<string,IWebLayout>>();
+            _loadProcFactories = new Dictionary<LoadType,Func<ILoadProcedure>>();
+            _simpleSymbolFactories = new Dictionary<Version,Func<ISimpleSymbolDefinition>>();
+            _compoundSymbolFactories = new Dictionary<Version,Func<ICompoundSymbolDefinition>>();
+            _mapDefinitionFactories = new Dictionary<Version,Func<IMapDefinition>>();
+            _watermarkFactories = new Dictionary<Version,Func<SymbolDefinitionType,IWatermarkDefinition>>();
+            _tileSetDefinitionFactories = new Dictionary<Version, Func<ITileSetDefinition>>();
 
             Init();
         }
@@ -142,6 +109,7 @@
             _compoundSymbolFactories.Clear();
             _mapDefinitionFactories.Clear();
             _watermarkFactories.Clear();
+            _tileSetDefinitionFactories.Clear();
             ResourceTypeRegistry.Reset();
             Init();
         }
@@ -150,74 +118,74 @@
         {
             _layerFactories.Add(
                 new Version(1, 0, 0),
-                new LayerCreatorFunc(OSGeo.MapGuide.ObjectModels.LayerDefinition.v1_0_0.LdfEntryPoint.CreateDefault));
+                OSGeo.MapGuide.ObjectModels.LayerDefinition.v1_0_0.LdfEntryPoint.CreateDefault);
 
             _loadProcFactories.Add(
                 LoadType.Sdf,
-                new LoadProcCreatorFunc(OSGeo.MapGuide.ObjectModels.LoadProcedure.v1_0_0.LoadProcEntryPoint.CreateDefaultSdf));
+                OSGeo.MapGuide.ObjectModels.LoadProcedure.v1_0_0.LoadProcEntryPoint.CreateDefaultSdf);
             _loadProcFactories.Add(
                 LoadType.Shp,
-                new LoadProcCreatorFunc(OSGeo.MapGuide.ObjectModels.LoadProcedure.v1_0_0.LoadProcEntryPoint.CreateDefaultShp));
+                OSGeo.MapGuide.ObjectModels.LoadProcedure.v1_0_0.LoadProcEntryPoint.CreateDefaultShp);
             _loadProcFactories.Add(
                 LoadType.Dwf,
-                new LoadProcCreatorFunc(OSGeo.MapGuide.ObjectModels.LoadProcedure.v1_0_0.LoadProcEntryPoint.CreateDefaultDwf));
+                OSGeo.MapGuide.ObjectModels.LoadProcedure.v1_0_0.LoadProcEntryPoint.CreateDefaultDwf);
 
             _wlFactories.Add(
                 new Version(1, 0, 0),
-                new WebLayoutCreatorFunc(OSGeo.MapGuide.ObjectModels.WebLayout.v1_0_0.WebLayoutEntryPoint.CreateDefault));
+                OSGeo.MapGuide.ObjectModels.WebLayout.v1_0_0.WebLayoutEntryPoint.CreateDefault);
 
             _compoundSymbolFactories.Add(
                 new Version(1, 0, 0),
-                new CompoundSymbolDefCreatorFunc(OSGeo.MapGuide.ObjectModels.SymbolDefinition.v1_0_0.CompoundSymbolDefinition.CreateDefault));
+                OSGeo.MapGuide.ObjectModels.SymbolDefinition.v1_0_0.CompoundSymbolDefinition.CreateDefault);
 
             _simpleSymbolFactories.Add(
                 new Version(1, 0, 0),
-                new SimpleSymbolDefCreatorFunc(OSGeo.MapGuide.ObjectModels.SymbolDefinition.v1_0_0.SimpleSymbolDefinition.CreateDefault));
+                OSGeo.MapGuide.ObjectModels.SymbolDefinition.v1_0_0.SimpleSymbolDefinition.CreateDefault);
 
             _mapDefinitionFactories.Add(
                 new Version(1, 0, 0),
-                new MapDefinitionCreatorFunc(OSGeo.MapGuide.ObjectModels.MapDefinition.v1_0_0.MdfEntryPoint.CreateDefault));
+                OSGeo.MapGuide.ObjectModels.MapDefinition.v1_0_0.MdfEntryPoint.CreateDefault);
 
             //Layer Definition 1.1.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LayerDefinition.ToString(), "1.1.0"),
-                new ResourceSerializationCallback(Ldf110.LdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Ldf110.LdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 1, 0), new LayerCreatorFunc(Ldf110.LdfEntryPoint.CreateDefault));
+                Ldf110.LdfEntryPoint.Serialize,
+                Ldf110.LdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 1, 0), Ldf110.LdfEntryPoint.CreateDefault);
 
             //Layer Definition 1.2.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LayerDefinition.ToString(), "1.2.0"),
-                new ResourceSerializationCallback(Ldf120.LdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Ldf120.LdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 2, 0), new LayerCreatorFunc(Ldf120.LdfEntryPoint.CreateDefault));
+                Ldf120.LdfEntryPoint.Serialize,
+                Ldf120.LdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 2, 0), Ldf120.LdfEntryPoint.CreateDefault);
 
             //Layer Definition 1.3.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LayerDefinition.ToString(), "1.3.0"),
-                new ResourceSerializationCallback(Ldf130.LdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Ldf130.LdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 3, 0), new LayerCreatorFunc(Ldf130.LdfEntryPoint.CreateDefault));
+                Ldf130.LdfEntryPoint.Serialize,
+                Ldf130.LdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 3, 0), Ldf130.LdfEntryPoint.CreateDefault);
 
             //Layer Definition 2.3.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LayerDefinition.ToString(), "2.3.0"),
-                new ResourceSerializationCallback(Ldf230.LdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Ldf230.LdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterLayerFactoryMethod(new Version(2, 3, 0), new LayerCreatorFunc(Ldf230.LdfEntryPoint.CreateDefault));
+                Ldf230.LdfEntryPoint.Serialize,
+                Ldf230.LdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterLayerFactoryMethod(new Version(2, 3, 0), Ldf230.LdfEntryPoint.CreateDefault);
 
             //Layer Definition 2.4.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LayerDefinition.ToString(), "2.4.0"),
-                new ResourceSerializationCallback(Ldf240.LdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Ldf240.LdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterLayerFactoryMethod(new Version(2, 4, 0), new LayerCreatorFunc(Ldf240.LdfEntryPoint.CreateDefault));
+                Ldf240.LdfEntryPoint.Serialize,
+                Ldf240.LdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterLayerFactoryMethod(new Version(2, 4, 0), Ldf240.LdfEntryPoint.CreateDefault);
 
             //Load Procedure 1.1.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LoadProcedure.ToString(), "1.1.0"),
-                new ResourceSerializationCallback(Lp110.LoadProcEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Lp110.LoadProcEntryPoint.Deserialize));
+                Lp110.LoadProcEntryPoint.Serialize,
+                Lp110.LoadProcEntryPoint.Deserialize);
 
             //Load Procedure 1.1.0 schema offers nothing new for the ones we want to support, so nothing to register
             //with the ObjectFactory
@@ -225,81 +193,88 @@
             //Load Procedure 2.2.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LoadProcedure.ToString(), "2.2.0"),
-                new ResourceSerializationCallback(Lp220.LoadProcEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Lp220.LoadProcEntryPoint.Deserialize));
-            ObjectFactory.RegisterLoadProcedureFactoryMethod(LoadType.Sqlite, new LoadProcCreatorFunc(Lp220.LoadProcEntryPoint.CreateDefaultSqlite));
+                Lp220.LoadProcEntryPoint.Serialize,
+                Lp220.LoadProcEntryPoint.Deserialize);
+            ObjectFactory.RegisterLoadProcedureFactoryMethod(LoadType.Sqlite, Lp220.LoadProcEntryPoint.CreateDefaultSqlite);
 
             //Web Layout 1.1.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.WebLayout.ToString(), "1.1.0"),
-                new ResourceSerializationCallback(WL110.WebLayoutEntryPoint.Serialize),
-                new ResourceDeserializationCallback(WL110.WebLayoutEntryPoint.Deserialize));
-            ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(1, 1, 0), new WebLayoutCreatorFunc(WL110.WebLayoutEntryPoint.CreateDefault));
+                WL110.WebLayoutEntryPoint.Serialize,
+                WL110.WebLayoutEntryPoint.Deserialize);
+            ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(1, 1, 0), WL110.WebLayoutEntryPoint.CreateDefault);
 
             //Web Layout 2.4.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.WebLayout.ToString(), "2.4.0"),
-                new ResourceSerializationCallback(WL240.WebLayoutEntryPoint.Serialize),
-                new ResourceDeserializationCallback(WL240.WebLayoutEntryPoint.Deserialize));
-            ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(2, 4, 0), new WebLayoutCreatorFunc(WL240.WebLayoutEntryPoint.CreateDefault));
+                WL240.WebLayoutEntryPoint.Serialize,
+                WL240.WebLayoutEntryPoint.Deserialize);
+            ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(2, 4, 0), WL240.WebLayoutEntryPoint.CreateDefault);
 
             //Web Layout 2.6.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.WebLayout.ToString(), "2.6.0"),
-                new ResourceSerializationCallback(WL260.WebLayoutEntryPoint.Serialize),
-                new ResourceDeserializationCallback(WL260.WebLayoutEntryPoint.Deserialize));
-            ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(2, 6, 0), new WebLayoutCreatorFunc(WL260.WebLayoutEntryPoint.CreateDefault));
+                WL260.WebLayoutEntryPoint.Serialize,
+                WL260.WebLayoutEntryPoint.Deserialize);
+            ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(2, 6, 0), WL260.WebLayoutEntryPoint.CreateDefault);
 
             //Symbol Definition 1.1.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.SymbolDefinition.ToString(), "1.1.0"),
-                new ResourceSerializationCallback(Sym110.SymbolDefEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Sym110.SymbolDefEntryPoint.Deserialize));
-            ObjectFactory.RegisterCompoundSymbolFactoryMethod(new Version(1, 1, 0), new CompoundSymbolDefCreatorFunc(Sym110.SymbolDefEntryPoint.CreateDefaultCompound));
-            ObjectFactory.RegisterSimpleSymbolFactoryMethod(new Version(1, 1, 0), new SimpleSymbolDefCreatorFunc(Sym110.SymbolDefEntryPoint.CreateDefaultSimple));
+                Sym110.SymbolDefEntryPoint.Serialize,
+                Sym110.SymbolDefEntryPoint.Deserialize);
+            ObjectFactory.RegisterCompoundSymbolFactoryMethod(new Version(1, 1, 0), Sym110.SymbolDefEntryPoint.CreateDefaultCompound);
+            ObjectFactory.RegisterSimpleSymbolFactoryMethod(new Version(1, 1, 0), Sym110.SymbolDefEntryPoint.CreateDefaultSimple);
 
             //Symbol Definition 2.4.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.SymbolDefinition.ToString(), "2.4.0"),
-                new ResourceSerializationCallback(Sym240.SymbolDefEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Sym240.SymbolDefEntryPoint.Deserialize));
-            ObjectFactory.RegisterCompoundSymbolFactoryMethod(new Version(2, 4, 0), new CompoundSymbolDefCreatorFunc(Sym240.SymbolDefEntryPoint.CreateDefaultCompound));
-            ObjectFactory.RegisterSimpleSymbolFactoryMethod(new Version(2, 4, 0), new SimpleSymbolDefCreatorFunc(Sym240.SymbolDefEntryPoint.CreateDefaultSimple));
+                Sym240.SymbolDefEntryPoint.Serialize,
+                Sym240.SymbolDefEntryPoint.Deserialize);
+            ObjectFactory.RegisterCompoundSymbolFactoryMethod(new Version(2, 4, 0), Sym240.SymbolDefEntryPoint.CreateDefaultCompound);
+            ObjectFactory.RegisterSimpleSymbolFactoryMethod(new Version(2, 4, 0), Sym240.SymbolDefEntryPoint.CreateDefaultSimple);
 
             //Map Definition 2.3.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.MapDefinition.ToString(), "2.3.0"),
-                new ResourceSerializationCallback(Mdf230.MdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Mdf230.MdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterMapDefinitionFactoryMethod(new Version(2, 3, 0), new MapDefinitionCreatorFunc(Mdf230.MdfEntryPoint.CreateDefault));
+                Mdf230.MdfEntryPoint.Serialize,
+                Mdf230.MdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterMapDefinitionFactoryMethod(new Version(2, 3, 0), Mdf230.MdfEntryPoint.CreateDefault);
 
             //Map Definition 2.4.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.MapDefinition.ToString(), "2.4.0"),
-                new ResourceSerializationCallback(Mdf240.MdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Mdf240.MdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterMapDefinitionFactoryMethod(new Version(2, 4, 0), new MapDefinitionCreatorFunc(Mdf240.MdfEntryPoint.CreateDefault));
+                Mdf240.MdfEntryPoint.Serialize,
+                Mdf240.MdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterMapDefinitionFactoryMethod(new Version(2, 4, 0), Mdf240.MdfEntryPoint.CreateDefault);
 
             //Map Definition 3.0.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.MapDefinition.ToString(), "3.0.0"),
-                new ResourceSerializationCallback(Mdf300.MdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Mdf300.MdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterMapDefinitionFactoryMethod(new Version(3, 0, 0), new MapDefinitionCreatorFunc(Mdf300.MdfEntryPoint.CreateDefault));
+                Mdf300.MdfEntryPoint.Serialize,
+                Mdf300.MdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterMapDefinitionFactoryMethod(new Version(3, 0, 0), Mdf300.MdfEntryPoint.CreateDefault);
 
             //Watermark Definition 2.3.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.WatermarkDefinition.ToString(), "2.3.0"),
-                new ResourceSerializationCallback(Wdf230.WdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Wdf230.WdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterWatermarkDefinitionFactoryMethod(new Version(2, 3, 0), new WatermarkCreatorFunc(Wdf230.WdfEntryPoint.CreateDefault));
+                Wdf230.WdfEntryPoint.Serialize,
+                Wdf230.WdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterWatermarkDefinitionFactoryMethod(new Version(2, 3, 0), Wdf230.WdfEntryPoint.CreateDefault);
 
             //Watermark Definition 2.4.0
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.WatermarkDefinition.ToString(), "2.4.0"),
-                new ResourceSerializationCallback(Wdf240.WdfEntryPoint.Serialize),
-                new ResourceDeserializationCallback(Wdf240.WdfEntryPoint.Deserialize));
-            ObjectFactory.RegisterWatermarkDefinitionFactoryMethod(new Version(2, 4, 0), new WatermarkCreatorFunc(Wdf240.WdfEntryPoint.CreateDefault));
+                Wdf240.WdfEntryPoint.Serialize,
+                Wdf240.WdfEntryPoint.Deserialize);
+            ObjectFactory.RegisterWatermarkDefinitionFactoryMethod(new Version(2, 4, 0), Wdf240.WdfEntryPoint.CreateDefault);
+            
+            //Tile Set Definition 3.0.0
+            ResourceTypeRegistry.RegisterResource(
+                new ResourceTypeDescriptor(ResourceTypes.TileSetDefinition.ToString(), "3.0.0"),
+                Tsd300.TileSetDefinition.Serialize,
+                Tsd300.TileSetDefinition.Deserialize);
+            ObjectFactory.RegisterTileSetDefinitionFactoryMethod(new Version(3, 0, 0), Tsd300.TileSetDefinition.CreateDefault);
         }
 
         #region Factory registration
@@ -322,7 +297,7 @@
         /// <param name="resourceType">The resource type descriptor.</param>
         /// <param name="serializeMethod">The serialize method.</param>
         /// <param name="deserializeMethod">The deserialize method.</param>
-        public static void RegisterResourceSerializer(ResourceTypeDescriptor resourceType, ResourceSerializationCallback serializer, ResourceDeserializationCallback deserializer)
+        public static void RegisterResourceSerializer(ResourceTypeDescriptor resourceType, Func<IResource, Stream> serializer, Func<string, IResource> deserializer)
         {
             Check.ArgumentNotNull(resourceType, "resourceType");
             Check.ArgumentNotNull(serializer, "serializer");
@@ -335,7 +310,7 @@
         /// </summary>
         /// <param name="version"></param>
         /// <param name="func"></param>
-        public static void RegisterCompoundSymbolFactoryMethod(Version version, CompoundSymbolDefCreatorFunc func)
+        public static void RegisterCompoundSymbolFactoryMethod(Version version, Func<ICompoundSymbolDefinition> func)
         {
             Check.ArgumentNotNull(version, "version");
             Check.ArgumentNotNull(func, "func");
@@ -350,7 +325,7 @@
         /// </summary>
         /// <param name="version"></param>
         /// <param name="func"></param>
-        public static void RegisterSimpleSymbolFactoryMethod(Version version, SimpleSymbolDefCreatorFunc func)
+        public static void RegisterSimpleSymbolFactoryMethod(Version version, Func<ISimpleSymbolDefinition> func)
         {
             Check.ArgumentNotNull(version, "version");
             Check.ArgumentNotNull(func, "func");
@@ -365,7 +340,7 @@
         /// </summary>
         /// <param name="version">The ver.</param>
         /// <param name="method">The method.</param>
-        public static void RegisterLayerFactoryMethod(Version version, LayerCreatorFunc method)
+        public static void RegisterLayerFactoryMethod(Version version, Func<LayerType, ILayerDefinition> method)
         {
             Check.ArgumentNotNull(version, "version");
             Check.ArgumentNotNull(method, "method");
@@ -380,7 +355,7 @@
         /// </summary>
         /// <param name="type">The type.</param>
         /// <param name="method">The method.</param>
-        public static void RegisterLoadProcedureFactoryMethod(LoadType type, LoadProcCreatorFunc method)
+        public static void RegisterLoadProcedureFactoryMethod(LoadType type, Func<ILoadProcedure> method)
         {
             Check.ArgumentNotNull(method, "method");
             if (_loadProcFactories.ContainsKey(type))
@@ -394,7 +369,7 @@
         /// </summary>
         /// <param name="version">The version.</param>
         /// <param name="method">The method.</param>
-        public static void RegisterWebLayoutFactoryMethod(Version version, WebLayoutCreatorFunc method)
+        public static void RegisterWebLayoutFactoryMethod(Version version, Func<string, IWebLayout> method)
         {
             Check.ArgumentNotNull(version, "version");
             Check.ArgumentNotNull(method, "method");
@@ -409,7 +384,7 @@
         /// </summary>
         /// <param name="version"></param>
         /// <param name="method"></param>
-        public static void RegisterMapDefinitionFactoryMethod(Version version, MapDefinitionCreatorFunc method)
+        public static void RegisterMapDefinitionFactoryMethod(Version version, Func<IMapDefinition> method)
         {
             Check.ArgumentNotNull(version, "version");
             Check.ArgumentNotNull(method, "method");
@@ -424,7 +399,7 @@
         /// </summary>
         /// <param name="version"></param>
         /// <param name="method"></param>
-        public static void RegisterWatermarkDefinitionFactoryMethod(Version version, WatermarkCreatorFunc method)
+        public static void RegisterWatermarkDefinitionFactoryMethod(Version version, Func<SymbolDefinitionType, IWatermarkDefinition> method)
         {
             Check.ArgumentNotNull(version, "version");
             Check.ArgumentNotNull(method, "method");
@@ -433,7 +408,22 @@
 
             _watermarkFactories[version] = method;
         }
+        
+        /// <summary>
+        /// Registers the Tile Set Definition factory method
+        /// </summary>
+        /// <param name="version"></param>
+        /// <param name="func"></param>
+        public static void RegisterTileSetDefinitionFactoryMethod(Version version, Func<ITileSetDefinition> func)
+        {
+            Check.ArgumentNotNull(version, "version");
+            Check.ArgumentNotNull(func, "func");
+            if (_tileSetDefinitionFactories.ContainsKey(version))
+                throw new ArgumentException(Strings.FactoryMethodAlreadyRegistered + version);
 
+            _tileSetDefinitionFactories[version] = func;
+        }
+
         #endregion Factory registration
 
         /// <summary>
@@ -738,6 +728,36 @@
         }
 
         /// <summary>
+        /// Creates the tile set definition
+        /// </summary>
+        /// <param name="version"></param>
+        /// <returns></returns>
+        public static ITileSetDefinition CreateTileSetDefinition(Version version)
+        {
+            Check.ArgumentNotNull(version, "version"); //NOXLATE
+            if (!_mapDefinitionFactories.ContainsKey(version))
+                throw new ArgumentException(Strings.UnknownTileDefinitionVersion + version.ToString());
+
+            var tsd = _tileSetDefinitionFactories[version]();
+            return tsd;
+        }
+
+        /// <summary>
+        /// Creates the tile set definition using the default provider
+        /// </summary>
+        /// <param name="version"></param>
+        /// <param name="name"></param>
+        /// <param name="coordinateSystemWkt"></param>
+        /// <param name="extents"></param>
+        /// <returns></returns>
+        public static ITileSetDefinition CreateTileSetDefinition(Version version, IEnvelope extents)
+        {
+            var tsd = CreateTileSetDefinition(version);
+            tsd.Extents = extents;
+            return tsd;
+        }
+
+        /// <summary>
         /// Creates the web layout.
         /// </summary>
         /// <param name="version">The version.</param>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Properties/AssemblyInfo.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Properties/AssemblyInfo.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -32,5 +32,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.6.0.0")]
-[assembly: AssemblyFileVersion("2.6.0.0")]
\ No newline at end of file
+[assembly: AssemblyVersion("3.0.0.0")]
+[assembly: AssemblyFileVersion("3.0.0.0")]
\ No newline at end of file

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypeRegistry.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypeRegistry.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypeRegistry.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -32,16 +32,6 @@
 namespace OSGeo.MapGuide.ObjectModels
 {
     /// <summary>
-    ///
-    /// </summary>
-    public delegate IResource ResourceDeserializationCallback(string xml);
-
-    /// <summary>
-    ///
-    /// </summary>
-    public delegate Stream ResourceSerializationCallback(IResource res);
-
-    /// <summary>
     /// A resource serializer
     /// </summary>
     public class ResourceSerializer
@@ -50,13 +40,13 @@
         /// Gets or sets the serialize method.
         /// </summary>
         /// <value>The serialize method.</value>
-        public ResourceSerializationCallback Serialize { get; set; }
+        public Func<IResource, Stream> Serialize { get; set; }
 
         /// <summary>
         /// Gets or sets the deserialize method.
         /// </summary>
         /// <value>The deserialize method.</value>
-        public ResourceDeserializationCallback Deserialize { get; set; }
+        public Func<string, IResource> Deserialize { get; set; }
     }
 
     //TODO: Expand on documentation as this is an important class
@@ -209,7 +199,7 @@
         /// <param name="desc">The desc.</param>
         /// <param name="serializeMethod">The serialize method.</param>
         /// <param name="deserializeMethod">The deserialize method.</param>
-        public static void RegisterResource(ResourceTypeDescriptor desc, ResourceSerializationCallback serializeMethod, ResourceDeserializationCallback deserializeMethod)
+        public static void RegisterResource(ResourceTypeDescriptor desc, Func<IResource, Stream> serializeMethod, Func<string, IResource> deserializeMethod)
         {
             RegisterResource(desc, new ResourceSerializer() { Deserialize = deserializeMethod, Serialize = serializeMethod });
         }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypes.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypes.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/ResourceTypes.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -100,6 +100,11 @@
         /// <summary>
         /// A selection for a runtime map
         /// </summary>
-        Selection
+        Selection,
+
+        /// <summary>
+        /// A tile set definition
+        /// </summary>
+        TileSetDefinition
     }
 }
\ No newline at end of file

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.Designer.cs	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.Designer.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -468,6 +468,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Parameter {0} is not applicable for tile provider {1}.
+        /// </summary>
+        internal static string ParameterNotApplicableForTileProvider {
+            get {
+                return ResourceManager.GetString("ParameterNotApplicableForTileProvider", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Precondition failure: .
         /// </summary>
         internal static string PrecondFailure {
@@ -522,6 +531,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Unknown Tile Set Definition version:.
+        /// </summary>
+        internal static string UnknownTileDefinitionVersion {
+            get {
+                return ResourceManager.GetString("UnknownTileDefinitionVersion", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Unknown Watermark Definition version: .
         /// </summary>
         internal static string UnknownWatermarkDefinitionVersion {

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.resx
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.resx	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/Strings.resx	2014-12-29 16:18:37 UTC (rev 8485)
@@ -2718,4 +2718,10 @@
   <Extension />
 </ApplicationDefinition></value>
   </data>
+  <data name="UnknownTileDefinitionVersion" xml:space="preserve">
+    <value>Unknown Tile Set Definition version:</value>
+  </data>
+  <data name="ParameterNotApplicableForTileProvider" xml:space="preserve">
+    <value>Parameter {0} is not applicable for tile provider {1}</value>
+  </data>
 </root>
\ No newline at end of file

Added: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/TileSetInterfaces.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/TileSetInterfaces.cs	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/TileSetInterfaces.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -0,0 +1,294 @@
+#region Disclaimer / License
+
+// Copyright (C) 2014, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// 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 Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+
+using OSGeo.MapGuide.ObjectModels.Common;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.MapDefinition;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.ObjectModels.TileSetDefinition
+{
+    public interface ITileSetDefinition : IResource
+    {
+        ITileStoreParameters TileStoreParameters { get; }
+
+        IEnvelope Extents { get; set; }
+
+        IEnumerable<IBaseMapGroup> BaseGroups { get; }
+    }
+
+    public interface ITileStoreParameters
+    {
+        string TileProvider { get; set; }
+
+        void AddParameter(string name, string value);
+
+        void SetParameter(string name, string value);
+
+        IEnumerable<INameStringPair> Parameters { get; }
+
+        void ClearParameters();
+
+        event EventHandler ParametersChanged;
+    }
+
+    public static class ExtensionMethods
+    {
+        /// <summary>
+        /// Gets the tile set parameter of the specified name
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="name"></param>
+        /// <returns></returns>
+        public static INameStringPair GetParameter(this ITileSetDefinition tileSet, string name)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+
+            return tileSet.TileStoreParameters.Parameters.FirstOrDefault(p => p.Name == name);
+        }
+
+        /// <summary>
+        /// Gets the coordinate system of this tile set. Must be using the default tile provider
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <returns></returns>
+        public static string GetDefaultCoordinateSystem(this ITileSetDefinition tileSet)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+
+            var p = tileSet.GetParameter("CoordinateSystem"); //NOXLATE
+            if (p != null)
+                return p.Value;
+            return null;
+        }
+
+        /// <summary>
+        /// Sets the coordinate system of this tile set. Must be using the default tile provider.
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="coordinateSystem"></param>
+        public static void SetDefaultCoordinateSystem(this ITileSetDefinition tileSet, string coordinateSystem)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            Check.ArgumentNotEmpty(coordinateSystem, "coordinateSystem"); //NOXLATE
+
+            if (tileSet.TileStoreParameters.TileProvider == "Default") //NOXLATE
+                throw new InvalidOperationException(string.Format(Strings.ParameterNotApplicableForTileProvider, "CoordinateSystem", tileSet.TileStoreParameters.TileProvider));
+
+            tileSet.TileStoreParameters.SetParameter("CoordinateSystem", coordinateSystem); //NOXLATE
+        }
+
+        /// <summary>
+        /// Gets the finite scale list of this tile set. Must be using the default tile provider.
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <returns></returns>
+        public static double[] GetDefaultFiniteScaleList(this ITileSetDefinition tileSet)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            var p = tileSet.GetParameter("FiniteScaleList"); //NOXLATE
+            if (p != null)
+                return p.Value.Split(',').Select(x => x.Trim()).Select(x => Convert.ToDouble(x)).ToArray();
+            return new double[0];
+        }
+
+        /// <summary>
+        /// Sets the finite scale list of this tile set. Must be using the default tile provider.
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="scales"></param>
+        public static void SetDefaultFiniteScaleList(this ITileSetDefinition tileSet, IEnumerable<double> scales)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            Check.ArgumentNotNull(scales, "scales"); //NOXLATE
+
+            if (tileSet.TileStoreParameters.TileProvider == "Default") //NOXLATE
+                throw new InvalidOperationException(string.Format(Strings.ParameterNotApplicableForTileProvider, "FiniteScaleList", tileSet.TileStoreParameters.TileProvider)); //NOXLATE
+
+            string str = string.Join(",", scales.OrderByDescending(x => x).Select(x => x.ToString(CultureInfo.InvariantCulture)).ToArray());
+            tileSet.TileStoreParameters.SetParameter("FiniteScaleList", str); //NOXLATE
+        }
+
+        /// <summary>
+        /// Gets the tile path of this tile set
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <returns></returns>
+        public static string GetTilePath(this ITileSetDefinition tileSet)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            var p = tileSet.GetParameter("TilePath"); //NOXLATE
+            if (p != null)
+                return p.Value;
+            return null;
+        }
+
+        /// <summary>
+        /// Sets the path of this tile set
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="path"></param>
+        public static void SetTilePath(this ITileSetDefinition tileSet, string path)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            Check.ArgumentNotEmpty(path, "path"); //NOXLATE
+            tileSet.TileStoreParameters.SetParameter("TilePath", path); //NOXLATE
+        }
+
+        /// <summary>
+        /// Gets the width of this tile set. Must be using the default tile provider.
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <returns></returns>
+        public static int? GetDefaultTileWidth(this ITileSetDefinition tileSet)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            var p = tileSet.GetParameter("TileWidth"); //NOXLATE
+            if (p != null)
+                return Convert.ToInt32(p.Value);
+            return null;
+        }
+
+        /// <summary>
+        /// Sets the width of this tile set. Must be using the default tile provider.
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="value"></param>
+        public static void SetDefaultTileWidth(this ITileSetDefinition tileSet, int value)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            if (tileSet.TileStoreParameters.TileProvider == "XYZ") //NOXLATE
+                throw new InvalidOperationException(string.Format(Strings.ParameterNotApplicableForTileProvider, "TileWidth", "XYZ")); //NOXLATE
+            tileSet.TileStoreParameters.SetParameter("TileWidth", value.ToString(CultureInfo.InvariantCulture)); //NOXLATE
+        }
+
+        /// <summary>
+        /// Gets the width of this tile set. Must be using the default tile provider.
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <returns></returns>
+        public static int? GetDefaultTileHeight(this ITileSetDefinition tileSet)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            var p = tileSet.GetParameter("TileHeight"); //NOXLATE
+            if (p != null)
+                return Convert.ToInt32(p.Value);
+            return null;
+        }
+
+        /// <summary>
+        /// Sets the height of this tile set. Must be using the default tile provider.
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="value"></param>
+        public static void SetDefaultTileHeight(this ITileSetDefinition tileSet, int value)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            if (tileSet.TileStoreParameters.TileProvider == "XYZ")
+                throw new InvalidOperationException(string.Format(Strings.ParameterNotApplicableForTileProvider, "TileHeight", "XYZ")); //NOXLATE
+            tileSet.TileStoreParameters.SetParameter("TileHeight", value.ToString(CultureInfo.InvariantCulture)); //NOXLATE
+        }
+
+        /// <summary>
+        /// Gets the image format of this tile set
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <returns></returns>
+        public static string GetTileFormat(this ITileSetDefinition tileSet)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            var p = tileSet.GetParameter("TileFormat"); //NOXLATE
+            if (p != null)
+                return p.Value;
+            return null;
+        }
+
+        /// <summary>
+        /// Sets the image format of this tile set
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="format"></param>
+        public static void SetTileFormat(this ITileSetDefinition tileSet, string format)
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+            Check.ArgumentNotEmpty(format, "format"); //NOXLATE
+            tileSet.TileStoreParameters.SetParameter("TileFormat", format); //NOXLATE
+        }
+
+        /// <summary>
+        /// Sets XYZ provider parameters. Any existing parameters are cleared
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="tileFormat"></param>
+        /// <param name="tilePath"></param>
+        public static void SetXYZProviderParameters(this ITileSetDefinition tileSet,
+                                                    string tileFormat = "PNG",
+                                                    string tilePath = "%MG_TILE_CACHE_PATH%")
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+
+            var param = tileSet.TileStoreParameters;
+            param.TileProvider = "XYZ"; //NOXLATE
+            param.ClearParameters();
+
+            param.AddParameter("TileFormat", tileFormat); //NOXLATE
+            param.AddParameter("TilePath", tilePath); //NOXLATE
+        }
+
+        /// <summary>
+        /// Sets default provider parameters. Any existing parameters are cleared
+        /// </summary>
+        /// <param name="tileSet"></param>
+        /// <param name="tileWidth"></param>
+        /// <param name="tileHeight"></param>
+        /// <param name="coordinateSystem"></param>
+        /// <param name="finiteScaleList"></param>
+        /// <param name="tileFormat"></param>
+        /// <param name="tilePath"></param>
+        public static void SetDefaultProviderParameters(this ITileSetDefinition tileSet, 
+                                                        int tileWidth,
+                                                        int tileHeight,
+                                                        string coordinateSystem,
+                                                        double [] finiteScaleList,
+                                                        string tileFormat = "PNG", //NOXLATE
+                                                        string tilePath = "%MG_TILE_CACHE_PATH%") //NOXLATE
+        {
+            Check.ArgumentNotNull(tileSet, "tileSet"); //NOXLATE
+
+            var param = tileSet.TileStoreParameters;
+            param.TileProvider = "Default"; //NOXLATE
+            param.ClearParameters();
+
+            param.AddParameter("TileWidth", tileWidth.ToString(CultureInfo.InvariantCulture)); //NOXLATE
+            param.AddParameter("TileHeight", tileHeight.ToString(CultureInfo.InvariantCulture)); //NOXLATE
+            param.AddParameter("TileFormat", tileFormat); //NOXLATE
+            param.AddParameter("CoordinateSystem", coordinateSystem); //NOXLATE
+            string str = string.Join(",", finiteScaleList.OrderByDescending(x => x).Select(x => x.ToString(CultureInfo.InvariantCulture)).ToArray()); //NOXLATE
+            param.AddParameter("FiniteScaleList", str); //NOXLATE
+            param.AddParameter("TilePath", tilePath); //NOXLATE
+        }
+    }
+}

Added: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/v3_0_0/TileSetImpl.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/v3_0_0/TileSetImpl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/TileSetDefinition/v3_0_0/TileSetImpl.cs	2014-12-29 16:18:37 UTC (rev 8485)
@@ -0,0 +1,367 @@
+#region Disclaimer / License
+
+// Copyright (C) 2014, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// 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 Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+
+using OSGeo.MapGuide.ObjectModels.Common;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.MapDefinition;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Xml.Serialization;
+
+namespace OSGeo.MapGuide.ObjectModels.TileSetDefinition.v3_0_0
+{
+    partial class TileSetDefinition : ITileSetDefinition
+    {
+        public static ITileSetDefinition CreateDefault()
+        {
+            return new TileSetDefinition()
+            {
+                TileStoreParameters = new TileStoreParametersType()
+                {
+                    Parameter = new System.ComponentModel.BindingList<NameValuePairType>(),
+                    TileProvider = "Default" //NOXLATE
+                },
+                Extents = new Box2DType() { MaxX = 0.0, MaxY = 0.0, MinX = 0.0, MinY = 0.0 },
+                BaseMapLayerGroup = new System.ComponentModel.BindingList<BaseMapLayerGroupCommonType>()
+            };
+        }
+
+        [XmlIgnore]
+        public string ValidatingSchema
+        {
+            get { return "TileSetDefinition-3.0.0.xsd"; } //NOXLATE
+        }
+
+        private string _resId;
+
+        [XmlIgnore]
+        public string ResourceID
+        {
+            get
+            {
+                return _resId;
+            }
+            set
+            {
+                if (!ResourceIdentifier.Validate(value))
+                    throw new InvalidOperationException(Strings.ErrorInvalidResourceIdentifier);
+
+                var res = new ResourceIdentifier(value);
+                if (res.Extension != ResourceTypes.TileSetDefinition.ToString())
+                    throw new InvalidOperationException(string.Format(Strings.ErrorUnexpectedResourceType, res.ToString(), ResourceTypes.SymbolDefinition));
+
+                _resId = value;
+                this.OnPropertyChanged("ResourceID"); //NOXLATE
+            }
+        }
+
+        [XmlIgnore]
+        public string ResourceType
+        {
+            get { return ResourceTypes.TileSetDefinition.ToString(); }
+        }
+
+        [XmlIgnore]
+        public bool IsStronglyTyped
+        {
+            get { return true; }
+        }
+
+        protected static readonly Version RES_VERSION = new Version(3, 0, 0);
+
+        [XmlIgnore]
+        public Version ResourceVersion
+        {
+            get { return RES_VERSION; }
+        }
+
+        object ICloneable.Clone()
+        {
+            return this.Clone();
+        }
+
+        public static Stream Serialize(IResource res)
+        {
+            return res.SerializeToStream();
+        }
+
+        ITileStoreParameters ITileSetDefinition.TileStoreParameters
+        {
+            get { return this.TileStoreParameters; }
+        }
+
+        Common.IEnvelope ITileSetDefinition.Extents
+        {
+            get
+            {
+                return this.Extents;
+            }
+            set
+            {
+                if (this.Extents == null)
+                {
+                    var ext = new Box2DType()
+                    {
+                        MaxX = value.MaxX,
+                        MaxY = value.MaxY,
+                        MinX = value.MinX,
+                        MinY = value.MinY
+                    };
+                    this.Extents = ext;
+                }
+                else
+                {
+                    this.Extents.MaxX = value.MaxX;
+                    this.Extents.MaxY = value.MaxY;
+                    this.Extents.MinX = value.MinX;
+                    this.Extents.MinY = value.MinY;
+                    OnPropertyChanged("Extents"); //NOXLATE
+                }
+            }
+        }
+
+        public IEnumerable<IBaseMapGroup> BaseGroups
+        {
+            get 
+            {
+                if (this.BaseMapLayerGroup != null )
+                {
+                    foreach (var grp in this.BaseMapLayerGroup)
+                    {
+                        yield return grp;
+                    }
+                }
+            }
+        }
+    }
+
+    partial class Box2DType : IEnvelope
+    {
+
+    }
+
+    partial class TileStoreParametersType : ITileStoreParameters
+    {
+        public void AddParameter(string name, string value)
+        {
+            this.Parameter.Add(new NameValuePairType() { Name = name, Value = value });
+            OnParametersChanged();
+        }
+
+        public void SetParameter(string name, string value)
+        {
+            if (this.Parameter != null)
+            {
+                var param = this.Parameter.Where(x => x.Name == name);
+                if (param.Count() == 0)
+                {
+                    this.AddParameter(name, value);
+                }
+                else if (param.Count() > 1)
+                {
+                    //Remove and replace
+                    foreach(var p in param)
+                    {
+                        this.Parameter.Remove(p);
+                    }
+                    this.AddParameter(name, value);
+                }
+                else //1
+                {
+                    var p = param.First();
+                    if (p.Value != value)
+                    {
+                        p.Value = value;
+                        OnParametersChanged();
+                    }
+                }
+            }
+        }
+
+        public IEnumerable<INameStringPair> Parameters
+        {
+            get
+            {
+                if (this.Parameter != null)
+                {
+                    foreach (var nvp in this.Parameter)
+                    {
+                        yield return nvp;
+                    }
+                }
+            }
+        }
+
+        public void ClearParameters()
+        {
+            if (this.Parameter != null)
+            {
+                this.Parameter.Clear();
+            }
+        }
+
+        private void OnParametersChanged()
+        {
+            var h = this.ParametersChanged;
+            if (h != null)
+                h(this, EventArgs.Empty);
+        }
+
+        public event EventHandler ParametersChanged;
+    }
+
+    partial class NameValuePairType : INameStringPair
+    {
+
+    }
+
+    partial class BaseMapLayerType : IBaseMapLayer
+    {
+        [XmlIgnore]
+        public ITileSetDefinition Parent
+        {
+            get;
+            set;
+        }
+    }
+
+    partial class BaseMapLayerGroupCommonType : IBaseMapGroup
+    {
+        [XmlIgnore]
+        public ITileSetDefinition Parent
+        {
+            get;
+            set;
+        }
+
+        [XmlIgnore]
+        IEnumerable<IBaseMapLayer> IBaseMapGroup.BaseMapLayer
+        {
+            get
+            {
+                foreach (var lyr in this.BaseMapLayer)
+                {
+                    yield return lyr;
+                }
+            }
+        }
+
+        public int GetIndex(IBaseMapLayer layer)
+        {
+            var bl = layer as BaseMapLayerType;
+            if (bl != null)
+            {
+                return this.BaseMapLayer.IndexOf(bl);
+            }
+            return -1;
+        }
+
+        public void InsertLayer(int index, IBaseMapLayer layer)
+        {
+            var bl = layer as BaseMapLayerType;
+            if (bl != null)
+            {
+                this.BaseMapLayer.Insert(index, bl);
+            }
+        }
+
+        public IBaseMapLayer AddLayer(string layerName, string resourceId)
+        {
+            BaseMapLayerType layer = new BaseMapLayerType()
+            {
+                Parent = this.Parent,
+                ExpandInLegend = true,
+                LegendLabel = layerName,
+                Name = layerName,
+                ResourceId = resourceId,
+                ShowInLegend = true,
+                Selectable = true
+            };
+            this.BaseMapLayer.Add(layer);
+            OnPropertyChanged("BaseMapLayer"); //NOXLATE
+            return layer;
+        }
+
+        public void RemoveBaseMapLayer(IBaseMapLayer layer)
+        {
+            var lyr = layer as BaseMapLayerType;
+            if (lyr != null)
+            {
+                this.BaseMapLayer.Remove(lyr);
+                OnPropertyChanged("BaseMapLayer"); //NOXLATE
+            }
+        }
+
+        int IBaseMapGroup.MoveUp(IBaseMapLayer layer)
+        {
+            var lyr = layer as BaseMapLayerType;
+            if (lyr != null)
+            {
+                int isrc = this.BaseMapLayer.IndexOf(lyr);
+                if (isrc > 0)
+                {
+                    int idst = isrc - 1;
+                    var src = this.BaseMapLayer[isrc];
+                    var dst = this.BaseMapLayer[idst];
+
+                    //swap
+                    this.BaseMapLayer[isrc] = dst;
+                    this.BaseMapLayer[idst] = src;
+
+                    OnPropertyChanged("BaseMapLayer"); //NOXLATE
+
+                    return idst;
+                }
+            }
+
+            return -1;
+        }
+
+        int IBaseMapGroup.MoveDown(IBaseMapLayer layer)
+        {
+            var lyr = layer as BaseMapLayerType;
+            if (lyr != null)
+            {
+                int isrc = this.BaseMapLayer.IndexOf(lyr);
+                if (isrc < this.BaseMapLayer.Count - 1)
+                {
+                    int idst = isrc + 1;
+                    var src = this.BaseMapLayer[isrc];
+                    var dst = this.BaseMapLayer[idst];
+
+                    //swap
+                    this.BaseMapLayer[isrc] = dst;
+                    this.BaseMapLayer[idst] = src;
+
+                    OnPropertyChanged("BaseMapLayer"); //NOXLATE
+
+                    return idst;
+                }
+            }
+
+            return -1;
+        }
+    }
+}

Modified: trunk/Tools/Maestro/UnitTests.playlist
===================================================================
--- trunk/Tools/Maestro/UnitTests.playlist	2014-12-29 14:27:24 UTC (rev 8484)
+++ trunk/Tools/Maestro/UnitTests.playlist	2014-12-29 16:18:37 UTC (rev 8485)
@@ -1 +1 @@
-<Playlist Version="1.0"><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.GeometricPropertyDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.IndexOfTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestWebLayoutConversions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestUniqueIssues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.FindPropertyTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities240" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.WriteXmlTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestParse3dWkt" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities220" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestLayerScaleRangeOverlap" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionConversions" /><Add Test="
 OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestLoadProcedureValidation" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestOdbcLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.GeometryTypesToStringTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.AddClassTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestWebLayout" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestOdbcSaveLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.FeatureReaderTests.TestXmlFeatureJoinValues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities120" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.FeatureReaderTests.TestXmlAggregateNullValues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.GetOrdinalTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestArgParser" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.T
 ests.FeatureSchemaTests.CloneTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionNestedGroupDelete" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.RemovePropertyTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerRemove" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.SchemaTests.TestCreate" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionGroupReordering" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsSaveLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestOdbcLoad2" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.RemovePropertyAtTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.GetClassTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.ClassDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities250" /><Add
  Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities200" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.RemoveClassTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.DataPropertyDefinitionTests.IsNumericTypeTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.SchemaTests.TestClassNameEncoding" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities110" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestSymbolDefinitionConversions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities210" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.GetIndividualGeometricTypesTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestValidationResultSet" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsLoad3" /><
 Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.DataPropertyDefinitionTests.DataPropertyDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionGroupRemove" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities260" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.SpecificGeometryTypesTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestMySqlSchema" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.SchemaTests.TestFeatureSchemaRoundtrip" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities100" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionGroupAdd" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities230" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsLoad2" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestLoadProcedureCon
 versions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestLayerDefinitionConversions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.GetItemTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestCase1896" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerAdd" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.ClearIdentityPropertiesTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.FeatureReaderTests.TestXmlFeatureNullValues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerReordering" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.IndexOfPropertyTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.CloneTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestParseXyzmWkt" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestConnectionString" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.Featu
 reSchemaTests.FeatureSchemaTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerInsert" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterLayerFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMapDefinitionTestWithNameAndCoordSys" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateWatermarkTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.FeatureSourceTests.TestFeatureSourceFileParameters" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimplePointTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateCalculatedPropertyTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreatePoint3DTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterCompoundSymbolFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSymbolLibraryTest" /><Add
  Test="OSGeo.MapGuide.ObjectModel.Tests.ResourceTests.TestResourceTypeDescriptor" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.ResourceTests.TestValidResourceIdentifiers" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMetadataTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterSimpleSymbolFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterWatermarkDefinitionFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSecurityUserTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimpleSymbolTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateAttributeRelationTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.DrawingSourceTests.DrawingSourceDeserializationWithFullContentModel" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateFeatureSourceExtensionTest" /><Add Test="OSGeo.MapGu
 ide.ObjectModels.Tests.ObjectFactoryTests.CreateLoadProcedureTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.ResourceTests.TestCloning" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterWebLayoutFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateFeatureSourceTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.ApplicationDefinitionTests.ApplicationDefinitionDeserializationWithFullContentModel" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreatePrintLayoutTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMapDefinitionTestWithNameAndCoordSysAndExtent" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreatePoint2DTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterResourceTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSecurityGroupTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.Object
 FactoryTests.CreateSimpleLabelTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateFeatureSourceTestWithParameters" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimpleSolidLineTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateLoadProcedureTestWithFileNames" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateEnvelopeTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateDefaultLayerTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateCompoundSymbolTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimpleSolidFillTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterResourceSerializerTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.FeatureSourceTests.FeatureSourceDeserializationWithFullContentModel" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterMap
 DefinitionFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterLoadProcedureFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateDrawingSourceTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMapDefinitionTestWithName" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.ResourceMigratorTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.MoveResourcesWithOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.CopyResourcesWithOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.CopyResourcesWithoutOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.MoveResourcesWithoutOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceRebaserTests.RebaseTest"
  /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceRebaserTests.ResourceRebaserTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.UnsupportedConnectionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetLayerByNameTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.RemoveLayerAtTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.UpdateMapDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.IndexOfLayerTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.RemoveGroupTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.SetViewCenterTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetGroupByNameTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetGroupsOfGroupTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetLayer
 sOfGroupTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.RemoveLayerTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetLayerByObjectIdTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.InsertLayerTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.ToMapDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetFiniteDisplayScaleAtTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.SetLayerIndexTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.NotNullTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.RangeTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.IsFolderTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.NotEmptyTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.PreconditionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Resource.Tests.ResourceSchemaChainTests.
 GetValidatingSchemasTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.MapDefinitionTests.DeserializationTest_V30" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.MapDefinitionTests.CreateTest_V30" /></Playlist>
\ No newline at end of file
+<Playlist Version="1.0"><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.GeometricPropertyDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.IndexOfTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestWebLayoutConversions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestUniqueIssues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.FindPropertyTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities240" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.WriteXmlTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestParse3dWkt" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities220" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestLayerScaleRangeOverlap" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionConversions" /><Add Test="
 OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestLoadProcedureValidation" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestOdbcLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.GeometryTypesToStringTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.AddClassTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestWebLayout" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestOdbcSaveLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.FeatureReaderTests.TestXmlFeatureJoinValues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities120" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.FeatureReaderTests.TestXmlAggregateNullValues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.GetOrdinalTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestArgParser" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.T
 ests.FeatureSchemaTests.CloneTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionNestedGroupDelete" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.RemovePropertyTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerRemove" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.SchemaTests.TestCreate" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionGroupReordering" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsSaveLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestOdbcLoad2" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.RemovePropertyAtTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.GetClassTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.ClassDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities250" /><Add
  Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities200" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.RemoveClassTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.DataPropertyDefinitionTests.IsNumericTypeTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.SchemaTests.TestClassNameEncoding" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities110" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestSymbolDefinitionConversions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities210" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.GetIndividualGeometricTypesTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestValidationResultSet" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsLoad" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsLoad3" /><
 Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.DataPropertyDefinitionTests.DataPropertyDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionGroupRemove" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities260" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.GeometricPropertyDefinitionTests.SpecificGeometryTypesTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestMySqlSchema" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.SchemaTests.TestFeatureSchemaRoundtrip" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities100" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionGroupAdd" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.CapabilityTests.TestHttpCapabilities230" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ConfigurationDocumentTests.TestWmsLoad2" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestLoadProcedureCon
 versions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestLayerDefinitionConversions" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.FeatureSchemaTests.GetItemTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ValidationTests.TestCase1896" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerAdd" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.ClearIdentityPropertiesTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.FeatureReaderTests.TestXmlFeatureNullValues" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerReordering" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.IndexOfPropertyTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.SchemaTests.CloneTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestParseXyzmWkt" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.MiscTests.TestConnectionString" /><Add Test="OSGeo.MapGuide.MaestroAPI.Schema.Tests.Featu
 reSchemaTests.FeatureSchemaTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Tests.ResourceTests.TestMapDefinitionLayerInsert" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterLayerFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMapDefinitionTestWithNameAndCoordSys" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateWatermarkTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.FeatureSourceTests.TestFeatureSourceFileParameters" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimplePointTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateCalculatedPropertyTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreatePoint3DTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterCompoundSymbolFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSymbolLibraryTest" /><Add
  Test="OSGeo.MapGuide.ObjectModel.Tests.ResourceTests.TestResourceTypeDescriptor" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.ResourceTests.TestValidResourceIdentifiers" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMetadataTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterSimpleSymbolFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterWatermarkDefinitionFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSecurityUserTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimpleSymbolTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateAttributeRelationTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.DrawingSourceTests.DrawingSourceDeserializationWithFullContentModel" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateFeatureSourceExtensionTest" /><Add Test="OSGeo.MapGu
 ide.ObjectModels.Tests.ObjectFactoryTests.CreateLoadProcedureTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.ResourceTests.TestCloning" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterWebLayoutFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateFeatureSourceTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.ApplicationDefinitionTests.ApplicationDefinitionDeserializationWithFullContentModel" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreatePrintLayoutTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMapDefinitionTestWithNameAndCoordSysAndExtent" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreatePoint2DTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterResourceTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSecurityGroupTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.Object
 FactoryTests.CreateSimpleLabelTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateFeatureSourceTestWithParameters" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimpleSolidLineTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateLoadProcedureTestWithFileNames" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateEnvelopeTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateDefaultLayerTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateCompoundSymbolTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateSimpleSolidFillTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterResourceSerializerTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.FeatureSourceTests.FeatureSourceDeserializationWithFullContentModel" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterMap
 DefinitionFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterLoadProcedureFactoryMethodTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateDrawingSourceTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.CreateMapDefinitionTestWithName" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.ResourceMigratorTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.MoveResourcesWithOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.CopyResourcesWithOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.CopyResourcesWithoutOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceMigratorTests.MoveResourcesWithoutOverwriteTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceRebaserTests.RebaseTest"
  /><Add Test="OSGeo.MapGuide.MaestroAPI.CrossConnection.Tests.ResourceRebaserTests.ResourceRebaserTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.UnsupportedConnectionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetLayerByNameTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.RemoveLayerAtTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.UpdateMapDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.IndexOfLayerTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.RemoveGroupTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.SetViewCenterTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetGroupByNameTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetGroupsOfGroupTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetLayer
 sOfGroupTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.RemoveLayerTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetLayerByObjectIdTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.InsertLayerTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.ToMapDefinitionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.GetFiniteDisplayScaleAtTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Mapping.Tests.RuntimeMapTests.SetLayerIndexTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.NotNullTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.RangeTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.IsFolderTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.NotEmptyTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.CheckTests.PreconditionTest" /><Add Test="OSGeo.MapGuide.MaestroAPI.Resource.Tests.ResourceSchemaChainTests.
 GetValidatingSchemasTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.MapDefinitionTests.DeserializationTest_V30" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.MapDefinitionTests.CreateTest_V30" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.TileSetDefinitionTests.CreateTest" /><Add Test="OSGeo.MapGuide.ObjectModel.Tests.TileSetDefinitionTests.DeserializationTest" /><Add Test="OSGeo.MapGuide.ObjectModels.Tests.ObjectFactoryTests.RegisterTileSetDefinitionFactoryMethodTest" /></Playlist>
\ No newline at end of file



More information about the mapguide-commits mailing list