[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