11package com.dengzii.plugin.template
22
3+ import com.dengzii.plugin.template.model.FileTreeNode
34import com.dengzii.plugin.template.model.Module
45import com.dengzii.plugin.template.template.AucTemplate
6+ import com.dengzii.plugin.template.utils.Logger
7+ import com.google.gson.Gson
58import 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}
0 commit comments