blob: dac8daf0ffc18749bce9b1533df31120bfb49f9b [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.tools.idea.wizard.template
import kotlin.reflect.KClass
interface ParameterBuilder<T> {
var name: String?
var help: String?
var visible: WizardParameterData.() -> Boolean
var enabled: WizardParameterData.() -> Boolean
var default: T?
fun build(): Parameter<T>
fun validate() {
checkNotNull(name) { "Parameter must have a name." }
checkNotNull(default as Any?) { "Parameter must have a default value." }
}
}
fun stringParameter(block: StringParameterBuilder.() -> Unit): StringParameter = StringParameterBuilder().apply(block).build()
fun booleanParameter(block: BooleanParameterBuilder.() -> Unit): BooleanParameter = BooleanParameterBuilder().apply(block).build()
inline fun <reified T : Enum<T>> enumParameter(noinline block: EnumParameterBuilder<T>.() -> Unit): EnumParameter<T> =
enumParameter(T::class, block)
fun <T : Enum<T>> enumParameter(klass: KClass<T>, block: EnumParameterBuilder<T>.() -> Unit): EnumParameter<T> =
EnumParameterBuilder(klass).apply(block).build()
@TemplateDSL
data class BooleanParameterBuilder(
override var name: String? = null,
override var help: String? = null,
override var visible: WizardParameterData.() -> Boolean = { true },
override var enabled: WizardParameterData.() -> Boolean = { true },
override var default: Boolean? = null
) : ParameterBuilder<Boolean> {
override fun build(): BooleanParameter {
validate()
return BooleanParameter(name!!, help, visible, enabled, default!!)
}
}
@TemplateDSL
data class StringParameterBuilder(
override var name: String? = null,
override var help: String? = null,
override var visible: WizardParameterData.() -> Boolean = { true },
override var enabled: WizardParameterData.() -> Boolean = { true },
override var default: String? = null,
var constraints: List<Constraint> = listOf(),
var suggest: WizardParameterData.() -> String? = { null }
) : ParameterBuilder<String> {
override fun build(): StringParameter {
validate()
return StringParameter(name!!, help, visible, enabled, default!!, constraints, suggest)
}
}
@TemplateDSL
data class EnumParameterBuilder<T : Enum<T>>(
val enum: KClass<T>,
override var name: String? = null,
override var help: String? = null,
override var visible: WizardParameterData.() -> Boolean = { true },
override var enabled: WizardParameterData.() -> Boolean = { true },
override var default: T? = null
) : ParameterBuilder<T> {
override fun build(): EnumParameter<T> {
validate()
return EnumParameter(enum, name!!, help, visible, enabled, default!!)
}
}