Search in sources :

Example 1 with FEELProfile

use of org.kie.dmn.feel.lang.FEELProfile in project drools by kiegroup.

the class BaseFEELTest method testExpression.

@Test
public void testExpression() {
    final List<FEELProfile> profiles = getFEELProfilesForTests();
    feel = FEEL.newInstance(profiles);
    final FEELEventListener listener = mock(FEELEventListener.class);
    feel.addListener(listener);
    feel.addListener(System.out::println);
    assertResult(expression, result);
    if (severity != null) {
        final ArgumentCaptor<FEELEvent> captor = ArgumentCaptor.forClass(FEELEvent.class);
        verify(listener, atLeastOnce()).onEvent(captor.capture());
        assertThat(captor.getValue().getSeverity(), is(severity));
    } else {
        verify(listener, never()).onEvent(any(FEELEvent.class));
    }
}
Also used : FEELProfile(org.kie.dmn.feel.lang.FEELProfile) DoCompileFEELProfile(org.kie.dmn.feel.parser.feel11.profiles.DoCompileFEELProfile) KieExtendedFEELProfile(org.kie.dmn.feel.parser.feel11.profiles.KieExtendedFEELProfile) FEELEventListener(org.kie.dmn.api.feel.runtime.events.FEELEventListener) FEELEvent(org.kie.dmn.api.feel.runtime.events.FEELEvent) Test(org.junit.Test)

Example 2 with FEELProfile

use of org.kie.dmn.feel.lang.FEELProfile in project drools by kiegroup.

the class DMNImportPMMLInfo method from.

public static Either<Exception, DMNImportPMMLInfo> from(InputStream is, DMNCompilerConfigurationImpl cc, DMNModelImpl model, Import i) {
    try {
        final PMML pmml = org.jpmml.model.PMMLUtil.unmarshal(is);
        PMMLHeaderInfo h = PMMLInfo.pmmlToHeaderInfo(pmml, pmml.getHeader());
        for (DataField df : pmml.getDataDictionary().getDataFields()) {
            String dfName = df.getName().getValue();
            BuiltInType ft = getBuiltInTypeByDataType(df.getDataType());
            List<FEELProfile> helperFEELProfiles = cc.getFeelProfiles();
            DMNFEELHelper feel = new DMNFEELHelper(cc.getRootClassLoader(), helperFEELProfiles);
            List<UnaryTest> av = new ArrayList<>();
            if (df.getValues() != null && !df.getValues().isEmpty() && ft != BuiltInType.UNKNOWN) {
                final BuiltInType feelType = ft;
                String lov = df.getValues().stream().map(Value::getValue).map(o -> feelType == BuiltInType.STRING ? "\"" + o.toString() + "\"" : o.toString()).collect(Collectors.joining(","));
                av = feel.evaluateUnaryTests(lov, Collections.emptyMap());
            } else if (df.getIntervals() != null && !df.getIntervals().isEmpty() && ft != BuiltInType.UNKNOWN) {
                for (Interval interval : df.getIntervals()) {
                    String utString = null;
                    switch(interval.getClosure()) {
                        case CLOSED_CLOSED:
                            utString = new StringBuilder("[").append(interval.getLeftMargin()).append("..").append(interval.getRightMargin()).append("]").toString();
                            break;
                        case CLOSED_OPEN:
                            utString = new StringBuilder("[").append(interval.getLeftMargin()).append("..").append(interval.getRightMargin()).append(")").toString();
                            break;
                        case OPEN_CLOSED:
                            utString = new StringBuilder("(").append(interval.getLeftMargin()).append("..").append(interval.getRightMargin()).append("]").toString();
                            break;
                        case OPEN_OPEN:
                            utString = new StringBuilder("(").append(interval.getLeftMargin()).append("..").append(interval.getRightMargin()).append(")").toString();
                            break;
                    }
                    List<UnaryTest> ut = feel.evaluateUnaryTests(utString, Collections.emptyMap());
                    av.addAll(ut);
                }
            }
            DMNType type = new SimpleTypeImpl(i.getNamespace(), dfName, null, false, av, model.getTypeRegistry().resolveType(model.getDefinitions().getURIFEEL(), ft.getName()), ft);
            model.getTypeRegistry().registerType(type);
        }
        pmml.getModels().stream().forEach(m -> registerOutputFieldType(m, model, i));
        List<DMNPMMLModelInfo> models = pmml.getModels().stream().map(m -> PMMLInfo.pmmlToModelInfo(m)).map(proto -> DMNPMMLModelInfo.from(proto, model, i)).collect(Collectors.toList());
        DMNImportPMMLInfo info = new DMNImportPMMLInfo(i, models, h);
        return Either.ofRight(info);
    } catch (Throwable e) {
        return Either.ofLeft(new Exception("Unable to process DMNImportPMMLInfo", e));
    }
}
Also used : DMNType(org.kie.dmn.api.core.DMNType) Interval(org.dmg.pmml.Interval) Model(org.dmg.pmml.Model) OutputField(org.dmg.pmml.OutputField) FEELProfile(org.kie.dmn.feel.lang.FEELProfile) LoggerFactory(org.slf4j.LoggerFactory) Either(org.kie.dmn.feel.util.Either) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) SimpleTypeImpl(org.kie.dmn.core.impl.SimpleTypeImpl) Value(org.dmg.pmml.Value) Map(java.util.Map) UnaryTest(org.kie.dmn.feel.runtime.UnaryTest) PMML(org.dmg.pmml.PMML) DMNCompilerConfigurationImpl(org.kie.dmn.core.compiler.DMNCompilerConfigurationImpl) Logger(org.slf4j.Logger) Collection(java.util.Collection) DataType(org.dmg.pmml.DataType) BuiltInType(org.kie.dmn.feel.lang.types.BuiltInType) DMNModelImpl(org.kie.dmn.core.impl.DMNModelImpl) Import(org.kie.dmn.model.api.Import) Collectors(java.util.stream.Collectors) DataField(org.dmg.pmml.DataField) List(java.util.List) DMNFEELHelper(org.kie.dmn.core.compiler.DMNFEELHelper) CompositeTypeImpl(org.kie.dmn.core.impl.CompositeTypeImpl) Collections(java.util.Collections) InputStream(java.io.InputStream) DMNFEELHelper(org.kie.dmn.core.compiler.DMNFEELHelper) FEELProfile(org.kie.dmn.feel.lang.FEELProfile) ArrayList(java.util.ArrayList) BuiltInType(org.kie.dmn.feel.lang.types.BuiltInType) UnaryTest(org.kie.dmn.feel.runtime.UnaryTest) DataField(org.dmg.pmml.DataField) SimpleTypeImpl(org.kie.dmn.core.impl.SimpleTypeImpl) Value(org.dmg.pmml.Value) PMML(org.dmg.pmml.PMML) ArrayList(java.util.ArrayList) List(java.util.List) Interval(org.dmg.pmml.Interval) DMNType(org.kie.dmn.api.core.DMNType)

Example 3 with FEELProfile

use of org.kie.dmn.feel.lang.FEELProfile in project drools by kiegroup.

the class DMNCompilerImpl method compile.

public DMNModel compile(Definitions dmndefs, Collection<DMNModel> dmnModels, Resource resource, Function<String, Reader> relativeResolver) {
    if (dmndefs == null) {
        return null;
    }
    DMNModelImpl model = new DMNModelImpl(dmndefs, resource);
    model.setRuntimeTypeCheck(((DMNCompilerConfigurationImpl) dmnCompilerConfig).getOption(RuntimeTypeCheckOption.class).isRuntimeTypeCheck());
    DMNCompilerConfigurationImpl cc = (DMNCompilerConfigurationImpl) dmnCompilerConfig;
    List<FEELProfile> helperFEELProfiles = cc.getFeelProfiles();
    DMNFEELHelper feel = new DMNFEELHelper(cc.getRootClassLoader(), helperFEELProfiles);
    DMNCompilerContext ctx = new DMNCompilerContext(feel);
    ctx.setRelativeResolver(relativeResolver);
    if (!dmndefs.getImport().isEmpty()) {
        for (Import i : dmndefs.getImport()) {
            if (ImportDMNResolverUtil.whichImportType(i) == ImportType.DMN) {
                Either<String, DMNModel> resolvedResult = ImportDMNResolverUtil.resolveImportDMN(i, dmnModels, (DMNModel m) -> new QName(m.getNamespace(), m.getName()));
                DMNModel located = resolvedResult.cata(msg -> {
                    MsgUtil.reportMessage(logger, DMNMessage.Severity.ERROR, i, model, null, null, Msg.IMPORT_NOT_FOUND_FOR_NODE, msg, i);
                    return null;
                }, Function.identity());
                if (located != null) {
                    String iAlias = Optional.ofNullable(i.getName()).orElse(located.getName());
                    model.setImportAliasForNS(iAlias, located.getNamespace(), located.getName());
                    importFromModel(model, located, iAlias);
                }
            } else if (ImportDMNResolverUtil.whichImportType(i) == ImportType.PMML) {
                processPMMLImport(model, i, relativeResolver);
                model.setImportAliasForNS(i.getName(), i.getNamespace(), i.getName());
            } else {
                MsgUtil.reportMessage(logger, DMNMessage.Severity.ERROR, null, model, null, null, Msg.IMPORT_TYPE_UNKNOWN, i.getImportType());
            }
        }
    }
    processItemDefinitions(ctx, model, dmndefs);
    processDrgElements(ctx, model, dmndefs);
    return model;
}
Also used : Import(org.kie.dmn.model.api.Import) FEELProfile(org.kie.dmn.feel.lang.FEELProfile) QName(javax.xml.namespace.QName) DMNModelImpl(org.kie.dmn.core.impl.DMNModelImpl) DMNModel(org.kie.dmn.api.core.DMNModel)

Aggregations

FEELProfile (org.kie.dmn.feel.lang.FEELProfile)3 DMNModelImpl (org.kie.dmn.core.impl.DMNModelImpl)2 Import (org.kie.dmn.model.api.Import)2 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Collectors (java.util.stream.Collectors)1 QName (javax.xml.namespace.QName)1 DataField (org.dmg.pmml.DataField)1 DataType (org.dmg.pmml.DataType)1 Interval (org.dmg.pmml.Interval)1 Model (org.dmg.pmml.Model)1 OutputField (org.dmg.pmml.OutputField)1 PMML (org.dmg.pmml.PMML)1 Value (org.dmg.pmml.Value)1 Test (org.junit.Test)1