|
18 | 18 | import static org.eclipse.syson.sysml.textual.utils.SysMLRelationPredicates.IS_MEMBERSHIP; |
19 | 19 | import static org.eclipse.syson.sysml.textual.utils.SysMLRelationPredicates.IS_METADATA_USAGE; |
20 | 20 |
|
| 21 | +import java.lang.Class; |
21 | 22 | import java.util.ArrayList; |
22 | 23 | import java.util.Collection; |
23 | 24 | import java.util.HashSet; |
|
34 | 35 | import org.eclipse.emf.common.util.EList; |
35 | 36 | import org.eclipse.emf.ecore.EObject; |
36 | 37 | import org.eclipse.emf.ecore.InternalEObject; |
37 | | -import org.eclipse.syson.sysml.AcceptActionUsage; |
38 | | -import org.eclipse.syson.sysml.ActionDefinition; |
39 | | -import org.eclipse.syson.sysml.ActionUsage; |
40 | | -import org.eclipse.syson.sysml.ActorMembership; |
41 | | -import org.eclipse.syson.sysml.AnalysisCaseUsage; |
42 | | -import org.eclipse.syson.sysml.AssertConstraintUsage; |
43 | | -import org.eclipse.syson.sysml.AttributeDefinition; |
44 | | -import org.eclipse.syson.sysml.AttributeUsage; |
45 | | -import org.eclipse.syson.sysml.CalculationDefinition; |
46 | | -import org.eclipse.syson.sysml.Classifier; |
47 | | -import org.eclipse.syson.sysml.CollectExpression; |
48 | | -import org.eclipse.syson.sysml.Comment; |
49 | | -import org.eclipse.syson.sysml.ConjugatedPortDefinition; |
50 | | -import org.eclipse.syson.sysml.ConjugatedPortTyping; |
51 | | -import org.eclipse.syson.sysml.ConstraintUsage; |
52 | | -import org.eclipse.syson.sysml.ControlNode; |
53 | | -import org.eclipse.syson.sysml.DecisionNode; |
54 | | -import org.eclipse.syson.sysml.Definition; |
55 | | -import org.eclipse.syson.sysml.Documentation; |
56 | | -import org.eclipse.syson.sysml.Element; |
57 | | -import org.eclipse.syson.sysml.EndFeatureMembership; |
58 | | -import org.eclipse.syson.sysml.EnumerationDefinition; |
59 | | -import org.eclipse.syson.sysml.EnumerationUsage; |
60 | | -import org.eclipse.syson.sysml.Expression; |
61 | | -import org.eclipse.syson.sysml.Feature; |
62 | | -import org.eclipse.syson.sysml.FeatureChainExpression; |
63 | | -import org.eclipse.syson.sysml.FeatureChaining; |
64 | | -import org.eclipse.syson.sysml.FeatureDirectionKind; |
65 | | -import org.eclipse.syson.sysml.FeatureMembership; |
66 | | -import org.eclipse.syson.sysml.FeatureReferenceExpression; |
67 | | -import org.eclipse.syson.sysml.FeatureTyping; |
68 | | -import org.eclipse.syson.sysml.FeatureValue; |
69 | | -import org.eclipse.syson.sysml.ForkNode; |
70 | | -import org.eclipse.syson.sysml.Import; |
71 | | -import org.eclipse.syson.sysml.IncludeUseCaseUsage; |
72 | | -import org.eclipse.syson.sysml.InterfaceDefinition; |
73 | | -import org.eclipse.syson.sysml.InvocationExpression; |
74 | | -import org.eclipse.syson.sysml.ItemDefinition; |
75 | | -import org.eclipse.syson.sysml.ItemUsage; |
76 | | -import org.eclipse.syson.sysml.JoinNode; |
77 | | -import org.eclipse.syson.sysml.LibraryPackage; |
78 | | -import org.eclipse.syson.sysml.LiteralBoolean; |
79 | | -import org.eclipse.syson.sysml.LiteralExpression; |
80 | | -import org.eclipse.syson.sysml.LiteralInfinity; |
81 | | -import org.eclipse.syson.sysml.LiteralInteger; |
82 | | -import org.eclipse.syson.sysml.LiteralRational; |
83 | | -import org.eclipse.syson.sysml.LiteralString; |
84 | | -import org.eclipse.syson.sysml.Membership; |
85 | | -import org.eclipse.syson.sysml.MembershipImport; |
86 | | -import org.eclipse.syson.sysml.MergeNode; |
87 | | -import org.eclipse.syson.sysml.Metaclass; |
88 | | -import org.eclipse.syson.sysml.MetadataAccessExpression; |
89 | | -import org.eclipse.syson.sysml.MetadataDefinition; |
90 | | -import org.eclipse.syson.sysml.MetadataUsage; |
91 | | -import org.eclipse.syson.sysml.MultiplicityRange; |
92 | | -import org.eclipse.syson.sysml.Namespace; |
93 | | -import org.eclipse.syson.sysml.NamespaceImport; |
94 | | -import org.eclipse.syson.sysml.NullExpression; |
95 | | -import org.eclipse.syson.sysml.ObjectiveMembership; |
96 | | -import org.eclipse.syson.sysml.OccurrenceDefinition; |
97 | | -import org.eclipse.syson.sysml.OccurrenceUsage; |
98 | | -import org.eclipse.syson.sysml.OperatorExpression; |
99 | | -import org.eclipse.syson.sysml.OwningMembership; |
| 38 | +import org.eclipse.syson.sysml.*; |
100 | 39 | import org.eclipse.syson.sysml.Package; |
101 | | -import org.eclipse.syson.sysml.ParameterMembership; |
102 | | -import org.eclipse.syson.sysml.PartDefinition; |
103 | | -import org.eclipse.syson.sysml.PartUsage; |
104 | | -import org.eclipse.syson.sysml.PerformActionUsage; |
105 | | -import org.eclipse.syson.sysml.PortDefinition; |
106 | | -import org.eclipse.syson.sysml.PortUsage; |
107 | | -import org.eclipse.syson.sysml.PortionKind; |
108 | | -import org.eclipse.syson.sysml.Redefinition; |
109 | | -import org.eclipse.syson.sysml.ReferenceSubsetting; |
110 | | -import org.eclipse.syson.sysml.ReferenceUsage; |
111 | | -import org.eclipse.syson.sysml.Relationship; |
112 | | -import org.eclipse.syson.sysml.RequirementDefinition; |
113 | | -import org.eclipse.syson.sysml.RequirementUsage; |
114 | | -import org.eclipse.syson.sysml.ReturnParameterMembership; |
115 | | -import org.eclipse.syson.sysml.SatisfyRequirementUsage; |
116 | | -import org.eclipse.syson.sysml.SelectExpression; |
117 | | -import org.eclipse.syson.sysml.Specialization; |
118 | | -import org.eclipse.syson.sysml.StakeholderMembership; |
119 | | -import org.eclipse.syson.sysml.StateUsage; |
120 | | -import org.eclipse.syson.sysml.Subclassification; |
121 | | -import org.eclipse.syson.sysml.SubjectMembership; |
122 | | -import org.eclipse.syson.sysml.Subsetting; |
123 | | -import org.eclipse.syson.sysml.SuccessionAsUsage; |
124 | | -import org.eclipse.syson.sysml.SysmlPackage; |
125 | | -import org.eclipse.syson.sysml.TextualRepresentation; |
126 | | -import org.eclipse.syson.sysml.TransitionFeatureKind; |
127 | | -import org.eclipse.syson.sysml.TransitionFeatureMembership; |
128 | | -import org.eclipse.syson.sysml.TransitionUsage; |
129 | | -import org.eclipse.syson.sysml.Type; |
130 | | -import org.eclipse.syson.sysml.Usage; |
131 | | -import org.eclipse.syson.sysml.UseCaseDefinition; |
132 | | -import org.eclipse.syson.sysml.UseCaseUsage; |
133 | | -import org.eclipse.syson.sysml.VerificationCaseUsage; |
134 | | -import org.eclipse.syson.sysml.ViewpointDefinition; |
135 | | -import org.eclipse.syson.sysml.VisibilityKind; |
136 | 40 | import org.eclipse.syson.sysml.helper.EMFUtils; |
137 | 41 | import org.eclipse.syson.sysml.helper.LabelConstants; |
138 | 42 | import org.eclipse.syson.sysml.textual.utils.Appender; |
@@ -1040,6 +944,23 @@ public String caseTransitionUsage(TransitionUsage transitionUsage) { |
1040 | 944 | return builder.toString(); |
1041 | 945 | } |
1042 | 946 |
|
| 947 | + @Override |
| 948 | + public String caseTriggerInvocationExpression(TriggerInvocationExpression triggerInvocationExpression) { |
| 949 | + var builder = this.newAppender(); |
| 950 | + |
| 951 | + builder.append(triggerInvocationExpression.getKind().toString().toLowerCase()); |
| 952 | + if (triggerInvocationExpression.getKind() == TriggerKind.WHEN) { |
| 953 | + for (Expression argument : triggerInvocationExpression.getArgument()) { |
| 954 | + this.appendArgumentExpression(builder, argument); |
| 955 | + } |
| 956 | + } else { |
| 957 | + for (Feature parameter : triggerInvocationExpression.getParameter()) { |
| 958 | + this.appendArgument(builder, parameter); |
| 959 | + } |
| 960 | + } |
| 961 | + return builder.toString(); |
| 962 | + } |
| 963 | + |
1043 | 964 | @Override |
1044 | 965 | public String caseUseCaseDefinition(UseCaseDefinition useCase) { |
1045 | 966 | Appender builder = this.newAppender(); |
@@ -2071,13 +1992,24 @@ private void appendAcceptParameterPart(Appender builder, AcceptActionUsage accep |
2071 | 1992 | if (!parameters.isEmpty()) { |
2072 | 1993 | ReferenceUsage payload = acceptActionUsage.getPayloadParameter(); |
2073 | 1994 | Appender payloadBuilder = this.newAppender(); |
| 1995 | + // Payload feature |
2074 | 1996 | this.appendUsageDeclaration(payloadBuilder, payload); |
2075 | 1997 | if (payloadBuilder.toString().startsWith(": ")) { |
2076 | | - // Set the type only |
| 1998 | + // The type only is defined. To avoid the valid but not pretty notation " : X", we skip the heading ":" |
2077 | 1999 | builder.appendWithSpaceIfNeeded(payloadBuilder.toString().substring(2)); |
2078 | 2000 | } else { |
2079 | 2001 | builder.appendWithSpaceIfNeeded(payloadBuilder.toString()); |
2080 | 2002 | } |
| 2003 | + |
| 2004 | + Expression payloadArgument = acceptActionUsage.getPayloadArgument(); |
| 2005 | + |
| 2006 | + if (payloadArgument != null) { |
| 2007 | + String payloadArgStr = this.doSwitch(payloadArgument); |
| 2008 | + if (payloadArgStr != null) { |
| 2009 | + builder.appendWithSpaceIfNeeded(payloadArgStr); |
| 2010 | + } |
| 2011 | + } |
| 2012 | + |
2081 | 2013 | this.childrenMembershipToSkip.add(parameters.get(0).getOwningMembership()); |
2082 | 2014 |
|
2083 | 2015 | if (parameters.size() > 1) { |
@@ -2259,4 +2191,25 @@ private void appendControlNode(Appender appender, ControlNode controlNode, Strin |
2259 | 2191 | this.appendUsageDeclaration(appender, controlNode); |
2260 | 2192 | this.appendActionNodeBody(appender, controlNode); |
2261 | 2193 | } |
| 2194 | + |
| 2195 | + private void appendArgument(Appender builder, Feature parameter) { |
| 2196 | + FeatureValue valuation = parameter.getValuation(); |
| 2197 | + if (valuation != null) { |
| 2198 | + builder.appendWithSpaceIfNeeded(this.doSwitch(valuation.getValue())); |
| 2199 | + } |
| 2200 | + } |
| 2201 | + |
| 2202 | + private void appendArgumentExpression(Appender builder, Expression argument) { |
| 2203 | + if (argument instanceof FeatureReferenceExpression refExpression) { |
| 2204 | + Expression expression = refExpression.getOwnedFeatureMembership().stream() |
| 2205 | + .map(FeatureMembership::getMemberElement) |
| 2206 | + .filter(Expression.class::isInstance) |
| 2207 | + .map(Expression.class::cast) |
| 2208 | + .findFirst() |
| 2209 | + .orElse(null); |
| 2210 | + if (expression != null) { |
| 2211 | + builder.appendWithSpaceIfNeeded(this.doSwitch(expression)); |
| 2212 | + } |
| 2213 | + } |
| 2214 | + } |
2262 | 2215 | } |
0 commit comments