Skip to content

Commit 767cb3c

Browse files
author
fulin
committed
feat(settings): settings功能补全
- settings type 菜单增删改
1 parent 41e5962 commit 767cb3c

File tree

9 files changed

+144
-48
lines changed

9 files changed

+144
-48
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ repositories {
1919

2020
dependencies {
2121
testCompile group: 'junit', name: 'junit', version: '4.12'
22+
compile group: 'uk.com.robust-it', name: 'cloning', version: '1.9.12'
23+
2224
}
2325

2426
// See https://github.com/JetBrains/gradle-intellij-plugin/
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.fulinlin.pojo;
2+
3+
import org.apache.commons.lang.builder.EqualsBuilder;
4+
import org.apache.commons.lang.builder.HashCodeBuilder;
5+
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
6+
7+
public abstract class DomainObject {
8+
9+
@Override
10+
public boolean equals(Object obj) {
11+
return EqualsBuilder.reflectionEquals(this, obj, false);
12+
}
13+
14+
@Override
15+
public String toString() {
16+
return ReflectionToStringBuilder.toString(this);
17+
}
18+
19+
@Override
20+
public int hashCode() {
21+
return HashCodeBuilder.reflectionHashCode(this);
22+
}
23+
}

src/main/java/com/fulinlin/pojo/TypeAlias.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* @author: fulin
66
* @create: 2019-12-06 21:11
77
**/
8-
public class TypeAlias {
8+
public class TypeAlias extends DomainObject {
99
public String title;
1010
public String description;
1111

src/main/java/com/fulinlin/setting/ui/AliasEditor.form

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,33 @@
88
<properties/>
99
<border type="none"/>
1010
<children>
11-
<grid id="c35ab" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
11+
<grid id="c35ab" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
1212
<margin top="0" left="0" bottom="0" right="0"/>
1313
<constraints>
1414
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
1515
</constraints>
1616
<properties/>
1717
<border type="none"/>
1818
<children>
19-
<component id="f72e9" class="javax.swing.JTextField" binding="fromField">
19+
<component id="f72e9" class="javax.swing.JTextField" binding="titleField">
2020
<constraints>
2121
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
2222
<preferred-size width="100" height="-1"/>
2323
</grid>
2424
</constraints>
2525
<properties/>
2626
</component>
27+
<component id="7611f" class="javax.swing.JTextField" binding="descriptionField">
28+
<constraints>
29+
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
30+
<preferred-size width="150" height="-1"/>
31+
</grid>
32+
</constraints>
33+
<properties/>
34+
</component>
2735
</children>
2836
</grid>
29-
<grid id="142e8" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
37+
<grid id="142e8" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
3038
<margin top="0" left="0" bottom="0" right="0"/>
3139
<constraints>
3240
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="0" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -39,7 +47,15 @@
3947
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
4048
</constraints>
4149
<properties>
42-
<text value="From:"/>
50+
<text value="title"/>
51+
</properties>
52+
</component>
53+
<component id="d8cf9" class="javax.swing.JLabel">
54+
<constraints>
55+
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
56+
</constraints>
57+
<properties>
58+
<text value="description"/>
4359
</properties>
4460
</component>
4561
</children>
Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,40 @@
11
package com.fulinlin.setting.ui;
22

3+
import com.intellij.openapi.ui.DialogWrapper;
4+
import org.jetbrains.annotations.Nullable;
5+
36
import javax.swing.*;
47

5-
public class AliasEditor {
6-
private JTextField fromField;
8+
public class AliasEditor extends DialogWrapper {
79
private JPanel myPanel;
8-
private final Validator myValidator;
10+
private JTextField titleField;
11+
private JTextField descriptionField;
12+
913

1014
public interface Validator {
1115
boolean isOK(String name, String value);
1216
}
1317

14-
public AliasEditor(String title, String macroName, String value, Validator validator) {
15-
myValidator = validator;
16-
fromField.setText(macroName);
18+
public AliasEditor(String title, String macroName, String value) {
19+
super(true);
20+
setTitle(title);
21+
titleField.setText(macroName);
22+
descriptionField.setText(value);
23+
init();
24+
}
25+
26+
public String getTitle() {
27+
return titleField.getText().trim();
1728
}
1829

30+
public String getDescription() {
31+
return descriptionField.getText().trim();
32+
}
33+
34+
@Nullable
35+
@Override
36+
protected JComponent createCenterPanel() {
37+
return myPanel;
38+
}
1939

2040
}

src/main/java/com/fulinlin/setting/ui/AliasTable.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ public String getAliasValueAt(int row) {
5757

5858

5959
public void addAlias() {
60-
final AliasEditor macroEditor = new AliasEditor("Add alias", "", "", new EditValidator());
61-
// if (macroEditor.showAndGet()) {
62-
// final String name = macroEditor.getFrom();
63-
// myAliases.add(Alias.of(name, macroEditor.getTo()));
64-
// final int index = indexOfAliasWithName(name);
65-
// LOG.assertTrue(index >= 0);
66-
// myTableModel.fireTableDataChanged();
67-
// setRowSelectionInterval(index, index);
68-
// }
60+
final AliasEditor macroEditor = new AliasEditor("Add Type", "", "");
61+
if (macroEditor.showAndGet()) {
62+
final String name = macroEditor.getTitle();
63+
typeAliases.add(new TypeAlias(macroEditor.getTitle(), macroEditor.getDescription()));
64+
final int index = indexOfAliasWithName(name);
65+
log.assertTrue(index >= 0);
66+
myTableModel.fireTableDataChanged();
67+
setRowSelectionInterval(index, index);
68+
}
6969
}
7070

7171
private boolean isValidRow(int selectedRow) {
@@ -114,7 +114,7 @@ public void removeSelectedAliases() {
114114

115115

116116
public void commit(GitCommitMessageHelperSettings settings) {
117-
settings.getDateSettings().setTypeAliases(new ArrayList<>(typeAliases));
117+
settings.getDateSettings().setTypeAliases(new LinkedList<>(typeAliases));
118118
}
119119

120120
public void resetDefaultAliases() {
@@ -147,18 +147,18 @@ public boolean editAlias() {
147147
return false;
148148
}
149149
final int selectedRow = getSelectedRow();
150-
final TypeAlias alias = typeAliases.get(selectedRow);
151-
final AliasEditor editor = new AliasEditor("Edit Alias", alias.getTitle(), alias.getDescription(), new EditValidator());
152-
/*if (editor.showAndGet()) {
153-
alias.setFrom(editor.getFrom());
154-
alias.setTo(editor.getTo());
150+
final TypeAlias typeAlias = typeAliases.get(selectedRow);
151+
final AliasEditor editor = new AliasEditor("Edit Type", typeAlias.getTitle(), typeAlias.getDescription());
152+
if (editor.showAndGet()) {
153+
typeAlias.setTitle(editor.getTitle());
154+
typeAlias.setDescription(editor.getDescription());
155155
myTableModel.fireTableDataChanged();
156-
}*/
156+
}
157157
return true;
158158
}
159159

160160
public boolean isModified(GitCommitMessageHelperSettings settings) {
161-
final ArrayList<TypeAlias> aliases = new ArrayList<>();
161+
final List<TypeAlias> aliases = new LinkedList<>();
162162
obtainAliases(aliases, settings);
163163
return !aliases.equals(typeAliases);
164164
}

src/main/java/com/fulinlin/setting/ui/TemplateEditPane.java

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
package com.fulinlin.setting.ui;
22

33
import com.fulinlin.pojo.TemplateLanguage;
4-
import com.fulinlin.pojo.TypeAlias;
54
import com.fulinlin.storage.GitCommitMessageHelperSettings;
65
import com.intellij.icons.AllIcons;
76
import com.intellij.openapi.actionSystem.AnActionEvent;
87
import com.intellij.openapi.util.text.StringUtil;
98
import com.intellij.ui.AnActionButton;
10-
import com.intellij.ui.AnActionButtonRunnable;
119
import com.intellij.ui.DoubleClickListener;
1210
import com.intellij.ui.ToolbarDecorator;
1311
import org.jetbrains.annotations.NotNull;
1412

1513
import javax.swing.*;
1614
import java.awt.*;
1715
import java.awt.event.MouseEvent;
18-
import java.util.LinkedList;
19-
import java.util.List;
16+
import java.util.Optional;
2017

2118

2219
public class TemplateEditPane {
@@ -26,19 +23,17 @@ public class TemplateEditPane {
2623
private JPanel typeEditPenel;
2724

2825
//my attribute
29-
private String template;
30-
private List<TypeAlias> typeAliases;
26+
protected GitCommitMessageHelperSettings settings;
3127
private TemplateEdit templateEdit;
3228
private AliasTable aliasTable;
3329

3430

3531
public TemplateEditPane(GitCommitMessageHelperSettings settings) {
36-
this.typeAliases = new LinkedList<>(settings.getDateSettings().getTypeAliases());
37-
this.template = StringUtil.isEmpty(settings.getDateSettings().getTemplate()) ? "" : settings.getDateSettings().getTemplate();
38-
32+
settings = settings.clone();
33+
String template = Optional.of(settings.getDateSettings().getTemplate()).orElse("");
3934
templateEdit = new TemplateEdit(
4035
templateEditPenel,
41-
this.template,
36+
template,
4237
this::getTemplateLanguage,
4338
150);
4439
aliasTable = new AliasTable();
@@ -62,10 +57,35 @@ protected boolean onDoubleClick(MouseEvent e) {
6257
return aliasTable.editAlias();
6358
}
6459
}.installOn(aliasTable);
60+
//init
61+
}
62+
63+
public GitCommitMessageHelperSettings getSettings() {
64+
aliasTable.commit(settings);
65+
return settings;
66+
}
6567

68+
public void importFrom(GitCommitMessageHelperSettings settings) {
69+
this.settings = settings.clone();
70+
aliasTable.reset(settings);
71+
}
72+
73+
public boolean isSettingsModified(GitCommitMessageHelperSettings settings) {
74+
if (aliasTable.isModified(settings)) return true;
75+
return !this.settings.equals(settings) || isModified(settings);
76+
}
6677

78+
public boolean isModified(GitCommitMessageHelperSettings data) {
79+
if (!StringUtil.equals(settings.getDateSettings().getTemplate(), data.getDateSettings().getTemplate())) {
80+
return true;
81+
}
82+
if (settings.getDateSettings().getTypeAliases() != data.getDateSettings().getTypeAliases()) {
83+
return true;
84+
}
85+
return false;
6786
}
6887

88+
6989
public JPanel getMainPenel() {
7090
return mainPenel;
7191
}

src/main/java/com/fulinlin/setting/ui/TemplateEditPaneConfigurable.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ public JComponent createComponent() {
4242
return templateEditPane.getMainPenel();
4343
}
4444

45-
@Override
46-
public boolean isModified() {
47-
return false;
48-
}
49-
5045

5146
@Nullable
5247
@Override
@@ -61,8 +56,20 @@ public String getDisplayName() {
6156
}
6257

6358

59+
public void reset() {
60+
if (templateEditPane != null) {
61+
templateEditPane.importFrom(settings);
62+
}
63+
}
64+
6465
@Override
65-
public void apply() throws ConfigurationException {
66+
public boolean isModified() {
67+
return templateEditPane != null && templateEditPane.isSettingsModified(settings);
68+
}
6669

70+
71+
@Override
72+
public void apply() {
73+
settings.setDateSettings(templateEditPane.getSettings().getDateSettings());
6774
}
6875
}

src/main/java/com/fulinlin/storage/GitCommitMessageHelperSettings.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.intellij.openapi.diagnostic.Logger;
99
import com.intellij.openapi.util.io.FileUtil;
1010
import com.intellij.util.xmlb.XmlSerializerUtil;
11+
import com.rits.cloning.Cloner;
1112
import org.jetbrains.annotations.NotNull;
1213
import org.jetbrains.annotations.Nullable;
1314

@@ -75,12 +76,10 @@ public DataSettings getDateSettings() {
7576
if (dataSettings == null) {
7677
loadDefaultSettings();
7778
}
78-
DataSettings newDateSettings = new DataSettings();
79-
newDateSettings.setTemplate(dataSettings.getTemplate());
80-
newDateSettings.setTypeAliases(dataSettings.getTypeAliases());
81-
return newDateSettings;
79+
return dataSettings;
8280
}
8381

82+
8483
public void setDateSettings(DataSettings dateSettings) {
8584
this.dataSettings = dateSettings;
8685
}
@@ -93,4 +92,13 @@ public void updateTemplate(String template) {
9392
public void updateTypeMap(List<TypeAlias> typeAliases) {
9493
dataSettings.setTypeAliases(typeAliases);
9594
}
95+
96+
97+
@Override
98+
public GitCommitMessageHelperSettings clone() {
99+
Cloner cloner = new Cloner();
100+
cloner.nullInsteadOfClone();
101+
return cloner.deepClone(this);
102+
}
103+
96104
}

0 commit comments

Comments
 (0)