Dev2.Models.ExplorerItemModel.Delete C# (CSharp) Method

Delete() private method

Sends a message to delete this specific instance
private Delete ( ) : void
return void
        private void Delete()
        {
            var environmentModel = EnvironmentRepository.Instance.FindSingle(model => model.ID == EnvironmentId);
            if(environmentModel != null)
            {
                var folderList = new List<IExplorerItemModel>();
                var contextualResourceModels = new Collection<IContextualResourceModel>();
                foreach(var childModel in this.Descendants())
                {
                    if(childModel.ResourceType != ResourceType.Folder)
                    {
                        var child = childModel;
                        var resourceModel = environmentModel.ResourceRepository.FindSingle(model => model.ID == child.ResourceId);
                        if(resourceModel == null && childModel.ResourceType == ResourceType.WebSource)
                        {
                            environmentModel.ResourceRepository.ReloadResource(child.ResourceId, Studio.Core.AppResources.Enums.ResourceType.Source, ResourceModelEqualityComparer.Current, true);
                            resourceModel = environmentModel.ResourceRepository.FindSingle(model => model.ID == child.ResourceId);
                        }
                        if(resourceModel != null)
                        {
                            contextualResourceModels.Add(resourceModel as IContextualResourceModel);
                        }
                    }
                    else
                    {
                        folderList.Add(childModel);
                    }
                }

                if(contextualResourceModels.Any())
                {
                    var displayName = DisplayName;
                    EventPublishers.Aggregator.Publish(new DeleteResourcesMessage(contextualResourceModels, displayName, true, () =>
                    {
                        for(int i = folderList.Count - 1; i >= 0; i--)
                        {
                            var folder = _studioResourceRepository.FindItem(a => a.ResourcePath == folderList[i].ResourcePath && a.ResourceType == ResourceType.Folder);
                            if (folder != null && (folder.Children.Count == 0 || folder.Children.All(c => c.ResourceType == ResourceType.Folder)))
                            {
                                _studioResourceRepository.DeleteFolder(folderList[i]);
                            }
                        }
                    }));
                }
                else
                {
                    EventPublishers.Aggregator.Publish(new DeleteFolderMessage(DisplayName, () =>
                    {
                        for(int i = folderList.Count - 1; i >= 0; i--)
                        {
                            if(folderList[i].ResourceType == ResourceType.Folder && (folderList[i].Children.Count == 0 || folderList[i].Children.All(c => c.ResourceType == ResourceType.Folder)))
                            {
                                _studioResourceRepository.DeleteFolder(folderList[i]);
                            }
                        }
                    }));
                }
            }
        }