module org.eclipse.fx.xtext.statemachine.GenerateStatemachine

import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*

var grammarURI = "classpath:/org/eclipse/fx/xtext/statemachine/Statemachine.xtext"
var fileExtensions = "state"
var projectName = "org.eclipse.fx.xtext.statemachine"
var runtimeProject = "../${projectName}"
var generateXtendStub = true
var encoding = "UTF-8"
var fileHeader = "/*\n * generated by Xtext \${version}\n */"
Workflow {
    bean = StandaloneSetup {
		scanClassPath = true
		platformUri = "${runtimeProject}/.."
		// The following two lines can be removed, if Xbase is not used.
		registerGeneratedEPackage = "org.eclipse.xtext.xbase.XbasePackage"
		registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
	}
	
	component = DirectoryCleaner {
		directory = "${runtimeProject}/src-gen"
	}
	
	component = DirectoryCleaner {
		directory = "${runtimeProject}/model/generated"
	}
	
	
	component = DirectoryCleaner {
		directory = "${runtimeProject}.ide/src-gen"
	}
	
	component = Generator auto-inject {
		pathRtProject = runtimeProject
		projectNameRt = projectName
		pathIdeProject = "${runtimeProject}.ide"
		projectNameIde = "${projectName}.ide"
		language = auto-inject {
			uri = grammarURI

			// Java API to access grammar elements (required by several other fragments)
			fragment = grammarAccess.GrammarAccessFragment auto-inject {}

			// generates Java API for the generated EPackages
			fragment = ecore.EMFGeneratorFragment auto-inject {}

			fragment = serializer.SerializerFragment auto-inject {
				generateStub = false
			}

			// a custom ResourceFactory for use with EMF
			fragment = resourceFactory.ResourceFactoryFragment auto-inject {}

			// The antlr parser generator fragment.
			fragment = parser.antlr.XtextAntlrGeneratorFragment auto-inject {
			//  options = {
			//      backtrack = true
			//  }
			}

			// Xtend-based API for validation
			fragment = validation.ValidatorFragment auto-inject {
			//    composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
			//    composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
			}

			// scoping and exporting API
			fragment = scoping.ImportNamespacesScopingFragment auto-inject {}
			fragment = exporting.QualifiedNamesFragment auto-inject {}

			// generator API
			fragment = generator.GeneratorFragment auto-inject {}

			// formatter API
			fragment = formatting.FormatterFragment auto-inject {}
			
			
			// generates a more lightweight Antlr parser and lexer tailored for content assist
			fragment = parser.antlr.XtextAntlrUiGeneratorFragment auto-inject {}
			// provides the necessary bindings for java types integration
			fragment = types.TypesGeneratorFragment auto-inject {}

			// generates the required bindings only if the grammar inherits from Xbase
			fragment = xbase.XbaseGeneratorFragment auto-inject {}

			// generates the required bindings only if the grammar inherits from Xtype
			fragment = xbase.XtypeGeneratorFragment auto-inject {}


		}
	}
}
