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.utils.Logger
56import com.intellij.openapi.components.PersistentStateComponent
@@ -40,4 +41,117 @@ class ModuleTemplateConfigProvider : PersistentStateComponent<ModuleTemplateConf
4041 Logger .i(ModuleTemplateConfigProvider ::class .java.simpleName, " loadState" )
4142 XmlSerializerUtil .copyBean(p0, this )
4243 }
43- }
44+ }
45+
46+ @State(
47+ name = " ConfigProvider" ,
48+ storages = [Storage (" config1.xml" )]
49+ )
50+ class ConfigProvider : PersistentStateComponent <ConfigProvider > {
51+
52+ private var serialModuleTemplates = mutableListOf<SerialModule >()
53+
54+ companion object {
55+ fun getService (): ConfigProvider {
56+ return ServiceManager .getService(ConfigProvider ::class .java)
57+ }
58+ }
59+
60+ fun getModuleTemplate (): MutableList <Module > {
61+ val result = mutableListOf<Module >()
62+ serialModuleTemplates.forEach {
63+ result.add(deserializeModuleTemplate(it))
64+ }
65+ return result
66+ }
67+
68+ fun setModuleTemplate (module : List <Module >) {
69+ serialModuleTemplates.clear()
70+ module.forEach {
71+ serialModuleTemplates.add(serializeModuleTemplate(it))
72+ }
73+ }
74+
75+ fun addModuleTemplate (module : Module ) {
76+ serialModuleTemplates.add(serializeModuleTemplate(module))
77+ }
78+
79+ fun removeModuleTemplate (index : Int ) {
80+ serialModuleTemplates.removeAt(index)
81+ }
82+
83+ private fun serializeModuleTemplate (module : Module ): SerialModule {
84+ val serialTreeNode = serializeTreeNode(module.template)
85+ return SerialModule (serialTreeNode, module.name, module.packageName, module.language, module.templateName)
86+ }
87+
88+ private fun deserializeModuleTemplate (serialModule : SerialModule ): Module {
89+ val fileTreeNode = deserializeTreeNode(serialModule.template)
90+ return Module (fileTreeNode, serialModule.name, serialModule.packageName,
91+ serialModule.language, serialModule.templateName)
92+ }
93+
94+ private fun deserializeTreeNode (treeNode : SerialTreeNode ): FileTreeNode {
95+ val fileTreeNode = FileTreeNode {
96+ name = treeNode.name
97+ isDir = treeNode.isDir
98+ template = treeNode.template
99+ fileTemplates = treeNode.fileTemplate
100+ placeHolderMap = treeNode.placeholders
101+ }
102+ if (treeNode.isDir) {
103+ treeNode.children?.forEach {
104+ val node = deserializeTreeNode(it)
105+ node.parent = fileTreeNode
106+ fileTreeNode.children.add(node)
107+ }
108+ }
109+ return fileTreeNode
110+ }
111+
112+ private fun serializeTreeNode (treeNode : FileTreeNode ): SerialTreeNode {
113+ val serialTreeNode = SerialTreeNode (
114+ treeNode.getRealName(),
115+ treeNode.isDir,
116+ null ,
117+ treeNode.template,
118+ treeNode.placeHolderMap,
119+ treeNode.fileTemplates
120+ )
121+ if (treeNode.isDir && treeNode.children.isNotEmpty()) {
122+ serialTreeNode.children = mutableListOf ()
123+ treeNode.children.forEach {
124+ serialTreeNode.children?.add(serializeTreeNode(it))
125+ }
126+ }
127+ return serialTreeNode
128+ }
129+
130+ override fun getState (): ConfigProvider ? {
131+ Logger .i(ConfigProvider ::class .java.simpleName, " getState" )
132+ return this
133+ }
134+
135+ override fun loadState (p0 : ConfigProvider ) {
136+ Logger .i(ConfigProvider ::class .java.simpleName, " loadState" )
137+ XmlSerializerUtil .copyBean(p0, this )
138+ }
139+ }
140+
141+ class SerialModule (
142+ var template : SerialTreeNode ,
143+ var name : String ,
144+ var packageName : String ,
145+ var language : String ,
146+ var templateName : String
147+ )
148+
149+ class SerialTreeNode (
150+ var name : String ,
151+ var isDir : Boolean ,
152+ var children : MutableList <SerialTreeNode >? ,
153+ var template : String? ,
154+ var placeholders : MutableMap <String , String >? ,
155+ var fileTemplate : MutableMap <String , String >?
156+ )
157+
0 commit comments