5353import com .junichi11 .netbeans .modules .github .issues .issue .GitHubIssueSupport ;
5454import com .junichi11 .netbeans .modules .github .issues .repository .GitHubRepository ;
5555import com .junichi11 .netbeans .modules .github .issues .ui .AttributesListCellRenderer ;
56+ import com .junichi11 .netbeans .modules .github .issues .utils .UiUtils ;
5657import java .awt .Color ;
5758import java .awt .Font ;
5859import java .beans .PropertyChangeListener ;
5960import java .text .DateFormat ;
6061import java .text .SimpleDateFormat ;
6162import java .util .ArrayList ;
63+ import java .util .Collections ;
64+ import java .util .Enumeration ;
6265import java .util .List ;
6366import java .util .logging .Logger ;
6467import javax .swing .DefaultComboBoxModel ;
@@ -150,6 +153,13 @@ public GitHubIssue getIssue() {
150153 return gitHubIssue ;
151154 }
152155
156+ private GitHubRepository getRepository () {
157+ if (gitHubIssue == null ) {
158+ return null ;
159+ }
160+ return gitHubIssue .getRepository ();
161+ }
162+
153163 public void update () {
154164 // header
155165 setHeader ();
@@ -182,13 +192,7 @@ public void update() {
182192 assigneeComboBoxModel .addElement (collaborator );
183193 }
184194
185- // label
186- List <Label > labels = cache .getLabels ();
187- labelsListModel .removeAllElements ();
188- labelsListModel .addElement (null );
189- for (Label label : labels ) {
190- labelsListModel .addElement (label );
191- }
195+ updateLables (cache , false );
192196 }
193197
194198 // existing issue
@@ -258,6 +262,15 @@ public void update() {
258262 fireChange ();
259263 }
260264
265+ private void updateLables (GitHubCache cache , boolean force ) {
266+ List <Label > labels = cache .getLabels (force );
267+ labelsListModel .removeAllElements ();
268+ labelsListModel .addElement (null );
269+ for (Label label : labels ) {
270+ labelsListModel .addElement (label );
271+ }
272+ }
273+
261274 public void loadComments () {
262275 commentsPanel .loadComments ();
263276 fireChange ();
@@ -318,6 +331,7 @@ private void setCollaboratorsComponentsVisible(boolean isVisible) {
318331 milestoneComboBox .setVisible (isVisible );
319332 assigneeLabel .setVisible (isVisible );
320333 assigneeComboBox .setVisible (isVisible );
334+ addLabelButton .setVisible (isVisible );
321335 }
322336
323337 @ NbBundle .Messages ({
@@ -528,6 +542,7 @@ private void initComponents() {
528542 headerShowInBrowserLinkButton = new org .netbeans .modules .bugtracking .commons .LinkButton ();
529543 jSeparator1 = new javax .swing .JSeparator ();
530544 refreshLinkButton = new org .netbeans .modules .bugtracking .commons .LinkButton ();
545+ addLabelButton = new javax .swing .JButton ();
531546 mainScrollPane = new javax .swing .JScrollPane ();
532547 mainPanel = new javax .swing .JPanel ();
533548 assigneeLabel = new javax .swing .JLabel ();
@@ -584,6 +599,13 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
584599 }
585600 });
586601
602+ org .openide .awt .Mnemonics .setLocalizedText (addLabelButton , org .openide .util .NbBundle .getMessage (GitHubIssuePanel .class , "GitHubIssuePanel.addLabelButton.text" )); // NOI18N
603+ addLabelButton .addActionListener (new java .awt .event .ActionListener () {
604+ public void actionPerformed (java .awt .event .ActionEvent evt ) {
605+ addLabelButtonActionPerformed (evt );
606+ }
607+ });
608+
587609 javax .swing .GroupLayout headerPanelLayout = new javax .swing .GroupLayout (headerPanel );
588610 headerPanel .setLayout (headerPanelLayout );
589611 headerPanelLayout .setHorizontalGroup (
@@ -594,6 +616,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
594616 .addGroup (javax .swing .GroupLayout .Alignment .TRAILING , headerPanelLayout .createSequentialGroup ()
595617 .addComponent (headerErrorLabel )
596618 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED , javax .swing .GroupLayout .DEFAULT_SIZE , Short .MAX_VALUE )
619+ .addComponent (addLabelButton )
620+ .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
597621 .addComponent (headerSubmitButton ))
598622 .addGroup (headerPanelLayout .createSequentialGroup ()
599623 .addComponent (headerStatusLabel )
@@ -642,7 +666,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
642666 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
643667 .addGroup (headerPanelLayout .createParallelGroup (javax .swing .GroupLayout .Alignment .BASELINE )
644668 .addComponent (headerSubmitButton )
645- .addComponent (headerErrorLabel )))
669+ .addComponent (headerErrorLabel )
670+ .addComponent (addLabelButton )))
646671 );
647672
648673 mainPanel .setAutoscrolls (true );
@@ -797,7 +822,30 @@ public void run() {
797822
798823 }//GEN-LAST:event_refreshLinkButtonActionPerformed
799824
825+ @ NbBundle .Messages ({
826+ "GitHubIssuePanel.message.addLabel.error=Can't add a label."
827+ })
828+ private void addLabelButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_addLabelButtonActionPerformed
829+ Enumeration <Label > elements = labelsListModel .elements ();
830+ Label label = LabelPanel .showDialog (Collections .list (elements ));
831+ if (label != null ) {
832+ GitHubRepository repository = getRepository ();
833+ if (repository == null ) {
834+ return ;
835+ }
836+ Label newLable = repository .addLabel (label );
837+ if (newLable == null ) {
838+ // show dialog
839+ UiUtils .showErrorDialog (Bundle .GitHubIssuePanel_message_addLabel_error ());
840+ return ;
841+ }
842+ GitHubCache cache = GitHubCache .create (repository );
843+ updateLables (cache , true );
844+ }
845+ }//GEN-LAST:event_addLabelButtonActionPerformed
846+
800847 // Variables declaration - do not modify//GEN-BEGIN:variables
848+ private javax .swing .JButton addLabelButton ;
801849 private javax .swing .JComboBox <User > assigneeComboBox ;
802850 private javax .swing .JLabel assigneeLabel ;
803851 private com .junichi11 .netbeans .modules .github .issues .issue .ui .AttributesViewPanel attributesViewPanel ;
0 commit comments