Adding <remove name="..."/> to metadata reader

Provides ability to remove parts and fields on merge/import of content definitions
Fixes some fieldname/fieldtypename issues on persistence

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-06-28 15:30:08 -07:00
parent 35fe587b6d
commit b22e156d07
3 changed files with 40 additions and 20 deletions

View File

@@ -115,7 +115,7 @@ namespace Orchard.Core.Settings.Metadata {
record.Settings = _settingsWriter.Map(model.Settings).ToString();
var toRemove = record.ContentPartFieldDefinitionRecords
.Where(partFieldDefinitionRecord => model.Fields.Any(partField => partFieldDefinitionRecord.Name == partField.Name))
.Where(partFieldDefinitionRecord => !model.Fields.Any(partField => partFieldDefinitionRecord.Name == partField.Name))
.ToList();
foreach (var remove in toRemove) {
@@ -123,7 +123,7 @@ namespace Orchard.Core.Settings.Metadata {
}
foreach (var field in model.Fields) {
var fieldName = field.FieldDefinition.Name;
var fieldName = field.Name;
var partFieldRecord = record.ContentPartFieldDefinitionRecords.SingleOrDefault(r => r.Name == fieldName);
if (partFieldRecord == null) {
partFieldRecord = new ContentPartFieldDefinitionRecord {

View File

@@ -35,7 +35,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
}
public ContentPartDefinitionBuilder RemoveField(string fieldName) {
var existingField = _fields.SingleOrDefault(x => x.FieldDefinition.Name == fieldName);
var existingField = _fields.SingleOrDefault(x => x.Name == fieldName);
if (existingField != null) {
_fields.Remove(existingField);
}

View File

@@ -1,4 +1,5 @@
using System.Xml;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using Orchard.ContentManagement.MetaData.Builders;
using Orchard.ContentManagement.MetaData.Models;
@@ -18,8 +19,16 @@ namespace Orchard.ContentManagement.MetaData.Services {
}
foreach (var iter in source.Elements()) {
var partElement = iter;
var partName = XmlConvert.DecodeName(partElement.Name.LocalName);
if (partName == "remove") {
var nameAttribute = partElement.Attribute("name");
if (nameAttribute != null) {
builder.RemovePart(nameAttribute.Value);
}
}
else {
builder.WithPart(
XmlConvert.DecodeName(partElement.Name.LocalName),
partName,
partBuilder => {
foreach (var setting in _settingsReader.Map(partElement)) {
partBuilder.WithSetting(setting.Key, setting.Value);
@@ -27,6 +36,7 @@ namespace Orchard.ContentManagement.MetaData.Services {
});
}
}
}
public void Merge(XElement source, ContentPartDefinitionBuilder builder) {
builder.Named(XmlConvert.DecodeName(source.Name.LocalName));
@@ -36,11 +46,20 @@ namespace Orchard.ContentManagement.MetaData.Services {
foreach (var iter in source.Elements()) {
var fieldElement = iter;
var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split('.');
var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split(new[] { '.' }, 2);
var fieldName = fieldParameters.FirstOrDefault();
var fieldType = fieldParameters.Skip(1).FirstOrDefault();
if (fieldName == "remove") {
var nameAttribute = fieldElement.Attribute("name");
if (nameAttribute != null) {
builder.RemoveField(nameAttribute.Value);
}
}
else {
builder.WithField(
fieldParameters[0],
fieldName,
fieldBuilder => {
fieldBuilder.OfType(fieldParameters[1]);
fieldBuilder.OfType(fieldType);
foreach (var setting in _settingsReader.Map(fieldElement)) {
fieldBuilder.WithSetting(setting.Key, setting.Value);
}
@@ -49,3 +68,4 @@ namespace Orchard.ContentManagement.MetaData.Services {
}
}
}
}