Example #1
0
        public object Evaluate(OPathExpression opathExpression, OPathOptions opathOptions,
                               object defaultValue)
        {
            object opathValue = Evaluate(opathExpression, opathOptions, defaultValue, null);

            return(opathValue);
        }
Example #2
0
        private IDictionary <string, object> GetVariableValueDictionary(OPathExpression opathExpression,
                                                                        OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger)
        {
            IDictionary <string, object> variableValueDictionary = new Dictionary <string, object>();

            foreach (OPathVariable opathVariable in opathExpression.Variables)
            {
                object sourceObject = GetSourceObject(opathVariable);

                object variableValue = null;
                try
                {
                    variableValue =
                        EvaluateVariableReference(
                            sourceObject, opathVariable, opathOptions, defaultValue, valueLogger,
                            opathExpression.OPath);
                }
                catch (Exception ex)
                {
                    throw new OPathException(string.Format(
                                                 "Exception occurred evaluating variable reference {0}: {1}",
                                                 opathVariable.GetReference(), ex.Message), ex);
                }

                variableValueDictionary.Add(opathVariable.XPathName, variableValue);
            }

            return(variableValueDictionary);
        }
Example #3
0
        private static bool IsReturnDefaultIfExceptionOptionSet(OPathOptions opathOptions)
        {
            bool isAnyExceptionEqualsNullOptionSet =
                (opathOptions & OPathOptions.ReturnDefaultIfException)
                == OPathOptions.ReturnDefaultIfException;

            return(isAnyExceptionEqualsNullOptionSet);
        }
Example #4
0
        private static bool IsReturnDefaultForNullOptionSet(OPathOptions opathOptions)
        {
            bool isAnyNullEqualsNullOptionSet =
                (opathOptions & OPathOptions.ReturnDefaultForNull)
                == OPathOptions.ReturnDefaultForNull;

            return(isAnyNullEqualsNullOptionSet);
        }
Example #5
0
        public static object Evaluate(OPathDocument opathDocument, OPathExpression opathExpression,
                                      OPathOptions opathOptions, object defaultValue)
        {
            OPathNavigator targetNavigator = CreateNavigator(opathDocument);

            object opathValue = targetNavigator.Evaluate(opathExpression, opathOptions, defaultValue, null);

            return(opathValue);
        }
Example #6
0
        private void AssertExpressionEquals(object expectedValue, string expression,
                                            OPathOptions opathOptions, object defaultValue)
        {
            OPathExpression opathExpression = OPathExpression.Compile(expression);

            object actualValue =
                OPathNavigator.Evaluate(m_OPathDocument, opathExpression, opathOptions, defaultValue,
                                        (string message) => Console.WriteLine(message));

            Assert.AreEqual(expectedValue, actualValue, expression);
        }
Example #7
0
        private object EvaluateSingleVariable(OPathExpression opathExpression, OPathOptions opathOptions,
                                              object defaultValue, ValueLogger valueLogger)
        {
            OPathVariable opathVariable = opathExpression.Variables[0];

            object sourceObject = GetSourceObject(opathVariable);

            object variableValue =
                EvaluateVariableReference(
                    sourceObject, opathVariable, opathOptions, defaultValue, valueLogger, opathExpression.OPath);

            return(variableValue);
        }
Example #8
0
        private object EvaluateOPathExpression(OPathExpression opathExpression, OPathOptions opathOptions,
                                               object defaultValue, ValueLogger valueLogger)
        {
            XPathNavigator variableValueNavigator = (new XmlDocument()).CreateNavigator();

            // Clone the XPath expression so we can set a context on it in a thread-safe manner
            XPathExpression clonedXPathExpression = opathExpression.XPathExpression.Clone();

            IDictionary <string, object> variableValueDictionary =
                GetVariableValueDictionary(opathExpression, opathOptions, defaultValue, valueLogger);

            clonedXPathExpression.SetContext(
                new OPathXsltContext(variableValueDictionary, m_CustomFunctions, GetXPathValue));

            object evaluatedExpression = variableValueNavigator.Evaluate(clonedXPathExpression);

            return(evaluatedExpression);
        }
Example #9
0
        public object Evaluate(OPathExpression opathExpression, OPathOptions opathOptions,
                               object defaultValue, ValueLogger valueLogger)
        {
            object evaluatedExpression;

            if (m_OPathDocument == null)
            {
                m_OPathDocument = new OPathDocument();
            }

            if (opathExpression.IsSingleVariable())
            {
                evaluatedExpression =
                    EvaluateSingleVariable(opathExpression, opathOptions, defaultValue, valueLogger);
            }
            else
            {
                evaluatedExpression =
                    EvaluateOPathExpression(opathExpression, opathOptions, defaultValue, valueLogger);
            }

            return(evaluatedExpression);
        }
Example #10
0
        private object EvaluateVariableReference(object sourceObject, OPathVariable opathVariable,
                                                 OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger, string opath)
        {
            object opathValue     = sourceObject;
            string evaluatedOPath = opathVariable.Name;

            foreach (OPathPart opathPart in opathVariable.OPathParts)
            {
                if (opathValue == null)
                {
                    if (IsReturnDefaultForNullOptionSet(opathOptions))
                    {
                        if (valueLogger != null)
                        {
                            string defaultForNullLogMessage =
                                GetDefaultForNullLogMessage(opathVariable, evaluatedOPath, defaultValue);
                            valueLogger(defaultForNullLogMessage);
                        }

                        opathValue = defaultValue;
                        break;
                    }
                    else
                    {
                        throw new OPathException(
                                  string.Format("{0} evaluated to '{1}'.", evaluatedOPath, NULL_MESSAGE_STRING));
                    }
                }

                try
                {
                    opathValue = opathPart.Evaluate(opathValue, evaluatedOPath);

                    evaluatedOPath += opathPart;
                }
                catch (Exception ex)
                {
                    if (IsReturnDefaultIfExceptionOptionSet(opathOptions))
                    {
                        if (valueLogger != null)
                        {
                            string defaultIfExceptionLogMessage =
                                GetDefaultIfExceptionLogMessage(
                                    opathVariable, evaluatedOPath, opathPart, defaultValue, ex);
                            valueLogger(defaultIfExceptionLogMessage);
                        }

                        opathValue = defaultValue;
                        break;
                    }
                    else
                    {
                        throw;
                    }
                }
            }

            if (valueLogger != null)
            {
                valueLogger(
                    string.Format("{0} evaluated to '{1}'", opathVariable.GetReference(), opathValue ?? NULL_MESSAGE_STRING));
            }

            return(opathValue);
        }
Example #11
0
 private void AssertExpressionEquals(object expectedValue, string expression,
                                     OPathOptions opathOptions)
 {
     AssertExpressionEquals(expectedValue, expression, opathOptions, null);
 }