use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationRequirement 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));
}
});
}
use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationRequirement 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;
}
use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITInformationRequirement 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));
}
Aggregations