terfloth@itemis.de 14 лет назад
Родитель
Сommit
76f43ac522

+ 30 - 0
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/naming/SGraphNameProvider.java

@@ -10,6 +10,10 @@
  */
 package org.yakindu.sct.model.sgraph.naming;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
@@ -17,12 +21,17 @@ import org.eclipse.xtext.naming.IQualifiedNameConverter;
 import org.eclipse.xtext.naming.QualifiedName;
 import org.eclipse.xtext.util.SimpleAttributeResolver;
 import org.eclipse.xtext.util.Strings;
+import org.yakindu.sct.model.sgraph.Choice;
 import org.yakindu.sct.model.sgraph.Declaration;
 import org.yakindu.sct.model.sgraph.FinalState;
+import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.sgraph.ScopedElement;
 import org.yakindu.sct.model.sgraph.Statechart;
+import org.yakindu.sct.model.sgraph.Vertex;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
 import com.google.inject.Inject;
 
 /**
@@ -35,6 +44,7 @@ import com.google.inject.Inject;
 public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider {
 
 	private static final String _FINAL_STATE_NAME = "_final_";
+	private static final String _CHOICE_NAME = "_choice_";
 
 	@Inject
 	private IQualifiedNameConverter nameConverter;
@@ -78,6 +88,26 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 		return qualifiedNameFromConverter;
 	}
 
+	public QualifiedName qualifiedName(Choice ele) {
+		
+		// first get order number of choice node 
+		List<Vertex> choiceList = new ArrayList<Vertex>();
+		choiceList.addAll(Collections2.filter(((Region) ele.eContainer()).getVertices(), new Predicate<Vertex>() {
+			public boolean apply(Vertex input) { return input instanceof Choice; }
+		}));
+		int index = choiceList.indexOf(ele);
+				
+		EObject temp = ele;
+		QualifiedName qualifiedNameFromConverter = QualifiedName.create(_CHOICE_NAME + index);
+		while (temp.eContainer() != null) {
+			temp = temp.eContainer();
+			QualifiedName parentsQualifiedName = getFullyQualifiedName(temp);
+			if (parentsQualifiedName != null)
+				return parentsQualifiedName.append(qualifiedNameFromConverter);
+		}
+		return qualifiedNameFromConverter;
+	}
+
 	public QualifiedName qualifiedName(Declaration ele) {
 		QualifiedName name = null;
 		if (!Strings.isEmpty(ele.getName())) {