public static SimpleOrderSet CreateOrderSet(string order, INakedObjectMemberPeer[] members) { var set = new SimpleOrderSet(members); string[] st = order.Split(new[] {','}); foreach (string element in st) { string tempStr = element.Trim(); bool ends = tempStr.EndsWith(")"); if (ends) { tempStr = tempStr.Substring(0, tempStr.Length - 1).Trim(); } if (tempStr.StartsWith("(")) { int colon = tempStr.IndexOf(':'); string groupName = tempStr.Substring(1, colon).Trim(); tempStr = tempStr.Substring(colon + 1).Trim(); set = set.CreateSubOrderSet(groupName, tempStr); } else { set.Add(tempStr); } if (ends) { set = set.parent; } } set.AddAnyRemainingMember(); return set; }
private SimpleOrderSet(SimpleOrderSet set, string groupName, string name, INakedObjectMemberPeer[] members) : base(groupName) { parent = set; parent.AddElement(this); this.members = members; Add(name); }
public static DeweyOrderSet CreateOrderSet(INakedObjectMemberPeer[] members) { var sortedMembersByGroup = new SortedList<string, List<INakedObjectMemberPeer>>(); var nonAnnotatedGroup = new List<INakedObjectMemberPeer>(); // spin over all the members and put them into a Map of SortedSets // any non-annotated members go into additional nonAnnotatedGroup set. foreach (INakedObjectMemberPeer member in members) { var memberOrder = member.GetFacet<IMemberOrderFacet>(); if (memberOrder != null) { List<INakedObjectMemberPeer> sortedMembersForGroup = GetSortedSet(sortedMembersByGroup, memberOrder.Name); sortedMembersForGroup.Add(member); } else { nonAnnotatedGroup.Add(member); } } nonAnnotatedGroup.Sort(new MemberIdentifierComparator()); foreach (var list in sortedMembersByGroup.Values) { list.Sort(new MemberOrderComparator(true)); } // add the non-annotated group to the first "" group. IList<INakedObjectMemberPeer> defaultSet = GetSortedSet(sortedMembersByGroup, ""); foreach (INakedObjectMemberPeer member in nonAnnotatedGroup) { defaultSet.Add(member); } // create OrderSets, wiring up parents and children. // since sortedMembersByGroup is a SortedMap, the // iteration will be in alphabetical order (ie parent groups before their children). ICollection<string> groupNames = sortedMembersByGroup.Keys; IDictionary<string, DeweyOrderSet> orderSetsByGroup = new SortedList<string, DeweyOrderSet>(); foreach (string groupName in groupNames) { var deweyOrderSet = new DeweyOrderSet(groupName); orderSetsByGroup.Add(groupName, deweyOrderSet); EnsureParentFor(orderSetsByGroup, deweyOrderSet); } // now populate the OrderSets foreach (string groupName in groupNames) { DeweyOrderSet deweyOrderSet = orderSetsByGroup[groupName]; IList<INakedObjectMemberPeer> sortedMembers = sortedMembersByGroup[groupName]; foreach (INakedObjectMemberPeer ordeableElement in sortedMembers) { deweyOrderSet.AddElement(ordeableElement); } deweyOrderSet.CopyOverChildren(); } return orderSetsByGroup[""]; }
private SimpleOrderSet(INakedObjectMemberPeer[] members) : base("") { this.members = members; parent = null; }