예제 #1
0
        public IReplicationFolderMetadata GetReplicationFolder(IFolderMetadata folder, IStorageMetadata storage)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }

            if (storage == null)
            {
                throw new ArgumentNullException("storage");
            }

            string condition = string.Format("[StorageID] = {0} AND [FolderID] = {1}",
                                             storage.ID,
                                             folder.ID);

            IReplicationFolderMetadata result = null;
            DBCollection <ReplicationFolderMetadata> replicationFolders = this.ReplicationFolderAdapter.GetReplicationFolders(condition);

            if (replicationFolders != null && replicationFolders.Count > 0)
            {
                result = replicationFolders[0];
            }

            return(result);
        }
예제 #2
0
        public void SaveReplicationFolder(IReplicationFolderMetadata replicationFolder)
        {
            if (replicationFolder == null)
            {
                throw new ArgumentNullException("replicationFolder");
            }

            ReplicationFolderMetadata typedReplicationFolder = (ReplicationFolderMetadata)replicationFolder;

            this.ReplicationFolderAdapter.UpdateReplicationFolder(typedReplicationFolder);
        }
예제 #3
0
        /// <summary>
        /// Возвращает метаданные папки репликации. Если ее не существует, то создает ее.
        /// </summary>
        /// <param name="folder">Папка.</param>
        /// <param name="sourceStorage">Узел источник для репликации.</param>
        /// <returns></returns>
        public IReplicationFolderMetadata EnsureReplicationFolder(IFolderMetadata folder, IStorageMetadata sourceStorage)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }

            if (sourceStorage == null)
            {
                throw new ArgumentNullException("sourceStorage");
            }

            IReplicationFolderMetadata replicationFolder = this.GetReplicationFolder(folder, sourceStorage);

            if (replicationFolder == null)
            {
                replicationFolder = new ReplicationFolderMetadata(folder, sourceStorage);
                this.SaveReplicationFolder(replicationFolder);
            }

            return(replicationFolder);
        }
예제 #4
0
        private ReplicationFolder EnsureReplicationFolder(StorageNode sourceNode, string folderUrl, bool isCurrentSettings, out bool justCreated)
        {
            if (sourceNode == null)
            {
                throw new ArgumentNullException("sourceNode");
            }

            if (string.IsNullOrEmpty(folderUrl))
            {
                throw new ArgumentNullException("folderUrl");
            }

            justCreated = false;

            ReplicationFolder replicationFolder = this.GetReplicationFolder(sourceNode.UniqueID, folderUrl);

            if (replicationFolder == null)
            {
                lock (_ensureReplicationFolderLocker)
                {
                    replicationFolder = this.GetReplicationFolder(sourceNode.UniqueID, folderUrl);
                    if (replicationFolder == null)
                    {
                        Folder folder = this.Engine.EnsureFolderInternal(folderUrl);
                        IReplicationFolderMetadata replicationFolderMetadata = this.Engine.MetadataAdapter.CreateReplicationFolder(folder.Metadata, sourceNode.Metadata);
                        replicationFolderMetadata.IsCurrentNodeSettings = isCurrentSettings;
                        this.Engine.MetadataAdapter.SaveReplicationFolder(replicationFolderMetadata);
                        replicationFolder = new ReplicationFolder(this.Engine, folder, sourceNode, replicationFolderMetadata);

                        this.AddReplicationFolder(replicationFolder);
                    }
                }
            }

            return(replicationFolder);
        }
예제 #5
0
        public ReplicationFolder(StorageEngine storage, Folder folder, IStorageNode node, IReplicationFolderMetadata metadata)
        {
            if (storage == null)
            {
                throw new ArgumentNullException("storage");
            }

            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            if (metadata == null)
            {
                throw new ArgumentNullException("metadata");
            }

            this.TypedStorage  = storage;
            this.TypedFolder   = folder;
            this.Metadata      = metadata;
            this.SourceStorage = node;
        }