Skip to content

Commit 6029184

Browse files
committed
* Visitor, SysML2PlantUMLStyle (isReferred): Added.
* VDefault (casePerformActionUsage, caseExhibitStateUsage, caseExhibitStateUsage, caseIncludeUseCaseUsage): Use shorthand notation if possible * VStructure (caseSatisfyRequirementUsage): if hasRefSubsettingWithoutDeclaredName(), render a node for the SatisfyRequirementUsage. * SysML2PlantUMLStyle (StyleRelDefaultSwitch): Added arrow styles for shorthand notations.
1 parent 8d7efe3 commit 6029184

5 files changed

Lines changed: 99 additions & 4 deletions

File tree

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@
5252
import org.omg.sysml.lang.sysml.FeatureMembership;
5353
import org.omg.sysml.lang.sysml.FeatureTyping;
5454
import org.omg.sysml.lang.sysml.FeatureValue;
55+
import org.omg.sysml.lang.sysml.Flow;
5556
import org.omg.sysml.lang.sysml.FlowUsage;
5657
import org.omg.sysml.lang.sysml.Import;
5758
import org.omg.sysml.lang.sysml.IncludeUseCaseUsage;
5859
import org.omg.sysml.lang.sysml.ItemDefinition;
59-
import org.omg.sysml.lang.sysml.Flow;
6060
import org.omg.sysml.lang.sysml.ItemUsage;
6161
import org.omg.sysml.lang.sysml.Membership;
6262
import org.omg.sysml.lang.sysml.MetadataFeature;
@@ -506,6 +506,27 @@ public String caseObjectiveMembership(ObjectiveMembership vm) {
506506
public String caseImport(Import imp) {
507507
return " ..> ";
508508
}
509+
510+
@Override
511+
public String casePerformActionUsage(PerformActionUsage pau) {
512+
return " --> ";
513+
}
514+
515+
@Override
516+
public String caseExhibitStateUsage(ExhibitStateUsage esu) {
517+
return " --> ";
518+
}
519+
520+
@Override
521+
public String caseEventOccurrenceUsage(EventOccurrenceUsage eou) {
522+
return " --> ";
523+
}
524+
525+
@Override
526+
public String caseIncludeUseCaseUsage(IncludeUseCaseUsage iuc) {
527+
return " --> ";
528+
}
529+
509530
}
510531

511532
public static class StyleStereotypeDefaultSwitch extends StyleStereotypeSwitch {

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@
2727
import java.util.ArrayList;
2828
import java.util.Arrays;
2929
import java.util.HashMap;
30+
import java.util.HashSet;
3031
import java.util.List;
3132
import java.util.Map;
33+
import java.util.Set;
3234
import java.util.regex.Matcher;
3335
import java.util.regex.Pattern;
3436
import java.util.stream.Collectors;
@@ -595,14 +597,31 @@ void popIdMap(boolean keep) {
595597
idMap = idMap.pop(keep);
596598
}
597599

600+
private Set<Element> assigned = new HashSet<Element>();
601+
598602
Integer newId(Element e) {
599-
return idMap.newId(e);
603+
if (assigned.contains(e)) {
604+
assigned.remove(e);
605+
return idMap.getId(e);
606+
} else {
607+
return idMap.newId(e);
608+
}
600609
}
601610

602611
Integer getId(Element e) {
603612
return idMap.getId(e);
604613
}
605614

615+
private Integer assignId(Element e) {
616+
assigned.add(e);
617+
return idMap.getId(e);
618+
}
619+
620+
boolean isReferred(Element e) {
621+
int pid = assignId(e);
622+
return null != vpath.getPaths(pid);
623+
}
624+
606625
private boolean inherited;
607626
void setInherited(boolean flag) {
608627
this.inherited = flag;

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

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,26 @@
3838
import org.omg.sysml.lang.sysml.Connector;
3939
import org.omg.sysml.lang.sysml.Dependency;
4040
import org.omg.sysml.lang.sysml.Element;
41+
import org.omg.sysml.lang.sysml.EventOccurrenceUsage;
42+
import org.omg.sysml.lang.sysml.ExhibitStateUsage;
4143
import org.omg.sysml.lang.sysml.Expression;
4244
import org.omg.sysml.lang.sysml.Feature;
4345
import org.omg.sysml.lang.sysml.FeatureChainExpression;
4446
import org.omg.sysml.lang.sysml.FeatureMembership;
4547
import org.omg.sysml.lang.sysml.FeatureReferenceExpression;
4648
import org.omg.sysml.lang.sysml.FeatureTyping;
4749
import org.omg.sysml.lang.sysml.FeatureValue;
50+
import org.omg.sysml.lang.sysml.Flow;
4851
import org.omg.sysml.lang.sysml.FlowUsage;
4952
import org.omg.sysml.lang.sysml.Import;
50-
import org.omg.sysml.lang.sysml.Flow;
53+
import org.omg.sysml.lang.sysml.IncludeUseCaseUsage;
5154
import org.omg.sysml.lang.sysml.Membership;
5255
import org.omg.sysml.lang.sysml.MetadataFeature;
5356
import org.omg.sysml.lang.sysml.Namespace;
5457
import org.omg.sysml.lang.sysml.OwningMembership;
58+
import org.omg.sysml.lang.sysml.PerformActionUsage;
5559
import org.omg.sysml.lang.sysml.Redefinition;
60+
import org.omg.sysml.lang.sysml.ReferenceSubsetting;
5661
import org.omg.sysml.lang.sysml.Relationship;
5762
import org.omg.sysml.lang.sysml.Specialization;
5863
import org.omg.sysml.lang.sysml.Subsetting;
@@ -295,6 +300,51 @@ protected Relationship findBindingLikeRel(Feature f) {
295300
return ret;
296301
}
297302

303+
// Shorthand notation
304+
private boolean addShorthandRelation(Usage u, String title) {
305+
if (u.getDeclaredName() != null) return false;
306+
if (u.getDeclaredShortName() != null) return false;
307+
ReferenceSubsetting rs = u.getOwnedReferenceSubsetting();
308+
if (rs == null) return false;
309+
310+
List<Membership> mss = u.getOwnedMembership();
311+
if (!mss.isEmpty()) return false;
312+
313+
if (isReferred(u)) return false;
314+
315+
Element owner = u.getOwner();
316+
if (!(owner instanceof Type)) return false;
317+
if (!checkId(owner)) return false;
318+
319+
addPRelation(owner, rs.getReferencedFeature(), u, title);
320+
321+
return true;
322+
}
323+
324+
@Override
325+
public String casePerformActionUsage(PerformActionUsage pau) {
326+
if (addShorthandRelation(pau, "<<perform>>")) return "";
327+
return null;
328+
}
329+
330+
@Override
331+
public String caseExhibitStateUsage(ExhibitStateUsage esu) {
332+
if (addShorthandRelation(esu, "<<exhibit>>")) return "";
333+
return null;
334+
}
335+
336+
@Override
337+
public String caseEventOccurrenceUsage(EventOccurrenceUsage eou) {
338+
if (addShorthandRelation(eou, "<<event>>")) return "";
339+
return null;
340+
}
341+
342+
@Override
343+
public String caseIncludeUseCaseUsage(IncludeUseCaseUsage iuc) {
344+
if (addShorthandRelation(iuc, "<<include>>")) return "";
345+
return null;
346+
}
347+
298348
@Override
299349
public String caseImport(Import imp) {
300350
VImport v = new VImport(this);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,8 @@ public String caseSatisfyRequirementUsage(SatisfyRequirementUsage sru) {
323323
if ((ru != null) && (target != null)) {
324324
addPRelation(target, ru, sru, "<<satisfy>>");
325325
}
326-
return "";
326+
if (hasRefSubsettingWithoutDeclaredName(sru)) return "";
327+
return null;
327328
}
328329

329330
@Override

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ protected boolean checkId(Element e) {
199199
return s2p.checkId(e);
200200
}
201201

202+
protected boolean isReferred(Element e) {
203+
return s2p.isReferred(e);
204+
}
205+
202206
protected void pushIdMap() {
203207
s2p.pushIdMap();
204208
}

0 commit comments

Comments
 (0)