diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportExportService.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportExportService.cs index 108c91a50..473822391 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportExportService.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportExportService.cs @@ -1,9 +1,13 @@ using System.Collections.Generic; +using System.Xml.Linq; using Orchard.Recipes.Services; namespace Orchard.ImportExport.Services { public interface IImportExportService : IDependency { string Import(string recipeText); + XDocument ExportXml(IEnumerable steps); string Export(IEnumerable steps); + string WriteExportFile(XDocument recipeDocument); + string WriteExportFile(string recipeText); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs index d367f34ec..28cece3a9 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Xml.Linq; using Orchard.FileSystems.AppData; using Orchard.Localization; using Orchard.Logging; @@ -34,23 +35,36 @@ namespace Orchard.ImportExport.Services { public Localizer T { get; set; } public ILogger Logger { get; set; } + public string Import(XDocument recipeDocument) { + return _recipeExecutor.Execute(recipeDocument); + } + public string Import(string recipeText) { return _recipeExecutor.Execute(recipeText); } + public XDocument ExportXml(IEnumerable steps) { + var recipe = _recipeBuilder.Build(steps); + return recipe; + } + public string Export(IEnumerable steps) { var recipe = _recipeBuilder.Build(steps); - return WriteExportFile(recipe); + return recipe.ToString(); } - - private string WriteExportFile(string exportDocument) { + + public string WriteExportFile(XDocument recipeDocument) { + return WriteExportFile(recipeDocument.ToString()); + } + + public string WriteExportFile(string recipeText) { var exportFile = String.Format("Export-{0}-{1}.xml", _orchardServices.WorkContext.CurrentUser.UserName, _clock.UtcNow.Ticks); if (!_appDataFolder.DirectoryExists(ExportsDirectory)) { _appDataFolder.CreateDirectory(ExportsDirectory); } var path = _appDataFolder.Combine(ExportsDirectory, exportFile); - _appDataFolder.CreateFile(path, exportDocument); + _appDataFolder.CreateFile(path, recipeText); return _appDataFolder.MapPath(path); } diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeBuilder.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeBuilder.cs index 0d349d2fe..c38fe8ce9 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeBuilder.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeBuilder.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; +using System.Xml.Linq; namespace Orchard.Recipes.Services { public interface IRecipeBuilder : IDependency { - string Build(IEnumerable steps); + XDocument Build(IEnumerable steps); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeExecutor.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeExecutor.cs index 89b9cd416..2ae45c3fd 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeExecutor.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/IRecipeExecutor.cs @@ -1,5 +1,10 @@ -namespace Orchard.Recipes.Services { +using System.Xml.Linq; +using Orchard.Recipes.Models; + +namespace Orchard.Recipes.Services { public interface IRecipeExecutor : IDependency { + string Execute(XDocument recipeDocument); string Execute(string recipeText); + string Execute(Recipe recipe); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeBuilder.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeBuilder.cs index c3a08743b..b4c38d7d4 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeBuilder.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeBuilder.cs @@ -4,7 +4,7 @@ using System.Xml.Linq; namespace Orchard.Recipes.Services { public class RecipeBuilder : Component, IRecipeBuilder { - public string Build(IEnumerable steps) { + public XDocument Build(IEnumerable steps) { var context = new BuildContext { RecipeDocument = CreateRecipeRoot() }; @@ -13,7 +13,7 @@ namespace Orchard.Recipes.Services { step.Build(context); } - return context.RecipeDocument.ToString(); + return context.RecipeDocument; } private XDocument CreateRecipeRoot() { diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeExecutor.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeExecutor.cs index df96036bf..6a7afc6d0 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeExecutor.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeExecutor.cs @@ -1,4 +1,6 @@ -using Orchard.Environment.Descriptor; +using System.Xml.Linq; +using Orchard.Environment.Descriptor; +using Orchard.Recipes.Models; namespace Orchard.Recipes.Services { public class RecipeExecutor : Component, IRecipeExecutor { @@ -16,13 +18,22 @@ namespace Orchard.Recipes.Services { _shellDescriptorManager = shellDescriptorManager; } + public string Execute(XDocument recipeDocument) { + var recipeText = recipeDocument.ToString(); + return Execute(recipeText); + } + public string Execute(string recipeText) { var recipe = _recipeParser.ParseRecipe(recipeText); + return Execute(recipe); + } + + public string Execute(Recipe recipe) { var executionId = _recipeManager.Execute(recipe); UpdateShell(); return executionId; } - + private void UpdateShell() { var descriptor = _shellDescriptorManager.GetShellDescriptor(); _shellDescriptorManager.UpdateShellDescriptor(descriptor.SerialNumber, descriptor.Features, descriptor.Parameters); diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs index beb1c00db..43711fdc5 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs @@ -2,29 +2,23 @@ using System.Collections.Generic; using System.Xml; using System.Xml.Linq; -using Orchard.Localization; using Orchard.Logging; using Orchard.Recipes.Models; namespace Orchard.Recipes.Services { - public class RecipeParser : IRecipeParser { - public RecipeParser() { - Logger = NullLogger.Instance; - T = NullLocalizer.Instance; + public class RecipeParser : Component, IRecipeParser { + public Recipe ParseRecipe(XDocument recipeDocument) { + return ParseRecipe(recipeDocument.ToString(SaveOptions.DisableFormatting)); } - public Localizer T { get; set; } - public ILogger Logger { get; set; } - public Recipe ParseRecipe(string recipeText) { var recipe = new Recipe(); - if (string.IsNullOrEmpty(recipeText)) { + if (String.IsNullOrEmpty(recipeText)) { throw new Exception("Recipe is empty"); } - XElement recipeTree = XElement.Parse(recipeText, LoadOptions.PreserveWhitespace); - + var recipeTree = XElement.Parse(recipeText, LoadOptions.PreserveWhitespace); var recipeSteps = new List(); foreach (var element in recipeTree.Elements()) { diff --git a/src/Orchard/Recipes/Services/IRecipeParser.cs b/src/Orchard/Recipes/Services/IRecipeParser.cs index 2b7a512e7..9dd056170 100644 --- a/src/Orchard/Recipes/Services/IRecipeParser.cs +++ b/src/Orchard/Recipes/Services/IRecipeParser.cs @@ -1,7 +1,9 @@ -using Orchard.Recipes.Models; +using System.Xml.Linq; +using Orchard.Recipes.Models; namespace Orchard.Recipes.Services { public interface IRecipeParser : IDependency { + Recipe ParseRecipe(XDocument recipeDocument); Recipe ParseRecipe(string recipeText); } }