public void TestRestoreCacheNoValidate()
        {
            MetadataCache cache = new MetadataCache();

            AcquisitionMonitor monitor = new AcquisitionMonitor() { Location = Path.Combine(TestFileData.LocalUnitTestDataLocation, "metadata", "duplicates"), ExpectedChannelCount = 2, MinTiffFileSize = 0.1 };

            UserOptions.Default.VerifyDeserializationPaths = false;

            DeserializationContext context = cache.Restore(monitor);

            Assert.AreEqual(9, context.CompleteCount, "Context Complete count");
            Assert.AreEqual(1, context.Incomplete.Count, "Context Incomplete count");
            Assert.AreEqual(19, context.PendingImages.Count, "Context PendingImages count");
            Assert.IsTrue(context.ImplicitChannelImageFileSize > 0.0, "Context ImplicitChannelImageFileSize");
            Assert.AreEqual(2, context.ImplicitChannelImageFrameCount, "Context ImplicitChannelImageFrameCount");

            Assert.AreEqual(2, monitor.Days.Count, "Day count");
            Assert.AreEqual(10, monitor.Tiles.Count, "Tile count");
            Assert.AreEqual(1, monitor.IncompleteTiles.Count, "Incomplete count");
            Assert.AreEqual(4, monitor.Lattice.Duplicates.Count, "Duplicate count");

            Assert.AreEqual(100, monitor.Lattice.Duplicates[0].Position.X);
            Assert.AreEqual(50, monitor.Lattice.Duplicates[0].Position.Y);
            Assert.AreEqual(20, monitor.Lattice.Duplicates[0].Position.Z);
            Assert.AreEqual(3, monitor.Lattice.Duplicates[0].TileCount);

            Assert.AreEqual(100, monitor.Lattice.Duplicates[1].Position.X);
            Assert.AreEqual(55, monitor.Lattice.Duplicates[1].Position.Y);
            Assert.AreEqual(20, monitor.Lattice.Duplicates[1].Position.Z);
            Assert.AreEqual(2, monitor.Lattice.Duplicates[1].TileCount);

            Assert.AreEqual(20, monitor.Lattice.Duplicates[2].Position.X);
            Assert.AreEqual(60, monitor.Lattice.Duplicates[2].Position.Y);
            Assert.AreEqual(40, monitor.Lattice.Duplicates[2].Position.Z);
            Assert.AreEqual(2, monitor.Lattice.Duplicates[2].TileCount);

            Assert.AreEqual(70, monitor.Lattice.Duplicates[3].Position.X);
            Assert.AreEqual(80, monitor.Lattice.Duplicates[3].Position.Y);
            Assert.AreEqual(90, monitor.Lattice.Duplicates[3].Position.Z);
            Assert.AreEqual(2, monitor.Lattice.Duplicates[3].TileCount);
        }
        public void TestRestoreCacheValidate()
        {
            MetadataCache cache = new MetadataCache();

            AcquisitionMonitor monitor = new AcquisitionMonitor() { Location = Path.Combine(TestFileData.LocalUnitTestDataLocation, "metadata", "duplicates"), ExpectedChannelCount = 2, MinTiffFileSize = 0.1 };

            UserOptions.Default.VerifyDeserializationPaths = true;

            DeserializationContext context = cache.Restore(monitor);

            Assert.AreEqual(0, context.CompleteCount, "Context Complete count");
            Assert.AreEqual(0, context.Incomplete.Count, "Context Incomplete count");
            Assert.AreEqual(0, context.PendingImages.Count, "Context PendingImages count");
            Assert.AreEqual(0.0, context.ImplicitChannelImageFileSize, "Context ImplicitChannelImageFileSize");
            Assert.AreEqual(Int32.MinValue, context.ImplicitChannelImageFrameCount, "Context ImplicitChannelImageFrameCount");

            Assert.AreEqual(0, monitor.Days.Count, "Day count");
            Assert.AreEqual(0, monitor.Tiles.Count, "Tile count");
            Assert.AreEqual(0, monitor.IncompleteTiles.Count, "Incomplete count");
            Assert.AreEqual(0, monitor.Lattice.Duplicates.Count, "Duplicate count");
        }
        private void RestoreMetadata()
        {
            DeserializationContext context;

            if (_metadataCache != null)
            {
                context = _metadataCache.Restore(Model);
            }
            else
            {
                MetadataCache cache = new MetadataCache();
                context = cache.Restore(Model);
            }

            if (context != null)
            {
                TileEvaluateWorker.ImplicitChannelFileSize = context.ImplicitChannelImageFileSize;
                TileEvaluateWorker.ImplicitChannelFrameCount = context.ImplicitChannelImageFrameCount;

                _deserializeCompleteCount = context.CompleteCount;

                foreach (Tile tile in context.Incomplete)
                {
                    _incompleteMonitoringQueue.Enqueue(tile);
                }

                Trace.TraceInformation("\t{0} restored tiles added to the incomplete queue.", context.Incomplete.Count);

                if (UserOptions.Default.QueryTiffContents && !UserOptions.Default.OnlyQueryEmergingTiffContents)
                {
                    foreach (var item in context.PendingImages)
                    {
                        TiffEvaluateWorker.ExistingManager.QueueTiff(item);
                    }

                    if (context.PendingImages.Count > 0)
                    {
                        Trace.TraceInformation("\t{0} restored image files added to the TIFF content processing queue.", context.PendingImages.Count);
                    }
                }
            }
        }