in objectModel/TypeScript/Persistence/CdmFolder/ManifestPersistence.ts [52:190]
public static fromObject(
ctx: CdmCorpusContext,
name: string,
namespace: string,
path: string,
dataObj: ManifestContent
): CdmManifestDefinition {
// Determine name of the manifest
let manifestName: string;
if (dataObj) {
manifestName = dataObj.manifestName ? dataObj.manifestName : dataObj.folioName;
}
// We haven't found the name in the file, use one provided in the call but without the suffixes
if (!manifestName && name) {
manifestName = name.replace(CdmConstants.manifestExtension, '')
.replace(CdmConstants.folioExtension, '');
}
const manifest: CdmManifestDefinition = ctx.corpus.MakeObject<CdmManifestDefinition>(cdmObjectType.manifestDef, manifestName);
// this is the document name which is assumed by constructor to be related to the the manifestName, but may not be
manifest.name = name;
manifest.folderPath = path;
manifest.namespace = namespace;
if (dataObj) {
if (dataObj.explanation) {
manifest.explanation = dataObj.explanation;
}
if (dataObj.$schema) {
manifest.schema = dataObj.$schema;
}
// support old model syntax
if (dataObj.schemaVersion) {
manifest.jsonSchemaSemanticVersion = dataObj.schemaVersion;
}
if (dataObj.jsonSchemaSemanticVersion) {
manifest.jsonSchemaSemanticVersion = dataObj.jsonSchemaSemanticVersion;
}
if (manifest.jsonSchemaSemanticVersion !== '1.0.0') {
// tslint:disable-next-line:no-suspicious-comment
// TODO: validate that this is a version we can understand with the OM
}
if (dataObj.documentVersion) {
manifest.documentVersion = dataObj.documentVersion;
}
if (dataObj.manifestName) {
manifest.manifestName = dataObj.manifestName;
// Might be populated in the case of folio.cdm.json or manifest.cdm.json file.
} else if (dataObj.folioName) {
manifest.manifestName = dataObj.folioName;
}
if (dataObj.imports) {
for (const importObj of dataObj.imports) {
manifest.imports.push(ImportPersistence.fromData(ctx, importObj));
}
}
if (dataObj.definitions && Array.isArray(dataObj.definitions)) {
for (const definition of dataObj.definitions) {
if ('dataTypeName' in definition) {
manifest.definitions.push(DataTypePersistence.fromData(ctx, definition));
} else if ('purposeName' in definition) {
manifest.definitions.push(PurposePersistence.fromData(ctx, definition));
} else if ('attributeGroupName' in definition) {
manifest.definitions.push(AttributeGroupPersistence.fromData(ctx, definition));
} else if ('traitName' in definition) {
manifest.definitions.push(TraitPersistence.fromData(ctx, definition));
} else if ('entityShape' in definition) {
manifest.definitions.push(ConstantEntityPersistence.fromData(ctx, definition));
} else if ('entityName' in definition) {
manifest.definitions.push(EntityPersistence.fromData(ctx, definition));
}
}
}
if (dataObj.lastFileStatusCheckTime) {
manifest.lastFileStatusCheckTime = new Date(dataObj.lastFileStatusCheckTime);
}
if (dataObj.lastFileModifiedTime) {
manifest.lastFileModifiedTime = new Date(dataObj.lastFileModifiedTime);
}
if (dataObj.lastChildFileModifiedTime) {
manifest.lastChildFileModifiedTime = new Date(dataObj.lastChildFileModifiedTime);
}
utils.addArrayToCdmCollection<CdmTraitReferenceBase>(
manifest.exhibitsTraits,
utils.createTraitReferenceArray(ctx, dataObj.exhibitsTraits)
);
if (dataObj.entities) {
const fullPath: string = `${namespace ? `${namespace}:${path}` : path}`;
for (const entityObj of dataObj.entities) {
let entity: CdmEntityDeclarationDefinition;
if (entityObj.type) {
if (entityObj.type === entityDeclarationDefinitionType.localEntity) {
entity = LocalEntityDeclarationPersistence.fromData(ctx, fullPath, entityObj);
} else if (entityObj.type === entityDeclarationDefinitionType.referencedEntity) {
entity = ReferencedEntityDeclarationPersistence.fromData(ctx, fullPath, entityObj);
} else {
Logger.error(ctx, this.TAG, this.fromObject.name, null, cdmLogCode.ErrPersistEntityDeclarationMissing, entityObj.entityName);
}
} else {
// We see old structure of entity declaration, check for entity schema/declaration.
if (entityObj.entitySchema) {
// Local entity declaration used to use entity schema.
entity = LocalEntityDeclarationPersistence.fromData(ctx, fullPath, entityObj);
} else {
// While referenced entity declaration used to use entity declaration.
entity = ReferencedEntityDeclarationPersistence.fromData(ctx, fullPath, entityObj);
}
}
manifest.entities.push(entity);
}
}
if (dataObj.relationships) {
for (const rel of dataObj.relationships) {
manifest.relationships.push(E2ERelationshipPersistence.fromData(ctx, rel));
}
}
if (dataObj.subManifests) {
for (const subManifest of dataObj.subManifests) {
manifest.subManifests.push(ManifestDeclarationPersistence.fromData(ctx, subManifest));
}
// Might be populated in the case of folio.cdm.json or manifest.cdm.json file.
} else if (dataObj.subFolios) {
for (const subFolio of dataObj.subFolios) {
manifest.subManifests.push(ManifestDeclarationPersistence.fromData(ctx, subFolio));
}
}
}
return manifest;
}