Skip to content

Commit dbc031a

Browse files
authored
Merge pull request #689 from Systems-Modeling/ST6RI-867
ST6RI-867 Trigger is not shown properly (PlantUML)
2 parents e0ac5a2 + 18394ce commit dbc031a

File tree

1 file changed

+35
-49
lines changed

1 file changed

+35
-49
lines changed

org.omg.sysml.plantuml/src/org/omg/sysml/plantuml/VBehavior.java

Lines changed: 35 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*****************************************************************************
22
* SysML 2 Pilot Implementation, PlantUML Visualization
3-
* Copyright (c) 2020-2024 Mgnite Inc.
3+
* Copyright (c) 2020-2025 Mgnite Inc.
4+
* Copyright (c) 2025 Model Driven Solutions, Inc.
45
*
56
* This program is free software: you can redistribute it and/or modify
67
* it under the terms of the GNU Lesser General Public License as published by
@@ -19,6 +20,7 @@
1920
*
2021
* Contributors:
2122
* Hisashi Miyashita, Mgnite Inc.
23+
* Ed Seidewitz, MDS
2224
*
2325
*****************************************************************************/
2426

@@ -32,15 +34,12 @@
3234
import org.omg.sysml.lang.sysml.Element;
3335
import org.omg.sysml.lang.sysml.Expression;
3436
import org.omg.sysml.lang.sysml.Feature;
35-
import org.omg.sysml.lang.sysml.FeatureMembership;
3637
import org.omg.sysml.lang.sysml.Membership;
3738
import org.omg.sysml.lang.sysml.ReferenceUsage;
3839
import org.omg.sysml.lang.sysml.SendActionUsage;
3940
import org.omg.sysml.lang.sysml.StateSubactionKind;
4041
import org.omg.sysml.lang.sysml.StateSubactionMembership;
41-
import org.omg.sysml.lang.sysml.Step;
4242
import org.omg.sysml.lang.sysml.Succession;
43-
import org.omg.sysml.lang.sysml.TransitionFeatureMembership;
4443
import org.omg.sysml.lang.sysml.TransitionUsage;
4544

4645
public abstract class VBehavior extends VDefault {
@@ -135,14 +134,14 @@ private static boolean appendNameAndType(StringBuilder sb, Feature f, String def
135134
if (f == null) return false;
136135
String name = getName(f);
137136

138-
boolean flag = false;
139137
if (name != null) {
140138
if (defaultName == null || !name.equals(defaultName)) {
141139
sb.append(name);
142-
flag = true;
140+
appendFeatureType(sb, ": ", f);
141+
return true;
143142
}
144143
}
145-
return appendFeatureType(sb, ": ", f) || flag;
144+
return appendFeatureType(sb, "", f);
146145
}
147146

148147
private boolean addSendActionUsage(SendActionUsage sau) {
@@ -256,66 +255,53 @@ public String toString() {
256255
}
257256
}
258257

259-
private String triggerToText(Step s) {
260-
Visitor v = new Visitor(this) {
261-
public String caseFeature(Feature f) {
262-
addFeatureTypeText("", f);
263-
return "";
264-
}
265-
};
266-
for (Feature f: s.getParameter()) {
267-
v.visit(f);
268-
}
269-
String str = v.getString();
270-
if (str.isEmpty()) {
271-
return getText(s);
258+
private String triggerToText(AcceptActionUsage aau) {
259+
StringBuilder sb = new StringBuilder();
260+
261+
Expression payload = aau.getPayloadArgument();
262+
if (payload != null) {
263+
sb.append(getText(payload));
272264
} else {
273-
return str;
265+
ReferenceUsage ru = aau.getPayloadParameter();
266+
appendNameAndType(sb, ru, "payload");
274267
}
268+
269+
Expression receiver = aau.getReceiverArgument();
270+
if (receiver != null) {
271+
sb.append(" <b>via</b>");
272+
sb.append(getText(receiver));
273+
}
274+
275+
return sb.toString();
275276
}
276277

277278
private String convertToDescription(TransitionUsage tu) {
278-
String triggerString = null;
279-
String guardString = null;
280-
String effectString = null;
281-
282-
for (FeatureMembership fm: toOwnedFeatureMembershipArray(tu)) {
283-
if (!(fm instanceof TransitionFeatureMembership)) continue;
284-
TransitionFeatureMembership tfm = (TransitionFeatureMembership) fm;
285-
Step s = tfm.getTransitionFeature();
286-
if (s == null) continue;
287-
switch (tfm.getKind()) {
288-
case TRIGGER:
289-
triggerString = triggerToText(s);
290-
break;
291-
case GUARD:
292-
guardString = getText(s);
293-
break;
294-
case EFFECT:
295-
effectString = getText(s);
296-
break;
297-
}
298-
}
299279

300-
LineFoldStringBuilder ls = new LineFoldStringBuilder();
301-
if (triggerString != null) {
302-
triggerString = triggerString.trim();
280+
LineFoldStringBuilder ls = new LineFoldStringBuilder();
281+
282+
List<AcceptActionUsage> triggerActions = tu.getTriggerAction();
283+
if (!triggerActions.isEmpty()) {
284+
String triggerString = triggerToText(triggerActions.get(0)).trim();
303285
if (!(triggerString.isEmpty())) {
304286
ls.append(triggerString);
305287
ls.append(' ');
306288
}
307289
}
308-
if (guardString != null) {
309-
guardString = guardString.trim();
290+
291+
List<Expression> guardExpressions = tu.getGuardExpression();
292+
if (!guardExpressions.isEmpty()) {
293+
String guardString = getText(guardExpressions.get(0)).trim();
310294
if (!guardString.isEmpty()) {
311295
ls.fold();
312296
ls.append('[');
313297
ls.append(guardString);
314298
ls.append(']');
315299
}
316300
}
317-
if (effectString != null) {
318-
effectString = effectString.trim();
301+
302+
List<ActionUsage> effectActions = tu.getEffectAction();
303+
if (!effectActions.isEmpty()) {
304+
String effectString = getText(effectActions.get(0)).trim();
319305
if (!effectString.isEmpty()) {
320306
ls.fold();
321307
ls.append('/');

0 commit comments

Comments
 (0)