Przeglądaj źródła

Added/Updated element names (YAKHMI-424)

benjamin.schwertfeger@gmail.com 14 lat temu
rodzic
commit
a33e89b55d

+ 13 - 3
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.xtend

@@ -62,6 +62,9 @@ import org.yakindu.base.base.NamedElement
 import org.apache.commons.logging.LogFactory
 import org.apache.commons.logging.LogConfigurationException
 import org.yakindu.sct.model.stext.stext.OperationDefinition
+import org.eclipse.xtext.util.Strings
+import org.eclipse.xtext.EcoreUtil2
+import org.yakindu.sct.model.sgraph.CompositeElement
  
 
 @Singleton class SexecElementMapping {
@@ -100,7 +103,8 @@ import org.yakindu.sct.model.stext.stext.OperationDefinition
 	
 	def ExecutionState create r : sexecFactory.createExecutionState create(RegularState state){
 		if (state != null) {
-			r.simpleName = if (state instanceof FinalState) "_final_" else state.name
+			val n = state.parentRegion.vertices.filter(typeof (FinalState)).toList.indexOf(state)
+			r.simpleName = if (state instanceof FinalState) "_final_"+n else state.name
 			r.name = state.fullyQualifiedName.toString.replaceAll(" ", "")	
 			r.sourceElement = state	
 		}
@@ -122,7 +126,7 @@ import org.yakindu.sct.model.stext.stext.OperationDefinition
 			val region = entry.eContainer as Region
 			val regionName = region.name.toFirstUpper
 			val stateName = if(region.eContainer instanceof State) {(region.eContainer as State).name.toFirstUpper}
-			val entryName = {if (!entry.name?.empty) entry.name else "Default"}
+			val entryName = {if (!entry.name?.empty) entry.name else "_entry_Default"}
 			r.simpleName = {if (regionName!= null)regionName else ""}+"_"+{if (stateName!= null)stateName else ""}+"_"+entryName
 			r.name = entry.fullyQualifiedName.toString.replaceAll(" ", "")	
 			r.sourceElement = entry	
@@ -142,7 +146,13 @@ import org.yakindu.sct.model.stext.stext.OperationDefinition
 	
 	def ExecutionRegion create r : sexecFactory.createExecutionRegion create(Region region){
 		if (region != null) {
-			r.name =  region.name
+			if (Strings::isEmpty(region.name)) {
+				val container = region.eContainer as CompositeElement
+				val index = container.regions.indexOf(region)
+				r.name = "region"+index
+			} else {
+				r.name =  region.name
+			}
 			r.sourceElement = region
 		}
 	}

+ 27 - 3
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.java

@@ -10,6 +10,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.xtext.naming.IQualifiedNameProvider;
 import org.eclipse.xtext.naming.QualifiedName;
+import org.eclipse.xtext.util.Strings;
 import org.eclipse.xtext.xbase.lib.BooleanExtensions;
 import org.eclipse.xtext.xbase.lib.CollectionLiterals;
 import org.eclipse.xtext.xbase.lib.IterableExtensions;
@@ -36,8 +37,10 @@ import org.yakindu.sct.model.sexec.transformation.SgraphExtensions;
 import org.yakindu.sct.model.sexec.transformation.StatechartExtensions;
 import org.yakindu.sct.model.sexec.transformation.StextExtensions;
 import org.yakindu.sct.model.sgraph.Choice;
+import org.yakindu.sct.model.sgraph.CompositeElement;
 import org.yakindu.sct.model.sgraph.Entry;
 import org.yakindu.sct.model.sgraph.EntryKind;
+import org.yakindu.sct.model.sgraph.FinalState;
 import org.yakindu.sct.model.sgraph.Reaction;
 import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.RegularState;
@@ -227,9 +230,16 @@ public class SexecElementMapping {
     boolean _operator_notEquals = ObjectExtensions.operator_notEquals(state, null);
     if (_operator_notEquals) {
       {
+        Region _parentRegion = state.getParentRegion();
+        EList<Vertex> _vertices = _parentRegion.getVertices();
+        Iterable<FinalState> _filter = IterableExtensions.<FinalState>filter(_vertices, org.yakindu.sct.model.sgraph.FinalState.class);
+        List<FinalState> _list = IterableExtensions.<FinalState>toList(_filter);
+        int _indexOf = _list.indexOf(state);
+        final int n = _indexOf;
         String _xifexpression = null;
         if ((state instanceof org.yakindu.sct.model.sgraph.FinalState)) {
-          _xifexpression = "_final_";
+          String _operator_plus = StringExtensions.operator_plus("_final_", ((Integer)n));
+          _xifexpression = _operator_plus;
         } else {
           String _name = state.getName();
           _xifexpression = _name;
@@ -323,7 +333,7 @@ public class SexecElementMapping {
           String _name_3 = entry.getName();
           _xifexpression_1 = _name_3;
         } else {
-          _xifexpression_1 = "Default";
+          _xifexpression_1 = "_entry_Default";
         }
         final String entryName = _xifexpression_1;
         String _xifexpression_2 = null;
@@ -408,7 +418,21 @@ public class SexecElementMapping {
     if (_operator_notEquals) {
       {
         String _name = region.getName();
-        r.setName(_name);
+        boolean _isEmpty = Strings.isEmpty(_name);
+        if (_isEmpty) {
+          {
+            EObject _eContainer = region.eContainer();
+            final CompositeElement container = ((CompositeElement) _eContainer);
+            EList<Region> _regions = container.getRegions();
+            int _indexOf = _regions.indexOf(region);
+            final int index = _indexOf;
+            String _operator_plus = StringExtensions.operator_plus("region", ((Integer)index));
+            r.setName(_operator_plus);
+          }
+        } else {
+          String _name_1 = region.getName();
+          r.setName(_name_1);
+        }
         r.setSourceElement(region);
       }
     }

+ 77 - 42
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/naming/SGraphNameProvider.java

@@ -11,6 +11,7 @@
 package org.yakindu.sct.model.sgraph.naming;
 
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
@@ -21,19 +22,23 @@ 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.CompositeElement;
 import org.yakindu.sct.model.sgraph.Declaration;
 import org.yakindu.sct.model.sgraph.Entry;
+import org.yakindu.sct.model.sgraph.Exit;
 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.State;
 import org.yakindu.sct.model.sgraph.Statechart;
+import org.yakindu.sct.model.sgraph.Synchronization;
 import org.yakindu.sct.model.sgraph.Vertex;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
 import com.google.inject.Inject;
 
 /**
@@ -45,15 +50,19 @@ import com.google.inject.Inject;
  */
 public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider {
 
+	/** "Default" */
 	private static final QualifiedName DEFAULT_ENTRY_NAME = QualifiedName
-			.create("Default");
+			.create("_entry_Default");
+	private static final QualifiedName DEFAULT_EXIT_NAME = QualifiedName
+			.create("_exit_Default");
 	private static final String _FINAL_STATE_NAME = "_final_";
 	private static final String _CHOICE_NAME = "_choice_";
+	private static final String _SYNC_NAME = "_sync";
 
 	@Inject
 	private IQualifiedNameConverter nameConverter;
 	@Inject
-	private IdentifierConverter identifierConverer;
+	private IdentifierConverter identifierConverter;
 
 	@Override
 	protected Function<EObject, String> getResolver() {
@@ -73,6 +82,24 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 		return name;
 	}
 
+	public QualifiedName qualifiedName(Synchronization ele) {
+
+		QualifiedName qualifiedNameFromConverter = null;
+
+		if (!Strings.isEmpty(ele.getName())) {
+			qualifiedNameFromConverter = QualifiedName.create(ele.getName());
+		} else {
+			LinkedList<Synchronization> list = new LinkedList<Synchronization>();
+			Iterables.addAll(list, Iterables.filter(
+					((Region) ele.eContainer()).getVertices(),
+					Synchronization.class));
+			qualifiedNameFromConverter = QualifiedName.create(_SYNC_NAME
+					+ list.indexOf(ele));
+		}
+
+		return getParentQualifiedName(ele, qualifiedNameFromConverter);
+	}
+
 	public QualifiedName qualifiedName(Choice ele) {
 
 		// first get order number of choice node
@@ -86,16 +113,10 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 				}));
 		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;
+
+		return getParentQualifiedName(ele, qualifiedNameFromConverter);
 	}
 
 	public QualifiedName qualifiedName(Entry ele) {
@@ -104,14 +125,30 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 		if (ele.getName() != null && !ele.getName().isEmpty()) {
 			name = QualifiedName.create(ele.getName());
 		}
+
+		return getParentQualifiedName(ele, name);
+	}
+
+	public QualifiedName qualifiedName(Exit ele) {
+
+		QualifiedName name = DEFAULT_EXIT_NAME;
+		if (ele.getName() != null && !ele.getName().isEmpty()) {
+			name = QualifiedName.create(ele.getName());
+		}
+
+		return getParentQualifiedName(ele, name);
+	}
+
+	protected QualifiedName getParentQualifiedName(final EObject ele,
+			final QualifiedName childName) {
 		EObject temp = ele;
 		while (temp.eContainer() != null) {
 			temp = temp.eContainer();
 			QualifiedName parentsQualifiedName = getFullyQualifiedName(temp);
 			if (parentsQualifiedName != null)
-				return parentsQualifiedName.append(name);
+				return parentsQualifiedName.append(childName);
 		}
-		return name;
+		return childName;
 	}
 
 	public QualifiedName qualifiedName(Scope ele) {
@@ -129,46 +166,44 @@ public class SGraphNameProvider extends DefaultDeclarativeQualifiedNameProvider
 	}
 
 	public QualifiedName qualifiedName(FinalState ele) {
-		ele.getName();
-		QualifiedName qfn = QualifiedName.create(_FINAL_STATE_NAME);
-		EObject temp = ele;
-		while (temp.eContainer() != null) {
-			temp = temp.eContainer();
-			QualifiedName parentsQualifiedName = getFullyQualifiedName(temp);
-			if (parentsQualifiedName != null)
-				return parentsQualifiedName.append(qfn);
+		QualifiedName qfn = null;
+		if (Strings.isEmpty(ele.getName())) {
+			qfn = QualifiedName.create(_FINAL_STATE_NAME);
+		} else {
+			qfn = QualifiedName.create(identifierConverter.toIdentifier(ele
+					.getName()));
 		}
-		return qfn;
+
+		return getParentQualifiedName(ele, qfn);
 	}
 
 	public QualifiedName qualifiedName(State ele) {
-		EObject temp = ele;
-		ele.getName();
 		QualifiedName qualifiedNameFromConverter = QualifiedName
-				.create(identifierConverer.toIdentifier(ele.getName()));
-		while (temp.eContainer() != null) {
-			temp = temp.eContainer();
-			QualifiedName parentsQualifiedName = getFullyQualifiedName(temp);
-			if (parentsQualifiedName != null)
-				return parentsQualifiedName.append(qualifiedNameFromConverter);
-		}
-		return qualifiedNameFromConverter;
+				.create(identifierConverter.toIdentifier(ele.getName()));
+
+		return getParentQualifiedName(ele, qualifiedNameFromConverter);
 	}
 
 	public QualifiedName qualifiedName(Region ele) {
-		EObject temp = ele;
+		QualifiedName qualifiedNameFromConverter = null;
 		if (ele.getName() == null) {
-			return null;
-		}
-		QualifiedName qualifiedNameFromConverter = QualifiedName
-				.create(identifierConverer.toIdentifier(ele.getName()));
-		while (temp.eContainer() != null) {
-			temp = temp.eContainer();
-			QualifiedName parentsQualifiedName = getFullyQualifiedName(temp);
-			if (parentsQualifiedName != null)
-				return parentsQualifiedName.append(qualifiedNameFromConverter);
+			if (ele.eContainer() instanceof CompositeElement) {
+				CompositeElement parent = (CompositeElement) ele.eContainer();
+				int index = parent.getRegions().indexOf(ele);
+				if (index != -1) {
+					qualifiedNameFromConverter = QualifiedName.create("_region"
+							+ index);
+				}
+			}
+			if (qualifiedNameFromConverter == null) {
+				return null;
+			}
+		} else {
+			qualifiedNameFromConverter = QualifiedName
+					.create(identifierConverter.toIdentifier(ele.getName()));
 		}
-		return qualifiedNameFromConverter;
+
+		return getParentQualifiedName(ele, qualifiedNameFromConverter);
 	}
 
 	public QualifiedName qualifiedName(Declaration ele) {

+ 2 - 2
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateTest.java

@@ -184,7 +184,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		ExecutionFlow flow = sequencer.transform(sc);
 
 		ExecutionState _fs = flow.getStates().get(0);
-		assertEquals("_final_", _fs.getSimpleName());
+		assertEquals("_final_0", _fs.getSimpleName());
 		assertSame(fs, _fs.getSourceElement());
 
 		assertNull(_fs.getEntryAction());
@@ -334,7 +334,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		ExecutionFlow flow = sequencer.transform(sc);
 
 		ExecutionState _fs = flow.getStates().get(0);
-		assertEquals("_final_", _fs.getSimpleName());
+		assertEquals("_final_0", _fs.getSimpleName());
 
 		assertNull(_fs.getExitAction());
 		assertNotNull(_fs.getExitSequence());