use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAssociation in project kie-wb-common by kiegroup.
the class DMNMarshaller method marshall.
public JSITDefinitions marshall() {
final Map<String, JSITDRGElement> nodes = new HashMap<>();
final Map<String, JSITTextAnnotation> textAnnotations = new HashMap<>();
final Node<View<DMNDiagram>, ?> dmnDiagramRoot = (Node<View<DMNDiagram>, ?>) DMNGraphUtils.findDMNDiagramRoot(dmnDiagramsSession.getDRGDiagram().getGraph());
final Definitions definitionsStunnerPojo = ((DMNDiagram) getElementDefinition(dmnDiagramRoot)).getDefinitions();
final List<String> dmnDiagramElementIds = new ArrayList<>();
final JSITDefinitions definitions = DefinitionsConverter.dmnFromWB(definitionsStunnerPojo, true);
if (Objects.isNull(definitions.getExtensionElements())) {
JSITDMNElement.JSIExtensionElements jsiExtensionElements = new JSITDMNElement.JSIExtensionElements();
definitions.setExtensionElements(jsiExtensionElements);
}
final JsArrayLike<JSIDMNDiagram> dmnDiagrams = definitions.getDMNDI().getNativeDMNDiagram();
for (int i = 0; i < dmnDiagrams.getLength(); i++) {
JSIDMNDiagram diagram = Js.uncheckedCast(dmnDiagrams.getAt(i));
final String elementDiagramId = diagram.getId();
final List<JSIDMNEdge> dmnEdges = new ArrayList<>();
final List<Node> diagramNodes = getNodeStream(dmnDiagramsSession.getDiagram(elementDiagramId));
// Setup callback for marshalling ComponentWidths
if (Objects.isNull(diagram.getExtension())) {
diagram.setExtension(new JSIDiagramElement.JSIExtension());
}
final JSITComponentsWidthsExtension componentsWidthsExtension = new JSITComponentsWidthsExtension();
final JSIDiagramElement.JSIExtension extension = diagram.getExtension();
JSITComponentsWidthsExtension wrappedComponentsWidthsExtension = WrapperUtils.getWrappedJSITComponentsWidthsExtension(componentsWidthsExtension);
extension.addAny(wrappedComponentsWidthsExtension);
final Consumer<JSITComponentWidths> componentWidthsConsumer = (cw) -> componentsWidthsExtension.addComponentWidths(cw);
// Convert relative positioning to absolute
for (final Node<?, ?> node : diagramNodes) {
PointUtils.convertToAbsoluteBounds(node);
}
// Iterate Graph processing nodes..
for (final Node<?, ?> node : diagramNodes) {
if (!(node.getContent() instanceof View<?>)) {
continue;
}
final View<?> view = (View<?>) node.getContent();
final Object viewDefinition = view.getDefinition();
if (!(viewDefinition instanceof HasContentDefinitionId)) {
continue;
}
final HasContentDefinitionId hasContentDefinitionId = (HasContentDefinitionId) viewDefinition;
final String nodeDiagramId = hasContentDefinitionId.getDiagramId();
if (!Objects.equals(nodeDiagramId, elementDiagramId)) {
continue;
}
if (viewDefinition instanceof DRGElement) {
final DRGElement drgElement = (DRGElement) viewDefinition;
if (!drgElement.isAllowOnlyVisualChange()) {
if (nodes.containsKey(drgElement.getId().getValue())) {
final JSITDRGElement currentValue = nodes.get(drgElement.getId().getValue());
mergeNodeRequirements(stunnerToDMN(withIncludedModels(node, definitionsStunnerPojo), componentWidthsConsumer), currentValue);
} else {
nodes.put(drgElement.getId().getValue(), stunnerToDMN(withIncludedModels(node, definitionsStunnerPojo), componentWidthsConsumer));
}
}
final String namespaceURI = definitionsStunnerPojo.getDefaultNamespace();
diagram.addDMNDiagramElement(WrapperUtils.getWrappedJSIDMNShape(diagram, dmnDiagramElementIds, definitionsStunnerPojo, (View<? extends DMNElement>) view, namespaceURI));
}
if (viewDefinition instanceof TextAnnotation) {
final TextAnnotation textAnnotation = (TextAnnotation) viewDefinition;
if (!textAnnotation.isAllowOnlyVisualChange()) {
textAnnotations.put(textAnnotation.getId().getValue(), textAnnotationConverter.dmnFromNode((Node<View<TextAnnotation>, ?>) node, componentWidthsConsumer));
}
final String namespaceURI = definitionsStunnerPojo.getDefaultNamespace();
diagram.addDMNDiagramElement(WrapperUtils.getWrappedJSIDMNShape(diagram, dmnDiagramElementIds, definitionsStunnerPojo, (View<? extends DMNElement>) view, namespaceURI));
final List<JSITAssociation> associations = AssociationConverter.dmnFromWB((Node<View<TextAnnotation>, ?>) node);
forEach(associations, association -> {
final JSITAssociation wrappedJSITAssociation = WrapperUtils.getWrappedJSITAssociation(Js.uncheckedCast(association));
definitions.addArtifact(wrappedJSITAssociation);
});
}
connect(diagram, dmnDiagramElementIds, definitionsStunnerPojo, dmnEdges, node, view);
}
nodes.values().forEach(node -> {
addNodeToDefinitionsIfNotPresent(node, definitions);
});
textAnnotations.values().forEach(text -> {
final boolean exists = anyMatch(definitions.getArtifact(), artifact -> Objects.equals(artifact.getId(), text.getId()));
if (!exists) {
definitions.addArtifact(WrapperUtils.getWrappedJSITTextAnnotation(text));
}
});
forEach(dmnEdges, dmnEdge -> {
final boolean exists = anyMatch(diagram.getDMNDiagramElement(), diagramElement -> {
if (JSIDMNEdge.instanceOf(diagramElement)) {
final JSIDMNEdge jsidmnEdge = Js.uncheckedCast(diagramElement);
return Objects.equals(jsidmnEdge.getDmnElementRef(), dmnEdge.getDmnElementRef());
}
return false;
});
if (!exists) {
diagram.addDMNDiagramElement(WrapperUtils.getWrappedJSIDMNEdge(Js.uncheckedCast(dmnEdge)));
}
});
// Convert absolute positioning to relative
for (final Node<?, ?> node : diagramNodes) {
PointUtils.convertToRelativeBounds(node);
}
}
;
return definitions;
}
use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAssociation 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.JSITAssociation in project kie-wb-common by kiegroup.
the class NodeEntriesFactory method getAssociations.
private List<JSITAssociation> getAssociations(final JSITDefinitions definitions) {
final List<JSITAssociation> associations = new ArrayList<>();
final List<JSITArtifact> artifacts = definitions.getArtifact();
forEach(artifacts, artifact -> {
if (JSITAssociation.instanceOf(artifact)) {
final JSITAssociation association = Js.uncheckedCast(artifact);
associations.add(association);
}
});
return associations;
}
use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAssociation in project kie-wb-common by kiegroup.
the class WrapperUtils method getWrappedJSITAssociation.
public static JSITAssociation getWrappedJSITAssociation(final JSITAssociation toWrap) {
final JSITAssociation toReturn = Js.uncheckedCast(JsUtils.getWrappedElement(toWrap));
final JSIName jsiName = JSITTextAnnotation.getJSIName();
updateJSIName(jsiName, "dmn", "association");
JsUtils.setNameOnWrapped(toReturn, jsiName);
return toReturn;
}
use of org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITAssociation in project kie-wb-common by kiegroup.
the class AssociationConverter method dmnFromWB.
@SuppressWarnings("unchecked")
public static List<JSITAssociation> dmnFromWB(final Node<View<TextAnnotation>, ?> node) {
final TextAnnotation ta = (TextAnnotation) DefinitionUtils.getElementDefinition(node);
final JSITDMNElementReference ta_elementReference = new JSITDMNElementReference();
ta_elementReference.setHref("#" + ta.getId().getValue());
final List<JSITAssociation> result = new ArrayList<>();
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();
final JSITDMNElementReference sourceRef = new JSITDMNElementReference();
sourceRef.setHref(getHref(drgElement));
final JSITAssociation adding = new JSITAssociation();
adding.setId(((View<Association>) e.getContent()).getDefinition().getId().getValue());
final Optional<String> description = Optional.ofNullable(DescriptionPropertyConverter.dmnFromWB(((View<Association>) e.getContent()).getDefinition().getDescription()));
description.ifPresent(adding::setDescription);
adding.setSourceRef(sourceRef);
adding.setTargetRef(ta_elementReference);
adding.setAssociationDirection(Js.uncheckedCast(JSITAssociationDirection.NONE.value()));
result.add(adding);
}
}
}
final List<Edge<?, ?>> outEdges = (List<Edge<?, ?>>) node.getOutEdges();
for (Edge<?, ?> e : outEdges) {
final Node<?, ?> targetNode = e.getTargetNode();
if (targetNode.getContent() instanceof View<?>) {
final View<?> view = (View<?>) targetNode.getContent();
if (view.getDefinition() instanceof DRGElement) {
final DRGElement drgElement = (DRGElement) view.getDefinition();
final JSITDMNElementReference targetRef = new JSITDMNElementReference();
targetRef.setHref(getHref(drgElement));
final JSITAssociation adding = new JSITAssociation();
adding.setId(((View<Association>) e.getContent()).getDefinition().getId().getValue());
final Optional<String> description = Optional.ofNullable(DescriptionPropertyConverter.dmnFromWB(((View<Association>) e.getContent()).getDefinition().getDescription()));
description.ifPresent(adding::setDescription);
adding.setSourceRef(ta_elementReference);
adding.setTargetRef(targetRef);
adding.setAssociationDirection(Js.uncheckedCast(JSITAssociationDirection.NONE.value()));
result.add(adding);
}
}
}
return result;
}
Aggregations