mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Changing the Getter/Setter deletages to an IFieldStorage interface
Deletages seemed inconsistent with design of rest of system Interface allows for typed accessor methods, which will be important for columnar backing --HG-- branch : dev
This commit is contained in:
@@ -60,9 +60,9 @@ namespace Orchard.Tests.ContentManagement.Drivers.FieldStorage {
|
||||
public void GettingUnsetNamedAndUnnamedValueIsSafeAndNull() {
|
||||
var part = CreateContentItemPart();
|
||||
var storage = _provider.BindStorage(part, part.PartDefinition.Fields.Single());
|
||||
Assert.That(storage.Getter(null), Is.Null);
|
||||
Assert.That(storage.Getter("value"), Is.Null);
|
||||
Assert.That(storage.Getter("This is a test"), Is.Null);
|
||||
Assert.That(storage.Get<string>(null), Is.Null);
|
||||
Assert.That(storage.Get<string>("value"), Is.Null);
|
||||
Assert.That(storage.Get<string>("This is a test"), Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -70,10 +70,10 @@ namespace Orchard.Tests.ContentManagement.Drivers.FieldStorage {
|
||||
var part = CreateContentItemPart();
|
||||
var storage = _provider.BindStorage(part, part.PartDefinition.Fields.Single());
|
||||
|
||||
Assert.That(storage.Getter("alpha"), Is.Null);
|
||||
storage.Setter("alpha", "one");
|
||||
Assert.That(storage.Getter("alpha"), Is.Not.Null);
|
||||
Assert.That(storage.Getter("alpha"), Is.EqualTo("one"));
|
||||
Assert.That(storage.Get<string>("alpha"), Is.Null);
|
||||
storage.Set("alpha", "one");
|
||||
Assert.That(storage.Get<string>("alpha"), Is.Not.Null);
|
||||
Assert.That(storage.Get<string>("alpha"), Is.EqualTo("one"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -81,14 +81,14 @@ namespace Orchard.Tests.ContentManagement.Drivers.FieldStorage {
|
||||
var part = CreateContentItemPart();
|
||||
var storage = _provider.BindStorage(part, part.PartDefinition.Fields.Single());
|
||||
|
||||
Assert.That(storage.Getter(null), Is.Null);
|
||||
Assert.That(storage.Getter(""), Is.Null);
|
||||
storage.Setter(null, "one");
|
||||
Assert.That(storage.Getter(null), Is.EqualTo("one"));
|
||||
Assert.That(storage.Getter(""), Is.EqualTo("one"));
|
||||
storage.Setter(null, "two");
|
||||
Assert.That(storage.Getter(null), Is.EqualTo("two"));
|
||||
Assert.That(storage.Getter(""), Is.EqualTo("two"));
|
||||
Assert.That(storage.Get<string>(null), Is.Null);
|
||||
Assert.That(storage.Get<string>(""), Is.Null);
|
||||
storage.Set(null, "one");
|
||||
Assert.That(storage.Get<string>(null), Is.EqualTo("one"));
|
||||
Assert.That(storage.Get<string>(""), Is.EqualTo("one"));
|
||||
storage.Set(null, "two");
|
||||
Assert.That(storage.Get<string>(null), Is.EqualTo("two"));
|
||||
Assert.That(storage.Get<string>(""), Is.EqualTo("two"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -96,8 +96,8 @@ namespace Orchard.Tests.ContentManagement.Drivers.FieldStorage {
|
||||
var part = CreateContentItemPart();
|
||||
var storage = _provider.BindStorage(part, part.PartDefinition.Fields.Single());
|
||||
|
||||
storage.Setter(null, "one");
|
||||
storage.Setter("alpha", "two");
|
||||
storage.Set(null, "one");
|
||||
storage.Set("alpha", "two");
|
||||
|
||||
Assert.That(part.ContentItem.Record.Data, Is.EqualTo("<Data><Foo><Bar alpha=\"two\">one</Bar></Foo></Data>"));
|
||||
}
|
||||
@@ -107,14 +107,14 @@ namespace Orchard.Tests.ContentManagement.Drivers.FieldStorage {
|
||||
var part = CreateContentItemPart();
|
||||
var storage = _provider.BindStorage(part, part.PartDefinition.Fields.Single());
|
||||
|
||||
storage.Setter(null, "one");
|
||||
storage.Setter("alpha", "two");
|
||||
storage.Set(null, "one");
|
||||
storage.Set("alpha", "two");
|
||||
|
||||
Assert.That(part.ContentItem.Record.Data, Is.EqualTo("<Data><Foo><Bar alpha=\"two\">one</Bar></Foo></Data>"));
|
||||
part.ContentItem.Record.Data = "<Data><Foo><Bar alpha=\"four\">three</Bar></Foo></Data>";
|
||||
|
||||
storage.Setter(null, "three");
|
||||
storage.Setter("alpha", "four");
|
||||
storage.Set(null, "three");
|
||||
storage.Set("alpha", "four");
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.FieldStorage;
|
||||
|
||||
namespace Orchard.Core.Common.Fields {
|
||||
public class TextField : ContentField {
|
||||
public string Value {
|
||||
get { return Getter(null); }
|
||||
set { Setter(null, value); }
|
||||
get { return Storage.Get<string>(); }
|
||||
set { Storage.Set(value); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Orchard.ContentManagement.FieldStorage;
|
||||
using Orchard.ContentManagement.MetaData.Models;
|
||||
|
||||
namespace Orchard.ContentManagement {
|
||||
@@ -8,7 +9,6 @@ namespace Orchard.ContentManagement {
|
||||
public ContentPartDefinition.Field PartFieldDefinition { get; set; }
|
||||
public ContentFieldDefinition FieldDefinition { get { return PartFieldDefinition.FieldDefinition; } }
|
||||
|
||||
public Func<string, string> Getter { get; set; }
|
||||
public Action<string, string> Setter { get; set; }
|
||||
public IFieldStorage Storage { protected get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,8 +34,7 @@ namespace Orchard.ContentManagement.Drivers {
|
||||
FieldTypeName = typeof (TField).Name,
|
||||
Factory = (partFieldDefinition, storage) => new TField {
|
||||
PartFieldDefinition = partFieldDefinition,
|
||||
Getter = storage.Getter,
|
||||
Setter = storage.Setter,
|
||||
Storage = storage,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2,7 +2,15 @@
|
||||
|
||||
namespace Orchard.ContentManagement.FieldStorage {
|
||||
public interface IFieldStorage {
|
||||
Func<string, string> Getter { get; }
|
||||
Action<string, string> Setter { get; }
|
||||
T Get<T>(string name);
|
||||
void Set<T>(string name, T value);
|
||||
}
|
||||
public static class FieldStorageExtension{
|
||||
public static T Get<T>(this IFieldStorage storage) {
|
||||
return storage.Get<T>(null);
|
||||
}
|
||||
public static void Set<T>(this IFieldStorage storage, T value) {
|
||||
storage.Set(null, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Xml;
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
using Orchard.ContentManagement.MetaData.Models;
|
||||
|
||||
@@ -14,10 +13,9 @@ namespace Orchard.ContentManagement.FieldStorage.InfosetStorage {
|
||||
var fieldName = XmlConvert.EncodeLocalName(partFieldDefinition.Name);
|
||||
var infosetPart = contentPart.As<InfosetPart>();
|
||||
|
||||
return new Storage {
|
||||
Getter = name => Get(infosetPart.Infoset.Element, partName, fieldName, name),
|
||||
Setter = (name, value) => Set(infosetPart.Infoset.Element, partName, fieldName, name, value)
|
||||
};
|
||||
return new SimpleFieldStorage(
|
||||
name => Get(infosetPart.Infoset.Element, partName, fieldName, name),
|
||||
(name, value) => Set(infosetPart.Infoset.Element, partName, fieldName, name, value));
|
||||
}
|
||||
|
||||
private static string Get(XElement element, string partName, string fieldName, string valueName) {
|
||||
@@ -57,10 +55,5 @@ namespace Orchard.ContentManagement.FieldStorage.InfosetStorage {
|
||||
fieldElement.SetAttributeValue(XmlConvert.EncodeLocalName(valueName), value);
|
||||
}
|
||||
}
|
||||
|
||||
class Storage : IFieldStorage {
|
||||
public Func<string, string> Getter { get; set; }
|
||||
public Action<string, string> Setter { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Orchard.ContentManagement.FieldStorage {
|
||||
public class SimpleFieldStorage : IFieldStorage {
|
||||
public SimpleFieldStorage(Func<string, string> getter, Action<string, string> setter) {
|
||||
Getter = getter;
|
||||
Setter = setter;
|
||||
}
|
||||
|
||||
public Func<string, string> Getter { get; set; }
|
||||
public Action<string, string> Setter { get; set; }
|
||||
|
||||
public T Get<T>(string name) {
|
||||
var value = Getter(name);
|
||||
return string.IsNullOrEmpty(value)
|
||||
? default(T)
|
||||
: (T)Convert.ChangeType(value, typeof(T), CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
public void Set<T>(string name, T value) {
|
||||
Setter(name, Convert.ToString(value, CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -207,6 +207,7 @@
|
||||
</Compile>
|
||||
<Compile Include="ContentManagement\FieldStorage\InfosetStorage\InfosetHandler.cs" />
|
||||
<Compile Include="ContentManagement\FieldStorage\InfosetStorage\InfosetPart.cs" />
|
||||
<Compile Include="ContentManagement\FieldStorage\SimpleFieldStorage.cs" />
|
||||
<Compile Include="ContentManagement\Handlers\ActivatedContentContext.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
|
||||
Reference in New Issue
Block a user