private Map<String, Object> getRuleParameters(ExecutableRule executableRule) throws RuleException { Map<String, Object> ruleParameters = new HashMap<>(); Map<String, Parameter> parameters = executableRule.getParameters(); for (Map.Entry<String, Parameter> entry : parameters.entrySet()) { String parameterName = entry.getKey(); Parameter parameter = entry.getValue(); Object parameterValue; String parameterValueAsString = this.ruleParameters.get(parameterName); if (parameterValueAsString != null) { try { parameterValue = parameter.getType().parse(parameterValueAsString); } catch (RuleException e) { throw new RuleException("Cannot determine value for parameter " + parameterName + "' of rule '" + executableRule + "'."); } } else { parameterValue = parameter.getDefaultValue(); } if (parameterValue == null) { throw new RuleException("No value or default value defined for required parameter '" + parameterName + "' of rule '" + executableRule + "'."); } ruleParameters.put(parameterName, parameterValue); } return ruleParameters; }
private Map<String, Parameter> getParameters(Object attribute) { if (attribute == null) { return Collections.emptyMap(); } Map<String, Parameter> parameters = new HashMap<>(); String[] parameterDeclarations = ((String) attribute).split(";"); for (String parameterDeclaration : parameterDeclarations) { Scanner scanner = new Scanner(parameterDeclaration); String typeName = scanner.next(); String name = scanner.next(); Parameter.Type type = Parameter.Type.valueOf(typeName.toUpperCase()); Parameter parameter = new Parameter(name, type, null); parameters.put(name, parameter); } return parameters; }
Parameter parameter = new Parameter(parameterType.getName(), type, defaultValue != null ? type.parse(defaultValue) : null); parameters.put(parameterType.getName(), parameter);
private Type toType(String value, RuleContext context) throws RuleException { try { return Type.valueOf(value.toUpperCase()); } catch (IllegalArgumentException e) { throw new RuleException("'" + value + "' is not a supported type for a parameter"); } }
public Object parse(String value) throws RuleException { try { return value != null ? parseString(value) : null; } catch (NumberFormatException e) { throw new RuleException("Cannot parse value " + value + " for type " + name()); } };