diff --git a/src/Umbraco.Core/Packaging/IUnpackHelper.cs b/src/Umbraco.Core/Packaging/IUnpackHelper.cs index dbc516e4f9..29d5b62853 100644 --- a/src/Umbraco.Core/Packaging/IUnpackHelper.cs +++ b/src/Umbraco.Core/Packaging/IUnpackHelper.cs @@ -4,6 +4,6 @@ { void UnPack(string sourcefilePath, string destinationDirectory); string UnPackToTempDirectory(string sourcefilePath); - string ReadSingleTextFile(string sourcefilePath, string fileToRead); + string ReadTextFileFromArchive(string sourcefilePath, string fileToRead); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Packaging/UnpackHelper.cs b/src/Umbraco.Core/Packaging/UnpackHelper.cs index 89c462cca3..8ddcbc7dfb 100644 --- a/src/Umbraco.Core/Packaging/UnpackHelper.cs +++ b/src/Umbraco.Core/Packaging/UnpackHelper.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Packaging return tempDir; } - public string ReadSingleTextFile(string sourcefilePath, string fileToRead) + public string ReadTextFileFromArchive(string sourcefilePath, string fileToRead) { using (var fs = File.OpenRead(sourcefilePath)) { diff --git a/src/Umbraco.Core/Services/IMacroProperty.cs b/src/Umbraco.Core/Services/IMacroProperty.cs new file mode 100644 index 0000000000..b6ac6eb3f2 --- /dev/null +++ b/src/Umbraco.Core/Services/IMacroProperty.cs @@ -0,0 +1,56 @@ +using System.Xml; +using Umbraco.Core.Models; + +namespace Umbraco.Core.Services +{ + public interface IMacroProperty + { + /// + /// The sortorder + /// + int SortOrder { get; set; } + + /// + /// The alias if of the macroproperty, this is used in the special macro element + /// + /// + /// + string Alias { get; set; } + + /// + /// The userfriendly name + /// + string Name { get; set; } + + /// + /// Gets the id. + /// + /// The id. + int Id { get; } + + /// + /// Gets or sets the macro. + /// + /// The macro. + IMacro Macro { get; set; } + + /// + /// The basetype which defines which component is used in the UI for editing content + /// + IMacroPropertyType Type { get; set; } + + /// + /// Deletes the current macroproperty + /// + void Delete(); + + void Save(); + + /// + /// Retrieve a Xmlrepresentation of the MacroProperty used for exporting the Macro to the package + /// + /// XmlDocument context + /// A xmlrepresentation of the object + XmlElement ToXml(XmlDocument xd); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Services/PackageInstallerService.cs b/src/Umbraco.Core/Services/PackageInstallerService.cs index d7f2b7063b..6be3a348ff 100644 --- a/src/Umbraco.Core/Services/PackageInstallerService.cs +++ b/src/Umbraco.Core/Services/PackageInstallerService.cs @@ -15,16 +15,60 @@ namespace Umbraco.Core.Services { public class PackageInstallerService : IPackageInstallerService { + #region consts + private const string UMBPACKAGE_NODENAME = "umbPackage"; + private const string DATA_TYPES_NODENAME = "DataTypes"; private const string PACKAGE_XML_FILE_NAME = "package.xml"; + private const string UMBRACO_PACKAGE_EXTENTION = ".umb"; + private const string DATA_TYPE_NODENAME = "DataType"; + private const string LANGUAGES_NODENAME = "Languages"; + private const string FILES_NODENAME = "Files"; + private const string STYLESHEETS_NODENAME = "Stylesheets"; + private const string TEMPLATES_NODENAME = "Templates"; + private const string ORGNAME_NODENAME = "orgName"; + private const string NAME_NODENAME = "Name"; + private const string TEMPLATE_NODENAME = "Template"; + private const string ALIAS_NODENAME = "Alias"; + private const string DICTIONARYITEMS_NODENAME = "DictionaryItems"; + private const string MACROS_NODENAME = "macros"; + private const string DOCUMENTSET_NODENAME = "DocumentSet"; + private const string DOCUMENTTYPES_NODENAME = "DocumentTypes"; + private const string DOCUMENTTYPE_NODENAME = "DocumentType"; + private const string FILE_NODENAME = "file"; + private const string ORGPATH_NODENAME = "orgPath"; + private const string GUID_NODENAME = "guid"; + private const string STYLESHEET_NODENAME = "styleSheet"; + private const string MACRO_NODENAME = "macro"; + private const string INFO_NODENAME = "info"; + private const string PACKAGE_REQUIREMENTS_MAJOR_XPATH = "/package/requirements/major"; + private const string PACKAGE_REQUIREMENTS_MINOR_XPATH = "/package/requirements/minor"; + private const string PACKAGE_REQUIREMENTS_PATCH_XPATH = "/package/requirements/patch"; + private const string PACKAGE_NAME_XPATH = "/package/name"; + private const string PACKAGE_VERSION_XPATH = "/package/version"; + private const string PACKAGE_URL_XPATH = "/package/url"; + private const string PACKAGE_LICENSE_XPATH = "/package/license"; + private const string AUTHOR_NAME_XPATH = "/author/name"; + private const string AUTHOR_WEBSITE_XPATH = "/author/website"; + private const string README_XPATH = "/readme"; + private const string CONTROL_NODENAME = "control"; + private const string ACTION_NODENAME = "Action"; + private const string ACTIONS_NODENAME = "Actions"; + private const string UNDO_NODEATTRIBUTE = "undo"; + private const string RUNAT_NODEATTRIBUTE = "runat"; + + #endregion + private readonly IFileService _fileService; private readonly IMacroService _macroService; private readonly IPackagingService _packagingService; private readonly IUnpackHelper _unpackHelper; + public PackageInstallerService(IPackagingService packagingService, IMacroService macroService, IFileService fileService, IUnpackHelper unpackHelper) { - _packagingService = packagingService; + if (packagingService != null) _packagingService = packagingService; + else throw new ArgumentNullException("packagingService"); if (unpackHelper != null) _unpackHelper = unpackHelper; else throw new ArgumentNullException("unpackHelper"); if (fileService != null) _fileService = fileService; @@ -54,22 +98,13 @@ namespace Umbraco.Core.Services public PackageMetaData GetMetaData(string packageFilePath) { - var documentElement = GetConfigXmlDocFromPackageFile(packageFilePath); - - var rootElement = documentElement.Element("umbPackage"); - if (rootElement == null) { throw new ArgumentException("xml does not have a root node called \"umbPackage\"", packageFilePath); } - + var rootElement = GetConfigXmlRootElementFromPackageFile(packageFilePath); return GetMetaData(rootElement); } public PackageImportIssues FindPackageImportIssues(string packageFilePath) { - var documentElement = GetConfigXmlDocFromPackageFile(packageFilePath); - - var rootElement = documentElement.Element("umbPackage"); - - if (rootElement == null) { throw new ArgumentException("File does not have a root node called \"umbPackage\"", packageFilePath); } - + var rootElement = GetConfigXmlRootElementFromPackageFile(packageFilePath); return FindImportIssues(rootElement); } @@ -90,10 +125,9 @@ namespace Umbraco.Core.Services // Check if the file is a valid package - if (fi.Extension.Equals(".umb", StringComparison.InvariantCultureIgnoreCase) == false) + if (fi.Extension.Equals(UMBRACO_PACKAGE_EXTENTION, StringComparison.InvariantCultureIgnoreCase) == false) { - throw new Exception( - "Error - file isn't a package (doesn't have a .umb extension). Check if the file automatically got named '.zip' upon download."); + throw new Exception("Error - file isn't a package (doesn't have a .umb extension). Check if the file automatically got named '.zip' upon download."); } return fi; @@ -104,29 +138,36 @@ namespace Umbraco.Core.Services { FileInfo packageFileInfo = GetPackageFileInfo(packageFilePath); - string configXmlContent = _unpackHelper.ReadSingleTextFile(packageFileInfo.FullName, PACKAGE_XML_FILE_NAME); + string configXmlContent = _unpackHelper.ReadTextFileFromArchive(packageFileInfo.FullName, PACKAGE_XML_FILE_NAME); - var packageConfig = XDocument.Parse(configXmlContent); - return packageConfig; + return XDocument.Parse(configXmlContent); + } + + + private XElement GetConfigXmlRootElementFromPackageFile(string packageFilePath) + { + var document = GetConfigXmlDocFromPackageFile(packageFilePath); + if (document.Root == null || document.Root.Name.LocalName.Equals(UMBPACKAGE_NODENAME) == false) { throw new ArgumentException("xml does not have a root node called \"umbPackage\"", packageFilePath); } + return document.Root; } private PackageInstallationSummary InstallFromDirectory(string packageDir, int userId) { var configXml = GetConfigXmlDocFromPackageDirectory(packageDir); - var rootElement = configXml.XPathSelectElement("/umbPackage"); - if (rootElement == null) { throw new ArgumentException("File does not have a root node called \"umbPackage\"", packageDir); } + var rootElement = configXml.XPathSelectElement(UMBPACKAGE_NODENAME); + if (rootElement == null) { throw new ArgumentException("File does not have a root node called \"" + UMBPACKAGE_NODENAME + "\"", packageDir); } - var dataTypes = rootElement.Element("DataTypes"); - var languages = rootElement.Element("Languages"); - var dictionaryItems = rootElement.Element("DictionaryItems"); - var macroes = rootElement.Element("Macros"); - var files = rootElement.Element("Files"); - var templates = rootElement.Element("Templates"); - var documentTypes = rootElement.Element("DocumentTypes"); - var styleSheets = rootElement.Element("Stylesheets"); - var documentSet = rootElement.Element("DocumentSet"); - var actions = rootElement.Element("Actions"); + var dataTypes = rootElement.Element(DATA_TYPES_NODENAME); + var languages = rootElement.Element(LANGUAGES_NODENAME); + var dictionaryItems = rootElement.Element(DICTIONARYITEMS_NODENAME); + var macroes = rootElement.Element(MACROS_NODENAME); + var files = rootElement.Element(FILES_NODENAME); + var templates = rootElement.Element(TEMPLATES_NODENAME); + var documentTypes = rootElement.Element(DOCUMENTTYPES_NODENAME); + var styleSheets = rootElement.Element(STYLESHEETS_NODENAME); + var documentSet = rootElement.Element(DOCUMENTSET_NODENAME); + var actions = rootElement.Element(ACTIONS_NODENAME); return new PackageInstallationSummary { @@ -148,7 +189,7 @@ namespace Umbraco.Core.Services private static string GetUninstallActions(XElement actionsElement) { //saving the uninstall actions untill the package is uninstalled. - return actionsElement.Elements("Action").Where(e => e.HasAttributes && e.Attribute("undo") != null && e.Attribute("undo").Value.Equals("false()", StringComparison.InvariantCultureIgnoreCase) == false) // SelectNodes("Actions/Action [@undo != false()]"); + return actionsElement.Elements(ACTION_NODENAME).Where(e => e.HasAttributes && e.Attribute(UNDO_NODEATTRIBUTE) != null && e.Attribute(UNDO_NODEATTRIBUTE).Value.Equals("false()", StringComparison.InvariantCultureIgnoreCase) == false) // SelectNodes("Actions/Action [@undo != false()]"); .Select(m => m.Value).Aggregate((workingSentence, next) => next + workingSentence); } @@ -156,44 +197,44 @@ namespace Umbraco.Core.Services { if (actionsElement == null) { return Enumerable.Empty>(); } - if ("Actions".Equals(actionsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Actions\" as root", "actionsElement"); } + if (string.Equals(ACTIONS_NODENAME, actionsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"" + ACTIONS_NODENAME + "\" as root", "actionsElement"); } - return actionsElement.Elements("Action") + return actionsElement.Elements(ACTION_NODENAME) .Where( e => e.HasAttributes && - (e.Attribute("runat") == null || - e.Attribute("runat").Value.Equals("uninstall", StringComparison.InvariantCultureIgnoreCase) == + (e.Attribute(RUNAT_NODEATTRIBUTE) == null || + e.Attribute(RUNAT_NODEATTRIBUTE).Value.Equals("uninstall", StringComparison.InvariantCultureIgnoreCase) == false)) // .SelectNodes("Actions/Action [@runat != 'uninstall']") .Select(elemet => { - var aliasAttr = elemet.Attribute("alias"); + var aliasAttr = elemet.Attribute(ALIAS_NODENAME); if (aliasAttr == null) - throw new ArgumentException("missing alias atribute in alias element", "actionsElement"); + throw new ArgumentException("missing \"" + ALIAS_NODENAME + "\" atribute in alias element", "actionsElement"); return new {elemet, alias = aliasAttr.Value}; }).ToDictionary(x => x.alias, x => x.elemet); } private IEnumerable InstallDocuments(XElement documentsElement, int userId = 0) { - if ("DocumentSet".Equals(documentsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"DocumentSet\" as root", "documentsElement"); } + if (string.Equals(DOCUMENTSET_NODENAME, documentsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"DocumentSet\" as root", "documentsElement"); } return _packagingService.ImportContent(documentsElement, -1, userId).Select(c => c.Id); } private IEnumerable InstallStylesheets(XElement styleSheetsElement, int userId = 0) { - if ("Stylesheets".Equals(styleSheetsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Stylesheets\" as root", "styleSheetsElement"); } + if (string.Equals(STYLESHEETS_NODENAME, styleSheetsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Stylesheets\" as root", "styleSheetsElement"); } return _packagingService.ImportStylesheets(styleSheetsElement, userId).Select(f => f.Id); } private IEnumerable InstallDocumentTypes(XElement documentTypes, int userId = 0) { - if ("DocumentTypes".Equals(documentTypes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) + if (string.Equals(DOCUMENTTYPES_NODENAME, documentTypes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { - if ("DocumentType".Equals(documentTypes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) - throw new ArgumentException("Must be \"DocumentTypes\" as root", "documentTypes"); + if (string.Equals(DOCUMENTTYPE_NODENAME, documentTypes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) + throw new ArgumentException("Must be \"" + DOCUMENTTYPES_NODENAME + "\" as root", "documentTypes"); - documentTypes = new XElement("DocumentTypes", documentTypes); + documentTypes = new XElement(DOCUMENTTYPES_NODENAME, documentTypes); } return _packagingService.ImportContentTypes(documentTypes, userId).Select(ct => ct.Id); @@ -201,29 +242,29 @@ namespace Umbraco.Core.Services private IEnumerable InstallTemplats(XElement templateElement, int userId = 0) { - if ("Templates".Equals(templateElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "templateElement"); } + if (string.Equals(TEMPLATES_NODENAME, templateElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"" + TEMPLATES_NODENAME + "\" as root", "templateElement"); } return _packagingService.ImportTemplates(templateElement, userId).Select(t => t.Id); } private static IEnumerable> InstallFiles(string packageDir, XElement filesElement) { - if ("Files".Equals(filesElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("root element must be \"Files\"", "filesElement"); } + if (string.Equals(FILES_NODENAME, filesElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("root element must be \"" + FILES_NODENAME + "\"", "filesElement"); } string basePath = HostingEnvironment.ApplicationPhysicalPath; - var xmlNodeList = filesElement.Elements("file"); + var xmlNodeList = filesElement.Elements(FILE_NODENAME); return xmlNodeList.Select(e => { - var orgPathElement = e.Element("orgPath"); - if (orgPathElement == null) { throw new ArgumentException("Missing element \"orgPath\"", "filesElement"); } + var orgPathElement = e.Element(ORGPATH_NODENAME); + if (orgPathElement == null) { throw new ArgumentException("Missing element \"" + ORGPATH_NODENAME + "\"", "filesElement"); } - var guidElement = e.Element("guid"); - if (guidElement == null) { throw new ArgumentException("Missing element \"guid\"", "filesElement"); } + var guidElement = e.Element(GUID_NODENAME); + if (guidElement == null) { throw new ArgumentException("Missing element \"" + GUID_NODENAME + "\"", "filesElement"); } - var orgNameElement = e.Element("orgName"); - if (orgNameElement == null) { throw new ArgumentException("Missing element \"orgName\"", "filesElement"); } + var orgNameElement = e.Element(ORGNAME_NODENAME); + if (orgNameElement == null) { throw new ArgumentException("Missing element \"" + ORGNAME_NODENAME + "\"", "filesElement"); } var destPath = GetFileName(basePath, orgPathElement.Value); @@ -242,30 +283,28 @@ namespace Umbraco.Core.Services private IEnumerable InstallMacros(XElement macroElements, int userId = 0) { - if ("Macros".Equals(macroElements.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "macroElements"); } + if (string.Equals(MACROS_NODENAME, macroElements.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "macroElements"); } return _packagingService.ImportMacros(macroElements, userId).Select(m => m.Id); } private IEnumerable InstallDictionaryItems(XElement dictionaryItemsElement, int userId = 0) { - if ("DictionaryItems".Equals(dictionaryItemsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "dictionaryItemsElement"); } + if (string.Equals(DICTIONARYITEMS_NODENAME, dictionaryItemsElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "dictionaryItemsElement"); } return _packagingService.ImportDictionaryItems(dictionaryItemsElement, userId).Select(di => di.Id); } private IEnumerable InstallLanguages(XElement languageElement, int userId = 0) { - if ("Languages".Equals(languageElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "languageElement"); } + if (string.Equals(LANGUAGES_NODENAME, languageElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "languageElement"); } return _packagingService.ImportLanguage(languageElement, userId).Select(l => l.Id); } private IEnumerable InstallDataTypes(XElement dataTypeElements, int userId = 0) { - if ("DataTypes".Equals(dataTypeElements.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == - false) + if (string.Equals(DATA_TYPES_NODENAME, dataTypeElements.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { - if ("DataType".Equals(dataTypeElements.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == - false) + if (string.Equals(DATA_TYPE_NODENAME, dataTypeElements.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Must be \"Templates\" as root", "dataTypeElements"); } @@ -283,10 +322,10 @@ namespace Umbraco.Core.Services private PackageImportIssues FindImportIssues(XElement rootElement) { - var files = rootElement.Element("Files"); - var styleSheets = rootElement.Element("Stylesheets"); - var templates = rootElement.Element("Templates"); - var alias = rootElement.Element("Macros"); + var files = rootElement.Element(FILES_NODENAME); + var styleSheets = rootElement.Element(STYLESHEETS_NODENAME); + var templates = rootElement.Element(TEMPLATES_NODENAME); + var alias = rootElement.Element(MACROS_NODENAME); var packageImportIssues = new PackageImportIssues { UnsecureFiles = files == null ? Enumerable.Empty() : FindUnsecureFiles(files), @@ -300,27 +339,27 @@ namespace Umbraco.Core.Services private IEnumerable FindUnsecureFiles(XElement fileElement) { - if ("Files".Equals(fileElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("the root element must be \"Files\"", "fileElement"); } + if (string.Equals(FILES_NODENAME, fileElement.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("the root element must be \"Files\"", "fileElement"); } - return fileElement.Elements("file") + return fileElement.Elements(FILE_NODENAME) .Where(FileNodeIsUnsecure) .Select(n => { - var xElement = n.Element("orgName"); - if (xElement == null) { throw new ArgumentException("missing a element: orgName", "n"); } + var xElement = n.Element(ORGNAME_NODENAME); + if (xElement == null) { throw new ArgumentException("missing a element: " + ORGNAME_NODENAME, "n"); } return xElement.Value; }); } private IEnumerable> FindConflictingStylesheetNames(XElement stylesheetNotes) { - if ("Stylesheets".Equals(stylesheetNotes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("the root element must be \"Stylesheets\"", "stylesheetNotes"); } + if (string.Equals(STYLESHEETS_NODENAME, stylesheetNotes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("the root element must be \"Stylesheets\"", "stylesheetNotes"); } - return stylesheetNotes.Elements("styleSheet") + return stylesheetNotes.Elements(STYLESHEET_NODENAME) .Select(n => { - var xElement = n.Element("Name"); - if (xElement == null) { throw new ArgumentException("Missing \"Name\" element", "stylesheetNotes"); } + var xElement = n.Element(NAME_NODENAME); + if (xElement == null) { throw new ArgumentException("Missing \"" + NAME_NODENAME + "\" element", "stylesheetNotes"); } string name = xElement.Name.LocalName; Stylesheet existingStilesheet = _fileService.GetStylesheetByName(name); @@ -335,13 +374,13 @@ namespace Umbraco.Core.Services private IEnumerable> FindConflictingTemplateAliases(XElement templateNotes) { - if ("Templates".Equals(templateNotes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Node must be a Templates node", "templateNotes"); } + if (string.Equals(TEMPLATES_NODENAME, templateNotes.Name.LocalName, StringComparison.InvariantCultureIgnoreCase) == false) { throw new ArgumentException("Node must be a \"" + TEMPLATES_NODENAME + "\" node", "templateNotes"); } - return templateNotes.Elements("Template") + return templateNotes.Elements(TEMPLATE_NODENAME) .Select(n => { - var alias = n.Element("Alias"); - if (alias == null) { throw new ArgumentException("missing a alias element", "templateNotes"); } + var alias = n.Element(ALIAS_NODENAME); + if (alias == null) { throw new ArgumentException("missing a \"" + ALIAS_NODENAME + "\" element", "templateNotes"); } string aliasStr = alias.Value; var existingTemplate = _fileService.GetTemplate(aliasStr) as Template; string existingName = existingTemplate == null ? null : existingTemplate.Name; @@ -353,13 +392,13 @@ namespace Umbraco.Core.Services private IEnumerable> FindConflictingMacroAliases(XElement macroNodes) { - return macroNodes.Elements("macro") + return macroNodes.Elements(MACRO_NODENAME) .Select(n => { - var xElement = n.Element("alias"); - if (xElement == null) { throw new ArgumentException("missing a alias element", "macroNodes"); } + var xElement = n.Element(ALIAS_NODENAME); + if (xElement == null) { throw new ArgumentException("missing a \"" + ALIAS_NODENAME + "\" element", "macroNodes"); } string alias = xElement.Value; - IMacro macro = _macroService.GetByAlias(xElement.Value); + var macro = _macroService.GetByAlias(xElement.Value); string eksistingName = macro == null ? null : macro.Name; return new KeyValuePair(alias, eksistingName); @@ -371,8 +410,8 @@ namespace Umbraco.Core.Services private bool FileNodeIsUnsecure(XElement fileNode) { string basePath = HostingEnvironment.ApplicationPhysicalPath; - var orgName = fileNode.Element("orgName"); - if (orgName == null) { throw new ArgumentException("Missing element \"orgName\"", "fileNode"); } + var orgName = fileNode.Element(ORGNAME_NODENAME); + if (orgName == null) { throw new ArgumentException("Missing element \"" + ORGNAME_NODENAME + "\"", "fileNode"); } string destPath = GetFileName(basePath, orgName.Value); @@ -386,22 +425,22 @@ namespace Umbraco.Core.Services private PackageMetaData GetMetaData(XElement xRootElement) { - XElement infoElement = xRootElement.Element("info"); - - if (infoElement == null) { throw new ArgumentException("Did not hold a \"info\" element", "xRootElement"); } + XElement infoElement = xRootElement.Element(INFO_NODENAME); - var majorElement = infoElement.XPathSelectElement("/package/requirements/major"); - var minorElement = infoElement.XPathSelectElement("/package/requirements/minor"); - var patchElement = infoElement.XPathSelectElement("/package/requirements/patch"); - var nameElement = infoElement.XPathSelectElement("/package/name"); - var versionElement = infoElement.XPathSelectElement("/package/version"); - var urlElement = infoElement.XPathSelectElement("/package/url"); - var licenseElement = infoElement.XPathSelectElement("/package/license"); - var authorNameElement = infoElement.XPathSelectElement("/author/name"); - var authorUrlElement = infoElement.XPathSelectElement("/author/website"); - var readmeElement = infoElement.XPathSelectElement("/readme"); + if (infoElement == null) { throw new ArgumentException("Did not hold a \"" + INFO_NODENAME + "\" element", "xRootElement"); } - var controlElement = xRootElement.Element("control"); + var majorElement = infoElement.XPathSelectElement(PACKAGE_REQUIREMENTS_MAJOR_XPATH); + var minorElement = infoElement.XPathSelectElement(PACKAGE_REQUIREMENTS_MINOR_XPATH); + var patchElement = infoElement.XPathSelectElement(PACKAGE_REQUIREMENTS_PATCH_XPATH); + var nameElement = infoElement.XPathSelectElement(PACKAGE_NAME_XPATH); + var versionElement = infoElement.XPathSelectElement(PACKAGE_VERSION_XPATH); + var urlElement = infoElement.XPathSelectElement(PACKAGE_URL_XPATH); + var licenseElement = infoElement.XPathSelectElement(PACKAGE_LICENSE_XPATH); + var authorNameElement = infoElement.XPathSelectElement(AUTHOR_NAME_XPATH); + var authorUrlElement = infoElement.XPathSelectElement(AUTHOR_WEBSITE_XPATH); + var readmeElement = infoElement.XPathSelectElement(README_XPATH); + + var controlElement = xRootElement.Element(CONTROL_NODENAME); int val; @@ -431,7 +470,7 @@ namespace Umbraco.Core.Services /// The path. /// Name of the file. /// The name of the file in the specified path. - private static String GetFileName(String path, string fileName) + private static String GetFileName(string path, string fileName) { // virtual dir support fileName = IOHelper.FindFile(fileName); @@ -448,7 +487,6 @@ namespace Umbraco.Core.Services //to support virtual dirs we try to lookup the file... path = IOHelper.FindFile(path); - Debug.Assert(path != null && path.Length >= 1); Debug.Assert(fileName != null && fileName.Length >= 1); diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index b567905627..3228334b5f 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -1037,6 +1037,7 @@ + diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 379547049d..499ebaa336 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -632,6 +632,7 @@ ResXFileCodeGenerator ImportResources.Designer.cs + Designer ResXFileCodeGenerator