Search in sources :

Example 16 with UnaryTests

use of org.kie.dmn.model.api.UnaryTests in project drools by kiegroup.

the class DTSheetListener method newCell.

@Override
public void newCell(int row, int column, String value, int mergedColStart) {
    if (row == 0) {
        // TODO row 0 being the header.
        return;
    }
    if (curRule == null) {
        return;
    }
    if (value == null || value.isEmpty()) {
        LOG.trace("ignoring row {}, col {} having value {}", row, column, value);
        return;
    }
    if (column < headerInfo.gethIndex()) {
        valueCheck(row, column, value);
        UnaryTests ut = new TUnaryTests();
        ut.setText(eValue(value));
        curRule.getInputEntry().add(ut);
    } else if (column == headerInfo.gethIndex()) {
        valueCheck(row, column, value);
        LiteralExpression le = new TLiteralExpression();
        le.setText(eValue(value));
        curRule.getOutputEntry().add(le);
    } else {
        LOG.trace("ignoring row {}, col {} having value {}", row, column, value);
    }
}
Also used : TUnaryTests(org.kie.dmn.model.v1_2.TUnaryTests) TLiteralExpression(org.kie.dmn.model.v1_2.TLiteralExpression) LiteralExpression(org.kie.dmn.model.api.LiteralExpression) TLiteralExpression(org.kie.dmn.model.v1_2.TLiteralExpression) TUnaryTests(org.kie.dmn.model.v1_2.TUnaryTests) UnaryTests(org.kie.dmn.model.api.UnaryTests)

Example 17 with UnaryTests

use of org.kie.dmn.model.api.UnaryTests in project drools by kiegroup.

the class UnaryTestsConverter method assignAttributes.

@Override
protected void assignAttributes(HierarchicalStreamReader reader, Object parent) {
    super.assignAttributes(reader, parent);
    UnaryTests ut = (UnaryTests) parent;
    String expressionLanguage = reader.getAttribute(EXPRESSION_LANGUAGE);
    ut.setExpressionLanguage(expressionLanguage);
}
Also used : TUnaryTests(org.kie.dmn.model.v1_2.TUnaryTests) UnaryTests(org.kie.dmn.model.api.UnaryTests)

Example 18 with UnaryTests

use of org.kie.dmn.model.api.UnaryTests in project drools by kiegroup.

the class DMNCompilerImpl method buildTypeDef.

/**
 * @param topLevel null if it is a top level ItemDefinition
 */
private DMNType buildTypeDef(DMNCompilerContext ctx, DMNModelImpl dmnModel, DMNNode node, ItemDefinition itemDef, DMNType topLevel) {
    BaseDMNTypeImpl type = null;
    if (itemDef.getTypeRef() != null) {
        // this is a reference to an existing type, so resolve the reference
        type = (BaseDMNTypeImpl) resolveTypeRef(dmnModel, itemDef, itemDef, itemDef.getTypeRef());
        if (type != null) {
            UnaryTests allowedValuesStr = itemDef.getAllowedValues();
            // or if it changes the metadata for the base type
            if (topLevel == null || allowedValuesStr != null || itemDef.isIsCollection() != type.isCollection()) {
                // we have to clone this type definition into a new one
                String name = itemDef.getName();
                String namespace = dmnModel.getNamespace();
                String id = itemDef.getId();
                BaseDMNTypeImpl baseType = type;
                Type baseFEELType = type.getFeelType();
                if (baseFEELType instanceof BuiltInType) {
                    // Then it is an ItemDefinition in place for "aliasing" a base FEEL type, for having type(itemDefname) I need to define its SimpleType.
                    baseFEELType = new AliasFEELType(itemDef.getName(), (BuiltInType) baseFEELType);
                }
                List<UnaryTest> av = null;
                if (allowedValuesStr != null) {
                    av = ctx.getFeelHelper().evaluateUnaryTests(ctx, allowedValuesStr.getText(), dmnModel, itemDef, Msg.ERR_COMPILING_ALLOWED_VALUES_LIST_ON_ITEM_DEF, allowedValuesStr.getText(), node.getName());
                }
                boolean isCollection = itemDef.isIsCollection();
                if (isCollection) {
                    baseFEELType = new GenListType(baseFEELType);
                }
                if (type instanceof CompositeTypeImpl) {
                    CompositeTypeImpl compositeTypeImpl = (CompositeTypeImpl) type;
                    type = new CompositeTypeImpl(namespace, name, id, isCollection, compositeTypeImpl.getFields(), baseType, baseFEELType);
                } else if (type instanceof SimpleTypeImpl) {
                    type = new SimpleTypeImpl(namespace, name, id, isCollection, av, baseType, baseFEELType);
                }
                if (topLevel != null) {
                    ((BaseDMNTypeImpl) type).setBelongingType(topLevel);
                }
            }
            if (topLevel == null) {
                DMNType registered = dmnModel.getTypeRegistry().registerType(type);
                if (registered != type) {
                    MsgUtil.reportMessage(logger, DMNMessage.Severity.ERROR, itemDef, dmnModel, null, null, Msg.DUPLICATED_ITEM_DEFINITION, itemDef.getName());
                }
            }
        }
    } else if (itemDef.getItemComponent() != null && itemDef.getItemComponent().size() > 0) {
        // first, locate preregistered or create anonymous inner composite
        if (topLevel == null) {
            type = (CompositeTypeImpl) dmnModel.getTypeRegistry().resolveType(dmnModel.getNamespace(), itemDef.getName());
        } else {
            DMNCompilerHelper.checkVariableName(dmnModel, itemDef, itemDef.getName());
            type = new CompositeTypeImpl(dmnModel.getNamespace(), itemDef.getName(), itemDef.getId(), itemDef.isIsCollection());
            ((BaseDMNTypeImpl) type).setBelongingType(topLevel);
        }
        // second, add fields to located composite
        for (ItemDefinition fieldDef : itemDef.getItemComponent()) {
            DMNCompilerHelper.checkVariableName(dmnModel, fieldDef, fieldDef.getName());
            DMNType fieldType = buildTypeDef(ctx, dmnModel, node, fieldDef, type);
            fieldType = fieldType != null ? fieldType : dmnModel.getTypeRegistry().unknown();
            ((CompositeTypeImpl) type).addField(fieldDef.getName(), fieldType);
        }
    } else if (isFunctionItem(itemDef)) {
        FunctionItem fi = itemDef.getFunctionItem();
        String name = itemDef.getName();
        String namespace = dmnModel.getNamespace();
        String id = itemDef.getId();
        Map<String, DMNType> params = new HashMap<>();
        for (InformationItem p : fi.getParameters()) {
            DMNType resolveTypeRef = resolveTypeRef(dmnModel, itemDef, itemDef, p.getTypeRef());
            params.put(p.getName(), resolveTypeRef);
        }
        DMNType returnType = resolveTypeRef(dmnModel, itemDef, itemDef, fi.getOutputTypeRef());
        List<Type> feelPs = fi.getParameters().stream().map(InformationItem::getName).map(n -> ((BaseDMNTypeImpl) params.get(n)).getFeelType()).collect(Collectors.toList());
        GenFnType feeltype = new GenFnType(feelPs, ((BaseDMNTypeImpl) returnType).getFeelType());
        type = new SimpleFnTypeImpl(namespace, name, id, feeltype, params, returnType, fi);
        DMNType registered = dmnModel.getTypeRegistry().registerType(type);
        if (registered != type) {
            MsgUtil.reportMessage(logger, DMNMessage.Severity.ERROR, itemDef, dmnModel, null, null, Msg.DUPLICATED_ITEM_DEFINITION, itemDef.getName());
        }
    } else {
        DMNType unknown = (BaseDMNTypeImpl) resolveTypeRef(dmnModel, itemDef, itemDef, null);
        type = new SimpleTypeImpl(dmnModel.getNamespace(), itemDef.getName(), itemDef.getId(), itemDef.isIsCollection(), null, unknown, ((BaseDMNTypeImpl) unknown).getFeelType());
        if (topLevel == null) {
            DMNType registered = dmnModel.getTypeRegistry().registerType(type);
            if (registered != type) {
                MsgUtil.reportMessage(logger, DMNMessage.Severity.ERROR, itemDef, dmnModel, null, null, Msg.DUPLICATED_ITEM_DEFINITION, itemDef.getName());
            }
        } else {
            ((BaseDMNTypeImpl) type).setBelongingType(topLevel);
        }
    }
    return type;
}
Also used : DMNModelInstrumentedBase(org.kie.dmn.model.api.DMNModelInstrumentedBase) DecisionTable(org.kie.dmn.model.api.DecisionTable) DMNElementReference(org.kie.dmn.model.api.DMNElementReference) DMNMessage(org.kie.dmn.api.core.DMNMessage) ListIterator(java.util.ListIterator) URL(java.net.URL) SimpleFnTypeImpl(org.kie.dmn.core.impl.SimpleFnTypeImpl) FEELProfile(org.kie.dmn.feel.lang.FEELProfile) URISyntaxException(java.net.URISyntaxException) ResourceFactory(org.kie.internal.io.ResourceFactory) LoggerFactory(org.slf4j.LoggerFactory) ItemDefNodeImpl(org.kie.dmn.core.ast.ItemDefNodeImpl) Either(org.kie.dmn.feel.util.Either) FileSystemResource(org.drools.core.io.impl.FileSystemResource) SimpleTypeImpl(org.kie.dmn.core.impl.SimpleTypeImpl) DMNCompiler(org.kie.dmn.api.core.DMNCompiler) TInformationItem(org.kie.dmn.model.v1_1.TInformationItem) Matcher(java.util.regex.Matcher) DMNModel(org.kie.dmn.api.core.DMNModel) Map(java.util.Map) URI(java.net.URI) DMNCompilerConfiguration(org.kie.dmn.api.core.DMNCompilerConfiguration) DMNFactory(org.kie.dmn.core.api.DMNFactory) UnaryTest(org.kie.dmn.feel.runtime.UnaryTest) ImportType(org.kie.dmn.core.compiler.ImportDMNResolverUtil.ImportType) DecisionServices(org.kie.dmn.model.v1_1.extensions.DecisionServices) DMNNode(org.kie.dmn.api.core.ast.DMNNode) BusinessKnowledgeModelNodeImpl(org.kie.dmn.core.ast.BusinessKnowledgeModelNodeImpl) Collection(java.util.Collection) BaseDMNTypeImpl(org.kie.dmn.core.impl.BaseDMNTypeImpl) BuiltInType(org.kie.dmn.feel.lang.types.BuiltInType) OutputClause(org.kie.dmn.model.api.OutputClause) Set(java.util.Set) DMNModelImpl(org.kie.dmn.core.impl.DMNModelImpl) Import(org.kie.dmn.model.api.Import) ItemDefNode(org.kie.dmn.api.core.ast.ItemDefNode) Reader(java.io.Reader) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) BusinessKnowledgeModelNode(org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode) FunctionItem(org.kie.dmn.model.api.FunctionItem) Resource(org.kie.api.io.Resource) List(java.util.List) NamedElement(org.kie.dmn.model.api.NamedElement) Entry(java.util.Map.Entry) ItemDefinition(org.kie.dmn.model.api.ItemDefinition) Optional(java.util.Optional) InputDataNode(org.kie.dmn.api.core.ast.InputDataNode) Pattern(java.util.regex.Pattern) QName(javax.xml.namespace.QName) InformationItem(org.kie.dmn.model.api.InformationItem) DMNMarshaller(org.kie.dmn.api.marshalling.DMNMarshaller) AliasFEELType(org.kie.dmn.feel.lang.types.AliasFEELType) GenListType(org.kie.dmn.feel.lang.types.GenListType) MsgUtil(org.kie.dmn.core.util.MsgUtil) DMNType(org.kie.dmn.api.core.DMNType) GenFnType(org.kie.dmn.feel.lang.types.GenFnType) HashMap(java.util.HashMap) Deque(java.util.Deque) Function(java.util.function.Function) Definitions(org.kie.dmn.model.api.Definitions) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) DecisionServiceNodeImpl(org.kie.dmn.core.ast.DecisionServiceNodeImpl) DecisionNode(org.kie.dmn.api.core.ast.DecisionNode) DMNMarshallerFactory(org.kie.dmn.backend.marshalling.v1x.DMNMarshallerFactory) DMNBaseNode(org.kie.dmn.core.ast.DMNBaseNode) Decision(org.kie.dmn.model.api.Decision) LinkedList(java.util.LinkedList) XMLConstants(javax.xml.XMLConstants) Type(org.kie.dmn.feel.lang.Type) Logger(org.slf4j.Logger) InformationRequirement(org.kie.dmn.model.api.InformationRequirement) KnowledgeRequirement(org.kie.dmn.model.api.KnowledgeRequirement) IOException(java.io.IOException) DMNExtensionRegister(org.kie.dmn.api.marshalling.DMNExtensionRegister) Consumer(java.util.function.Consumer) DMNImportPMMLInfo(org.kie.dmn.core.pmml.DMNImportPMMLInfo) UnaryTests(org.kie.dmn.model.api.UnaryTests) DecisionServiceNode(org.kie.dmn.api.core.ast.DecisionServiceNode) CompositeTypeImpl(org.kie.dmn.core.impl.CompositeTypeImpl) DRGElement(org.kie.dmn.model.api.DRGElement) Msg(org.kie.dmn.core.util.Msg) Collections(java.util.Collections) DecisionService(org.kie.dmn.model.api.DecisionService) InputStream(java.io.InputStream) DecisionNodeImpl(org.kie.dmn.core.ast.DecisionNodeImpl) HashMap(java.util.HashMap) ItemDefinition(org.kie.dmn.model.api.ItemDefinition) TInformationItem(org.kie.dmn.model.v1_1.TInformationItem) InformationItem(org.kie.dmn.model.api.InformationItem) BaseDMNTypeImpl(org.kie.dmn.core.impl.BaseDMNTypeImpl) BuiltInType(org.kie.dmn.feel.lang.types.BuiltInType) SimpleFnTypeImpl(org.kie.dmn.core.impl.SimpleFnTypeImpl) UnaryTest(org.kie.dmn.feel.runtime.UnaryTest) ImportType(org.kie.dmn.core.compiler.ImportDMNResolverUtil.ImportType) BuiltInType(org.kie.dmn.feel.lang.types.BuiltInType) AliasFEELType(org.kie.dmn.feel.lang.types.AliasFEELType) GenListType(org.kie.dmn.feel.lang.types.GenListType) DMNType(org.kie.dmn.api.core.DMNType) GenFnType(org.kie.dmn.feel.lang.types.GenFnType) Type(org.kie.dmn.feel.lang.Type) SimpleTypeImpl(org.kie.dmn.core.impl.SimpleTypeImpl) GenListType(org.kie.dmn.feel.lang.types.GenListType) GenFnType(org.kie.dmn.feel.lang.types.GenFnType) AliasFEELType(org.kie.dmn.feel.lang.types.AliasFEELType) FunctionItem(org.kie.dmn.model.api.FunctionItem) UnaryTests(org.kie.dmn.model.api.UnaryTests) CompositeTypeImpl(org.kie.dmn.core.impl.CompositeTypeImpl) DMNType(org.kie.dmn.api.core.DMNType)

Example 19 with UnaryTests

use of org.kie.dmn.model.api.UnaryTests in project drools by kiegroup.

the class ExpressionConverter method writeAttributes.

@Override
protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
    super.writeAttributes(writer, parent);
    Expression e = (Expression) parent;
    if (!(e instanceof UnaryTests) && e.getTypeRef() != null) {
        writer.addAttribute(TYPE_REF, MarshallingUtils.formatQName(e.getTypeRef()));
    }
}
Also used : Expression(org.kie.dmn.model.api.Expression) UnaryTests(org.kie.dmn.model.api.UnaryTests)

Example 20 with UnaryTests

use of org.kie.dmn.model.api.UnaryTests in project drools by kiegroup.

the class DecisionRuleConverter method writeChildren.

@Override
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
    super.writeChildren(writer, context, parent);
    DecisionRule dr = (DecisionRule) parent;
    for (UnaryTests ie : dr.getInputEntry()) {
        writeChildrenNode(writer, context, ie, INPUT_ENTRY);
    }
    for (LiteralExpression oe : dr.getOutputEntry()) {
        writeChildrenNode(writer, context, oe, OUTPUT_ENTRY);
    }
}
Also used : LiteralExpression(org.kie.dmn.model.api.LiteralExpression) UnaryTests(org.kie.dmn.model.api.UnaryTests) DecisionRule(org.kie.dmn.model.api.DecisionRule) TDecisionRule(org.kie.dmn.model.v1_1.TDecisionRule)

Aggregations

UnaryTests (org.kie.dmn.model.api.UnaryTests)27 LiteralExpression (org.kie.dmn.model.api.LiteralExpression)9 DecisionRule (org.kie.dmn.model.api.DecisionRule)5 TUnaryTests (org.kie.dmn.model.v1_2.TUnaryTests)5 Expression (org.kie.dmn.model.api.Expression)4 RuleAnnotation (org.kie.dmn.model.api.RuleAnnotation)3 TUnaryTests (org.kie.dmn.model.v1_1.TUnaryTests)3 ArrayList (java.util.ArrayList)2 Collections (java.util.Collections)2 List (java.util.List)2 Entry (java.util.Map.Entry)2 Optional (java.util.Optional)2 UUID (java.util.UUID)2 Collectors (java.util.stream.Collectors)2 QName (javax.xml.namespace.QName)2 Resource (org.kie.api.io.Resource)2 DMNMessage (org.kie.dmn.api.core.DMNMessage)2 DMNType (org.kie.dmn.api.core.DMNType)2 TUnaryTests (org.kie.dmn.model.v1_3.TUnaryTests)2 TUnaryTests (org.kie.dmn.model.v1_4.TUnaryTests)2