/* * generated by Xtext 2.27.0 */ package org.etsi.mts.tdl.ui.wizard import org.eclipse.core.runtime.Status import org.eclipse.jdt.core.JavaCore import org.eclipse.xtext.ui.XtextProjectHelper import org.eclipse.xtext.ui.util.PluginProjectFactory import org.eclipse.xtext.ui.wizard.template.IProjectGenerator import org.eclipse.xtext.ui.wizard.template.IProjectTemplateProvider import org.eclipse.xtext.ui.wizard.template.ProjectTemplate import static org.eclipse.core.runtime.IStatus.* import org.eclipse.xtext.ui.PluginImageHelper import com.google.inject.Inject import java.util.List import org.eclipse.swt.graphics.Image import org.etsi.mts.tdl.tx.ui.internal.TxActivator import org.etsi.mts.tdl.openapi2tdl.next.ConverterNext import org.eclipse.ui.preferences.ScopedPreferenceStore import org.eclipse.core.runtime.preferences.InstanceScope import org.etsi.mts.tdl.ui.wizard.TemplateHelper.Libraries /** * Create a list with all project templates to be shown in the template new project wizard. * * Each template is able to generate one or more projects. Each project can be configured such that any number of files are included. */ class TDLtxProjectTemplateProvider implements IProjectTemplateProvider { @Inject TDLtxProject iTDLtxProject @Inject TDLtxProjectBase iTDLtxProjectBase @Inject TDLtxProjectWithOpenAPI iTDLtxProjectWithOpenAPI override getProjectTemplates() { #[ // new TDLtxProject, // new TDLtxProjectBase, // new TDLtxProjectWithOpenAPI iTDLtxProject, iTDLtxProjectBase, iTDLtxProjectWithOpenAPI ] } } //TODO: customise @ProjectTemplate(label="TDLtx Base", icon="project_template.png", description="

TDLtx

This is a parameterized project for TDLtx. You can set a parameter to modify the content in the generated file and a parameter to set the path the file is created in.

") final class TDLtxProjectBase { //TODO: remove after testing val advanced = check("Advanced:", false) val advancedGroup = group("Properties") val name = combo("Package Name:", #["Example", "Sample", "Tutorial", "Pack"], "The name of the package", advancedGroup) val path = text("Path:", "tdl", "The package path to place the files in", advancedGroup) @Inject PluginImageHelper pluginImageHelper override protected updateVariables() { name.enabled = advanced.value path.enabled = advanced.value if (!advanced.value) { name.value = "Example" path.value = "tdl" } } override protected validate() { if (path.value.matches('[a-z][a-z0-9_.]*(/[a-z][a-z0-9_.]*)*')) null else new Status(ERROR, "Wizard", "'" + path + "' is not a valid package name") //TODO: validate data definitions as well } override generateProjects(IProjectGenerator generator) { generator.generate(new PluginProjectFactory => [ projectName = projectInfo.projectName location = projectInfo.locationPath //projectNatures += #[JavaCore.NATURE_ID, "org.eclipse.pde.PluginNature", XtextProjectHelper.NATURE_ID] //builderIds += #[JavaCore.BUILDER_ID, XtextProjectHelper.BUILDER_ID] projectNatures += #[XtextProjectHelper.NATURE_ID] builderIds += #[XtextProjectHelper.BUILDER_ID] folders += "src" //TODO: remove hardcoded import addFile('''src/«path»/Wizardry.tdltx''', TemplateContent.Example) addFile('''src/«path»/Model.tdltx''', ''' /* * This is an example package */ Package «name» { Import all from Wizardry Type float } ''') ]) } protected override List> getImages() { #["project_template.png".image] } private def image(String id) { id -> pluginImageHelper.getImage('''platform:/plugin/«TxActivator.PLUGIN_ID»/«id»''') } } //TODO: customise @ProjectTemplate(label="TDLtx", icon="project_template.png", description="

TDLtx

This is a parameterized project for TDLtx. You can set a parameter to modify the content in the generated file and a parameter to set the path the file is created in.

") final class TDLtxProject { //TODO: remove after testing val advanced = check("Advanced:", false) val advancedGroup = group("Properties") // val name = combo("Package Name:", #["Example", "Sample", "Tutorial", "Pack"], "The name of the package", advancedGroup) val name = text("Main Package Name:", "Main", "The name of the main package") val path = text("Path:", "tdl", "The package path to place the files in", advancedGroup) //TODO: add other options @Inject PluginImageHelper pluginImageHelper override protected updateVariables() { name.enabled = advanced.value path.enabled = advanced.value if (!advanced.value) { name.value = "Main" path.value = "tdl" } } override protected validate() { //TODO: validate name as well if (path.value.matches('[a-z][a-z0-9_.]*(/[a-z][a-z0-9_.]*)*')) null else new Status(ERROR, "Wizard", "'" + path + "' is not a valid package name") //TODO: validate data definitions as well } override generateProjects(IProjectGenerator generator) { generator.generate(new PluginProjectFactory => [ projectName = projectInfo.projectName location = projectInfo.locationPath //projectNatures += #[JavaCore.NATURE_ID, "org.eclipse.pde.PluginNature", XtextProjectHelper.NATURE_ID] //builderIds += #[JavaCore.BUILDER_ID, XtextProjectHelper.BUILDER_ID] projectNatures += #[XtextProjectHelper.NATURE_ID] builderIds += #[XtextProjectHelper.BUILDER_ID] folders += "src" //TODO: remove hardcoded import addFile('''src/«path»/Standard.tdltx''', TemplateHelper.getLibrary("Standard")) addFile('''src/«path»/«name».tdltx''', ''' /* * This is an example package */ Package «name» { Import all from Standard Type float //define elements here } ''') ]) } protected override List> getImages() { #["project_template.png".image] } private def image(String id) { id -> pluginImageHelper.getImage('''platform:/plugin/«TxActivator.PLUGIN_ID»/«id»''') } } //TODO: customise further, reuse? @ProjectTemplate(label="TDLtx with OpenAPI", icon="project_template.png", description="

TDLtx with OpenAPI

This is a parameterized project for TDLtx with the option to import data definitions from OpenAPI. You can set a parameter to modify the content in the generated file and a parameter to set the path the file is created in.

") final class TDLtxProjectWithOpenAPI { //TODO: more modern way? //TODO: differentiate for project vs file wizard val s = new ScopedPreferenceStore(new InstanceScope(), "org.etsi.mts.tdl.tx.ui.template.data.openapi") val lastUsed = "LAST_USED" //TODO: file prompt? //TODO: remove after testing val advanced = check("Advanced:", true) val advancedGroup = group("Properties") val name = text("Main Package Name:", "Main", "The name of the main package") // val name = combo("Package Name:", #["Example", "Sample", "Tutorial", "Pack"], "The name of the package", advancedGroup) val path = text("Path:", "tdl", "The package path to place the files in", advancedGroup) val dataDefinitionsPath = text("Data DefinitionsPath:", s.getString(lastUsed), "The data definitions path to import from", advancedGroup) val sourceMapping = text("Source mapping tag:", "SOURCE_MAPPING", "The source mapping tag to be used for the data mappings", advancedGroup) val targetMapping = text("Target mapping tag:", "TARGET_MAPPING", "The target mapping tag to be used for the data mappings", advancedGroup) @Inject PluginImageHelper pluginImageHelper override protected updateVariables() { name.enabled = advanced.value path.enabled = advanced.value dataDefinitionsPath.enabled = advanced.value sourceMapping.enabled = advanced.value targetMapping.enabled = advanced.value if (!advanced.value) { name.value = "Main" path.value = "tdl" dataDefinitionsPath.value = s.getString(lastUsed) sourceMapping.value = "SOURCE_MAPPING" targetMapping.value = "TARGET_MAPPING" } } override protected validate() { if (path.value.matches('[a-z][a-z0-9_.]*(/[a-z][a-z0-9_.]*)*')) null else new Status(ERROR, "Wizard", "'" + path + "' is not a valid package name") //TODO: validate data definitions as well } override generateProjects(IProjectGenerator generator) { generator.generate(new PluginProjectFactory => [ projectName = projectInfo.projectName location = projectInfo.locationPath //projectNatures += #[JavaCore.NATURE_ID, "org.eclipse.pde.PluginNature", XtextProjectHelper.NATURE_ID] //builderIds += #[JavaCore.BUILDER_ID, XtextProjectHelper.BUILDER_ID] projectNatures += #[XtextProjectHelper.NATURE_ID] builderIds += #[XtextProjectHelper.BUILDER_ID] folders += "src" addRequiredBundles(List.of("org.etsi.mts.tdl.tx.ui")) // addFile('''src/«path»/Standard.tdltx''', TemplateContent.Standard) //TODO: move libraries to a separate bundle addFile('''src/«path»/Standard.tdltx''', TemplateHelper.getLibrary("Standard")) //TODO: remove hardcoded import //TODO: make target package name configurable? i.e. based on name addFile('''src/«path»/imported.tdltx''', ConverterNext.processToString(dataDefinitionsPath.value, "src/"+path.value+"/imported.tdltx", sourceMapping.value, targetMapping.value )) addFile('''src/«path»/Model.tdltx''', ''' /* * This is an example package */ Package «name» { Import all from Standard Import all from generated_from_ExampleAPI_yaml Type simple } ''') ]) } protected override List> getImages() { #["project_template.png".image] } private def image(String id) { id -> pluginImageHelper.getImage('''platform:/plugin/«TxActivator.PLUGIN_ID»/«id»''') } }