コード例 #1
0
        public override bool DeleteItem(ItemDefinition itemDefinition, CallContext context)
        {
#if DEBUG
            var timer = Stopwatch.StartNew();
#endif

            // check if already deleted in head
            var headParentId = HeadProvider.GetParentID(itemDefinition, context);
            if (headParentId == ID.Undefined)
            {
#if DEBUG
                this.Trace(true, timer, itemDefinition.ID, context);
#endif
                return(true);
            }

            var itemId = itemDefinition.ID;
            if (ReadOnlyProviders.FirstNotNull(x => x.GetItemDefinition(itemId)) == null)
            {
                // item may only exist in head provider
                // so we can simply delete it

                var deleted = HeadProvider.DeleteItem(itemDefinition, context);

#if DEBUG
                this.Trace(deleted, timer, itemDefinition.ID, context);
#endif
                return(deleted);
            }

            if (HeadProvider.GetItemDefinition(itemId, context) != null)
            {
                // item exists both in read-only data provider and in HEAD
                // so we first delete it in HEAD

                HeadProvider.DeleteItem(itemDefinition, context);

                // and pretend it was only in read-only data provider
            }

            // item only exists in read-only data provider
            // so we create item definition beneath undefied parent

            var deleted2 = CreateItem(itemId, itemDefinition.Name, itemDefinition.TemplateID, new ItemDefinition(ID.Undefined, "undefined", ID.Null, ID.Null), context);

#if DEBUG
            this.Trace(deleted2, timer, itemDefinition.ID, context);
#endif

            return(deleted2);
        }