/// <summary> /// Removes an item from the database completely. /// </summary> /// <param name="itemDefinition">Used to identify the particular item</param> /// <param name="context"></param> /// <returns></returns> public override bool DeleteItem(ItemDefinition itemDefinition, CallContext context) { if (ItemsById.ContainsKey(itemDefinition.ID)) { // recursively remove descendants foreach (var child in ItemsByParentId.Where(item => item.Key == itemDefinition.ID)) { DeleteItem( new ItemDefinition(ParseId(child.Value.ID), child.Value.Name, ParseId(child.Value.TemplateID), ParseId(child.Value.BranchId)), context); } // remove the item ItemsById.Remove(itemDefinition.ID); foreach ( var remove in ItemsByParentId.Where( it => it.Value != null && it.Value.ID.Equals(GetIdAsString(itemDefinition.ID))).ToList()) { ItemsByParentId.Remove(remove); } return(true); } return(false); }
/// <summary> /// Determines what items are children of the item and returns a list of their IDs. /// </summary> /// <param name="itemDefinition">Used to identify the particular item</param> /// <param name="context"></param> /// <returns></returns> public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context) { IEnumerable <KeyValuePair <ID, SyncItem> > childItems = ItemsByParentId.Where(item => item.Key == itemDefinition.ID); return(IDList.Build(childItems.Select(item => ParseId(item.Value.ID)).ToArray())); }
/// <summary> /// Cleans up database by removing all items from the in-memory storage /// </summary> /// <param name="context"></param> /// <returns></returns> public override bool CleanupDatabase(CallContext context) { ItemsById.Clear(); ItemsByParentId.Clear(); return(true); }
/// <summary> /// Adds an item to the in-memory set of items. /// </summary> /// <param name="syncItem"></param> protected void AddItem(SyncItem syncItem) { ID itemId = ParseId(syncItem.ID); if (!ItemsById.ContainsKey(itemId)) { ItemsById.Add(itemId, syncItem); ItemsByParentId.Add(new KeyValuePair <ID, SyncItem>(ParseId(syncItem.ParentID), syncItem)); } }
/// <summary> /// Clear all data and reload from the handlers. /// </summary> private void LoadItems() { ItemsById.Clear(); ItemsByParentId.Clear(); foreach (IDataHandler dataHandler in DataHandlers) { foreach (SyncItem item in dataHandler.LoadItems()) { AddItem(item); } } }
/// <summary> /// Changes the in-memory data when an item is moved to a different position in the tree. /// </summary> /// <param name="itemDefinition"></param> /// <param name="destination"></param> /// <param name="context"></param> /// <returns></returns> public override bool MoveItem(ItemDefinition itemDefinition, ItemDefinition destination, CallContext context) { if (!ItemsById.ContainsKey(itemDefinition.ID) || !ItemsById.ContainsKey(destination.ID)) { return(false); } SyncItem item = ItemsById[itemDefinition.ID]; ID parentId = ParseId(item.ParentID); SyncItem destinationIt = ItemsById[destination.ID]; ItemsByParentId.RemoveAll(pair => pair.Key == parentId && pair.Value == item); ItemsByParentId.Add(new KeyValuePair <ID, SyncItem>(destination.ID, item)); item.ItemPath = ItemsById.ContainsKey(parentId) ? string.Format("{0}/{1}", GetItemPath(parentId), item.Name) : string.Format("/{0}", item.Name); return(true); }