SetupGraph.kt
package de.pflugradts.passbird.application.boot.setup
import de.pflugradts.passbird.adapter.keystore.KeyStoreFactory
import de.pflugradts.passbird.adapter.keystore.KeyStoreService
import de.pflugradts.passbird.adapter.userinterface.CommandLineInterfaceService
import de.pflugradts.passbird.adapter.userinterface.TerminalInputGateway
import de.pflugradts.passbird.application.KeyStoreAdapterPort
import de.pflugradts.passbird.application.RunContext
import de.pflugradts.passbird.application.UserInterfaceAdapterPort
import de.pflugradts.passbird.application.boot.Bootable
import de.pflugradts.passbird.application.configuration.ConfigurationFactory
import de.pflugradts.passbird.application.configuration.ConfigurationSync
import de.pflugradts.passbird.application.configuration.ConfigurationSyncService
import de.pflugradts.passbird.application.configuration.ReadableConfiguration
import de.pflugradts.passbird.application.configuration.UpdatableConfiguration
import de.pflugradts.passbird.application.util.SystemOperation
class SetupGraph(val runContext: RunContext) {
val bootable: Bootable get() = passbirdSetup
val configuration: ReadableConfiguration get() = updatableConfiguration
val configurationSync: ConfigurationSync by lazy { ConfigurationSyncService(updatableConfiguration, systemOperation) }
val keyStoreAdapterPort: KeyStoreAdapterPort by lazy { KeyStoreService(systemOperation, KeyStoreFactory()) }
val userInterfaceAdapterPort: UserInterfaceAdapterPort by lazy {
CommandLineInterfaceService(TerminalInputGateway(), configuration)
}
private val systemOperation by lazy { SystemOperation() }
private val configurationFactory by lazy { ConfigurationFactory(systemOperation, runContext) }
private val updatableConfiguration: UpdatableConfiguration by lazy { configurationFactory.loadConfiguration() }
private val setupGuide by lazy { SetupGuide(userInterfaceAdapterPort) }
private val passbirdSetup by lazy {
PassbirdSetup(
setupGuide = setupGuide,
configurationSync = configurationSync,
configurationDirectory = runContext.homeDirectory,
configuration = configuration,
keyStoreAdapterPort = keyStoreAdapterPort,
userInterfaceAdapterPort = userInterfaceAdapterPort,
systemOperation = systemOperation,
)
}
}