Skip to content

Commit ef00b40

Browse files
committed
Updated VBehavior to improve the display of text on transitions.
- In convertToDescription(TransitionUsage), used TransitionUsage operations, rather than navigating TransitionFeatureMemberships. - In triggerToText(AcceptActionUsage), constructed text similarly to in addAcceptActionUsage.
1 parent 50b3ee6 commit ef00b40

1 file changed

Lines changed: 36 additions & 49 deletions

File tree

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

Lines changed: 36 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 {
@@ -256,70 +255,58 @@ 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-
List<Feature> ps = s.getParameter();
267-
268-
// We render the first parameter only because the second parameter of
269-
// AcceptActionUsage is receiver, which should not be rendered.
270-
if (ps.isEmpty()) return "";
271-
v.visit(ps.get(0));
258+
private String triggerToText(AcceptActionUsage aau) {
259+
StringBuilder sb = new StringBuilder();
272260

273-
String str = v.getString();
274-
if (str.isEmpty()) {
275-
return getText(s);
261+
Expression payload = aau.getPayloadArgument();
262+
if (payload != null) {
263+
sb.append(getText(payload));
276264
} else {
277-
return str;
265+
ReferenceUsage ru = aau.getPayloadParameter();
266+
String name = ru.getDeclaredName();
267+
if (name == null) {
268+
appendFeatureType(sb, "", ru);
269+
} else {
270+
appendNameAndType(sb, ru, "");
271+
}
278272
}
273+
274+
Expression receiver = aau.getReceiverArgument();
275+
if (receiver != null) {
276+
sb.append(" <b>via</b>");
277+
sb.append(getText(receiver));
278+
}
279+
280+
return sb.toString();
279281
}
280282

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

304-
LineFoldStringBuilder ls = new LineFoldStringBuilder();
305-
if (triggerString != null) {
306-
triggerString = triggerString.trim();
285+
LineFoldStringBuilder ls = new LineFoldStringBuilder();
286+
287+
List<AcceptActionUsage> triggerActions = tu.getTriggerAction();
288+
if (!triggerActions.isEmpty()) {
289+
String triggerString = triggerToText(triggerActions.get(0)).trim();
307290
if (!(triggerString.isEmpty())) {
308291
ls.append(triggerString);
309292
ls.append(' ');
310293
}
311294
}
312-
if (guardString != null) {
313-
guardString = guardString.trim();
295+
296+
List<Expression> guardExpressions = tu.getGuardExpression();
297+
if (!guardExpressions.isEmpty()) {
298+
String guardString = getText(guardExpressions.get(0)).trim();
314299
if (!guardString.isEmpty()) {
315300
ls.fold();
316301
ls.append('[');
317302
ls.append(guardString);
318303
ls.append(']');
319304
}
320305
}
321-
if (effectString != null) {
322-
effectString = effectString.trim();
306+
307+
List<ActionUsage> effectActions = tu.getEffectAction();
308+
if (!effectActions.isEmpty()) {
309+
String effectString = getText(effectActions.get(0)).trim();
323310
if (!effectString.isEmpty()) {
324311
ls.fold();
325312
ls.append('/');

0 commit comments

Comments
 (0)