jaydata-reso
Version:
Jaydata fork for RESO Web API
54 lines (42 loc) • 2.08 kB
JavaScript
$C('$data.Expressions.ExpressionMonitor', $data.Expressions.EntityExpressionVisitor, null, {
constructor: function (monitorDefinition) {
this.Visit = function (expression, context) {
var result = expression;
var methodName;
if (this.canVisit(expression)) {
//if (monitorDefinition.FilterExpressionNode) {
//};
if (monitorDefinition.VisitExpressionNode) {
monitorDefinition.VisitExpressionNode.apply(monitorDefinition, arguments);
};
methodName = "Visit" + expression.getType().name;
if (methodName in monitorDefinition) {
result = monitorDefinition[methodName].apply(monitorDefinition, arguments);
}
}
//apply is about 3-4 times faster then call on webkit
var args = arguments;
if (result !== expression) args = [result, context];
result = $data.Expressions.EntityExpressionVisitor.prototype.Visit.apply(this, args);
args = [result, context];
if (this.canVisit(result)) {
var expressionTypeName = result.getType().name;
if (monitorDefinition.MonitorExpressionNode) {
monitorDefinition.MonitorExpressionNode.apply(monitorDefinition, args);
}
methodName = "Monitor" + expressionTypeName;
if (methodName in monitorDefinition) {
monitorDefinition[methodName].apply(monitorDefinition, args);
}
if (monitorDefinition.MutateExpressionNode) {
monitorDefinition.MutateExpressionNode.apply(monitorDefinition, args);
}
methodName = "Mutate" + expressionTypeName;
if (methodName in monitorDefinition) {
result = monitorDefinition[methodName].apply(monitorDefinition, args);
}
}
return result;
};
}
});