/**
 * <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 v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation
 *
 * </copyright>
 *
 */
module GenerateQVTOperationalEditor

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/qvtoperational/QVTOperational.xtext"
var fileExtensions = "qvto2"
var projectName = "org.eclipse.qvto.examples.xtext.qvtoperational"
var runtimeProject = "../../examples/${projectName}"
var generateXtendStub = true

Workflow {
    bean = StandaloneSetup {
    	scanClassPath = true
    	platformUri = "${runtimeProject}/.."
    	registerGeneratedEPackage = "org.eclipse.uml2.uml.UMLPackage"
    	registerGeneratedEPackage = "org.eclipse.ocl.pivot.PivotPackage"
    	registerGeneratedEPackage = "org.eclipse.uml2.codegen.ecore.genmodel.GenModelPackage"
    	registerGeneratedEPackage = "org.eclipse.qvto.examples.xtext.qvtoperationalcs.QVTOperationalCSPackage"
    	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"
    	registerGenModelFile = "platform:/resource/org.eclipse.qvto.examples.xtext.qvtoperational/model/QVTOperationalCS.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"
    		}
    
    		// 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 {}
    		// To show AS in the outline view
    		fragment = org.eclipse.qvtd.cs2as.xtext.generator.CS2ASOutlineTreeProviderFragment 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 = "QVTOperational"
	}
	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"
	}
	
		
	// CS2AS Components
	bean = org.eclipse.emf.ecore.resource.impl.ResourceSetImpl : resourceSet {}
	// bean = utilities.EcoreGenModelSetup { resourceSet = resourceSet }
	component = utilities.GenerateCGedQVTiTransformation { 
		resourceSet = resourceSet
		// oclDocURI = "${runtimeProject}/model/QVTOperationalCS2AS.ocl" // FIXME using relative URI, OCL Imports are not properly solved
		oclDocURI = "platform:/resource/${projectName}/model/QVTOperationalCS2AS.ocl"
		// FIXME the following only work if the output project are in the same FS folder. Better use a projectName and improve generator 
		javaFolder = "../${projectName}/src-gen"
		javaPackage = "${projectName}.cs2as"
		lookupSolverClassName = "org.eclipse.qvto.examples.pivot.qvtoperational.lookup.util.QVTOperationalLookupSolver"
		lookupResultItfName = "org.eclipse.ocl.pivot.internal.lookup.util.PivotLookupResult"
		tracePropertyName = "pivot"
	}
}
