Skip to content

Commit 33ea986

Browse files
author
dengzi
committed
template persist
1 parent 5df34f3 commit 33ea986

5 files changed

Lines changed: 121 additions & 175 deletions

File tree

resources/META-INF/plugin.xml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,17 @@
1717
]]>
1818
</change-notes>
1919

20-
<idea-version since-build="182.711"/>
20+
<idea-version since-build="183.2153.8"/>
2121

2222
<depends>com.intellij.modules.java</depends>
2323
<depends>org.jetbrains.kotlin</depends>
2424

2525
<extensions defaultExtensionNs="com.intellij">
26-
<applicationService serviceImplementation="com.dengzii.plugin.template.ModuleTemplateConfigProvider"/>
27-
<applicationService serviceImplementation="com.dengzii.plugin.template.ConfigProvider"/>
2826
<fileTemplateGroup implementation="com.dengzii.plugin.template.template.FileTemplateFactory" order="first"/>
2927
<internalFileTemplate name="AndroidManifest" id="com.dengzii.plugin.template.ft.manifest"/>
3028
<applicationConfigurable groupId="tools" displayName="Template Module Generator"
31-
id="preferences.ModuleTemplateConfig"
32-
instance="com.dengzii.plugin.template.ui.ConfigurePanel"/>
29+
id="preferences.ModuleTemplateConfig"
30+
instance="com.dengzii.plugin.template.ui.ConfigurePanel"/>
3331
</extensions>
3432

3533
<actions>

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

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.dengzii.plugin.template
22

3+
import com.dengzii.plugin.template.model.FileTreeNode
34
import com.dengzii.plugin.template.model.Module
45
import com.dengzii.plugin.template.template.AucTemplate
6+
import com.dengzii.plugin.template.utils.Logger
7+
import com.google.gson.Gson
58
import com.intellij.ide.util.PropertiesComponent
69

710
/**
@@ -18,6 +21,7 @@ object Config {
1821

1922
private const val KEY_TEMPLATES = "KEY_TEMPLATES"
2023

24+
private val GSON = Gson()
2125
val DEFAULT_MODULE_TEMPLATE = listOf(
2226
Module.create(AucTemplate.MODULE, "feature", "com.example.feature", "Java", "Auc Feature Module"),
2327
Module.create(AucTemplate.APP, "app", "com.example.feature", "Java", "Auc App Module"),
@@ -30,10 +34,101 @@ object Config {
3034
}
3135

3236
fun loadModuleTemplates(): MutableList<Module> {
33-
return DEFAULT_MODULE_TEMPLATE.toMutableList()
37+
val result = mutableListOf<Module>()
38+
val arr = PropertiesComponent.getInstance().getValues(KEY_TEMPLATES)
39+
40+
if (arr.isNullOrEmpty()) {
41+
return result
42+
}
43+
Logger.d(Config::class.java.simpleName, "loadModuleTemplates")
44+
arr.forEach {
45+
try {
46+
result.add(Serializer.deserializeModuleTemplate(it))
47+
} catch (e: Exception) {
48+
clear()
49+
e.printStackTrace()
50+
return result
51+
}
52+
}
53+
return result
3454
}
3555

3656
fun saveModuleTemplates(templates: List<Module>) {
57+
val t = mutableListOf<String>()
58+
templates.forEach {
59+
t.add(Serializer.serializeModuleTemplate(it))
60+
Logger.d(Config::class.java.simpleName, "saveModuleTemplates ${t[t.lastIndex]}")
61+
}
62+
PropertiesComponent.getInstance().setValues(KEY_TEMPLATES, t.toTypedArray())
63+
}
64+
65+
66+
private object Serializer {
67+
68+
fun serializeModuleTemplate(module: Module): String {
69+
val serialTreeNode = serializeTreeNode(module.template)
70+
val result = SerialModule(serialTreeNode, module.name, module.packageName, module.language, module.templateName)
71+
return GSON.toJson(result)
72+
}
73+
74+
fun deserializeModuleTemplate(json: String): Module {
75+
val serialModule = GSON.fromJson(json, SerialModule::class.java)
76+
val fileTreeNode = deserializeTreeNode(serialModule.template)
77+
return Module.create(fileTreeNode, serialModule.name, serialModule.packageName,
78+
serialModule.language, serialModule.templateName)
79+
}
80+
81+
private fun deserializeTreeNode(treeNode: SerialTreeNode): FileTreeNode {
82+
val fileTreeNode = FileTreeNode {
83+
name = treeNode.name
84+
isDir = treeNode.isDir
85+
template = treeNode.template
86+
fileTemplates = treeNode.fileTemplate
87+
placeHolderMap = treeNode.placeholders
88+
}
89+
if (treeNode.isDir) {
90+
treeNode.children?.forEach {
91+
val node = deserializeTreeNode(it)
92+
node.parent = fileTreeNode
93+
fileTreeNode.children.add(node)
94+
}
95+
}
96+
return fileTreeNode
97+
}
98+
99+
private fun serializeTreeNode(treeNode: FileTreeNode): SerialTreeNode {
100+
val serialTreeNode = SerialTreeNode(
101+
treeNode.getRealName(),
102+
treeNode.isDir,
103+
null,
104+
treeNode.template,
105+
treeNode.placeHolderMap,
106+
treeNode.fileTemplates
107+
)
108+
if (treeNode.isDir && treeNode.children.isNotEmpty()) {
109+
serialTreeNode.children = mutableListOf()
110+
treeNode.children.forEach {
111+
serialTreeNode.children?.add(serializeTreeNode(it))
112+
}
113+
}
114+
return serialTreeNode
115+
}
116+
117+
private class SerialModule(
118+
var template: SerialTreeNode,
119+
var name: String,
120+
var packageName: String,
121+
var language: String,
122+
var templateName: String
123+
)
37124

125+
private class SerialTreeNode(
126+
var name: String,
127+
var isDir: Boolean,
128+
var children: MutableList<SerialTreeNode>?,
129+
var template: String?,
130+
var placeholders: MutableMap<String, String>?,
131+
var fileTemplate: MutableMap<String, String>?
132+
)
38133
}
39134
}

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

Lines changed: 0 additions & 157 deletions
This file was deleted.

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

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

3+
import com.dengzii.plugin.template.utils.Logger
4+
35
class Module(
46
var template: FileTreeNode,
57
var name: String,
@@ -15,6 +17,7 @@ class Module(
1517
companion object {
1618
fun create(template: FileTreeNode, moduleName: String,
1719
packageName: String, language: String, templateName: String): Module {
20+
Logger.i(Module::class.java.simpleName, "create module. $template moduleName=$moduleName, templateName=$templateName")
1821
return Module(template, moduleName, packageName, language, templateName)
1922
}
2023

0 commit comments

Comments
 (0)