|
|
@@ -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) {
|