public void EndEdit() { template.EndEdit(authentication); }
public static bool Edit(ITypeTemplate template, Authentication authentication) { var memberCount = template.Dispatcher.Invoke(() => template.Count); var memberList = new List <JsonTypeMemberInfos.ItemInfo>(memberCount); var idToMember = new Dictionary <Guid, ITypeMember>(memberCount); template.Dispatcher.Invoke(() => { foreach (var item in template) { var member = new JsonTypeMemberInfos.ItemInfo() { ID = Guid.NewGuid(), Name = item.Name, Value = item.Value, Comment = item.Comment, }; idToMember.Add(member.ID, item); memberList.Add(member); } }); var members = new JsonTypeMemberInfos() { Items = memberList.ToArray() }; using (var editor = new JsonEditorHost(members)) { if (editor.Execute() == false) { return(false); } members = editor.Read <JsonTypeMemberInfos>(); } var terminal = new Terminal(); var key = terminal.ReadKey("do you want to save changes?(Y/N)", ConsoleKey.Y, ConsoleKey.N); if (key != ConsoleKey.Y) { return(false); } template.Dispatcher.Invoke(() => { foreach (var item in idToMember.Keys.ToArray()) { if (members.Items.Any(i => i.ID == item) == false) { var member = idToMember[item]; member.Delete(authentication); idToMember.Remove(item); } } for (var i = 0; i < members.Items.Length; i++) { var item = members.Items[i]; if (item.ID == Guid.Empty) { var member = template.AddNew(authentication); member.SetName(authentication, item.Name); member.SetValue(authentication, item.Value); member.SetComment(authentication, item.Comment); template.EndNew(authentication, member); item.ID = Guid.NewGuid(); idToMember.Add(item.ID, member); members.Items[i] = item; } else if (idToMember.ContainsKey(item.ID) == true) { var member = idToMember[item.ID]; if (member.Name != item.Name) { member.SetName(authentication, item.Name); } if (member.Value != item.Value) { member.SetValue(authentication, item.Value); } if (member.Comment != item.Comment) { member.SetComment(authentication, item.Comment); } } else { throw new InvalidOperationException($"{item.ID} is not existed member."); } } for (var i = 0; i < members.Items.Length; i++) { var item = members.Items[i]; var member = idToMember[item.ID]; member.SetIndex(authentication, i); } template.EndEdit(authentication); }); return(true); }