Files
Umbraco-CMS/src/Umbraco.Core/Packaging/ConflictingPackageData.cs

92 lines
3.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
namespace Umbraco.Core.Packaging
{
internal class ConflictingPackageData : IConflictingPackageData
{
private readonly IMacroService _macroService;
private readonly IFileService _fileService;
public ConflictingPackageData(IMacroService macroService,
IFileService fileService)
{
if (fileService != null) _fileService = fileService;
else throw new ArgumentNullException("fileService");
if (macroService != null) _macroService = macroService;
else throw new ArgumentNullException("macroService");
}
public IEnumerable<IFile> FindConflictingStylesheets(XElement stylesheetNotes)
{
if (string.Equals(Constants.Packaging.StylesheetsNodeName, stylesheetNotes.Name.LocalName) == false)
{
throw new ArgumentException("the root element must be \"" + Constants.Packaging.StylesheetsNodeName + "\"", "stylesheetNotes");
}
return stylesheetNotes.Elements(Constants.Packaging.StylesheetNodeName)
.Select(n =>
{
XElement xElement = n.Element(Constants.Packaging.NameNodeName);
if (xElement == null)
{
throw new ArgumentException("Missing \"" + Constants.Packaging.NameNodeName + "\" element",
"stylesheetNotes");
}
return _fileService.GetStylesheetByName(xElement.Value) as IFile;
})
.Where(v => v != null);
}
public IEnumerable<ITemplate> FindConflictingTemplates(XElement templateNotes)
{
if (string.Equals(Constants.Packaging.TemplatesNodeName, templateNotes.Name.LocalName) == false)
{
throw new ArgumentException("Node must be a \"" + Constants.Packaging.TemplatesNodeName + "\" node",
"templateNotes");
}
return templateNotes.Elements(Constants.Packaging.TemplateNodeName)
.Select(n =>
{
XElement xElement = n.Element(Constants.Packaging.AliasNodeNameCapital) ?? n.Element(Constants.Packaging.AliasNodeNameSmall);
if (xElement == null)
{
throw new ArgumentException("missing a \"" + Constants.Packaging.AliasNodeNameCapital + "\" element",
"templateNotes");
}
return _fileService.GetTemplate(xElement.Value);
})
.Where(v => v != null);
}
public IEnumerable<IMacro> FindConflictingMacros(XElement macroNodes)
{
if (string.Equals(Constants.Packaging.MacrosNodeName, macroNodes.Name.LocalName) == false)
{
throw new ArgumentException("Node must be a \"" + Constants.Packaging.MacrosNodeName + "\" node",
"macroNodes");
}
return macroNodes.Elements(Constants.Packaging.MacroNodeName)
.Select(n =>
{
XElement xElement = n.Element(Constants.Packaging.AliasNodeNameSmall) ?? n.Element(Constants.Packaging.AliasNodeNameCapital);
if (xElement == null)
{
throw new ArgumentException(string.Format("missing a \"{0}\" element in {0} element", Constants.Packaging.AliasNodeNameSmall),
"macroNodes");
}
return _macroService.GetByAlias(xElement.Value);
})
.Where(v => v != null);
}
}
}