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]);
}
}
}));
}
}
}