From d890b7f1e464f6b2dbb286e355044510334c45a2 Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Thu, 21 Nov 2024 18:38:27 +0100 Subject: [PATCH] fixed Issue #362 --- .../src/bpmn-property-panel.tsx | 4 +-- .../DefaultBPMNParticipantExtension.java | 9 +++--- .../BPMNCreateEventDefinitionHandler.java | 8 ++--- .../openbpmn/glsp/model/BPMNGModelState.java | 30 +++++++++++++++++++ .../BPMNPropertiesApplyOperationHandler.java | 9 +----- .../BPMNPropertiesUpdateAction.java | 16 ++++++---- 6 files changed, 51 insertions(+), 25 deletions(-) diff --git a/open-bpmn.glsp-client/open-bpmn-properties/src/bpmn-property-panel.tsx b/open-bpmn.glsp-client/open-bpmn-properties/src/bpmn-property-panel.tsx index c3cf70ad..53dea253 100644 --- a/open-bpmn.glsp-client/open-bpmn-properties/src/bpmn-property-panel.tsx +++ b/open-bpmn.glsp-client/open-bpmn-properties/src/bpmn-property-panel.tsx @@ -332,7 +332,7 @@ export class BPMNPropertyPanel extends AbstractUIExtension implements IDiagramSt } /** - * This helper method is responsible to refresh teh property panel. + * This helper method is responsible to refresh the property panel. * The method loads the element from the root model context and updates * the JsonForms schemata. * @@ -348,7 +348,7 @@ export class BPMNPropertyPanel extends AbstractUIExtension implements IDiagramSt // return if we do not yet have a body DIV. if (!this.bodyDiv) { - console.log(' ------ no body div!!'); + // console.log(' ------ no body div --------'); return; } diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNParticipantExtension.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNParticipantExtension.java index d9c9695e..c9e0ce3a 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNParticipantExtension.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNParticipantExtension.java @@ -112,10 +112,10 @@ public void buildPropertiesForm(final BPMNElement bpmnElement, final DataBuilder @Override public boolean updatePropertiesData(final JsonObject json, final String category, final BPMNElement bpmnElement, final GModelElement gNodeElement) { - boolean _update = false; + boolean updateClient = false; // we are only interested in category general and lanes if (!"General".equals(category) && !"Lanes".equals(category)) { - return _update; + return updateClient; } long l = System.currentTimeMillis(); @@ -155,8 +155,7 @@ public boolean updatePropertiesData(final JsonObject json, final String category // this is a new lane - construct the lane in the BPMN model first.. Lane bpmnLane = process.addLane("Lane " + (process.getLanes().size() + 1)); laneDataIDs.add(bpmnLane.getId()); - modelState.reset(); - _update = true; + updateClient = true; } } // now we need to delete all lanes no longer part of the laneSetValues @@ -181,7 +180,7 @@ public boolean updatePropertiesData(final JsonObject json, final String category logger.debug("laneSet update in " + (System.currentTimeMillis() - l) + "ms"); - return _update; + return updateClient; } /** diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/event/BPMNCreateEventDefinitionHandler.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/event/BPMNCreateEventDefinitionHandler.java index 553d9deb..fdbf2403 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/event/BPMNCreateEventDefinitionHandler.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/elements/event/BPMNCreateEventDefinitionHandler.java @@ -32,7 +32,6 @@ import org.openbpmn.glsp.BPMNDiagramConfiguration; import org.openbpmn.glsp.elements.CreateBPMNNodeOperationHandler; import org.openbpmn.glsp.model.BPMNGModelState; -import org.openbpmn.glsp.operations.BPMNPropertiesUpdateAction; import com.google.inject.Inject; @@ -103,13 +102,12 @@ public void executeOperation(final CreateNodeOperation operation) { } } } - modelState.reset(); + if (updateClient) { + modelState.reset(); // select event actionDispatcher.dispatchAfterNextUpdate(new SelectAction(List.of(eventID))); - // send an update for the property panel... - actionDispatcher - .dispatchAfterNextUpdate(new BPMNPropertiesUpdateAction()); + modelState.refreshSelection(eventID); } } diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/model/BPMNGModelState.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/model/BPMNGModelState.java index 2273f066..47f78cd3 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/model/BPMNGModelState.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/model/BPMNGModelState.java @@ -20,11 +20,14 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.glsp.graph.GGraph; +import org.eclipse.glsp.graph.GModelElement; +import org.eclipse.glsp.server.actions.ActionDispatcher; import org.eclipse.glsp.server.model.DefaultGModelState; import org.openbpmn.bpmn.BPMNModel; import org.openbpmn.bpmn.exceptions.BPMNInvalidReferenceException; import org.openbpmn.bpmn.exceptions.BPMNModelException; import org.openbpmn.bpmn.util.BPMNModelFactory; +import org.openbpmn.glsp.operations.BPMNPropertiesUpdateAction; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -55,6 +58,9 @@ public class BPMNGModelState extends DefaultGModelState { @Inject protected BPMNGModelFactory bpmnGModelFactory; + @Inject + protected ActionDispatcher actionDispatcher; + public BPMNGModelState() { resetRevisions(); } @@ -231,4 +237,28 @@ public void refreshGModelState() { this.execute(new SetDirtyCommand()); } + /** + * This method sends a PropertyUpdateAction to the client to refresh the + * property panel. + * + * @param elementID + */ + public void refreshSelection(String elementID) { + refreshGModelState(); + GModelElement gModelElement = getIndex().get(elementID).orElse(null); + if (gModelElement == null) { + // reset to root (Default Process) + gModelElement = getRoot(); + + } + if (gModelElement != null) { + // Refresh the Data, Schema and UISchema (this could be changed by an extension) + String _data = gModelElement.getArgs().get("JSONFormsData").toString(); + // logger.info(" -> new JSON String=" + _data); + String _schema = gModelElement.getArgs().get("JSONFormsSchema").toString(); + String _uiSchema = gModelElement.getArgs().get("JSONFormsUISchema").toString(); + actionDispatcher.dispatch(new BPMNPropertiesUpdateAction(gModelElement.getId(), _data, _schema, + _uiSchema)); + } + } } 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 1c5f7b19..f097246c 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 @@ -143,18 +143,11 @@ private void executeOperation(final BPMNPropertiesApplyOperation operation) { } } - // Refresh the Data, Schema and UISchema (this could be changed by an extension) - String _data = gModelElement.getArgs().get("JSONFormsData").toString(); - logger.debug(" -> new JSON String=" + _data); - String _schema = gModelElement.getArgs().get("JSONFormsSchema").toString(); - String _uiSchema = gModelElement.getArgs().get("JSONFormsUISchema").toString(); - // Finally dispatch an BPMNPropertiesUpdateAction event to refresh the // property panel. This action is only dispatched in case at least one extension // has signaled an update. if (clientUpdate) { - actionDispatcher.dispatch(new BPMNPropertiesUpdateAction(_data, _schema, - _uiSchema)); + modelState.refreshSelection(gModelElement.getId()); } logger.debug("....execute Update " + operation.getId() + " in " + (System.currentTimeMillis() - l) + "ms"); diff --git a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesUpdateAction.java b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesUpdateAction.java index 682c5adf..b7ce51a7 100644 --- a/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesUpdateAction.java +++ b/open-bpmn.glsp-server/src/main/java/org/openbpmn/glsp/operations/BPMNPropertiesUpdateAction.java @@ -17,21 +17,27 @@ public class BPMNPropertiesUpdateAction extends Action { public static final String KIND = "BPMNPropertiesUpdateAction"; + private String id; private String data; private String schema; private String uiSchema; - public BPMNPropertiesUpdateAction() { - super(KIND); - } - - public BPMNPropertiesUpdateAction(String data, String schema, String uiSchema) { + public BPMNPropertiesUpdateAction(String id, String data, String schema, String uiSchema) { super(KIND); + this.id = id; this.data = data; this.schema = schema; this.uiSchema = uiSchema; } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getData() { return data; }