using System; using System.Collections; using System.Collections.Generic; namespace Groups { // -------------------------------------------------------------------- public class GroupMember { // define the information needed to describe a group member public GroupMember(Guid memberGuid, string memberTitle, DateTime memberSince) { //_MemberName = memberName; Removed - Name/Guid translation should be elsewhere, we only need store one _MemberGuid = memberGuid; _MemberTitle = memberTitle; _MemberSince = memberSince; } public void WriteToConsole() { Console.WriteLine("Member GUID={0}, Title {1}, Last Login {2}", _MemberGuid, _MemberTitle, _MemberSince); } //public string _MemberName; public Guid _MemberGuid; public string _MemberTitle; public DateTime _MemberSince; } // -------------------------------------------------------------------- public class GroupRole { // define the information needed to describe a group role public GroupRole(string roleName, string permissions) { _RoleName = roleName; _RoleGuid = Guid.NewGuid(); _Permissions = permissions; //This should be a bit field of some form TBD } List GroupRoles = new List(); public string _RoleName; public Guid _RoleGuid; public string _Permissions; } // -------------------------------------------------------------------- public class Group { // Constructor public Group(string name, string description) { this._Name = name; this._Description = description; this._PermittedRoles = new ArrayList(); this._Members = new ArrayList(); } // Write Group Details on the Console public void WriteToConsole() { Console.WriteLine("Name={0}, Description={1}, #of Members {2}", _Name, _Description, _Members.Count); foreach (Group GroupMember in _Members) GroupMember.WriteToConsole(); } // Type definitions for the Group Structure public string _Name; public string _Description; public ArrayList _PermittedRoles; public ArrayList _Members; } // -------------------------------------------------------------------- public class GroupDictionary { // The GroupDictionary structure Dictionary _OSGroups = new Dictionary (); //TODO - Locking - this is not thread safe // Private Methods // Method: Determine if a group exists in the GroupDictionary, search on GroupGuid // Parameters: in GroupName // Return: true if the group exists // false if the group does not exist // private Boolean GroupExists(Guid GroupGuid) { if (_OSGroups.ContainsKey(GroupGuid)) { return true; } return false; } // Public Methods // Method: Determine if a group name exists in the GroupDictionary and return the Guid // Parameters: in GroupName // Return: Guid if a group of that name exists // Guid.Empty if a group of that name does not exist // public Guid GetGuidFromGroupName(string GroupName) { foreach (KeyValuePair pair in _OSGroups) { if (pair.Value._Name == GroupName) { return pair.Key; } } return Guid.Empty; } // Method: to add a new group to the GroupDictionary // Parameters: in Group // Return: Guid if group is successfully added // Guid.Empty if a group of the same name already exists // public Guid Add (Group GroupDetail) { Guid GroupGuid = Guid.NewGuid(); if ((GetGuidFromGroupName (GroupDetail._Name) != Guid.Empty)) return Guid.Empty; _OSGroups.Add(GroupGuid, GroupDetail); return GroupGuid; } // Method: to delete a group from the GroupDictionary // Parameters: in GroupGuid // Return: true if group is successfully deleted // false if the group cannot be located // public Boolean Delete(Guid GroupGuid) { if (GroupExists(GroupGuid)) { _OSGroups.Remove(GroupGuid); return true; } return false; } // Method: to delete a group from the GroupDictionary // Parameters: in GroupName // Return: true if group is successfully deleted // false if the group cannot be located // public Boolean Delete(string GroupName) { return Delete(GetGuidFromGroupName(GroupName)); } // Method: to update a group in the GroupDictionary // Parameters: in GroupName // Return: true if group is successfully updated // false if the group cannot be located // public Boolean UpdateDescription(Guid GroupGuid, string GroupDescription) { if (GroupExists(GroupGuid)) { _OSGroups [GroupGuid]._Description = GroupDescription; return true; } return false; } // Method: to update a group in the GroupDictionary // Parameters: in Group // Return: true if group is successfully updated // false if the group cannot be located // public Boolean UpdateDescription(string GroupName, string GroupDescription) { return UpdateDescription(GetGuidFromGroupName(GroupName), GroupDescription); } //Method: to update the Members List for a Group // ToDo //Method: To update the PermittedRoles for a Group // ToDo // Method: to write details of all groups in the GroupDictionary to the Console // Parameters: None // Return: None // public void WriteGroupDictionaryToConsole() { foreach (KeyValuePair pair in _OSGroups) { pair.Value.WriteToConsole(); } } } } using System; using Groups; namespace Testing { // -------------------------------------------------------------------- class MainClass { public static void Main(string[] args) { GroupDictionary AllGroups = new GroupDictionary(); // Test of Method AddToDictionary if (AllGroups.Add(new Group("Group 1", "Test Group 1")) != Guid.Empty) Console.WriteLine("Test 1 Passed"); if (AllGroups.Add(new Group("Group 2", "Test Group 2")) != Guid.Empty) Console.WriteLine("Test 2 Passed"); if (AllGroups.Add(new Group("Group 2", "Test Group 2")) == Guid.Empty) Console.WriteLine("Test 3 Passed"); if (AllGroups.Add(new Group("Group 3", "Test Group 3")) != Guid.Empty) Console.WriteLine("Test 4 Passed"); // Test of Method CheckNameInDictionary if (AllGroups.GetGuidFromGroupName("Group 1") != Guid.Empty) Console.WriteLine("Test 5 Passed"); if (AllGroups.GetGuidFromGroupName("Group 16") == Guid.Empty) Console.WriteLine("Test 6 Passed"); // Test of Method DeleteFromDictionary Console.WriteLine("Groups 1, 2 and 3 should be listed below"); AllGroups.WriteGroupDictionaryToConsole(); if (AllGroups.Delete("Group 3")) { if (!AllGroups.Delete("Group 3")) { Console.WriteLine("Test 7 Passed"); } } if (AllGroups.Delete("Group 1")) Console.WriteLine("Test 8 Passed"); Console.WriteLine("Groups 2 only should be listed below"); AllGroups.WriteGroupDictionaryToConsole(); // Test of Method UpdateInDictionary if (AllGroups.UpdateDescription("Group 2", "Changed Description")) Console.WriteLine("Test 9 Passed"); Console.WriteLine("Group 2 should have a changed description field"); AllGroups.WriteGroupDictionaryToConsole(); } } }