small ajustments

This commit is contained in:
jakobdyrby
2014-06-06 15:58:32 +02:00
parent 07d431f52e
commit a7928f87ee
4 changed files with 152 additions and 99 deletions

View File

@@ -7,47 +7,48 @@
/// </summary>
public static class Packaging
{
public const string UmbPackageNodeName = "umbPackage";
public const string DataTypesNodeName = "DataTypes";
public const string PackageXmlFileName = "package.xml";
public const string UmbracoPackageExtention = ".umb";
public const string DataTypeNodeName = "DataType";
public const string LanguagesNodeName = "Languages";
public const string FilesNodeName = "files";
public const string StylesheetsNodeName = "Stylesheets";
public const string TemplatesNodeName = "Templates";
public const string NameNodeName = "Name";
public const string TemplateNodeName = "Template";
public const string AliasNodeNameSmall = "alias";
public const string AliasNodeNameCapital = "Alias";
public const string DictionaryItemsNodeName = "DictionaryItems";
public const string DictionaryItemNodeName = "DictionaryItem";
public const string MacrosNodeName = "Macros";
public const string DocumentSetNodeName = "DocumentSet";
public const string DocumentTypesNodeName = "DocumentTypes";
public const string DocumentTypeNodeName = "DocumentType";
public const string FileNodeName = "file";
public const string OrgNameNodeName = "orgName";
public const string OrgPathNodeName = "orgPath";
public const string GuidNodeName = "guid";
public const string StylesheetNodeName = "styleSheet";
public const string MacroNodeName = "macro";
public const string InfoNodeName = "info";
public const string PackageRequirementsMajorXpath = "./package/requirements/major";
public const string PackageRequirementsMinorXpath = "./package/requirements/minor";
public const string PackageRequirementsPatchXpath = "./package/requirements/patch";
public const string PackageNameXpath = "./package/name";
public const string PackageVersionXpath = "./package/version";
public const string PackageUrlXpath = "./package/url";
public const string PackageLicenseXpath = "./package/license";
public const string AuthorNameXpath = "./author/name";
public const string AuthorWebsiteXpath = "./author/website";
public const string ReadmeXpath = "./readme";
public const string ControlNodeName = "control";
public const string ActionNodeName = "Action";
public const string ActionsNodeName = "Actions";
public const string UndoNodeAttribute = "undo";
public const string RunatNodeAttribute = "runat";
public const string UmbPackageNodeName = "umbPackage";
public const string DataTypesNodeName = "DataTypes";
public const string PackageXmlFileName = "package.xml";
public const string UmbracoPackageExtention = ".umb";
public const string DataTypeNodeName = "DataType";
public const string LanguagesNodeName = "Languages";
public const string FilesNodeName = "files";
public const string StylesheetsNodeName = "Stylesheets";
public const string TemplatesNodeName = "Templates";
public const string NameNodeName = "Name";
public const string TemplateNodeName = "Template";
public const string AliasNodeNameSmall = "alias";
public const string AliasNodeNameCapital = "Alias";
public const string DictionaryItemsNodeName = "DictionaryItems";
public const string DictionaryItemNodeName = "DictionaryItem";
public const string MacrosNodeName = "Macros";
public const string DocumentSetNodeName = "DocumentSet";
public const string DocumentTypesNodeName = "DocumentTypes";
public const string DocumentTypeNodeName = "DocumentType";
public const string FileNodeName = "file";
public const string OrgNameNodeName = "orgName";
public const string OrgPathNodeName = "orgPath";
public const string GuidNodeName = "guid";
public const string StylesheetNodeName = "styleSheet";
public const string MacroNodeName = "macro";
public const string InfoNodeName = "info";
public const string PackageRequirementsMajorXpath = "./package/requirements/major";
public const string PackageRequirementsMinorXpath = "./package/requirements/minor";
public const string PackageRequirementsPatchXpath = "./package/requirements/patch";
public const string PackageNameXpath = "./package/name";
public const string PackageVersionXpath = "./package/version";
public const string PackageUrlXpath = "./package/url";
public const string PackageLicenseXpath = "./package/license";
public const string PackageLicenseXpathUrlAttribute = "url";
public const string AuthorNameXpath = "./author/name";
public const string AuthorWebsiteXpath = "./author/website";
public const string ReadmeXpath = "./readme";
public const string ControlNodeName = "control";
public const string ActionNodeName = "Action";
public const string ActionsNodeName = "Actions";
public const string UndoNodeAttribute = "undo";
public const string RunatNodeAttribute = "runat";
}
}
}

View File

@@ -1,10 +1,11 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Umbraco.Core.Models;
namespace Umbraco.Core.Packaging.Models
{
[Serializable]
[DataContract(IsReference = true)]
internal class InstallationSummary
@@ -14,11 +15,29 @@ namespace Umbraco.Core.Packaging.Models
public ILanguage[] LanguagesInstalled { get; set; }
public IDictionaryItem[] DictionaryItemsInstalled { get; set; }
public IMacro[] MacrosInstalled { get; set; }
public IEnumerable<KeyValuePair<string, bool>> FilesInstalled { get; set; }
public Details<string>[] FilesInstalled { get; set; }
public ITemplate[] TemplatesInstalled { get; set; }
public IContentType[] DocumentTypesInstalled { get; set; }
public IStylesheet[] StylesheetsInstalled { get; set; }
public IContent[] DocumentsInstalled { get; set; }
public PackageAction[] Actions { get; set; }
}
[Serializable]
[DataContract(IsReference = true)]
public enum InstallStatus
{
Inserted,
Overwridden
}
[Serializable]
[DataContract(IsReference = true)]
public class Details<TItem>
{
public InstallStatus Status { get; set; }
public TItem Destination { get; set; }
public TItem Source { get; set; }
}
}

View File

@@ -135,29 +135,39 @@ namespace Umbraco.Core.Packaging
try
{
return new InstallationSummary
{
MetaData = metaData,
DataTypesInstalled =
dataTypes == null ? new IDataTypeDefinition[0] : InstallDataTypes(dataTypes, userId),
LanguagesInstalled = languages == null ? new ILanguage[0] : InstallLanguages(languages, userId),
DictionaryItemsInstalled =
dictionaryItems == null ? new IDictionaryItem[0] : InstallDictionaryItems(dictionaryItems),
MacrosInstalled = macroes == null ? new IMacro[0] : InstallMacros(macroes, userId),
FilesInstalled =
packageFile == null
? Enumerable.Empty<KeyValuePair<string, bool>>()
: InstallFiles(packageFile, files),
TemplatesInstalled = templates == null ? new ITemplate[0] : InstallTemplats(templates, userId),
DocumentTypesInstalled =
documentTypes == null ? new IContentType[0] : InstallDocumentTypes(documentTypes, userId),
StylesheetsInstalled =
styleSheets == null ? new IStylesheet[0] : InstallStylesheets(styleSheets, userId),
DocumentsInstalled = documentSet == null ? new IContent[0] : InstallDocuments(documentSet, userId),
Actions = actions == null ? new PackageAction[0] : GetPackageActions(actions, metaData.Name),
var installationSummary = new InstallationSummary() { MetaData = metaData };
};
var dataTypeDefinitions = EmptyArrayIfNull<IDataTypeDefinition>(dataTypes) ?? InstallDataTypes(dataTypes, userId);
installationSummary.DataTypesInstalled = dataTypeDefinitions;
var languagesInstalled = EmptyArrayIfNull<ILanguage>(languages) ?? InstallLanguages(languages, userId);
installationSummary.LanguagesInstalled = languagesInstalled;
var dictionaryInstalled = EmptyArrayIfNull<IDictionaryItem>(dictionaryItems) ?? InstallDictionaryItems(dictionaryItems);
installationSummary.DictionaryItemsInstalled = dictionaryInstalled;
var macros = EmptyArrayIfNull<IMacro>(macroes)?? InstallMacros(macroes, userId);
installationSummary.MacrosInstalled = macros;
var keyValuePairs = EmptyArrayIfNull<Details<string>>(packageFile) ?? InstallFiles(packageFile, files);
installationSummary.FilesInstalled = keyValuePairs;
var templatesInstalled = EmptyArrayIfNull<ITemplate>(templates) ?? InstallTemplats(templates, userId);
installationSummary.TemplatesInstalled = templatesInstalled;
var documentTypesInstalled = EmptyArrayIfNull<IContentType>(documentTypes) ?? InstallDocumentTypes(documentTypes, userId);
installationSummary.DocumentTypesInstalled =documentTypesInstalled;
var stylesheetsInstalled = EmptyArrayIfNull<IStylesheet>(styleSheets) ?? InstallStylesheets(styleSheets, userId);
installationSummary.StylesheetsInstalled = stylesheetsInstalled;
var documentsInstalled = EmptyArrayIfNull<IContent>(documentSet) ?? InstallDocuments(documentSet, userId);
installationSummary.DocumentsInstalled = documentsInstalled;
var packageActions = EmptyArrayIfNull<PackageAction>(actions) ?? GetPackageActions(actions, metaData.Name);
installationSummary.Actions = packageActions;
return installationSummary;
}
catch (Exception e)
{
@@ -165,7 +175,10 @@ namespace Umbraco.Core.Packaging
}
}
private static T[] EmptyArrayIfNull<T>(object obj)
{
return obj == null ? new T[0] : null;
}
private XDocument GetConfigXmlDoc(string packageFilePath)
@@ -321,14 +334,20 @@ namespace Umbraco.Core.Packaging
}
private IEnumerable<KeyValuePair<string, bool>> InstallFiles(string packageFilePath, XElement filesElement)
private Details<string>[] InstallFiles(string packageFilePath, XElement filesElement)
{
return ExtractFileInPackageInfos(filesElement).Select(fpi =>
{
bool existingOverrided = _packageExtraction.CopyFileFromArchive(packageFilePath, fpi.FileNameInPackage,
fpi.FullPath);
return new KeyValuePair<string, bool>(fpi.FullPath, existingOverrided);
return new Details<string>()
{
Source = fpi.FileNameInPackage,
Destination = fpi.FullPath,
Status = existingOverrided ? InstallStatus.Overwridden : InstallStatus.Inserted
};
}).ToArray();
}
@@ -471,41 +490,57 @@ namespace Umbraco.Core.Packaging
"xRootElement");
}
XElement majorElement = infoElement.XPathSelectElement(Constants.Packaging.PackageRequirementsMajorXpath);
XElement minorElement = infoElement.XPathSelectElement(Constants.Packaging.PackageRequirementsMinorXpath);
XElement patchElement = infoElement.XPathSelectElement(Constants.Packaging.PackageRequirementsPatchXpath);
XElement nameElement = infoElement.XPathSelectElement(Constants.Packaging.PackageNameXpath);
XElement versionElement = infoElement.XPathSelectElement(Constants.Packaging.PackageVersionXpath);
XElement urlElement = infoElement.XPathSelectElement(Constants.Packaging.PackageUrlXpath);
XElement licenseElement = infoElement.XPathSelectElement(Constants.Packaging.PackageLicenseXpath);
XElement authorNameElement = infoElement.XPathSelectElement(Constants.Packaging.AuthorNameXpath);
XElement authorUrlElement = infoElement.XPathSelectElement(Constants.Packaging.AuthorWebsiteXpath);
XElement readmeElement = infoElement.XPathSelectElement(Constants.Packaging.ReadmeXpath);
var majorElement = infoElement.XPathSelectElement(Constants.Packaging.PackageRequirementsMajorXpath);
var minorElement = infoElement.XPathSelectElement(Constants.Packaging.PackageRequirementsMinorXpath);
var patchElement = infoElement.XPathSelectElement(Constants.Packaging.PackageRequirementsPatchXpath);
var nameElement = infoElement.XPathSelectElement(Constants.Packaging.PackageNameXpath);
var versionElement = infoElement.XPathSelectElement(Constants.Packaging.PackageVersionXpath);
var urlElement = infoElement.XPathSelectElement(Constants.Packaging.PackageUrlXpath);
var licenseElement = infoElement.XPathSelectElement(Constants.Packaging.PackageLicenseXpath);
var authorNameElement = infoElement.XPathSelectElement(Constants.Packaging.AuthorNameXpath);
var authorUrlElement = infoElement.XPathSelectElement(Constants.Packaging.AuthorWebsiteXpath);
var readmeElement = infoElement.XPathSelectElement(Constants.Packaging.ReadmeXpath);
XElement controlElement = xRootElement.Element(Constants.Packaging.ControlNodeName);
int val;
return new MetaData
{
Name = nameElement == null ? string.Empty : nameElement.Value,
Version = versionElement == null ? string.Empty : versionElement.Value,
Url = urlElement == null ? string.Empty : urlElement.Value,
License = licenseElement == null ? string.Empty : licenseElement.Value,
LicenseUrl =
licenseElement == null
? string.Empty
: licenseElement.HasAttributes ? licenseElement.AttributeValue<string>("url") : string.Empty,
AuthorName = authorNameElement == null ? string.Empty : authorNameElement.Value,
AuthorUrl = authorUrlElement == null ? string.Empty : authorUrlElement.Value,
Readme = readmeElement == null ? string.Empty : readmeElement.Value,
ReqMajor = majorElement == null ? 0 : int.TryParse(majorElement.Value, out val) ? val : 0,
ReqMinor = minorElement == null ? 0 : int.TryParse(minorElement.Value, out val) ? val : 0,
ReqPatch = patchElement == null ? 0 : int.TryParse(patchElement.Value, out val) ? val : 0,
Control = controlElement == null ? string.Empty : controlElement.Value
Name = StringValue(nameElement),
Version = StringValue(versionElement),
Url = StringValue(urlElement),
License = StringValue(licenseElement),
LicenseUrl = StringAttribute(licenseElement, Constants.Packaging.PackageLicenseXpathUrlAttribute),
AuthorName = StringValue(authorNameElement),
AuthorUrl = StringValue(authorUrlElement),
Readme = StringValue(readmeElement),
Control = StringValue(controlElement),
ReqMajor = IntValue(majorElement),
ReqMinor = IntValue(minorElement),
ReqPatch = IntValue(patchElement),
};
}
private static string StringValue(XElement xElement, string defaultValue = "")
{
return xElement == null ? defaultValue : xElement.Value;
}
private static string StringAttribute(XElement xElement, string attribute, string defaultValue = "")
{
return xElement == null
? defaultValue
: xElement.HasAttributes ? xElement.AttributeValue<string>(attribute) : defaultValue;
}
private static int IntValue(XElement xElement, int defaultValue = 0)
{
int val;
return xElement == null ? defaultValue : int.TryParse(xElement.Value, out val) ? val : defaultValue;
}
private static string UpdatePathPlaceholders(string path)
{
if (path.Contains("[$"))

View File

@@ -5,7 +5,7 @@ using Umbraco.Core.Packaging;
using Umbraco.Core.Packaging.Models;
using Umbraco.Core.Services;
namespace Umbraco.Tests.Services
namespace Umbraco.Tests.Packaging
{
[TestFixture]
public class PackageInstallationTest
@@ -56,8 +56,6 @@ namespace Umbraco.Tests.Services
string test;
packageExtraction.Setup(a => a.ReadTextFileFromArchive(pagePath, Constants.Packaging.PackageXmlFileName, out test)).Returns(Xml);
var fileService = new Mock<IFileService>();
var macroService = new Mock<IMacroService>();
var packagingService = new Mock<IPackagingService>();
@@ -69,7 +67,7 @@ namespace Umbraco.Tests.Services
// Assert
Assert.IsNotNull(installationSummary);
Assert.Inconclusive("Lots of more tests can be written");
//Assert.Inconclusive("Lots of more tests can be written");
}
}