/*
 * Copyright (c) 2011 Google Inc.
 *
 * 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
 * 
 * Generated by Xtext
 */
module com.google.eclipse.protobuf.Protobuf

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

var grammarURI = "classpath:/com/google/eclipse/protobuf/Protobuf.xtext"
var file.extensions = "proto, protodevel"
var projectName = "com.google.eclipse.protobuf"
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"
      }
      
      // Serializer 2.0
      fragment = serializer.SerializerFragment {
        generateStub = false
      }

      // the serialization component
      // fragment = parseTreeConstructor.ParseTreeConstructorFragment {}

      // a custom ResourceFactory for use with EMF 
      fragment = resourceFactory.ResourceFactoryFragment {
        fileExtensions = file.extensions
      }

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

      // java-based API for validation 
      fragment = validation.JavaValidatorFragment {
      // composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
      // composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
      // registerForImportedPackages = true
      }

      // scoping and exporting API
      // fragment = scoping.ImportURIScopingFragment {}
      // fragment = exporting.SimpleNamesFragment {}

      // scoping and exporting API 
      fragment = scoping.ImportNamespacesScopingFragment {}
      fragment = exporting.QualifiedNamesFragment {}
      fragment = builder.BuilderIntegrationFragment {}

      // formatter API 
      fragment = formatting.FormatterFragment {}

      // labeling API 
      fragment = labeling.LabelProviderFragment {}

      // outline API 
      fragment = outline.OutlineTreeProviderFragment {}
      fragment = outline.QuickOutlineFragment {}

      // quickfix API 
      fragment = quickfix.QuickfixProviderFragment {}

      // rename refactoring
      fragment = refactoring.RefactorElementNameFragment {}

      // content assist API  
      fragment = contentAssist.JavaBasedContentAssistFragment {}

      // generates a more lightweight Antlr parser and lexer tailored for content assist  
      fragment = parser.antlr.XtextAntlrUiGeneratorFragment {
        // options = {
        //   backtrack = true
        // }
      }

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