Exemplo n.º 1
0
        public static void Replicate(string sourcefileStorageName, string targetfileStorageName, ReplicateBehaviour replicateBehaviour, AddFileBehaviour addFileBehaviour, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase1, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase2)
        {
            var sourceFileStorageHandler = FileStorageHandler.Open(sourcefileStorageName);

            switch (replicateBehaviour)
            {
            case ReplicateBehaviour.AddToExistingStorage:
                //
                // nothing to check here
                //

                break;

            case ReplicateBehaviour.ReplicateToNewStorage:

                //
                // ensure target does not yet exist
                //
                Create(targetfileStorageName, CreateFileStorageBehaviour.ThrowExceptionWhenExists);

                break;

            default:
                throw new NotSupportedException(string.Format("Unsupported replicate behaviour {0}", replicateBehaviour));
            }

            var targetFileStorageHandler = FileStorageHandler.Open(targetfileStorageName);

            //
            // open source streams
            //
            using (sourceFileStorageHandler.indexStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.indexFilename, StreamStateBehaviour.OpenNewStreamForReading))
            {
                using (sourceFileStorageHandler.dataStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.dataFilename, StreamStateBehaviour.OpenNewStreamForReading))
                {
                    //
                    // open target streams
                    //
                    using (targetFileStorageHandler.indexStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.indexFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting))
                    {
                        using (targetFileStorageHandler.dataStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.dataFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting))
                        {
                            var allIdentifiers = sourceFileStorageHandler.GetAllDataIdentifiersBasedUponFileStorageIndexFile(StreamStateBehaviour.UseExistingStream, exposeProgressDelegatePhase1);

                            //
                            // start replicate process
                            //
                            foreach (var dataIdentifier in allIdentifiers)
                            {
                                sourceFileStorageHandler.ExportToOtherFileStorage(dataIdentifier, targetFileStorageHandler, addFileBehaviour, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream);
                                if (exposeProgressDelegatePhase2 != null)
                                {
                                    exposeProgressDelegatePhase2.Invoke(dataIdentifier);
                                }
                            }
                            if (exposeProgressDelegatePhase2 != null)
                            {
                                exposeProgressDelegatePhase2.Invoke(true);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void Replicate(string sourcefileStorageName, string targetfileStorageName, ReplicateBehaviour replicateBehaviour, AddFileBehaviour addFileBehaviour, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase1, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase2)
        {
            FileStorageHandler sourceFileStorageHandler = FileStorageHandler.Open(sourcefileStorageName);

            switch (replicateBehaviour)
            {
                case ReplicateBehaviour.AddToExistingStorage:
                    //
                    // nothing to check here
                    //

                    break;
                case ReplicateBehaviour.ReplicateToNewStorage:

                    //
                    // ensure target does not yet exist
                    //
                    Create(targetfileStorageName, CreateFileStorageBehaviour.ThrowExceptionWhenExists);

                    break;
                default:
                    throw new NotSupportedException(string.Format("Unsupported replicate behaviour {0}", replicateBehaviour));
            }

            FileStorageHandler targetFileStorageHandler = FileStorageHandler.Open(targetfileStorageName);

            //
            // open source streams
            //
            using (sourceFileStorageHandler.IndexStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.IndexFilename, StreamStateBehaviour.OpenNewStreamForReading))
            {
                using (sourceFileStorageHandler.DataStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.DataFilename, StreamStateBehaviour.OpenNewStreamForReading))
                {
                    //
                    // open target streams
                    //
                    using (targetFileStorageHandler.IndexStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.IndexFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting))
                    {
                        using (targetFileStorageHandler.DataStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.DataFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting))
                        {
                            List<Guid> allIdentifiers = sourceFileStorageHandler.GetAllDataIdentifiersBasedUponFileStorageIndexFile(StreamStateBehaviour.UseExistingStream, exposeProgressDelegatePhase1);

                            //
                            // start replicate process
                            //
                            foreach (Guid dataIdentifier in allIdentifiers)
                            {
                                sourceFileStorageHandler.ExportToOtherFileStorage(dataIdentifier, targetFileStorageHandler, addFileBehaviour, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream);
                                if (exposeProgressDelegatePhase2 != null)
                                {
                                    exposeProgressDelegatePhase2.Invoke(dataIdentifier);
                                }
                            }
                            if (exposeProgressDelegatePhase2 != null)
                            {
                                exposeProgressDelegatePhase2.Invoke(true);
                            }
                        }
                    }
                }
            }
        }