///-------------------------------------------------------------------------------- /// <summary>Evaluate expression associated with this node.</summary> /// /// <param name="solutionContext">The associated solution.</param> /// <param name="templateContext">The associated template.</param> /// <param name="modelContext">The associated model context.</param> /// <param name="interpreterType">The type of interpretation to perform.</param> ///-------------------------------------------------------------------------------- public string GetExpressionValue(Solution solutionContext, ITemplate templateContext, IDomainEnterpriseObject modelContext, InterpreterTypeCode interpreterType) { string expression1Value = String.Empty; if (Expression1 != null) { expression1Value = Expression1.GetExpressionValue(solutionContext, templateContext, modelContext, interpreterType); } string expression2Value = String.Empty; if (Expression2 != null) { expression2Value = Expression2.GetExpressionValue(solutionContext, templateContext, modelContext, interpreterType); } if (String.IsNullOrEmpty(expression1Value)) { expression1Value = "null"; } if (String.IsNullOrEmpty(expression2Value)) { expression2Value = "null"; } long expression1Long; long expression2Long; double expression1Double; double expression2Double; if (Literal != null) { return(Literal.RawValue); } if (ModelProperty != null) { return(ModelProperty.GetPropertyStringValue(solutionContext, templateContext, modelContext, modelContext, interpreterType)); } if (ModelContext != null) { bool isValidContext; IDomainEnterpriseObject nodeContext = ModelContext.GetModelContext(solutionContext, templateContext, modelContext, out isValidContext); if (nodeContext == null) { return("null"); } else { if (nodeContext.ID == Guid.Empty || nodeContext.ID == null) { return("null"); } return(nodeContext.ID.ToString()); } } else if (CurrentItem != null) { IDomainEnterpriseObject nodeContext = CurrentItem.GetModelContext(solutionContext, templateContext, modelContext); if (nodeContext == null) { return("null"); } else { return(nodeContext.ID.ToString()); } } else if (SpecCurrentItem != null) { IDomainEnterpriseObject nodeContext = SpecCurrentItem.GetModelContext(solutionContext, templateContext, modelContext); if (nodeContext == null) { return("null"); } else { return(nodeContext.ID.ToString()); } } else if (Expression1 != null && Expression2 != null) { if (BinaryOperator != null) { switch (BinaryOperator.Operator) { case "||": if (Expression1.EvaluateExpression(solutionContext, templateContext, modelContext, interpreterType) || Expression2.EvaluateExpression(solutionContext, templateContext, modelContext, interpreterType)) { return("true"); } return("false"); case "&&": if (Expression1.EvaluateExpression(solutionContext, templateContext, modelContext, interpreterType) && Expression2.EvaluateExpression(solutionContext, templateContext, modelContext, interpreterType)) { return("true"); } return("false"); case "==": if (expression1Value == expression2Value) { return("true"); } return("false"); case "!=": if (expression1Value != expression2Value) { return("true"); } return("false"); case "<": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true) { if (expression1Long < expression2Long) { return("true"); } } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true) { if (expression1Double < expression2Double) { return("true"); } } else { if (expression1Value.Length < expression2Value.Length) { return("true"); } } return("false"); case ">": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true) { if (expression1Long > expression2Long) { return("true"); } } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true) { if (expression1Double > expression2Double) { return("true"); } } else { if (expression1Value.Length > expression2Value.Length) { return("true"); } } return("false"); case "<=": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true) { if (expression1Long <= expression2Long) { return("true"); } } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true) { if (expression1Double <= expression2Double) { return("true"); } } else { if (expression1Value.Length <= expression2Value.Length) { return("true"); } } return("false"); case ">=": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true) { if (expression1Long >= expression2Long) { return("true"); } } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true) { if (expression1Double >= expression2Double) { return("true"); } } else { if (expression1Value.Length >= expression2Value.Length) { return("true"); } } return("false"); default: return("false"); } } else if (MathOperator != null) { switch (MathOperator.Operator) { case "+": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true) { return((expression1Long + expression2Long).ToString()); } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true) { return((expression1Double + expression2Double).ToString()); } else { return(expression1Value + expression2Value); } case "-": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true) { return((expression1Long - expression2Long).ToString()); } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true) { return((expression1Double - expression2Double).ToString()); } else { return(expression1Value.Replace(expression2Value, "")); } case "*": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true) { return((expression1Long * expression2Long).ToString()); } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true) { return((expression1Double * expression2Double).ToString()); } break; case "/": if (long.TryParse(expression1Value, out expression1Long) == true && long.TryParse(expression2Value, out expression2Long) == true && expression2Long != 0) { return((expression1Long / expression2Long).ToString()); } else if (double.TryParse(expression1Value, out expression1Double) == true && double.TryParse(expression2Value, out expression2Double) == true && expression2Double != 0.00) { return((expression1Double / expression2Double).ToString()); } break; default: break; } return("null"); } } else if (Expression1 != null) { return(Expression1.GetExpressionValue(solutionContext, templateContext, modelContext, interpreterType)); } return("null"); }