module org.openhab.model.Sitemap

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

var grammarURI = "classpath:/org/openhab/model/Sitemap.xtext"
var file.extensions = "sitemap"
var projectName = "org.openhab.model.sitemap"
var runtimeProject = "../${projectName}"

Workflow {
    bean = StandaloneSetup {
		platformUri = "${runtimeProject}/.."
	}
	
	component = DirectoryCleaner {
		directory = "${runtimeProject}/src-gen"
	}
	
	component = DirectoryCleaner {
		directory = "${runtimeProject}.ui/src-gen"
	}
	
	component = Generator {
		pathRtProject = runtimeProject
		pathUiProject = "${runtimeProject}.ui"
		projectNameRt = projectName
		projectNameUi = "${projectName}.ui"
		
		language = {
			uri = grammarURI
			fileExtensions = file.extensions
			
			// Java API to access grammar elements (required by several other fragments)
			fragment = grammarAccess.GrammarAccessFragment {}
			
			// generates Java API for the generated EPackages 
			fragment = ecore.EcoreGeneratorFragment {
			// referencedGenModels = "uri to genmodel, uri to next genmodel"
			}
			
			// the serialization component
			fragment = parseTreeConstructor.ParseTreeConstructorFragment {}
			
			// a custom ResourceFactory for use with EMF 
			fragment = resourceFactory.ResourceFactoryFragment {
				fileExtensions = file.extensions
			}
				
			// the following fragment tries to use the Antlr Generator fragment which can be installed via update manager from http://download.itemis.com/updates/
			fragment = AntlrDelegatingFragment {}
			
			/*
			If you don't want to use the Antlr fragment for some reason, remove the antlr fragment and uncomment the packrat parser fragment below.
			fragment = parser.PackratParserFragment {}
			*/
			
			// check-based API for validation
			/*
			fragment = validation.CheckFragment {}
			*/
			 
			// java-based API for validation 
			fragment = validation.JavaValidatorFragment {
                composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
                composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
            }
            
			// scoping and exporting API
			/*
			fragment = scoping.ImportURIScopingFragment {}
			fragment = exporting.SimpleNamesFragment {}
			*/
			
			// scoping and exporting API 
			fragment = scoping.ImportNamespacesScopingFragment {}
			fragment = exporting.QualifiedNamesFragment {}
			
			// formatter API 
			fragment = formatting.FormatterFragment {}

			// labeling API 
			fragment = labeling.LabelProviderFragment {}

			// outline API 
			fragment = outline.TransformerFragment {}
			fragment = outline.OutlineNodeAdapterFactoryFragment {}
			fragment = outline.QuickOutlineFragment {}

			// java-based API for content assistance 
			fragment = contentAssist.JavaBasedContentAssistFragment {}
			
			// the following fragment tries to use the Antlr based content assist 
			//     fragment which can be downloaded from http://www.itemis.com 
			//     and will be ignored if it's not available. 
			fragment = DelegatingGeneratorFragment { 
				delegate = "de.itemis.xtext.antlr.XtextAntlrUiGeneratorFragment"
				message="You are generating without ANTLR. It is highly recommended to download and use the plugin \'de.itemis.xtext.antlr\' \n\t using the update site http://download.itemis.com/updates/."
			}

			fragment = builder.BuilderIntegrationFragment {}

			// project wizard (optional) 
			/*
			fragment = projectWizard.SimpleProjectWizardFragment {
				generatorProjectName = "${projectName}.generator" 
				modelFileExtension = file.extensions
			}
			*/
			
			// quickfix API 
			fragment = quickfix.QuickfixProviderFragment {}			
		}
	}
}
