public static CdmTraitGroupReference FromData(CdmCorpusContext ctx, JToken obj) { // Note: Trait group reference by definition cannot be specified as a simple named reference if (obj == null || obj["traitGroupReference"] == null) { return(null); } bool? optional = null; dynamic traitGroup; if (obj["optional"] != null) { if (bool.TryParse(obj["optional"].ToString(), out bool optVal)) { optional = optVal; } } if (obj["traitGroupReference"] is JValue) { traitGroup = (string)obj["traitGroupReference"]; } else { traitGroup = TraitGroupPersistence.FromData(ctx, obj["traitGroupReference"]); } CdmTraitGroupReference traitGroupReference = ctx.Corpus.MakeRef <CdmTraitGroupReference>(CdmObjectType.TraitGroupRef, traitGroup, false); if (optional != null) { traitGroupReference.Optional = optional; } return(traitGroupReference); }
public static CdmDocumentDefinition FromObject(CdmCorpusContext ctx, string name, string nameSpace, string path, DocumentContent obj) { var doc = ctx.Corpus.MakeObject <CdmDocumentDefinition>(CdmObjectType.DocumentDef, name); doc.FolderPath = path; doc.Namespace = nameSpace; if (!StringUtils.IsBlankByCdmStandard(obj.Schema)) { doc.Schema = obj.Schema; } if (!StringUtils.IsBlankByCdmStandard(obj.DocumentVersion)) { doc.DocumentVersion = obj.DocumentVersion; } if (obj.Imports != null) { foreach (var importObj in obj.Imports) { doc.Imports.Add(ImportPersistence.FromData(ctx, importObj)); } } if (obj.Definitions != null) { for (int i = 0; i < obj.Definitions.Count; i++) { dynamic d = obj.Definitions[i]; if (d["dataTypeName"] != null) { doc.Definitions.Add(DataTypePersistence.FromData(ctx, d)); } else if (d["purposeName"] != null) { doc.Definitions.Add(PurposePersistence.FromData(ctx, d)); } else if (d["attributeGroupName"] != null) { doc.Definitions.Add(AttributeGroupPersistence.FromData(ctx, d)); } else if (d["traitName"] != null) { doc.Definitions.Add(TraitPersistence.FromData(ctx, d)); } else if (d["traitGroupName"] != null) { doc.Definitions.Add(TraitGroupPersistence.FromData(ctx, d)); } else if (d["entityShape"] != null) { doc.Definitions.Add(ConstantEntityPersistence.FromData(ctx, d)); } else if (d["entityName"] != null) { doc.Definitions.Add(EntityPersistence.FromData(ctx, d)); } } } var isResolvedDoc = false; if (doc.Definitions.Count == 1 && doc.Definitions[0] is CdmEntityDefinition entity) { var resolvedTrait = entity.ExhibitsTraits.Item("has.entitySchemaAbstractionLevel"); // Tries to figure out if the document is in resolved form by looking for the schema abstraction trait // or the presence of the attribute context. isResolvedDoc = resolvedTrait != null && string.Equals((resolvedTrait as CdmTraitReference).Arguments[0].Value, "resolved"); isResolvedDoc = isResolvedDoc || entity.AttributeContext != null; } if (!StringUtils.IsBlankByCdmStandard(obj.JsonSchemaSemanticVersion)) { doc.JsonSchemaSemanticVersion = obj.JsonSchemaSemanticVersion; if (CompareJsonSemanticVersion(ctx, doc.JsonSchemaSemanticVersion) > 0) { if (isResolvedDoc) { Logger.Warning(ctx, Tag, nameof(FromObject), null, CdmLogCode.WarnPersistUnsupportedJsonSemVer, JsonSemanticVersion, doc.JsonSchemaSemanticVersion); } else { Logger.Error(ctx, Tag, nameof(FromObject), null, CdmLogCode.ErrPersistUnsupportedJsonSemVer, JsonSemanticVersion, doc.JsonSchemaSemanticVersion); } } } else { Logger.Warning(ctx, Tag, nameof(FromObject), null, CdmLogCode.WarnPersistJsonSemVerMandatory); } return(doc); }