コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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()));
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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));
            }
        }
コード例 #5
0
        /// <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);
                }
            }
        }
コード例 #6
0
        /// <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);
        }