Skip to content

Commit 5df34f3

Browse files
author
dengzi
committed
add plugin icon, persist config
1 parent 52b2dfa commit 5df34f3

5 files changed

Lines changed: 131 additions & 16 deletions

File tree

resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
<extensions defaultExtensionNs="com.intellij">
2626
<applicationService serviceImplementation="com.dengzii.plugin.template.ModuleTemplateConfigProvider"/>
27+
<applicationService serviceImplementation="com.dengzii.plugin.template.ConfigProvider"/>
2728
<fileTemplateGroup implementation="com.dengzii.plugin.template.template.FileTemplateFactory" order="first"/>
2829
<internalFileTemplate name="AndroidManifest" id="com.dengzii.plugin.template.ft.manifest"/>
2930
<applicationConfigurable groupId="tools" displayName="Template Module Generator"

resources/META-INF/pluginIcon.svg

Lines changed: 1 addition & 0 deletions
Loading

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

Lines changed: 115 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
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.utils.Logger
56
import 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+

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ open class FileTreeNode private constructor() {
3636

3737
// the origin name with original placeholder
3838
private var realName: String = ""
39-
private var parent: FileTreeNode? = null
39+
var parent: FileTreeNode? = null
4040

4141
companion object {
4242

@@ -69,8 +69,8 @@ open class FileTreeNode private constructor() {
6969
return this
7070
}
7171

72-
fun getParent(): FileTreeNode? {
73-
return parent
72+
fun getRealName(): String {
73+
return realName
7474
}
7575

7676
fun fileTemplate(fileName: String, template: String) {

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
package com.dengzii.plugin.template.ui;
22

33
import com.dengzii.plugin.template.Config;
4+
import com.dengzii.plugin.template.ConfigProvider;
45
import com.dengzii.plugin.template.ModuleTemplateConfigProvider;
56
import com.dengzii.plugin.template.model.Module;
67
import com.intellij.icons.AllIcons;
78
import com.intellij.openapi.options.SearchableConfigurable;
9+
import com.intellij.ui.DocumentAdapter;
810
import com.intellij.ui.components.JBList;
911
import com.intellij.ui.table.JBTable;
1012
import org.jetbrains.annotations.Nls;
1113
import org.jetbrains.annotations.NotNull;
1214
import org.jetbrains.annotations.Nullable;
1315

1416
import javax.swing.*;
17+
import javax.swing.event.DocumentEvent;
18+
import javax.swing.event.DocumentListener;
1519
import java.awt.*;
20+
import java.awt.event.ActionEvent;
21+
import java.awt.event.ActionListener;
1622
import java.awt.event.InputMethodEvent;
1723
import java.awt.event.InputMethodListener;
1824
import java.util.List;
@@ -52,8 +58,7 @@ private ConfigurePanel() {
5258

5359
@Override
5460
public void apply() {
55-
System.out.println("ConfigurePanel.apply");
56-
ModuleTemplateConfigProvider.Companion.getService().setModuleConfig(configs);
61+
ConfigProvider.Companion.getService().setModuleTemplate(Config.INSTANCE.loadModuleTemplates());
5762
}
5863

5964
@NotNull
@@ -97,9 +102,8 @@ private void onCopy() {
97102
}
98103

99104
private void loadConfig() {
100-
configs = ModuleTemplateConfigProvider.Companion.getService().getModuleConfig();
101-
configs = Config.INSTANCE.loadModuleTemplates();
102-
configs.get(0).setTemplateName("Tempalate 1" + "A");
105+
configs = ConfigProvider.Companion.getService().getModuleTemplate();
106+
ConfigProvider.Companion.getService().getModuleTemplate();
103107
model = new DefaultListModel<>();
104108
configs.forEach(module -> {
105109
model.addElement(module.getTemplateName());
@@ -120,17 +124,12 @@ private void initPanel() {
120124
currentConfig = configs.get(listTemplate.getSelectedIndex());
121125
tfName.setText(currentConfig.getTemplateName());
122126
});
123-
tfName.addInputMethodListener(new InputMethodListener() {
127+
tfName.getDocument().addDocumentListener(new DocumentAdapter() {
124128
@Override
125-
public void inputMethodTextChanged(InputMethodEvent event) {
129+
protected void textChanged(@NotNull DocumentEvent documentEvent) {
126130
if (currentConfig != null)
127131
currentConfig.setTemplateName(tfName.getText());
128132
}
129-
130-
@Override
131-
public void caretPositionChanged(InputMethodEvent event) {
132-
133-
}
134133
});
135134
loadConfig();
136135
}

0 commit comments

Comments
 (0)