public Result Validate(FilterContext context)
{
Result result = new Result();
// check for top level error.
if (m_selectClauses == null || m_selectClauses.Count == 0)
{
result.Status = ServiceResult.Create(
StatusCodes.BadStructureMissing,
"EventFilter does not specify any Select Clauses.");
return result;
}
if (m_whereClause == null)
{
result.Status = ServiceResult.Create(
StatusCodes.BadStructureMissing,
"EventFilter does not specify any Where Clauses.");
return result;
}
result.Status = ServiceResult.Good;
// validate select clause.
bool error = false;
foreach (SimpleAttributeOperand clause in m_selectClauses)
{
ServiceResult clauseResult = null;
// check for null.
if (clause == null)
{
clauseResult = ServiceResult.Create(
StatusCodes.BadStructureMissing,
"EventFilterSelectClause cannot be null in EventFilter SelectClause.");
result.SelectClauseResults.Add(clauseResult);
error = true;
continue;
}
// validate clause.
clauseResult = clause.Validate(context, 0);
if (ServiceResult.IsBad(clauseResult))
{
result.SelectClauseResults.Add(clauseResult);
error = true;
continue;
}
// clause ok.
result.SelectClauseResults.Add(null);
}
if (error)
{
result.Status = StatusCodes.BadEventFilterInvalid;
}
else
{
result.SelectClauseResults.Clear();
}
// validate where clause.
result.WhereClauseResult = m_whereClause.Validate(context);
if (ServiceResult.IsBad(result.WhereClauseResult.Status))
{
result.Status = StatusCodes.BadEventFilterInvalid;
}
return result;
}
}