Skip to content

Commit 017e0ba

Browse files
authored
Merge pull request #590 from Systems-Modeling/ST6RI-793
ST6RI-793 Transition source cannot be a feature chain
2 parents 3187a2e + 82af8b9 commit 017e0ba

2 files changed

Lines changed: 17 additions & 14 deletions

File tree

org.omg.sysml/src/org/omg/sysml/delegate/setting/TransitionUsage_source_SettingDelegate.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@
2222

2323
package org.omg.sysml.delegate.setting;
2424

25-
import org.eclipse.emf.common.util.EList;
2625
import org.eclipse.emf.ecore.EObject;
2726
import org.eclipse.emf.ecore.EStructuralFeature;
2827
import org.eclipse.emf.ecore.InternalEObject;
29-
import org.omg.sysml.lang.sysml.ActionUsage;
30-
import org.omg.sysml.lang.sysml.Element;
31-
import org.omg.sysml.lang.sysml.Membership;
28+
import org.omg.sysml.lang.sysml.Feature;
3229
import org.omg.sysml.lang.sysml.TransitionUsage;
33-
import org.omg.sysml.util.NamespaceUtil;
30+
import org.omg.sysml.util.FeatureUtil;
31+
import org.omg.sysml.util.UsageUtil;
3432

3533
public class TransitionUsage_source_SettingDelegate extends BasicDerivedObjectSettingDelegate {
3634

@@ -40,14 +38,8 @@ public TransitionUsage_source_SettingDelegate(EStructuralFeature eStructuralFeat
4038

4139
@Override
4240
protected EObject basicGet(InternalEObject owner) {
43-
NamespaceUtil.addAdditionalMembersTo((TransitionUsage)owner);
44-
EList<Membership> ownedMemberships = ((TransitionUsage)owner).getOwnedMembership();
45-
if (ownedMemberships.isEmpty()) {
46-
return null;
47-
} else {
48-
Element member = ownedMemberships.get(0).getMemberElement();
49-
return member instanceof ActionUsage? (ActionUsage)member: null;
50-
}
41+
Feature source = UsageUtil.getSourceFeatureOf((TransitionUsage)owner);
42+
return source == null? null: FeatureUtil.getBasicFeatureOf(source);
5143
}
5244

5345
}

org.omg.sysml/src/org/omg/sysml/util/UsageUtil.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ public static Feature getSourceFeature(Feature feature) {
199199
if (owningNamespace instanceof TransitionUsage) {
200200
TransitionUsage transition = (TransitionUsage)owningNamespace;
201201
if (transition.getSuccession() == feature) {
202-
return transition.getSource();
202+
return getSourceFeatureOf(transition);
203203
}
204204
}
205205
return getPreviousFeature(feature);
@@ -377,6 +377,17 @@ private static boolean hasIncomingTransitionsIn(Type container, StateUsage state
377377

378378
// Transitions
379379

380+
public static Feature getSourceFeatureOf(TransitionUsage transition) {
381+
NamespaceUtil.addAdditionalMembersTo(transition);
382+
return transition.getOwnedMembership().stream().
383+
filter(mem->!(mem instanceof FeatureMembership)).
384+
map(Membership::getMemberElement).
385+
filter(Feature.class::isInstance).
386+
map(Feature.class::cast).
387+
filter(f->FeatureUtil.getBasicFeatureOf(f) instanceof ActionUsage).
388+
findFirst().orElse(null);
389+
}
390+
380391
public static Feature getTransitionSourceOf(Feature transition) {
381392
Feature source= transition instanceof TransitionUsage? ((TransitionUsage)transition).getSource():
382393
transition instanceof Succession? ((Succession)transition).getSourceFeature():

0 commit comments

Comments
 (0)