Skip to content

Commit 3d19956

Browse files
authored
Merge pull request #286 from Systems-Modeling/ST6RI-446
ST6RI-446: Visualize subsetted features.
2 parents 720fc6d + 010d647 commit 3d19956

3 files changed

Lines changed: 68 additions & 42 deletions

File tree

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@
4747
import org.omg.sysml.lang.sysml.Usage;
4848

4949
public class VDefault extends VTraverser {
50-
protected static String getFeatureName(Feature f) {
51-
return f.getEffectiveName();
52-
}
53-
5450
protected static String getName(Element e) {
5551
if (e instanceof Feature) {
5652
return getFeatureName((Feature) e);

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

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.omg.sysml.lang.sysml.RequirementUsage;
4343
import org.omg.sysml.lang.sysml.ResultExpressionMembership;
4444
import org.omg.sysml.lang.sysml.SatisfyRequirementUsage;
45+
import org.omg.sysml.lang.sysml.Subsetting;
4546
import org.omg.sysml.lang.sysml.Type;
4647

4748
public abstract class VStructure extends VDefault {
@@ -103,15 +104,7 @@ private Feature getRedefinedFeature(Feature f) {
103104
private String redefinedFeatureText(Feature f) {
104105
Feature rf = getRedefinedFeature(f);
105106
if (rf == null) return null;
106-
String name = getFeatureName(rf);
107-
if (name == null) return null;
108-
109-
org.omg.sysml.lang.sysml.Namespace pkg = rf.getOwningNamespace();
110-
if (pkg == null) {
111-
return name;
112-
} else {
113-
return pkg.getName() + "::" + name;
114-
}
107+
return getNameWithNamespace(rf);
115108
}
116109

117110
private boolean addRedefinedFeatureText(Feature f) {
@@ -129,7 +122,7 @@ private void addFeatureTextInternal(Feature f, String name, boolean isInherited)
129122
append('^');
130123
}
131124
append(name);
132-
addFeatureTypeText(": ", f);
125+
addFeatureTypeAndSubsettedText(f);
133126
addFeatureMembershipText(f);
134127
}
135128

@@ -160,32 +153,20 @@ protected boolean addFeatureText(Feature f) {
160153
}
161154

162155
protected void addAnonymouseFeatureText(Feature f) {
163-
addFeatureTypeText(": ", f);
156+
addFeatureTypeAndSubsettedText(f);
164157
addFeatureMembershipText(f);
165158
}
166159

167-
168160
protected String extractTitleName(Element e) {
169161
String name = getNameAnyway(e, true);
170162
if (!(e instanceof Feature)) return name;
171163

172164
Feature f = (Feature) e;
173-
List<FeatureTyping> tt = f.getOwnedTyping();
174-
if (tt.isEmpty()) return name;
175165
StringBuilder sb = new StringBuilder();
176-
for (FeatureTyping ft: tt) {
177-
if (sb.length() > 0) {
178-
sb.append(", ");
179-
}
180-
if (ft == null) continue;
181-
Type typ = ft.getType();
182-
if (typ == null) continue;
183-
String typeName = typ.getName();
184-
if (typeName == null) continue;
185-
sb.append(typeName);
186-
}
187-
if (sb.length() == 0) return name;
188-
sb.insert(0, ": ");
166+
boolean added = appendFeatureType(sb, ": ", f);
167+
sb.append(' ');
168+
added = appendSubsettingFeature(sb, ":> ", f) || added;
169+
if (!added) return name;
189170
sb.insert(0, name);
190171
/*
191172
if (f instanceof Usage) {

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

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.omg.sysml.lang.sysml.Membership;
3535
import org.omg.sysml.lang.sysml.Multiplicity;
3636
import org.omg.sysml.lang.sysml.MultiplicityRange;
37+
import org.omg.sysml.lang.sysml.Redefinition;
3738
import org.omg.sysml.lang.sysml.Subsetting;
3839
import org.omg.sysml.lang.sysml.Type;
3940
import org.omg.sysml.lang.sysml.util.SysMLSwitch;
@@ -320,23 +321,71 @@ private void addMultiplicityString(StringBuilder ss, Element e) {
320321
}
321322
}
322323

323-
protected void addFeatureTypeText(String prefix, Feature f) {
324-
List<FeatureTyping> ts = f.getOwnedTyping();
325-
if (ts.isEmpty()) return;
324+
protected static String getFeatureName(Feature f) {
325+
return f.getEffectiveName();
326+
}
327+
328+
protected static String getNameWithNamespace(Feature f) {
329+
String name = getFeatureName(f);
330+
if (name == null) return null;
331+
org.omg.sysml.lang.sysml.Namespace pkg = f.getOwningNamespace();
332+
if (pkg == null) {
333+
return name;
334+
} else {
335+
return pkg.getName() + "::" + name;
336+
}
337+
}
338+
339+
protected static boolean appendSubsettingFeature(StringBuilder sb, String prefix, Feature f) {
340+
List<Subsetting> ss = f.getOwnedSubsetting();
341+
if (ss.isEmpty()) return false;
326342
boolean added = false;
327-
for (FeatureTyping ft: ts) {
328-
Type typ = ft.getType();
329-
if (typ == null) continue;
330-
String name = typ.getName();
343+
for (Subsetting s: ss) {
344+
if (s == null) continue;
345+
if (s instanceof Redefinition) continue;
346+
Feature sf = s.getSubsettedFeature();
347+
if (sf == null) continue;
348+
String name = getNameWithNamespace(sf);
331349
if (name == null) continue;
332-
if (!added) {
333-
append(prefix);
350+
if (added) {
351+
sb.append(", ");
352+
} else {
353+
sb.append(prefix);
334354
added = true;
355+
}
356+
sb.append(name);
357+
}
358+
return added;
359+
}
360+
361+
protected static boolean appendFeatureType(StringBuilder sb, String prefix, Feature f) {
362+
List<FeatureTyping> tt = f.getOwnedTyping();
363+
if (tt.isEmpty()) return false;
364+
boolean added = false;
365+
for (FeatureTyping ft: tt) {
366+
if (ft == null) continue;
367+
Type typ = ft.getType();
368+
if (typ == null) continue;
369+
String typeName = typ.getName();
370+
if (typeName == null) continue;
371+
if (added) {
372+
sb.append(", ");
335373
} else {
336-
append(", ");
374+
sb.append(prefix);
375+
added = true;
337376
}
338-
append(name);
377+
sb.append(typeName);
339378
}
379+
return added;
380+
}
381+
382+
protected void addFeatureTypeText(String prefix, Feature f) {
383+
appendFeatureType(sb, prefix, f);
384+
}
385+
386+
protected void addFeatureTypeAndSubsettedText(Feature f) {
387+
appendFeatureType(sb, ": ", f);
388+
appendSubsettingFeature(sb, ":> ", f);
340389
}
341390

342391
private boolean outputPRelation(StringBuilder ss, PRelation pr) {

0 commit comments

Comments
 (0)