use of org.kie.dmn.feel.runtime.events.InvalidParametersEvent in project drools by kiegroup.
the class ZipFunction method invoke.
public FEELFnResult<List> invoke(@ParameterName("attributes") List<?> attributes, @ParameterName("values") Object[] values) {
if (attributes.isEmpty()) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "attributes", "attributes cannot be empty"));
} else if (!(attributes.get(0) instanceof String)) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "attributes", "attributes must be a list of string"));
}
if (values.length != attributes.size()) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "values", "values must be a list of the same size as of attributes"));
}
// spec requires us to return a new list
final List<Map<Object, Object>> result = new ArrayList<>();
for (int aIdx = 0; aIdx < values.length; aIdx++) {
if (!(values[aIdx] instanceof List)) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "values", "each value must be a list"));
}
List<?> value = (List<?>) values[aIdx];
if (result.isEmpty()) {
// first time init list
value.forEach(x -> result.add(new HashMap<>()));
} else {
if (value.size() != result.size()) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "values", "each value must be consistent in size"));
}
}
Object attribute = attributes.get(aIdx);
for (int vIdx = 0; vIdx < value.size(); vIdx++) {
result.get(vIdx).put(attribute, value.get(vIdx));
}
}
return FEELFnResult.ofResult(result);
}
use of org.kie.dmn.feel.runtime.events.InvalidParametersEvent in project drools by kiegroup.
the class SecondsDiffFunction method invoke.
public FEELFnResult<BigDecimal> invoke(@ParameterName("datetime1") String datetime1, @ParameterName("datetime2") String datetime2) {
if (datetime1 == null) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "datetime1", "cannot be null"));
}
if (datetime2 == null) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "datetime2", "cannot be null"));
}
try {
TemporalAccessor dt1 = BuiltInFunctions.getFunction(DateAndTimeFunction.class).invoke(datetime1).cata(BuiltInType.justNull(), Function.identity());
TemporalAccessor dt2 = BuiltInFunctions.getFunction(DateAndTimeFunction.class).invoke(datetime2).cata(BuiltInType.justNull(), Function.identity());
return invoke(dt1, dt2);
} catch (DateTimeException e) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "datetime", "invalid 'date' or 'date and time' parameter", e));
}
}
use of org.kie.dmn.feel.runtime.events.InvalidParametersEvent in project drools by kiegroup.
the class TextOccurrencesFunction method invoke.
public FEELFnResult<BigDecimal> invoke(@ParameterName("find_text") String find_text, @ParameterName("within_text") String within_text) {
if (within_text == null) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "within_text", "cannot be null"));
}
int idx = 0;
int occurences = 0;
while (idx != -1) {
idx = within_text.indexOf(find_text, idx);
if (idx != -1) {
occurences++;
idx = idx + find_text.length();
}
}
return FEELFnResult.ofResult(EvalHelper.getBigDecimalOrNull(occurences));
}
use of org.kie.dmn.feel.runtime.events.InvalidParametersEvent in project drools by kiegroup.
the class AllFunction method invoke.
public FEELFnResult<Boolean> invoke(@ParameterName("list") List list) {
if (list == null) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "list", "cannot be null"));
}
boolean result = true;
boolean containsNull = false;
// Spec. definition: return false if any item is false, else true if all items are true, else null
for (final Object element : list) {
if (element != null && !(element instanceof Boolean)) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "an element in the list is not a Boolean"));
} else {
if (element != null) {
result &= (Boolean) element;
} else if (!containsNull) {
containsNull = true;
}
}
}
if (containsNull && result) {
return FEELFnResult.ofResult(null);
} else {
return FEELFnResult.ofResult(result);
}
}
use of org.kie.dmn.feel.runtime.events.InvalidParametersEvent in project drools by kiegroup.
the class AnyFunction method invoke.
public FEELFnResult<Boolean> invoke(@ParameterName("list") List list) {
if (list == null) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "list", "cannot be null"));
}
boolean result = false;
boolean containsNull = false;
// Spec. definition: return true if any item is true, else false if all items are false, else null
for (final Object element : list) {
if (element != null && !(element instanceof Boolean)) {
return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "an element in the list is not a Boolean"));
} else {
if (element != null) {
result |= (Boolean) element;
} else if (!containsNull) {
containsNull = true;
}
}
}
if (containsNull && !result) {
return FEELFnResult.ofResult(null);
} else {
return FEELFnResult.ofResult(result);
}
}
Aggregations