Ver código fonte

Refactored genmodel to support different content types

Andreas Mülder 13 anos atrás
pai
commit
3645770445
40 arquivos alterados com 70909 adições e 70643 exclusões
  1. 2 0
      plugins/org.yakindu.sct.generator.c/plugin.xml
  2. 8 5
      plugins/org.yakindu.sct.generator.core/plugin.xml
  3. 17 0
      plugins/org.yakindu.sct.generator.core/schema/generator.exsd
  4. 13 10
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/builder/SCTBuilder.java
  5. 18 1
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/extensions/GeneratorExtensions.java
  6. 3 10
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/AbstractSExecModelGenerator.java
  7. 4 3
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/AbstractSGraphModelGenerator.java
  8. 1 1
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/GenericJavaBasedGenerator.java
  9. 1 1
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/GenericXPandCodeGenerator.java
  10. 2 0
      plugins/org.yakindu.sct.generator.cpp/plugin.xml
  11. 4 1
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/AbstractSGenProposalProvider.java
  12. 2 1
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/SGenParser.java
  13. 26 13
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.g
  14. 131 133
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.tokens
  15. 2850 2891
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenLexer.java
  16. 44551 44500
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenParser.java
  17. 20 3
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java
  18. 1 1
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/ModelCreator.java
  19. 1658 1653
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/SGen.xmi
  20. 19 5
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g
  21. 131 133
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.tokens
  22. 2850 2892
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenLexer.java
  23. 16658 16635
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenParser.java
  24. 1462 1461
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSemanticSequencer.java
  25. 70 70
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSyntacticSequencer.java
  26. 18 14
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/services/SGenGrammarAccess.java
  27. 4 3
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/SGen.xtext
  28. 1 1
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/formatting/SGenFormatter.java
  29. 22 1
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java
  30. 21 4
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java
  31. 2 0
      plugins/org.yakindu.sct.generator.java/plugin.xml
  32. 74 73
      plugins/org.yakindu.sct.model.sgen/model/emf/sgen.ecore
  33. 38 11
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/GeneratorEntry.java
  34. 37 9
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/SGenPackage.java
  35. 103 30
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/GeneratorEntryImpl.java
  36. 1 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenFactoryImpl.java
  37. 10 1
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenPackageImpl.java
  38. 74 73
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/sgen.ecore
  39. 1 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/util/SGenAdapterFactory.java
  40. 1 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/util/SGenSwitch.java

+ 2 - 0
plugins/org.yakindu.sct.generator.c/plugin.xml

@@ -6,6 +6,8 @@
          point="org.yakindu.sct.generator.core.generator">
       <SCTGenerator
             class="org.yakindu.sct.generator.c.CCodeGenerator"
+            contentType="statechart"
+            elementRefType="org.yakindu.sct.model.sgraph.Statechart"
             description="YAKINDU C Code Generator"
             id="yakindu::c"
             name="YAKINDU C Code Generator">

+ 8 - 5
plugins/org.yakindu.sct.generator.core/plugin.xml

@@ -26,7 +26,9 @@
        point="org.yakindu.sct.generator.core.generator">
     <SCTGenerator
           class="org.yakindu.sct.generator.core.impl.GenericXPandCodeGenerator"
+          contentType="statechart"
           description="Generate Code using Xpand Templates"
+          elementRefType="org.yakindu.sct.model.sgraph.Statechart"
           id="yakindu::xpand"
           name="Custom Xpand-based Generator">
     </SCTGenerator>
@@ -34,10 +36,12 @@
  <extension
        point="org.yakindu.sct.generator.core.generator">
    <SCTGenerator
-          class="org.yakindu.sct.generator.core.impl.GenericJavaBasedGenerator"
-          description="Generate Code using Xpand Templates"
-          id="yakindu::generic"
-          name="Custom Xtend2/Java-based Generator">
+         class="org.yakindu.sct.generator.core.impl.GenericJavaBasedGenerator"
+         contentType="statechart"
+         description="Generate Code using Xpand Templates"
+         elementRefType="org.yakindu.sct.model.sgraph.Statechart"
+         id="yakindu::generic"
+         name="Custom Xtend2/Java-based Generator">
     </SCTGenerator>
  </extension>
   <extension
@@ -104,5 +108,4 @@
          </visibility>
       </objectContribution>
    </extension>
-
 </plugin>

+ 17 - 0
plugins/org.yakindu.sct.generator.core/schema/generator.exsd

@@ -90,6 +90,23 @@
                </documentation>
             </annotation>
          </attribute>
+         <attribute name="contentType" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="elementRefType" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.ecore.EObject"/>
+               </appinfo>
+            </annotation>
+         </attribute>
       </complexType>
    </element>
 

+ 13 - 10
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/builder/SCTBuilder.java

@@ -50,21 +50,24 @@ public class SCTBuilder extends IncrementalProjectBuilder {
 	private static final String SGEN_FILE_EXTENSION = "sgen";
 	public static final String BUILDER_ID = "org.yakindu.sct.builder.SCTBuilder";
 
-	private final class GeneratorForStatechart implements
+	private final class ElementRefGenerator implements
 			Predicate<GeneratorEntry> {
-		private final Statechart statechart;
 
-		private GeneratorForStatechart(Statechart statechart) {
-			this.statechart = statechart;
+		private final EObject eobject;
+
+		private ElementRefGenerator(EObject eobject) {
+			this.eobject = eobject;
 		}
 
 		public boolean apply(GeneratorEntry input) {
 			// return input.getStatechart().equals(statechart);
-			return statechart != null
-					&& input.getStatechart() != null
-					&& !input.getStatechart().eIsProxy()
-					&& input.getStatechart().getName()
-							.equals(statechart.getName());
+			//FIXME
+			return false;
+//			return statechart != null
+//					&& input.getStatechart() != null
+//					&& !input.getStatechart().eIsProxy()
+//					&& input.getStatechart().getName()
+//							.equals(statechart.getName());
 		}
 	}
 
@@ -241,7 +244,7 @@ public class SCTBuilder extends IncrementalProjectBuilder {
 		return genModel != null
 				&& !genModel.getEntries().isEmpty()
 				&& Iterables.any(genModel.getEntries(),
-						new GeneratorForStatechart(statechart));
+						new ElementRefGenerator(statechart));
 	}
 
 	@SuppressWarnings("unchecked")

+ 18 - 1
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/extensions/GeneratorExtensions.java

@@ -32,6 +32,8 @@ public class GeneratorExtensions {
 	private static final String ATTRIBUTE_CLASS = "class";
 	private static final String ATTRIBUTE_ID = "id";
 	private static final String ATTRIBUTE_NAME = "name";
+	private static final String ATTRIBUTE_CONTENT_TYPE = "contentType";
+	private static final String ATTRIBUTE_ELEMENT_REF_TYPE = "elementRefType";
 	@SuppressWarnings("unused")
 	private static final String ATTRIBUTE_ICON = "icon";
 
@@ -71,6 +73,20 @@ public class GeneratorExtensions {
 			// return descriptor.createImage();
 		}
 
+		public String getContentType() {
+			return configElement.getAttribute(ATTRIBUTE_CONTENT_TYPE);
+		}
+
+		public Class<?> getElementRefType() {
+			try {
+				return Class.forName(configElement
+						.getAttribute(ATTRIBUTE_ELEMENT_REF_TYPE));
+			} catch (Exception e) {
+				e.printStackTrace();
+				return null;
+			}
+		}
+
 		@Override
 		public int hashCode() {
 			String id = getId();
@@ -122,7 +138,8 @@ public class GeneratorExtensions {
 		return Iterables.find(getGeneratorDescriptors(),
 				new Predicate<GeneratorDescriptor>() {
 					public boolean apply(GeneratorDescriptor input) {
-						return input != null && input.getId() != null && input.getId().equals(generatorId);
+						return input != null && input.getId() != null
+								&& input.getId().equals(generatorId);
 					}
 				});
 	}

+ 3 - 10
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/AbstractSExecModelGenerator.java

@@ -61,8 +61,8 @@ public abstract class AbstractSExecModelGenerator extends
 	protected void runGenerator(Statechart statechart, GeneratorEntry entry) {
 		if (this instanceof IExecutionFlowGenerator) {
 			IExecutionFlowGenerator flowGenerator = (IExecutionFlowGenerator) this;
-			flowGenerator.generate(
-					createExecutionFlow(entry.getStatechart(), entry), entry);
+			flowGenerator.generate(createExecutionFlow(statechart, entry),
+					entry);
 		}
 		super.runGenerator(statechart, entry);
 	}
@@ -108,23 +108,16 @@ public abstract class AbstractSExecModelGenerator extends
 
 	protected void dumpSexec(GeneratorEntry entry, ExecutionFlow flow,
 			Output output) {
-
 		ResourceSet resourceSet = new ResourceSetImpl();
-
 		resourceSet
 				.getResourceFactoryRegistry()
 				.getExtensionToFactoryMap()
 				.put(Resource.Factory.Registry.DEFAULT_EXTENSION,
 						new XMIResourceFactoryImpl());
-
-		URI fileURI = entry.getStatechart().eResource().getURI()
+		URI fileURI = entry.getElementRef().eResource().getURI()
 				.trimFileExtension().appendFileExtension(SEXEC_FILE_EXTENSION);
-		// URI fileURI = URI.createFileURI(new
-		// File("mylibrary.xmi").getAbsolutePath());
-
 		Resource resource = resourceSet.createResource(fileURI);
 		resource.getContents().add(flow);
-
 		try {
 			resource.save(Collections.EMPTY_MAP);
 		} catch (IOException e) {

+ 4 - 3
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/AbstractSGraphModelGenerator.java

@@ -100,11 +100,12 @@ public abstract class AbstractSGraphModelGenerator implements ISCTGenerator {
 	}
 
 	public final void generate(GeneratorEntry entry) {
-		writeToConsole(String.format("Generating Statechart %s ...", entry
-				.getStatechart().getName()));
+		Statechart statechart = (Statechart) entry.getElementRef();
+		writeToConsole(String.format("Generating Statechart %s ...",
+				statechart.getName()));
 		try {
 			prepareGenerator(entry);
-			runGenerator(entry.getStatechart(), entry);
+			runGenerator(statechart, entry);
 			writeToConsole("Done.");
 		} catch (Exception e) {
 			writeToConsole(e);

+ 1 - 1
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/GenericJavaBasedGenerator.java

@@ -123,7 +123,7 @@ public class GenericJavaBasedGenerator extends AbstractSExecModelGenerator {
 			project = ResourcesPlugin.getWorkspace().getRoot()
 					.getProject(projectName.getStringValue());
 		} else {
-			URI uri = entry.getStatechart().eResource().getURI();
+			URI uri = entry.getElementRef().eResource().getURI();
 			project = ResourcesPlugin.getWorkspace().getRoot()
 					.getFile(new Path(uri.toPlatformString(true))).getProject();
 		}

+ 1 - 1
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/GenericXPandCodeGenerator.java

@@ -69,7 +69,7 @@ public class GenericXPandCodeGenerator extends AbstractXpandBasedCodeGenerator {
 			project = ResourcesPlugin.getWorkspace().getRoot()
 					.getProject(projectName.getStringValue());
 		} else {
-			URI uri = entry.getStatechart().eResource().getURI();
+			URI uri = entry.getElementRef().eResource().getURI();
 			project = ResourcesPlugin.getWorkspace().getRoot()
 					.getFile(new Path(uri.toPlatformString(true))).getProject();
 		}

+ 2 - 0
plugins/org.yakindu.sct.generator.cpp/plugin.xml

@@ -7,6 +7,8 @@
       <SCTGenerator
             class="org.yakindu.sct.generator.cpp.CppCodeGenerator"
             description="YAKINDU.org C++ Code Generator"
+            contentType="statechart"
+            elementRefType="org.yakindu.sct.model.sgraph.Statechart"
             id="yakindu::cpp"
             name="YAKINDU C++ Code Generator">
       </SCTGenerator>

+ 4 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/AbstractSGenProposalProvider.java

@@ -23,7 +23,10 @@ public class AbstractSGenProposalProvider extends XbaseProposalProvider {
 	public void completeGeneratorModel_Entries(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeGeneratorEntry_Statechart(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeGeneratorEntry_ContentType(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeGeneratorEntry_ElementRef(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
 	}
 	public void completeGeneratorEntry_Features(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {

+ 2 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/SGenParser.java

@@ -189,7 +189,8 @@ public class SGenParser extends AbstractContentAssistParser {
 					put(grammarAccess.getJvmTypeParameterAccess().getGroup_1_0(), "rule__JvmTypeParameter__Group_1_0__0");
 					put(grammarAccess.getGeneratorModelAccess().getGeneratorIdAssignment_2(), "rule__GeneratorModel__GeneratorIdAssignment_2");
 					put(grammarAccess.getGeneratorModelAccess().getEntriesAssignment_4(), "rule__GeneratorModel__EntriesAssignment_4");
-					put(grammarAccess.getGeneratorEntryAccess().getStatechartAssignment_1(), "rule__GeneratorEntry__StatechartAssignment_1");
+					put(grammarAccess.getGeneratorEntryAccess().getContentTypeAssignment_0(), "rule__GeneratorEntry__ContentTypeAssignment_0");
+					put(grammarAccess.getGeneratorEntryAccess().getElementRefAssignment_1(), "rule__GeneratorEntry__ElementRefAssignment_1");
 					put(grammarAccess.getGeneratorEntryAccess().getFeaturesAssignment_3(), "rule__GeneratorEntry__FeaturesAssignment_3");
 					put(grammarAccess.getFeatureConfigurationAccess().getTypeAssignment_2(), "rule__FeatureConfiguration__TypeAssignment_2");
 					put(grammarAccess.getFeatureConfigurationAccess().getParameterValuesAssignment_4(), "rule__FeatureConfiguration__ParameterValuesAssignment_4");

+ 26 - 13
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.g

@@ -2860,11 +2860,9 @@ rule__GeneratorEntry__Group__0__Impl
     }
 :
 (
-{ before(grammarAccess.getGeneratorEntryAccess().getStatechartKeyword_0()); }
-
-	'statechart' 
-
-{ after(grammarAccess.getGeneratorEntryAccess().getStatechartKeyword_0()); }
+{ before(grammarAccess.getGeneratorEntryAccess().getContentTypeAssignment_0()); }
+(rule__GeneratorEntry__ContentTypeAssignment_0)
+{ after(grammarAccess.getGeneratorEntryAccess().getContentTypeAssignment_0()); }
 )
 
 ;
@@ -2891,9 +2889,9 @@ rule__GeneratorEntry__Group__1__Impl
     }
 :
 (
-{ before(grammarAccess.getGeneratorEntryAccess().getStatechartAssignment_1()); }
-(rule__GeneratorEntry__StatechartAssignment_1)
-{ after(grammarAccess.getGeneratorEntryAccess().getStatechartAssignment_1()); }
+{ before(grammarAccess.getGeneratorEntryAccess().getElementRefAssignment_1()); }
+(rule__GeneratorEntry__ElementRefAssignment_1)
+{ after(grammarAccess.getGeneratorEntryAccess().getElementRefAssignment_1()); }
 )
 
 ;
@@ -12725,18 +12723,33 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-rule__GeneratorEntry__StatechartAssignment_1
+rule__GeneratorEntry__ContentTypeAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGeneratorEntryAccess().getContentTypeIDTerminalRuleCall_0_0()); }
+	RULE_ID{ after(grammarAccess.getGeneratorEntryAccess().getContentTypeIDTerminalRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GeneratorEntry__ElementRefAssignment_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getGeneratorEntryAccess().getStatechartStatechartCrossReference_1_0()); }
+{ before(grammarAccess.getGeneratorEntryAccess().getElementRefEObjectCrossReference_1_0()); }
 (
-{ before(grammarAccess.getGeneratorEntryAccess().getStatechartStatechartQIDParserRuleCall_1_0_1()); }
-	ruleQID{ after(grammarAccess.getGeneratorEntryAccess().getStatechartStatechartQIDParserRuleCall_1_0_1()); }
+{ before(grammarAccess.getGeneratorEntryAccess().getElementRefEObjectQIDParserRuleCall_1_0_1()); }
+	ruleQID{ after(grammarAccess.getGeneratorEntryAccess().getElementRefEObjectQIDParserRuleCall_1_0_1()); }
 )
-{ after(grammarAccess.getGeneratorEntryAccess().getStatechartStatechartCrossReference_1_0()); }
+{ after(grammarAccess.getGeneratorEntryAccess().getElementRefEObjectCrossReference_1_0()); }
 )
 
 ;

+ 131 - 133
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.tokens

@@ -1,133 +1,131 @@
-T__68=68
-T__69=69
-RULE_ID=4
-T__66=66
-T__67=67
-T__64=64
-T__29=29
-T__65=65
-T__28=28
-T__62=62
-T__27=27
-T__63=63
-T__26=26
-T__25=25
-T__24=24
-T__23=23
-T__22=22
-RULE_ANY_OTHER=10
-T__21=21
-T__20=20
-T__61=61
-T__60=60
-T__55=55
-T__56=56
-T__19=19
-T__57=57
-T__58=58
-T__51=51
-T__16=16
-T__52=52
-T__15=15
-T__53=53
-T__18=18
-T__54=54
-T__17=17
-T__12=12
-T__11=11
-T__14=14
-T__13=13
-T__59=59
-RULE_INT=5
-T__50=50
-T__42=42
-T__43=43
-T__40=40
-T__41=41
-T__46=46
-T__47=47
-T__44=44
-T__45=45
-T__48=48
-T__49=49
-RULE_SL_COMMENT=8
-RULE_ML_COMMENT=7
-T__30=30
-T__31=31
-RULE_STRING=6
-T__32=32
-T__71=71
-T__33=33
-T__72=72
-T__34=34
-T__35=35
-T__70=70
-T__36=36
-T__37=37
-T__38=38
-T__39=39
-RULE_WS=9
-T__73=73
-'instanceof'=41
-'>='=19
-'/'=29
-'=='=17
-'switch'=51
-'>'=21
-'||'=13
-'*.'=71
-'&&'=14
-';'=57
-'return'=62
-'for'=36
-'?.'=70
-'+'=25
-'=>'=66
-'.'=16
-'true'=73
-'catch'=65
-'else'=50
-'extends'=68
-'+='=12
-'{'=37
-'as'=42
-'?'=67
-'try'=63
-'var'=72
-'feature'=40
-'if'=49
-'('=48
-':'=52
-'**'=28
-'-'=26
-'while'=55
-'statechart'=39
-','=43
-'default'=53
-']'=47
-'..'=24
-'!'=31
-'finally'=64
-'|'=46
-'new'=58
-'val'=32
-'null'=59
-'typeof'=60
-'='=11
-'GeneratorModel'=35
-'throw'=61
-'::'=15
-')'=44
-'%'=30
-'->'=23
-'super'=33
-'do'=56
-'case'=54
-'}'=38
-'<='=20
-'!='=18
-'false'=34
-'<'=22
-'*'=27
-'['=45
-'&'=69
+T__68=68
+T__69=69
+RULE_ID=4
+T__66=66
+T__67=67
+T__64=64
+T__29=29
+T__65=65
+T__28=28
+T__62=62
+T__27=27
+T__63=63
+T__26=26
+T__25=25
+T__24=24
+T__23=23
+T__22=22
+RULE_ANY_OTHER=10
+T__21=21
+T__20=20
+T__61=61
+T__60=60
+T__55=55
+T__56=56
+T__19=19
+T__57=57
+T__58=58
+T__51=51
+T__16=16
+T__52=52
+T__15=15
+T__53=53
+T__18=18
+T__54=54
+T__17=17
+T__12=12
+T__11=11
+T__14=14
+T__13=13
+T__59=59
+RULE_INT=5
+T__50=50
+T__42=42
+T__43=43
+T__40=40
+T__41=41
+T__46=46
+T__47=47
+T__44=44
+T__45=45
+T__48=48
+T__49=49
+RULE_SL_COMMENT=8
+RULE_ML_COMMENT=7
+T__30=30
+T__31=31
+RULE_STRING=6
+T__32=32
+T__71=71
+T__33=33
+T__72=72
+T__34=34
+T__35=35
+T__70=70
+T__36=36
+T__37=37
+T__38=38
+T__39=39
+RULE_WS=9
+'instanceof'=40
+'>='=19
+'/'=29
+'=='=17
+'switch'=50
+'>'=21
+'||'=13
+'*.'=70
+'&&'=14
+';'=56
+'return'=61
+'for'=36
+'?.'=69
+'+'=25
+'=>'=65
+'.'=16
+'true'=72
+'catch'=64
+'else'=49
+'extends'=67
+'+='=12
+'{'=37
+'as'=41
+'?'=66
+'try'=62
+'var'=71
+'feature'=39
+'if'=48
+'('=47
+':'=51
+'**'=28
+'-'=26
+'while'=54
+','=42
+'default'=52
+']'=46
+'..'=24
+'!'=31
+'finally'=63
+'|'=45
+'new'=57
+'val'=32
+'null'=58
+'typeof'=59
+'='=11
+'GeneratorModel'=35
+'throw'=60
+'::'=15
+')'=43
+'%'=30
+'->'=23
+'super'=33
+'do'=55
+'case'=53
+'}'=38
+'<='=20
+'!='=18
+'false'=34
+'<'=22
+'*'=27
+'['=44
+'&'=68

Diferenças do arquivo suprimidas por serem muito extensas
+ 2850 - 2891
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenLexer.java


Diferenças do arquivo suprimidas por serem muito extensas
+ 44551 - 44500
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenParser.java


+ 20 - 3
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java

@@ -16,11 +16,13 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.xtext.Assignment;
+import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.Keyword;
 import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
 import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.model.sgen.GeneratorModel;
 
 import com.google.common.collect.Lists;
 
@@ -31,6 +33,21 @@ import com.google.common.collect.Lists;
  */
 @SuppressWarnings("restriction")
 public class SGenProposalProvider extends AbstractSGenProposalProvider {
+
+	@Override
+	public void completeGeneratorEntry_ContentType(EObject model,
+			Assignment assignment, ContentAssistContext context,
+			ICompletionProposalAcceptor acceptor) {
+
+		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(model,
+				GeneratorModel.class);
+		GeneratorDescriptor descriptor = GeneratorExtensions
+				.getGeneratorDescriptorForId(generatorModel.getGeneratorId());
+		ICompletionProposal proposal = createCompletionProposal(
+				descriptor.getContentType(), context);
+		acceptor.accept(proposal);
+	}
+
 	@Override
 	public void completeGeneratorModel_GeneratorId(EObject model,
 			Assignment assignment, ContentAssistContext context,
@@ -38,10 +55,10 @@ public class SGenProposalProvider extends AbstractSGenProposalProvider {
 		Iterable<GeneratorDescriptor> descriptions = GeneratorExtensions
 				.getGeneratorDescriptors();
 		for (GeneratorDescriptor desc : descriptions) {
-			//FIXME NullPointerCheck: desc could be Null
 			ICompletionProposal proposal = createCompletionProposal(
-					desc.getId(), new StyledString((desc.getName()!=null) ? desc.getName() : "null"),
-					desc.getImage(), context);
+					desc.getId(),
+					new StyledString((desc.getName() != null) ? desc.getName()
+							: "null"), desc.getImage(), context);
 			acceptor.accept(proposal);
 		}
 	}

+ 1 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/ModelCreator.java

@@ -56,7 +56,7 @@ public class ModelCreator {
 
 	private GeneratorEntry createGeneratorEntry(Statechart statechart) {
 		GeneratorEntry entry = factory.createGeneratorEntry();
-		entry.setStatechart(statechart);
+		entry.setElementRef(statechart);
 		List<FeatureType> featureTypes = getFeatureTypes();
 		for (FeatureType featureType : featureTypes) {
 			FeatureConfiguration config = createFeatureConfiguration(

Diferenças do arquivo suprimidas por serem muito extensas
+ 1658 - 1653
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/SGen.xmi


+ 19 - 5
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g

@@ -150,11 +150,25 @@ ruleGeneratorEntry returns [EObject current=null]
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-(	otherlv_0='statechart' 
-    {
-    	newLeafNode(otherlv_0, grammarAccess.getGeneratorEntryAccess().getStatechartKeyword_0());
-    }
+((
 (
+		lv_contentType_0_0=RULE_ID
+		{
+			newLeafNode(lv_contentType_0_0, grammarAccess.getGeneratorEntryAccess().getContentTypeIDTerminalRuleCall_0_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getGeneratorEntryRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"contentType",
+        		lv_contentType_0_0, 
+        		"ID");
+	    }
+
+)
+)(
 (
 		{
 			if ($current==null) {
@@ -162,7 +176,7 @@ ruleGeneratorEntry returns [EObject current=null]
 	        }
         }
 		{ 
-	        newCompositeNode(grammarAccess.getGeneratorEntryAccess().getStatechartStatechartCrossReference_1_0()); 
+	        newCompositeNode(grammarAccess.getGeneratorEntryAccess().getElementRefEObjectCrossReference_1_0()); 
 	    }
 		ruleQID		{ 
 	        afterParserOrEnumRuleCall();

+ 131 - 133
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.tokens

@@ -1,133 +1,131 @@
-T__68=68
-T__69=69
-RULE_ID=4
-T__66=66
-T__67=67
-T__64=64
-T__29=29
-T__65=65
-T__28=28
-T__62=62
-T__27=27
-T__63=63
-T__26=26
-T__25=25
-T__24=24
-T__23=23
-T__22=22
-RULE_ANY_OTHER=10
-T__21=21
-T__20=20
-T__61=61
-T__60=60
-T__55=55
-T__56=56
-T__19=19
-T__57=57
-T__58=58
-T__51=51
-T__16=16
-T__52=52
-T__15=15
-T__53=53
-T__18=18
-T__54=54
-T__17=17
-T__12=12
-T__11=11
-T__14=14
-T__13=13
-T__59=59
-RULE_INT=5
-T__50=50
-T__42=42
-T__43=43
-T__40=40
-T__41=41
-T__46=46
-T__47=47
-T__44=44
-T__45=45
-T__48=48
-T__49=49
-RULE_SL_COMMENT=8
-RULE_ML_COMMENT=7
-T__30=30
-T__31=31
-RULE_STRING=6
-T__32=32
-T__71=71
-T__33=33
-T__72=72
-T__34=34
-T__35=35
-T__70=70
-T__36=36
-T__37=37
-T__38=38
-T__39=39
-RULE_WS=9
-T__73=73
-'instanceof'=25
-'>='=26
-'=='=23
-'/'=36
-'switch'=50
-'>'=28
-'||'=21
-'*.'=41
-'&&'=22
-';'=56
-'return'=66
-'for'=12
-'?.'=40
-'+'=32
-'=>'=70
-'.'=19
-'true'=62
-'catch'=69
-'else'=49
-'extends'=72
-'+='=20
-'{'=13
-'as'=39
-'?'=71
-'try'=67
-'feature'=16
-'var'=57
-'if'=48
-'('=43
-':'=51
-'**'=35
-'-'=33
-'while'=54
-'statechart'=15
-','=42
-'default'=52
-']'=47
-'..'=31
-'!'=38
-'finally'=68
-'|'=46
-'new'=60
-'val'=58
-'null'=63
-'typeof'=64
-'='=17
-'GeneratorModel'=11
-'throw'=65
-'::'=18
-')'=44
-'->'=30
-'%'=37
-'do'=55
-'super'=59
-'case'=53
-'}'=14
-'<='=27
-'!='=24
-'false'=61
-'<'=29
-'*'=34
-'['=45
-'&'=73
+T__68=68
+T__69=69
+RULE_ID=4
+T__66=66
+T__67=67
+T__64=64
+T__29=29
+T__65=65
+T__28=28
+T__62=62
+T__27=27
+T__63=63
+T__26=26
+T__25=25
+T__24=24
+T__23=23
+T__22=22
+RULE_ANY_OTHER=10
+T__21=21
+T__20=20
+T__61=61
+T__60=60
+T__55=55
+T__56=56
+T__19=19
+T__57=57
+T__58=58
+T__51=51
+T__16=16
+T__52=52
+T__15=15
+T__53=53
+T__18=18
+T__54=54
+T__17=17
+T__12=12
+T__11=11
+T__14=14
+T__13=13
+T__59=59
+RULE_INT=5
+T__50=50
+T__42=42
+T__43=43
+T__40=40
+T__41=41
+T__46=46
+T__47=47
+T__44=44
+T__45=45
+T__48=48
+T__49=49
+RULE_SL_COMMENT=8
+RULE_ML_COMMENT=7
+T__30=30
+T__31=31
+RULE_STRING=6
+T__32=32
+T__71=71
+T__33=33
+T__72=72
+T__34=34
+T__35=35
+T__70=70
+T__36=36
+T__37=37
+T__38=38
+T__39=39
+RULE_WS=9
+'instanceof'=24
+'>='=25
+'/'=35
+'=='=22
+'switch'=49
+'>'=27
+'||'=20
+'*.'=40
+'&&'=21
+';'=55
+'return'=65
+'for'=12
+'?.'=39
+'+'=31
+'=>'=69
+'.'=18
+'true'=61
+'catch'=68
+'else'=48
+'extends'=71
+'+='=19
+'{'=13
+'as'=38
+'?'=70
+'try'=66
+'feature'=15
+'var'=56
+'if'=47
+'('=42
+':'=50
+'**'=34
+'-'=32
+'while'=53
+','=41
+'default'=51
+']'=46
+'..'=30
+'!'=37
+'finally'=67
+'|'=45
+'new'=59
+'val'=57
+'null'=62
+'typeof'=63
+'='=16
+'GeneratorModel'=11
+'throw'=64
+'::'=17
+')'=43
+'->'=29
+'%'=36
+'do'=54
+'super'=58
+'case'=52
+'}'=14
+'<='=26
+'!='=23
+'false'=60
+'<'=28
+'*'=33
+'['=44
+'&'=72

Diferenças do arquivo suprimidas por serem muito extensas
+ 2850 - 2892
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenLexer.java


Diferenças do arquivo suprimidas por serem muito extensas
+ 16658 - 16635
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenParser.java


Diferenças do arquivo suprimidas por serem muito extensas
+ 1462 - 1461
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSemanticSequencer.java


+ 70 - 70
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSyntacticSequencer.java

@@ -13,73 +13,73 @@ import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISyn
 import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
 import org.yakindu.sct.generator.genmodel.services.SGenGrammarAccess;
 
-@SuppressWarnings("restriction")
-public class AbstractSGenSyntacticSequencer extends AbstractSyntacticSequencer {
-
-	protected SGenGrammarAccess grammarAccess;
-	protected AbstractElementAlias match_XBlockExpression_SemicolonKeyword_2_1_q;
-	protected AbstractElementAlias match_XParenthesizedExpression_LeftParenthesisKeyword_0_a;
-	protected AbstractElementAlias match_XParenthesizedExpression_LeftParenthesisKeyword_0_p;
-	
-	@Inject
-	protected void init(IGrammarAccess access) {
-		grammarAccess = (SGenGrammarAccess) access;
-		match_XBlockExpression_SemicolonKeyword_2_1_q = new TokenAlias(true, false, grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1());
-		match_XParenthesizedExpression_LeftParenthesisKeyword_0_a = new TokenAlias(true, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
-		match_XParenthesizedExpression_LeftParenthesisKeyword_0_p = new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
-	}
-	
-	@Override
-	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
-		if(ruleCall.getRule() == grammarAccess.getOpSingleAssignRule())
-			return getOpSingleAssignToken(semanticObject, ruleCall, node);
-		return "";
-	}
-	
-	protected String getOpSingleAssignToken(EObject semanticObject, RuleCall ruleCall, INode node) {
-		if (node != null)
-			return getTokenText(node);
-		return "=";
-	}
-	
-	@Override
-	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
-		List<INode> transitionNodes = collectNodes(fromNode, toNode);
-		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
-			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
-			if(match_XBlockExpression_SemicolonKeyword_2_1_q.equals(syntax))
-				emit_XBlockExpression_SemicolonKeyword_2_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if(match_XParenthesizedExpression_LeftParenthesisKeyword_0_a.equals(syntax))
-				emit_XParenthesizedExpression_LeftParenthesisKeyword_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if(match_XParenthesizedExpression_LeftParenthesisKeyword_0_p.equals(syntax))
-				emit_XParenthesizedExpression_LeftParenthesisKeyword_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
-			else acceptNodes(getLastNavigableState(), syntaxNodes);
-		}
-	}
-
-	/**
-	 * Syntax:
-	 *     ';'?
-	 */
-	protected void emit_XBlockExpression_SemicolonKeyword_2_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('*
-	 */
-	protected void emit_XParenthesizedExpression_LeftParenthesisKeyword_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('+
-	 */
-	protected void emit_XParenthesizedExpression_LeftParenthesisKeyword_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-}
+@SuppressWarnings("restriction")
+public class AbstractSGenSyntacticSequencer extends AbstractSyntacticSequencer {
+
+	protected SGenGrammarAccess grammarAccess;
+	protected AbstractElementAlias match_XBlockExpression_SemicolonKeyword_2_1_q;
+	protected AbstractElementAlias match_XParenthesizedExpression_LeftParenthesisKeyword_0_a;
+	protected AbstractElementAlias match_XParenthesizedExpression_LeftParenthesisKeyword_0_p;
+	
+	@Inject
+	protected void init(IGrammarAccess access) {
+		grammarAccess = (SGenGrammarAccess) access;
+		match_XBlockExpression_SemicolonKeyword_2_1_q = new TokenAlias(true, false, grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1());
+		match_XParenthesizedExpression_LeftParenthesisKeyword_0_a = new TokenAlias(true, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
+		match_XParenthesizedExpression_LeftParenthesisKeyword_0_p = new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
+	}
+	
+	@Override
+	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
+		if(ruleCall.getRule() == grammarAccess.getOpSingleAssignRule())
+			return getOpSingleAssignToken(semanticObject, ruleCall, node);
+		return "";
+	}
+	
+	protected String getOpSingleAssignToken(EObject semanticObject, RuleCall ruleCall, INode node) {
+		if (node != null)
+			return getTokenText(node);
+		return "=";
+	}
+	
+	@Override
+	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
+		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
+		List<INode> transitionNodes = collectNodes(fromNode, toNode);
+		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
+			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
+			if(match_XBlockExpression_SemicolonKeyword_2_1_q.equals(syntax))
+				emit_XBlockExpression_SemicolonKeyword_2_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_XParenthesizedExpression_LeftParenthesisKeyword_0_a.equals(syntax))
+				emit_XParenthesizedExpression_LeftParenthesisKeyword_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_XParenthesizedExpression_LeftParenthesisKeyword_0_p.equals(syntax))
+				emit_XParenthesizedExpression_LeftParenthesisKeyword_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else acceptNodes(getLastNavigableState(), syntaxNodes);
+		}
+	}
+
+	/**
+	 * Syntax:
+	 *     ';'?
+	 */
+	protected void emit_XBlockExpression_SemicolonKeyword_2_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     '('*
+	 */
+	protected void emit_XParenthesizedExpression_LeftParenthesisKeyword_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     '('+
+	 */
+	protected void emit_XParenthesizedExpression_LeftParenthesisKeyword_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+}

+ 18 - 14
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/services/SGenGrammarAccess.java

@@ -67,33 +67,37 @@ public class SGenGrammarAccess extends AbstractGrammarElementFinder {
 	public class GeneratorEntryElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GeneratorEntry");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Keyword cStatechartKeyword_0 = (Keyword)cGroup.eContents().get(0);
-		private final Assignment cStatechartAssignment_1 = (Assignment)cGroup.eContents().get(1);
-		private final CrossReference cStatechartStatechartCrossReference_1_0 = (CrossReference)cStatechartAssignment_1.eContents().get(0);
-		private final RuleCall cStatechartStatechartQIDParserRuleCall_1_0_1 = (RuleCall)cStatechartStatechartCrossReference_1_0.eContents().get(1);
+		private final Assignment cContentTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cContentTypeIDTerminalRuleCall_0_0 = (RuleCall)cContentTypeAssignment_0.eContents().get(0);
+		private final Assignment cElementRefAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final CrossReference cElementRefEObjectCrossReference_1_0 = (CrossReference)cElementRefAssignment_1.eContents().get(0);
+		private final RuleCall cElementRefEObjectQIDParserRuleCall_1_0_1 = (RuleCall)cElementRefEObjectCrossReference_1_0.eContents().get(1);
 		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		private final Assignment cFeaturesAssignment_3 = (Assignment)cGroup.eContents().get(3);
 		private final RuleCall cFeaturesFeatureConfigurationParserRuleCall_3_0 = (RuleCall)cFeaturesAssignment_3.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
 		//GeneratorEntry returns gen::GeneratorEntry:
-		//	"statechart" statechart=[sct::Statechart|QID] "{" features+=FeatureConfiguration* "}";
+		//	contentType=ID elementRef=[ecore::EObject|QID] "{" features+=FeatureConfiguration* "}";
 		public ParserRule getRule() { return rule; }
 
-		//"statechart" statechart=[sct::Statechart|QID] "{" features+=FeatureConfiguration* "}"
+		//contentType=ID elementRef=[ecore::EObject|QID] "{" features+=FeatureConfiguration* "}"
 		public Group getGroup() { return cGroup; }
 
-		//"statechart"
-		public Keyword getStatechartKeyword_0() { return cStatechartKeyword_0; }
+		//contentType=ID
+		public Assignment getContentTypeAssignment_0() { return cContentTypeAssignment_0; }
 
-		//statechart=[sct::Statechart|QID]
-		public Assignment getStatechartAssignment_1() { return cStatechartAssignment_1; }
+		//ID
+		public RuleCall getContentTypeIDTerminalRuleCall_0_0() { return cContentTypeIDTerminalRuleCall_0_0; }
+
+		//elementRef=[ecore::EObject|QID]
+		public Assignment getElementRefAssignment_1() { return cElementRefAssignment_1; }
 
-		//[sct::Statechart|QID]
-		public CrossReference getStatechartStatechartCrossReference_1_0() { return cStatechartStatechartCrossReference_1_0; }
+		//[ecore::EObject|QID]
+		public CrossReference getElementRefEObjectCrossReference_1_0() { return cElementRefEObjectCrossReference_1_0; }
 
 		//QID
-		public RuleCall getStatechartStatechartQIDParserRuleCall_1_0_1() { return cStatechartStatechartQIDParserRuleCall_1_0_1; }
+		public RuleCall getElementRefEObjectQIDParserRuleCall_1_0_1() { return cElementRefEObjectQIDParserRuleCall_1_0_1; }
 
 		//"{"
 		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
@@ -273,7 +277,7 @@ public class SGenGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//GeneratorEntry returns gen::GeneratorEntry:
-	//	"statechart" statechart=[sct::Statechart|QID] "{" features+=FeatureConfiguration* "}";
+	//	contentType=ID elementRef=[ecore::EObject|QID] "{" features+=FeatureConfiguration* "}";
 	public GeneratorEntryElements getGeneratorEntryAccess() {
 		return (pGeneratorEntry != null) ? pGeneratorEntry : (pGeneratorEntry = new GeneratorEntryElements());
 	}

+ 4 - 3
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/SGen.xtext

@@ -1,5 +1,6 @@
 grammar org.yakindu.sct.generator.genmodel.SGen with org.eclipse.xtext.xbase.Xbase
 
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
 import "platform:/resource/org.yakindu.sct.model.sgen/model/emf/sgen.ecore" as gen
 import "platform:/resource/org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore" as sct
 import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase
@@ -11,12 +12,12 @@ GeneratorModel returns gen::GeneratorModel:
 	'GeneratorModel' 'for' generatorId=QID '{'
 	(entries+=GeneratorEntry)+
 	'}';
-
+ 
 GeneratorEntry returns gen::GeneratorEntry:
-	'statechart' statechart=[sct::Statechart|QID] '{'
+	contentType=ID elementRef=[ecore::EObject|QID] '{'
 	(features+=FeatureConfiguration)*
 	'}';
-
+ 
 FeatureConfiguration returns gen::FeatureConfiguration:
 	{gen::FeatureConfiguration} 'feature' type=[gen::FeatureType] '{'
 	(parameterValues+=FeatureParameterValue)+

+ 1 - 1
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/formatting/SGenFormatter.java

@@ -50,7 +50,7 @@ public class SGenFormatter extends AbstractDeclarativeFormatter {
 		c.setLinewrap().around(g.getFeatureConfigurationRule());
 		c.setLinewrap().around(g.getFeatureParameterValueRule());
 		c.setNoLinewrap().after(
-				g.getGeneratorEntryAccess().getStatechartKeyword_0());
+				g.getGeneratorEntryAccess().getContentTypeAssignment_0());
 		c.setNoLinewrap().after(
 				g.getFeatureConfigurationAccess().getFeatureKeyword_1());
 		c.setNoLinewrap().before(

+ 22 - 1
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java

@@ -22,6 +22,8 @@ import org.eclipse.xtext.scoping.IScope;
 import org.eclipse.xtext.scoping.impl.FilteringScope;
 import org.eclipse.xtext.scoping.impl.SimpleScope;
 import org.eclipse.xtext.xbase.scoping.XbaseScopeProvider;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
 import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
@@ -57,9 +59,29 @@ public class SGenScopeProvider extends XbaseScopeProvider {
 		if (reference.getName().equals("parameter")) {
 			return scope_Parameter(context, reference);
 		}
+		if (reference.getName().equals("elementRef")) {
+			return scope_GeneratorEntry_elementRef(context, reference);
+		}
 		return super.getScope(context, reference);
 	}
 
+	private IScope scope_GeneratorEntry_elementRef(final EObject context,
+			final EReference reference) {
+		GeneratorModel generatorModel = (GeneratorModel) EcoreUtil2
+				.getRootContainer(context);
+		String id = generatorModel.getGeneratorId();
+		final GeneratorDescriptor desc = GeneratorExtensions
+				.getGeneratorDescriptorForId(id);
+		final Class<?> elementRefType = desc.getElementRefType();
+		return new FilteringScope(getDelegate().getScope(context, reference),
+				new Predicate<IEObjectDescription>() {
+					public boolean apply(IEObjectDescription input) {
+						return elementRefType.isAssignableFrom(input
+								.getEClass().getInstanceClass());
+					}
+				});
+	}
+
 	private IScope scope_Parameter(final EObject context, EReference reference) {
 		IScope libraryScope = getLibraryScope(context.eResource());
 		return new FilteringScope(libraryScope,
@@ -107,7 +129,6 @@ public class SGenScopeProvider extends XbaseScopeProvider {
 		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
 				.getLibraryDescriptor(generatorId);
 		for (LibraryDescriptor desc : libraryDescriptor) {
-			//FIXME Error, if URL could not be resolved
 			Resource library = resourceSet.getResource(desc.getURI(), true);
 			FeatureResourceDescription description = new FeatureResourceDescription(
 					library);

+ 21 - 4
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java

@@ -24,6 +24,7 @@ import org.eclipse.xtext.validation.Check;
 import org.yakindu.base.base.NamedElement;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
 import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
@@ -47,6 +48,23 @@ import com.google.common.collect.Lists;
  * 
  */
 public class SGenJavaValidator extends AbstractSGenJavaValidator {
+
+	@Check
+	public void checkContentType(GeneratorEntry entry) {
+		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(entry,
+				GeneratorModel.class);
+		GeneratorDescriptor descriptor = GeneratorExtensions
+				.getGeneratorDescriptorForId(generatorModel.getGeneratorId());
+		String contentType = entry.getContentType();
+		if (contentType == null || contentType.trim().length() == 0) {
+			return;
+		}
+		if (!contentType.equals(descriptor.getContentType())) {
+			error("Unknown content type '" + contentType + "'",
+					SGenPackage.Literals.GENERATOR_ENTRY__CONTENT_TYPE);
+		}
+	}
+
 	@Check
 	public void checkParameterValueType(
 			final FeatureParameterValue parameterValue) {
@@ -168,7 +186,7 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 			if (!configuredTypes.contains(featureType.getName()))
 				error(String.format("Missing required feature %s",
 						featureType.getName()),
-						SGenPackage.Literals.GENERATOR_ENTRY__STATECHART);
+						SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF);
 		}
 	}
 
@@ -178,8 +196,7 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 				.getRootContainer(configuration);
 		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
 				.getLibraryDescriptor(model.getGeneratorId());
-		
-		
+
 		Iterable<String> requiredParameters = transform(
 				filter(concat(transform(
 						filter(concat(transform(
@@ -190,7 +207,7 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 						isRequiredParamter()), getName());
 
 		List<String> configuredParameters = Lists.newArrayList();
-		
+
 		for (FeatureParameterValue featureParameterValue : configuration
 				.getParameterValues()) {
 			configuredParameters.add(featureParameterValue.getParameter()

+ 2 - 0
plugins/org.yakindu.sct.generator.java/plugin.xml

@@ -7,6 +7,8 @@
             class="org.yakindu.sct.generator.java.JavaSCTGenerator"
             description="YAKINDU Java Code Generator"
             id="yakindu::java"
+            contentType="statechart"
+            elementRefType="org.yakindu.sct.model.sgraph.Statechart"
             name="YAKINDU Java Code Generator">
       </SCTGenerator>
    </extension>

+ 74 - 73
plugins/org.yakindu.sct.model.sgen/model/emf/sgen.ecore

@@ -1,73 +1,74 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sgen"
-    nsURI="http://www.yakindu.org/sct/statechart/SGen" nsPrefix="sgen">
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorModel">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
-        eType="#//GeneratorEntry" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generatorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorConfiguration">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="configurations" upperBound="-1"
-        eType="#//FeatureConfiguration" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureType" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
-        eType="#//FeatureParameter" containment="true" eOpposite="#//FeatureParameter/featureType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
-        eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
-        derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        defaultValueLiteral="false"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
-        eOpposite="#//FeatureType/parameters"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        defaultValueLiteral="false"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterType" eType="#//ParameterTypes"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
-    <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
-      <eParameters name="parameterName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//FeatureType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterValues" upperBound="-1"
-        eType="#//FeatureParameterValue" containment="true" eOpposite="#//FeatureParameterValue/featureConfiguration"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorEntry">
-    <eOperations name="getFeatureConfiguration" eType="#//FeatureConfiguration">
-      <eParameters name="featureName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="statechart" eType="ecore:EClass ../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//Statechart"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
-        eType="#//FeatureConfiguration" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameterValue">
-    <eOperations name="setValue">
-      <eParameters name="string" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="setValue">
-      <eParameters name="boolean" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    </eOperations>
-    <eOperations name="getStringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eOperations name="getBooleanValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="#//FeatureParameter"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="featureConfiguration" eType="#//FeatureConfiguration"
-        changeable="false" eOpposite="#//FeatureConfiguration/parameterValues"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass ../../../org.eclipse.xtext.xbase/model/Xbase.ecore#//XExpression"
-        containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureTypeLibrary">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
-        eType="#//FeatureType" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="ParameterTypes">
-    <eLiterals name="STRING" value="1"/>
-    <eLiterals name="FLOAT" value="2" literal="FLOAT"/>
-    <eLiterals name="BOOLEAN"/>
-    <eLiterals name="INTEGER" value="3"/>
-  </eClassifiers>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sgen"
+    nsURI="http://www.yakindu.org/sct/statechart/SGen" nsPrefix="sgen">
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorModel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
+        eType="#//GeneratorEntry" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generatorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorConfiguration">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="configurations" upperBound="-1"
+        eType="#//FeatureConfiguration" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureType" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+        eType="#//FeatureParameter" containment="true" eOpposite="#//FeatureParameter/featureType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
+        eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
+        derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
+        eOpposite="#//FeatureType/parameters"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterType" eType="#//ParameterTypes"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
+    <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
+      <eParameters name="parameterName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//FeatureType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterValues" upperBound="-1"
+        eType="#//FeatureParameterValue" containment="true" eOpposite="#//FeatureParameterValue/featureConfiguration"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorEntry">
+    <eOperations name="getFeatureConfiguration" eType="#//FeatureConfiguration">
+      <eParameters name="featureName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elementRef" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
+        eType="#//FeatureConfiguration" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="contentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameterValue">
+    <eOperations name="setValue">
+      <eParameters name="string" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eOperations name="setValue">
+      <eParameters name="boolean" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    </eOperations>
+    <eOperations name="getStringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eOperations name="getBooleanValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="#//FeatureParameter"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="featureConfiguration" eType="#//FeatureConfiguration"
+        changeable="false" eOpposite="#//FeatureConfiguration/parameterValues"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass ../../../org.eclipse.xtext.xbase/model/Xbase.ecore#//XExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureTypeLibrary">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
+        eType="#//FeatureType" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="ParameterTypes">
+    <eLiterals name="STRING" value="1"/>
+    <eLiterals name="FLOAT" value="2" literal="FLOAT"/>
+    <eLiterals name="BOOLEAN"/>
+    <eLiterals name="INTEGER" value="3"/>
+  </eClassifiers>
+</ecore:EPackage>

+ 38 - 11
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/GeneratorEntry.java

@@ -18,8 +18,9 @@ import org.yakindu.sct.model.sgraph.Statechart;
  * <p>
  * The following features are supported:
  * <ul>
- *   <li>{@link org.yakindu.sct.model.sgen.GeneratorEntry#getStatechart <em>Statechart</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.GeneratorEntry#getElementRef <em>Element Ref</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sgen.GeneratorEntry#getFeatures <em>Features</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.GeneratorEntry#getContentType <em>Content Type</em>}</li>
  * </ul>
  * </p>
  *
@@ -29,30 +30,30 @@ import org.yakindu.sct.model.sgraph.Statechart;
  */
 public interface GeneratorEntry extends EObject {
 	/**
-	 * Returns the value of the '<em><b>Statechart</b></em>' reference.
+	 * Returns the value of the '<em><b>Element Ref</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Statechart</em>' reference isn't clear,
+	 * If the meaning of the '<em>Element Ref</em>' reference isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Statechart</em>' reference.
-	 * @see #setStatechart(Statechart)
-	 * @see org.yakindu.sct.model.sgen.SGenPackage#getGeneratorEntry_Statechart()
+	 * @return the value of the '<em>Element Ref</em>' reference.
+	 * @see #setElementRef(EObject)
+	 * @see org.yakindu.sct.model.sgen.SGenPackage#getGeneratorEntry_ElementRef()
 	 * @model
 	 * @generated
 	 */
-	Statechart getStatechart();
+	EObject getElementRef();
 
 	/**
-	 * Sets the value of the '{@link org.yakindu.sct.model.sgen.GeneratorEntry#getStatechart <em>Statechart</em>}' reference.
+	 * Sets the value of the '{@link org.yakindu.sct.model.sgen.GeneratorEntry#getElementRef <em>Element Ref</em>}' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Statechart</em>' reference.
-	 * @see #getStatechart()
+	 * @param value the new value of the '<em>Element Ref</em>' reference.
+	 * @see #getElementRef()
 	 * @generated
 	 */
-	void setStatechart(Statechart value);
+	void setElementRef(EObject value);
 
 	/**
 	 * Returns the value of the '<em><b>Features</b></em>' containment reference list.
@@ -70,6 +71,32 @@ public interface GeneratorEntry extends EObject {
 	 */
 	EList<FeatureConfiguration> getFeatures();
 
+	/**
+	 * Returns the value of the '<em><b>Content Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Content Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Content Type</em>' attribute.
+	 * @see #setContentType(String)
+	 * @see org.yakindu.sct.model.sgen.SGenPackage#getGeneratorEntry_ContentType()
+	 * @model
+	 * @generated
+	 */
+	String getContentType();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sgen.GeneratorEntry#getContentType <em>Content Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Content Type</em>' attribute.
+	 * @see #getContentType()
+	 * @generated
+	 */
+	void setContentType(String value);
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

+ 37 - 9
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/SGenPackage.java

@@ -284,13 +284,13 @@ public interface SGenPackage extends EPackage {
 	int GENERATOR_ENTRY = 5;
 
 	/**
-	 * The feature id for the '<em><b>Statechart</b></em>' reference.
+	 * The feature id for the '<em><b>Element Ref</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int GENERATOR_ENTRY__STATECHART = 0;
+	int GENERATOR_ENTRY__ELEMENT_REF = 0;
 
 	/**
 	 * The feature id for the '<em><b>Features</b></em>' containment reference list.
@@ -301,6 +301,15 @@ public interface SGenPackage extends EPackage {
 	 */
 	int GENERATOR_ENTRY__FEATURES = 1;
 
+	/**
+	 * The feature id for the '<em><b>Content Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GENERATOR_ENTRY__CONTENT_TYPE = 2;
+
 	/**
 	 * The number of structural features of the '<em>Generator Entry</em>' class.
 	 * <!-- begin-user-doc -->
@@ -308,7 +317,7 @@ public interface SGenPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int GENERATOR_ENTRY_FEATURE_COUNT = 2;
+	int GENERATOR_ENTRY_FEATURE_COUNT = 3;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl <em>Feature Parameter Value</em>}' class.
@@ -587,15 +596,15 @@ public interface SGenPackage extends EPackage {
 	EClass getGeneratorEntry();
 
 	/**
-	 * Returns the meta object for the reference '{@link org.yakindu.sct.model.sgen.GeneratorEntry#getStatechart <em>Statechart</em>}'.
+	 * Returns the meta object for the reference '{@link org.yakindu.sct.model.sgen.GeneratorEntry#getElementRef <em>Element Ref</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference '<em>Statechart</em>'.
-	 * @see org.yakindu.sct.model.sgen.GeneratorEntry#getStatechart()
+	 * @return the meta object for the reference '<em>Element Ref</em>'.
+	 * @see org.yakindu.sct.model.sgen.GeneratorEntry#getElementRef()
 	 * @see #getGeneratorEntry()
 	 * @generated
 	 */
-	EReference getGeneratorEntry_Statechart();
+	EReference getGeneratorEntry_ElementRef();
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.yakindu.sct.model.sgen.GeneratorEntry#getFeatures <em>Features</em>}'.
@@ -608,6 +617,17 @@ public interface SGenPackage extends EPackage {
 	 */
 	EReference getGeneratorEntry_Features();
 
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.sct.model.sgen.GeneratorEntry#getContentType <em>Content Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Content Type</em>'.
+	 * @see org.yakindu.sct.model.sgen.GeneratorEntry#getContentType()
+	 * @see #getGeneratorEntry()
+	 * @generated
+	 */
+	EAttribute getGeneratorEntry_ContentType();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sgen.FeatureParameterValue <em>Feature Parameter Value</em>}'.
 	 * <!-- begin-user-doc -->
@@ -864,12 +884,12 @@ public interface SGenPackage extends EPackage {
 		EClass GENERATOR_ENTRY = eINSTANCE.getGeneratorEntry();
 
 		/**
-		 * The meta object literal for the '<em><b>Statechart</b></em>' reference feature.
+		 * The meta object literal for the '<em><b>Element Ref</b></em>' reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference GENERATOR_ENTRY__STATECHART = eINSTANCE.getGeneratorEntry_Statechart();
+		EReference GENERATOR_ENTRY__ELEMENT_REF = eINSTANCE.getGeneratorEntry_ElementRef();
 
 		/**
 		 * The meta object literal for the '<em><b>Features</b></em>' containment reference list feature.
@@ -879,6 +899,14 @@ public interface SGenPackage extends EPackage {
 		 */
 		EReference GENERATOR_ENTRY__FEATURES = eINSTANCE.getGeneratorEntry_Features();
 
+		/**
+		 * The meta object literal for the '<em><b>Content Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GENERATOR_ENTRY__CONTENT_TYPE = eINSTANCE.getGeneratorEntry_ContentType();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl <em>Feature Parameter Value</em>}' class.
 		 * <!-- begin-user-doc -->

+ 103 - 30
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/GeneratorEntryImpl.java

@@ -12,6 +12,7 @@ import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
@@ -28,8 +29,9 @@ import org.yakindu.sct.model.sgraph.Statechart;
  * <p>
  * The following features are implemented:
  * <ul>
- *   <li>{@link org.yakindu.sct.model.sgen.impl.GeneratorEntryImpl#getStatechart <em>Statechart</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.GeneratorEntryImpl#getElementRef <em>Element Ref</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sgen.impl.GeneratorEntryImpl#getFeatures <em>Features</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.GeneratorEntryImpl#getContentType <em>Content Type</em>}</li>
  * </ul>
  * </p>
  *
@@ -37,13 +39,14 @@ import org.yakindu.sct.model.sgraph.Statechart;
  */
 public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 	/**
-	 * The cached value of the '{@link #getStatechart() <em>Statechart</em>}' reference.
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * @see #getStatechart()
+	 * The cached value of the '{@link #getElementRef() <em>Element Ref</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElementRef()
 	 * @generated
 	 * @ordered
 	 */
-	protected Statechart statechart;
+	protected EObject elementRef;
 
 	/**
 	 * The cached value of the '{@link #getFeatures() <em>Features</em>}' containment reference list.
@@ -54,6 +57,26 @@ public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 	 */
 	protected EList<FeatureConfiguration> features;
 
+	/**
+	 * The default value of the '{@link #getContentType() <em>Content Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContentType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CONTENT_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getContentType() <em>Content Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContentType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String contentType = CONTENT_TYPE_EDEFAULT;
+
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
@@ -72,38 +95,41 @@ public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Statechart getStatechart() {
-		if (statechart != null && statechart.eIsProxy()) {
-			InternalEObject oldStatechart = (InternalEObject)statechart;
-			statechart = (Statechart)eResolveProxy(oldStatechart);
-			if (statechart != oldStatechart) {
+	public EObject getElementRef() {
+		if (elementRef != null && elementRef.eIsProxy()) {
+			InternalEObject oldElementRef = (InternalEObject)elementRef;
+			elementRef = eResolveProxy(oldElementRef);
+			if (elementRef != oldElementRef) {
 				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SGenPackage.GENERATOR_ENTRY__STATECHART, oldStatechart, statechart));
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SGenPackage.GENERATOR_ENTRY__ELEMENT_REF, oldElementRef, elementRef));
 			}
 		}
-		return statechart;
+		return elementRef;
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Statechart basicGetStatechart() {
-		return statechart;
+	public EObject basicGetElementRef() {
+		return elementRef;
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setStatechart(Statechart newStatechart) {
-		Statechart oldStatechart = statechart;
-		statechart = newStatechart;
+	public void setElementRef(EObject newElementRef) {
+		EObject oldElementRef = elementRef;
+		elementRef = newElementRef;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.GENERATOR_ENTRY__STATECHART, oldStatechart, statechart));
+			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.GENERATOR_ENTRY__ELEMENT_REF, oldElementRef, elementRef));
 	}
 
 	/**
@@ -117,6 +143,27 @@ public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 		return features;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getContentType() {
+		return contentType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setContentType(String newContentType) {
+		String oldContentType = contentType;
+		contentType = newContentType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.GENERATOR_ENTRY__CONTENT_TYPE, oldContentType, contentType));
+	}
+
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * 
@@ -158,11 +205,13 @@ public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case SGenPackage.GENERATOR_ENTRY__STATECHART:
-				if (resolve) return getStatechart();
-				return basicGetStatechart();
+			case SGenPackage.GENERATOR_ENTRY__ELEMENT_REF:
+				if (resolve) return getElementRef();
+				return basicGetElementRef();
 			case SGenPackage.GENERATOR_ENTRY__FEATURES:
 				return getFeatures();
+			case SGenPackage.GENERATOR_ENTRY__CONTENT_TYPE:
+				return getContentType();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -175,13 +224,16 @@ public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case SGenPackage.GENERATOR_ENTRY__STATECHART:
-				setStatechart((Statechart)newValue);
+			case SGenPackage.GENERATOR_ENTRY__ELEMENT_REF:
+				setElementRef((EObject)newValue);
 				return;
 			case SGenPackage.GENERATOR_ENTRY__FEATURES:
 				getFeatures().clear();
 				getFeatures().addAll((Collection<? extends FeatureConfiguration>)newValue);
 				return;
+			case SGenPackage.GENERATOR_ENTRY__CONTENT_TYPE:
+				setContentType((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -193,12 +245,15 @@ public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case SGenPackage.GENERATOR_ENTRY__STATECHART:
-				setStatechart((Statechart)null);
+			case SGenPackage.GENERATOR_ENTRY__ELEMENT_REF:
+				setElementRef((EObject)null);
 				return;
 			case SGenPackage.GENERATOR_ENTRY__FEATURES:
 				getFeatures().clear();
 				return;
+			case SGenPackage.GENERATOR_ENTRY__CONTENT_TYPE:
+				setContentType(CONTENT_TYPE_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -210,12 +265,30 @@ public class GeneratorEntryImpl extends EObjectImpl implements GeneratorEntry {
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case SGenPackage.GENERATOR_ENTRY__STATECHART:
-				return statechart != null;
+			case SGenPackage.GENERATOR_ENTRY__ELEMENT_REF:
+				return elementRef != null;
 			case SGenPackage.GENERATOR_ENTRY__FEATURES:
 				return features != null && !features.isEmpty();
+			case SGenPackage.GENERATOR_ENTRY__CONTENT_TYPE:
+				return CONTENT_TYPE_EDEFAULT == null ? contentType != null : !CONTENT_TYPE_EDEFAULT.equals(contentType);
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (contentType: ");
+		result.append(contentType);
+		result.append(')');
+		return result.toString();
+	}
+
 } // GeneratorEntryImpl

+ 1 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenFactoryImpl.java

@@ -12,6 +12,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.yakindu.sct.model.sgen.*;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
 import org.yakindu.sct.model.sgen.FeatureParameter;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;

+ 10 - 1
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenPackageImpl.java

@@ -342,7 +342,7 @@ public class SGenPackageImpl extends EPackageImpl implements SGenPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getGeneratorEntry_Statechart() {
+	public EReference getGeneratorEntry_ElementRef() {
         return (EReference)getGeneratorEntry().getEStructuralFeatures().get(0);
 	}
 
@@ -355,6 +355,15 @@ public class SGenPackageImpl extends EPackageImpl implements SGenPackage {
         return (EReference)getGeneratorEntry().getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGeneratorEntry_ContentType() {
+        return (EAttribute)getGeneratorEntry().getEStructuralFeatures().get(2);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

+ 74 - 73
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/sgen.ecore

@@ -1,73 +1,74 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sgen"
-    nsURI="http://www.yakindu.org/sct/statechart/SGen" nsPrefix="sgen">
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorModel">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
-        eType="#//GeneratorEntry" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generatorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorConfiguration">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="configurations" upperBound="-1"
-        eType="#//FeatureConfiguration" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureType" eSuperTypes="http://www.yakindu.org/base/base/2.0.0#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
-        eType="#//FeatureParameter" containment="true" eOpposite="#//FeatureParameter/featureType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
-        eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
-        derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        defaultValueLiteral="false"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="http://www.yakindu.org/base/base/2.0.0#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
-        eOpposite="#//FeatureType/parameters"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        defaultValueLiteral="false"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterType" eType="#//ParameterTypes"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
-    <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
-      <eParameters name="parameterName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//FeatureType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterValues" upperBound="-1"
-        eType="#//FeatureParameterValue" containment="true" eOpposite="#//FeatureParameterValue/featureConfiguration"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorEntry">
-    <eOperations name="getFeatureConfiguration" eType="#//FeatureConfiguration">
-      <eParameters name="featureName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="statechart" eType="ecore:EClass http://www.yakindu.org/sct/sgraph/2.0.0#//Statechart"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
-        eType="#//FeatureConfiguration" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameterValue">
-    <eOperations name="setValue">
-      <eParameters name="string" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="setValue">
-      <eParameters name="boolean" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    </eOperations>
-    <eOperations name="getStringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eOperations name="getBooleanValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="#//FeatureParameter"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="featureConfiguration" eType="#//FeatureConfiguration"
-        changeable="false" eOpposite="#//FeatureConfiguration/parameterValues"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass http://www.eclipse.org/xtext/xbase/Xbase#//XExpression"
-        containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureTypeLibrary">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
-        eType="#//FeatureType" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="ParameterTypes">
-    <eLiterals name="STRING" value="1"/>
-    <eLiterals name="FLOAT" value="2" literal="FLOAT"/>
-    <eLiterals name="BOOLEAN"/>
-    <eLiterals name="INTEGER" value="3"/>
-  </eClassifiers>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sgen"
+    nsURI="http://www.yakindu.org/sct/statechart/SGen" nsPrefix="sgen">
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorModel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
+        eType="#//GeneratorEntry" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generatorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorConfiguration">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="configurations" upperBound="-1"
+        eType="#//FeatureConfiguration" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureType" eSuperTypes="http://www.yakindu.org/base/base/2.0.0#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+        eType="#//FeatureParameter" containment="true" eOpposite="#//FeatureParameter/featureType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
+        eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
+        derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="http://www.yakindu.org/base/base/2.0.0#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
+        eOpposite="#//FeatureType/parameters"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterType" eType="#//ParameterTypes"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
+    <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
+      <eParameters name="parameterName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//FeatureType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterValues" upperBound="-1"
+        eType="#//FeatureParameterValue" containment="true" eOpposite="#//FeatureParameterValue/featureConfiguration"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorEntry">
+    <eOperations name="getFeatureConfiguration" eType="#//FeatureConfiguration">
+      <eParameters name="featureName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elementRef" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
+        eType="#//FeatureConfiguration" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="contentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameterValue">
+    <eOperations name="setValue">
+      <eParameters name="string" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eOperations name="setValue">
+      <eParameters name="boolean" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    </eOperations>
+    <eOperations name="getStringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eOperations name="getBooleanValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="#//FeatureParameter"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="featureConfiguration" eType="#//FeatureConfiguration"
+        changeable="false" eOpposite="#//FeatureConfiguration/parameterValues"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass http://www.eclipse.org/xtext/xbase/Xbase#//XExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureTypeLibrary">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
+        eType="#//FeatureType" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="ParameterTypes">
+    <eLiterals name="STRING" value="1"/>
+    <eLiterals name="FLOAT" value="2" literal="FLOAT"/>
+    <eLiterals name="BOOLEAN"/>
+    <eLiterals name="INTEGER" value="3"/>
+  </eClassifiers>
+</ecore:EPackage>

+ 1 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/util/SGenAdapterFactory.java

@@ -11,6 +11,7 @@ import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.sct.model.sgen.*;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
 import org.yakindu.sct.model.sgen.FeatureParameter;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;

+ 1 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/util/SGenSwitch.java

@@ -10,6 +10,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.sct.model.sgen.*;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
 import org.yakindu.sct.model.sgen.FeatureParameter;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;