예제 #1
0
        /// <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());
                }
            }
        }
예제 #3
0
        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.
        }