Refactored Rules import/export step.

This commit is contained in:
Sipke Schoorstra
2015-07-17 13:52:41 +01:00
parent 8baa6edad7
commit aa91768bf1
4 changed files with 111 additions and 137 deletions

View File

@@ -1,14 +0,0 @@
using System.Collections.Generic;
using Orchard.Events;
namespace Orchard.Rules.ImportExport {
public interface ICustomExportStep : IEventHandler {
void Register(IList<string> steps);
}
public class RulesCustomExportStep : ICustomExportStep {
public void Register(IList<string> steps) {
steps.Add("Rules");
}
}
}

View File

@@ -89,9 +89,8 @@
<Content Include="Scripts\Web.config" /> <Content Include="Scripts\Web.config" />
<Content Include="Styles\Web.config" /> <Content Include="Styles\Web.config" />
<Compile Include="Handlers\ContentHandler.cs" /> <Compile Include="Handlers\ContentHandler.cs" />
<Compile Include="ImportExport\RulesExportEventHandler.cs" /> <Compile Include="Recipes\Builders\RulesStep.cs" />
<Compile Include="ImportExport\RulesCustomExportStep.cs" /> <Compile Include="Recipes\Executors\RulesStep.cs" />
<Compile Include="ImportExport\RulesRecipeHandler.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="Module.txt" /> <Content Include="Module.txt" />
<Content Include="Web.config"> <Content Include="Web.config">

View File

@@ -1,42 +1,42 @@
using System.Collections.Generic; using System.Globalization;
using System.Globalization;
using System.Linq; using System.Linq;
using System.Xml.Linq; using System.Xml.Linq;
using Orchard.Events; using Orchard.Localization;
using Orchard.Recipes.Services;
using Orchard.Rules.Services; using Orchard.Rules.Services;
namespace Orchard.Rules.ImportExport { namespace Orchard.Rules.Recipes.Builders {
public interface IExportEventHandler : IEventHandler {
void Exporting(dynamic context);
void Exported(dynamic context);
}
public class RulesExportHandler : IExportEventHandler { public class RulesStep : RecipeBuilderStep {
private readonly IRulesServices _rulesServices; private readonly IRulesServices _rulesServices;
public RulesExportHandler(IRulesServices rulesServices) { public RulesStep(IRulesServices rulesServices) {
_rulesServices = rulesServices; _rulesServices = rulesServices;
} }
public void Exporting(dynamic context) { public override string Name {
get { return "Rules"; }
} }
public void Exported(dynamic context) { public override LocalizedString DisplayName {
get { return T("Rules"); }
if (!((IEnumerable<string>)context.ExportOptions.CustomSteps).Contains("Rules")) {
return;
} }
public override LocalizedString Description {
get { return T("Exports rules."); }
}
public override void Build(BuildContext context) {
var allRules = _rulesServices.GetRules().ToList(); var allRules = _rulesServices.GetRules().ToList();
if(!allRules.Any()) { if (!allRules.Any()) {
return; return;
} }
var root = new XElement("Rules"); var root = new XElement("Rules");
context.Document.Element("Orchard").Add(root); context.RecipeDocument.Element("Orchard").Add(root);
foreach(var rule in allRules) { foreach (var rule in allRules) {
root.Add(new XElement("Rule", root.Add(new XElement("Rule",
new XAttribute("Name", rule.Name), new XAttribute("Name", rule.Name),
new XAttribute("Enabled", rule.Enabled.ToString(CultureInfo.InvariantCulture)), new XAttribute("Enabled", rule.Enabled.ToString(CultureInfo.InvariantCulture)),

View File

@@ -1,33 +1,24 @@
using System; using System;
using System.Linq; using System.Linq;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.Recipes.Models; using Orchard.Recipes.Models;
using Orchard.Recipes.Services; using Orchard.Recipes.Services;
using Orchard.Rules.Models; using Orchard.Rules.Models;
using Orchard.Rules.Services; using Orchard.Rules.Services;
namespace Orchard.Rules.ImportExport { namespace Orchard.Rules.Recipes.Executors {
public class RulesRecipeHandler : IRecipeHandler { public class RulesStep : RecipeExecutionStep {
private readonly IRulesServices _rulesServices; private readonly IRulesServices _rulesServices;
public RulesRecipeHandler(IRulesServices rulesServices) { public RulesStep(IRulesServices rulesServices) {
_rulesServices = rulesServices; _rulesServices = rulesServices;
Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
} }
public Localizer T { get; set; } public override string Name {
public ILogger Logger { get; set; } get { return "Rules"; }
// <Data />
// Import Data
public void ExecuteRecipeStep(RecipeContext recipeContext) {
if (!String.Equals(recipeContext.RecipeStep.Name, "Rules", StringComparison.OrdinalIgnoreCase)) {
return;
} }
foreach (var rule in recipeContext.RecipeStep.Step.Elements()) { public override void Execute(RecipeExecutionContext context) {
foreach (var rule in context.RecipeStep.Step.Elements()) {
var ruleRecord = _rulesServices.CreateRule(rule.Attribute("Name").Value); var ruleRecord = _rulesServices.CreateRule(rule.Attribute("Name").Value);
ruleRecord.Enabled = bool.Parse(rule.Attribute("Enabled").Value); ruleRecord.Enabled = bool.Parse(rule.Attribute("Enabled").Value);
@@ -50,8 +41,6 @@ namespace Orchard.Rules.ImportExport {
}).ToList(); }).ToList();
} }
recipeContext.Executed = true;
} }
} }
} }