public Data.Node Load(Storage storage, Data.Node data) { if (data is Data.Collection) for (int i = 0; i < (data as Data.Collection).Nodes.Count; i++) (data as Data.Collection).Nodes[i] = this.Load(storage, (data as Data.Collection).Nodes[i]); else if (data is Data.Branch) { Kean.Collection.IDictionary<string, Data.Node> nodes = new Kean.Collection.Dictionary<string, Data.Node>((data as Data.Branch).Nodes.Count); foreach (Data.Node child in (data as Data.Branch).Nodes) { Data.Node n = nodes[child.Name]; if (n.IsNull()) nodes[child.Name] = child; else if (n is Data.Collection) (n as Data.Collection).Nodes.Add(child.UpdateLocators((string)child.Locator + "[" + (n as Data.Collection).Nodes.Count + "]")); else { Data.Collection collection = new Data.Collection() { Name = child.Name, Locator = child.Locator, Region = child.Region }; // TODO: include all children in region collection.Nodes.Add(n.UpdateLocators((string)n.Locator + "[0]")); collection.Nodes.Add(child.UpdateLocators((string)child.Locator + "[1]")); nodes[child.Name] = collection; } } (data as Data.Branch).Nodes.Clear(); foreach (KeyValue<string, Data.Node> n in nodes) (data as Data.Branch).Nodes.Add(this.Load(storage, n.Value)); } return data; }
public Data.Node Serialize(IStorage storage, Reflect.Type type, object data, Uri.Locator locator) { Data.Collection result = new Data.Collection(data, type); Reflect.Type elementType = this.GetElementType(type); int c = 0; foreach (object child in data as System.Collections.IEnumerable) { Uri.Locator l = null; if (locator.NotNull()) { l = locator.Copy(); l.Fragment = (l.Fragment.NotEmpty() ? l.Fragment + "/" : "") + (c++).ToString(); } result.Nodes.Add(storage.Serialize(elementType, child, l)); } return result; }
public static CollectionList FromDataCollection(Data.Collection collection, int foundCount, Image collectionThumbnail) { return(new CollectionList { DatabaseId = collection.Id, Collection = new DataToken { Text = collection.Name, Value = collection.RoadieId.ToString() }, Id = collection.RoadieId, CollectionCount = collection.CollectionCount, CollectionType = (collection.CollectionType ?? Enums.CollectionType.Unknown).ToString(), CollectionFoundCount = foundCount, CreatedDate = collection.CreatedDate, IsLocked = collection.IsLocked, LastUpdated = collection.LastUpdated, Thumbnail = collectionThumbnail }); }