Search in sources :

Example 36 with ItemDefinition

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

the class ItemDefinitionDependenciesTest method build.

private ItemDefinition build(final String name, final ItemDefinition... components) {
    final ItemDefinition res = new TItemDefinition();
    res.setName(name);
    for (final ItemDefinition ic : components) {
        addComponent(res, ic.getName());
    }
    return res;
}
Also used : TItemDefinition(org.kie.dmn.model.v1_1.TItemDefinition) ItemDefinition(org.kie.dmn.model.api.ItemDefinition) TItemDefinition(org.kie.dmn.model.v1_1.TItemDefinition)

Example 37 with ItemDefinition

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

the class ItemDefinitionDependenciesTest method testOrdering1.

@Test
public void testOrdering1() {
    final ItemDefinition tCollateralRiskCategory = build("tCollateralRiskCategory");
    final ItemDefinition tCreditRiskCategory = build("tCreditRiskCategory");
    final ItemDefinition tAffordabilityCategory = build("tAffordabilityCategory");
    final ItemDefinition tLoanRecommendation = build("tLoanRecommendation");
    final ItemDefinition tLoan = build("tLoan");
    final ItemDefinition tAge = build("tAge");
    final ItemDefinition temploementStatus = build("temploementStatus");
    final ItemDefinition tCreditScore = build("tCreditScore");
    final ItemDefinition tRiskCategory = build("tRiskCategory");
    final ItemDefinition tIncomeRisk = build("tIncomeRisk");
    final ItemDefinition tBorrowe = build("tBorrowe", tAge, temploementStatus);
    final ItemDefinition tPrequalification = build("tPrequalification");
    final List<ItemDefinition> originalList = Arrays.asList(tCollateralRiskCategory, tCreditRiskCategory, tAffordabilityCategory, tLoanRecommendation, tLoan, tAge, temploementStatus, tCreditScore, tRiskCategory, tIncomeRisk, tBorrowe, tPrequalification);
    final List<ItemDefinition> orderedList = orderingStrategy(originalList);
    assertTrue("Index of tAge < tBorrowe", orderedList.indexOf(tAge) < orderedList.indexOf(tBorrowe));
    assertTrue("Index of temploementStatus < tBorrowe", orderedList.indexOf(temploementStatus) < orderedList.indexOf(tBorrowe));
}
Also used : ItemDefinition(org.kie.dmn.model.api.ItemDefinition) TItemDefinition(org.kie.dmn.model.v1_1.TItemDefinition) Test(org.junit.Test)

Example 38 with ItemDefinition

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

the class ItemDefinitionDependenciesTest method testOrdering2.

@Test
public void testOrdering2() {
    final ItemDefinition tMortgageType = build("tMortgageType");
    final ItemDefinition tObjective = build("tObjective");
    final ItemDefinition tRequested = build("tRequested", tMortgageType, tObjective);
    final ItemDefinition tProduct = build("tProduct");
    final ItemDefinition tProductCollection = build("tProductCollection", tProduct);
    final ItemDefinition tConformanceType = build("tConformanceType");
    final ItemDefinition tLoanTypes = build("tLoanTypes", tMortgageType, tConformanceType);
    final List<ItemDefinition> originalList = Arrays.asList(tRequested, tProduct, tProductCollection, tMortgageType, tObjective, tConformanceType, tLoanTypes);
    final List<ItemDefinition> orderedList = orderingStrategy(originalList);
    assertTrue("Index of tMortgageType < tRequested", orderedList.indexOf(tMortgageType) < orderedList.indexOf(tRequested));
    assertTrue("Index of tObjective < tRequested", orderedList.indexOf(tObjective) < orderedList.indexOf(tRequested));
    assertTrue("Index of tProduct < tProductCollection", orderedList.indexOf(tProduct) < orderedList.indexOf(tProductCollection));
    assertTrue("Index of tMortgageType < tLoanTypes", orderedList.indexOf(tMortgageType) < orderedList.indexOf(tLoanTypes));
    assertTrue("Index of tConformanceType < tLoanTypes", orderedList.indexOf(tConformanceType) < orderedList.indexOf(tLoanTypes));
}
Also used : ItemDefinition(org.kie.dmn.model.api.ItemDefinition) TItemDefinition(org.kie.dmn.model.v1_1.TItemDefinition) Test(org.junit.Test)

Example 39 with ItemDefinition

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

the class ItemDefinitionDependenciesTest method testOrdering3.

@Test
public void testOrdering3() {
    final ItemDefinition tNumberList = build("tNumberList");
    final ItemDefinition tTax = build("tTax");
    final ItemDefinition tStateModel = build("tStateModel");
    final ItemDefinition tTaxList = build("tTaxList", tTax);
    final ItemDefinition tCategory = build("tCategory");
    final ItemDefinition tItem = build("tItem", tCategory);
    final ItemDefinition tItemList = build("tItemList", tItem);
    final ItemDefinition tOrder = build("tOrder", tItemList);
    final List<ItemDefinition> originalList = Arrays.asList(tOrder, tItem, tCategory, tNumberList, tItemList, tTax, tStateModel, tTaxList);
    final List<ItemDefinition> orderedList = orderingStrategy(originalList);
    assertTrue("Index of tCategory < tItem", orderedList.indexOf(tCategory) < orderedList.indexOf(tItem));
    assertTrue("Index of tItem < tItemList", orderedList.indexOf(tItem) < orderedList.indexOf(tItemList));
    assertTrue("Index of tItemList < tOrder", orderedList.indexOf(tItemList) < orderedList.indexOf(tOrder));
    assertTrue("Index of tTax < tTaxList", orderedList.indexOf(tTax) < orderedList.indexOf(tTaxList));
}
Also used : ItemDefinition(org.kie.dmn.model.api.ItemDefinition) TItemDefinition(org.kie.dmn.model.v1_1.TItemDefinition) Test(org.junit.Test)

Example 40 with ItemDefinition

use of org.kie.dmn.model.api.ItemDefinition 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)

Aggregations

ItemDefinition (org.kie.dmn.model.api.ItemDefinition)50 TItemDefinition (org.kie.dmn.model.v1_1.TItemDefinition)19 Test (org.junit.Test)15 QName (javax.xml.namespace.QName)13 Definitions (org.kie.dmn.model.api.Definitions)13 ArrayList (java.util.ArrayList)10 DRGElement (org.kie.dmn.model.api.DRGElement)9 List (java.util.List)7 Collectors (java.util.stream.Collectors)7 Artifact (org.kie.dmn.model.api.Artifact)7 BusinessContextElement (org.kie.dmn.model.api.BusinessContextElement)7 Decision (org.kie.dmn.model.api.Decision)7 Import (org.kie.dmn.model.api.Import)7 Collection (java.util.Collection)6 TItemDefinition (org.kie.dmn.model.v1_2.TItemDefinition)6 Logger (org.slf4j.Logger)6 LoggerFactory (org.slf4j.LoggerFactory)6 DecisionService (org.kie.dmn.model.api.DecisionService)5 HashMap (java.util.HashMap)4 HashSet (java.util.HashSet)4