in src/CTA.Rules.RuleFiles/RulesFileParser.cs [376:694]
private void ParseActions(NodeToken nodeToken, List<Action> actions)
{
foreach (var action in actions)
{
try
{
var actionType = Enum.Parse(typeof(ActionTypes), action.Type);
switch (actionType)
{
case ActionTypes.Method:
{
var actionFunc = actionsLoader.GetInvocationExpressionAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.InvocationExpressionActions.Add(new InvocationExpressionAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
InvocationExpressionActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Expression:
{
var actionFunc = actionsLoader.GetExpressionAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.ExpressionActions.Add(new ExpressionAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
ExpressionActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Class:
{
var actionFunc = actionsLoader.GetClassAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.ClassDeclarationActions.Add(new ClassDeclarationAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
ClassDeclarationActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Interface:
{
var actionFunc = actionsLoader.GetInterfaceAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.InterfaceDeclarationActions.Add(new InterfaceDeclarationAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
InterfaceDeclarationActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Using:
{
var actionFunc = actionsLoader.GetCompilationUnitAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.UsingActions.Add(new UsingAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
UsingActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Namespace:
{
var actionFunc = actionsLoader.GetNamespaceActions(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.NamespaceActions.Add(new NamespaceAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
NamespaceActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Identifier:
{
var actionFunc = actionsLoader.GetIdentifierNameAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.IdentifierNameActions.Add(new IdentifierNameAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
IdentifierNameActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Attribute:
{
var actionFunc = actionsLoader.GetAttributeAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.AttributeActions.Add(new AttributeAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
AttributeActionFunc = actionFunc
});
}
break;
}
case ActionTypes.AttributeList:
{
var actionFunc = actionsLoader.GetAttributeListAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.AttributeListActions.Add(new AttributeAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
AttributeListActionFunc = actionFunc
});
}
break;
}
case ActionTypes.ObjectCreation:
{
var actionFunc = actionsLoader.GetObjectCreationExpressionActions(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.ObjectCreationExpressionActions.Add(new ObjectCreationExpressionAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
ObjectCreationExpressionGenericActionFunc = actionFunc
});
}
break;
}
case ActionTypes.MethodDeclaration:
{
var actionFunc = actionsLoader.GetMethodDeclarationAction(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.MethodDeclarationActions.Add(new MethodDeclarationAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
MethodDeclarationActionFunc = actionFunc
});
}
break;
}
case ActionTypes.ElementAccess:
{
var actionFunc = actionsLoader.GetElementAccessExpressionActions(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.ElementAccessActions.Add(new ElementAccessAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
ElementAccessExpressionActionFunc = actionFunc
});
}
break;
}
case ActionTypes.MemberAccess:
{
var actionFunc = actionsLoader.GetMemberAccessExpressionActions(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.MemberAccessActions.Add(new MemberAccessAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
MemberAccessActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Project:
{
var actionFunc = actionsLoader.GetProjectLevelActions(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.ProjectLevelActions.Add(new ProjectLevelAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
ProjectLevelActionFunc = actionFunc
});
}
break;
}
case ActionTypes.ProjectFile:
{
var actionFunc = actionsLoader.GetProjectFileActions(action.Name, action.Value);
if (actionFunc != null)
{
nodeToken.ProjectFileActions.Add(new ProjectLevelAction()
{
Key = nodeToken.Key,
Value = GetActionValue(action.Value),
Description = action.Description,
ActionValidation = action.ActionValidation,
Name = action.Name,
Type = action.Type,
ProjectFileActionFunc = actionFunc
});
}
break;
}
case ActionTypes.Package:
{
PackageAction packageAction = new PackageAction();
if (action.Value is string)
{
packageAction.Name = action.Value;
}
else
{
Dictionary<string, string> jsonParameters = JsonConvert.DeserializeObject<Dictionary<string, string>>(action.Value.ToString());
if (jsonParameters.ContainsKey(CTA.Rules.Config.Constants.PackageName))
{
packageAction.Name = jsonParameters[CTA.Rules.Config.Constants.PackageName];
}
else
{
LogHelper.LogDebug(string.Format("Parameter {0} is not available for action {1}"
, Config.Constants.PackageName, action.Name));
continue;
}
//TODO: If version is not available/valid, we use latest version. Should we reconsider?
if (jsonParameters.ContainsKey(CTA.Rules.Config.Constants.PackageVersion))
{
packageAction.Version = jsonParameters[CTA.Rules.Config.Constants.PackageVersion];
}
}
nodeToken.PackageActions.Add(packageAction);
break;
}
}
}
catch (Exception ex)
{
LogHelper.LogError(ex, string.Format("Error parsing action type {0}", action.Type));
}
}
}