Skip to content

Commit 9bfb03e

Browse files
committed
Improve the query feature #23
- Add the milestone parameter
1 parent 213e277 commit 9bfb03e

7 files changed

Lines changed: 102 additions & 9 deletions

File tree

src/main/java/com/junichi11/netbeans/modules/github/issues/egit/SearchIssuesParams.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import java.util.ArrayList;
4646
import java.util.List;
4747
import org.eclipse.egit.github.core.Label;
48+
import org.eclipse.egit.github.core.Milestone;
4849
import org.openide.util.Pair;
4950

5051
/**
@@ -237,6 +238,20 @@ public SearchIssuesParams keyword(String keyword) {
237238
return this;
238239
}
239240

241+
public SearchIssuesParams milestone(Milestone milestone) {
242+
if (milestone != null) {
243+
qParameters.add(Pair.of("milestone", milestone.getTitle())); // NOI18N
244+
}
245+
return this;
246+
}
247+
248+
public SearchIssuesParams milestone(String milestone) {
249+
if (milestone != null) {
250+
qParameters.add(Pair.of("milestone", milestone)); // NOI18N
251+
}
252+
return this;
253+
}
254+
240255
public SearchIssuesParams type(Type type) {
241256
if (type != null) {
242257
qParameters.add(Pair.of("type", type.getValue())); // NOI18N

src/main/java/com/junichi11/netbeans/modules/github/issues/query/GitHubQuery.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public class GitHubQuery {
6868
public enum QParam {
6969

7070
KEYWORD("keyword", "keyword"), // NOI18N
71+
MILESTONE("milestone", "milestone"), // NOI18N
7172
TYPE("type", "type"), // NOI18N
7273
IN("in", "in"), // NOI18N
7374
AUTHOR("author", "author"), // NOI18N
@@ -296,6 +297,7 @@ public String getParameter(Param param) {
296297
private SearchIssuesParams createSearchIssuesParams() {
297298
return new SearchIssuesParams()
298299
.keyword(getParameter(QParam.KEYWORD))
300+
.milestone(getParameter(QParam.MILESTONE))
299301
.assignee(getParameter(QParam.ASSIGNEE))
300302
.author(getParameter(QParam.AUTHOR))
301303
.commenter(getParameter(QParam.COMMENTER))

src/main/java/com/junichi11/netbeans/modules/github/issues/query/GitHubQueryController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ private SearchIssuesParams createSearchIssuesParams() {
246246
GitHubQueryPanel p = getPanel();
247247
return new SearchIssuesParams()
248248
.keyword(p.getKeyword())
249+
.milestone(p.getMilestone())
249250
.state(p.getState())
250251
.type(p.getType())
251252
.comments(p.getComments())

src/main/java/com/junichi11/netbeans/modules/github/issues/query/ui/GitHubQueryListCellRenderer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import javax.swing.DefaultListCellRenderer;
5252
import javax.swing.JList;
5353
import javax.swing.ListCellRenderer;
54+
import org.eclipse.egit.github.core.Milestone;
5455

5556
/**
5657
*
@@ -87,6 +88,9 @@ public Component getListCellRendererComponent(JList<?> list, Object value, int i
8788
} else if (value instanceof No) {
8889
No no = (No) value;
8990
text = no.getValue();
91+
} else if (value instanceof Milestone) {
92+
Milestone milestone = (Milestone) value;
93+
text = milestone.getTitle();
9094
}
9195
if (text == null) {
9296
text = " "; // NOI18N

src/main/java/com/junichi11/netbeans/modules/github/issues/query/ui/GitHubQueryPanel.form

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@
6161
<Group type="102" attributes="0">
6262
<Component id="keywordTextField" max="32767" attributes="0"/>
6363
<EmptySpace max="-2" attributes="0"/>
64+
<Component id="milestoneLabel" min="-2" max="-2" attributes="0"/>
65+
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
66+
<Component id="milestoneComboBox" min="-2" max="-2" attributes="0"/>
67+
<EmptySpace max="-2" attributes="0"/>
6468
<Component id="stateLabel" min="-2" max="-2" attributes="0"/>
6569
<EmptySpace max="-2" attributes="0"/>
6670
<Component id="stateComboBox" min="-2" max="-2" attributes="0"/>
@@ -126,6 +130,8 @@
126130
<Component id="keywordTextField" alignment="3" min="-2" max="-2" attributes="0"/>
127131
<Component id="stateLabel" alignment="3" min="-2" max="-2" attributes="0"/>
128132
<Component id="stateComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
133+
<Component id="milestoneLabel" alignment="3" min="-2" max="-2" attributes="0"/>
134+
<Component id="milestoneComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
129135
</Group>
130136
<EmptySpace max="-2" attributes="0"/>
131137
<Group type="103" groupAlignment="3" attributes="0">
@@ -600,5 +606,22 @@
600606
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;Type&gt;"/>
601607
</AuxValues>
602608
</Component>
609+
<Component class="javax.swing.JLabel" name="milestoneLabel">
610+
<Properties>
611+
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
612+
<ResourceString bundle="com/junichi11/netbeans/modules/github/issues/query/ui/Bundle.properties" key="GitHubQueryPanel.milestoneLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
613+
</Property>
614+
</Properties>
615+
</Component>
616+
<Component class="javax.swing.JComboBox" name="milestoneComboBox">
617+
<Properties>
618+
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
619+
<StringArray count="0"/>
620+
</Property>
621+
</Properties>
622+
<AuxValues>
623+
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;Milestone&gt;"/>
624+
</AuxValues>
625+
</Component>
603626
</SubComponents>
604627
</Form>

src/main/java/com/junichi11/netbeans/modules/github/issues/query/ui/GitHubQueryPanel.java

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,18 @@
5151
import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams.Type;
5252
import com.junichi11.netbeans.modules.github.issues.query.GitHubQuery;
5353
import com.junichi11.netbeans.modules.github.issues.query.GitHubQuery.QParam;
54+
import com.junichi11.netbeans.modules.github.issues.repository.GitHubRepository;
5455
import java.awt.Font;
5556
import java.awt.event.ActionListener;
57+
import java.util.List;
5658
import javax.swing.DefaultComboBoxModel;
59+
import javax.swing.JComboBox;
5760
import javax.swing.JComponent;
5861
import javax.swing.UIManager;
5962
import javax.swing.event.ChangeListener;
6063
import javax.swing.event.DocumentEvent;
6164
import javax.swing.event.DocumentListener;
65+
import org.eclipse.egit.github.core.Milestone;
6266
import org.openide.util.ChangeSupport;
6367
import org.openide.util.NbBundle;
6468

@@ -78,12 +82,14 @@ public class GitHubQueryPanel extends javax.swing.JPanel {
7882
private final DefaultComboBoxModel<SearchIssuesParams.No> noComboBoxModel = new DefaultComboBoxModel();
7983
private final DefaultComboBoxModel<SearchIssuesParams.Sort> sortComboBoxModel = new DefaultComboBoxModel();
8084
private final DefaultComboBoxModel<SearchIssuesParams.Order> orderComboBoxModel = new DefaultComboBoxModel();
85+
private final DefaultComboBoxModel<Milestone> milestoneComboBoxModel = new DefaultComboBoxModel();
8186
private final ChangeSupport changeSupport = new ChangeSupport(this);
8287

8388
/**
8489
* Creates new form GitHubQueryPanel
8590
*/
8691
public GitHubQueryPanel(GitHubQuery query, JComponent table) {
92+
assert query != null;
8793
this.query = query;
8894
initComponents();
8995

@@ -154,6 +160,11 @@ public GitHubQueryPanel(GitHubQuery query, JComponent table) {
154160
orderComboBox.setModel(orderComboBoxModel);
155161
orderComboBox.setRenderer(new GitHubQueryListCellRenderer(orderComboBox.getRenderer()));
156162

163+
// milestone
164+
GitHubRepository repository = query.getRepository();
165+
List<Milestone> milestones = repository.getMilestones();
166+
setComboBox(milestoneComboBox, milestoneComboBoxModel, milestones.toArray());
167+
157168
// add listener
158169
addDocumentListener();
159170

@@ -165,6 +176,15 @@ public GitHubQueryPanel(GitHubQuery query, JComponent table) {
165176
update();
166177
}
167178

179+
private void setComboBox(JComboBox comboBox, DefaultComboBoxModel model, Object[] values) {
180+
model.addElement(null);
181+
for (Object value : values) {
182+
model.addElement(value);
183+
}
184+
comboBox.setModel(model);
185+
comboBox.setRenderer(new GitHubQueryListCellRenderer(comboBox.getRenderer()));
186+
}
187+
168188
private void addDocumentListener() {
169189
DefaultDocumentListener defaultDocumentListener = new DefaultDocumentListener();
170190
createdTextField.getDocument().addDocumentListener(defaultDocumentListener);
@@ -201,6 +221,17 @@ public final void update() {
201221
isIssueComboBox.setSelectedItem(Is.valueOfString(query.getParameter(QParam.IS_ISSUE)));
202222
sortComboBox.setSelectedItem(Sort.valueOfString(query.getParameter(GitHubQuery.Param.SORT)));
203223
orderComboBox.setSelectedItem(Order.valueOfString(query.getParameter(GitHubQuery.Param.ORDER)));
224+
// milestone
225+
String milestoneTitle = query.getParameter(QParam.MILESTONE);
226+
for (int i = 0; i < milestoneComboBox.getItemCount(); i++) {
227+
Milestone milestone = milestoneComboBox.getItemAt(i);
228+
if (milestone != null) {
229+
if (milestone.getTitle().equals(milestoneTitle)) {
230+
milestoneComboBox.setSelectedIndex(i);
231+
break;
232+
}
233+
}
234+
}
204235
}
205236

206237
public final void setErrorMessage(String errorMessage) {
@@ -248,6 +279,10 @@ public String getKeyword() {
248279
return keywordTextField.getText().trim();
249280
}
250281

282+
public Milestone getMilestone() {
283+
return (Milestone) milestoneComboBox.getSelectedItem();
284+
}
285+
251286
public State getState() {
252287
return (State) stateComboBox.getSelectedItem();
253288
}
@@ -380,7 +415,7 @@ private void fireChange() {
380415
private void initComponents() {
381416

382417
stateLabel = new javax.swing.JLabel();
383-
stateComboBox = new javax.swing.JComboBox<State>();
418+
stateComboBox = new javax.swing.JComboBox<>();
384419
keywordLabel = new javax.swing.JLabel();
385420
keywordTextField = new javax.swing.JTextField();
386421
searchButton = new javax.swing.JButton();
@@ -412,21 +447,23 @@ private void initComponents() {
412447
mergedTextField = new javax.swing.JTextField();
413448
closedTextField = new javax.swing.JTextField();
414449
sortLabel = new javax.swing.JLabel();
415-
sortComboBox = new javax.swing.JComboBox<Sort>();
450+
sortComboBox = new javax.swing.JComboBox<>();
416451
orderLabel = new javax.swing.JLabel();
417-
orderComboBox = new javax.swing.JComboBox<Order>();
452+
orderComboBox = new javax.swing.JComboBox<>();
418453
headerPanel = new javax.swing.JPanel();
419454
headerNameLabel = new javax.swing.JLabel();
420455
headerErrorLabel = new javax.swing.JLabel();
421456
resetButton = new javax.swing.JButton();
422457
mainIssueTablePanel = new javax.swing.JPanel();
423458
resultsLabel = new javax.swing.JLabel();
424-
isOpenComboBox = new javax.swing.JComboBox<Is>();
425-
isMergedComboBox = new javax.swing.JComboBox<Is>();
426-
isIssueComboBox = new javax.swing.JComboBox<Is>();
427-
noComboBox = new javax.swing.JComboBox<No>();
459+
isOpenComboBox = new javax.swing.JComboBox<>();
460+
isMergedComboBox = new javax.swing.JComboBox<>();
461+
isIssueComboBox = new javax.swing.JComboBox<>();
462+
noComboBox = new javax.swing.JComboBox<>();
428463
typeLabel = new javax.swing.JLabel();
429-
typeComboBox = new javax.swing.JComboBox<Type>();
464+
typeComboBox = new javax.swing.JComboBox<>();
465+
milestoneLabel = new javax.swing.JLabel();
466+
milestoneComboBox = new javax.swing.JComboBox<>();
430467

431468
org.openide.awt.Mnemonics.setLocalizedText(stateLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.stateLabel.text")); // NOI18N
432469

@@ -537,6 +574,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
537574

538575
org.openide.awt.Mnemonics.setLocalizedText(typeLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.typeLabel.text")); // NOI18N
539576

577+
org.openide.awt.Mnemonics.setLocalizedText(milestoneLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.milestoneLabel.text")); // NOI18N
578+
540579
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
541580
this.setLayout(layout);
542581
layout.setHorizontalGroup(
@@ -581,6 +620,10 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
581620
.addGroup(layout.createSequentialGroup()
582621
.addComponent(keywordTextField)
583622
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
623+
.addComponent(milestoneLabel)
624+
.addGap(6, 6, 6)
625+
.addComponent(milestoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
626+
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
584627
.addComponent(stateLabel)
585628
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
586629
.addComponent(stateComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
@@ -635,7 +678,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
635678
.addComponent(keywordLabel)
636679
.addComponent(keywordTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
637680
.addComponent(stateLabel)
638-
.addComponent(stateComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
681+
.addComponent(stateComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
682+
.addComponent(milestoneLabel)
683+
.addComponent(milestoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
639684
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
640685
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
641686
.addComponent(authorLabel)
@@ -747,6 +792,8 @@ private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-F
747792
private javax.swing.JTextField mentionsTextField;
748793
private javax.swing.JLabel mergedLabel;
749794
private javax.swing.JTextField mergedTextField;
795+
private javax.swing.JComboBox<Milestone> milestoneComboBox;
796+
private javax.swing.JLabel milestoneLabel;
750797
private javax.swing.JComboBox<No> noComboBox;
751798
private javax.swing.JLabel noLabel;
752799
private javax.swing.JComboBox<Order> orderComboBox;

src/main/resources/com/junichi11/netbeans/modules/github/issues/query/ui/Bundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ GitHubQueryPanel.headerErrorLabel.text=ERROR
3737
GitHubQueryPanel.resetButton.text=Reset
3838
GitHubQueryPanel.resultsLabel.text=RESULTS
3939
GitHubQueryPanel.typeLabel.text=Type:
40+
GitHubQueryPanel.milestoneLabel.text=Milestone:

0 commit comments

Comments
 (0)