Exemplo n.º 1
0
        public CrawlEventCollection GenerateEvents(DescendantsTreeCollection trees)
        {
            IObjectTree <IMappedObject>       storedTree = trees.StoredTree;
            IObjectTree <IFileSystemInfo>     localTree  = trees.LocalTree;
            IObjectTree <IFileableCmisObject> remoteTree = trees.RemoteTree;
            CrawlEventCollection createdEvents           = new CrawlEventCollection();
            List <IMappedObject> storedObjectsForRemote  = storedTree.ToList();
            List <IMappedObject> storedObjectsForLocal   = new List <IMappedObject>(storedObjectsForRemote);

            Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> > eventMap = new Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> >();

            createdEvents.creationEvents = this.remoteEventGenerator.CreateEvents(storedObjectsForRemote, remoteTree, eventMap);
            createdEvents.creationEvents.AddRange(this.localEventGenerator.CreateEvents(storedObjectsForLocal, localTree, eventMap));

            createdEvents.mergableEvents = eventMap;

            IMappedObject rootNode = storedTree.Item;

            storedObjectsForLocal.Remove(rootNode);
            storedObjectsForRemote.Remove(rootNode);

            createdEvents.removedLocalObjects  = this.TransformToFileSystemInfoDict(storedObjectsForLocal);
            createdEvents.removedRemoteObjects = this.TransformToFileSystemInfoDict(storedObjectsForRemote);

            return(createdEvents);
        }
Exemplo n.º 2
0
        public CrawlEventCollection GenerateEvents(DescendantsTreeCollection trees)
        {
            IObjectTree <IMappedObject>       storedTree    = trees.StoredTree;
            IObjectTree <IFileSystemInfo>     localTree     = trees.LocalTree;
            IObjectTree <IFileableCmisObject> remoteTree    = trees.RemoteTree;
            CrawlEventCollection createdEvents              = new CrawlEventCollection();
            List <IMappedObject> storedObjectsForRemote     = storedTree.ToList();
            List <IMappedObject> storedObjectsForLocal      = new List <IMappedObject>(storedObjectsForRemote);
            ISet <IMappedObject> handledLocalStoredObjects  = new HashSet <IMappedObject>();
            ISet <IMappedObject> handledRemoteStoredObjects = new HashSet <IMappedObject>();
            Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> > eventMap = new Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> >();

            createdEvents.creationEvents = this.remoteEventGenerator.CreateEvents(storedObjectsForRemote, remoteTree, eventMap, handledRemoteStoredObjects);
            createdEvents.creationEvents.AddRange(this.localEventGenerator.CreateEvents(storedObjectsForLocal, localTree, eventMap, handledLocalStoredObjects));

            createdEvents.mergableEvents = eventMap;

            handledLocalStoredObjects.Add(storedTree.Item);
            handledRemoteStoredObjects.Add(storedTree.Item);

            foreach (var handledObject in handledLocalStoredObjects)
            {
                storedObjectsForLocal.Remove(handledObject);
            }

            foreach (var handledObject in handledRemoteStoredObjects)
            {
                storedObjectsForRemote.Remove(handledObject);
            }

            this.AddDeletedObjectsToMergableEvents(storedObjectsForLocal, eventMap, true);
            this.AddDeletedObjectsToMergableEvents(storedObjectsForRemote, eventMap, false);

            return(createdEvents);
        }
Exemplo n.º 3
0
        public CrawlEventCollection GenerateEvents(DescendantsTreeCollection trees) {
            IObjectTree<IMappedObject> storedTree = trees.StoredTree;
            IObjectTree<IFileSystemInfo> localTree = trees.LocalTree;
            IObjectTree<IFileableCmisObject> remoteTree = trees.RemoteTree;
            CrawlEventCollection createdEvents = new CrawlEventCollection();
            List<IMappedObject> storedObjectsForRemote = storedTree.ToList();
            List<IMappedObject> storedObjectsForLocal = new List<IMappedObject>(storedObjectsForRemote);
            ISet<IMappedObject> handledLocalStoredObjects = new HashSet<IMappedObject>();
            ISet<IMappedObject> handledRemoteStoredObjects = new HashSet<IMappedObject>();
            Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>> eventMap = new Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>>();
            createdEvents.creationEvents = this.remoteEventGenerator.CreateEvents(storedObjectsForRemote, remoteTree, eventMap, handledRemoteStoredObjects);
            createdEvents.creationEvents.AddRange(this.localEventGenerator.CreateEvents(storedObjectsForLocal, localTree, eventMap, handledLocalStoredObjects));

            createdEvents.mergableEvents = eventMap;

            handledLocalStoredObjects.Add(storedTree.Item);
            handledRemoteStoredObjects.Add(storedTree.Item);

            foreach (var handledObject in handledLocalStoredObjects) {
                storedObjectsForLocal.Remove(handledObject);
            }

            foreach (var handledObject in handledRemoteStoredObjects) {
                storedObjectsForRemote.Remove(handledObject);
            }

            this.AddDeletedObjectsToMergableEvents(storedObjectsForLocal, eventMap, true);
            this.AddDeletedObjectsToMergableEvents(storedObjectsForRemote, eventMap, false);

            return createdEvents;
        }
Exemplo n.º 4
0
        private void CrawlDescendants()
        {
            DescendantsTreeCollection trees = this.treebuilder.BuildTrees();

            CrawlEventCollection events = this.eventGenerator.GenerateEvents(trees);

            this.notifier.MergeEventsAndAddToQueue(events);
        }
 public void SetUp()
 {
     this.queue = new Mock<ISyncEventQueue>();
     this.underTest = new CrawlEventNotifier(this.queue.Object);
     this.collection = new CrawlEventCollection() {
         creationEvents = new List<AbstractFolderEvent>(),
         mergableEvents = new Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>>()
     };
 }
        public void NoNotificationIsCreatedIfAllEventsAreEmpty() {
            CrawlEventCollection emptyCollection = new CrawlEventCollection() {
                creationEvents = new List<AbstractFolderEvent>(),
                mergableEvents = new Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>>()
            };

            this.underTest.MergeEventsAndAddToQueue(emptyCollection);

            this.queue.Verify(q => q.AddEvent(It.IsAny<ISyncEvent>()), Times.Never());
        }
 public void LinearRenames() {
     string objectId = Guid.NewGuid().ToString();
     var collection = new CrawlEventCollection();
     collection.mergableEvents = new Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>>();
     var doc1 = Mock.Of<IFileInfo>(d => d.Name == "C" && d.Uuid == Guid.NewGuid());
     var doc2 = Mock.Of<IDocument>(d => d.Name == "B" && d.Id == objectId);
     FileEvent event1 = new FileEvent(doc1, null);
     FileEvent event2 = new FileEvent(null, doc2);
     collection.mergableEvents.Add(objectId, new Tuple<AbstractFolderEvent, AbstractFolderEvent>(event1, event2));
     Assert.That(underTest.Detect(collection), Is.Empty);
 }
Exemplo n.º 8
0
        public void MergeEventsAndAddToQueue(CrawlEventCollection events) {
            if (events.creationEvents == null) {
                throw new ArgumentNullException("events", "Given creationEvents list is null");
            }

            if (events.mergableEvents == null) {
                throw new ArgumentNullException("events", "Given mergable events are null");
            }

            this.MergeAndSendEvents(events.mergableEvents);
            events.creationEvents.ForEach(e => this.queue.AddEvent(e));
        }
Exemplo n.º 9
0
        public void MergeEventsAndAddToQueue(CrawlEventCollection events)
        {
            this.MergeAndSendEvents(events.mergableEvents);


            this.FindReportAndRemoveMutualDeletedObjects(events.removedRemoteObjects, events.removedLocalObjects);

            // Send out Events to queue
            this.InformAboutRemoteObjectsDeleted(events.removedRemoteObjects.Values);
            this.InformAboutLocalObjectsDeleted(events.removedLocalObjects.Values);
            events.creationEvents.ForEach(e => this.Queue.AddEvent(e));
        }
Exemplo n.º 10
0
        public void MergeEventsAndAddToQueue(CrawlEventCollection events)
        {
            if (events.creationEvents == null)
            {
                throw new ArgumentNullException("events", "Given creationEvents list is null");
            }

            if (events.mergableEvents == null)
            {
                throw new ArgumentNullException("events", "Given mergable events are null");
            }

            this.MergeAndSendEvents(events.mergableEvents);
            events.creationEvents.ForEach(e => this.queue.AddEvent(e));
        }
Exemplo n.º 11
0
        private void CrawlDescendants()
        {
            try {
                DescendantsTreeCollection trees = this.treebuilder.BuildTrees();
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug(string.Format("LocalTree:  {0} Elements", trees.LocalTree.ToList().Count));
                    Logger.Debug(string.Format("RemoteTree: {0} Elements", trees.RemoteTree.ToList().Count));
                    Logger.Debug(string.Format("StoredTree: {0} Elements", trees.StoredTree.ToList().Count));
                }

                CrawlEventCollection events = this.eventGenerator.GenerateEvents(trees);

                this.notifier.MergeEventsAndAddToQueue(events);
            } catch (System.IO.PathTooLongException e) {
                string msg = "Crawl Sync aborted because a local path is too long. Please take a look into the log to figure out the reason.";
                throw new InteractionNeededException(msg, e)
                      {
                          Title = "Local path is too long", Description = msg
                      };
            }
        }
Exemplo n.º 12
0
        public List<List<AbstractFolderEvent>> Detect(CrawlEventCollection collection) {
            var result = new List<List<AbstractFolderEvent>>();
            if (collection.mergableEvents == null) {
                return result;
            }

            foreach (var ev in collection.mergableEvents) {
                var item = ev.Value.Item1 ?? ev.Value.Item2;
                if (item.Local == MetaDataChangeType.MOVED ||
                    item.Remote == MetaDataChangeType.MOVED ||
                    item.Local == MetaDataChangeType.CHANGED ||
                    item.Remote == MetaDataChangeType.CHANGED) {
                    string process = ev.Key;
                    string resource = item.RemotePath;
                    if (item is FileEvent) {
                        var fileEvent = item as FileEvent;
                    } else if (item is FolderEvent) {
                        var folderEvent = item as FolderEvent;
                    }
                }
            }

            return result;
        }
        public void NoNotificationIsCreatedAndCallFailsIfEmptyStructIsPassed() {
            CrawlEventCollection emptyCollection = new CrawlEventCollection();
            Assert.Throws<ArgumentNullException>(() => this.underTest.MergeEventsAndAddToQueue(emptyCollection));

            this.queue.Verify(q => q.AddEvent(It.IsAny<ISyncEvent>()), Times.Never());
        }