/**
 * <copyright>
 *
 * Copyright (c) 2013 Willink Transformations, University of York and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 *
 * Contributors:
 *     Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation
 *
 * </copyright>
 *
 */
module GenerateImperativeOCLEditor

import org.eclipse.emf.mwe.utils.*
import org.eclipse.ocl.examples.build.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*

var grammarURI = "classpath:/org/eclipse/qvto/examples/xtext/imperativeocl/ImperativeOCL.xtext"
var fileExtensions = "iocl"
var projectName = "org.eclipse.qvto.examples.xtext.imperativeocl"
var runtimeProject = "../../examples/${projectName}"
// var generateXtendStub = true

/**
 *	Generate the ImperativeOCL Editor.
 */
Workflow {
    bean = StandaloneSetup {
    	scanClassPath = true
    	platformUri = "${runtimeProject}/.."
    	registerGeneratedEPackage = "org.eclipse.uml2.uml.UMLPackage"
    	registerGeneratedEPackage = "org.eclipse.uml2.codegen.ecore.genmodel.GenModelPackage"
    	registerGeneratedEPackage = "org.eclipse.ocl.pivot.PivotPackage"
    	registerGeneratedEPackage = "org.eclipse.ocl.xtext.basecs.BaseCSPackage"
    	registerGeneratedEPackage = "org.eclipse.ocl.xtext.essentialoclcs.EssentialOCLCSPackage"
    	registerGeneratedEPackage = "org.eclipse.qvto.examples.xtext.imperativeoclcs.ImperativeOCLCSPackage"
    	registerGenModelFile = "platform:/resource/org.eclipse.ocl.pivot/model/Pivot.genmodel"
    	registerGenModelFile = "platform:/resource/org.eclipse.ocl.xtext.base/model/BaseCS.genmodel"
    	registerGenModelFile = "platform:/resource/org.eclipse.ocl.xtext.essentialocl/model/EssentialOCLCS.genmodel"
    	registerGenModelFile = "platform:/resource/org.eclipse.qvto.examples.xtext.imperativeocl/model/ImperativeOCLCS.genmodel"
	}
	
	component = DirectoryCleaner {
		directory = "${runtimeProject}/src-gen"
	}
	
	component = DirectoryCleaner {
		directory = "${runtimeProject}.ui/src-gen"
	}
	
	component = Generator {
		pathRtProject = runtimeProject
		pathUiProject = "${runtimeProject}.ui"
		pathTestProject = "${runtimeProject}.tests"
		projectNameRt = projectName
		projectNameUi = "${projectName}.ui"
		mergeManifest = false
		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.EcoreGeneratorFragment auto-inject{
			}
			
			// the old serialization component
    		// fragment = parseTreeConstructor.ParseTreeConstructorFragment auto-inject {}    
			
			// serializer 2.0
    		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 classSplitting = true }			
				antlrParam = "-Xconversiontimeout" antlrParam = "10000"
			}
			
			// Xtend-based API for validation
    		// fragment = validation.ValidatorFragment auto-inject {
    		// FIXME need to align with JavaValidator used by OCL, otherwise compiler errors
			fragment = validation.JavaValidatorFragment auto-inject {    			
				composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
//				composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
			}
			// scoping and exporting API
			/*
			fragment = scoping.ImportURIScopingFragment {}
			fragment = exporting.SimpleNamesFragment {}
			*/
			
    		// old scoping and exporting API
    		// fragment = scoping.ImportURIScopingFragment auto-inject {}
    		// fragment = exporting.SimpleNamesFragment auto-inject {}
    
			// scoping and exporting API 
			fragment = scoping.ImportNamespacesScopingFragment auto-inject {}
			fragment = exporting.QualifiedNamesFragment auto-inject {}
			fragment = builder.BuilderIntegrationFragment auto-inject {}

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

			// labeling API 
    		fragment = labeling.LabelProviderFragment auto-inject {}

			// outline API 
			fragment = outline.OutlineTreeProviderFragment auto-inject{}
			fragment = outline.QuickOutlineFragment auto-inject{}

			// quickfix API 
    		fragment = quickfix.QuickfixProviderFragment auto-inject {}
			
			//  content assist API
			fragment = contentAssist.ContentAssistFragment auto-inject {}
						
//			fragment = de.itemis.xtext.antlr.XtextAntlrGeneratorFragment {
//				options = { backtrack = true classSplitting = true}
//			}
    		// generates a more lightweight Antlr parser and lexer tailored for content assist
			fragment = parser.antlr.XtextAntlrUiGeneratorFragment auto-inject {
				options = { backtrack = true classSplitting = true}			
				antlrParam = "-Xconversiontimeout" antlrParam = "10000"
			}

    		// generates junit test support classes into Generator#pathTestProject
    		fragment = junit.Junit4Fragment auto-inject {}

			// project wizard (optional) 
    		// fragment = projectWizard.SimpleProjectWizardFragment auto-inject {
    		//      generatorProjectName = "${projectName}"
    		// }

    		// rename refactoring
    		fragment = refactoring.RefactorElementNameFragment auto-inject {}
    		
    		// quickfix API 
			fragment = quickfix.QuickfixProviderFragment auto-inject {}
				
			// EssentialOCL bindings 
			fragment = fragments.EssentialOCLFragment auto-inject{}
			// Support Markup in Hover text 
			fragment = fragments.MarkupHoverFragment auto-inject{}
			
			// *.xtextbin support on Xtext 2.3		
			fragment = fragments.CompatibilityFragment auto-inject{}
			
			// provides a preference page for template proposals
			fragment = templates.CodetemplatesGeneratorFragment auto-inject {}
			
			// provides a compare view
			fragment = compare.CompareFragment auto-inject {}
		}
	}
	
	component = xtend.GenerateGrammarXtend {
		javaFolder = "${runtimeProject}/src-gen"
		javaPackageName = "${projectName}"
		grammarFileStem = "ImperativeOCL"
	}
	component = utilities.BackportToXtext_2_3_1 {
		directory = "${runtimeProject}/src-gen"
	}
	component = utilities.BackportToXtext_2_3_1 {
		directory = "${runtimeProject}.ui/src-gen"
	}
	component = utilities.ConvertToUnixLineEndings {
		directory = "${runtimeProject}/src-gen"
	}
	component = utilities.ConvertToUnixLineEndings {
		directory = "${runtimeProject}.ui/src-gen"
	}
}
