private Condition ParseCondition(string rawCond)
{
int idx = rawCond.IndexOf("&&");
if (idx != -1)
return new Condition.And { Arguments = new Condition[] { ParseCondition(rawCond.Substring(0, idx).Trim()), ParseCondition(rawCond.Substring(idx + 2).Trim()) } };
if (rawCond.StartsWith("fw:"))
return new Condition.ReferencesFramework { FrameworkID = rawCond.Substring(3).Trim() };
idx = rawCond.IndexOf("==");
if (idx != -1)
return new Condition.Equals { Expression = rawCond.Substring(0, idx).Trim(), ExpectedValue = rawCond.Substring(idx + 2).Trim() };
else if ((idx = rawCond.IndexOf("=~")) != -1)
return new Condition.MatchesRegex { Expression = rawCond.Substring(0, idx).Trim(), Regex = rawCond.Substring(idx + 2).Trim() };
else if ((idx = rawCond.IndexOf("!=")) != -1)
return new Condition.Not { Argument = new Condition.Equals { Expression = rawCond.Substring(0, idx).Trim(), ExpectedValue = rawCond.Substring(idx + 2).Trim() } };
else
throw new Exception("Cannot parse simple condition");
}