diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/FileTemplateBuilder.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/FileTemplateBuilder.kt new file mode 100644 index 000000000..d87d6f44d --- /dev/null +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/FileTemplateBuilder.kt @@ -0,0 +1,35 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.templates.base + +import com.itsaky.androidide.templates.FileTemplate +import com.itsaky.androidide.templates.TemplateBuilder +import java.io.File + +/** + * [TemplateBuilder] implementation for building files templates. + * + * @property dir The directory in which the file must be created. + * @author Akash Yadav + */ +class FileTemplateBuilder(val dir: File) : TemplateBuilder() { + + override fun buildInternal(): FileTemplate { + return FileTemplate(templateName!!, thumb!!, widgets!!, recipe!!) + } +} \ No newline at end of file diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt index 39016dfe2..0cff0dc87 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt @@ -17,6 +17,7 @@ package com.itsaky.androidide.templates.base +import com.itsaky.androidide.templates.FileTemplate import com.itsaky.androidide.templates.Language import com.itsaky.androidide.templates.Language.Java import com.itsaky.androidide.templates.ModuleTemplate @@ -36,8 +37,6 @@ import com.itsaky.androidide.templates.R import com.itsaky.androidide.templates.Sdk import com.itsaky.androidide.templates.SpinnerWidget import com.itsaky.androidide.templates.TextFieldWidget -import com.itsaky.androidide.templates.base.util.AndroidModuleTemplateConfigurator -import com.itsaky.androidide.templates.base.util.ProjectTemplateConfigurator import com.itsaky.androidide.templates.base.util.moduleNameToDir import com.itsaky.androidide.templates.enumParameter import com.itsaky.androidide.templates.stringParameter @@ -45,6 +44,10 @@ import com.itsaky.androidide.utils.AndroidUtils import com.itsaky.androidide.utils.Environment import java.io.File +typealias ProjectTemplateConfigurator = ProjectTemplateBuilder.() -> Unit +typealias ModuleTemplateConfigurator = ModuleTemplateBuilder.() -> Unit +typealias AndroidModuleTemplateConfigurator = AndroidModuleTemplateBuilder.() -> Unit +typealias FileTemplateConfigurator = FileTemplateBuilder.() -> Unit /** * Setup base files for project templates. @@ -186,4 +189,15 @@ fun baseAndroidModule(block: AndroidModuleTemplateConfigurator): ModuleTemplate block() }.build() +} + +/** + * Creates a template for a file. + * + * @param dir The directory in which the file will be created. + * @param configurator The configurator to configure the template. + * @return The [FileTemplate]. + */ +fun baseFile(dir: File, configurator: FileTemplateConfigurator): FileTemplate { + return FileTemplateBuilder(dir).apply(configurator).build() } \ No newline at end of file diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt index dadbb0696..c771fe941 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt @@ -24,10 +24,6 @@ import com.itsaky.androidide.templates.base.ModuleTemplateBuilder import com.itsaky.androidide.templates.base.ProjectTemplateBuilder import java.io.File -typealias ProjectTemplateConfigurator = ProjectTemplateBuilder.() -> Unit -typealias ModuleTemplateConfigurator = ModuleTemplateBuilder.() -> Unit -typealias AndroidModuleTemplateConfigurator = AndroidModuleTemplateBuilder.() -> Unit - /** * Get the asset path for base template. */ diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/template.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/template.kt index c7384d68f..e3e501c1b 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/template.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/template.kt @@ -68,8 +68,7 @@ enum class Language(val lang: String, val ext: String) { */ enum class ModuleType(val typeName: String) { - AndroidApp("Android Application"), AndroidLibrary("Android Library"), JavaLibrary( - "Java library") + AndroidApp("Android Application"), AndroidLibrary("Android Library"), JavaLibrary("Java library") } /** @@ -209,6 +208,13 @@ open class ModuleTemplate(val name: String, @StringRes templateName: Int, @Drawa widgets: List>, recipe: TemplateRecipe ) : Template(templateName, thumb, widgets, recipe) +/** + * Template for creating a file. + */ +open class FileTemplate(@StringRes name: Int, @DrawableRes thumb: Int, widgets: List>, + recipe: TemplateRecipe +) : Template(name, thumb, widgets, recipe) + /** * Base class for template builders. *