Abstract folder event.
Наследование: ICountableEvent
        private bool DelayEventIfRetryCountPositive(AbstractFolderEvent fileOrFolderEvent) {
            if (fileOrFolderEvent.RetryCount > 0) {
                this.retryEvents.Add(fileOrFolderEvent);
                return true;
            }

            return false;
        }
 private bool CouldLocalObjectBeAccumulated(AbstractFolderEvent e) {
     if (e == null) {
         return false;
     } else if(e.Remote == MetaDataChangeType.DELETED) {
         return false;
     } else if (e is FileEvent) {
         return (e as FileEvent).LocalFile == null;
     } else if (e is FolderEvent) {
         return (e as FolderEvent).LocalFolder == null;
     } else {
         return false;
     }
 }
Пример #3
0
        public void SetUp()
        {
            this.localPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            this.localFolder = new DirectoryInfo(this.localPath);
            this.localFolder.Create();
            this.localSubFolder = new DirectoryInfo(Path.Combine(this.localFolder.FullName, Path.GetRandomFileName()));
            this.localSubFolder.Create();
            this.localFile = new FileInfo(Path.Combine(this.localFolder.FullName, Path.GetRandomFileName()));
            using (this.localFile.Create())
            {
            }

            this.queue = new Mock<ISyncEventQueue>();
            this.returnedFileEvent = null;
            this.returnedFolderEvent = null;
        }
Пример #4
0
 private void Solve(ISolver s, AbstractFolderEvent e) {
     using (var activity = new ActivityListenerResource(this.activityListener)) {
         if (e is FolderEvent) {
             s.Solve((e as FolderEvent).LocalFolder, (e as FolderEvent).RemoteFolder, ContentChangeType.NONE, ContentChangeType.NONE);
         } else if (e is FileEvent) {
             s.Solve((e as FileEvent).LocalFile, (e as FileEvent).RemoteFile, (e as FileEvent).LocalContent, (e as FileEvent).RemoteContent);
         }
     }
 }
Пример #5
0
        private void DoHandle(AbstractFolderEvent actualEvent) {
            SituationType localSituation = this.LocalSituation.Analyse(this.storage, actualEvent);
            SituationType remoteSituation = this.RemoteSituation.Analyse(this.storage, actualEvent);
            ISolver solver = this.Solver[(int)localSituation, (int)remoteSituation];

            if (solver == null) {
                throw new NotImplementedException(string.Format("Solver for LocalSituation: {0}, and RemoteSituation {1} not implemented", localSituation, remoteSituation));
            }

            Stopwatch watch = Stopwatch.StartNew();
            this.Solve(solver, actualEvent);
            watch.Stop();
            Logger.Debug(string.Format("Solver {0} took {1} ms", solver.GetType(), watch.ElapsedMilliseconds));
        }
Пример #6
0
        public void HandleFSFileAddedEvents()
        {
            this.queue.Setup(q => q.AddEvent(It.IsAny<AbstractFolderEvent>()))
                .Callback((ISyncEvent f) => this.returnedFileEvent = f as AbstractFolderEvent);
            var watcher = new WatcherConsumer(this.queue.Object);

            var fileCreatedFSEvent = new FSEvent(WatcherChangeTypes.Created, this.localFile.FullName, false);
            Assert.True(watcher.Handle(fileCreatedFSEvent));
            Assert.AreEqual(MetaDataChangeType.CREATED, this.returnedFileEvent.Local);
            Assert.AreEqual(ContentChangeType.CREATED, (this.returnedFileEvent as FileEvent).LocalContent);
            Assert.AreEqual(this.localFile.FullName, (this.returnedFileEvent as FileEvent).LocalFile.FullName);
            Assert.IsNull((this.returnedFileEvent as FileEvent).RemoteFile);
            Assert.AreEqual(MetaDataChangeType.NONE, (this.returnedFileEvent as FileEvent).Remote);
            Assert.AreEqual(ContentChangeType.NONE, (this.returnedFileEvent as FileEvent).RemoteContent);
        }
Пример #7
0
        public void HandleFSFolderRenamedEvents()
        {
            string oldpath = Path.Combine(this.localFolder.FullName, Path.GetRandomFileName());
            this.queue.Setup(q => q.AddEvent(It.IsAny<AbstractFolderEvent>()))
                .Callback((ISyncEvent f) => this.returnedFolderEvent = f as AbstractFolderEvent);
            var watcher = new WatcherConsumer(this.queue.Object);

            var folderRenamedFSEvent = new FSMovedEvent(oldpath, this.localFolder.FullName, true);
            Assert.True(watcher.Handle(folderRenamedFSEvent));
            Assert.AreEqual(MetaDataChangeType.MOVED, this.returnedFolderEvent.Local);
            Assert.AreEqual(this.localFolder.FullName, (this.returnedFolderEvent as FolderEvent).LocalFolder.FullName);
            Assert.AreEqual(oldpath, (this.returnedFolderEvent as FolderMovedEvent).OldLocalFolder.FullName);
            Assert.IsNull((this.returnedFolderEvent as FolderMovedEvent).RemoteFolder);
            Assert.IsNull((this.returnedFolderEvent as FolderMovedEvent).OldRemoteFolderPath);
            Assert.AreEqual(MetaDataChangeType.NONE, (this.returnedFolderEvent as FolderEvent).Remote);
        }
Пример #8
0
        public void HandleFSFolderRemovedEvents()
        {
            this.queue.Setup(q => q.AddEvent(It.IsAny<AbstractFolderEvent>()))
                .Callback((ISyncEvent f) => this.returnedFolderEvent = f as AbstractFolderEvent);
            var watcher = new WatcherConsumer(this.queue.Object);

            var folderRemovedFSEvent = new FSEvent(WatcherChangeTypes.Deleted, this.localFolder.FullName, true);
            Assert.True(watcher.Handle(folderRemovedFSEvent));
            Assert.AreEqual(MetaDataChangeType.DELETED, this.returnedFolderEvent.Local);
            Assert.AreEqual(this.localFolder.FullName, (this.returnedFolderEvent as FolderEvent).LocalFolder.FullName);
            Assert.IsNull((this.returnedFolderEvent as FolderEvent).RemoteFolder);
            Assert.AreEqual(MetaDataChangeType.NONE, (this.returnedFolderEvent as FolderEvent).Remote);
        }
        private IMappedObject GetStoredObject(AbstractFolderEvent e) {
            if (e is FolderEvent) {
                return this.storage.GetObjectByRemoteId((e as FolderEvent).RemoteFolder.Id);
            } else if (e is FileEvent) {
                return this.storage.GetObjectByRemoteId((e as FileEvent).RemoteFile.Id);
            }

            return null;
        }
        private void AccumulateEvent(AbstractFolderEvent abstractFolderEvent, IMappedObject storedObject) {
            Logger.Debug("Accumulating: " + this.storage.GetLocalPath(storedObject));
            if (abstractFolderEvent is FolderEvent) {
                (abstractFolderEvent as FolderEvent).LocalFolder = this.fsFactory.CreateDirectoryInfo(this.storage.GetLocalPath(storedObject));
            }

            if (abstractFolderEvent is FileEvent) {
                (abstractFolderEvent as FileEvent).LocalFile = this.fsFactory.CreateFileInfo(this.storage.GetLocalPath(storedObject));
            }
        }
 private string GetRemoteObjectName(AbstractFolderEvent e) {
     if (e is FolderEvent) {
         return (e as FolderEvent).RemoteFolder.Name;
     } else if(e is FileEvent) {
         return (e as FileEvent).RemoteFile.Name;
     } else {
         throw new ArgumentException();
     }
 }
 private string GetParentId(AbstractFolderEvent e) {
     if (e is FolderEvent) {
         return (e as FolderEvent).RemoteFolder.ParentId;
     } else if (e is FileEvent) {
         return (e as FileEvent).RemoteFile.Parents[0].Id;
     } else {
         throw new ArgumentException();
     }
 }