public static CdmEntityAttributeDefinition FromData(CdmCorpusContext ctx, JToken obj) { var entityAttribute = ctx.Corpus.MakeObject <CdmEntityAttributeDefinition>(CdmObjectType.EntityAttributeDef, (string)obj["name"]); entityAttribute.Description = Utils.PropertyFromDataToString(obj["description"]); entityAttribute.DisplayName = Utils.PropertyFromDataToString(obj["displayName"]); entityAttribute.Explanation = Utils.PropertyFromDataToString(obj["explanation"]); if (obj["cardinality"] != null) { string minCardinality = null; if (obj["cardinality"]["minimum"] != null) { minCardinality = (string)obj["cardinality"]["minimum"]; } string maxCardinality = null; if (obj["cardinality"]["maximum"] != null) { maxCardinality = (string)obj["cardinality"]["maximum"]; } if (string.IsNullOrWhiteSpace(minCardinality) || string.IsNullOrWhiteSpace(maxCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrPersistCardinalityPropMissing); } if (!CardinalitySettings.IsMinimumValid(minCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrPersistInvalidMinCardinality, minCardinality); } if (!CardinalitySettings.IsMaximumValid(maxCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrPersistInvalidMaxCardinality, maxCardinality); } if (!string.IsNullOrWhiteSpace(minCardinality) && !string.IsNullOrWhiteSpace(maxCardinality) && CardinalitySettings.IsMinimumValid(minCardinality) && CardinalitySettings.IsMinimumValid(maxCardinality)) { entityAttribute.Cardinality = new CardinalitySettings(entityAttribute) { Minimum = minCardinality, Maximum = maxCardinality }; } } entityAttribute.IsPolymorphicSource = (bool?)obj["isPolymorphicSource"]; bool isProjection = obj["entity"] != null && !(obj["entity"] is JValue) && obj["entity"]["source"] != null; if (isProjection) { CdmEntityReference inlineEntityRef = ctx.Corpus.MakeObject <CdmEntityReference>(CdmObjectType.EntityRef, null); inlineEntityRef.ExplicitReference = ProjectionPersistence.FromData(ctx, obj["entity"]); entityAttribute.Entity = inlineEntityRef; } else { entityAttribute.Entity = EntityReferencePersistence.FromData(ctx, obj["entity"]); } entityAttribute.Purpose = PurposeReferencePersistence.FromData(ctx, obj["purpose"]); Utils.AddListToCdmCollection(entityAttribute.AppliedTraits, Utils.CreateTraitReferenceList(ctx, obj["appliedTraits"])); // ignore resolution guidance if the entity is a projection if (obj["resolutionGuidance"] != null && isProjection) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrPersistEntityAttrUnsupported, entityAttribute.Name); } else { entityAttribute.ResolutionGuidance = AttributeResolutionGuidancePersistence.FromData(ctx, obj["resolutionGuidance"]); } return(entityAttribute); }
public static CdmEntityAttributeDefinition FromData(CdmCorpusContext ctx, JToken obj) { var entityAttribute = ctx.Corpus.MakeObject <CdmEntityAttributeDefinition>(CdmObjectType.EntityAttributeDef, (string)obj["name"]); entityAttribute.Description = Utils.PropertyFromDataToString(obj["description"]); entityAttribute.DisplayName = Utils.PropertyFromDataToString(obj["displayName"]); entityAttribute.Explanation = Utils.PropertyFromDataToString(obj["explanation"]); if (obj["cardinality"] != null) { string minCardinality = null; if (obj["cardinality"]["minimum"] != null) { minCardinality = (string)obj["cardinality"]["minimum"]; } string maxCardinality = null; if (obj["cardinality"]["maximum"] != null) { maxCardinality = (string)obj["cardinality"]["maximum"]; } if (string.IsNullOrWhiteSpace(minCardinality) || string.IsNullOrWhiteSpace(maxCardinality)) { Logger.Error(nameof(EntityAttributePersistence), ctx, $"Both minimum and maximum are required for the Cardinality property.", nameof(FromData)); } if (!CardinalitySettings.IsMinimumValid(minCardinality)) { Logger.Error(nameof(EntityAttributePersistence), ctx, $"Invalid minimum cardinality {minCardinality}.", nameof(FromData)); } if (!CardinalitySettings.IsMaximumValid(maxCardinality)) { Logger.Error(nameof(EntityAttributePersistence), ctx, $"Invalid maximum cardinality {maxCardinality}.", nameof(FromData)); } if (!string.IsNullOrWhiteSpace(minCardinality) && !string.IsNullOrWhiteSpace(maxCardinality) && CardinalitySettings.IsMinimumValid(minCardinality) && CardinalitySettings.IsMinimumValid(maxCardinality)) { entityAttribute.Cardinality = new CardinalitySettings(entityAttribute) { Minimum = minCardinality, Maximum = maxCardinality }; } } entityAttribute.IsPolymorphicSource = (bool?)obj["isPolymorphicSource"]; bool isProjection = obj["entity"] != null && !(obj["entity"] is JValue) && obj["entity"]["source"] != null; if (isProjection) { CdmProjection projection = ProjectionPersistence.FromData(ctx, obj["entity"]); projection.Owner = entityAttribute; CdmEntityReference inlineEntityRef = ctx.Corpus.MakeObject <CdmEntityReference>(CdmObjectType.EntityRef, null); inlineEntityRef.ExplicitReference = projection; entityAttribute.Entity = inlineEntityRef; } else { entityAttribute.Entity = EntityReferencePersistence.FromData(ctx, obj["entity"]); } entityAttribute.Purpose = PurposeReferencePersistence.FromData(ctx, obj["purpose"]); Utils.AddListToCdmCollection(entityAttribute.AppliedTraits, Utils.CreateTraitReferenceList(ctx, obj["appliedTraits"])); // ignore resolution guidance if the entity is a projection if (obj["resolutionGuidance"] != null && isProjection) { Logger.Error(nameof(EntityAttributePersistence), ctx, $"The EntityAttribute {entityAttribute.Name} is projection based. Resolution guidance is not supported with a projection."); } else { entityAttribute.ResolutionGuidance = AttributeResolutionGuidancePersistence.FromData(ctx, obj["resolutionGuidance"]); } return(entityAttribute); }
public static CdmTypeAttributeDefinition FromData(CdmCorpusContext ctx, JToken obj, string entityName = null) { if (obj == null) { return(null); } var typeAttribute = ctx.Corpus.MakeObject <CdmTypeAttributeDefinition>(CdmObjectType.TypeAttributeDef, (string)obj["name"]); typeAttribute.Purpose = PurposeReferencePersistence.FromData(ctx, obj["purpose"]); typeAttribute.DataType = DataTypeReferencePersistence.FromData(ctx, obj["dataType"]); if (obj["cardinality"] != null) { string minCardinality = null; if (obj["cardinality"]["minimum"] != null) { minCardinality = (string)obj["cardinality"]["minimum"]; } string maxCardinality = null; if (obj["cardinality"]["maximum"] != null) { maxCardinality = (string)obj["cardinality"]["maximum"]; } if (string.IsNullOrWhiteSpace(minCardinality) || string.IsNullOrWhiteSpace(maxCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrPersistCardinalityPropMissing); } if (!CardinalitySettings.IsMinimumValid(minCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrValdnInvalidMinCardinality, minCardinality); } if (!CardinalitySettings.IsMaximumValid(maxCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrValdnInvalidMaxCardinality, maxCardinality); } if (!string.IsNullOrWhiteSpace(minCardinality) && !string.IsNullOrWhiteSpace(maxCardinality) && CardinalitySettings.IsMinimumValid(minCardinality) && CardinalitySettings.IsMinimumValid(maxCardinality)) { typeAttribute.Cardinality = new CardinalitySettings(typeAttribute) { Minimum = minCardinality, Maximum = maxCardinality }; } } typeAttribute.AttributeContext = AttributeContextReferencePersistence.FromData(ctx, obj["attributeContext"]); Utils.AddListToCdmCollection(typeAttribute.AppliedTraits, Utils.CreateTraitReferenceList(ctx, obj["appliedTraits"])); typeAttribute.ResolutionGuidance = AttributeResolutionGuidancePersistence.FromData(ctx, obj["resolutionGuidance"]); if (obj["isPrimaryKey"] != null && (bool)obj["isPrimaryKey"] && entityName != null) { TraitToPropertyMap t2pMap = new TraitToPropertyMap(typeAttribute); t2pMap.UpdatePropertyValue("isPrimaryKey", entityName + "/(resolvedAttributes)/" + typeAttribute.Name); } typeAttribute.Explanation = Utils.PropertyFromDataToString(obj["explanation"]); typeAttribute.Description = Utils.PropertyFromDataToString(obj["description"]); typeAttribute.IsReadOnly = Utils.PropertyFromDataToBool(obj["isReadOnly"]); typeAttribute.IsNullable = Utils.PropertyFromDataToBool(obj["isNullable"]); typeAttribute.SourceName = Utils.PropertyFromDataToString(obj["sourceName"]); typeAttribute.SourceOrdering = Utils.PropertyFromDataToInt(obj["sourceOrdering"]); typeAttribute.DisplayName = Utils.PropertyFromDataToString(obj["displayName"]); typeAttribute.ValueConstrainedToList = Utils.PropertyFromDataToBool(obj["valueConstrainedToList"]); typeAttribute.MaximumLength = Utils.PropertyFromDataToInt(obj["maximumLength"]); typeAttribute.MaximumValue = Utils.PropertyFromDataToString(obj["maximumValue"]); typeAttribute.MinimumValue = Utils.PropertyFromDataToString(obj["minimumValue"]); typeAttribute.DefaultValue = obj["defaultValue"]; typeAttribute.Projection = ProjectionPersistence.FromData(ctx, obj["projection"]); var dataFormat = Utils.PropertyFromDataToString(obj["dataFormat"]); if (dataFormat != null) { bool success = Enum.TryParse(dataFormat, true, out CdmDataFormat cdmDataFormat); if (success) { typeAttribute.DataFormat = cdmDataFormat; } else { Logger.Warning(ctx, Tag, nameof(FromData), null, CdmLogCode.WarnPersistEnumNotFound, dataFormat); } } return(typeAttribute); }
public static CdmTypeAttributeDefinition FromData(CdmCorpusContext ctx, DataColumn obj, string entityName = null) { var typeAttribute = ctx.Corpus.MakeObject <CdmTypeAttributeDefinition>(CdmObjectType.TypeAttributeDef, obj.Name); var properties = obj.OriginDataTypeName.Properties; typeAttribute.DataFormat = Utils.SymsDataTypeToCdmDataFormat(obj.OriginDataTypeName); if (obj.OriginDataTypeName.Scale != 0 || obj.OriginDataTypeName.Precision != 0) { var numericTraits = ctx.Corpus.MakeRef <CdmTraitReference>(CdmObjectType.TraitRef, "is.dataFormat.numeric.shaped", true); var scaleTraitsArg = ctx.Corpus.MakeObject <CdmArgumentDefinition>(CdmObjectType.ArgumentDef, "scale"); scaleTraitsArg.Value = obj.OriginDataTypeName.Scale; numericTraits.Arguments.Add(scaleTraitsArg); var precisionTraitsArg = ctx.Corpus.MakeObject <CdmArgumentDefinition>(CdmObjectType.ArgumentDef, "scale"); precisionTraitsArg.Value = obj.OriginDataTypeName.Scale; numericTraits.Arguments.Add(precisionTraitsArg); } if (properties != null) { if (properties.ContainsKey("cdm:purpose")) { typeAttribute.Purpose = properties["cdm:purpose"].ToObject <CdmPurposeReference>(); } if (properties.ContainsKey("cdm:dataType")) { typeAttribute.DataType = properties["cdm:dataType"].ToObject <CdmDataTypeReference> (); } if (properties.ContainsKey("cdm:cardinality")) { string minCardinality = null; if (properties["cdm:minimum"] != null) { minCardinality = properties["cdm:minimum"].ToObject <string>(); } string maxCardinality = null; if (properties["cdm:maximum"] != null) { maxCardinality = properties["cdm:maximum"].ToObject <string>(); } if (string.IsNullOrWhiteSpace(minCardinality) || string.IsNullOrWhiteSpace(maxCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrPersistCardinalityPropMissing); } if (!CardinalitySettings.IsMinimumValid(minCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrValdnInvalidMinCardinality, minCardinality); } if (!CardinalitySettings.IsMaximumValid(maxCardinality)) { Logger.Error((ResolveContext)ctx, Tag, nameof(FromData), null, CdmLogCode.ErrValdnInvalidMaxCardinality, maxCardinality); } if (!string.IsNullOrWhiteSpace(minCardinality) && !string.IsNullOrWhiteSpace(maxCardinality) && CardinalitySettings.IsMinimumValid(minCardinality) && CardinalitySettings.IsMinimumValid(maxCardinality)) { typeAttribute.Cardinality = new CardinalitySettings(typeAttribute) { Minimum = minCardinality, Maximum = maxCardinality }; } } if (properties.ContainsKey("cdm:traits")) { Utils.AddListToCdmCollection(typeAttribute.AppliedTraits, Utils.CreateTraitReferenceList(ctx, properties["cdm:traits"])); } if (properties.ContainsKey("cdm:isPrimaryKey") && properties["cdm:isPrimaryKey"].ToObject <bool>()) { TraitToPropertyMap t2pMap = new TraitToPropertyMap(typeAttribute); t2pMap.UpdatePropertyValue("isPrimaryKey", entityName + "/(resolvedAttributes)/" + typeAttribute.Name); } if (properties.ContainsKey("cdm:isReadOnly")) { typeAttribute.IsReadOnly = properties["cdm:isReadOnly"].ToObject <bool>(); } if (properties.ContainsKey("cdm:sourceName")) { typeAttribute.SourceName = properties["cdm:sourceName"].ToObject <string>(); } if (properties.ContainsKey("cdm:sourceOrdering")) { typeAttribute.SourceOrdering = properties["cdm:sourceOrdering"].ToObject <int>(); } if (properties.ContainsKey("cdm:valueConstrainedToList")) { typeAttribute.ValueConstrainedToList = properties["cdm:valueConstrainedToList"].ToObject <bool>(); } if (properties.ContainsKey("cdm:maximumLength")) { typeAttribute.MaximumLength = properties["cdm:maximumLength"].ToObject <int>(); } if (properties.ContainsKey("cdm:maximumValue")) { typeAttribute.MaximumValue = properties["cdm:maximumValue"].ToObject <string>(); } if (properties.ContainsKey("cdm:minimumValue")) { typeAttribute.MinimumValue = properties["cdm:minimumValue"].ToObject <string>(); } if (properties.ContainsKey("cdm:defaultValue")) { typeAttribute.DefaultValue = properties["cdm:defaultValue"]; } } return(typeAttribute); }