Skip to content

Commit 9214282

Browse files
author
dengzi
committed
fix template persist problem
1 parent 33ea986 commit 9214282

6 files changed

Lines changed: 36 additions & 80 deletions

File tree

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

Lines changed: 12 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ object Config {
2929
Module.create(AucTemplate.EXPORT, "export", "com.example.feature", "Java", "Auc Export Module")
3030
)
3131

32+
3233
fun clear() {
3334
PropertiesComponent.getInstance().unsetValue(KEY_TEMPLATES)
3435
}
@@ -43,92 +44,35 @@ object Config {
4344
Logger.d(Config::class.java.simpleName, "loadModuleTemplates")
4445
arr.forEach {
4546
try {
46-
result.add(Serializer.deserializeModuleTemplate(it))
47+
val module = GSON.fromJson(it, Module::class.java)
48+
setParent(module.template)
49+
println(module.template.getTreeGraph())
50+
result.add(module)
4751
} catch (e: Exception) {
4852
clear()
4953
e.printStackTrace()
5054
return result
5155
}
5256
}
57+
result.addAll(DEFAULT_MODULE_TEMPLATE)
5358
return result
5459
}
5560

5661
fun saveModuleTemplates(templates: List<Module>) {
5762
val t = mutableListOf<String>()
5863
templates.forEach {
59-
t.add(Serializer.serializeModuleTemplate(it))
64+
t.add(GSON.toJson(it))
6065
Logger.d(Config::class.java.simpleName, "saveModuleTemplates ${t[t.lastIndex]}")
6166
}
6267
PropertiesComponent.getInstance().setValues(KEY_TEMPLATES, t.toTypedArray())
6368
}
6469

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
70+
private fun setParent(node: FileTreeNode) {
71+
node.children.forEach {
72+
it.parent = node
73+
if (it.isDir) {
74+
setParent(it)
8875
}
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
11576
}
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-
)
124-
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-
)
13377
}
13478
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ open class FileTreeNode private constructor() {
2323
}
2424

2525
var isDir = true
26-
val children by lazy { mutableListOf<FileTreeNode>() }
26+
var children = mutableListOf<FileTreeNode>()
2727
var placeHolderMap: MutableMap<String, String>? = null
2828
get() = field ?: parent?.placeHolderMap
2929

@@ -36,6 +36,7 @@ open class FileTreeNode private constructor() {
3636

3737
// the origin name with original placeholder
3838
private var realName: String = ""
39+
@Transient
3940
var parent: FileTreeNode? = null
4041

4142
companion object {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ object AucTemplate {
4343
}
4444

4545
val APP = (BASE.clone()) {
46-
fileTemplates = aucFileTemplates()
4746
placeholder(Placeholder.PACKAGE_NAME, "com.example")
4847
placeholder(Placeholder.MODULE_NAME, "app")
4948

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

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class ConfigurePanel extends JPanel implements SearchableConfigurable {
4242

4343
private List<Module> configs;
4444
private DefaultListModel<String> model;
45+
4546
private Module currentConfig;
4647

4748
private ConfigurePanel panel;
@@ -54,7 +55,7 @@ private ConfigurePanel() {
5455

5556
@Override
5657
public void apply() {
57-
if (panel != null){
58+
if (panel != null) {
5859
panel.apply();
5960
return;
6061
}
@@ -86,26 +87,32 @@ public String getDisplayName() {
8687
}
8788

8889
private void onAdd() {
89-
currentConfig = Module.Companion.create(AucTemplate.INSTANCE.getAPP(), "ModuleName", "com.example", "Java", "TemplateName");
90+
currentConfig = Module.Companion.create(AucTemplate.INSTANCE.getPKG(), "ModuleName", "com.example", "Java", "TemplateName");
9091
configs.add(currentConfig);
9192
model.addElement(currentConfig.getTemplateName());
9293
listTemplate.doLayout();
93-
listTemplate.updateUI();
9494
listTemplate.setSelectedIndex(configs.indexOf(currentConfig));
9595
}
9696

9797
private void onRemove() {
98-
if (listTemplate.getSelectedIndex() == -1) {
98+
if (getSelectedIndex() == -1) {
9999
return;
100100
}
101-
configs.remove(listTemplate.getSelectedIndex());
102-
model.remove(listTemplate.getSelectedIndex());
101+
int selectedIndex = getSelectedIndex();
102+
configs.remove(selectedIndex);
103+
model.remove(selectedIndex);
103104
listTemplate.doLayout();
104-
listTemplate.updateUI();
105105
}
106106

107107
private void onCopy() {
108+
if (getSelectedIndex() == -1) {
109+
return;
110+
}
111+
listTemplate.doLayout();
112+
}
108113

114+
private int getSelectedIndex() {
115+
return listTemplate.getSelectedIndex();
109116
}
110117

111118
private void loadConfig() {
@@ -127,8 +134,10 @@ private void initPanel() {
127134
btAdd.addActionListener(e -> onAdd());
128135
btRemove.addActionListener(e -> onRemove());
129136

137+
listTemplate.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
130138
listTemplate.addListSelectionListener(e -> {
131-
currentConfig = configs.get(listTemplate.getSelectedIndex());
139+
if (getSelectedIndex() == -1) return;
140+
currentConfig = configs.get(getSelectedIndex());
132141
tfName.setText(currentConfig.getTemplateName());
133142
});
134143
tfName.getDocument().addDocumentListener(new DocumentAdapter() {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ private void initDialog() {
158158

159159
private void initData() {
160160

161-
moduleTemplates = Config.INSTANCE.getDEFAULT_MODULE_TEMPLATE();
161+
moduleTemplates = Config.INSTANCE.loadModuleTemplates();
162162
List<String> temp = new ArrayList<>();
163163
moduleTemplates.forEach(i -> temp.add(i.getTemplateName()));
164164
cbModuleType.setModel(new DefaultComboBoxModel<>(temp.toArray()));

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ public void customizeCellRenderer(@NotNull JTree jTree, Object value, boolean b,
6161
if (node.isDir()) {
6262
setIcon(AllIcons.Nodes.Package);
6363
} else {
64-
String suffix = node.getName().substring(node.getName().lastIndexOf("."));
64+
String suffix = "";
65+
if (node.getName().contains(".")){
66+
suffix = node.getName().substring(node.getName().lastIndexOf("."));
67+
}
6568
setIcon(fileIconMap.getOrDefault(suffix, AllIcons.FileTypes.Text));
6669
}
6770
}

0 commit comments

Comments
 (0)