Search in sources :

Example 1 with JSITAuthorityRequirement

use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement in project kie-wb-common by kiegroup.

the class BusinessKnowledgeModelConverter method dmnFromNode.

@Override
@SuppressWarnings("unchecked")
public JSITBusinessKnowledgeModel dmnFromNode(final Node<View<BusinessKnowledgeModel>, ?> node, final Consumer<JSITComponentWidths> componentWidthsConsumer) {
    final BusinessKnowledgeModel source = (BusinessKnowledgeModel) DefinitionUtils.getElementDefinition(node);
    final JSITBusinessKnowledgeModel result = new JSITBusinessKnowledgeModel();
    result.setId(source.getId().getValue());
    final Optional<String> description = Optional.ofNullable(DescriptionPropertyConverter.dmnFromWB(source.getDescription()));
    description.ifPresent(result::setDescription);
    result.setName(source.getName().getValue());
    // Add because it is present in the original JSON when unmarshalling
    if (Objects.isNull(result.getKnowledgeRequirement())) {
        result.setKnowledgeRequirement(new ArrayList<>());
    }
    // Add because it is present in the original JSON when unmarshalling
    if (Objects.isNull(result.getAuthorityRequirement())) {
        result.setAuthorityRequirement(new ArrayList<>());
    }
    DMNExternalLinksToExtensionElements.loadExternalLinksIntoExtensionElements(source, result);
    final JSITInformationItem variable = InformationItemPrimaryPropertyConverter.dmnFromWB(source.getVariable(), source);
    result.setVariable(variable);
    final JSITFunctionDefinition functionDefinition = FunctionDefinitionPropertyConverter.dmnFromWB(source.getEncapsulatedLogic(), componentWidthsConsumer);
    final FunctionDefinition wbFunctionDefinition = source.getEncapsulatedLogic();
    if (Objects.nonNull(wbFunctionDefinition)) {
        final String uuid = wbFunctionDefinition.getId().getValue();
        if (Objects.nonNull(uuid)) {
            final JSITComponentWidths componentWidths = new JSITComponentWidths();
            componentWidths.setDmnElementRef(uuid);
            source.getEncapsulatedLogic().getComponentWidths().stream().filter(Objects::nonNull).forEach(w -> componentWidths.addWidth(new Float(w)));
            componentWidthsConsumer.accept(componentWidths);
        }
    }
    result.setEncapsulatedLogic(functionDefinition);
    // DMN spec table 2: Requirements connection rules
    final List<Edge<?, ?>> inEdges = (List<Edge<?, ?>>) node.getInEdges();
    for (Edge<?, ?> e : inEdges) {
        final Node<?, ?> sourceNode = e.getSourceNode();
        if (sourceNode.getContent() instanceof View<?>) {
            final View<?> view = (View<?>) sourceNode.getContent();
            if (view.getDefinition() instanceof DRGElement) {
                final DRGElement drgElement = (DRGElement) view.getDefinition();
                if (drgElement instanceof BusinessKnowledgeModel) {
                    final JSITKnowledgeRequirement iReq = new JSITKnowledgeRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredKnowledge(ri);
                    result.addKnowledgeRequirement(iReq);
                } else if (drgElement instanceof KnowledgeSource) {
                    final JSITAuthorityRequirement iReq = new JSITAuthorityRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredAuthority(ri);
                    result.addAuthorityRequirement(iReq);
                } else if (drgElement instanceof DecisionService) {
                    if (e.getContent() instanceof View && ((View) e.getContent()).getDefinition() instanceof KnowledgeRequirement) {
                        final JSITKnowledgeRequirement iReq = new JSITKnowledgeRequirement();
                        iReq.setId(getRawId(e.getUUID()));
                        final JSITDMNElementReference ri = new JSITDMNElementReference();
                        ri.setHref(getHref(drgElement));
                        iReq.setRequiredKnowledge(ri);
                        result.addKnowledgeRequirement(iReq);
                    } else {
                        throw new UnsupportedOperationException("wrong model definition.");
                    }
                } else {
                    throw new UnsupportedOperationException("wrong model definition.");
                }
            }
        }
    }
    return result;
}
Also used : JSITInformationItem(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationItem) DecisionService(org.kie.workbench.common.dmn.api.definition.model.DecisionService) JSITBusinessKnowledgeModel(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITBusinessKnowledgeModel) KnowledgeSource(org.kie.workbench.common.dmn.api.definition.model.KnowledgeSource) JSITAuthorityRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement) FunctionDefinition(org.kie.workbench.common.dmn.api.definition.model.FunctionDefinition) JSITFunctionDefinition(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITFunctionDefinition) ArrayList(java.util.ArrayList) List(java.util.List) JSITComponentWidths(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.kie.JSITComponentWidths) JSITFunctionDefinition(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITFunctionDefinition) JSITDMNElementReference(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDMNElementReference) View(org.kie.workbench.common.stunner.core.graph.content.view.View) KnowledgeRequirement(org.kie.workbench.common.dmn.api.definition.model.KnowledgeRequirement) JSITKnowledgeRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeRequirement) JSITKnowledgeRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeRequirement) BusinessKnowledgeModel(org.kie.workbench.common.dmn.api.definition.model.BusinessKnowledgeModel) JSITBusinessKnowledgeModel(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITBusinessKnowledgeModel) Edge(org.kie.workbench.common.stunner.core.graph.Edge) DRGElement(org.kie.workbench.common.dmn.api.definition.model.DRGElement)

Example 2 with JSITAuthorityRequirement

use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement in project kie-wb-common by kiegroup.

the class DecisionConverter method dmnFromNode.

@Override
@SuppressWarnings("unchecked")
public JSITDecision dmnFromNode(final Node<View<Decision>, ?> node, final Consumer<JSITComponentWidths> componentWidthsConsumer) {
    final Decision source = (Decision) DefinitionUtils.getElementDefinition(node);
    final JSITDecision d = new JSITDecision();
    d.setId(source.getId().getValue());
    final Optional<String> description = Optional.ofNullable(DescriptionPropertyConverter.dmnFromWB(source.getDescription()));
    description.ifPresent(d::setDescription);
    d.setName(source.getName().getValue());
    final JSITInformationItem variable = InformationItemPrimaryPropertyConverter.dmnFromWB(source.getVariable(), source);
    d.setVariable(variable);
    final JSITExpression expression = ExpressionPropertyConverter.dmnFromWB(source.getExpression(), componentWidthsConsumer);
    d.setExpression(expression);
    final String question = QuestionPropertyConverter.dmnFromWB(source.getQuestion());
    if (!StringUtils.isEmpty(question)) {
        d.setQuestion(question);
    }
    final String allowedAnswers = AllowedAnswersPropertyConverter.dmnFromWB(source.getAllowedAnswers());
    if (!StringUtils.isEmpty(allowedAnswers)) {
        d.setAllowedAnswers(allowedAnswers);
    }
    // Add because it is present in the original JSON when unmarshalling
    if (Objects.isNull(d.getInformationRequirement())) {
        d.setInformationRequirement(new ArrayList<>());
    }
    // Add because it is present in the original JSON when unmarshalling
    if (Objects.isNull(d.getKnowledgeRequirement())) {
        d.setKnowledgeRequirement(new ArrayList<>());
    }
    // Add because it is present in the original JSON when unmarshalling
    if (Objects.isNull(d.getAuthorityRequirement())) {
        d.setAuthorityRequirement(new ArrayList<>());
    }
    // DMN spec table 2: Requirements connection rules
    final List<Edge<?, ?>> inEdges = (List<Edge<?, ?>>) node.getInEdges();
    for (Edge<?, ?> e : inEdges) {
        final Node<?, ?> sourceNode = e.getSourceNode();
        if (sourceNode.getContent() instanceof View<?>) {
            final View<?> view = (View<?>) sourceNode.getContent();
            if (view.getDefinition() instanceof DRGElement) {
                final DRGElement drgElement = (DRGElement) view.getDefinition();
                if (drgElement instanceof Decision) {
                    final JSITInformationRequirement iReq = new JSITInformationRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredDecision(ri);
                    d.addInformationRequirement(iReq);
                } else if (drgElement instanceof BusinessKnowledgeModel) {
                    final JSITKnowledgeRequirement iReq = new JSITKnowledgeRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredKnowledge(ri);
                    d.addKnowledgeRequirement(iReq);
                } else if (drgElement instanceof KnowledgeSource) {
                    final JSITAuthorityRequirement iReq = new JSITAuthorityRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredAuthority(ri);
                    d.addAuthorityRequirement(iReq);
                } else if (drgElement instanceof InputData) {
                    final JSITInformationRequirement iReq = new JSITInformationRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredInput(ri);
                    d.addInformationRequirement(iReq);
                } else if (drgElement instanceof DecisionService) {
                    if (e.getContent() instanceof Child) {
                    // Stunner relationship of this Decision be encapsulated by the DecisionService, not managed here.
                    } else if (e.getContent() instanceof View && ((View) e.getContent()).getDefinition() instanceof KnowledgeRequirement) {
                        final JSITKnowledgeRequirement iReq = new JSITKnowledgeRequirement();
                        iReq.setId(getRawId(e.getUUID()));
                        final JSITDMNElementReference ri = new JSITDMNElementReference();
                        ri.setHref(getHref(drgElement));
                        iReq.setRequiredKnowledge(ri);
                        d.addKnowledgeRequirement(iReq);
                    } else {
                        throw new UnsupportedOperationException("wrong model definition.");
                    }
                } else {
                    throw new UnsupportedOperationException("wrong model definition.");
                }
            }
        }
    }
    DMNExternalLinksToExtensionElements.loadExternalLinksIntoExtensionElements(source, d);
    return d;
}
Also used : JSITInformationItem(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationItem) JSITDecision(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDecision) DecisionService(org.kie.workbench.common.dmn.api.definition.model.DecisionService) KnowledgeSource(org.kie.workbench.common.dmn.api.definition.model.KnowledgeSource) JSITAuthorityRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement) ArrayList(java.util.ArrayList) List(java.util.List) InputData(org.kie.workbench.common.dmn.api.definition.model.InputData) Child(org.kie.workbench.common.stunner.core.graph.content.relationship.Child) JSITInformationRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationRequirement) Id(org.kie.workbench.common.dmn.api.property.dmn.Id) IdUtils.getRawId(org.kie.workbench.common.dmn.client.marshaller.common.IdUtils.getRawId) BindableAdapterUtils.getDefinitionId(org.kie.workbench.common.stunner.core.definition.adapter.binding.BindableAdapterUtils.getDefinitionId) Child(org.kie.workbench.common.stunner.core.graph.content.relationship.Child) JSITDMNElementReference(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDMNElementReference) View(org.kie.workbench.common.stunner.core.graph.content.view.View) JSITDecision(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDecision) Decision(org.kie.workbench.common.dmn.api.definition.model.Decision) KnowledgeRequirement(org.kie.workbench.common.dmn.api.definition.model.KnowledgeRequirement) JSITKnowledgeRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeRequirement) JSITKnowledgeRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeRequirement) BusinessKnowledgeModel(org.kie.workbench.common.dmn.api.definition.model.BusinessKnowledgeModel) JSITExpression(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITExpression) Edge(org.kie.workbench.common.stunner.core.graph.Edge) DRGElement(org.kie.workbench.common.dmn.api.definition.model.DRGElement)

Example 3 with JSITAuthorityRequirement

use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement in project kie-wb-common by kiegroup.

the class NodeConnector method connect.

void connect(final JSIDMNDiagram dmnDiagram, final List<JSIDMNEdge> edges, final List<JSITAssociation> associations, final List<NodeEntry> nodeEntries, final boolean isDMNDIPresent) {
    final Map<String, List<NodeEntry>> entriesById = makeNodeIndex(nodeEntries);
    final String diagramId = dmnDiagram.getId();
    for (final NodeEntry nodeEntry : nodeEntries) {
        final JSITDMNElement element = nodeEntry.getDmnElement();
        final Node node = nodeEntry.getNode();
        // For imported nodes, we don't have its connections
        if (nodeEntry.isIncluded()) {
            continue;
        }
        // DMN spec table 2: Requirements
        if (JSITDecision.instanceOf(element)) {
            final JSITDecision decision = Js.uncheckedCast(element);
            final List<JSITInformationRequirement> jsiInformationRequirements = decision.getInformationRequirement();
            for (int i = 0; i < jsiInformationRequirements.size(); i++) {
                final JSITInformationRequirement ir = Js.uncheckedCast(jsiInformationRequirements.get(i));
                connectEdgeToNodes(INFO_REQ_ID, ir, ir.getRequiredInput(), entriesById, diagramId, edges, isDMNDIPresent, node);
                connectEdgeToNodes(INFO_REQ_ID, ir, ir.getRequiredDecision(), entriesById, diagramId, edges, isDMNDIPresent, node);
            }
            final List<JSITKnowledgeRequirement> jsiKnowledgeRequirements = decision.getKnowledgeRequirement();
            for (int i = 0; i < jsiKnowledgeRequirements.size(); i++) {
                final JSITKnowledgeRequirement kr = Js.uncheckedCast(jsiKnowledgeRequirements.get(i));
                connectEdgeToNodes(KNOWLEDGE_REQ_ID, kr, kr.getRequiredKnowledge(), entriesById, diagramId, edges, isDMNDIPresent, node);
            }
            final List<JSITAuthorityRequirement> jsiAuthorityRequirements = decision.getAuthorityRequirement();
            for (int i = 0; i < jsiAuthorityRequirements.size(); i++) {
                final JSITAuthorityRequirement ar = Js.uncheckedCast(jsiAuthorityRequirements.get(i));
                connectEdgeToNodes(AUTH_REQ_ID, ar, ar.getRequiredAuthority(), entriesById, diagramId, edges, isDMNDIPresent, node);
            }
            continue;
        }
        if (JSITBusinessKnowledgeModel.instanceOf(element)) {
            final JSITBusinessKnowledgeModel bkm = Js.uncheckedCast(element);
            final List<JSITKnowledgeRequirement> jsiKnowledgeRequirements = bkm.getKnowledgeRequirement();
            for (int i = 0; i < jsiKnowledgeRequirements.size(); i++) {
                final JSITKnowledgeRequirement kr = Js.uncheckedCast(jsiKnowledgeRequirements.get(i));
                connectEdgeToNodes(KNOWLEDGE_REQ_ID, kr, kr.getRequiredKnowledge(), entriesById, diagramId, edges, isDMNDIPresent, node);
            }
            final List<JSITAuthorityRequirement> jsiAuthorityRequirements = bkm.getAuthorityRequirement();
            for (int i = 0; i < jsiAuthorityRequirements.size(); i++) {
                final JSITAuthorityRequirement ar = Js.uncheckedCast(jsiAuthorityRequirements.get(i));
                connectEdgeToNodes(AUTH_REQ_ID, ar, ar.getRequiredAuthority(), entriesById, diagramId, edges, isDMNDIPresent, node);
            }
            continue;
        }
        if (JSITKnowledgeSource.instanceOf(element)) {
            final JSITKnowledgeSource ks = Js.uncheckedCast(element);
            final List<JSITAuthorityRequirement> jsiAuthorityRequirements = ks.getAuthorityRequirement();
            for (int i = 0; i < jsiAuthorityRequirements.size(); i++) {
                final JSITAuthorityRequirement ar = Js.uncheckedCast(jsiAuthorityRequirements.get(i));
                connectEdgeToNodes(AUTH_REQ_ID, ar, ar.getRequiredInput(), entriesById, diagramId, edges, isDMNDIPresent, node);
                connectEdgeToNodes(AUTH_REQ_ID, ar, ar.getRequiredDecision(), entriesById, diagramId, edges, isDMNDIPresent, node);
                connectEdgeToNodes(AUTH_REQ_ID, ar, ar.getRequiredAuthority(), entriesById, diagramId, edges, isDMNDIPresent, node);
            }
            continue;
        }
        if (JSITDecisionService.instanceOf(element)) {
            final JSITDecisionService ds = Js.uncheckedCast(element);
            final List<JSITDMNElementReference> encapsulatedDecisions = ds.getEncapsulatedDecision();
            forEach(encapsulatedDecisions, er -> {
                final String reqInputID = getId(er);
                getNode(nodeEntry, reqInputID, entriesById).ifPresent(requiredNode -> {
                    connectDSChildEdge(node, requiredNode);
                });
            });
            final List<JSITDMNElementReference> outputDecisions = ds.getOutputDecision();
            forEach(outputDecisions, er -> {
                final String reqInputID = getId(er);
                getNode(nodeEntry, reqInputID, entriesById).ifPresent(requiredNode -> {
                    connectDSChildEdge(node, requiredNode);
                });
            });
        }
    }
    forEach(associations, association -> {
        final String sourceId = getId(association.getSourceRef());
        final String targetId = getId(association.getTargetRef());
        final List<NodeEntry> source = entriesById.get(sourceId);
        final List<NodeEntry> target = entriesById.get(targetId);
        final boolean sourcePresent = source != null && source.size() > 0;
        final boolean targetPresent = target != null && target.size() > 0;
        if (sourcePresent && targetPresent) {
            final NodeEntry sourceEntry = source.get(0);
            final NodeEntry targetEntry = target.get(0);
            final Node sourceNode = sourceEntry.getNode();
            final Node targetNode = targetEntry.getNode();
            @SuppressWarnings("unchecked") final Edge<View<Association>, ?> myEdge = (Edge<View<Association>, ?>) factoryManager.newElement(diagramId + "#" + association.getId(), ASSOCIATION_ID).asEdge();
            final ViewConnector connectionContent = (ViewConnector) myEdge.getContent();
            final Id id = new Id(association.getId());
            final Description description = new Description(association.getDescription());
            final Association definition = new Association(id, description);
            connectEdge(myEdge, sourceNode, targetNode);
            connectionContent.setDefinition(definition);
            connectionContent.setTargetConnection(MagnetConnection.Builder.atCenter(targetNode));
            connectionContent.setSourceConnection(MagnetConnection.Builder.atCenter(sourceNode));
        }
    });
}
Also used : JSITKnowledgeSource(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeSource) Description(org.kie.workbench.common.dmn.api.property.dmn.Description) Node(org.kie.workbench.common.stunner.core.graph.Node) JSITDecision(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDecision) JSITBusinessKnowledgeModel(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITBusinessKnowledgeModel) JSITDMNElement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDMNElement) JSITAssociation(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAssociation) Association(org.kie.workbench.common.dmn.api.definition.model.Association) JSITDecisionService(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDecisionService) JSITAuthorityRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement) List(java.util.List) ArrayList(java.util.ArrayList) JSITInformationRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationRequirement) ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) JSITDMNElementReference(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDMNElementReference) View(org.kie.workbench.common.stunner.core.graph.content.view.View) ControlPoint(org.kie.workbench.common.stunner.core.graph.content.view.ControlPoint) JSIPoint(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dc.JSIPoint) JSITKnowledgeRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeRequirement) Id(org.kie.workbench.common.dmn.api.property.dmn.Id) BindableAdapterUtils.getDefinitionId(org.kie.workbench.common.stunner.core.definition.adapter.binding.BindableAdapterUtils.getDefinitionId) Edge(org.kie.workbench.common.stunner.core.graph.Edge) JSIDMNEdge(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmndi12.JSIDMNEdge)

Example 4 with JSITAuthorityRequirement

use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement in project kie-wb-common by kiegroup.

the class DMNMarshallerTest method testMergeNodeRequirements.

@Test
public void testMergeNodeRequirements() {
    final JSITDecision existingNode1 = makeDecision("id1");
    final JSITBusinessKnowledgeModel existingNode2 = makeBusinessKnowledgeModel("id2");
    final JSITKnowledgeSource existingNode3 = makeKnowledgeSource("id3");
    final JSITDecision node1 = makeDecision("id1");
    final JSITBusinessKnowledgeModel node2 = makeBusinessKnowledgeModel("id2");
    final JSITKnowledgeSource node3 = makeKnowledgeSource("id3");
    final JSITBusinessKnowledgeModel node4 = makeBusinessKnowledgeModel("id4");
    final JSITKnowledgeSource node5 = makeKnowledgeSource("id5");
    final DMNMarshaller dmnMarshaller = spy(new DMNMarshaller());
    final JSITAuthorityRequirement node1AuthorityRequirement = mock(JSITAuthorityRequirement.class);
    final JSITInformationRequirement node1InformationRequirement = mock(JSITInformationRequirement.class);
    final JSITKnowledgeRequirement node1KnowledgeRequirement = mock(JSITKnowledgeRequirement.class);
    final JSITAuthorityRequirement node2AuthorityRequirement = mock(JSITAuthorityRequirement.class);
    final JSITKnowledgeRequirement node2KnowledgeRequirement = mock(JSITKnowledgeRequirement.class);
    final JSITAuthorityRequirement node3AuthorityRequirement = mock(JSITAuthorityRequirement.class);
    final List<JSITAuthorityRequirement> node1ExistingAuthorityRequirement = new ArrayList<>();
    final List<JSITInformationRequirement> node1ExistingInformationRequirement = new ArrayList<>();
    final List<JSITKnowledgeRequirement> node1ExistingKnowledgeRequirement = new ArrayList<>();
    final List<JSITAuthorityRequirement> node2ExistingAuthorityRequirement = new ArrayList<>();
    final List<JSITKnowledgeRequirement> node2ExistingKnowledgeRequirement = new ArrayList<>();
    final List<JSITAuthorityRequirement> node3ExistingAuthorityRequirement = new ArrayList<>();
    doReturn(node1).when(dmnMarshaller).getWrappedJSITDRGElement(eq(node1), any());
    doReturn(node2).when(dmnMarshaller).getWrappedJSITDRGElement(eq(node2), any());
    doReturn(node3).when(dmnMarshaller).getWrappedJSITDRGElement(eq(node3), any());
    doReturn(node4).when(dmnMarshaller).getWrappedJSITDRGElement(eq(node4), any());
    doReturn(node5).when(dmnMarshaller).getWrappedJSITDRGElement(eq(node5), any());
    doReturn(true).when(dmnMarshaller).instanceOfDecision(eq(node1));
    doReturn(true).when(dmnMarshaller).instanceOfBusinessKnowledgeModel(eq(node2));
    doReturn(true).when(dmnMarshaller).instanceOfKnowledgeSource(eq(node3));
    doReturn(true).when(dmnMarshaller).instanceOfBusinessKnowledgeModel(eq(node4));
    doReturn(true).when(dmnMarshaller).instanceOfKnowledgeSource(eq(node5));
    doReturn(node1ExistingAuthorityRequirement).when(existingNode1).getAuthorityRequirement();
    doReturn(node1ExistingInformationRequirement).when(existingNode1).getInformationRequirement();
    doReturn(node1ExistingKnowledgeRequirement).when(existingNode1).getKnowledgeRequirement();
    doReturn(node2ExistingAuthorityRequirement).when(existingNode2).getAuthorityRequirement();
    doReturn(node2ExistingKnowledgeRequirement).when(existingNode2).getKnowledgeRequirement();
    doReturn(node3ExistingAuthorityRequirement).when(existingNode3).getAuthorityRequirement();
    doReturn(new ArrayList<>(singletonList(node1AuthorityRequirement))).when(node1).getAuthorityRequirement();
    doReturn(new ArrayList<>(singletonList(node1KnowledgeRequirement))).when(node1).getKnowledgeRequirement();
    doReturn(new ArrayList<>(singletonList(node1InformationRequirement))).when(node1).getInformationRequirement();
    doReturn(new ArrayList<>(singletonList(node2AuthorityRequirement))).when(node2).getAuthorityRequirement();
    doReturn(new ArrayList<>(singletonList(node2KnowledgeRequirement))).when(node2).getKnowledgeRequirement();
    doReturn(new ArrayList<>(singletonList(node3AuthorityRequirement))).when(node3).getAuthorityRequirement();
    doAnswer((e) -> setList(node1ExistingAuthorityRequirement, e)).when(existingNode1).setAuthorityRequirement(any());
    doAnswer((e) -> setList(node1ExistingInformationRequirement, e)).when(existingNode1).setInformationRequirement(any());
    doAnswer((e) -> setList(node1ExistingKnowledgeRequirement, e)).when(existingNode1).setKnowledgeRequirement(any());
    doAnswer((e) -> setList(node2ExistingAuthorityRequirement, e)).when(existingNode2).setAuthorityRequirement(any());
    doAnswer((e) -> setList(node2ExistingKnowledgeRequirement, e)).when(existingNode2).setKnowledgeRequirement(any());
    doAnswer((e) -> setList(node3ExistingAuthorityRequirement, e)).when(existingNode3).setAuthorityRequirement(any());
    doAnswer((e) -> addAll(node1ExistingAuthorityRequirement, e)).when(existingNode1).addAllAuthorityRequirement(any());
    doAnswer((e) -> addAll(node1ExistingInformationRequirement, e)).when(existingNode1).addAllInformationRequirement(any());
    doAnswer((e) -> addAll(node1ExistingKnowledgeRequirement, e)).when(existingNode1).addAllKnowledgeRequirement(any());
    doAnswer((e) -> addAll(node2ExistingAuthorityRequirement, e)).when(existingNode2).addAllAuthorityRequirement(any());
    doAnswer((e) -> addAll(node2ExistingKnowledgeRequirement, e)).when(existingNode2).addAllKnowledgeRequirement(any());
    doAnswer((e) -> addAll(node3ExistingAuthorityRequirement, e)).when(existingNode3).addAllAuthorityRequirement(any());
    dmnMarshaller.mergeNodeRequirements(node1, existingNode1);
    dmnMarshaller.mergeNodeRequirements(node2, existingNode2);
    dmnMarshaller.mergeNodeRequirements(node3, existingNode3);
    dmnMarshaller.mergeNodeRequirements(node4, existingNode2);
    dmnMarshaller.mergeNodeRequirements(node5, existingNode3);
    // Merge twice. But the values must be added once.
    dmnMarshaller.mergeNodeRequirements(node1, existingNode1);
    dmnMarshaller.mergeNodeRequirements(node2, existingNode2);
    dmnMarshaller.mergeNodeRequirements(node3, existingNode3);
    dmnMarshaller.mergeNodeRequirements(node4, existingNode2);
    dmnMarshaller.mergeNodeRequirements(node5, existingNode3);
    assertEquals(1, node1ExistingAuthorityRequirement.size());
    assertEquals(1, node1ExistingInformationRequirement.size());
    assertEquals(1, node1ExistingKnowledgeRequirement.size());
    assertEquals(1, node2ExistingAuthorityRequirement.size());
    assertEquals(1, node2ExistingKnowledgeRequirement.size());
    assertEquals(1, node3ExistingAuthorityRequirement.size());
    assertEquals(node1AuthorityRequirement, node1ExistingAuthorityRequirement.get(0));
    assertEquals(node1InformationRequirement, node1ExistingInformationRequirement.get(0));
    assertEquals(node1KnowledgeRequirement, node1ExistingKnowledgeRequirement.get(0));
    assertEquals(node2AuthorityRequirement, node2ExistingAuthorityRequirement.get(0));
    assertEquals(node2KnowledgeRequirement, node2ExistingKnowledgeRequirement.get(0));
    assertEquals(node3AuthorityRequirement, node3ExistingAuthorityRequirement.get(0));
}
Also used : JSITBusinessKnowledgeModel(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITBusinessKnowledgeModel) JSITKnowledgeSource(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeSource) JSITAuthorityRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement) JSITKnowledgeRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeRequirement) JSITDecision(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDecision) ArrayList(java.util.ArrayList) JSITInformationRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationRequirement) Test(org.junit.Test)

Example 5 with JSITAuthorityRequirement

use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement in project kie-wb-common by kiegroup.

the class KnowledgeSourceConverter method dmnFromNode.

@Override
@SuppressWarnings("unchecked")
public JSITKnowledgeSource dmnFromNode(final Node<View<KnowledgeSource>, ?> node, final Consumer<JSITComponentWidths> componentWidthsConsumer) {
    final KnowledgeSource source = (KnowledgeSource) DefinitionUtils.getElementDefinition(node);
    final JSITKnowledgeSource result = new JSITKnowledgeSource();
    result.setId(source.getId().getValue());
    final Optional<String> description = Optional.ofNullable(DescriptionPropertyConverter.dmnFromWB(source.getDescription()));
    description.ifPresent(result::setDescription);
    result.setName(source.getName().getValue());
    result.setType(source.getType().getValue());
    result.setLocationURI(source.getLocationURI().getValue());
    result.setAuthorityRequirement(new ArrayList<>());
    DMNExternalLinksToExtensionElements.loadExternalLinksIntoExtensionElements(source, result);
    // DMN spec table 2: Requirements connection rules
    final List<Edge<?, ?>> inEdges = (List<Edge<?, ?>>) node.getInEdges();
    for (Edge<?, ?> e : inEdges) {
        final Node<?, ?> sourceNode = e.getSourceNode();
        if (sourceNode.getContent() instanceof View<?>) {
            final View<?> view = (View<?>) sourceNode.getContent();
            if (view.getDefinition() instanceof DRGElement) {
                final DRGElement drgElement = (DRGElement) view.getDefinition();
                if (drgElement instanceof Decision) {
                    final JSITAuthorityRequirement iReq = new JSITAuthorityRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredDecision(ri);
                    result.addAuthorityRequirement(iReq);
                } else if (drgElement instanceof KnowledgeSource) {
                    final JSITAuthorityRequirement iReq = new JSITAuthorityRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredAuthority(ri);
                    result.addAuthorityRequirement(iReq);
                } else if (drgElement instanceof InputData) {
                    final JSITAuthorityRequirement iReq = new JSITAuthorityRequirement();
                    iReq.setId(getRawId(e.getUUID()));
                    final JSITDMNElementReference ri = new JSITDMNElementReference();
                    ri.setHref(getHref(drgElement));
                    iReq.setRequiredInput(ri);
                    result.addAuthorityRequirement(iReq);
                } else {
                    throw new UnsupportedOperationException("wrong model definition.");
                }
            }
        }
    }
    return result;
}
Also used : JSITKnowledgeSource(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeSource) JSITDMNElementReference(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDMNElementReference) View(org.kie.workbench.common.stunner.core.graph.content.view.View) Decision(org.kie.workbench.common.dmn.api.definition.model.Decision) KnowledgeSource(org.kie.workbench.common.dmn.api.definition.model.KnowledgeSource) JSITKnowledgeSource(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeSource) JSITAuthorityRequirement(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement) ArrayList(java.util.ArrayList) List(java.util.List) InputData(org.kie.workbench.common.dmn.api.definition.model.InputData) Edge(org.kie.workbench.common.stunner.core.graph.Edge) DRGElement(org.kie.workbench.common.dmn.api.definition.model.DRGElement)

Aggregations

ArrayList (java.util.ArrayList)5 JSITAuthorityRequirement (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAuthorityRequirement)5 List (java.util.List)4 JSITDMNElementReference (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDMNElementReference)4 JSITKnowledgeRequirement (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeRequirement)4 Edge (org.kie.workbench.common.stunner.core.graph.Edge)4 View (org.kie.workbench.common.stunner.core.graph.content.view.View)4 DRGElement (org.kie.workbench.common.dmn.api.definition.model.DRGElement)3 KnowledgeSource (org.kie.workbench.common.dmn.api.definition.model.KnowledgeSource)3 JSITBusinessKnowledgeModel (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITBusinessKnowledgeModel)3 JSITDecision (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDecision)3 JSITInformationRequirement (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationRequirement)3 JSITKnowledgeSource (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITKnowledgeSource)3 BusinessKnowledgeModel (org.kie.workbench.common.dmn.api.definition.model.BusinessKnowledgeModel)2 Decision (org.kie.workbench.common.dmn.api.definition.model.Decision)2 DecisionService (org.kie.workbench.common.dmn.api.definition.model.DecisionService)2 InputData (org.kie.workbench.common.dmn.api.definition.model.InputData)2 KnowledgeRequirement (org.kie.workbench.common.dmn.api.definition.model.KnowledgeRequirement)2 Id (org.kie.workbench.common.dmn.api.property.dmn.Id)2 JSITInformationItem (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationItem)2