Просмотр исходного кода

Added QualifiedName for Choice

Andreas Mülder 14 лет назад
Родитель
Сommit
d8b7df4825

+ 35 - 3
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/naming/SGraphNameProvider.java

@@ -10,6 +10,9 @@
  */
 package org.yakindu.sct.model.sgraph.naming;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
@@ -17,6 +20,7 @@ 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;
@@ -24,7 +28,10 @@ import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.sgraph.ScopedElement;
 import org.yakindu.sct.model.sgraph.State;
 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;
 
 /**
@@ -37,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;
@@ -56,6 +64,31 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 		return name;
 	}
 
+	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(Scope ele) {
 		QualifiedName name = null;
 		String nameString = SimpleAttributeResolver.NAME_RESOLVER.apply(ele);
@@ -82,7 +115,7 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 		}
 		return qfn;
 	}
-	
+
 	public QualifiedName qualifiedName(State ele) {
 		EObject temp = ele;
 		ele.getName();
@@ -96,7 +129,7 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 		}
 		return qualifiedNameFromConverter;
 	}
-	
+
 	public QualifiedName qualifiedName(Region ele) {
 		EObject temp = ele;
 		ele.getName();
@@ -110,7 +143,6 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 		}
 		return qualifiedNameFromConverter;
 	}
-	
 
 	public QualifiedName qualifiedName(Declaration ele) {
 		QualifiedName name = null;