/// <summary> /// Build a merged list of safes. /// </summary> /// <param name="leftItems">List of safes from the left repository, whose order has precedence.</param> /// <param name="rightItems">List of safes from the right side repository.</param> /// <returns>List of safes for the new merged repository.</returns> private static SafeListModel BuildMergedListOfSafes(SafeListModel leftItems, SafeListModel rightItems) { SafeListModel result = new SafeListModel(); var map = OuterJoin(leftItems, rightItems, item => item.Id); foreach (Tuple <SafeModel, SafeModel> pair in map) { if (pair.Item1 == null) { // Only available on the right side result.Add(pair.Item2.Clone()); } else if (pair.Item2 == null) { // Only available on the left side result.Add(pair.Item1.Clone()); } else { // Take the more recent SafeModel lastModifiedItem = ChooseLastModified( pair.Item1, pair.Item2, item => item.ModifiedAt, null); result.Add(lastModifiedItem.Clone()); } } return(result); }
private static void AddSafeToOtherRepositoryIfMissing(NoteRepositoryModel myRepository, NoteRepositoryModel otherRepository, Guid?safeId) { bool isMissingInOtherRepository = (safeId != null) && (otherRepository.Safes.FindById(safeId) == null); if (isMissingInOtherRepository) { SafeModel mySafe = myRepository.Safes.FindById(safeId); if (mySafe != null) { otherRepository.Safes.Add(mySafe.Clone()); } } }
public void CloneCopiesAllProperties() { SafeModel note1 = new SafeModel { Id = Guid.NewGuid(), CreatedAt = new DateTime(2000, 10, 22, 18, 55, 30), ModifiedAt = new DateTime(2001, 10, 22, 18, 55, 30), MaintainedAt = new DateTime(2002, 10, 22, 18, 55, 30), SerializeableKey = "sugus", Key = new byte[] { 88 }, }; SafeModel note2 = note1.Clone(); Assert.AreEqual(note1.Id, note2.Id); Assert.AreEqual(note1.CreatedAt, note2.CreatedAt); Assert.AreEqual(note1.ModifiedAt, note2.ModifiedAt); Assert.AreEqual(note1.MaintainedAt, note2.MaintainedAt); Assert.AreEqual(note1.SerializeableKey, note2.SerializeableKey); Assert.IsNull(note2.Key); // The unprotected key won't be cloned, the safe is closed. }