use of org.kie.workbench.common.dmn.api.definition.model.DMNDiagramElement in project kie-wb-common by kiegroup.
the class DRDContextMenuService method makeDmnDiagramElement.
private DMNDiagramElement makeDmnDiagramElement() {
final DMNDiagramElement diagramElement = new DMNDiagramElement();
diagramElement.getName().setValue(getUniqueName());
return diagramElement;
}
use of org.kie.workbench.common.dmn.api.definition.model.DMNDiagramElement in project kie-wb-common by kiegroup.
the class DMNUnmarshaller method unmarshall.
private Promise<Graph> unmarshall(final Metadata metadata, final JSITDefinitions dmnDefinitions, final Map<JSITImport, JSITDefinitions> importDefinitions, final Map<JSITImport, PMMLDocumentMetadata> pmmlDocuments) {
final Map<String, HasComponentWidths> hasComponentWidthsMap = new HashMap<>();
final BiConsumer<String, HasComponentWidths> hasComponentWidthsConsumer = (uuid, hcw) -> {
if (Objects.nonNull(uuid)) {
hasComponentWidthsMap.put(uuid, hcw);
}
};
// Check before the DRG creation ('ensureDRGElementExists').
final boolean isDMNDIPresent = Optional.ofNullable(dmnDefinitions.getDMNDI()).isPresent();
ensureDRGElementExists(dmnDefinitions);
final Definitions wbDefinitions = DefinitionsConverter.wbFromDMN(dmnDefinitions, importDefinitions, pmmlDocuments);
final List<NodeEntry> nodeEntries = modelToStunnerConverter.makeNodes(dmnDefinitions, importDefinitions, isDMNDIPresent, hasComponentWidthsConsumer);
final List<JSITDecisionService> dmnDecisionServices = getDecisionServices(nodeEntries);
// Ensure all locations are updated to relative for Stunner
nodeEntries.forEach(e -> PointUtils.convertToRelativeBounds(e.getNode()));
final Map<String, Diagram> stunnerDiagramsById = new HashMap<>();
final Map<String, DMNDiagramElement> dmnDiagramsById = new HashMap<>();
for (final DMNDiagramElement dmnDiagramElement : wbDefinitions.getDiagramElements()) {
final String dmnDiagramId = dmnDiagramElement.getId().getValue();
final Diagram value = factoryManager.newDiagram(dmnDiagramId, BindableAdapterUtils.getDefinitionSetId(DMNDefinitionSet.class), metadata);
stunnerDiagramsById.put(dmnDiagramId, value);
dmnDiagramsById.put(dmnDiagramId, dmnDiagramElement);
}
final DMNDiagramsSessionState state = dmnDiagramsSession.setState(metadata, stunnerDiagramsById, dmnDiagramsById);
nodeEntries.forEach(nodeEntry -> {
final String diagramId = nodeEntry.getDiagramId();
final Graph graph = stunnerDiagramsById.get(diagramId).getGraph();
graph.addNode(nodeEntry.getNode());
});
final Graph drgGraph = state.getDRGDiagram().getGraph();
loadImportedItemDefinitions(wbDefinitions, importDefinitions);
for (final Diagram value : stunnerDiagramsById.values()) {
final Node<?, ?> dmnDiagramRoot = DMNGraphUtils.findDMNDiagramRoot(value.getGraph());
((View<DMNDiagram>) dmnDiagramRoot.getContent()).getDefinition().setDefinitions(wbDefinitions);
nodeEntries.forEach(nodeEntry -> {
if (Objects.equals(stunnerDiagramsById.get(nodeEntry.getDiagramId()), value)) {
connectRootWithChild(dmnDiagramRoot, nodeEntry.getNode());
}
});
}
// Only connect Nodes to the Diagram that are not referenced by DecisionServices
final List<String> references = new ArrayList<>();
final List<JSITDecisionService> lstDecisionServices = new ArrayList<>(dmnDecisionServices);
for (int iDS = 0; iDS < lstDecisionServices.size(); iDS++) {
final JSITDecisionService jsiDecisionService = Js.uncheckedCast(lstDecisionServices.get(iDS));
final List<JSITDMNElementReference> jsiEncapsulatedDecisions = jsiDecisionService.getEncapsulatedDecision();
if (Objects.nonNull(jsiEncapsulatedDecisions)) {
for (int i = 0; i < jsiEncapsulatedDecisions.size(); i++) {
final JSITDMNElementReference jsiEncapsulatedDecision = Js.uncheckedCast(jsiEncapsulatedDecisions.get(i));
references.add(jsiEncapsulatedDecision.getHref());
}
}
final List<JSITDMNElementReference> jsiOutputDecisions = jsiDecisionService.getOutputDecision();
if (Objects.nonNull(jsiOutputDecisions)) {
for (int i = 0; i < jsiOutputDecisions.size(); i++) {
final JSITDMNElementReference jsiOutputDecision = Js.uncheckedCast(jsiOutputDecisions.get(i));
references.add(jsiOutputDecision.getHref());
}
}
}
// Copy ComponentWidths information
final List<JSITComponentsWidthsExtension> extensions = findComponentsWidthsExtensions(dmnDefinitions.getDMNDI().getDMNDiagram());
extensions.forEach(componentsWidthsExtension -> {
// can be imported from another diagram but the extension is not imported or present in this diagram.
if (Objects.nonNull(componentsWidthsExtension.getComponentWidths())) {
hasComponentWidthsMap.entrySet().forEach(es -> {
final List<JSITComponentWidths> jsiComponentWidths = componentsWidthsExtension.getComponentWidths();
for (int i = 0; i < jsiComponentWidths.size(); i++) {
final JSITComponentWidths jsiWidths = Js.uncheckedCast(jsiComponentWidths.get(i));
if (Objects.equals(jsiWidths.getDmnElementRef(), es.getKey())) {
final List<Double> widths = es.getValue().getComponentWidths();
if (Objects.nonNull(jsiWidths.getWidth())) {
widths.clear();
for (int w = 0; w < jsiWidths.getWidth().size(); w++) {
final double width = jsiWidths.getWidth().get(w).doubleValue();
widths.add(width);
}
}
}
}
});
}
});
return promises.resolve(drgGraph);
}
use of org.kie.workbench.common.dmn.api.definition.model.DMNDiagramElement in project kie-wb-common by kiegroup.
the class DRDContextMenuServiceTest method testRemoveFromCurrentDRD.
@Test
public void testRemoveFromCurrentDRD() {
final String nodeUUID = "UUID";
final Node node = mock(Node.class);
final Diagram diagram = mock(Diagram.class);
final DMNDiagramElement dmnDiagram = mock(DMNDiagramElement.class);
when(node.getUUID()).thenReturn(nodeUUID);
when(dmnDiagramsSession.getCurrentDiagram()).thenReturn(Optional.of(diagram));
when(dmnDiagramsSession.getCurrentDMNDiagramElement()).thenReturn(Optional.of(dmnDiagram));
when(diagram.getGraph()).thenReturn(graph);
drdContextMenuService.removeFromCurrentDRD(singleton(node));
verify(graph, times(1)).removeNode(nodeUUID);
verify(selectedEvent, times(1)).fire(Mockito.<DMNDiagramSelected>any());
}
use of org.kie.workbench.common.dmn.api.definition.model.DMNDiagramElement in project kie-wb-common by kiegroup.
the class DecisionNavigatorItemsProviderTest method testGetItems.
@Test
public void testGetItems() {
final Diagram stunnerDiagram1 = mock(Diagram.class);
final Diagram stunnerDiagram2 = mock(Diagram.class);
final DMNDiagramElement dmnDiagramElement1 = mock(DMNDiagramElement.class);
final DMNDiagramElement dmnDiagramElement2 = mock(DMNDiagramElement.class);
final DMNDiagramTuple dmnDiagramTuple1 = new DMNDiagramTuple(stunnerDiagram1, dmnDiagramElement1);
final DMNDiagramTuple dmnDiagramTuple2 = new DMNDiagramTuple(stunnerDiagram2, dmnDiagramElement2);
final DecisionNavigatorItem decisionNavigatorItem1 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem2 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem3 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem4 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem5 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem6 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem7 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem8 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem9 = mock(DecisionNavigatorItem.class);
final DecisionNavigatorItem decisionNavigatorItem10 = mock(DecisionNavigatorItem.class);
final List<DMNDiagramTuple> diagramTuples = asList(dmnDiagramTuple1, dmnDiagramTuple2);
final Node node1 = mockNode(new Decision());
final Node node2 = mockNode(new InputData());
final Node node3 = mockNode(new TextAnnotation());
final Node node4 = mockNode(new BusinessKnowledgeModel());
final Node node5 = mockNode(new KnowledgeSource());
final Node node6 = mockNode(new TextAnnotation());
final Stream<Node> stunnerNodes1 = Stream.of(node1, node2, node3);
final Stream<Node> stunnerNodes2 = Stream.of(node4, node5, node6);
when(dmnDiagramElement1.getName()).thenReturn(new Name("DRD"));
when(dmnDiagramElement2.getName()).thenReturn(new Name("DRG"));
when(dmnDiagramsSession.getDMNDiagrams()).thenReturn(diagramTuples);
when(itemFactory.makeRoot(dmnDiagramTuple1)).thenReturn(decisionNavigatorItem1);
when(itemFactory.makeRoot(dmnDiagramTuple2)).thenReturn(decisionNavigatorItem2);
when(itemFactory.makeItem(node1)).thenReturn(decisionNavigatorItem5);
when(itemFactory.makeItem(node2)).thenReturn(decisionNavigatorItem6);
when(itemFactory.makeItem(node3)).thenReturn(decisionNavigatorItem7);
when(itemFactory.makeItem(node4)).thenReturn(decisionNavigatorItem8);
when(itemFactory.makeItem(node5)).thenReturn(decisionNavigatorItem9);
when(itemFactory.makeItem(node6)).thenReturn(decisionNavigatorItem10);
when(itemFactory.makeSeparator(DRG)).thenReturn(decisionNavigatorItem3);
when(itemFactory.makeSeparator(DRDs)).thenReturn(decisionNavigatorItem4);
when(dmnDiagramUtils.getNodeStream(stunnerDiagram1)).thenReturn(stunnerNodes1);
when(dmnDiagramUtils.getNodeStream(stunnerDiagram2)).thenReturn(stunnerNodes2);
final List<DecisionNavigatorItem> actualItems = itemsProvider.getItems();
final List<DecisionNavigatorItem> expectedItems = asList(decisionNavigatorItem3, decisionNavigatorItem2, decisionNavigatorItem4, decisionNavigatorItem1);
assertEquals(expectedItems, actualItems);
verify(decisionNavigatorItem1).addChild(decisionNavigatorItem5);
verify(decisionNavigatorItem1).addChild(decisionNavigatorItem6);
verify(decisionNavigatorItem1).addChild(decisionNavigatorItem7);
verify(decisionNavigatorItem2).addChild(decisionNavigatorItem8);
verify(decisionNavigatorItem2).addChild(decisionNavigatorItem9);
verify(decisionNavigatorItem2).addChild(decisionNavigatorItem10);
}
use of org.kie.workbench.common.dmn.api.definition.model.DMNDiagramElement in project kie-wb-common by kiegroup.
the class DecisionNavigatorItemFactoryTest method testMakeRootWhenDMNDiagramElementIsNotDRG.
@Test
public void testMakeRootWhenDMNDiagramElementIsNotDRG() {
final Diagram stunnerDiagram = mock(Diagram.class);
final Graph graph = mock(Graph.class);
final Node node = mock(Node.class);
final Definition definition = mock(Definition.class);
final String drdName = "DRD 1";
final String dmnDiagramId = "0000";
final DMNDiagramElement dmnDiagramElement = new DMNDiagramElement(new Id(dmnDiagramId), new Name(drdName));
final DMNDiagramTuple diagramTuple = new DMNDiagramTuple(stunnerDiagram, dmnDiagramElement);
when(stunnerDiagram.getGraph()).thenReturn(graph);
when(graph.nodes()).thenReturn(singletonList(node));
when(node.getContent()).thenReturn(definition);
when(definition.getDefinition()).thenReturn(new DMNDiagram());
when(baseItemFactory.getLabel(node)).thenReturn("diagram-name");
final DecisionNavigatorItem decisionNavigatorItem = factory.makeRoot(diagramTuple);
assertEquals(drdName, decisionNavigatorItem.getLabel());
assertEquals(dmnDiagramId, decisionNavigatorItem.getUUID());
assertEquals(ROOT, decisionNavigatorItem.getType());
assertNull(decisionNavigatorItem.getParentUUID());
}
Aggregations