View Javadoc

1   /**
2    * Copyright (C) 2008 Atlassian
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.atlassian.theplugin.idea.jira;
18  
19  import com.atlassian.theplugin.idea.ProgressAnimationProvider;
20  import com.atlassian.theplugin.idea.jira.table.JIRAConstantListRenderer;
21  import com.atlassian.theplugin.idea.jira.table.JIRAQueryFragmentListRenderer;
22  import com.atlassian.theplugin.idea.ui.CollapsiblePanel;
23  import com.atlassian.theplugin.jira.JIRAServer;
24  import com.atlassian.theplugin.jira.api.JIRAAssigneeBean;
25  import com.atlassian.theplugin.jira.api.JIRAProjectBean;
26  import com.atlassian.theplugin.jira.api.JIRAQueryFragment;
27  import com.atlassian.theplugin.jira.api.JIRAReporterBean;
28  import com.intellij.openapi.util.IconLoader;
29  import com.intellij.uiDesigner.core.Spacer;
30  import com.jgoodies.forms.layout.CellConstraints;
31  import com.jgoodies.forms.layout.FormLayout;
32  
33  import javax.swing.*;
34  import javax.swing.event.ListSelectionEvent;
35  import javax.swing.event.ListSelectionListener;
36  import java.awt.*;
37  import java.util.ArrayList;
38  import java.util.List;
39  
40  
41  public class JIRAIssueFilterPanel extends JPanel {
42      private JList projectList;
43      private JList issueTypeList;
44      private JList fixForList;
45      private JList affectsVersionsList;
46      private JComboBox reporterComboBox;
47      private JComboBox assigneeComboBox;
48      private JList resolutionsList;
49      private JList prioritiesList;
50      private JList statusList;
51      private JPanel rootPanel;
52      private JScrollPane prioritiesScrollPane;
53      private JScrollPane resolutionScrollPane;
54      private JScrollPane statusScrollPane;
55      private JScrollPane affectVersionScrollPane;
56      private JScrollPane fixForScrollPane;
57      private JScrollPane projectScrollPane;
58      private JScrollPane issueTypeScrollPane;
59      private JScrollPane componentsScrollPane;
60      private JList componentsList;
61      private CollapsiblePanel componentsVersionsCollapsiblePanel;
62      private JPanel componentsVersionsPanel;
63      private CollapsiblePanel issueAttributesCollapsiblePanel;
64      private JPanel issueAttributesPanel;
65      private JLabel componentsLabel;
66      private JLabel fixForLabel;
67      private JLabel reporterLabel;
68      private JLabel assigneeLabel;
69      private JLabel statusLabel;
70      private JLabel resolutionsLabel;
71      private JLabel prioritiesLabel;
72      private JLabel affectsVersionsLabel;
73      private JPanel generalPanel;
74  
75      private ProgressAnimationProvider progressAnimation;
76      private boolean initialFilterSet;
77  
78      private JIRAServer jiraServer;
79  
80      public JIRAIssueFilterPanel(ProgressAnimationProvider progressAnimation) {
81          $$$setupUI$$$();
82  
83          this.progressAnimation = progressAnimation;
84          this.projectList.setCellRenderer(new JIRAQueryFragmentListRenderer());
85          this.issueTypeList.setCellRenderer(new JIRAConstantListRenderer());
86          this.statusList.setCellRenderer(new JIRAConstantListRenderer());
87          this.prioritiesList.setCellRenderer(new JIRAConstantListRenderer());
88          this.resolutionsList.setCellRenderer(new JIRAQueryFragmentListRenderer());
89          this.fixForList.setCellRenderer(new JIRAQueryFragmentListRenderer());
90          this.componentsList.setCellRenderer(new JIRAQueryFragmentListRenderer());
91          this.affectsVersionsList.setCellRenderer(new JIRAQueryFragmentListRenderer());
92          this.reporterComboBox.setRenderer(new JIRAQueryFragmentListRenderer());
93          this.assigneeComboBox.setRenderer(new JIRAQueryFragmentListRenderer());
94  
95          projectList.addListSelectionListener(new ListSelectionListener() {
96              public void valueChanged(ListSelectionEvent event) {
97                  int size = projectList.getSelectedValues().length;
98                  switch (size) {
99                      case 0:
100                         jiraServer.setCurrentProject(null);
101                         refreshProjectDependentLists();
102                         break;
103                     case 1:
104                         JIRAProjectBean project = (JIRAProjectBean) projectList.getSelectedValues()[0];
105                         jiraServer.setCurrentProject(project);
106                         refreshProjectDependentLists();
107                         break;
108                     default:
109                         jiraServer.setCurrentProject(null);
110                         clearProjectDependentLists();
111                         refreshGlobalIssueTypeList();
112                         break;
113                 }
114             }
115         });
116     }
117 
118     public void setProgressAnimation(ProgressAnimationProvider progressAnimation) {
119         this.progressAnimation = progressAnimation;
120     }
121 
122     private void enableProjectDependentLists(boolean value) {
123         this.fixForList.setEnabled(value);
124         this.componentsList.setEnabled(value);
125         this.affectsVersionsList.setEnabled(value);
126 
127         int visibleListCount = 0;
128         if (this.fixForList.getModel().getSize() == 0) {
129             this.fixForScrollPane.setEnabled(false);
130         } else {
131             this.fixForScrollPane.setEnabled(true);
132             visibleListCount++;
133         }
134         if (this.componentsList.getModel().getSize() == 0) {
135             this.componentsScrollPane.setEnabled(false);
136         } else {
137             this.componentsScrollPane.setEnabled(true);
138             visibleListCount++;
139         }
140         if (this.affectsVersionsList.getModel().getSize() == 0) {
141             this.affectVersionScrollPane.setEnabled(false);
142         } else {
143             this.affectVersionScrollPane.setEnabled(true);
144             visibleListCount++;
145         }
146 
147         if (visibleListCount == 0) {
148             componentsVersionsCollapsiblePanel.collapse();
149         } else {
150             componentsVersionsCollapsiblePanel.expand();
151         }
152 
153         rootPanel.validate();
154     }
155 
156     private void clearProjectDependentLists() {
157         this.issueTypeList.setListData(new Object[0]);
158         this.fixForList.setListData(new Object[0]);
159         this.componentsList.setListData(new Object[0]);
160         this.affectsVersionsList.setListData(new Object[0]);
161 
162         enableProjectDependentLists(false);
163     }
164 
165     private void refreshGlobalIssueTypeList() {
166         if (initialFilterSet) {
167             issueTypeList.setListData(jiraServer.getIssueTypes().toArray());
168         } else {
169             new Thread(new Runnable() {
170                 public void run() {
171                     progressAnimation.startProgressAnimation();
172                     issueTypeList.setListData(jiraServer.getIssueTypes().toArray());
173                     progressAnimation.stopProgressAnimation();
174                 }
175             }, "JIRA filter project values retrieve").start();
176         }
177 
178     }
179 
180     private void refreshProjectDependentLists() {
181         if (jiraServer.getCurrentProject() != null) {
182             if (jiraServer.getCurrentProject().getId() == JIRAServer.ANY_ID) {
183                 clearProjectDependentLists();
184             } else {
185                 if (initialFilterSet) {
186                     setProjectDependendListValues();
187                 } else {
188                     new Thread(new Runnable() {
189                         public void run() {
190                             setProjectDependendListValues();
191                         }
192                     }, "JIRA filter project values retrieve").start();
193                 }
194             }
195         } else {
196             clearProjectDependentLists();
197         }
198     }
199 
200     private void setProjectDependendListValues() {
201         progressAnimation.startProgressAnimation();
202         issueTypeList.setListData(jiraServer.getIssueTypes().toArray());
203         fixForList.setListData(jiraServer.getFixForVersions().toArray());
204         componentsList.setListData(jiraServer.getComponents().toArray());
205         affectsVersionsList.setListData(jiraServer.getVersions().toArray());
206         enableProjectDependentLists(true);
207         progressAnimation.stopProgressAnimation();
208     }
209 
210     public void setJiraServer(final JIRAServer jServer, final List<JIRAQueryFragment> advancedQuery) {
211         new Thread(new Runnable() {
212             public void run() {
213                 initialFilterSet = true;
214                 progressAnimation.startProgressAnimation();
215                 jiraServer = jServer;
216                 projectList.setListData(jiraServer.getProjects().toArray());
217                 issueTypeList.setListData(jiraServer.getIssueTypes().toArray());
218                 statusList.setListData(jiraServer.getStatuses().toArray());
219                 prioritiesList.setListData(jiraServer.getPriorieties().toArray());
220                 resolutionsList.setListData(jiraServer.getResolutions().toArray());
221                 fixForList.setListData(jiraServer.getFixForVersions().toArray());
222                 componentsList.setListData(jiraServer.getComponents().toArray());
223                 affectsVersionsList.setListData(jiraServer.getVersions().toArray());
224 
225                 reporterComboBox.removeAllItems();
226                 reporterComboBox.addItem(new JIRAReporterBean(JIRAServer.ANY_ID, "Any User", null));
227 //reporterComboBox.addItem(new JIRAReporterBean((long) -1, "No reporter", "issue_no_reporter"));
228                 reporterComboBox.addItem(new JIRAReporterBean((long) -1, "Current User", jiraServer.getServer().getUserName()));
229 
230                 assigneeComboBox.removeAllItems();
231                 assigneeComboBox.addItem(new JIRAAssigneeBean(JIRAServer.ANY_ID, "Any User", ""));
232                 assigneeComboBox.addItem(new JIRAAssigneeBean((long) -1, "Unassigned", "unassigned"));
233                 assigneeComboBox.addItem(new JIRAAssigneeBean((long) -1, "Current User", jiraServer.getServer().getUserName()));
234 
235 
236                 setListValues(projectList, advancedQuery);
237                 setListValues(statusList, advancedQuery);
238                 setListValues(prioritiesList, advancedQuery);
239                 setListValues(resolutionsList, advancedQuery);
240                 setListValues(issueTypeList, advancedQuery);
241                 setListValues(componentsList, advancedQuery);
242                 setListValues(fixForList, advancedQuery);
243                 setListValues(affectsVersionsList, advancedQuery);
244                 setComboValue(assigneeComboBox, advancedQuery);
245                 setComboValue(reporterComboBox, advancedQuery);
246 
247                 progressAnimation.stopProgressAnimation();
248                 initialFilterSet = false;
249             }
250         }, "JIRA initial filter set").start();
251     }
252 
253     public void setListValues(JList list, List<JIRAQueryFragment> advancedQuery) {
254         List<Integer> selection = new ArrayList<Integer>();
255         for (int i = 0, size = list.getModel().getSize(); i < size; ++i) {
256             for (JIRAQueryFragment jiraQueryFragment : advancedQuery) {
257                 JIRAQueryFragment fragment = (JIRAQueryFragment) list.getModel().getElementAt(i);
258                 if (jiraQueryFragment.getQueryStringFragment().equals(fragment.getQueryStringFragment())) {
259                     selection.add(i);
260                 }
261             }
262         }
263         if (selection.size() > 0) {
264             int[] sel = new int[selection.size()];
265             int j = 0;
266             for (Integer integer : selection) {
267                 sel[j++] = integer;
268             }
269             list.setSelectedIndices(sel);
270             list.ensureIndexIsVisible(sel[0]);
271         }
272     }
273 
274     public void setComboValue
275             (JComboBox
276                     combo,
277              List<JIRAQueryFragment> advancedQuery) {
278         for (int i = 0, size = combo.getModel().getSize(); i < size; ++i) {
279             for (JIRAQueryFragment jiraQueryFragment : advancedQuery) {
280                 JIRAQueryFragment fragment = (JIRAQueryFragment) combo.getModel().getElementAt(i);
281                 if (jiraQueryFragment.getQueryStringFragment().equals(fragment.getQueryStringFragment())) {
282                     combo.setSelectedIndex(i);
283                     break;
284                 }
285             }
286         }
287     }
288 
289 
290     public List<JIRAQueryFragment> getFilter() {
291         List<JIRAQueryFragment> query = new ArrayList<JIRAQueryFragment>();
292         for (Object o : projectList.getSelectedValues()) {
293             query.add((JIRAQueryFragment) o);
294         }
295         for (Object o : issueTypeList.getSelectedValues()) {
296             query.add((JIRAQueryFragment) o);
297         }
298         for (Object o : statusList.getSelectedValues()) {
299             query.add((JIRAQueryFragment) o);
300         }
301         for (Object o : prioritiesList.getSelectedValues()) {
302             query.add((JIRAQueryFragment) o);
303         }
304         for (Object o : resolutionsList.getSelectedValues()) {
305             query.add((JIRAQueryFragment) o);
306         }
307         for (Object o : fixForList.getSelectedValues()) {
308             query.add((JIRAQueryFragment) o);
309         }
310         for (Object o : componentsList.getSelectedValues()) {
311             query.add((JIRAQueryFragment) o);
312         }
313         for (Object o : affectsVersionsList.getSelectedValues()) {
314             query.add((JIRAQueryFragment) o);
315         }
316         query.add((JIRAQueryFragment) assigneeComboBox.getSelectedItem());
317         query.add((JIRAQueryFragment) reporterComboBox.getSelectedItem());
318         return query;
319     }
320 
321     private void createUIComponents
322             () {
323         Icon collapse = IconLoader.findIcon("/icons/navigate_down_10.gif");
324         Icon expand = IconLoader.findIcon("/icons/navigate_right_10.gif");
325         componentsVersionsPanel = new JPanel();
326         issueAttributesPanel = new JPanel();
327 
328         componentsVersionsCollapsiblePanel = new CollapsiblePanel(componentsVersionsPanel, true, false, collapse, expand, "Components/Versions");
329         issueAttributesCollapsiblePanel = new CollapsiblePanel(issueAttributesPanel, true, false, collapse, expand, "Issue Attributes");
330     }
331 
332     /**
333      * Method generated by IntelliJ IDEA GUI Designer
334      * >>> IMPORTANT!! <<<
335      * DO NOT edit this method OR call it in your code!
336      *
337      * @noinspection ALL
338      */
339     private void $$$setupUI$$$() {
340         createUIComponents();
341         rootPanel = new JPanel();
342         rootPanel.setLayout(new FormLayout("fill:max(d;4px):noGrow", "center:max(d;4px):noGrow,top:3dlu:noGrow,center:max(d;4px):noGrow,top:3dlu:noGrow,center:max(d;4px):noGrow,top:3dlu:noGrow,center:max(d;4px):noGrow,top:3dlu:noGrow,center:max(d;4px):noGrow,top:3dlu:noGrow,center:d:grow"));
343         rootPanel.setFocusCycleRoot(false);
344         rootPanel.setMaximumSize(new Dimension(-1, -1));
345         componentsVersionsPanel.setLayout(new FormLayout("fill:72px:noGrow,left:4dlu:noGrow,fill:d:grow", "center:d:grow,top:3dlu:noGrow,center:d:grow,top:3dlu:noGrow,center:d:grow"));
346         componentsVersionsPanel.setEnabled(false);
347         componentsVersionsPanel.setMinimumSize(new Dimension(335, -1));
348         componentsVersionsPanel.setPreferredSize(new Dimension(335, 250));
349         CellConstraints cc = new CellConstraints();
350         rootPanel.add(componentsVersionsPanel, cc.xy(1, 5, CellConstraints.DEFAULT, CellConstraints.TOP));
351         fixForScrollPane = new JScrollPane();
352         componentsVersionsPanel.add(fixForScrollPane, cc.xy(3, 1));
353         fixForList = new JList();
354         fixForList.setVisibleRowCount(5);
355         fixForScrollPane.setViewportView(fixForList);
356         componentsScrollPane = new JScrollPane();
357         componentsVersionsPanel.add(componentsScrollPane, cc.xy(3, 3));
358         componentsList = new JList();
359         final DefaultListModel defaultListModel1 = new DefaultListModel();
360         componentsList.setModel(defaultListModel1);
361         componentsList.setVisible(true);
362         componentsList.setVisibleRowCount(5);
363         componentsScrollPane.setViewportView(componentsList);
364         affectVersionScrollPane = new JScrollPane();
365         componentsVersionsPanel.add(affectVersionScrollPane, cc.xy(3, 5));
366         affectsVersionsList = new JList();
367         final DefaultListModel defaultListModel2 = new DefaultListModel();
368         affectsVersionsList.setModel(defaultListModel2);
369         affectsVersionsList.setVisibleRowCount(5);
370         affectVersionScrollPane.setViewportView(affectsVersionsList);
371         fixForLabel = new JLabel();
372         fixForLabel.setFont(new Font(fixForLabel.getFont().getName(), fixForLabel.getFont().getStyle(), 11));
373         fixForLabel.setText("Fix For:");
374         componentsVersionsPanel.add(fixForLabel, cc.xy(1, 1, CellConstraints.RIGHT, CellConstraints.TOP));
375         componentsLabel = new JLabel();
376         componentsLabel.setFont(new Font(componentsLabel.getFont().getName(), componentsLabel.getFont().getStyle(), 11));
377         componentsLabel.setHorizontalAlignment(4);
378         componentsLabel.setText("Components:");
379         componentsVersionsPanel.add(componentsLabel, cc.xy(1, 3, CellConstraints.RIGHT, CellConstraints.TOP));
380         affectsVersionsLabel = new JLabel();
381         affectsVersionsLabel.setFont(new Font(affectsVersionsLabel.getFont().getName(), affectsVersionsLabel.getFont().getStyle(), 11));
382         affectsVersionsLabel.setText("<html>Affects<br>  Versions:</html>");
383         componentsVersionsPanel.add(affectsVersionsLabel, cc.xy(1, 5, CellConstraints.RIGHT, CellConstraints.TOP));
384         issueAttributesCollapsiblePanel.setBackground(new Color(-6711040));
385         issueAttributesCollapsiblePanel.putClientProperty("html.disable", Boolean.TRUE);
386         rootPanel.add(issueAttributesCollapsiblePanel, cc.xy(1, 7));
387         issueAttributesPanel.setLayout(new FormLayout("fill:72px:noGrow,left:4dlu:noGrow,fill:d:grow", "center:max(d;4px):noGrow,top:3dlu:noGrow,center:max(d;4px):noGrow,top:3dlu:noGrow,center:d:grow,top:3dlu:noGrow,center:d:grow,top:3dlu:noGrow,center:d:grow"));
388         issueAttributesPanel.setEnabled(false);
389         issueAttributesPanel.setMinimumSize(new Dimension(335, -1));
390         issueAttributesPanel.setPreferredSize(new Dimension(335, 314));
391         rootPanel.add(issueAttributesPanel, new CellConstraints(1, 9, 1, 1, CellConstraints.DEFAULT, CellConstraints.TOP, new Insets(0, 0, 5, 0)));
392         reporterComboBox = new JComboBox();
393         reporterComboBox.setLightWeightPopupEnabled(false);
394         reporterComboBox.setMaximumRowCount(5);
395         issueAttributesPanel.add(reporterComboBox, cc.xy(3, 1));
396         assigneeComboBox = new JComboBox();
397         assigneeComboBox.setLightWeightPopupEnabled(false);
398         assigneeComboBox.setMaximumRowCount(5);
399         issueAttributesPanel.add(assigneeComboBox, cc.xy(3, 3));
400         statusScrollPane = new JScrollPane();
401         issueAttributesPanel.add(statusScrollPane, cc.xy(3, 5));
402         statusList = new JList();
403         final DefaultListModel defaultListModel3 = new DefaultListModel();
404         statusList.setModel(defaultListModel3);
405         statusList.setVisibleRowCount(5);
406         statusScrollPane.setViewportView(statusList);
407         resolutionScrollPane = new JScrollPane();
408         issueAttributesPanel.add(resolutionScrollPane, cc.xy(3, 7));
409         resolutionsList = new JList();
410         final DefaultListModel defaultListModel4 = new DefaultListModel();
411         resolutionsList.setModel(defaultListModel4);
412         resolutionsList.setVisibleRowCount(5);
413         resolutionScrollPane.setViewportView(resolutionsList);
414         prioritiesScrollPane = new JScrollPane();
415         issueAttributesPanel.add(prioritiesScrollPane, cc.xy(3, 9));
416         prioritiesList = new JList();
417         prioritiesList.setVisibleRowCount(5);
418         prioritiesScrollPane.setViewportView(prioritiesList);
419         reporterLabel = new JLabel();
420         reporterLabel.setFont(new Font(reporterLabel.getFont().getName(), reporterLabel.getFont().getStyle(), 11));
421         reporterLabel.setHorizontalAlignment(4);
422         reporterLabel.setText("Reporter:");
423         issueAttributesPanel.add(reporterLabel, cc.xy(1, 1, CellConstraints.RIGHT, CellConstraints.TOP));
424         assigneeLabel = new JLabel();
425         assigneeLabel.setFont(new Font(assigneeLabel.getFont().getName(), assigneeLabel.getFont().getStyle(), 11));
426         assigneeLabel.setHorizontalAlignment(4);
427         assigneeLabel.setText("Assignee:");
428         issueAttributesPanel.add(assigneeLabel, cc.xy(1, 3, CellConstraints.RIGHT, CellConstraints.TOP));
429         statusLabel = new JLabel();
430         statusLabel.setFont(new Font(statusLabel.getFont().getName(), statusLabel.getFont().getStyle(), 11));
431         statusLabel.setHorizontalAlignment(4);
432         statusLabel.setRequestFocusEnabled(false);
433         statusLabel.setText("Status:");
434         issueAttributesPanel.add(statusLabel, cc.xy(1, 5, CellConstraints.RIGHT, CellConstraints.TOP));
435         resolutionsLabel = new JLabel();
436         resolutionsLabel.setFont(new Font(resolutionsLabel.getFont().getName(), resolutionsLabel.getFont().getStyle(), 11));
437         resolutionsLabel.setHorizontalAlignment(4);
438         resolutionsLabel.setText("Resolutions:");
439         issueAttributesPanel.add(resolutionsLabel, cc.xy(1, 7, CellConstraints.RIGHT, CellConstraints.TOP));
440         prioritiesLabel = new JLabel();
441         prioritiesLabel.setFont(new Font(prioritiesLabel.getFont().getName(), prioritiesLabel.getFont().getStyle(), 11));
442         prioritiesLabel.setHorizontalAlignment(4);
443         prioritiesLabel.setText("Priorities:");
444         prioritiesLabel.setVerticalTextPosition(0);
445         issueAttributesPanel.add(prioritiesLabel, cc.xy(1, 9, CellConstraints.RIGHT, CellConstraints.TOP));
446         componentsVersionsCollapsiblePanel.setBackground(new Color(-3368704));
447         componentsVersionsCollapsiblePanel.setFont(new Font(componentsVersionsCollapsiblePanel.getFont().getName(), componentsVersionsCollapsiblePanel.getFont().getStyle(), componentsVersionsCollapsiblePanel.getFont().getSize()));
448         rootPanel.add(componentsVersionsCollapsiblePanel, cc.xy(1, 3, CellConstraints.FILL, CellConstraints.DEFAULT));
449         generalPanel = new JPanel();
450         generalPanel.setLayout(new FormLayout("fill:72px:noGrow,left:4dlu:noGrow,fill:d:grow", "fill:d:grow,top:3dlu:noGrow,fill:max(d;4px):noGrow"));
451         generalPanel.setDoubleBuffered(true);
452         generalPanel.setEnabled(false);
453         generalPanel.setMinimumSize(new Dimension(335, -1));
454         rootPanel.add(generalPanel, new CellConstraints(1, 1, 1, 1, CellConstraints.DEFAULT, CellConstraints.DEFAULT, new Insets(5, 0, 0, 0)));
455         final JLabel label1 = new JLabel();
456         label1.setFont(new Font(label1.getFont().getName(), label1.getFont().getStyle(), 11));
457         label1.setText("Project:");
458         label1.setVerticalAlignment(1);
459         generalPanel.add(label1, cc.xy(1, 1, CellConstraints.RIGHT, CellConstraints.TOP));
460         issueTypeScrollPane = new JScrollPane();
461         issueTypeScrollPane.setDoubleBuffered(false);
462         generalPanel.add(issueTypeScrollPane, cc.xy(3, 3));
463         issueTypeList = new JList();
464         issueTypeList.setVisibleRowCount(5);
465         issueTypeScrollPane.setViewportView(issueTypeList);
466         projectScrollPane = new JScrollPane();
467         generalPanel.add(projectScrollPane, cc.xy(3, 1));
468         projectList = new JList();
469         projectList.setInheritsPopupMenu(false);
470         projectList.setLayoutOrientation(0);
471         final DefaultListModel defaultListModel5 = new DefaultListModel();
472         projectList.setModel(defaultListModel5);
473         projectList.setVisibleRowCount(5);
474         projectScrollPane.setViewportView(projectList);
475         final JLabel label2 = new JLabel();
476         label2.setFont(new Font(label2.getFont().getName(), label2.getFont().getStyle(), 11));
477         label2.setRequestFocusEnabled(true);
478         label2.setText("Issue Type:");
479         generalPanel.add(label2, cc.xy(1, 3, CellConstraints.RIGHT, CellConstraints.TOP));
480         final Spacer spacer1 = new Spacer();
481         rootPanel.add(spacer1, cc.xy(1, 11, CellConstraints.DEFAULT, CellConstraints.FILL));
482         fixForLabel.setLabelFor(fixForScrollPane);
483         componentsLabel.setLabelFor(componentsScrollPane);
484         componentsLabel.setNextFocusableComponent(componentsScrollPane);
485         affectsVersionsLabel.setLabelFor(affectVersionScrollPane);
486         reporterLabel.setLabelFor(reporterComboBox);
487         assigneeLabel.setLabelFor(assigneeComboBox);
488         statusLabel.setLabelFor(statusScrollPane);
489         resolutionsLabel.setLabelFor(resolutionScrollPane);
490         prioritiesLabel.setLabelFor(prioritiesScrollPane);
491         label1.setLabelFor(projectScrollPane);
492         label2.setLabelFor(issueTypeScrollPane);
493     }
494 
495     /**
496      * @noinspection ALL
497      */
498     public JComponent $$$getRootComponent$$$() {
499         return rootPanel;
500     }
501 }
502