Mercurial > cgi-bin > hgweb.cgi > PassMan
view src/main/kotlin/name/blackcap/passman/Main.kt @ 21:ea65ab890f66
More work to support interactive feature.
author | David Barts <n5jrn@me.com> |
---|---|
date | Tue, 02 Jul 2024 11:27:39 -0700 |
parents | 698c4a3d758d |
children | 07406c4af4a5 |
line wrap: on
line source
package name.blackcap.passman import java.io.BufferedReader import java.io.InputStreamReader import java.util.* import java.util.stream.Collectors import kotlin.reflect.jvm.javaMethod import kotlin.reflect.jvm.kotlinFunction import kotlin.system.exitProcess fun main(args: Array<String>) { if (args.isEmpty()) { error("expecting subcommand") exitProcess(2) } val subcommand = args[0]; val scArgs = args.sliceArray(1 until args.size) Database.default = Database.open() runSubcommand(subcommand, scArgs) } fun runSubcommand(name: String, args: Array<String>): Unit { val instance = getInstanceForClass(getClassForSubcommand(name)) if (instance == null) { die("${see(name)} - unknown subcommand", 2) } else { instance.run(args) } } fun getClassForSubcommand(name: String): Class<Subcommand>? = try { val shortName = name.replace('-', '_') .lowercase() .replaceFirstChar { it.titlecase(Locale.getDefault()) } Class.forName("$MAIN_PACKAGE.${shortName}Subcommand") as? Class<Subcommand> } catch (e: ClassNotFoundException) { null } fun getInstanceForClass(klass: Class<Subcommand>?) = try { klass?.getDeclaredConstructor()?.newInstance() } catch (e: ReflectiveOperationException) { null }