@@ -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}
0 commit comments