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;
 }