/// <inheritdoc />
        public override CdmObject Copy(ResolveOptions resOpt = null)
        {
            if (resOpt == null)
            {
                resOpt = new ResolveOptions(this);
            }

            var copy = new CdmLocalEntityDeclarationDefinition(this.Ctx, this.EntityName)
            {
                EntityPath = this.EntityPath,
                LastFileStatusCheckTime   = this.LastFileStatusCheckTime,
                LastFileModifiedTime      = this.LastFileModifiedTime,
                LastChildFileModifiedTime = this.LastChildFileModifiedTime
            };

            foreach (var partition in this.DataPartitions)
            {
                copy.DataPartitions.Add(partition);
            }
            foreach (var pattern in this.DataPartitionPatterns)
            {
                copy.DataPartitionPatterns.Add(pattern);
            }
            this.CopyDef(resOpt, copy);

            return(copy);
        }
Exemplo n.º 2
0
        /// <inheritdoc />
        public override CdmObject Copy(ResolveOptions resOpt = null, CdmObject host = null)
        {
            if (resOpt == null)
            {
                resOpt = new ResolveOptions(this, this.Ctx.Corpus.DefaultResolutionDirectives);
            }

            CdmLocalEntityDeclarationDefinition copy;

            if (host == null)
            {
                copy = new CdmLocalEntityDeclarationDefinition(this.Ctx, this.EntityName);
            }
            else
            {
                copy            = host as CdmLocalEntityDeclarationDefinition;
                copy.EntityName = this.EntityName;
                copy.DataPartitionPatterns.Clear();
                copy.DataPartitions.Clear();
                copy.IncrementalPartitions.Clear();
                copy.IncrementalPartitionPatterns.Clear();
            }

            copy.EntityPath = this.EntityPath;
            copy.LastFileStatusCheckTime   = this.LastFileStatusCheckTime;
            copy.LastFileModifiedTime      = this.LastFileModifiedTime;
            copy.LastChildFileModifiedTime = this.LastChildFileModifiedTime;

            foreach (var partition in this.DataPartitions)
            {
                copy.DataPartitions.Add(partition.Copy(resOpt) as CdmDataPartitionDefinition);
            }
            foreach (var pattern in this.DataPartitionPatterns)
            {
                copy.DataPartitionPatterns.Add(pattern.Copy(resOpt) as CdmDataPartitionPatternDefinition);
            }
            foreach (var incrementalPartitions in this.IncrementalPartitions)
            {
                copy.IncrementalPartitions.Add(incrementalPartitions.Copy(resOpt) as CdmDataPartitionDefinition);
            }
            foreach (var incrementalPartitionPatterns in this.IncrementalPartitionPatterns)
            {
                copy.IncrementalPartitionPatterns.Add(incrementalPartitionPatterns.Copy(resOpt) as CdmDataPartitionPatternDefinition);
            }
            this.CopyDef(resOpt, copy);

            return(copy);
        }
Exemplo n.º 3
0
        override internal async Task <bool> SaveLinkedDocuments(CopyOptions options = null)
        {
            HashSet <string> links = new HashSet <string>();

            if (options == null)
            {
                options = new CopyOptions();
            }

            if (this.Imports != null)
            {
                this.Imports.ToList().ForEach(x => links.Add(x.CorpusPath));
            }
            if (this.Entities != null)
            {
                // only the local entity declarations please
                foreach (CdmEntityDeclarationDefinition def in this.Entities)
                {
                    if (def.ObjectType == CdmObjectType.LocalEntityDeclarationDef)
                    {
                        CdmLocalEntityDeclarationDefinition defImp = def as CdmLocalEntityDeclarationDefinition;
                        links.Add(defImp.EntityPath);

                        // also, partitions can have their own schemas
                        if (defImp.DataPartitions != null)
                        {
                            foreach (CdmDataPartitionDefinition part in defImp.DataPartitions)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    links.Add(part.SpecializedSchema);
                                }
                            }
                        }
                        // so can patterns
                        if (defImp.DataPartitionPatterns != null)
                        {
                            foreach (CdmDataPartitionPatternDefinition part in defImp.DataPartitionPatterns)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    links.Add(part.SpecializedSchema);
                                }
                            }
                        }
                    }
                }
            }
            if (this.SubManifests != null)
            {
                this.SubManifests.ToList().ForEach(x => links.Add(x.Definition));
            }

            // Get all Cdm documents sequentially
            List <CdmDocumentDefinition> docs = new List <CdmDocumentDefinition>();

            foreach (var link in links)
            {
                Tuple <CdmDocumentDefinition, bool> doc = await FetchDocumentDefinition(link);

                if (doc.Item2 == false)
                {
                    Logger.Error(this.Ctx as ResolveContext, Tag, nameof(SaveLinkedDocuments), this.AtCorpusPath, CdmLogCode.ErrPersistObjectNotFound, link);
                    return(false);
                }
                else
                {
                    docs.Add(doc.Item1);
                }
            }

            // Save all dirty Cdm documents in parallel
            List <Task <bool> > tasks = new List <Task <bool> >();

            docs.ForEach(x => tasks.Add(SaveDocumentIfDirty(x, options)));
            var results = await Task.WhenAll(tasks);

            for (int i = 0; i < results.Length; ++i)
            {
                if (results[i] == false)
                {
                    Logger.Error(this.Ctx as ResolveContext, Tag, nameof(SaveLinkedDocuments), this.AtCorpusPath, CdmLogCode.ErrDocEntityDocSavingFailure, docs[i].Name);
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 4
0
        override internal async Task <bool> SaveLinkedDocuments(CopyOptions options = null)
        {
            if (options == null)
            {
                options = new CopyOptions();
            }

            if (this.Imports != null)
            {
                foreach (CdmImport imp in this.Imports)
                {
                    if (await SaveDirtyLink(imp.CorpusPath, options) == false)
                    {
                        Logger.Error(nameof(CdmManifestDefinition), this.Ctx as ResolveContext, $"failed saving imported document {imp.AtCorpusPath}", "SaveLinkedDocuments");
                        return(false);
                    }
                }
            }
            if (this.Entities != null)
            {
                // only the local entity declarations please
                foreach (CdmEntityDeclarationDefinition def in this.Entities)
                {
                    if (def.ObjectType == CdmObjectType.LocalEntityDeclarationDef)
                    {
                        CdmLocalEntityDeclarationDefinition defImp = def as CdmLocalEntityDeclarationDefinition;
                        if (await SaveDirtyLink(defImp.EntityPath, options) == false)
                        {
                            Logger.Error(nameof(CdmManifestDefinition), this.Ctx as ResolveContext, $"failed saving local entity schema document {defImp.EntityPath}", "SaveLinkedDocuments");
                            return(false);
                        }

                        // also, partitions can have their own schemas
                        if (defImp.DataPartitions != null)
                        {
                            foreach (CdmDataPartitionDefinition part in defImp.DataPartitions)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    if (await SaveDirtyLink(defImp.EntityPath, options) == false)
                                    {
                                        Logger.Error(nameof(CdmManifestDefinition), this.Ctx as ResolveContext, $"failed saving local entity schema document {defImp.EntityPath}", "SaveLinkedDocuments");
                                        return(false);
                                    }
                                }
                            }
                        }
                        // so can patterns
                        if (defImp.DataPartitionPatterns != null)
                        {
                            foreach (CdmDataPartitionPatternDefinition part in defImp.DataPartitionPatterns)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    if (await SaveDirtyLink(part.SpecializedSchema, options) == false)
                                    {
                                        Logger.Error(nameof(CdmManifestDefinition), this.Ctx as ResolveContext, $"failed saving partition schema document {part.SpecializedSchema}", "SaveLinkedDocuments");
                                        return(false);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this.SubManifests != null)
            {
                foreach (CdmManifestDeclarationDefinition sub in this.SubManifests)
                {
                    if (await SaveDirtyLink(sub.Definition, options) == false)
                    {
                        Logger.Error(nameof(CdmManifestDefinition), this.Ctx as ResolveContext, $"failed saving sub-manifest document {sub.DeclaredPath}", "SaveLinkedDocuments");
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemplo n.º 5
0
        override internal async Task <bool> SaveLinkedDocuments(CopyOptions options = null)
        {
            if (options == null)
            {
                options = new CopyOptions();
            }

            if (this.Imports != null)
            {
                foreach (CdmImport imp in this.Imports)
                {
                    if (await SaveDirtyLink(imp.CorpusPath, options) == false)
                    {
                        Logger.Error(this.Ctx as ResolveContext, Tag, nameof(SaveLinkedDocuments), this.AtCorpusPath, CdmLogCode.ErrDocImportSavingFailure, imp.AtCorpusPath);
                        return(false);
                    }
                }
            }
            if (this.Entities != null)
            {
                // only the local entity declarations please
                foreach (CdmEntityDeclarationDefinition def in this.Entities)
                {
                    if (def.ObjectType == CdmObjectType.LocalEntityDeclarationDef)
                    {
                        CdmLocalEntityDeclarationDefinition defImp = def as CdmLocalEntityDeclarationDefinition;
                        if (await SaveDirtyLink(defImp.EntityPath, options) == false)
                        {
                            Logger.Error(this.Ctx as ResolveContext, Tag, nameof(SaveLinkedDocuments), this.AtCorpusPath, CdmLogCode.ErrDocEntityDocSavingFailure, defImp.EntityPath);
                            return(false);
                        }

                        // also, partitions can have their own schemas
                        if (defImp.DataPartitions != null)
                        {
                            foreach (CdmDataPartitionDefinition part in defImp.DataPartitions)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    if (await SaveDirtyLink(defImp.EntityPath, options) == false)
                                    {
                                        Logger.Error(this.Ctx as ResolveContext, Tag, nameof(SaveLinkedDocuments), this.AtCorpusPath, CdmLogCode.ErrDocEntityDocSavingFailure, defImp.EntityPath);
                                        return(false);
                                    }
                                }
                            }
                        }
                        // so can patterns
                        if (defImp.DataPartitionPatterns != null)
                        {
                            foreach (CdmDataPartitionPatternDefinition part in defImp.DataPartitionPatterns)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    if (await SaveDirtyLink(part.SpecializedSchema, options) == false)
                                    {
                                        Logger.Error(this.Ctx as ResolveContext, Tag, nameof(SaveLinkedDocuments), this.AtCorpusPath, CdmLogCode.ErrDocPartitionSchemaSavingFailure, part.SpecializedSchema);
                                        return(false);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this.SubManifests != null)
            {
                foreach (CdmManifestDeclarationDefinition sub in this.SubManifests)
                {
                    if (await SaveDirtyLink(sub.Definition, options) == false)
                    {
                        Logger.Error(this.Ctx as ResolveContext, Tag, nameof(SaveLinkedDocuments), this.AtCorpusPath, CdmLogCode.ErrDocSubManifestSavingFailure, sub.DeclaredPath);
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemplo n.º 6
0
        override internal async Task <bool> SaveLinkedDocuments(CopyOptions options = null)
        {
            HashSet <string> links = new HashSet <string>();

            if (options == null)
            {
                options = new CopyOptions();
            }

            if (this.Imports != null)
            {
                this.Imports.ToList().ForEach(x => links.Add(x.CorpusPath));
            }
            if (this.Entities != null)
            {
                // only the local entity declarations please
                foreach (CdmEntityDeclarationDefinition def in this.Entities)
                {
                    if (def.ObjectType == CdmObjectType.LocalEntityDeclarationDef)
                    {
                        CdmLocalEntityDeclarationDefinition defImp = def as CdmLocalEntityDeclarationDefinition;
                        links.Add(defImp.EntityPath);

                        // also, partitions can have their own schemas
                        if (defImp.DataPartitions != null)
                        {
                            foreach (CdmDataPartitionDefinition part in defImp.DataPartitions)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    links.Add(part.SpecializedSchema);
                                }
                            }
                        }
                        // so can patterns
                        if (defImp.DataPartitionPatterns != null)
                        {
                            foreach (CdmDataPartitionPatternDefinition part in defImp.DataPartitionPatterns)
                            {
                                if (part.SpecializedSchema != null)
                                {
                                    links.Add(part.SpecializedSchema);
                                }
                            }
                        }
                    }
                }
            }

            // Get all Cdm documents sequentially
            List <CdmDocumentDefinition> docs = new List <CdmDocumentDefinition>();

            foreach (var link in links)
            {
                CdmDocumentDefinition document = await FetchDocumentDefinition(link);

                if (document == null)
                {
                    return(false);
                }
                docs.Add(document);
            }

            // Save all dirty Cdm documents in parallel
            IEnumerable <Task <bool> > tasks = docs.Select(doc => SaveDocumentIfDirty(doc, options));
            var results = await Task.WhenAll(tasks);

            if (this.SubManifests != null)
            {
                foreach (var subDeclaration in this.SubManifests)
                {
                    CdmManifestDefinition subManifest = await FetchDocumentDefinition(subDeclaration.Definition) as CdmManifestDefinition;

                    if (subManifest == null || !await SaveDocumentIfDirty(subManifest, options))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }