/// <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); }
/// <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); }
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); }
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); }
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); }
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); }