public SyncItem BuildSyncItem(IItemData item) { var syncItem = new SyncItem { ID = item.Id.ToString("B"), DatabaseName = item.DatabaseName, ParentID = item.ParentId.ToString("B"), Name = item.Name, BranchId = item.BranchId.ToString("B"), TemplateID = item.TemplateId.ToString("B"), ItemPath = item.Path }; //syncItem.TemplateName = item.TemplateName; foreach (var field in item.SharedFields) //TODO: ItemSynchronization.BuildSyncItem sorts the fields and versions first, should we ? { syncItem.AddSharedField(field.FieldId.ToString("B"), null /*name*/, null /*key?*/, field.Value, true); } foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.ToString(), version.VersionNumber.ToString(), version.VersionNumber.ToString() /*revisionid needed?*/); if (syncVersion != null) { foreach (var field in version.Fields) { syncVersion.AddField(field.FieldId.ToString("B"), null /*name*/, null /*key?*/, field.Value, true); } } } return(syncItem); }
public static SyncItem BuildSyncItem(Item item) { SyncItem syncItem = new SyncItem(); syncItem.ID = item.ID.ToString(); syncItem.DatabaseName = item.Database.Name; syncItem.ParentID = item.ParentID.ToString(); syncItem.Name = item.Name; syncItem.BranchId = item.BranchId.ToString(); syncItem.TemplateID = item.TemplateID.ToString(); syncItem.TemplateName = item.TemplateName; syncItem.ItemPath = item.Paths.Path; item.Fields.ReadAll(); item.Fields.Sort(); foreach (Field field in item.Fields) { if (TemplateManager.GetTemplate(item).GetField(field.ID) != null && field.Shared) { string fieldValue = GetFieldValue(field); if (fieldValue != null) { syncItem.AddSharedField(field.ID.ToString(), field.Name, field.Key, fieldValue, true); } } } Item[] versions = item.Versions.GetVersions(true); Array.Sort <Item>(versions, new Comparison <Item>(CompareVersions)); Item[] array = versions; for (int i = 0; i < array.Length; i++) { Item version = array[i]; BuildVersion(syncItem, version); } return(syncItem); }
public SyncItem BuildSyncItem(IItemData item) { var syncItem = new SyncItem { ID = item.Id.ToString("B"), DatabaseName = item.DatabaseName, ParentID = item.ParentId.ToString("B"), Name = item.Name, BranchId = item.BranchId.ToString("B"), TemplateID = item.TemplateId.ToString("B"), ItemPath = item.Path }; //syncItem.TemplateName = item.TemplateName; foreach (var field in item.SharedFields) //TODO: ItemSynchronization.BuildSyncItem sorts the fields and versions first, should we ? { syncItem.AddSharedField(field.FieldId.ToString("B"), null/*name*/, null/*key?*/, field.Value, true); } foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.ToString(), version.VersionNumber.ToString(), version.VersionNumber.ToString() /*revisionid needed?*/); if (syncVersion != null) { foreach (var field in version.Fields) { syncVersion.AddField(field.FieldId.ToString("B"), null/*name*/,null /*key?*/, field.Value, true); } } } return syncItem; }
public static SyncItem AddSharedField(this SyncItem syncItem, SyncField syncField) { List <SyncField> syncFields = syncItem.SharedFields.ToList(); foreach (SyncField f in syncFields) { syncItem.AddSharedField(f.FieldID, f.FieldName, f.FieldKey, f.FieldValue, f.FieldValue != null); } return(syncItem); }
protected override SyncItem GetItem(FileInfo itemFile, Func <IItemData, bool> mustMatch) { var formatter = new YamlSerializationFormatter(null, null); //Checking path is a template, Helix structure means have to traverse more directories bringing in serialized roles and other yml files. if (!itemFile.FullName.Contains(@"\serialization\Templates")) { return(null); } SyncItem syncItem = null; using (StreamReader sr = new StreamReader(itemFile.FullName)) { try { IItemData item = formatter.ReadSerializedItem(sr.BaseStream, itemFile.Name); if (item == null || (mustMatch != null && !mustMatch(item))) { return(null); } syncItem = new SyncItem() { Name = item.Name, BranchId = new ID(item.BranchId).ToString(), DatabaseName = item.DatabaseName, ID = new ID(item.Id).ToString(), ItemPath = item.Path, TemplateID = new ID(item.TemplateId).ToString(), ParentID = new ID(item.ParentId).ToString() }; foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.Name, version.VersionNumber.ToString(), version.VersionNumber.ToString()); foreach (var field in version.Fields) { syncVersion.AddField(new ID(field.FieldId).ToString(), field.NameHint, field.NameHint, field.Value, true); } } foreach (var sharedField in item.SharedFields) { syncItem.AddSharedField(new ID(sharedField.FieldId).ToString(), sharedField.NameHint, sharedField.NameHint, sharedField.Value, true); } foreach (var unversionedField in item.UnversionedFields) { foreach (var version in syncItem.Versions.Where(v => v.Language == unversionedField.Language.Name)) { foreach (var itemFieldValue in unversionedField.Fields) { version.AddField(new ID(itemFieldValue.FieldId).ToString(), itemFieldValue.NameHint, itemFieldValue.NameHint, itemFieldValue.Value, true); } } } } catch (Exception ex) { throw new Exception(string.Format("Unable to deserialize '{0}'", itemFile.FullName), ex); } } return(syncItem); }
/// <summary> /// Save changes that were made to an item to the database. /// </summary> /// <param name="itemDefinition">Used to identify the particular item</param> /// <param name="changes">A holder object that keeps track of the changes</param> /// <param name="context"></param> /// <returns></returns> public override bool SaveItem(ItemDefinition itemDefinition, ItemChanges changes, CallContext context) { if (!ItemsById.ContainsKey(itemDefinition.ID)) { return(false); } SyncItem current = ItemsById[itemDefinition.ID]; if (changes.HasPropertiesChanged) { current.Name = StringUtil.GetString(changes.GetPropertyValue("name"), itemDefinition.Name); var templateId = MainUtil.GetObject(changes.GetPropertyValue("templateid"), itemDefinition.TemplateID) as ID; current.TemplateID = templateId != ID.Null ? GetIdAsString(templateId) : null; var branchId = MainUtil.GetObject(changes.GetPropertyValue("branchid"), itemDefinition.BranchId) as ID; current.BranchId = branchId != ID.Null ? GetIdAsString(branchId) : null; } if (changes.HasFieldsChanged) { foreach (FieldChange change in changes.FieldChanges) { string changeFieldId = GetIdAsString(change.FieldID); IEnumerable <SyncField> matchingSharedFields = current.SharedFields.Where(fv => changeFieldId.Equals(fv.FieldID)); IEnumerable <SyncVersion> matchingVersions = current.Versions .Where( vr => vr.Version.Equals(change.Version.Number.ToString()) && vr.Language.Equals(change.Language.Name)); var matchingNonSharedFields = matchingVersions .SelectMany(vr => vr.Fields.Select(fl => new { Ver = vr, Field = fl })) .Where(fv => changeFieldId.Equals(fv.Field.FieldID)); if (change.RemoveField) { if (matchingSharedFields.Any()) { current.SharedFields.Remove(matchingSharedFields.First()); } if (matchingNonSharedFields.Any()) { matchingNonSharedFields.First() .Ver.RemoveField(matchingNonSharedFields.First().Field.FieldName); } } else { bool changeMade = false; if (matchingSharedFields.Any()) { matchingSharedFields.First().FieldValue = change.Value; changeMade = true; } if (matchingNonSharedFields.Any()) { matchingNonSharedFields.First().Field.FieldValue = change.Value; changeMade = true; } if (!changeMade && change.Definition != null) { if (change.Definition.IsShared || change.Definition.IsUnversioned) { current.AddSharedField(changeFieldId, change.Definition.Name, change.Definition.Key, change.Value, true); } else if (matchingVersions.Any()) { matchingVersions.First() .AddField(changeFieldId, change.Definition.Name, change.Definition.Key, change.Value, true); } } } } } return(true); }
protected override List <SyncItem> GetAllItems(DirectoryInfo folder, string db, string[] includePaths) { var formatter = new YamlSerializationFormatter(null, null); List <SyncItem> result = new List <SyncItem>(); foreach (FileInfo itemFile in folder.GetFiles("*.yml", SearchOption.AllDirectories)) { using (StreamReader sr = new StreamReader(itemFile.FullName)) { try { var item = formatter.ReadSerializedItem(sr.BaseStream, itemFile.Name); if (item == null || !includePaths.Any(p => item.Path.StartsWith(p))) { continue; } var syncItem = new SyncItem() { Name = item.Name, BranchId = new ID(item.BranchId).ToString(), DatabaseName = item.DatabaseName, ID = new ID(item.Id).ToString(), ItemPath = item.Path, TemplateID = new ID(item.TemplateId).ToString(), ParentID = new ID(item.ParentId).ToString() }; foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.Name, version.VersionNumber.ToString(), version.VersionNumber.ToString()); foreach (var field in version.Fields) { syncVersion.AddField(new ID(field.FieldId).ToString(), field.NameHint, field.NameHint, field.Value, true); } } foreach (var sharedField in item.SharedFields) { syncItem.AddSharedField(new ID(sharedField.FieldId).ToString(), sharedField.NameHint, sharedField.NameHint, sharedField.Value, true); } foreach (var unversionedField in item.UnversionedFields) { foreach (var version in syncItem.Versions.Where(v => v.Language == unversionedField.Language.Name)) { foreach (var itemFieldValue in unversionedField.Fields) { version.AddField(new ID(itemFieldValue.FieldId).ToString(), itemFieldValue.NameHint, itemFieldValue.NameHint, itemFieldValue.Value, true); } } } result.Add(syncItem); } catch (Exception ex) { throw new Exception(string.Format("Unable to deserialize '{0}'", itemFile.FullName), ex); } } } return(result); }