Skip to content

Commit 47751ad

Browse files
committed
Add duplicate button
1 parent 8cbf5b9 commit 47751ad

3 files changed

Lines changed: 126 additions & 74 deletions

File tree

src/main/java/com/junichi11/netbeans/modules/github/issues/issue/ui/GitHubIssuePanel.java

Lines changed: 98 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public class GitHubIssuePanel extends JPanel {
122122
// manage templates options
123123
private static final String TEMPLATES_ADD_OPTION = Bundle.GitHubIssuePanel_manage_templates_add_option();
124124
private static final String TEMPLATES_EDIT_OPTION = Bundle.GitHubIssuePanel_manage_templates_edit_option();
125+
private static final String TEMPLATES_DUPLICATE_OPTION = Bundle.GitHubIssuePanel_manage_templates_duplicate_option();
125126
private static final String TEMPLATES_REMOVE_OPTION = Bundle.GitHubIssuePanel_manage_templates_remove_option();
126127
private static final String TEMPLATES_CLOSE_OPTION = Bundle.GitHubIssuePanel_manage_templates_close_option();
127128

@@ -1053,6 +1054,7 @@ private void insertTemplateButtonActionPerformed(java.awt.event.ActionEvent evt)
10531054
"GitHubIssuePanel.manage.templates.add.option=Add",
10541055
"GitHubIssuePanel.manage.templates.remove.option=Remove",
10551056
"GitHubIssuePanel.manage.templates.edit.option=Edit",
1057+
"GitHubIssuePanel.manage.templates.duplicate.option=Duplicate",
10561058
"GitHubIssuePanel.manage.templates.close.option=Close"
10571059
})
10581060
private void manageTemplatesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_manageTemplatesButtonActionPerformed
@@ -1071,6 +1073,7 @@ private void manageTemplatesButtonActionPerformed(java.awt.event.ActionEvent evt
10711073
descriptor.setOptions(new String[]{
10721074
TEMPLATES_ADD_OPTION,
10731075
TEMPLATES_EDIT_OPTION,
1076+
TEMPLATES_DUPLICATE_OPTION,
10741077
TEMPLATES_REMOVE_OPTION,
10751078
TEMPLATES_CLOSE_OPTION
10761079
});
@@ -1162,95 +1165,130 @@ public void actionPerformed(ActionEvent e) {
11621165
add();
11631166
} else if (value == TEMPLATES_EDIT_OPTION) {
11641167
edit();
1168+
} else if (value == TEMPLATES_DUPLICATE_OPTION) {
1169+
duplicate();
11651170
} else if (value == TEMPLATES_REMOVE_OPTION) {
11661171
remove();
11671172
}
11681173
}
11691174

1170-
@NbBundle.Messages({
1171-
"ManageTemplateButtonListener.add.title=Add Template",
1172-
"ManageTemplateButtonListener.add.invalid.empty=Name must be set.",
1173-
"ManageTemplateButtonListener.add.invalid.existing=It already exisits."
1174-
})
1175+
@NbBundle.Messages("ManageTemplateButtonListener.add.title=Add Template")
11751176
private void add() {
1176-
// show dialog
1177-
final TemplatePanel templatePanel = new TemplatePanel();
1178-
final NotifyDescriptor.Confirmation notify = new NotifyDescriptor.Confirmation(
1179-
templatePanel,
1180-
Bundle.ManageTemplateButtonListener_add_title(),
1181-
NotifyDescriptor.OK_CANCEL_OPTION,
1182-
NotifyDescriptor.PLAIN_MESSAGE);
1183-
final List<String> existingNames = new ArrayList<>(Arrays.asList(GitHubIssuesConfig.getInstance().getTemplateNames()));
1184-
ChangeListener listener = new ChangeListener() {
1185-
@Override
1186-
public void stateChanged(ChangeEvent e) {
1187-
String templateName = templatePanel.getTemplateName();
1188-
if ((templateName == null || templateName.isEmpty())) {
1189-
notify.setValid(false);
1190-
templatePanel.setErrorMessage(Bundle.ManageTemplateButtonListener_add_invalid_empty());
1191-
return;
1192-
}
1193-
if (existingNames.contains(templateName)) {
1194-
notify.setValid(false);
1195-
templatePanel.setErrorMessage(Bundle.ManageTemplateButtonListener_add_invalid_existing());
1196-
return;
1197-
}
1198-
1199-
// everything ok
1200-
notify.setValid(true);
1201-
templatePanel.setErrorMessage(" "); // NOI18N
1202-
}
1203-
};
1204-
templatePanel.addChangeListener(listener);
1205-
templatePanel.fireChange();
1206-
if (DialogDisplayer.getDefault().notify(notify) == NotifyDescriptor.OK_OPTION) {
1207-
String name = templatePanel.getTemplateName();
1208-
if (name != null && !name.isEmpty()) {
1209-
String template = templatePanel.getTemplate();
1210-
GitHubIssuesConfig.getInstance().setTemplate(name, template);
1211-
manageTemplatesPanel.resetTemplateNameList();
1212-
}
1213-
}
1214-
templatePanel.removeChangeListener(listener);
1177+
showDialog(TEMPLATES_ADD_OPTION, Bundle.ManageTemplateButtonListener_add_title());
12151178
}
12161179

12171180
@NbBundle.Messages("ManageTemplateButtonListener.edit.title=Edit Template")
12181181
private void edit() {
1182+
showDialog(TEMPLATES_EDIT_OPTION, Bundle.ManageTemplateButtonListener_edit_title());
1183+
}
1184+
1185+
@NbBundle.Messages("ManageTemplateButtonListener.duplicate.title=Duplicate Template")
1186+
private void duplicate() {
1187+
showDialog(TEMPLATES_DUPLICATE_OPTION, Bundle.ManageTemplateButtonListener_duplicate_title());
1188+
}
1189+
1190+
@NbBundle.Messages({
1191+
"# {0} - name",
1192+
"ManageTemplateButtonListener.remove.message=Did you really want to remove {0}?"
1193+
})
1194+
private void remove() {
12191195
String selectedTemplateName = manageTemplatesPanel.getSelectedTemplateName();
12201196
if (selectedTemplateName == null || selectedTemplateName.isEmpty()) {
12211197
return;
12221198
}
1199+
if (UiUtils.showQuestionDialog(Bundle.ManageTemplateButtonListener_remove_message(selectedTemplateName))) {
1200+
GitHubIssuesConfig.getInstance().removeTemplate(selectedTemplateName);
1201+
manageTemplatesPanel.resetTemplateNameList();
1202+
}
1203+
}
12231204

1224-
// show dialog
1205+
private void showDialog(String option, String title) {
1206+
if (!option.equals(TEMPLATES_ADD_OPTION)
1207+
&& !option.equals(TEMPLATES_EDIT_OPTION)
1208+
&& !option.equals(TEMPLATES_DUPLICATE_OPTION)) {
1209+
return;
1210+
}
1211+
1212+
// create panel
12251213
final TemplatePanel templatePanel = new TemplatePanel();
1226-
templatePanel.setTemplateNameEditable(false);
1227-
templatePanel.setTemplateName(selectedTemplateName);
1228-
templatePanel.setTemplate(GitHubIssuesConfig.getInstance().getTemplate(selectedTemplateName));
1214+
String selectedTemplateName = manageTemplatesPanel.getSelectedTemplateName();
1215+
if (!option.equals(TEMPLATES_ADD_OPTION)) {
1216+
if (selectedTemplateName == null || selectedTemplateName.isEmpty()) {
1217+
return;
1218+
}
1219+
templatePanel.setTemplateNameEditable(!option.equals(TEMPLATES_EDIT_OPTION));
1220+
templatePanel.setTemplateName(selectedTemplateName);
1221+
templatePanel.setTemplate(GitHubIssuesConfig.getInstance().getTemplate(selectedTemplateName));
1222+
}
12291223
final NotifyDescriptor.Confirmation notify = new NotifyDescriptor.Confirmation(
12301224
templatePanel,
1231-
Bundle.ManageTemplateButtonListener_edit_title(),
1225+
title,
12321226
NotifyDescriptor.OK_CANCEL_OPTION,
12331227
NotifyDescriptor.PLAIN_MESSAGE);
1228+
1229+
// add listener
1230+
ChangeListener listener = null;
1231+
if (option.equals(TEMPLATES_ADD_OPTION) || option.equals(TEMPLATES_DUPLICATE_OPTION)) {
1232+
final List<String> existingNames = new ArrayList<>(Arrays.asList(GitHubIssuesConfig.getInstance().getTemplateNames()));
1233+
listener = new TemplatePanelChangeListener(templatePanel, notify, existingNames);
1234+
templatePanel.addChangeListener(listener);
1235+
templatePanel.fireChange();
1236+
}
1237+
1238+
// show dialog
12341239
if (DialogDisplayer.getDefault().notify(notify) == NotifyDescriptor.OK_OPTION) {
1235-
String template = templatePanel.getTemplate();
1236-
GitHubIssuesConfig.getInstance().setTemplate(selectedTemplateName, template);
1237-
manageTemplatesPanel.setSelectedTemplateName(selectedTemplateName);
1240+
String templateName = templatePanel.getTemplateName();
1241+
if (templateName != null && !templateName.isEmpty()) {
1242+
String template = templatePanel.getTemplate();
1243+
GitHubIssuesConfig.getInstance().setTemplate(templateName, template);
1244+
if (option.equals(TEMPLATES_EDIT_OPTION)) {
1245+
manageTemplatesPanel.setSelectedTemplateName(selectedTemplateName);
1246+
} else {
1247+
manageTemplatesPanel.resetTemplateNameList();
1248+
}
1249+
}
1250+
}
1251+
1252+
if (listener != null) {
1253+
templatePanel.removeChangeListener(listener);
12381254
}
12391255
}
1256+
}
12401257

1258+
private static class TemplatePanelChangeListener implements ChangeListener {
1259+
1260+
private final TemplatePanel templatePanel;
1261+
private final NotifyDescriptor.Confirmation notify;
1262+
private final List<String> existingNames;
1263+
1264+
public TemplatePanelChangeListener(TemplatePanel templatePanel, NotifyDescriptor.Confirmation notify, List<String> existingNames) {
1265+
this.templatePanel = templatePanel;
1266+
this.notify = notify;
1267+
this.existingNames = existingNames;
1268+
}
1269+
1270+
@Override
12411271
@NbBundle.Messages({
1242-
"# {0} - name",
1243-
"ManageTemplateButtonListener.remove.message=Did you really want to remove {0}?"
1272+
"TemplatePanelChangeListener.invalid.empty=Name must be set.",
1273+
"TemplatePanelChangeListener.invalid.existing=It already exisits."
12441274
})
1245-
private void remove() {
1246-
String selectedTemplateName = manageTemplatesPanel.getSelectedTemplateName();
1247-
if (selectedTemplateName == null || selectedTemplateName.isEmpty()) {
1275+
public void stateChanged(ChangeEvent e) {
1276+
// validate
1277+
String templateName = templatePanel.getTemplateName();
1278+
if ((templateName == null || templateName.isEmpty())) {
1279+
notify.setValid(false);
1280+
templatePanel.setErrorMessage(Bundle.TemplatePanelChangeListener_invalid_empty());
12481281
return;
12491282
}
1250-
if (UiUtils.showQuestionDialog(Bundle.ManageTemplateButtonListener_remove_message(selectedTemplateName))) {
1251-
GitHubIssuesConfig.getInstance().removeTemplate(selectedTemplateName);
1252-
manageTemplatesPanel.resetTemplateNameList();
1283+
if (existingNames.contains(templateName)) {
1284+
notify.setValid(false);
1285+
templatePanel.setErrorMessage(Bundle.TemplatePanelChangeListener_invalid_existing());
1286+
return;
12531287
}
1288+
1289+
// everything ok
1290+
notify.setValid(true);
1291+
templatePanel.setErrorMessage(" "); // NOI18N
12541292
}
12551293
}
12561294
}

src/main/java/com/junichi11/netbeans/modules/github/issues/issue/ui/ManageTemplatesPanel.form

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,24 @@
1717
<DimensionLayout dim="0">
1818
<Group type="103" groupAlignment="0" attributes="0">
1919
<Group type="102" alignment="0" attributes="0">
20-
<Component id="jScrollPane1" min="-2" max="-2" attributes="0"/>
21-
<EmptySpace max="-2" attributes="0"/>
22-
<Component id="templateScrollPane" pref="479" max="32767" attributes="0"/>
20+
<EmptySpace min="-2" max="-2" attributes="0"/>
21+
<Component id="templateNameScrollPane" max="32767" attributes="0"/>
22+
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
23+
<Component id="templateScrollPane" pref="400" max="32767" attributes="0"/>
24+
<EmptySpace min="-2" max="-2" attributes="0"/>
2325
</Group>
2426
</Group>
2527
</DimensionLayout>
2628
<DimensionLayout dim="1">
2729
<Group type="103" groupAlignment="0" attributes="0">
28-
<Component id="jScrollPane1" pref="395" max="32767" attributes="0"/>
29-
<Component id="templateScrollPane" alignment="0" max="32767" attributes="0"/>
30+
<Group type="102" alignment="0" attributes="0">
31+
<EmptySpace min="-2" max="-2" attributes="0"/>
32+
<Group type="103" groupAlignment="0" attributes="0">
33+
<Component id="templateScrollPane" max="32767" attributes="0"/>
34+
<Component id="templateNameScrollPane" pref="276" max="32767" attributes="0"/>
35+
</Group>
36+
<EmptySpace min="-2" max="-2" attributes="0"/>
37+
</Group>
3038
</Group>
3139
</DimensionLayout>
3240
</Layout>
@@ -45,7 +53,7 @@
4553
</Component>
4654
</SubComponents>
4755
</Container>
48-
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
56+
<Container class="javax.swing.JScrollPane" name="templateNameScrollPane">
4957
<AuxValues>
5058
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
5159
</AuxValues>

src/main/java/com/junichi11/netbeans/modules/github/issues/issue/ui/ManageTemplatesPanel.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,34 +115,40 @@ private void initComponents() {
115115

116116
templateScrollPane = new javax.swing.JScrollPane();
117117
templateEditorPane = new javax.swing.JEditorPane();
118-
jScrollPane1 = new javax.swing.JScrollPane();
118+
templateNameScrollPane = new javax.swing.JScrollPane();
119119
templateNameList = new javax.swing.JList<String>();
120120

121121
templateEditorPane.setEditable(false);
122122
templateScrollPane.setViewportView(templateEditorPane);
123123

124-
jScrollPane1.setViewportView(templateNameList);
124+
templateNameScrollPane.setViewportView(templateNameList);
125125

126126
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
127127
this.setLayout(layout);
128128
layout.setHorizontalGroup(
129129
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
130130
.addGroup(layout.createSequentialGroup()
131-
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
132-
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
133-
.addComponent(templateScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 479, Short.MAX_VALUE))
131+
.addContainerGap()
132+
.addComponent(templateNameScrollPane)
133+
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
134+
.addComponent(templateScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
135+
.addContainerGap())
134136
);
135137
layout.setVerticalGroup(
136138
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
137-
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
138-
.addComponent(templateScrollPane)
139+
.addGroup(layout.createSequentialGroup()
140+
.addContainerGap()
141+
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
142+
.addComponent(templateScrollPane)
143+
.addComponent(templateNameScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE))
144+
.addContainerGap())
139145
);
140146
}// </editor-fold>//GEN-END:initComponents
141147

142148
// Variables declaration - do not modify//GEN-BEGIN:variables
143-
private javax.swing.JScrollPane jScrollPane1;
144149
private javax.swing.JEditorPane templateEditorPane;
145150
private javax.swing.JList<String> templateNameList;
151+
private javax.swing.JScrollPane templateNameScrollPane;
146152
private javax.swing.JScrollPane templateScrollPane;
147153
// End of variables declaration//GEN-END:variables
148154
}

0 commit comments

Comments
 (0)