Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #7
0
        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);
        }