/// <summary> /// Replace Date Components in a given MetaDataFormula formula /// </summary> /// <param name="formula">The formula which needs to have its date components replaced with text component</param> /// <returns>MetaDataFormula object after replacing all Date components with Text components</returns> public MetaDataFormula ReplaceDateCompWithTextComp(MetaDataFormula formula) { var builder = new FormulaBuilder(); builder.SetFormulaComponentsFromSerialisedFormula(formula.Formula); List<FormulaComponentBase> componentsList = ReplaceDateCompWithTextComp(builder.FormulaComponents); builder.FormulaComponents.Clear(); builder.FormulaComponents.AddRange(componentsList); formula.Formula = builder.Formula; return formula; }
/// <summary> /// Retrieves all the LookupFormulaComponents contained within the specified FormulaComponentBase List. /// </summary> /// <param name="metaDataFormula"> /// The Formula to search /// </param> /// <returns> /// All LookupFormulaComponents found. /// </returns> public List<LookupFormulaComponent> FindLookupFormulaComponents(MetaDataFormula metaDataFormula) { var formulaBuilder = new FormulaBuilder(); formulaBuilder.SetFormulaComponentsFromSerialisedFormula(metaDataFormula.Formula); return FormulaComponentProcessor.FindLookupFormulaComponents(formulaBuilder.FormulaComponents); }
/// <summary> /// Matches LookupFormulaComponents in the specified components and lookupValues Key /// and substitutes in the relevant primitive FormulaComponent /// </summary> /// <param name="metaDataFormula"> /// The Formula to search /// </param> /// <param name="lookupValues">The dictionary containing the resolved values.</param> /// <returns>The altered formula.</returns> public MetaDataFormula ReplaceLookupFormulaComponents(MetaDataFormula metaDataFormula, Dictionary<LookupFormulaComponent, object> lookupValues) { var formulabuilder = new FormulaBuilder(); formulabuilder.SetFormulaComponentsFromSerialisedFormula(metaDataFormula.Formula); var amendedFormulaComponents = new List<FormulaComponentBase>(); amendedFormulaComponents.AddRange( FormulaComponentProcessor.ReplaceLookupFormulaComponents(formulabuilder.FormulaComponents, lookupValues)); formulabuilder.FormulaComponents.Clear(); formulabuilder.FormulaComponents.AddRange(amendedFormulaComponents); metaDataFormula.Formula = formulabuilder.Formula; return metaDataFormula; }
/// <summary> /// Given a list of FQNs and their values this will replace the fqn formula components /// with primitive components containing the values provided. /// </summary> /// <param name="formula"> /// The Target Formula. /// </param> /// <param name="fqnValues"> /// The dictionary containing the resolved values. /// </param> /// <returns> /// MetaDataFormula instance with the formula updated /// </returns> public MetaDataFormula ReplaceFqnFormulaComponents( MetaDataFormula formula, Dictionary<FqnFormulaComponent, object> fqnValues) { var fb = new FormulaBuilder(); fb.SetFormulaComponentsFromSerialisedFormula(formula.Formula); var newCmpList = new List<FormulaComponentBase>(); newCmpList.AddRange(FormulaComponentProcessor.ReplaceFqnFormulaComponents(fb.FormulaComponents, fqnValues)); fb.FormulaComponents.Clear(); fb.FormulaComponents.AddRange(newCmpList); formula.Formula = fb.Formula; return formula; }