Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 35 additions & 49 deletions org.omg.sysml.plantuml/src/org/omg/sysml/plantuml/VBehavior.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*****************************************************************************
* SysML 2 Pilot Implementation, PlantUML Visualization
* Copyright (c) 2020-2024 Mgnite Inc.
* Copyright (c) 2020-2025 Mgnite Inc.
* Copyright (c) 2025 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -19,6 +20,7 @@
*
* Contributors:
* Hisashi Miyashita, Mgnite Inc.
* Ed Seidewitz, MDS
*
*****************************************************************************/

Expand All @@ -32,15 +34,12 @@
import org.omg.sysml.lang.sysml.Element;
import org.omg.sysml.lang.sysml.Expression;
import org.omg.sysml.lang.sysml.Feature;
import org.omg.sysml.lang.sysml.FeatureMembership;
import org.omg.sysml.lang.sysml.Membership;
import org.omg.sysml.lang.sysml.ReferenceUsage;
import org.omg.sysml.lang.sysml.SendActionUsage;
import org.omg.sysml.lang.sysml.StateSubactionKind;
import org.omg.sysml.lang.sysml.StateSubactionMembership;
import org.omg.sysml.lang.sysml.Step;
import org.omg.sysml.lang.sysml.Succession;
import org.omg.sysml.lang.sysml.TransitionFeatureMembership;
import org.omg.sysml.lang.sysml.TransitionUsage;

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

boolean flag = false;
if (name != null) {
if (defaultName == null || !name.equals(defaultName)) {
sb.append(name);
flag = true;
appendFeatureType(sb, ": ", f);
return true;
}
}
return appendFeatureType(sb, ": ", f) || flag;
return appendFeatureType(sb, "", f);
}

private boolean addSendActionUsage(SendActionUsage sau) {
Expand Down Expand Up @@ -256,66 +255,53 @@ public String toString() {
}
}

private String triggerToText(Step s) {
Visitor v = new Visitor(this) {
public String caseFeature(Feature f) {
addFeatureTypeText("", f);
return "";
}
};
for (Feature f: s.getParameter()) {
v.visit(f);
}
String str = v.getString();
if (str.isEmpty()) {
return getText(s);
private String triggerToText(AcceptActionUsage aau) {
StringBuilder sb = new StringBuilder();

Expression payload = aau.getPayloadArgument();
if (payload != null) {
sb.append(getText(payload));
} else {
return str;
ReferenceUsage ru = aau.getPayloadParameter();
appendNameAndType(sb, ru, "payload");
}

Expression receiver = aau.getReceiverArgument();
if (receiver != null) {
sb.append(" <b>via</b>");
sb.append(getText(receiver));
}

return sb.toString();
}

private String convertToDescription(TransitionUsage tu) {
String triggerString = null;
String guardString = null;
String effectString = null;

for (FeatureMembership fm: toOwnedFeatureMembershipArray(tu)) {
if (!(fm instanceof TransitionFeatureMembership)) continue;
TransitionFeatureMembership tfm = (TransitionFeatureMembership) fm;
Step s = tfm.getTransitionFeature();
if (s == null) continue;
switch (tfm.getKind()) {
case TRIGGER:
triggerString = triggerToText(s);
break;
case GUARD:
guardString = getText(s);
break;
case EFFECT:
effectString = getText(s);
break;
}
}

LineFoldStringBuilder ls = new LineFoldStringBuilder();
if (triggerString != null) {
triggerString = triggerString.trim();
LineFoldStringBuilder ls = new LineFoldStringBuilder();

List<AcceptActionUsage> triggerActions = tu.getTriggerAction();
if (!triggerActions.isEmpty()) {
String triggerString = triggerToText(triggerActions.get(0)).trim();
if (!(triggerString.isEmpty())) {
ls.append(triggerString);
ls.append(' ');
}
}
if (guardString != null) {
guardString = guardString.trim();

List<Expression> guardExpressions = tu.getGuardExpression();
if (!guardExpressions.isEmpty()) {
String guardString = getText(guardExpressions.get(0)).trim();
if (!guardString.isEmpty()) {
ls.fold();
ls.append('[');
ls.append(guardString);
ls.append(']');
}
}
if (effectString != null) {
effectString = effectString.trim();

List<ActionUsage> effectActions = tu.getEffectAction();
if (!effectActions.isEmpty()) {
String effectString = getText(effectActions.get(0)).trim();
if (!effectString.isEmpty()) {
ls.fold();
ls.append('/');
Expand Down