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(); record.Settings = _settingsWriter.Map(model.Settings).ToString();
var toRemove = record.ContentPartFieldDefinitionRecords 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(); .ToList();
foreach (var remove in toRemove) { foreach (var remove in toRemove) {
@@ -123,7 +123,7 @@ namespace Orchard.Core.Settings.Metadata {
} }
foreach (var field in model.Fields) { foreach (var field in model.Fields) {
var fieldName = field.FieldDefinition.Name; var fieldName = field.Name;
var partFieldRecord = record.ContentPartFieldDefinitionRecords.SingleOrDefault(r => r.Name == fieldName); var partFieldRecord = record.ContentPartFieldDefinitionRecords.SingleOrDefault(r => r.Name == fieldName);
if (partFieldRecord == null) { if (partFieldRecord == null) {
partFieldRecord = new ContentPartFieldDefinitionRecord { partFieldRecord = new ContentPartFieldDefinitionRecord {

View File

@@ -35,7 +35,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
} }
public ContentPartDefinitionBuilder RemoveField(string fieldName) { 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) { if (existingField != null) {
_fields.Remove(existingField); _fields.Remove(existingField);
} }

View File

@@ -1,4 +1,5 @@
using System.Xml; using System.Linq;
using System.Xml;
using System.Xml.Linq; using System.Xml.Linq;
using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Builders;
using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.MetaData.Models;
@@ -18,13 +19,22 @@ namespace Orchard.ContentManagement.MetaData.Services {
} }
foreach (var iter in source.Elements()) { foreach (var iter in source.Elements()) {
var partElement = iter; var partElement = iter;
builder.WithPart( var partName = XmlConvert.DecodeName(partElement.Name.LocalName);
XmlConvert.DecodeName(partElement.Name.LocalName), if (partName == "remove") {
partBuilder => { var nameAttribute = partElement.Attribute("name");
foreach (var setting in _settingsReader.Map(partElement)) { if (nameAttribute != null) {
partBuilder.WithSetting(setting.Key, setting.Value); builder.RemovePart(nameAttribute.Value);
} }
}); }
else {
builder.WithPart(
partName,
partBuilder => {
foreach (var setting in _settingsReader.Map(partElement)) {
partBuilder.WithSetting(setting.Key, setting.Value);
}
});
}
} }
} }
@@ -36,15 +46,25 @@ namespace Orchard.ContentManagement.MetaData.Services {
foreach (var iter in source.Elements()) { foreach (var iter in source.Elements()) {
var fieldElement = iter; var fieldElement = iter;
var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split('.'); var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split(new[] { '.' }, 2);
builder.WithField( var fieldName = fieldParameters.FirstOrDefault();
fieldParameters[0], var fieldType = fieldParameters.Skip(1).FirstOrDefault();
fieldBuilder => { if (fieldName == "remove") {
fieldBuilder.OfType(fieldParameters[1]); var nameAttribute = fieldElement.Attribute("name");
foreach (var setting in _settingsReader.Map(fieldElement)) { if (nameAttribute != null) {
fieldBuilder.WithSetting(setting.Key, setting.Value); builder.RemoveField(nameAttribute.Value);
} }
}); }
else {
builder.WithField(
fieldName,
fieldBuilder => {
fieldBuilder.OfType(fieldType);
foreach (var setting in _settingsReader.Map(fieldElement)) {
fieldBuilder.WithSetting(setting.Key, setting.Value);
}
});
}
} }
} }
} }