Rename a few classes, and update package install API

Installing a package via the PackageManager now returns
a package info containing a subset of metadata properties.

--HG--
branch : dev
rename : src/Orchard/Packaging/IPackageSourceManager.cs => src/Orchard/Packaging/IPackagingSourceManager.cs
rename : src/Orchard/Packaging/PackageEntry.cs => src/Orchard/Packaging/PackagingEntry.cs
rename : src/Orchard/Packaging/PackageSource.cs => src/Orchard/Packaging/PackagingSource.cs
rename : src/Orchard/Packaging/PackageSourceManager.cs => src/Orchard/Packaging/PackagingSourceManager.cs
This commit is contained in:
Renaud Paquay
2010-07-18 13:09:45 -07:00
parent 9e65f8562a
commit e94d07a907
15 changed files with 73 additions and 57 deletions

View File

@@ -13,17 +13,17 @@ namespace Futures.Modules.Packaging.Controllers {
[Themed, Admin] [Themed, Admin]
public class PackagingController : Controller { public class PackagingController : Controller {
private readonly IPackageManager _packageManager; private readonly IPackageManager _packageManager;
private readonly IPackageSourceManager _packageSourceManager; private readonly IPackagingSourceManager _packagingSourceManager;
private readonly IExtensionManager _extensionManager; private readonly IExtensionManager _extensionManager;
private readonly INotifier _notifier; private readonly INotifier _notifier;
public PackagingController( public PackagingController(
IPackageManager packageManager, IPackageManager packageManager,
IPackageSourceManager packageSourceManager, IPackagingSourceManager packagingSourceManager,
IExtensionManager extensionManager, IExtensionManager extensionManager,
INotifier notifier) { INotifier notifier) {
_packageManager = packageManager; _packageManager = packageManager;
_packageSourceManager = packageSourceManager; _packagingSourceManager = packagingSourceManager;
_extensionManager = extensionManager; _extensionManager = extensionManager;
_notifier = notifier; _notifier = notifier;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
@@ -37,12 +37,12 @@ namespace Futures.Modules.Packaging.Controllers {
public ActionResult Sources() { public ActionResult Sources() {
return View("Sources", new PackagingSourcesViewModel { return View("Sources", new PackagingSourcesViewModel {
Sources = _packageSourceManager.GetSources(), Sources = _packagingSourceManager.GetSources(),
}); });
} }
public ActionResult AddSource(string url) { public ActionResult AddSource(string url) {
_packageSourceManager.AddSource(new PackageSource { Id = Guid.NewGuid(), FeedUrl = url }); _packagingSourceManager.AddSource(new PackagingSource { Id = Guid.NewGuid(), FeedUrl = url });
Update(); Update();
return RedirectToAction("Sources"); return RedirectToAction("Sources");
} }
@@ -50,12 +50,12 @@ namespace Futures.Modules.Packaging.Controllers {
public ActionResult Modules() { public ActionResult Modules() {
return View("Modules", new PackagingModulesViewModel { return View("Modules", new PackagingModulesViewModel {
Modules = _packageSourceManager.GetModuleList() Modules = _packagingSourceManager.GetModuleList()
}); });
} }
public ActionResult Update() { public ActionResult Update() {
_packageSourceManager.UpdateLists(); _packagingSourceManager.UpdateLists();
_notifier.Information(T("List of available modules and themes is updated.")); _notifier.Information(T("List of available modules and themes is updated."));
return RedirectToAction("Index"); return RedirectToAction("Index");
} }
@@ -64,14 +64,14 @@ namespace Futures.Modules.Packaging.Controllers {
return View("Harvest", new PackagingHarvestViewModel { return View("Harvest", new PackagingHarvestViewModel {
ExtensionName = extensionName, ExtensionName = extensionName,
FeedUrl = feedUrl, FeedUrl = feedUrl,
Sources = _packageSourceManager.GetSources(), Sources = _packagingSourceManager.GetSources(),
Extensions = _extensionManager.AvailableExtensions() Extensions = _extensionManager.AvailableExtensions()
}); });
} }
[HttpPost] [HttpPost]
public ActionResult Harvest(PackagingHarvestViewModel model) { public ActionResult Harvest(PackagingHarvestViewModel model) {
model.Sources = _packageSourceManager.GetSources(); model.Sources = _packagingSourceManager.GetSources();
model.Extensions = _extensionManager.AvailableExtensions(); model.Extensions = _extensionManager.AvailableExtensions();
var packageData = _packageManager.Harvest(model.ExtensionName); var packageData = _packageManager.Harvest(model.ExtensionName);
@@ -98,7 +98,7 @@ namespace Futures.Modules.Packaging.Controllers {
public ActionResult Install(string syndicationId) { public ActionResult Install(string syndicationId) {
var packageData = _packageManager.Download(syndicationId); var packageData = _packageManager.Download(syndicationId);
_packageManager.Install(packageData); _packageManager.Install(packageData.PackageStream);
_notifier.Information(T("Installed module")); _notifier.Information(T("Installed module"));
return RedirectToAction("Modules"); return RedirectToAction("Modules");
} }

View File

@@ -86,7 +86,6 @@
<Folder Include="Content\" /> <Folder Include="Content\" />
<Folder Include="Models\" /> <Folder Include="Models\" />
<Folder Include="Scripts\" /> <Folder Include="Scripts\" />
<Folder Include="Services\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj"> <ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">

View File

@@ -5,7 +5,7 @@ using Orchard.Packaging;
namespace Futures.Modules.Packaging.ViewModels { namespace Futures.Modules.Packaging.ViewModels {
public class PackagingHarvestViewModel { public class PackagingHarvestViewModel {
public IEnumerable<PackageSource> Sources { get; set; } public IEnumerable<PackagingSource> Sources { get; set; }
public IEnumerable<ExtensionDescriptor> Extensions { get; set; } public IEnumerable<ExtensionDescriptor> Extensions { get; set; }
[Required] [Required]

View File

@@ -3,6 +3,6 @@ using Orchard.Packaging;
namespace Futures.Modules.Packaging.ViewModels { namespace Futures.Modules.Packaging.ViewModels {
public class PackagingModulesViewModel { public class PackagingModulesViewModel {
public IEnumerable<PackageEntry> Modules { get; set; } public IEnumerable<PackagingEntry> Modules { get; set; }
} }
} }

View File

@@ -3,6 +3,6 @@ using Orchard.Packaging;
namespace Futures.Modules.Packaging.ViewModels { namespace Futures.Modules.Packaging.ViewModels {
public class PackagingSourcesViewModel { public class PackagingSourcesViewModel {
public IEnumerable<PackageSource> Sources { get; set; } public IEnumerable<PackagingSource> Sources { get; set; }
} }
} }

View File

@@ -367,14 +367,14 @@
<Compile Include="Packaging\IPackageBuilder.cs" /> <Compile Include="Packaging\IPackageBuilder.cs" />
<Compile Include="Packaging\IPackageExpander.cs" /> <Compile Include="Packaging\IPackageExpander.cs" />
<Compile Include="Packaging\IPackageManager.cs" /> <Compile Include="Packaging\IPackageManager.cs" />
<Compile Include="Packaging\IPackageSourceManager.cs" /> <Compile Include="Packaging\IPackagingSourceManager.cs" />
<Compile Include="Packaging\PackageBuilder.cs" /> <Compile Include="Packaging\PackageBuilder.cs" />
<Compile Include="Packaging\PackageData.cs" /> <Compile Include="Packaging\PackageData.cs" />
<Compile Include="Packaging\PackageEntry.cs" /> <Compile Include="Packaging\PackagingEntry.cs" />
<Compile Include="Packaging\PackageExpander.cs" /> <Compile Include="Packaging\PackageExpander.cs" />
<Compile Include="Packaging\PackageManager.cs" /> <Compile Include="Packaging\PackageManager.cs" />
<Compile Include="Packaging\PackageSource.cs" /> <Compile Include="Packaging\PackagingSource.cs" />
<Compile Include="Packaging\PackageSourceManager.cs" /> <Compile Include="Packaging\PackagingSourceManager.cs" />
<Compile Include="Utility\Hash.cs" /> <Compile Include="Utility\Hash.cs" />
<Compile Include="Data\ISessionConfigurationCache.cs" /> <Compile Include="Data\ISessionConfigurationCache.cs" />
<Compile Include="Data\Migration\Generator\ISchemaCommandGenerator.cs" /> <Compile Include="Data\Migration\Generator\ISchemaCommandGenerator.cs" />

View File

@@ -1,7 +1,15 @@
using System;
using System.IO; using System.IO;
namespace Orchard.Packaging { namespace Orchard.Packaging {
public class PackageInfo {
public string ExtensionName { get; set; }
public string ExtensionVersion { get; set; }
public string ExtensionType { get; set; }
public string ExtensionPath { get; set; }
}
public interface IPackageExpander : IDependency { public interface IPackageExpander : IDependency {
void ExpandPackage(Stream packageStream); PackageInfo ExpandPackage(Stream packageStream);
} }
} }

View File

@@ -1,9 +1,11 @@
using System.IO;
namespace Orchard.Packaging { namespace Orchard.Packaging {
public interface IPackageManager : IDependency { public interface IPackageManager : IDependency {
PackageData Harvest(string extensionName); PackageData Harvest(string extensionName);
PackageData Download(string feedItemId); PackageData Download(string feedItemId);
void Push(PackageData packageData, string feedUrl); void Push(PackageData packageData, string feedUrl);
void Install(PackageData packageData); PackageInfo Install(Stream packageStream);
} }
} }

View File

@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
namespace Orchard.Packaging {
public interface IPackageSourceManager : IDependency {
IEnumerable<PackageSource> GetSources();
void AddSource(PackageSource source);
void RemoveSource(Guid id);
void UpdateLists();
IEnumerable<PackageEntry> GetModuleList();
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
namespace Orchard.Packaging {
public interface IPackagingSourceManager : IDependency {
IEnumerable<PackagingSource> GetSources();
void AddSource(PackagingSource source);
void RemoveSource(Guid id);
void UpdateLists();
IEnumerable<PackagingEntry> GetModuleList();
}
}

View File

@@ -4,9 +4,7 @@ using System.IO.Packaging;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Xml.Linq; using System.Xml.Linq;
using Orchard.Environment.Extensions;
using Orchard.FileSystems.VirtualPath; using Orchard.FileSystems.VirtualPath;
using Orchard.FileSystems.WebSite;
namespace Orchard.Packaging { namespace Orchard.Packaging {
public class PackageExpander : IPackageExpander { public class PackageExpander : IPackageExpander {
@@ -23,6 +21,7 @@ namespace Orchard.Packaging {
public Package Package { get; set; } public Package Package { get; set; }
public string ExtensionName { get; set; } public string ExtensionName { get; set; }
public string ExtensionVersion { get; set; }
public string ExtensionType { get; set; } public string ExtensionType { get; set; }
public string TargetPath { get; set; } public string TargetPath { get; set; }
@@ -32,7 +31,7 @@ namespace Orchard.Packaging {
public XDocument Project { get; set; } public XDocument Project { get; set; }
} }
public void ExpandPackage(Stream packageStream) { public PackageInfo ExpandPackage(Stream packageStream) {
var context = new ExpandContext(); var context = new ExpandContext();
BeginPackage(context, packageStream); BeginPackage(context, packageStream);
try { try {
@@ -49,6 +48,13 @@ namespace Orchard.Packaging {
finally { finally {
EndPackage(context); EndPackage(context);
} }
return new PackageInfo {
ExtensionName = context.ExtensionName,
ExtensionVersion = context.ExtensionVersion,
ExtensionType = context.ExtensionType,
ExtensionPath = context.TargetPath
};
} }
private void ExtractFile(ExpandContext context, string relativePath) { private void ExtractFile(ExpandContext context, string relativePath) {
@@ -143,6 +149,7 @@ namespace Orchard.Packaging {
private void GetCoreProperties(ExpandContext context) { private void GetCoreProperties(ExpandContext context) {
context.ExtensionName = context.Package.PackageProperties.Identifier; context.ExtensionName = context.Package.PackageProperties.Identifier;
context.ExtensionVersion = context.Package.PackageProperties.Version;
var contentType = context.Package.PackageProperties.ContentType; var contentType = context.Package.PackageProperties.ContentType;
if (contentType.StartsWith(ContentTypePrefix)) if (contentType.StartsWith(ContentTypePrefix))

View File

@@ -7,17 +7,17 @@ using Orchard.Environment.Extensions;
namespace Orchard.Packaging { namespace Orchard.Packaging {
public class PackageManager : IPackageManager { public class PackageManager : IPackageManager {
private readonly IExtensionManager _extensionManager; private readonly IExtensionManager _extensionManager;
private readonly IPackageSourceManager _packageSourceManager; private readonly IPackagingSourceManager _packagingSourceManager;
private readonly IPackageBuilder _packageBuilder; private readonly IPackageBuilder _packageBuilder;
private readonly IPackageExpander _packageExpander; private readonly IPackageExpander _packageExpander;
public PackageManager( public PackageManager(
IExtensionManager extensionManager, IExtensionManager extensionManager,
IPackageSourceManager packageSourceManager, IPackagingSourceManager packagingSourceManager,
IPackageBuilder packageBuilder, IPackageBuilder packageBuilder,
IPackageExpander packageExpander) { IPackageExpander packageExpander) {
_extensionManager = extensionManager; _extensionManager = extensionManager;
_packageSourceManager = packageSourceManager; _packagingSourceManager = packagingSourceManager;
_packageBuilder = packageBuilder; _packageBuilder = packageBuilder;
_packageExpander = packageExpander; _packageExpander = packageExpander;
} }
@@ -49,7 +49,7 @@ namespace Orchard.Packaging {
} }
public PackageData Download(string feedItemId) { public PackageData Download(string feedItemId) {
var entry = _packageSourceManager.GetModuleList().Single(x => x.SyndicationItem.Id == feedItemId); var entry = _packagingSourceManager.GetModuleList().Single(x => x.SyndicationItem.Id == feedItemId);
var request = WebRequest.Create(entry.PackageStreamUri); var request = WebRequest.Create(entry.PackageStreamUri);
using (var response = request.GetResponse()) { using (var response = request.GetResponse()) {
using (var responseStream = response.GetResponseStream()) { using (var responseStream = response.GetResponseStream()) {
@@ -70,8 +70,8 @@ namespace Orchard.Packaging {
} }
} }
public void Install(PackageData packageData) { public PackageInfo Install(Stream packageStream) {
_packageExpander.ExpandPackage(packageData.PackageStream); return _packageExpander.ExpandPackage(packageStream);
} }
} }
} }

View File

@@ -1,8 +1,8 @@
using System.ServiceModel.Syndication; using System.ServiceModel.Syndication;
namespace Orchard.Packaging { namespace Orchard.Packaging {
public class PackageEntry { public class PackagingEntry {
public PackageSource Source { get; set; } public PackagingSource Source { get; set; }
public SyndicationFeed SyndicationFeed { get; set; } public SyndicationFeed SyndicationFeed { get; set; }
public SyndicationItem SyndicationItem { get; set; } public SyndicationItem SyndicationItem { get; set; }
public string PackageStreamUri { get; set; } public string PackageStreamUri { get; set; }

View File

@@ -1,7 +1,7 @@
using System; using System;
namespace Orchard.Packaging { namespace Orchard.Packaging {
public class PackageSource { public class PackagingSource {
public Guid Id { get; set; } public Guid Id { get; set; }
public string FeedUrl { get; set; } public string FeedUrl { get; set; }
} }

View File

@@ -9,38 +9,38 @@ using System.Xml.Serialization;
using Orchard.FileSystems.AppData; using Orchard.FileSystems.AppData;
namespace Orchard.Packaging { namespace Orchard.Packaging {
public class PackageSourceManager : IPackageSourceManager { public class PackagingSourceManager : IPackagingSourceManager {
private readonly IAppDataFolder _appDataFolder; private readonly IAppDataFolder _appDataFolder;
private static readonly XmlSerializer _sourceSerializer = new XmlSerializer(typeof(List<PackageSource>), new XmlRootAttribute("Sources")); private static readonly XmlSerializer _sourceSerializer = new XmlSerializer(typeof(List<PackagingSource>), new XmlRootAttribute("Sources"));
public PackageSourceManager(IAppDataFolder appDataFolder) { public PackagingSourceManager(IAppDataFolder appDataFolder) {
_appDataFolder = appDataFolder; _appDataFolder = appDataFolder;
} }
static string GetSourcesPath() { static string GetSourcesPath() {
return ".Packaging/Sources.xml"; return ".Packaging/Sources.xml";
} }
static string GetFeedCachePath(PackageSource source) { static string GetFeedCachePath(PackagingSource source) {
return ".Packaging/Feed." + source.Id.ToString("n") + ".xml"; return ".Packaging/Feed." + source.Id.ToString("n") + ".xml";
} }
public IEnumerable<PackageSource> GetSources() { public IEnumerable<PackagingSource> GetSources() {
var text = _appDataFolder.ReadFile(GetSourcesPath()); var text = _appDataFolder.ReadFile(GetSourcesPath());
if (string.IsNullOrEmpty(text)) if (string.IsNullOrEmpty(text))
return Enumerable.Empty<PackageSource>(); return Enumerable.Empty<PackagingSource>();
var textReader = new StringReader(_appDataFolder.ReadFile(GetSourcesPath())); var textReader = new StringReader(_appDataFolder.ReadFile(GetSourcesPath()));
return (IEnumerable<PackageSource>)_sourceSerializer.Deserialize(textReader); return (IEnumerable<PackagingSource>)_sourceSerializer.Deserialize(textReader);
} }
void SaveSources(IEnumerable<PackageSource> sources) { void SaveSources(IEnumerable<PackagingSource> sources) {
var textWriter = new StringWriter(); var textWriter = new StringWriter();
_sourceSerializer.Serialize(textWriter, sources.ToList()); _sourceSerializer.Serialize(textWriter, sources.ToList());
_appDataFolder.CreateFile(GetSourcesPath(), textWriter.ToString()); _appDataFolder.CreateFile(GetSourcesPath(), textWriter.ToString());
} }
public void AddSource(PackageSource source) { public void AddSource(PackagingSource source) {
UpdateSource(source); UpdateSource(source);
SaveSources(GetSources().Concat(new[] { source })); SaveSources(GetSources().Concat(new[] { source }));
} }
@@ -55,7 +55,7 @@ namespace Orchard.Packaging {
} }
} }
private void UpdateSource(PackageSource source) { private void UpdateSource(PackagingSource source) {
var feed = XDocument.Load(source.FeedUrl, LoadOptions.PreserveWhitespace); var feed = XDocument.Load(source.FeedUrl, LoadOptions.PreserveWhitespace);
_appDataFolder.CreateFile(GetFeedCachePath(source), feed.ToString(SaveOptions.DisableFormatting)); _appDataFolder.CreateFile(GetFeedCachePath(source), feed.ToString(SaveOptions.DisableFormatting));
} }
@@ -78,7 +78,7 @@ namespace Orchard.Packaging {
return formatter.Feed; return formatter.Feed;
} }
public IEnumerable<PackageEntry> GetModuleList() { public IEnumerable<PackagingEntry> GetModuleList() {
var packageInfos = GetSources() var packageInfos = GetSources()
.SelectMany( .SelectMany(
source => source =>
@@ -86,7 +86,7 @@ namespace Orchard.Packaging {
feed => feed =>
feed.Items.SelectMany( feed.Items.SelectMany(
item => item =>
Unit(new PackageEntry { Unit(new PackagingEntry {
Source = source, Source = source,
SyndicationFeed = feed, SyndicationFeed = feed,
SyndicationItem = item, SyndicationItem = item,