[mapguide-commits] r6036 - in trunk/Tools/Maestro: MaestroAPITests OSGeo.MapGuide.ExtendedObjectModels OSGeo.MapGuide.ExtendedObjectModels/Properties OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/Resource/Conversion

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Aug 4 12:00:10 EDT 2011


Author: jng
Date: 2011-08-04 09:00:10 -0700 (Thu, 04 Aug 2011)
New Revision: 6036

Removed:
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceConverter.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceUpgrader.cs
Modified:
   trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj
   trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
   trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/OSGeo.MapGuide.ExtendedObjectModels.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/IResourceConverter.cs
Log:
#1769: Add API and unit tests for resource upgrades. 

Modified: trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj	2011-08-04 16:00:10 UTC (rev 6036)
@@ -288,34 +288,10 @@
     </None>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\ExtendedModels\LayerDefinition-1.1.0\OSGeo.MapGuide.ObjectModels.LayerDefinition-1.1.0.csproj">
-      <Project>{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}</Project>
-      <Name>OSGeo.MapGuide.ObjectModels.LayerDefinition-1.1.0</Name>
+    <ProjectReference Include="..\OSGeo.MapGuide.ExtendedObjectModels\OSGeo.MapGuide.ExtendedObjectModels.csproj">
+      <Project>{B3A2B816-9F41-4857-A111-09D2DF2550D6}</Project>
+      <Name>OSGeo.MapGuide.ExtendedObjectModels</Name>
     </ProjectReference>
-    <ProjectReference Include="..\ExtendedModels\LayerDefinition-1.2.0\OSGeo.MapGuide.ObjectModels.LayerDefinition-1.2.0.csproj">
-      <Project>{EDDB0F74-6FE7-4969-80B0-817A629722CD}</Project>
-      <Name>OSGeo.MapGuide.ObjectModels.LayerDefinition-1.2.0</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\ExtendedModels\LayerDefinition-1.3.0\OSGeo.MapGuide.ObjectModels.LayerDefinition-1.3.0.csproj">
-      <Project>{AC5068F6-CFBE-4BCD-B68B-062725E424D4}</Project>
-      <Name>OSGeo.MapGuide.ObjectModels.LayerDefinition-1.3.0</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\ExtendedModels\LoadProcedure-1.1.0\OSGeo.MapGuide.ObjectModels.LoadProcedure-1.1.0.csproj">
-      <Project>{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}</Project>
-      <Name>OSGeo.MapGuide.ObjectModels.LoadProcedure-1.1.0</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\ExtendedModels\LoadProcedure-2.2.0\OSGeo.MapGuide.ObjectModels.LoadProcedure-2.2.0.csproj">
-      <Project>{D525B343-66D6-4D6B-9A55-78A173D94A51}</Project>
-      <Name>OSGeo.MapGuide.ObjectModels.LoadProcedure-2.2.0</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\ExtendedModels\SymbolDefinition-1.1.0\OSGeo.MapGuide.ObjectModels.SymbolDefinition-1.1.0.csproj">
-      <Project>{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}</Project>
-      <Name>OSGeo.MapGuide.ObjectModels.SymbolDefinition-1.1.0</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\ExtendedModels\WebLayout-1.1.0\OSGeo.MapGuide.ObjectModels.WebLayout-1.1.0.csproj">
-      <Project>{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}</Project>
-      <Name>OSGeo.MapGuide.ObjectModels.WebLayout-1.1.0</Name>
-    </ProjectReference>
     <ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI.Http\OSGeo.MapGuide.MaestroAPI.Http.csproj">
       <Project>{6EF1E775-444B-4E5F-87FB-D687C43A68D7}</Project>
       <Name>OSGeo.MapGuide.MaestroAPI.Http</Name>

Modified: trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs	2011-08-04 16:00:10 UTC (rev 6036)
@@ -444,189 +444,6 @@
         }
 
         [Test]
-        public void TestNoConversionOnIdenticalVersion()
-        {
-            //Verify origial reference is returned if we're converting a resource to the same version
-            _mocks = new Mockery();
-            var conn = _mocks.NewMock<IServerConnection>();
-            var caps = _mocks.NewMock<IConnectionCapabilities>();
-            Stub.On(conn).GetProperty("Capabilities").Will(Return.Value(caps));
-            foreach (var rt in Enum.GetValues(typeof(ResourceTypes)))
-            {
-                Stub.On(caps).Method("GetMaxSupportedResourceVersion").With(rt).Will(Return.Value(new Version(1, 0, 0)));
-            }
-
-            var conv = new ResourceConverter(new List<IResourceConverter>());
-            var targetVer = new Version(1, 0, 0);
-
-            var app = ObjectFactory.DeserializeEmbeddedFlexLayout();
-            var app2 = conv.Upgrade(app, targetVer);
-            Assert.AreSame(app, app2);
-
-            var fs = ObjectFactory.CreateFeatureSource(conn, "OSGeo.SDF");
-            var fs2 = conv.Upgrade(fs, targetVer);
-            Assert.AreSame(fs, fs2);
-
-            var ld = ObjectFactory.CreateDefaultLayer(conn, LayerType.Vector, new Version(1, 0, 0));
-            var ld2 = conv.Upgrade(ld, targetVer);
-            Assert.AreSame(ld, ld2);
-
-            var md = ObjectFactory.CreateMapDefinition(conn, "Test Map");
-            var md2 = conv.Upgrade(md, targetVer);
-            Assert.AreSame(md, md2);
-
-            var wl = ObjectFactory.CreateWebLayout(conn, new Version(1, 0, 0), "Library://Test.MapDefinition");
-            var wl2 = conv.Upgrade(wl, targetVer);
-            Assert.AreSame(wl, wl2);
-
-            var ssd = ObjectFactory.CreateSimpleSymbol(conn, new Version(1, 0, 0), "Test", "Test Symbol");
-            var ssd2 = conv.Upgrade(ssd, targetVer);
-            Assert.AreSame(ssd, ssd2);
-
-            var csd = ObjectFactory.CreateCompoundSymbol(conn, new Version(1, 0, 0), "Test", "Test Symbol");
-            var csd2 = conv.Upgrade(csd, targetVer);
-            Assert.AreSame(csd, csd2);
-
-            var pl = ObjectFactory.CreatePrintLayout(conn);
-            var pl2 = conv.Upgrade(pl, targetVer);
-            Assert.AreSame(pl, pl2);
-        }
-
-        [Test]
-        public void TestSingleUpgrade()
-        {
-            _mocks = new Mockery();
-
-            var orig = _mocks.NewMock<IResource>();
-            Stub.On(orig).GetProperty("ResourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(orig).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(orig).Method("Clone").WithAnyArguments().Will(Return.Value(orig));
-
-            var res2 = _mocks.NewMock<IResource>();
-            Stub.On(res2).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(res2).GetProperty("ResourceVersion").Will(Return.Value(new Version(1, 1, 0)));
-
-            var upg = _mocks.NewMock<IResourceConverter>();
-            Stub.On(upg).GetProperty("SourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(upg).GetProperty("TargetVersion").Will(Return.Value(new Version(1, 1, 0)));
-            Stub.On(upg).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(upg).Method("Convert").WithAnyArguments().Will(Return.Value(res2));
-
-            var upgList = new List<IResourceConverter>();
-            upgList.Add(upg);
-            var conv = new ResourceConverter(upgList);
-
-            var obj = conv.Upgrade(orig, new Version(1, 1, 0));
-            Assert.AreEqual(obj.ResourceVersion, new Version(1, 1, 0));
-
-            try
-            {
-                //No 1.0.0 -> 1.2.0 converter registered. Should fail.
-                obj = conv.Upgrade(orig, new Version(1, 2, 0));
-                Assert.Fail("An exception should've been thrown (no upgrade path)");
-            }
-            catch (ResourceConversionException)
-            {
-
-            }
-        }
-        
-        [Test]
-        [ExpectedException(typeof(ResourceConversionException))]
-        public void TestClashingUpgraders()
-        {
-            _mocks = new Mockery();
-            var upg = _mocks.NewMock<IResourceConverter>();
-            Stub.On(upg).GetProperty("SourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(upg).GetProperty("TargetVersion").Will(Return.Value(new Version(1, 1, 0)));
-            Stub.On(upg).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-
-            var upg2 = _mocks.NewMock<IResourceConverter>();
-            Stub.On(upg2).GetProperty("SourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(upg2).GetProperty("TargetVersion").Will(Return.Value(new Version(1, 3, 0)));
-            Stub.On(upg2).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-
-            var upgList = new List<IResourceConverter>();
-            upgList.Add(upg);
-            upgList.Add(upg2);
-            var conv = new ResourceConverter(upgList);
-        }
-
-        [Test]
-        public void TestIncrementalUpgrade()
-        {
-            //Verify a resource is upgraded to the correct version
-            //when going through multiple upgraders
-
-            _mocks = new Mockery();
-
-            var orig = _mocks.NewMock<IResource>();
-            Stub.On(orig).GetProperty("ResourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(orig).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(orig).Method("Clone").WithAnyArguments().Will(Return.Value(orig));
-
-            var orig11 = _mocks.NewMock<IResource>();
-            Stub.On(orig11).GetProperty("ResourceVersion").Will(Return.Value(new Version(1, 1, 0)));
-            Stub.On(orig11).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(orig11).Method("Clone").WithAnyArguments().Will(Return.Value(orig11));
-
-            var orig12 = _mocks.NewMock<IResource>();
-            Stub.On(orig12).GetProperty("ResourceVersion").Will(Return.Value(new Version(1, 2, 0)));
-            Stub.On(orig12).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(orig12).Method("Clone").WithAnyArguments().Will(Return.Value(orig12));
-
-            var upg = _mocks.NewMock<IResourceConverter>();
-            Stub.On(upg).GetProperty("SourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(upg).GetProperty("TargetVersion").Will(Return.Value(new Version(1, 1, 0)));
-            Stub.On(upg).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(upg).Method("Convert").WithAnyArguments().Will(Return.Value(orig11));
-
-            var upg2 = _mocks.NewMock<IResourceConverter>();
-            Stub.On(upg2).GetProperty("SourceVersion").Will(Return.Value(new Version(1, 1, 0)));
-            Stub.On(upg2).GetProperty("TargetVersion").Will(Return.Value(new Version(1, 2, 0)));
-            Stub.On(upg2).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(upg2).Method("Convert").WithAnyArguments().Will(Return.Value(orig12));
-
-            var upgList = new List<IResourceConverter>() { upg, upg2 };
-            var conv = new ResourceConverter(upgList);
-
-            var obj = conv.Upgrade(orig, new Version(1, 2, 0));
-            Assert.AreEqual(obj.ResourceVersion, new Version(1, 2, 0));
-        }
-
-        [Test]
-        [ExpectedException(typeof(ResourceConversionException))]
-        public void TestBrokenUpgradePath()
-        {
-            //Verify exception thrown when there is a version gap
-            //in the upgrade path
-
-            _mocks = new Mockery();
-            var upg = _mocks.NewMock<IResourceConverter>();
-            Stub.On(upg).GetProperty("SourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(upg).GetProperty("TargetVersion").Will(Return.Value(new Version(1, 1, 0)));
-            Stub.On(upg).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-
-            var upg2 = _mocks.NewMock<IResourceConverter>();
-            Stub.On(upg2).GetProperty("SourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(upg2).GetProperty("TargetVersion").Will(Return.Value(new Version(1, 3, 0)));
-            Stub.On(upg2).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-
-            var orig = _mocks.NewMock<IResource>();
-            Stub.On(orig).GetProperty("ResourceVersion").Will(Return.Value(new Version(1, 0, 0)));
-            Stub.On(orig).GetProperty("ResourceType").Will(Return.Value(ResourceTypes.LayerDefinition));
-            Stub.On(orig).Method("Clone").WithAnyArguments().Will(Return.Value(orig));
-
-            var upgList = new List<IResourceConverter>();
-            upgList.Add(upg);
-            upgList.Add(upg2);
-            var conv = new ResourceConverter(upgList);
-
-            //There's no 1.1.0 -> 1.2.0 upgrader registered. This should fail.
-            var obj = conv.Upgrade(orig, new Version(1, 3, 0));
-        }
-
-        [Test]
         public void TestWebLayout()
         {
             var conn = _mocks.NewMock<IServerConnection>();
@@ -782,5 +599,292 @@
             rtd = new ResourceTypeDescriptor(ResourceTypes.WebLayout, "1.0.0");
             Assert.AreEqual(rtd.XsdName, "WebLayout-1.0.0.xsd");
         }
+
+        [Test]
+        public void TestLayerDefinitionConversions()
+        {
+            var conn = _mocks.NewMock<IServerConnection>();
+            var conv = new ResourceObjectConverter();
+            var ldf = ObjectFactory.CreateDefaultLayer(conn, LayerType.Vector, new Version(1, 0, 0));
+
+            Assert.AreEqual("1.0.0", ldf.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LayerDefinition-1.0.0.xsd", ldf.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LayerDefinition-1.0.0.xsd", ldf.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 0, 0), ldf.ResourceVersion);
+            
+            using (var fs = File.OpenWrite("LayerDef_100.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(ldf))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var ldf1 = (ILayerDefinition)conv.Convert(ldf, new Version(1, 1, 0));
+
+            Assert.AreEqual("1.1.0", ldf1.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LayerDefinition-1.1.0.xsd", ldf1.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LayerDefinition-1.1.0.xsd", ldf1.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 1, 0), ldf1.ResourceVersion);
+            Assert.NotNull(ldf1.CurrentConnection);
+
+            using (var fs = File.OpenWrite("LayerDef_110.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(ldf1))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var ldf2 = (ILayerDefinition)conv.Convert(ldf1, new Version(1, 2, 0));
+
+            Assert.AreEqual("1.2.0", ldf2.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LayerDefinition-1.2.0.xsd", ldf2.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LayerDefinition-1.2.0.xsd", ldf2.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 2, 0), ldf2.ResourceVersion);
+            Assert.NotNull(ldf2.CurrentConnection);
+
+            using (var fs = File.OpenWrite("LayerDef_120.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(ldf2))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var ldf3 = (ILayerDefinition)conv.Convert(ldf2, new Version(1, 3, 0));
+
+            Assert.AreEqual("1.3.0", ldf3.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LayerDefinition-1.3.0.xsd", ldf3.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LayerDefinition-1.3.0.xsd", ldf3.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 3, 0), ldf3.ResourceVersion);
+            Assert.NotNull(ldf3.CurrentConnection);
+
+            using (var fs = File.OpenWrite("LayerDef_130.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(ldf3))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var ldf4 = (ILayerDefinition)conv.Convert(ldf2, new Version(2, 3, 0));
+
+            Assert.AreEqual("2.3.0", ldf4.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LayerDefinition-2.3.0.xsd", ldf4.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LayerDefinition-2.3.0.xsd", ldf4.ValidatingSchema);
+            Assert.AreEqual(new Version(2, 3, 0), ldf4.ResourceVersion);
+            Assert.NotNull(ldf4.CurrentConnection);
+            Assert.IsTrue(ldf4.SubLayer is ISubLayerDefinition2);
+
+            using (var fs = File.OpenWrite("LayerDef_230.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(ldf4))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+        }
+
+        [Test]
+        public void TestMapDefinitionConversions()
+        {
+            var conn = _mocks.NewMock<IServerConnection>();
+            var conv = new ResourceObjectConverter();
+
+            var mdf = ObjectFactory.CreateMapDefinition(conn, new Version(1, 0, 0), "Test Map");
+
+            Assert.AreEqual("1.0.0", mdf.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("MapDefinition-1.0.0.xsd", mdf.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("MapDefinition-1.0.0.xsd", mdf.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 0, 0), mdf.ResourceVersion);
+
+            using (var fs = File.OpenWrite("MapDef_100.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(mdf))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var mdf2 = (IMapDefinition)conv.Convert(mdf, new Version(2, 3, 0));
+
+            Assert.AreEqual("2.3.0", mdf2.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("MapDefinition-2.3.0.xsd", mdf2.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("MapDefinition-2.3.0.xsd", mdf2.ValidatingSchema);
+            Assert.AreEqual(new Version(2, 3, 0), mdf2.ResourceVersion);
+            Assert.NotNull(mdf2.CurrentConnection);
+            Assert.True(mdf2 is IMapDefinition2);
+
+            using (var fs = File.OpenWrite("MapDef_230.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(mdf2))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+        }
+
+        [Test]
+        public void TestLoadProcedureConversions()
+        {
+            var conn = _mocks.NewMock<IServerConnection>();
+            var conv = new ResourceObjectConverter();
+
+            var lproc = ObjectFactory.CreateLoadProcedure(conn, LoadType.Sdf);
+
+            Assert.AreEqual("1.0.0", lproc.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LoadProcedure-1.0.0.xsd", lproc.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LoadProcedure-1.0.0.xsd", lproc.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 0, 0), lproc.ResourceVersion);
+
+            using (var fs = File.OpenWrite("LoadProc_100.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(lproc))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var lproc2 = (ILoadProcedure)conv.Convert(lproc, new Version(1, 1, 0));
+
+            Assert.AreEqual("1.1.0", lproc2.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LoadProcedure-1.1.0.xsd", lproc2.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LoadProcedure-1.1.0.xsd", lproc2.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 1, 0), lproc2.ResourceVersion);
+            Assert.NotNull(lproc2.CurrentConnection);
+
+            using (var fs = File.OpenWrite("LoadProc_110.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(lproc2))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var lproc3 = (ILoadProcedure)conv.Convert(lproc2, new Version(2, 2, 0));
+
+            Assert.AreEqual("2.2.0", lproc3.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("LoadProcedure-2.2.0.xsd", lproc3.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("LoadProcedure-2.2.0.xsd", lproc3.ValidatingSchema);
+            Assert.AreEqual(new Version(2, 2, 0), lproc3.ResourceVersion);
+            Assert.NotNull(lproc3.CurrentConnection);
+
+            using (var fs = File.OpenWrite("LoadProc_220.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(lproc3))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+        }
+
+        [Test]
+        public void TestWebLayoutConversions()
+        {
+            var conn = _mocks.NewMock<IServerConnection>();
+            var conv = new ResourceObjectConverter();
+
+            var wl = ObjectFactory.CreateWebLayout(conn, new Version(1, 0, 0), "Library://Test.MapDefinition");
+
+            Assert.AreEqual("1.0.0", wl.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("WebLayout-1.0.0.xsd", wl.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("WebLayout-1.0.0.xsd", wl.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 0, 0), wl.ResourceVersion);
+
+            using (var fs = File.OpenWrite("WebLayout_100.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(wl))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var wl2 = (IWebLayout)conv.Convert(wl, new Version(1, 1, 0));
+
+            Assert.AreEqual("1.1.0", wl2.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("WebLayout-1.1.0.xsd", wl2.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("WebLayout-1.1.0.xsd", wl2.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 1, 0), wl2.ResourceVersion);
+            Assert.NotNull(wl2.CurrentConnection);
+            Assert.True(wl2 is IWebLayout2);
+
+            using (var fs = File.OpenWrite("WebLayout_110.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(wl2))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+        }
+
+        [Test]
+        public void TestSymbolDefinitionConversions()
+        {
+            var conn = _mocks.NewMock<IServerConnection>();
+            var conv = new ResourceObjectConverter();
+
+            var ssym = ObjectFactory.CreateSimpleSymbol(conn, new Version(1, 0, 0), "SimpleSymbolTest", "Test simple symbol");
+
+            Assert.AreEqual("1.0.0", ssym.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("SymbolDefinition-1.0.0.xsd", ssym.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("SymbolDefinition-1.0.0.xsd", ssym.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 0, 0), ssym.ResourceVersion);
+
+            using (var fs = File.OpenWrite("SimpleSymDef_100.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(ssym))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var ssym2 = (ISimpleSymbolDefinition)conv.Convert(ssym, new Version(1, 1, 0));
+
+            Assert.AreEqual("1.1.0", ssym2.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("SymbolDefinition-1.1.0.xsd", ssym2.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("SymbolDefinition-1.1.0.xsd", ssym2.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 1, 0), ssym2.ResourceVersion);
+            Assert.NotNull(ssym2.CurrentConnection);
+
+            using (var fs = File.OpenWrite("SimpleSymDef_110.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(ssym2))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var csym = ObjectFactory.CreateCompoundSymbol(conn, new Version(1, 0, 0), "CompoundSymbolTest", "Test compound symbol");
+
+            Assert.AreEqual("1.0.0", csym.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("SymbolDefinition-1.0.0.xsd", csym.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("SymbolDefinition-1.0.0.xsd", csym.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 0, 0), csym.ResourceVersion);
+
+            using (var fs = File.OpenWrite("CompoundSymDef_100.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(csym))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+
+            var csym2 = (ICompoundSymbolDefinition)conv.Convert(csym, new Version(1, 1, 0));
+
+            Assert.AreEqual("1.1.0", csym2.GetResourceTypeDescriptor().Version);
+            Assert.AreEqual("SymbolDefinition-1.1.0.xsd", csym2.GetResourceTypeDescriptor().XsdName);
+            Assert.AreEqual("SymbolDefinition-1.1.0.xsd", csym2.ValidatingSchema);
+            Assert.AreEqual(new Version(1, 1, 0), csym2.ResourceVersion);
+            Assert.NotNull(csym2.CurrentConnection);
+
+            using (var fs = File.OpenWrite("CompoundSymDef_110.xml"))
+            {
+                using (var src = ResourceTypeRegistry.Serialize(csym2))
+                {
+                    Utility.CopyStream(src, fs);
+                }
+            }
+        }
     }
 }

Modified: trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs	2011-08-04 16:00:10 UTC (rev 6036)
@@ -30,13 +30,6 @@
 
 namespace MaestroAPITests
 {
-    using Ldf110 = OSGeo.MapGuide.ObjectModels.LayerDefinition_1_1_0;
-    using Ldf120 = OSGeo.MapGuide.ObjectModels.LayerDefinition_1_2_0;
-    using Ldf130 = OSGeo.MapGuide.ObjectModels.LayerDefinition_1_3_0;
-
-    using Lp110 = OSGeo.MapGuide.ObjectModels.LoadProcedure_1_1_0;
-    using Lp220 = OSGeo.MapGuide.ObjectModels.LoadProcedure_2_2_0;
-    using WL110 = OSGeo.MapGuide.ObjectModels.WebLayout_1_1_0;
     using OSGeo.MapGuide.ObjectModels;
     using OSGeo.MapGuide.MaestroAPI.Resource.Validation;
     using OSGeo.MapGuide.MaestroAPI.Resource;
@@ -44,6 +37,7 @@
     using System.Diagnostics;
     using OSGeo.MapGuide.MaestroAPI.CoordinateSystem;
     using System.Drawing;
+    using OSGeo.MapGuide.ExtendedObjectModels;
 
     [SetUpFixture]
     public class TestBootstrap
@@ -56,56 +50,7 @@
         {
             if (!_registered)
             {
-                //Layer Definition 1.1.0
-                ResourceValidatorSet.RegisterValidator(new Ldf110.LayerDefinitionValidator());
-                ResourceTypeRegistry.RegisterResource(
-                    new ResourceTypeDescriptor(ResourceTypes.LayerDefinition, "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));
-
-                //Layer Definition 1.2.0
-                ResourceValidatorSet.RegisterValidator(new Ldf120.LayerDefinitionValidator());
-                ResourceTypeRegistry.RegisterResource(
-                    new ResourceTypeDescriptor(ResourceTypes.LayerDefinition, "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));
-
-                //Layer Definition 1.3.0
-                ResourceValidatorSet.RegisterValidator(new Ldf130.LayerDefinitionValidator());
-                ResourceTypeRegistry.RegisterResource(
-                    new ResourceTypeDescriptor(ResourceTypes.LayerDefinition, "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));
-
-                //Load Procedure 1.1.0
-                ResourceValidatorSet.RegisterValidator(new Lp110.LoadProcedureValidator());
-                ResourceTypeRegistry.RegisterResource(
-                    new ResourceTypeDescriptor(ResourceTypes.LoadProcedure, "1.1.0"),
-                    new ResourceSerializationCallback(Lp110.LoadProcEntryPoint.Serialize),
-                    new ResourceDeserializationCallback(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
-
-                //Load Procedure 2.2.0
-                ResourceValidatorSet.RegisterValidator(new Lp220.LoadProcedureValidator());
-                ResourceTypeRegistry.RegisterResource(
-                    new ResourceTypeDescriptor(ResourceTypes.LoadProcedure, "2.2.0"),
-                    new ResourceSerializationCallback(Lp220.LoadProcEntryPoint.Serialize),
-                    new ResourceDeserializationCallback(Lp220.LoadProcEntryPoint.Deserialize));
-                ObjectFactory.RegisterLoadProcedureFactoryMethod(LoadType.Sqlite, new LoadProcCreatorFunc(Lp220.LoadProcEntryPoint.CreateDefaultSqlite));
-
-                //Web Layout 1.1.0
-                ResourceValidatorSet.RegisterValidator(new WL110.WebLayoutValidator());
-                ResourceTypeRegistry.RegisterResource(
-                    new ResourceTypeDescriptor(ResourceTypes.WebLayout, "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));
-
+                ModelSetup.Initialize();
                 _registered = true;
             }
         }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/OSGeo.MapGuide.ExtendedObjectModels.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/OSGeo.MapGuide.ExtendedObjectModels.csproj	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/OSGeo.MapGuide.ExtendedObjectModels.csproj	2011-08-04 16:00:10 UTC (rev 6036)
@@ -37,6 +37,12 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="..\Properties\GlobalAssemblyInfo.cs">
+      <Link>GlobalAssemblyInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Properties\SignedAssemblyInfo.cs">
+      <Link>SignedAssemblyInfo.cs</Link>
+    </Compile>
     <Compile Include="ModelSetup.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/Properties/AssemblyInfo.cs	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/Properties/AssemblyInfo.cs	2011-08-04 16:00:10 UTC (rev 6036)
@@ -7,10 +7,7 @@
 // associated with an assembly.
 [assembly: AssemblyTitle("OSGeo.MapGuide.ExtendedObjectModels")]
 [assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("OSGeo.MapGuide.ExtendedObjectModels")]
-[assembly: AssemblyCopyright("Copyright ©  2011")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -21,16 +18,3 @@
 
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 [assembly: Guid("59a0a5e6-9ed7-4600-82e6-f48a993354bf")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// 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("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2011-08-04 16:00:10 UTC (rev 6036)
@@ -305,8 +305,6 @@
     <Compile Include="Resource\Validation\BaseLoadProcedureValidator.cs" />
     <Compile Include="Resource\Validation\BaseWebLayoutValidator.cs" />
     <Compile Include="Resource\Conversion\IResourceConverter.cs" />
-    <Compile Include="Resource\Conversion\ResourceConverter.cs" />
-    <Compile Include="Resource\Conversion\ResourceUpgrader.cs" />
     <Compile Include="Resource\IResource.cs" />
     <Compile Include="Resource\IResourceValidator.cs" />
     <Compile Include="Resource\IVersionedEntity.cs" />

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/IResourceConverter.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/IResourceConverter.cs	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/IResourceConverter.cs	2011-08-04 16:00:10 UTC (rev 6036)
@@ -20,48 +20,45 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.IO;
 
 namespace OSGeo.MapGuide.MaestroAPI.Resource.Conversion
 {
     /// <summary>
     /// Performs schematic upgrades of resources
     /// </summary>
-    public interface IResourceConversionService
+    public interface IResourceConverter
     {
         /// <summary>
-        /// Upgrades the resource
+        /// Converts the resource to the specified version
         /// </summary>
         /// <param name="resource">The resource.</param>
         /// <param name="targetVersion">The target version.</param>
         /// <returns></returns>
-        IResource Upgrade(IResource resource, Version targetVersion);
+        IResource Convert(IResource resource, Version targetVersion);
     }
 
-    /// <summary>
-    /// Converts a specified resource to a specified version
-    /// </summary>
-    public interface IResourceConverter
+    public class ResourceObjectConverter : IResourceConverter
     {
-        /// <summary>
-        /// Gets the type of resource this can convert
-        /// </summary>
-        ResourceTypes ResourceType { get; }
+        public IResource Convert(IResource resource, Version targetVersion)
+        {
+            var resVer = resource.GetResourceTypeDescriptor().Version;
+            var dstVer = string.Format("{0}.{1}.{2}", targetVersion.Major, targetVersion.Minor, targetVersion.Build);
+            var dstXsd = resource.ValidatingSchema.Replace(resVer, dstVer);
 
-        /// <summary>
-        /// Gets the version this converter can convert from
-        /// </summary>
-        Version SourceVersion { get; }
+            using (var sr = ResourceTypeRegistry.Serialize(resource))
+            {
+                using (var str = new StreamReader(sr))
+                {
+                    var xml = new StringBuilder(str.ReadToEnd());
+                    xml.Replace(resource.ValidatingSchema, dstXsd);
+                    xml.Replace("version=\"" + resVer, "version=\"" + dstVer);
 
-        /// <summary>
-        /// Gets the version this converter will convert to
-        /// </summary>
-        Version TargetVersion { get; }
-
-        /// <summary>
-        /// Converts the resource
-        /// </summary>
-        /// <param name="resource"></param>
-        /// <returns></returns>
-        IResource Convert(IResource resource);
+                    var convRes = ResourceTypeRegistry.Deserialize(xml.ToString());
+                    convRes.CurrentConnection = resource.CurrentConnection;
+                    return convRes;
+                }
+            }
+        }
     }
 }

Deleted: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceConverter.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceConverter.cs	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceConverter.cs	2011-08-04 16:00:10 UTC (rev 6036)
@@ -1,107 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2010, 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
-using System;
-using System.Collections.Generic;
-using System.Text;
-using OSGeo.MapGuide.MaestroAPI.Exceptions;
-
-namespace OSGeo.MapGuide.MaestroAPI.Resource.Conversion
-{
-    /// <summary>
-    /// Resource conversion services
-    /// </summary>
-    public class ResourceConverter : IResourceConversionService
-    {
-        private IList<IResourceConverter> _upgraders;
-
-        internal ResourceConverter(IList<IResourceConverter> upgraders)
-        {
-            ValidateConverterList(upgraders);
-            _upgraders = upgraders;
-        }
-
-        private void ValidateConverterList(IList<IResourceConverter> upgraders)
-        {
-            var conv = new Dictionary<ResourceTypeDescriptor, IResourceConverter>();
-            foreach (var upg in upgraders)
-            {
-                var desc = new ResourceTypeDescriptor(upg.ResourceType, upg.SourceVersion.ToString());
-                if (conv.ContainsKey(desc))
-                    throw new ResourceConversionException(string.Format(Properties.Resources.ERR_CONVERTER_ALREADY_REGISTERED, upg.ResourceType + " " + upg.SourceVersion));
-
-                conv.Add(desc, upg);
-            }
-        }
-
-        private IResourceConverter FindUpgrader(ResourceTypes resourceType, Version source)
-        {
-            foreach (var conv in _upgraders)
-            {
-                if (conv.SourceVersion == source && conv.ResourceType == resourceType)
-                    return conv;
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// Performs the upgrade of a given resource. If the versions differ
-        /// by more than one revision, the upgrade is done incrementally. (eg. Upgrading
-        /// a 1.0.0 Layer Definition to 1.2.0 will go from:
-        ///  - 1.0.0 to 1.1.0
-        ///  - 1.1.0 to 1.2.0
-        ///  
-        /// If the target version matches the resource's version, the original resource is returned
-        /// </summary>
-        /// <param name="resource"></param>
-        /// <param name="version"></param>
-        /// <returns></returns>
-        public IResource Upgrade(IResource resource, Version version)
-        {
-            if (resource.ResourceVersion == version)
-                return resource;
-
-            var rt = resource.ResourceType;
-            IResource res = (IResource)resource.Clone();
-            Version currentVer = res.ResourceVersion;
-            //Construct the upgrade path
-            List<IResourceConverter> upgradePath = new List<IResourceConverter>();
-            while (currentVer < version)
-            {
-                var conv = FindUpgrader(rt, currentVer);
-                if (conv == null)
-                    break;
-
-                upgradePath.Add(conv);
-                currentVer = conv.TargetVersion;
-            }
-
-            if (currentVer != version)
-            {
-                throw new ResourceConversionException(Properties.Resources.ERR_NO_UPGRADE_PATH);
-            }
-
-            for (int i = 0; i < upgradePath.Count; i++)
-            {
-                res = upgradePath[i].Convert(res);
-            }
-            return res;
-        }
-    }
-}

Deleted: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceUpgrader.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceUpgrader.cs	2011-08-04 14:13:13 UTC (rev 6035)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Conversion/ResourceUpgrader.cs	2011-08-04 16:00:10 UTC (rev 6036)
@@ -1,92 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2010, 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
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace OSGeo.MapGuide.MaestroAPI.Resource.Conversion
-{
-    /// <summary>
-    /// Base class of all resource converter classes
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    public abstract class ResourceUpgrader<T> : IResourceConverter where T : IResource
-    {
-        /// <summary>
-        /// Gets the version this converter will convert to
-        /// </summary>
-        /// <value></value>
-        public abstract Version TargetVersion
-        {
-            get;
-        }
-
-        /// <summary>
-        /// Converts the specified resource.
-        /// </summary>
-        /// <param name="resource">The resource.</param>
-        /// <returns></returns>
-        public T Convert(T resource)
-        {
-            if (resource.ResourceVersion > this.TargetVersion)
-                throw new InvalidOperationException(Properties.Resources.ERR_CANNOT_UPGRADE_NEWER_RESOURCE);
-
-            if (resource.ResourceVersion == this.TargetVersion)
-                return resource;
-
-            return Upgrade(resource);
-        }
-
-        /// <summary>
-        /// Upgrades the resource to the target version
-        /// </summary>
-        /// <param name="resource"></param>
-        /// <returns></returns>
-        protected abstract T Upgrade(T resource);
-
-        /// <summary>
-        /// Converts the resource
-        /// </summary>
-        /// <param name="resource"></param>
-        /// <returns></returns>
-        public IResource Convert(IResource resource)
-        {
-            return Convert((T)resource);
-        }
-
-        /// <summary>
-        /// Gets the version this converter can convert from
-        /// </summary>
-        /// <value></value>
-        public abstract Version SourceVersion
-        {
-            get;
-        }
-
-        /// <summary>
-        /// Gets the type of resource this can convert
-        /// </summary>
-        /// <value></value>
-        public abstract ResourceTypes ResourceType
-        {
-            get;
-        }
-    }
-}



More information about the mapguide-commits mailing list