[mapguide-commits] r6267 - in trunk/Tools/Maestro: MaestroAPITests OSGeo.MapGuide.MaestroAPI/ObjectModels

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Nov 30 07:03:27 EST 2011


Author: jng
Date: 2011-11-30 04:03:27 -0800 (Wed, 30 Nov 2011)
New Revision: 6267

Modified:
   trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs
Log:
#1876: Make group deletion recursive

Modified: trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs	2011-11-30 11:16:15 UTC (rev 6266)
+++ trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs	2011-11-30 12:03:27 UTC (rev 6267)
@@ -896,5 +896,61 @@
                 }
             }
         }
+
+        [Test]
+        public void TestMapDefinitionNestedGroupDelete()
+        {
+            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)));
+            }
+
+            IMapDefinition mdf = ObjectFactory.CreateMapDefinition(conn, "Test");
+            /*
+             
+             [G] Group1
+                [L] Layer1
+                [G] Group2
+                   [L] Layer2
+                   [G] Group3
+                      [L] Layer3
+             [G] Group4
+                [L] Layer4
+             
+             */
+            var grp1 = mdf.AddGroup("Group1");
+            var grp2 = mdf.AddGroup("Group2");
+            var grp3 = mdf.AddGroup("Group3");
+            var grp4 = mdf.AddGroup("Group4");
+
+            grp3.Group = "Group2";
+            grp2.Group = "Group1";
+
+            var lyr1 = mdf.AddLayer("Group1", "Layer1", "Library://Test.LayerDefinition");
+            var lyr2 = mdf.AddLayer("Group2", "Layer2", "Library://Test.LayerDefinition");
+            var lyr3 = mdf.AddLayer("Group3", "Layer3", "Library://Test.LayerDefinition");
+            var lyr4 = mdf.AddLayer("Group4", "Layer4", "Library://Test.LayerDefinition");
+
+            //Delete group 1. Expect the following structure
+            /*
+             [G] Group4
+                [L] Layer4
+             */
+
+            mdf.RemoveLayerGroupAndChildLayers("Group1");
+            Assert.AreEqual(1, mdf.GetGroupCount());
+            Assert.AreEqual(1, mdf.GetLayerCount());
+            Assert.Null(mdf.GetLayerByName("Layer1"));
+            Assert.Null(mdf.GetLayerByName("Layer2"));
+            Assert.Null(mdf.GetLayerByName("Layer3"));
+            Assert.NotNull(mdf.GetLayerByName("Layer4"));
+            Assert.Null(mdf.GetGroupByName("Group1"));
+            Assert.Null(mdf.GetGroupByName("Group2"));
+            Assert.Null(mdf.GetGroupByName("Group3"));
+            Assert.NotNull(mdf.GetGroupByName("Group4"));
+        }
     }
 }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs	2011-11-30 11:16:15 UTC (rev 6266)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs	2011-11-30 12:03:27 UTC (rev 6267)
@@ -465,7 +465,22 @@
             Check.NotNull(map, "map");
             Check.NotEmpty(groupName, "groupName");
 
-            var group = map.GetGroupByName(groupName);
+            var affectedParentGroups = new Dictionary<string, List<IMapLayerGroup>>();
+            IMapLayerGroup group = null;
+            foreach (var grp in map.MapLayerGroup)
+            {
+                if (grp.Name == groupName)
+                    group = grp;
+
+                string parentGroupName = grp.Group;
+                if (!string.IsNullOrEmpty(parentGroupName))
+                {
+                    if (!affectedParentGroups.ContainsKey(parentGroupName))
+                        affectedParentGroups[parentGroupName] = new List<IMapLayerGroup>();
+                    affectedParentGroups[parentGroupName].Add(grp);
+                }
+            }
+
             if (group != null)
             {
                 List<IMapLayer> layers = new List<IMapLayer>(map.GetLayersForGroup(groupName));
@@ -480,6 +495,16 @@
                 //Then the group
                 map.RemoveGroup(group);
 
+                //Then see if any child groups are under this group and remove them too
+                if (affectedParentGroups.ContainsKey(group.Name))
+                {
+                    for (int i = 0; i < affectedParentGroups[group.Name].Count; i++)
+                    {
+                        var removeMe = affectedParentGroups[group.Name][i];
+                        removed += map.RemoveLayerGroupAndChildLayers(removeMe.Name);
+                    }
+                }
+
                 return removed;
             }
             return 0;



More information about the mapguide-commits mailing list