From 561c4c0dc987833b49b9bd54465645988047c1a5 Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Wed, 6 Mar 2024 18:57:59 +0100 Subject: [PATCH] refactoring Issue #341 --- .../DefaultBPMNDefinitionsExtension.java | 3 +- .../org/openbpmn/glsp/BPMNDiagramModule.java | 3 +- .../elements/edge/BPMNGEdgeCreateHandler.java | 24 +-- .../BPMNApplyEditLabelOperationHandler.java | 186 ------------------ .../elements/label/LabelGNodeBuilder.java | 1 - .../BPMNChangeBoundsOperationHandler.java | 22 +-- ...MNChangeRoutingPointsOperationHandler.java | 6 +- .../BPMNPropertiesApplyOperationHandler.java | 13 +- 8 files changed, 27 insertions(+), 231 deletions(-) delete mode 100644 open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/BPMNApplyEditLabelOperationHandler.java diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNDefinitionsExtension.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNDefinitionsExtension.java index 52ec57e2..233c7416 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNDefinitionsExtension.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNDefinitionsExtension.java @@ -314,8 +314,7 @@ private void updateSignalEvents() { Set signalEventDefinitions = event.getEventDefinitionsByType("signalEventDefinition"); if (signalEventDefinitions.size() > 0) { // find the gmodel - BPMNGNode _baseElement = modelState.getIndex().findElementByClass(event.getId(), - BPMNGNode.class).orElse(null); + BPMNGNode _baseElement = (BPMNGNode) modelState.getIndex().get(event.getId()).orElse(null); if (_baseElement != null) { bpmnGModelFactory.applyBPMNElementExtensions(_baseElement, event); } diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/BPMNDiagramModule.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/BPMNDiagramModule.java index dccb6bed..f313239b 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/BPMNDiagramModule.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/BPMNDiagramModule.java @@ -54,7 +54,6 @@ import org.openbpmn.glsp.elements.event.BPMNCreateEventDefinitionHandler; import org.openbpmn.glsp.elements.event.BPMNCreateEventHandler; import org.openbpmn.glsp.elements.gateway.BPMNCreateGatewayHandler; -import org.openbpmn.glsp.elements.label.BPMNApplyEditLabelOperationHandler; import org.openbpmn.glsp.elements.pool.CreateLaneHandler; import org.openbpmn.glsp.elements.pool.CreatePoolHandler; import org.openbpmn.glsp.elements.task.BPMNCreateTaskHandler; @@ -121,7 +120,7 @@ protected void configureOperationHandlers(final MultiBinding super.configureOperationHandlers(binding); // Inline Edit - binding.add(BPMNApplyEditLabelOperationHandler.class); + // binding.add(BPMNApplyEditLabelOperationHandler.class); binding.add(GModelCutOperationHandler.class); // binding.add(DeleteOperationHandler.class); diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/edge/BPMNGEdgeCreateHandler.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/edge/BPMNGEdgeCreateHandler.java index 6c2c3092..87b6acad 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/edge/BPMNGEdgeCreateHandler.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/edge/BPMNGEdgeCreateHandler.java @@ -35,6 +35,9 @@ import com.google.inject.Inject; +/** + * Handler to create a BPMN SequenceFlow, MessageFlow or Association. + */ public class BPMNGEdgeCreateHandler extends CreateBPMNEdgeOperationHandler { protected final String label; @@ -63,36 +66,27 @@ public Optional createCommand(final CreateEdgeOperation operation) { /** * Adds a new BPMNEdge to the diagram. Depending on the type a SequenceFlow, - * MessageFlow or Association is crated. + * MessageFlow or Association is created. */ protected void executeOperation(final CreateEdgeOperation operation) { if (operation.getSourceElementId() == null || operation.getTargetElementId() == null) { throw new IllegalArgumentException("Incomplete create connection action"); } String edgeId = null; - BPMNGNode sourceNode = null; - BPMNGNode targetNode = null; + BPMNGNode sourceGNode = null; + BPMNGNode targetGNode = null; BPMNElementNode sourceElementNode = null; BPMNElementNode targetElementNode = null; String edgeType = operation.getElementTypeId(); try { - Optional element = null; String targetId = operation.getTargetElementId(); // find GNode - element = modelState.getIndex().findElementByClass(targetId, BPMNGNode.class); - if (element.isPresent()) { - targetNode = element.get(); - targetId = targetNode.getId(); - } + targetGNode = (BPMNGNode) modelState.getIndex().get(targetId).orElse(null); String sourceId = operation.getSourceElementId(); // find GNode - element = modelState.getIndex().findElementByClass(sourceId, BPMNGNode.class); - if (element.isPresent()) { - sourceNode = element.get(); - sourceId = sourceNode.getId(); - } + sourceGNode = (BPMNGNode) modelState.getIndex().get(sourceId).orElse(null); // Depending on the edgeType we use here different method to create the BPMN // edge @@ -140,7 +134,7 @@ protected void executeOperation(final CreateEdgeOperation operation) { targetElementNode.resetValidation(); // finally update he current selection - updateSelection(sourceNode, targetNode, edgeId); + updateSelection(sourceGNode, targetGNode, edgeId); modelState.reset(); } catch (BPMNModelException e) { diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/BPMNApplyEditLabelOperationHandler.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/BPMNApplyEditLabelOperationHandler.java deleted file mode 100644 index 4ede8e57..00000000 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/BPMNApplyEditLabelOperationHandler.java +++ /dev/null @@ -1,186 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2022 Imixs Software Solutions GmbH and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ -package org.openbpmn.glsp.elements.label; - -import java.util.Optional; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.eclipse.glsp.graph.GEdge; -import org.eclipse.glsp.graph.GModelElement; -import org.eclipse.glsp.graph.GNode; -import org.eclipse.glsp.server.features.directediting.ApplyLabelEditOperation; -import org.eclipse.glsp.server.operations.AbstractOperationHandler; -import org.eclipse.glsp.server.operations.Operation; -import org.openbpmn.bpmn.elements.TextAnnotation; -import org.openbpmn.bpmn.elements.core.BPMNElement; -import org.openbpmn.bpmn.elements.core.BPMNElementNode; -import org.openbpmn.bpmn.elements.core.BPMNLabel; -import org.openbpmn.bpmn.exceptions.BPMNMissingElementException; -import org.openbpmn.glsp.bpmn.LabelGNode; -import org.openbpmn.glsp.bpmn.TaskGNode; -import org.openbpmn.glsp.bpmn.TextAnnotationGNode; -import org.openbpmn.glsp.model.BPMNGModelState; -import org.openbpmn.glsp.utils.BPMNGModelUtil; -import org.openbpmn.glsp.utils.ModelTypes; - -import com.google.inject.Inject; - -/** - * This BPMNApplyEditLabelOperationHandler is used to apply label changes on - * BPMNElementNodes or BPMNEdges. The method updates also the GNode/GEdge and - * reset the mode state. - *

- * For TextAnnotation the the handler updates the BPMN 'text' property, for all - * other BPMNElements it updates the 'name' property. - *

- * (See also: - * https://www.eclipse.org/glsp/documentation/rendering/#default-views) - *

- * Using the {@link AbstractOperationHandler} avoids the need for casting of the - * operation object. It implementation handles exactly one {@link Operation} - * type. - * - * @see: https://github.com/eclipse-glsp/glsp/blob/master/PROTOCOL.md - * - * @author rsoika - * - */ -public class BPMNApplyEditLabelOperationHandler extends AbstractOperationHandler { - - private static Logger logger = LogManager.getLogger(BPMNApplyEditLabelOperationHandler.class); - - @Inject - protected BPMNGModelState modelState; - - /** - * This method updates the corresponding BPMN Element form a given Label. This - * object can either be a Node or an Edge - */ - @Override - public void executeOperation(final ApplyLabelEditOperation operation) { - - // Do we have an GNode? - Optional _gNodeElement = modelState.getIndex().findElementByClass(operation.getLabelId(), GNode.class); - GNode gNodeElement = _gNodeElement.orElse(null); - if (gNodeElement != null) { - BPMNElementNode bpmnElementNode = resolveBPMNElementNode(gNodeElement); - if (bpmnElementNode != null) { - // For TextAnnotation we need to update the 'text' argument on the gNode - if (bpmnElementNode instanceof TextAnnotation) { - ((TextAnnotation) bpmnElementNode).setText(operation.getText()); - // update gNode - gNodeElement.getArgs().put("text", operation.getText()); - - } else { - // For all other elements the text is stored in the 'name' attribute. - bpmnElementNode.setName(operation.getText()); - // update gNode - - // update gNode - String text = operation.getText(); - gNodeElement.getArgs().put("text", text); - - GModelElement parent = gNodeElement.getParent(); - if (parent != null && parent instanceof LabelGNode) { - // int FONT_SIZE = 14; - LabelGNode label = (LabelGNode) parent; - try { - BPMNLabel bpmnLabel = bpmnElementNode.getLabel(); - // BPMNGModelUtil.optimizeBPMNLabelHeight(label, bpmnLabel, - // operation.getText()); - } catch (BPMNMissingElementException e) { - e.printStackTrace(); - } - - // // resize based on the lines.... - // int estimatedLines = estimateLineCount(operation.getText(), FONT_SIZE, 100); - // GDimension newLabelSize = GraphUtil.dimension(100, FONT_SIZE * - // estimatedLines); - // label.getLayoutOptions().put(GLayoutOptions.KEY_PREF_WIDTH, - // newLabelSize.getWidth()); - // label.getLayoutOptions().put(GLayoutOptions.KEY_PREF_HEIGHT, - // newLabelSize.getHeight()); - // // calling the size method does not have an effect. - // // see: - // // - // https://github.com/eclipse-glsp/glsp/discussions/741#discussioncomment-3688606 - // label.setSize(newLabelSize); - // // Update the BPMNLabel bounds... - // try { - // BPMNLabel bpmnLabel = bpmnElementNode.getLabel(); - // if (bpmnLabel != null) { - // bpmnLabel.getBounds().setDimension(newLabelSize.getWidth(), - // newLabelSize.getHeight()); - // } - // } catch (BPMNMissingElementException e) { - // e.printStackTrace(); - // } - - } - } - } - } else { - // it was not a GNode - so test if we have a Edge... - Optional _gEdgeElement = modelState.getIndex().findElementByClass(operation.getLabelId(), - GEdge.class); - GEdge gEdgeElement = _gEdgeElement.orElse(null); - if (gEdgeElement != null) { - gEdgeElement.getArgs().put("text", operation.getText()); - BPMNElement bpmnElement = modelState.getBpmnModel().findElementById(gEdgeElement.getId()); - bpmnElement.setName(operation.getText()); - } else { - logger.warn("Unable to resolve the corresponding BPMN element Node for " + operation.getLabelId()); - } - } - - // we do need to reset the model because of the properties panels - modelState.reset(); - - } - - /** - * This helper method resolves the corresponding BPMN Element form a - * ApplyLabelEditOperation by resolving the LabelId to the correct element. - * - * @param operation - * @return - */ - private BPMNElementNode resolveBPMNElementNode(final GNode gNodeElement) { - BPMNElementNode result = null; - String elementID = null; - if (gNodeElement != null) { - String type = gNodeElement.getType(); - GModelElement parent = gNodeElement.getParent(); - if (ModelTypes.BPMN_TEXT_NODE.equals(type) && (parent instanceof LabelGNode || parent instanceof TaskGNode - || parent instanceof TextAnnotationGNode)) { - // it is a TextAnnotation... - elementID = parent.getId(); - } else { - elementID = gNodeElement.getId(); - } - // find element - if (BPMNGModelUtil.isBPMNLabelID(elementID)) { - elementID = BPMNGModelUtil.resolveFlowElementIDfromLabelID(elementID); - } - - } - // find the BPMNElement.... - result = (BPMNElementNode) modelState.getBpmnModel().findElementById(elementID); - return result; - - } -} diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/LabelGNodeBuilder.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/LabelGNodeBuilder.java index 7e91cfb4..d271c646 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/LabelGNodeBuilder.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/label/LabelGNodeBuilder.java @@ -145,5 +145,4 @@ public void setProperties(final LabelGNode node) { .add(BPMNGModelUtil.createMultiLineTextNode(node, name, BPMNGModelUtil.MULTILINETEXT_ALIGN_MIDDLE, 0)); } - } diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeBoundsOperationHandler.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeBoundsOperationHandler.java index 50d3ec8a..72bd03c1 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeBoundsOperationHandler.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeBoundsOperationHandler.java @@ -127,14 +127,13 @@ private void executeOperation(final ChangeBoundsOperation operation) { GPoint newPoint = BPMNGridSnapper.round(elementBound.getNewPosition()); GDimension newSize = BPMNGridSnapper.round(elementBound.getNewSize()); // find the corresponding GNode Element - Optional _node = modelState.getIndex().findElementByClass(id, GNode.class); - if (!_node.isPresent()) { + GNode gNode = (GNode) modelState.getIndex().get(id).orElse(null); + if (gNode == null) { // this case should not happen! logger.error("GNode '" + id + "' not found in current modelState!"); continue; } - GNode gNode = _node.get(); // compute the new offset x/y double offsetX = Math.round(newPoint.getX() - gNode.getPosition().getX()); double offsetY = Math.round(newPoint.getY() - gNode.getPosition().getY()); @@ -196,15 +195,14 @@ private void updateLaneSizeByDividerPos(GNode gNode, double offsetY) throws BPMN String lowerLaneID = gNode.getArgs().get("lowerlaneid").toString(); // Upper Lane - GNode upperGLane = modelState.getIndex().findElementByClass(upperLaneID, GNode.class) + GNode upperGLane = modelState.getIndex().get(upperLaneID, GNode.class) .orElse(null); if (upperGLane == null) { throw new BPMNMissingElementException(BPMNMissingElementException.MISSING_ELEMENT, "Lane " + upperLaneID + " not found in model!"); } // Lower Lane - GNode lowerGLane = modelState.getIndex().findElementByClass(lowerLaneID, GNode.class) - .orElse(null); + GNode lowerGLane = (GNode) modelState.getIndex().get(lowerLaneID).orElse(null); if (lowerGLane == null) { throw new BPMNMissingElementException(BPMNMissingElementException.MISSING_ELEMENT, "Lane " + upperLaneID + " not found in model!"); @@ -368,9 +366,9 @@ private void updateFlowElement(final GNode gNode, final BPMNElementNode bpmnElem // position of the label too if (bpmnElementNode.hasBPMNLabel()) { BPMNLabel bpmnLabel = bpmnElementNode.getLabel(); - Optional _labelnode = modelState.getIndex() - .findElementByClass(bpmnElementNode.getId() + "_bpmnlabel", GNode.class); - updateLabel(_labelnode.get(), bpmnLabel, offsetX, offsetY); + GNode _labelnode = (GNode) modelState.getIndex() + .get(bpmnElementNode.getId() + "_bpmnlabel").orElse(null); + updateLabel(_labelnode, bpmnLabel, offsetX, offsetY); } } @@ -551,10 +549,8 @@ private void updateLaneSet(final Participant participant, final double offsetWid lane.setPosition(bpmnLaneX, bpmnLaneY); // update Gnode - Optional _lanenode = modelState.getIndex().findElementByClass(lane.getId(), GNode.class); - if (_lanenode.isPresent()) { - - GNode gLaneNode = _lanenode.get(); + GNode gLaneNode = (GNode) modelState.getIndex().get(lane.getId()).orElse(null); + if (gLaneNode != null) { gLaneNode.setSize(GraphUtil.dimension(bpmnLaneWidth, laneHeight)); gLaneNode.setPosition(GraphUtil.point(bpmnLaneX - poolBounds.getPosition().getX(), bpmnLaneY - poolBounds.getPosition().getY())); diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeRoutingPointsOperationHandler.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeRoutingPointsOperationHandler.java index 2e5bebb4..83dc869e 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeRoutingPointsOperationHandler.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNChangeRoutingPointsOperationHandler.java @@ -47,7 +47,6 @@ public class BPMNChangeRoutingPointsOperationHandler extends GModelOperationHand @Inject protected BPMNGModelState modelState; - @Override public Optional createCommand(ChangeRoutingPointsOperation operation) { return commandOf(() -> executeOperation(operation)); @@ -62,10 +61,9 @@ private void executeOperation(final ChangeRoutingPointsOperation operation) { String id = routingPoint.getElementId(); List newGLSPRoutingPoints = routingPoint.getNewRoutingPoints(); // update the GModel. - Optional _edge = modelState.getIndex().findElementByClass(id, GEdge.class); - if (_edge.isPresent()) { + GEdge edge = (GEdge) modelState.getIndex().get(id).orElse(null); + if (edge != null) { logger.fine("===== Updating GLSP RoutingPoints ======="); - GEdge edge = _edge.get(); edge.getRoutingPoints().clear(); edge.getRoutingPoints().addAll(newGLSPRoutingPoints); } diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesApplyOperationHandler.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesApplyOperationHandler.java index e6f75e69..65524d90 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesApplyOperationHandler.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesApplyOperationHandler.java @@ -99,15 +99,12 @@ private void executeOperation(final BPMNPropertiesApplyOperation operation) { bpmnElement = modelState.getBpmnModel().openDefaultProces(); } else { // find the corresponding gModelElement and bpmnElement.... - Optional _baseElement = modelState.getIndex().findElementByClass(elementID, BPMNGNode.class); - gModelElement = _baseElement.orElse(null); + gModelElement = modelState.getIndex().get(elementID).orElse(null); if (gModelElement != null) { - bpmnElement = modelState.getBpmnModel().findElementNodeById(elementID); - } else { - // not yet found - check Edges.... - Optional _baseEdge = modelState.getIndex().findElementByClass(elementID, BPMNGEdge.class); - gModelElement = _baseEdge.orElse(null); - if (gModelElement != null) { + if (gModelElement instanceof BPMNGNode) { + bpmnElement = modelState.getBpmnModel().findElementNodeById(elementID); + } + if (gModelElement instanceof BPMNGEdge) { bpmnElement = modelState.getBpmnModel().findElementEdgeById(elementID); } }