Skip to content

Commit ffe33dd

Browse files
authored
Implemented settings panel. (#11)
1 parent f1af422 commit ffe33dd

19 files changed

+1390
-413
lines changed

core/src/main/kotlin/com/mitteloupe/cag/core/generation/versioncatalog/DependencyConfiguration.kt

Lines changed: 499 additions & 405 deletions
Large diffs are not rendered by default.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.mitteloupe.cag.core.generation.versioncatalog
2+
3+
object VersionCatalogSettingsAccessor {
4+
@Volatile
5+
private var provider: ((key: String, default: String) -> String) = { _, default -> default }
6+
7+
fun setProvider(provider: (key: String, default: String) -> String) {
8+
this.provider = provider
9+
}
10+
11+
fun getVersionForKey(
12+
key: String,
13+
default: String
14+
): String = provider(key, default)
15+
}

plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/CreateCleanArchitectureFeatureAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import java.io.File
1313
class CreateCleanArchitectureFeatureAction : AnAction() {
1414
private val ideBridge = IdeBridge()
1515
private val appModuleDirectoryFinder = AppModuleDirectoryFinder()
16+
private val generatorProvider = GeneratorProvider()
1617

1718
override fun actionPerformed(event: AnActionEvent) {
1819
val project = event.project ?: return
@@ -24,7 +25,7 @@ class CreateCleanArchitectureFeatureAction : AnAction() {
2425
if (dialog.showAndGet()) {
2526
val featureName = dialog.featureName
2627
val featurePackageName = dialog.featurePackageName
27-
val generator = GeneratorProvider().generator(project)
28+
val generator = generatorProvider.prepare(project).generate()
2829
val selectedAppModule = dialog.selectedAppModuleDirectory
2930
val enableKtlint = dialog.enableKtlint
3031
val enableDetekt = dialog.enableDetekt

plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/CreateCleanArchitecturePackageAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import java.io.File
1212

1313
class CreateCleanArchitecturePackageAction : AnAction() {
1414
private val ideBridge = IdeBridge()
15+
private val generatorProvider = GeneratorProvider()
1516

1617
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
1718

@@ -25,7 +26,7 @@ class CreateCleanArchitecturePackageAction : AnAction() {
2526
basePackage?.let {
2627
"$it.architecture"
2728
} ?: "com.example.architecture"
28-
val generator = GeneratorProvider().generator(project)
29+
val generator = generatorProvider.prepare(project).generate()
2930
val projectRootDir = event.project?.basePath?.let { File(it) } ?: File(".")
3031
val request =
3132
GenerateArchitectureRequest(

plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/CreateDataSourceAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import java.io.File
1010

1111
class CreateDataSourceAction : AnAction() {
1212
private val ideBridge = IdeBridge()
13+
private val generatorProvider = GeneratorProvider()
1314

1415
override fun actionPerformed(event: AnActionEvent) {
1516
val project = event.project ?: return
@@ -24,7 +25,7 @@ class CreateDataSourceAction : AnAction() {
2425
val dataSourceName = dialog.dataSourceNameWithSuffix
2526

2627
try {
27-
GeneratorProvider().generator(project).generateDataSource(
28+
generatorProvider.prepare(project).generate().generateDataSource(
2829
destinationRootDirectory = projectRootDir,
2930
dataSourceName = dataSourceName,
3031
projectNamespace = defaultPrefix,

plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/CreateUseCaseAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import java.io.File
1919

2020
class CreateUseCaseAction : AnAction() {
2121
private val ideBridge = IdeBridge()
22+
private val generatorProvider = GeneratorProvider()
2223

2324
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
2425

@@ -72,7 +73,7 @@ class CreateUseCaseAction : AnAction() {
7273
.build()
7374

7475
try {
75-
GeneratorProvider().generator(project).generateUseCase(request)
76+
generatorProvider.prepare(project).generate().generateUseCase(request)
7677
ideBridge.refreshIde(projectRootDir)
7778
ideBridge.synchronizeGradle(project, projectRootDir)
7879
Messages.showInfoMessage(

plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/CreateViewModelAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import java.io.File
2121

2222
class CreateViewModelAction : AnAction() {
2323
private val ideBridge = IdeBridge()
24+
private val generatorProvider = GeneratorProvider()
2425

2526
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
2627

@@ -79,7 +80,7 @@ class CreateViewModelAction : AnAction() {
7980
).build()
8081

8182
try {
82-
GeneratorProvider().generator(project).generateViewModel(request)
83+
generatorProvider.prepare(project).generate().generateViewModel(request)
8384
ideBridge.refreshIde(projectRootDirectory)
8485
ideBridge.synchronizeGradle(project, projectRootDirectory)
8586
Messages.showInfoMessage(

plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/filesystem/GeneratorProvider.kt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,30 @@ import com.mitteloupe.cag.core.generation.UiLayerContentGenerator
2121
import com.mitteloupe.cag.core.generation.architecture.ArchitectureModulesContentGenerator
2222
import com.mitteloupe.cag.core.generation.architecture.CoroutineModuleContentGenerator
2323
import com.mitteloupe.cag.core.generation.filesystem.FileCreator
24+
import com.mitteloupe.cag.core.generation.versioncatalog.VersionCatalogSettingsAccessor
2425
import com.mitteloupe.cag.core.generation.versioncatalog.VersionCatalogUpdater
26+
import com.mitteloupe.cag.settings.versioncatalog.current.VersionCatalogProjectSettingsService
27+
import com.mitteloupe.cag.settings.versioncatalog.template.VersionCatalogAppSettingsService
2528

2629
class GeneratorProvider {
27-
fun generator(project: Project?): Generator {
30+
class GeneratorInitializer internal constructor(
31+
private val generatorProvider: GeneratorProvider,
32+
val project: Project?
33+
) {
34+
fun generate() = generatorProvider.generator(project)
35+
}
36+
37+
fun prepare(project: Project?) =
38+
GeneratorInitializer(this, project).also {
39+
installVersionProvider(project)
40+
}
41+
42+
private fun generator(project: Project?): Generator {
2843
val fileCreator = FileCreator(IntelliJFileSystemBridge(project))
2944
val directoryFinder = DirectoryFinder()
3045
val kotlinFileCreator = KotlinFileCreator(fileCreator)
3146
val gradleFileCreator = GradleFileCreator(fileCreator)
47+
3248
val catalogUpdater = VersionCatalogUpdater(fileCreator)
3349
return Generator(
3450
GradleFileCreator(fileCreator),
@@ -50,4 +66,17 @@ class GeneratorProvider {
5066
SettingsFileUpdater(fileCreator)
5167
)
5268
}
69+
70+
private fun installVersionProvider(project: Project?) {
71+
val settingsService =
72+
if (project == null) {
73+
VersionCatalogAppSettingsService.getInstance()
74+
} else {
75+
VersionCatalogProjectSettingsService.getInstance(project)
76+
}
77+
VersionCatalogSettingsAccessor.setProvider { key, default ->
78+
val values = settingsService.getCurrentValues()
79+
values[key] ?: default
80+
}
81+
}
5382
}

plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/projectwizard/CleanArchitectureWizardTemplateProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap
2828

2929
class CleanArchitectureWizardTemplateProvider : WizardTemplateProvider() {
3030
private val ideBridge = IdeBridge()
31+
private val generatorProvider = GeneratorProvider()
3132

3233
private val processedRequests = ConcurrentHashMap<String, Boolean>()
3334

@@ -144,7 +145,7 @@ class CleanArchitectureWizardTemplateProvider : WizardTemplateProvider() {
144145
enableRetrofit = enableRetrofit.value
145146
)
146147

147-
GeneratorProvider().generator(project = null).generateProjectTemplate(request)
148+
generatorProvider.prepare(project = null).generate().generateProjectTemplate(request)
148149
}
149150
}
150151

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.mitteloupe.cag.settings.versioncatalog
2+
3+
import com.intellij.openapi.options.BoundSearchableConfigurable
4+
import com.intellij.openapi.options.Configurable
5+
import com.intellij.openapi.options.ConfigurableProvider
6+
import com.intellij.ui.dsl.builder.panel
7+
import com.mitteloupe.cag.cleanarchitecturegenerator.CleanArchitectureGeneratorBundle
8+
9+
class RootConfigurableProvider : ConfigurableProvider() {
10+
override fun createConfigurable(): Configurable = RootConfigurable()
11+
}
12+
13+
private class RootConfigurable : BoundSearchableConfigurable(
14+
CleanArchitectureGeneratorBundle.message("settings.display.name"),
15+
"com.mitteloupe.cag.settings.Settings"
16+
) {
17+
override fun createPanel() =
18+
panel {
19+
row {
20+
text(CleanArchitectureGeneratorBundle.message("settings.root.description"))
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)