public static CdmOperationReplaceAsForeignKey FromData(CdmCorpusContext ctx, JToken obj) { if (obj == null) { return(null); } CdmOperationReplaceAsForeignKey replaceAsForeignKeyOp = ctx.Corpus.MakeObject <CdmOperationReplaceAsForeignKey>(CdmObjectType.OperationReplaceAsForeignKeyDef); if (obj["$type"] != null && !StringUtils.EqualsWithIgnoreCase(obj["$type"].ToString(), OperationTypeConvertor.OperationTypeToString(CdmOperationType.ReplaceAsForeignKey))) { Logger.Error(nameof(OperationReplaceAsForeignKeyPersistence), ctx, $"$type {(string)obj["$type"]} is invalid for this operation."); } else { replaceAsForeignKeyOp.Type = CdmOperationType.ReplaceAsForeignKey; } if (obj["explanation"] != null) { replaceAsForeignKeyOp.Explanation = (string)obj["explanation"]; } replaceAsForeignKeyOp.Reference = obj["reference"]?.ToString(); if (obj["replaceWith"] != null) { replaceAsForeignKeyOp.ReplaceWith = Utils.CreateAttribute(ctx, obj["replaceWith"]) as CdmTypeAttributeDefinition; } return(replaceAsForeignKeyOp); }
public static OperationReplaceAsForeignKey ToData(CdmOperationReplaceAsForeignKey instance, ResolveOptions resOpt, CopyOptions options) { if (instance == null) { return(null); } OperationReplaceAsForeignKey obj = OperationBasePersistence.ToData <OperationReplaceAsForeignKey>(instance, resOpt, options); obj.Reference = instance.Reference; obj.ReplaceWith = Utils.JsonForm(instance.ReplaceWith, resOpt, options); return(obj); }
public static CdmOperationReplaceAsForeignKey FromData(CdmCorpusContext ctx, JToken obj) { if (obj == null) { return(null); } CdmOperationReplaceAsForeignKey replaceAsForeignKeyOp = OperationBasePersistence.FromData <CdmOperationReplaceAsForeignKey>(ctx, CdmObjectType.OperationReplaceAsForeignKeyDef, obj); replaceAsForeignKeyOp.Reference = obj["reference"]?.ToString(); replaceAsForeignKeyOp.ReplaceWith = Utils.CreateAttribute(ctx, obj["replaceWith"]) as CdmTypeAttributeDefinition; return(replaceAsForeignKeyOp); }
public static OperationReplaceAsForeignKey ToData(CdmOperationReplaceAsForeignKey instance, ResolveOptions resOpt, CopyOptions options) { if (instance == null) { return(null); } return(new OperationReplaceAsForeignKey { Type = OperationTypeConvertor.OperationTypeToString(CdmOperationType.ReplaceAsForeignKey), Explanation = instance.Explanation, Reference = instance.Reference, ReplaceWith = Utils.JsonForm(instance.ReplaceWith, resOpt, options) }); }
/// <summary> /// Applies the replaceAsForeignKey and addAttributeGroup operations to the entity attribute provided. /// </summary> /// <param name="entityAttr"></param> /// <param name="fkAttrName"></param> /// <param name="attrGroupName"></param> static void ApplyDefaultBehavior(CdmEntityAttributeDefinition entityAttr, string fkAttrName, string attrGroupName) { var ctx = entityAttr.Ctx; CdmProjection projection = new CdmProjection(ctx) { // Link for the Source property documentation. // https://docs.microsoft.com/en-us/common-data-model/sdk/convert-logical-entities-resolved-entities#source Source = entityAttr.Entity, // Link for the RunSequentially property documentation. // https://docs.microsoft.com/en-us/common-data-model/sdk/convert-logical-entities-resolved-entities#run-sequentially RunSequentially = true }; entityAttr.Entity = new CdmEntityReference(ctx, projection, false); if (fkAttrName != null) { var foreignKeyAttr = new CdmTypeAttributeDefinition(ctx, fkAttrName) { DataType = new CdmDataTypeReference(ctx, "entityId", true) }; // Link for the ReplaceAsForeignKey operation documentation. // https://docs.microsoft.com/en-us/common-data-model/sdk/projections/replaceasforeignkey var replaceAsFKOperation = new CdmOperationReplaceAsForeignKey(ctx) { Condition = "referenceOnly", Reference = "addressLine", ReplaceWith = foreignKeyAttr }; projection.Operations.Add(replaceAsFKOperation); } if (attrGroupName != null) { // Link for the AddAttributeGroup operation documentation. // https://docs.microsoft.com/en-us/common-data-model/sdk/projections/addattributegroup var addAttrGroupOperation = new CdmOperationAddAttributeGroup(ctx) { Condition = "structured", AttributeGroupName = attrGroupName }; projection.Operations.Add(addAttrGroupOperation); } }
public static CdmProjection FromData(CdmCorpusContext ctx, JToken obj) { if (obj == null) { return(null); } CdmProjection projection = ctx.Corpus.MakeObject <CdmProjection>(CdmObjectType.ProjectionDef); CdmEntityReference source = EntityReferencePersistence.FromData(ctx, obj["source"]); if (obj["explanation"] != null) { projection.Explanation = (string)obj["explanation"]; } projection.Condition = obj["condition"]?.ToString(); projection.RunSequentially = (bool?)obj["runSequentially"]; if (obj["operations"] != null) { List <JObject> operationJsons = obj["operations"]?.ToObject <List <JObject> >(); foreach (JObject operationJson in operationJsons) { string type = (string)operationJson["$type"]; switch (type) { case "addCountAttribute": CdmOperationAddCountAttribute addCountAttributeOp = OperationAddCountAttributePersistence.FromData(ctx, operationJson); projection.Operations.Add(addCountAttributeOp); break; case "addSupportingAttribute": CdmOperationAddSupportingAttribute addSupportingAttributeOp = OperationAddSupportingAttributePersistence.FromData(ctx, operationJson); projection.Operations.Add(addSupportingAttributeOp); break; case "addTypeAttribute": CdmOperationAddTypeAttribute addTypeAttributeOp = OperationAddTypeAttributePersistence.FromData(ctx, operationJson); projection.Operations.Add(addTypeAttributeOp); break; case "excludeAttributes": CdmOperationExcludeAttributes excludeAttributesOp = OperationExcludeAttributesPersistence.FromData(ctx, operationJson); projection.Operations.Add(excludeAttributesOp); break; case "arrayExpansion": CdmOperationArrayExpansion arrayExpansionOp = OperationArrayExpansionPersistence.FromData(ctx, operationJson); projection.Operations.Add(arrayExpansionOp); break; case "combineAttributes": CdmOperationCombineAttributes combineAttributesOp = OperationCombineAttributesPersistence.FromData(ctx, operationJson); projection.Operations.Add(combineAttributesOp); break; case "renameAttributes": CdmOperationRenameAttributes renameAttributesOp = OperationRenameAttributesPersistence.FromData(ctx, operationJson); projection.Operations.Add(renameAttributesOp); break; case "replaceAsForeignKey": CdmOperationReplaceAsForeignKey replaceAsForeignKeyOp = OperationReplaceAsForeignKeyPersistence.FromData(ctx, operationJson); projection.Operations.Add(replaceAsForeignKeyOp); break; case "includeAttributes": CdmOperationIncludeAttributes includeAttributesOp = OperationIncludeAttributesPersistence.FromData(ctx, operationJson); projection.Operations.Add(includeAttributesOp); break; case "addAttributeGroup": CdmOperationAddAttributeGroup addAttributeGroupOp = OperationAddAttributeGroupPersistence.FromData(ctx, operationJson); projection.Operations.Add(addAttributeGroupOp); break; default: Logger.Error(nameof(ProjectionPersistence), ctx, $"Invalid operation type '{type}'.", nameof(FromData)); break; } } } projection.Source = source; return(projection); }
/// <summary> /// Create a projection object with operations /// </summary> /// <param name="corpus"></param> /// <returns></returns> private CdmProjection CreateProjectionWithOperationCollection(CdmCorpusDefinition corpus, CdmObject owner) { CdmProjection projection = corpus.MakeObject <CdmProjection>(CdmObjectType.ProjectionDef); { projection.Source = corpus.MakeObject <CdmEntityReference>(CdmObjectType.EntityRef, "TestSource", simpleNameRef: true); } { // AddCountAttribute Operation CdmOperationAddCountAttribute addCountAttributeOp = new CdmOperationAddCountAttribute(corpus.Ctx) { CountAttribute = corpus.MakeObject <CdmTypeAttributeDefinition>(CdmObjectType.TypeAttributeDef) }; projection.Operations.Add(addCountAttributeOp); // AddSupportingAttribute Operation CdmOperationAddSupportingAttribute addSupportingAttributesOp = new CdmOperationAddSupportingAttribute(corpus.Ctx) { SupportingAttribute = corpus.MakeObject <CdmTypeAttributeDefinition>(CdmObjectType.TypeAttributeDef) }; projection.Operations.Add(addSupportingAttributesOp); // AddTypeAttribute Operation CdmOperationAddTypeAttribute addTypeAttributeOp = new CdmOperationAddTypeAttribute(corpus.Ctx) { TypeAttribute = corpus.MakeObject <CdmTypeAttributeDefinition>(CdmObjectType.TypeAttributeDef) }; projection.Operations.Add(addTypeAttributeOp); // ExcludeAttributes Operation CdmOperationExcludeAttributes excludeAttributesOp = new CdmOperationExcludeAttributes(corpus.Ctx) { ExcludeAttributes = new List <string>() }; excludeAttributesOp.ExcludeAttributes.Add("testAttribute1"); projection.Operations.Add(excludeAttributesOp); // ArrayExpansion Operation CdmOperationArrayExpansion arrayExpansionOp = new CdmOperationArrayExpansion(corpus.Ctx) { StartOrdinal = 0, EndOrdinal = 1 }; projection.Operations.Add(arrayExpansionOp); // CombineAttributes Operation CdmOperationCombineAttributes combineAttributesOp = new CdmOperationCombineAttributes(corpus.Ctx) { Take = new List <string>(), MergeInto = corpus.MakeObject <CdmTypeAttributeDefinition>(CdmObjectType.TypeAttributeDef) }; combineAttributesOp.Take.Add("testAttribute1"); projection.Operations.Add(combineAttributesOp); // RenameAttributes Operation CdmOperationRenameAttributes renameAttributesOp = new CdmOperationRenameAttributes(corpus.Ctx) { RenameFormat = "{m}" }; projection.Operations.Add(renameAttributesOp); // ReplaceAsForeignKey Operation CdmOperationReplaceAsForeignKey replaceAsForeignKeyOp = new CdmOperationReplaceAsForeignKey(corpus.Ctx) { Reference = "testAttribute1", ReplaceWith = corpus.MakeObject <CdmTypeAttributeDefinition>(CdmObjectType.TypeAttributeDef, "testForeignKey", simpleNameRef: false) }; projection.Operations.Add(replaceAsForeignKeyOp); // IncludeAttributes Operation CdmOperationIncludeAttributes includeAttributesOp = new CdmOperationIncludeAttributes(corpus.Ctx) { IncludeAttributes = new List <string>() }; includeAttributesOp.IncludeAttributes.Add("testAttribute1"); projection.Operations.Add(includeAttributesOp); } return(projection); }