Skip to content

Commit f17fc67

Browse files
committed
added new method generateUniqueSignalIdByMaxNumber (Issue #397)
1 parent da86b2e commit f17fc67

1 file changed

Lines changed: 24 additions & 3 deletions

File tree

open-bpmn.glsp-server/src/main/java/org/openbpmn/extensions/elements/DefaultBPMNDefinitionsExtension.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,8 @@ public boolean updatePropertiesData(JsonObject json, final String category, fina
246246

247247
} else {
248248
// signal did not yet exist in definition list - so we create a new one
249-
int i = modelState.getBpmnModel().getSignals().size() + 1;
250-
String newSignalID = "signal_" + i;
251-
String newSignalName = "Signal " + i;
249+
String newSignalID = generateUniqueSignalIdByMaxNumber(); // find an unique id...
250+
String newSignalName = "Signal " + newSignalID.substring(7);
252251
signalIdList.add(newSignalID);
253252
try {
254253
modelState.getBpmnModel().addSignal(newSignalID, newSignalName);
@@ -322,4 +321,26 @@ private void updateSignalEvents() {
322321
}
323322
}
324323

324+
/**
325+
* Helper Method to find the next free signal_n number to generate a unique id
326+
*
327+
* @return
328+
*/
329+
private String generateUniqueSignalIdByMaxNumber() {
330+
int maxNumber = modelState.getBpmnModel().getSignals().stream()
331+
.map(signal -> signal.getId())
332+
.filter(id -> id.startsWith("signal_"))
333+
.mapToInt(id -> {
334+
try {
335+
return Integer.parseInt(id.substring(7));
336+
} catch (NumberFormatException e) {
337+
return 0; // ignore IDs that do not match the pattern
338+
}
339+
})
340+
.max()
341+
.orElse(0);
342+
343+
return "signal_" + (maxNumber + 1);
344+
}
345+
325346
}

0 commit comments

Comments
 (0)