Skip to content

Commit a8216e8

Browse files
author
dengzi
committed
fix connot copy template
1 parent 6c528f1 commit a8216e8

9 files changed

Lines changed: 98 additions & 59 deletions

File tree

src/com/dengzii/plugin/template/Config.kt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.dengzii.plugin.template.model.Module
55
import com.dengzii.plugin.template.template.AucTemplate
66
import com.dengzii.plugin.template.template.Template
77
import com.dengzii.plugin.template.utils.Logger
8-
import com.google.gson.Gson
8+
import com.google.gson.GsonBuilder
99
import com.intellij.ide.util.PropertiesComponent
1010

1111
/**
@@ -19,44 +19,45 @@ import com.intellij.ide.util.PropertiesComponent
1919
*/
2020

2121
object Config {
22+
private val TAG = Config::class.java.simpleName
2223

2324
private const val KEY_TEMPLATES = "KEY_TEMPLATES"
2425
private const val KEY_INIT = "KEY_INIT"
2526

26-
private val GSON = Gson()
27+
private val GSON by lazy { GsonBuilder().setLenient().serializeNulls().create() }
2728
private val STORE by lazy { PropertiesComponent.getInstance() }
2829

29-
private val DEFAULT_MODULE_TEMPLATES = listOf(
30-
Module.create(AucTemplate.MODULE, "feature", "com.example", "Auc Feature Module"),
31-
Module.create(AucTemplate.APP, "app", "com.example", "Auc App Module"),
32-
Module.create(AucTemplate.PKG, "pkg", "com.example", "Auc Pkg Module"),
33-
Module.create(AucTemplate.EXPORT, "export", "com.example", "Auc Export Module")
30+
private val AUC_MODULE_TEMPLATES = listOf(
31+
Module.create(AucTemplate.MODULE, "Auc Feature Module"),
32+
Module.create(AucTemplate.APP, "Auc App Module"),
33+
Module.create(AucTemplate.PKG, "Auc Pkg Module"),
34+
Module.create(AucTemplate.EXPORT, "Auc Export Module")
3435
)
3536

36-
val MODULE_ANDROID_APPLICATION =
37-
Module.create(Template.ANDROID_APP, "app", "com.example", "Android Application")
37+
val TEMPLATE_ANDROID_APPLICATION = Module.create(Template.ANDROID_APP, "Android Application")
3838

3939
fun clear() = STORE.unsetValue(KEY_TEMPLATES)
4040

4141
fun loadModuleTemplates(): MutableList<Module> {
4242
val result = mutableListOf<Module>()
4343
val arr = STORE.getValues(KEY_TEMPLATES)
4444

45-
if (STORE.getBoolean(KEY_INIT, true)) {
46-
result.addAll(DEFAULT_MODULE_TEMPLATES)
45+
if (STORE.getBoolean(KEY_INIT)) {
46+
Logger.i(TAG, "INIT...")
47+
result.addAll(AUC_MODULE_TEMPLATES)
4748
}
4849
if (arr.isNullOrEmpty()) {
4950
return result
5051
}
51-
Logger.d(Config::class.java.simpleName, "loadModuleTemplates")
52+
Logger.d(TAG, "loadModuleTemplates")
5253
arr.forEach {
5354
try {
5455
val module = GSON.fromJson(it, Module::class.java)
5556
setParent(module.template)
5657
result.add(module)
5758
} catch (e: Exception) {
5859
clear()
59-
Logger.e(Config::class.java.simpleName, e)
60+
Logger.e(TAG, e)
6061
return result
6162
}
6263
}
@@ -68,10 +69,10 @@ object Config {
6869
val t = mutableListOf<String>()
6970
templates.forEach {
7071
t.add(GSON.toJson(it))
71-
Logger.d(Config::class.java.simpleName, "saveModuleTemplates ${t[t.lastIndex]}")
72+
Logger.d(TAG, "saveModuleTemplates ${t[t.lastIndex]}")
7273
}
74+
STORE.setValue(KEY_INIT, false, false)
7375
STORE.setValues(KEY_TEMPLATES, t.toTypedArray())
74-
STORE.setValue(KEY_INIT, false)
7576
}
7677

7778
private fun setParent(node: FileTreeNode) {

src/com/dengzii/plugin/template/model/FileTreeNode.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,20 @@ open class FileTreeNode private constructor() {
153153
placeholder(placeholder.placeholder, placeholder.value)
154154
}
155155

156+
fun placeholders(placeholders: Map<String, String>) {
157+
if (this.placeHolderMap == null) {
158+
this.placeHolderMap = kotlin.collections.mutableMapOf()
159+
}
160+
placeHolderMap!!.putAll(placeholders)
161+
}
162+
163+
fun filtemplates(placeholders: Map<String, String>) {
164+
if (this.fileTemplates == null) {
165+
this.fileTemplates = kotlin.collections.mutableMapOf()
166+
}
167+
fileTemplates!!.putAll(placeholders)
168+
}
169+
156170
/**
157171
* set current node as root.
158172
* the file of specified path must be a directory and exist.

src/com/dengzii/plugin/template/model/Module.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@ import com.dengzii.plugin.template.utils.Logger
44

55
class Module(
66
var template: FileTreeNode,
7-
var name: String,
8-
var packageName: String,
97
var language: String,
108
var templateName: String
119
) {
1210

1311
enum class Language {
14-
JAVA, KOTLIN;
12+
JAVA;
13+
}
14+
15+
fun clone(): Module {
16+
return create(template.clone(), templateName)
1517
}
1618

1719
companion object {
18-
fun create(template: FileTreeNode, moduleName: String,
19-
packageName: String, templateName: String): Module {
20-
Logger.i(Module::class.java.simpleName, "create module. $template moduleName=$moduleName, templateName=$templateName")
21-
return Module(template, moduleName, packageName, "java", templateName)
20+
fun create(template: FileTreeNode, templateName: String): Module {
21+
Logger.i(Module::class.java.simpleName, "create module. templateName=$templateName")
22+
return Module(template, "java", templateName)
2223
}
2324

2425
fun getLangList() = Language.values().map { it.name.toLowerCase() }.toTypedArray()

src/com/dengzii/plugin/template/template/AucTemplate.kt

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.dengzii.plugin.template.template
22

3+
import com.dengzii.plugin.template.model.FileTreeNode
4+
35
/**
46
* <pre>
57
* author : dengzi
@@ -20,16 +22,17 @@ object AucTemplate {
2022
)
2123
}
2224

23-
private val BASE = AucFrame {
24-
25-
fileTemplates = aucFileTemplates()
26-
placeholder(Placeholder.PACKAGE_NAME.value("com.example"))
27-
placeholder(Placeholder.MODULE_NAME.value("feature"))
28-
placeholder(Placeholder.APPLICATION_NAME.value("App"))
25+
private val aucPlaceholders: () -> MutableMap<String, String> = {
26+
mutableMapOf(
27+
Pair("\${PACKAGE_NAME}", "com.example"),
28+
Pair("\${MODULE_NAME}", "feature"),
29+
Pair("\${APPLICATION_NAME}", "App")
30+
)
2931
}
3032

31-
val APP = (BASE.clone()) {
32-
placeholder(Placeholder.MODULE_NAME.value("feature"))
33+
val APP = FileTreeNode {
34+
filtemplates(aucFileTemplates())
35+
placeholders(aucPlaceholders())
3336

3437
app {
3538
src {
@@ -54,8 +57,9 @@ object AucTemplate {
5457
}
5558
}
5659

57-
val PKG = (BASE.clone()) {
58-
placeholder(Placeholder.MODULE_NAME.value("feature"))
60+
val PKG = FileTreeNode {
61+
filtemplates(aucFileTemplates())
62+
placeholders(aucPlaceholders())
5963
pkg {
6064
src {
6165
main {
@@ -80,8 +84,9 @@ object AucTemplate {
8084
}
8185
}
8286

83-
val EXPORT = (BASE.clone()) {
84-
placeholder(Placeholder.MODULE_NAME.value("feature"))
87+
val EXPORT = FileTreeNode {
88+
filtemplates(aucFileTemplates())
89+
placeholders(aucPlaceholders())
8590
export {
8691
src {
8792
main {
@@ -106,8 +111,9 @@ object AucTemplate {
106111
}
107112
}
108113

109-
val MODULE = (BASE.clone()) {
110-
placeholder(Placeholder.MODULE_NAME.value("feature"))
114+
val MODULE = FileTreeNode {
115+
filtemplates(aucFileTemplates())
116+
placeholders(aucPlaceholders())
111117
module_name {
112118
include(APP)
113119
include(PKG)

src/com/dengzii/plugin/template/template/Placeholder.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ class Placeholder(var name: String, var value: String) {
1717
companion object {
1818
val MODULE_NAME = Placeholder("MODULE_NAME", "module")
1919
val PACKAGE_NAME = Placeholder("PACKAGE_NAME", "com.example")
20-
val CLASS_NAME = Placeholder("CLASS_NAME", "Example")
21-
val FILE_NAME = Placeholder("FILE_NAME", "field")
2220
val APPLICATION_NAME = Placeholder("APPLICATION_NAME", "App")
23-
val PROJECT_NAME = Placeholder("PROJECT_NAME", "Example")
2421
}
2522

2623
fun value(value: String): Placeholder {

src/com/dengzii/plugin/template/template/Template.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,30 @@ object Template {
1515

1616
val ANDROID_RES = FileTreeNode {
1717
res {
18-
drawable {}
19-
layout {}
20-
values {}
18+
drawable { }
19+
layout { }
20+
values { }
21+
}
22+
}
23+
val ANDROID_TEST = FileTreeNode {
24+
dir("AndroidTest") {
25+
26+
}
27+
}
28+
29+
val JUNIT_TEST = FileTreeNode {
30+
dir("test") {
31+
2132
}
2233
}
2334

2435
val ANDROID_APP = FileTreeNode {
2536
placeholder(Placeholder.MODULE_NAME.value("app"))
2637
placeholder(Placeholder.PACKAGE_NAME.value("com.example"))
2738

28-
dir(Placeholder.MODULE_NAME.placeholder) {
29-
dir("libs")
39+
module_name {
3040
src {
31-
dir("androidTest")
41+
include(ANDROID_TEST)
3242
main {
3343
java {
3444
pkg_name {
@@ -40,7 +50,7 @@ object Template {
4050
include(ANDROID_RES)
4151
AndroidManifest.xml
4252
}
43-
dir("test")
53+
include(JUNIT_TEST)
4454
}
4555
gitignore
4656
build.gradle

src/com/dengzii/plugin/template/ui/ConfigurePanel.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,15 @@ private void initComponent() {
6767

6868
private void initData() {
6969

70-
actionbar.onAdd(actionEvent -> {
70+
actionbar.onAdd(() -> {
7171
onAddConfig();
7272
return null;
7373
});
74-
actionbar.onRemove(actionEvent -> {
74+
actionbar.onRemove(() -> {
7575
onRemoveConfig();
7676
return null;
7777
});
78-
actionbar.onCopy(actionEvent -> {
78+
actionbar.onCopy(() -> {
7979
onCopyConfig();
8080
return null;
8181
});
@@ -101,7 +101,7 @@ protected void textChanged(@NotNull DocumentEvent documentEvent) {
101101
}
102102

103103
private void onAddConfig() {
104-
currentConfig = Config.INSTANCE.getMODULE_ANDROID_APPLICATION();
104+
currentConfig = Config.INSTANCE.getTEMPLATE_ANDROID_APPLICATION();
105105
configs.add(currentConfig);
106106
templateListModel.addElement(currentConfig.getTemplateName());
107107
listTemplate.doLayout();
@@ -122,7 +122,11 @@ private void onCopyConfig() {
122122
if (noSelectedConfig()) {
123123
return;
124124
}
125+
currentConfig = currentConfig.clone();
126+
configs.add(currentConfig);
127+
templateListModel.addElement(currentConfig.getTemplateName());
125128
listTemplate.doLayout();
129+
listTemplate.setSelectedIndex(configs.indexOf(currentConfig));
126130
}
127131

128132
private void loadConfig() {

src/com/dengzii/plugin/template/ui/CreateModuleDialog.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ private void setPanel() {
111111

112112
private void onModuleConfigChange(Module module) {
113113
selectedModule = module;
114-
fieldModuleName.setText(selectedModule.getName());
115-
fieldPkgName.setText(selectedModule.getPackageName());
114+
fieldModuleName.setText(selectedModule.getTemplateName());
115+
fieldPkgName.setText(selectedModule.getTemplateName());
116116
previewPanel.setModuleConfig(selectedModule);
117117
}
118118

src/com/dengzii/plugin/template/ui/EditToolbar.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import java.awt.event.ActionEvent
88
import javax.swing.Icon
99
import javax.swing.JButton
1010
import javax.swing.JPanel
11+
import javax.swing.border.Border
1112

1213
/**
1314
* <pre>
@@ -29,16 +30,22 @@ class EditToolbar : JPanel() {
2930
initButton()
3031
}
3132

32-
fun onAdd(listener: (e: ActionEvent) -> Unit) {
33-
btAdd.addActionListener(listener)
33+
fun onAdd(listener: () -> Unit) {
34+
btAdd.addActionListener{
35+
listener()
36+
}
3437
}
3538

36-
fun onRemove(listener: (e: ActionEvent) -> Unit) {
37-
btRemove.addActionListener(listener)
39+
fun onRemove(listener: () -> Unit) {
40+
btRemove.addActionListener{
41+
listener()
42+
}
3843
}
3944

40-
fun onCopy(listener: (e: ActionEvent) -> Unit) {
41-
btCopy.addActionListener(listener)
45+
fun onCopy(listener: () -> Unit) {
46+
btCopy.addActionListener{
47+
listener()
48+
}
4249
}
4350

4451
private fun initLayout() {
@@ -48,7 +55,6 @@ class EditToolbar : JPanel() {
4855
flowLayout.hgap = 5
4956
flowLayout.alignment = FlowLayout.LEFT
5057
layout = flowLayout
51-
border = JBEmptyBorder(0, 0, 0, 0)
5258
}
5359

5460
private fun initButton() {

0 commit comments

Comments
 (0)