use of org.kie.dmn.api.core.FEELPropertyAccessible in project drools by kiegroup.
the class DMNRuntimeTypesTest method testJavaKeywords.
@Test
public void testJavaKeywords() {
final DMNRuntime runtime = createRuntime("javaKeywords.dmn", this.getClass());
final DMNModel dmnModel = runtime.getModel("https://kiegroup.org/dmn/_C41C1676-0DA9-47EA-90AD-F9BAA257129F", "A1B1A8AD-B0DC-453D-86A7-C9475450C982");
assertThat(dmnModel, notNullValue());
assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false));
final DMNContext context = DMNFactory.newContext();
Map<String, Object> aThing = mapOf(entry("name", "name"), entry("const", "const"), entry("class", "class"));
context.set("a thing", aThing);
final DMNResult dmnResult = evaluateModel(runtime, dmnModel, context);
LOG.debug("{}", dmnResult);
assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false));
assertThat(dmnResult.getDecisionResultByName("Decision-1").getResult(), is("nameconstclass"));
if (isTypeSafe()) {
FEELPropertyAccessible outputSet = ((DMNContextFPAImpl) dmnResult.getContext()).getFpa();
Map<String, Object> allProperties = outputSet.allFEELProperties();
assertThat(allProperties.get("Decision-1"), is("nameconstclass"));
}
}
use of org.kie.dmn.api.core.FEELPropertyAccessible in project drools by kiegroup.
the class DMNRuntimeTypesTest method testEvaluateByIdAndName.
@Test
public void testEvaluateByIdAndName() {
final DMNRuntime runtime = createRuntimeWithAdditionalResources("2decisions.dmn", this.getClass());
final DMNModel dmnModel = runtime.getModel("https://kiegroup.org/dmn/_6453A539-85B5-4A4E-800E-6721C50B6B55", "2decisions");
assertThat(dmnModel, notNullValue());
assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false));
final DMNContext context = DMNFactory.newContext();
context.set("InputData-1", mapOf(entry("name", "John"), entry("age", 30)));
final DMNResult dmnResult1 = evaluateById(runtime, dmnModel, context, "_0BD595AB-B8C6-4FBF-B2DD-BEB49420EDFE");
assertThat(DMNRuntimeUtil.formatMessages(dmnResult1.getMessages()), dmnResult1.hasErrors(), is(false));
if (isTypeSafe()) {
FEELPropertyAccessible outputSet = ((DMNContextFPAImpl) dmnResult1.getContext()).getFpa();
Map<String, Object> allProperties = outputSet.allFEELProperties();
FEELPropertyAccessible person = (FEELPropertyAccessible) allProperties.get("Decision-1");
assertThat(person.getClass().getSimpleName(), is("TPerson"));
assertThat(person.getFEELProperty("name").toOptional().get(), is("Paul"));
assertThat(person.getFEELProperty("age").toOptional().get(), is(EvalHelper.coerceNumber(28)));
assertThat(allProperties.get("Decision-2"), nullValue());
} else {
Map<String, Object> person = (Map<String, Object>) dmnResult1.getContext().get("Decision-1");
assertThat(person.get("name"), is("Paul"));
assertThat(person.get("age"), is(EvalHelper.coerceNumber(28)));
assertThat(dmnResult1.getContext().get("Decision-2"), nullValue());
}
final DMNResult dmnResult2 = evaluateByName(runtime, dmnModel, context, "Decision-2");
assertThat(DMNRuntimeUtil.formatMessages(dmnResult2.getMessages()), dmnResult2.hasErrors(), is(false));
if (isTypeSafe()) {
FEELPropertyAccessible outputSet = ((DMNContextFPAImpl) dmnResult2.getContext()).getFpa();
Map<String, Object> allProperties = outputSet.allFEELProperties();
FEELPropertyAccessible person = (FEELPropertyAccessible) allProperties.get("Decision-2");
assertThat(person.getClass().getSimpleName(), is("TPerson"));
assertThat(person.getFEELProperty("name").toOptional().get(), is("George"));
assertThat(person.getFEELProperty("age").toOptional().get(), is(EvalHelper.coerceNumber(27)));
assertThat(allProperties.get("Decision-1"), nullValue());
} else {
Map<String, Object> person = (Map<String, Object>) dmnResult2.getContext().get("Decision-2");
assertThat(person.get("name"), is("George"));
assertThat(person.get("age"), is(EvalHelper.coerceNumber(27)));
assertThat(dmnResult2.getContext().get("Decision-1"), nullValue());
}
}
use of org.kie.dmn.api.core.FEELPropertyAccessible in project drools by kiegroup.
the class AnnotationsTest method testNextDays.
@Test
public void testNextDays() throws Exception {
final DMNRuntime runtime = createRuntime("nextDays.dmn", this.getClass());
final DMNModel dmnModel = runtime.getModel("https://kiegroup.org/dmn/_8A1F9719-02AA-4517-97D4-5C4F5D22FE82", "nextDays");
assertThat(dmnModel, notNullValue());
assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false));
DMNContext context = DMNFactory.newContext();
if (!isTypeSafe()) {
context.set("few dates", Arrays.asList(LocalDate.of(2019, 12, 31), LocalDate.of(2020, 2, 21)));
} else {
JsonMapper mapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
final String JSON = "{\n" + " \"few dates\": [ \"2019-12-31\", \"2020-02-21\" ]\n" + "}";
Class<?> inputSetClass = getStronglyClassByName(dmnModel, "InputSet");
FEELPropertyAccessible inputSet = (FEELPropertyAccessible) mapper.readValue(JSON, inputSetClass);
context = new DMNContextFPAImpl(inputSet);
}
final DMNResult dmnResult = evaluateModel(runtime, dmnModel, context);
LOG.debug("{}", dmnResult);
assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false));
assertThat(dmnResult.getDecisionResultByName("Decision-1").getResult(), is(Arrays.asList(LocalDate.of(2020, 1, 1), LocalDate.of(2020, 2, 22))));
if (strongly) {
Class<?> inputSetClass = getStronglyClassByName(dmnModel, "InputSet");
Field directionAsField = inputSetClass.getDeclaredField("few_32dates");
org.eclipse.microprofile.openapi.annotations.media.Schema annMP = directionAsField.getDeclaredAnnotation(org.eclipse.microprofile.openapi.annotations.media.Schema.class);
Assertions.assertThat(annMP).isNotNull();
Assertions.assertThat(annMP.type()).isEqualTo(org.eclipse.microprofile.openapi.annotations.enums.SchemaType.ARRAY);
io.swagger.v3.oas.annotations.media.Schema annIOSwagger = directionAsField.getDeclaredAnnotation(io.swagger.v3.oas.annotations.media.Schema.class);
Assertions.assertThat(annIOSwagger).isNotNull();
Assertions.assertThat(annIOSwagger.type()).isEqualTo("array");
}
}
use of org.kie.dmn.api.core.FEELPropertyAccessible in project drools by kiegroup.
the class DMNTypeSafeTest method testDynamic.
@Test
public void testDynamic() throws Exception {
assertValidDmnModel(dmnModel);
Map<String, Class<?>> classes = generateSourceCodeAndCreateInput(dmnModel, modelFactory, this.getClass().getClassLoader());
FEELPropertyAccessible context = createInstanceFromCompiledClasses(classes, packageName, "OutputSet");
Map<String, Object> inputSetMap = new HashMap<>();
inputSetMap.put("p", mapOf(entry("age", new BigDecimal(35)), entry("name", "Mr. x"), entry("addresses", asList(mapOf(entry("streetName", "Street1"), entry("streetNumber", 1)), mapOf(entry("streetName", "Street2"), entry("streetNumber", 2))))));
context.fromMap(inputSetMap);
DMNResult evaluateAll = evaluateTyped(context, runtime, dmnModel);
convertContext(evaluateAll, createInstanceFromCompiledClasses(classes, packageName, "OutputSet"));
DMNContext result = evaluateAll.getContext();
Map<String, Object> d = (Map<String, Object>) result.get("d");
assertThat(d.get("Hello"), is("Hello Mr. x"));
FEELPropertyAccessible outputSet = ((DMNContextFPAImpl) result).getFpa();
assertThat(outputSet.getFEELProperty("p").toOptional().get(), equalTo(context.getFEELProperty("p").toOptional().get()));
Map<String, Object> dContext = (Map<String, Object>) outputSet.getFEELProperty("d").toOptional().get();
assertThat(dContext.get("Hello"), is("Hello Mr. x"));
assertThat(dContext.get("the person"), equalTo(context.getFEELProperty("p").toOptional().get()));
}
use of org.kie.dmn.api.core.FEELPropertyAccessible in project drools by kiegroup.
the class DMNTypeSafeTest method testMetadata.
@Test
public void testMetadata() throws Exception {
assertValidDmnModel(dmnModel);
Map<String, Class<?>> classes = generateSourceCodeAndCreateInput(dmnModel, modelFactory, this.getClass().getClassLoader());
FEELPropertyAccessible feelPropertyAccessibleContext = createInstanceFromCompiledClasses(classes, packageName, "InputSet");
String metadataKey = "test";
String metadataValue = "value";
DMNContext context = new DMNContextFPAImpl(feelPropertyAccessibleContext);
context.getMetadata().set(metadataKey, metadataValue);
assertEquals(metadataValue, context.getMetadata().get(metadataKey));
assertEquals(metadataValue, context.clone().getMetadata().get(metadataKey));
}
Aggregations