/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2014 Oracle and/or its affiliates. All rights reserved. * * Oracle and Java are registered trademarks of Oracle and/or its affiliates. * Other names may be trademarks of their respective owners. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the GPL Version 2 section of the License file that * accompanied this code. If applicable, add the following below the * License Header, with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * If you wish your version of this file to be governed by only the CDDL * or only the GPL Version 2, indicate your decision by adding * "[Contributor] elects to include this software in this distribution * under the [CDDL or GPL Version 2] license." If you do not indicate a * single choice of license, a recipient has the option to distribute * your version of this file under either the CDDL, the GPL Version 2 or * to extend the choice of license to its licensees as provided above. * However, if you add GPL Version 2 code and therefore, elected the GPL * Version 2 license, then the option applies only if the new code is * made subject to such option by the copyright holder. * * Contributor(s): * * Portions Copyrighted 2014 Sun Microsystems, Inc. */ package com.junichi11.netbeans.modules.github.issues.query.ui; import com.junichi11.netbeans.modules.github.issues.GitHubIcons; import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams; import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams.Is; import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams.No; import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams.Order; import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams.Sort; import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams.State; import com.junichi11.netbeans.modules.github.issues.egit.SearchIssuesParams.Type; import com.junichi11.netbeans.modules.github.issues.query.GitHubQuery; import com.junichi11.netbeans.modules.github.issues.query.GitHubQuery.QParam; import com.junichi11.netbeans.modules.github.issues.repository.GitHubRepository; import java.awt.Font; import java.awt.event.ActionListener; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.eclipse.egit.github.core.Milestone; import org.openide.util.ChangeSupport; import org.openide.util.NbBundle; /** * * @author junichi11 */ public class GitHubQueryPanel extends javax.swing.JPanel { private static final long serialVersionUID = -5303088106606244893L; private final GitHubQuery query; private final DefaultComboBoxModel<SearchIssuesParams.State> stateComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<SearchIssuesParams.Type> typeComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<SearchIssuesParams.Is> isOpenComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<SearchIssuesParams.Is> isMergedComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<SearchIssuesParams.Is> isIssueComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<SearchIssuesParams.No> noComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<SearchIssuesParams.Sort> sortComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<SearchIssuesParams.Order> orderComboBoxModel = new DefaultComboBoxModel(); private final DefaultComboBoxModel<Milestone> milestoneComboBoxModel = new DefaultComboBoxModel(); private final ChangeSupport changeSupport = new ChangeSupport(this); /** * Creates new form GitHubQueryPanel */ public GitHubQueryPanel(GitHubQuery query, JComponent table) { assert query != null; this.query = query; initComponents(); // header headerErrorLabel.setForeground(UIManager.getColor("nb.errorForeground")); // NOI18N setErrorMessage(""); // NOI18N Font font = headerErrorLabel.getFont(); headerNameLabel.setFont(font.deriveFont((float) (font.getSize() * 1.5))); headerNameLabel.setIcon(GitHubIcons.GITHUB_ICON_32); initComboBox(); // add listener addDocumentListener(); // issue table mainIssueTablePanel.add(table); resultsLabel.setText(""); // NOI18N update(); } private void initComboBox() { // state setComboBox(stateComboBox, stateComboBoxModel, State.values()); // type setComboBox(typeComboBox, typeComboBoxModel, Type.values()); // is setComboBox(isOpenComboBox, isOpenComboBoxModel, new Object[]{Is.OPEN, Is.CLOSED}); setComboBox(isMergedComboBox, isMergedComboBoxModel, new Object[]{Is.MERGED, Is.UNMERGED}); setComboBox(isIssueComboBox, isIssueComboBoxModel, new Object[]{Is.ISSUE, Is.PR}); // no setComboBox(noComboBox, noComboBoxModel, No.values()); // sort setComboBox(sortComboBox, sortComboBoxModel, Sort.values()); // order setComboBox(orderComboBox, orderComboBoxModel, Order.values()); // milestone GitHubRepository repository = query.getRepository(); List<Milestone> milestones = repository.getMilestones("all", false); // NOI18N setComboBox(milestoneComboBox, milestoneComboBoxModel, milestones.toArray()); } private void setComboBox(JComboBox comboBox, DefaultComboBoxModel model, Object[] values) { model.addElement(null); for (Object value : values) { model.addElement(value); } comboBox.setModel(model); comboBox.setRenderer(new GitHubQueryListCellRenderer(comboBox.getRenderer())); } private void addDocumentListener() { DefaultDocumentListener defaultDocumentListener = new DefaultDocumentListener(); createdTextField.getDocument().addDocumentListener(defaultDocumentListener); updatedTextField.getDocument().addDocumentListener(defaultDocumentListener); mergedTextField.getDocument().addDocumentListener(defaultDocumentListener); closedTextField.getDocument().addDocumentListener(defaultDocumentListener); commentsTextField.getDocument().addDocumentListener(defaultDocumentListener); inTextField.getDocument().addDocumentListener(defaultDocumentListener); } public final void update() { setHeaderName(); if (query == null || !query.isSaved()) { return; } // set existing info keywordTextField.setText(query.getParameter(QParam.KEYWORD)); stateComboBox.setSelectedItem(State.valueOfString(query.getParameter(QParam.STATE))); commentsTextField.setText(query.getParameter(QParam.COMMENTS)); labelsTextField.setText(query.getParameter(QParam.LABELS)); authorTextField.setText(query.getParameter(QParam.AUTHOR)); mentionsTextField.setText(query.getParameter(QParam.MENTIONS)); assigneeTextField.setText(query.getParameter(QParam.ASSIGNEE)); involvesTextField.setText(query.getParameter(QParam.INVOLVES)); languageTextField.setText(query.getParameter(QParam.LANGUAGE)); createdTextField.setText(query.getParameter(QParam.CREATED)); updatedTextField.setText(query.getParameter(QParam.UPDATED)); closedTextField.setText(query.getParameter(QParam.CLOSED)); mergedTextField.setText(query.getParameter(QParam.MERGED)); inTextField.setText(query.getParameter(QParam.IN)); noComboBox.setSelectedItem(No.valueOfString(query.getParameter(QParam.NO))); isOpenComboBox.setSelectedItem(Is.valueOfString(query.getParameter(QParam.IS_OPEN))); isMergedComboBox.setSelectedItem(Is.valueOfString(query.getParameter(QParam.IS_MERGED))); isIssueComboBox.setSelectedItem(Is.valueOfString(query.getParameter(QParam.IS_ISSUE))); sortComboBox.setSelectedItem(Sort.valueOfString(query.getParameter(GitHubQuery.Param.SORT))); orderComboBox.setSelectedItem(Order.valueOfString(query.getParameter(GitHubQuery.Param.ORDER))); // milestone String milestoneTitle = query.getParameter(QParam.MILESTONE); for (int i = 0; i < milestoneComboBox.getItemCount(); i++) { Milestone milestone = milestoneComboBox.getItemAt(i); if (milestone != null) { if (milestone.getTitle().equals(milestoneTitle)) { milestoneComboBox.setSelectedIndex(i); break; } } } } public final void setErrorMessage(String errorMessage) { if (errorMessage == null || errorMessage.trim().isEmpty()) { errorMessage = ""; // NOI18N headerErrorLabel.setIcon(null); } else { headerErrorLabel.setIcon(GitHubIcons.ERROR_ICON_16); } headerErrorLabel.setText(errorMessage); } @NbBundle.Messages({ "# {0} - count", "GitHubQueryPanel.message.result.issues=There are {0} issues matching this query.", "GitHubQueryPanel.message.result.issue=There is 1 issue matching this query.", "GitHubQueryPanel.message.result.empty=There is no issue that matching the query" }) public final void setResultCounts(int count) { if (count < 0) { resultsLabel.setText(""); // NOI18N return; } switch (count) { case 0: resultsLabel.setText(Bundle.GitHubQueryPanel_message_result_empty()); break; case 1: resultsLabel.setText(Bundle.GitHubQueryPanel_message_result_issue()); break; default: resultsLabel.setText(Bundle.GitHubQueryPanel_message_result_issues(count)); break; } } @NbBundle.Messages({ "GitHubQueryPanel.new.query.displayName=New query" }) private void setHeaderName() { if (!query.isSaved()) { headerNameLabel.setText(Bundle.GitHubQueryPanel_new_query_displayName()); return; } headerNameLabel.setText(query.getDisplayName()); } public String getKeyword() { return keywordTextField.getText().trim(); } public Milestone getMilestone() { return (Milestone) milestoneComboBox.getSelectedItem(); } public State getState() { return (State) stateComboBox.getSelectedItem(); } public String getComments() { return commentsTextField.getText().trim(); } public String getLabels() { return labelsTextField.getText().trim(); } public String getAuthor() { return authorTextField.getText().trim(); } public String getMentions() { return mentionsTextField.getText().trim(); } public String getAssignee() { return assigneeTextField.getText().trim(); } public String getInvolves() { return involvesTextField.getText().trim(); } public String getLanguage() { return languageTextField.getText().trim(); } public String getCreated() { return createdTextField.getText().trim(); } public String getUpdated() { return updatedTextField.getText().trim(); } public String getMerged() { return mergedTextField.getText().trim(); } public String getClosed() { return closedTextField.getText().trim(); } public String getIn() { return inTextField.getText().replaceAll("\\s", "").trim(); // NOI18N } public Type getType() { return (Type) typeComboBox.getSelectedItem(); } public No getNo() { return (No) noComboBox.getSelectedItem(); } public Is getIsOpen() { return (Is) isOpenComboBox.getSelectedItem(); } public Is getIsMerged() { return (Is) isMergedComboBox.getSelectedItem(); } public Is getIsIssue() { return (Is) isIssueComboBox.getSelectedItem(); } public Sort getSort() { return (Sort) sortComboBox.getSelectedItem(); } public Order getOrder() { return (Order) orderComboBox.getSelectedItem(); } public boolean isSearch(Object source) { return source == searchButton; } public boolean isSave(Object source) { return source == saveButton; } public void addSaveAction(ActionListener listener) { saveButton.addActionListener(listener); } public void removeSaveAction(ActionListener listener) { saveButton.removeActionListener(listener); } public void addSearchAction(ActionListener listener) { searchButton.addActionListener(listener); } public void removeSearchAction(ActionListener listener) { searchButton.removeActionListener(listener); } public void setButtonsEnabled(boolean isEnabled) { searchButton.setEnabled(isEnabled); saveButton.setEnabled(isEnabled); resetButton.setEnabled(isEnabled); } public void addChangeListener(ChangeListener listener) { changeSupport.addChangeListener(listener); } public void removeChangeListener(ChangeListener listener) { changeSupport.removeChangeListener(listener); } private void fireChange() { changeSupport.fireChange(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { stateLabel = new javax.swing.JLabel(); stateComboBox = new javax.swing.JComboBox<>(); keywordLabel = new javax.swing.JLabel(); keywordTextField = new javax.swing.JTextField(); searchButton = new javax.swing.JButton(); saveButton = new javax.swing.JButton(); commentsLabel = new javax.swing.JLabel(); commentsTextField = new javax.swing.JTextField(); labelsLabel = new javax.swing.JLabel(); labelsTextField = new javax.swing.JTextField(); authorLabel = new javax.swing.JLabel(); authorTextField = new javax.swing.JTextField(); mentionsLabel = new javax.swing.JLabel(); mentionsTextField = new javax.swing.JTextField(); assigneeLabel = new javax.swing.JLabel(); assigneeTextField = new javax.swing.JTextField(); involvesLabel = new javax.swing.JLabel(); involvesTextField = new javax.swing.JTextField(); inLabel = new javax.swing.JLabel(); inTextField = new javax.swing.JTextField(); noLabel = new javax.swing.JLabel(); isLabel = new javax.swing.JLabel(); languageLabel = new javax.swing.JLabel(); languageTextField = new javax.swing.JTextField(); createdLabel = new javax.swing.JLabel(); updatedLabel = new javax.swing.JLabel(); mergedLabel = new javax.swing.JLabel(); closedLabel = new javax.swing.JLabel(); createdTextField = new javax.swing.JTextField(); updatedTextField = new javax.swing.JTextField(); mergedTextField = new javax.swing.JTextField(); closedTextField = new javax.swing.JTextField(); sortLabel = new javax.swing.JLabel(); sortComboBox = new javax.swing.JComboBox<>(); orderLabel = new javax.swing.JLabel(); orderComboBox = new javax.swing.JComboBox<>(); headerPanel = new javax.swing.JPanel(); headerNameLabel = new javax.swing.JLabel(); headerErrorLabel = new javax.swing.JLabel(); resetButton = new javax.swing.JButton(); mainIssueTablePanel = new javax.swing.JPanel(); resultsLabel = new javax.swing.JLabel(); isOpenComboBox = new javax.swing.JComboBox<>(); isMergedComboBox = new javax.swing.JComboBox<>(); isIssueComboBox = new javax.swing.JComboBox<>(); noComboBox = new javax.swing.JComboBox<>(); typeLabel = new javax.swing.JLabel(); typeComboBox = new javax.swing.JComboBox<>(); milestoneLabel = new javax.swing.JLabel(); milestoneComboBox = new javax.swing.JComboBox<>(); org.openide.awt.Mnemonics.setLocalizedText(stateLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.stateLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(keywordLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.keywordLabel.text")); // NOI18N keywordTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.keywordTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(searchButton, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.searchButton.text")); // NOI18N searchButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { searchButtonActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(saveButton, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.saveButton.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(commentsLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.commentsLabel.text")); // NOI18N commentsTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.commentsTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(labelsLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.labelsLabel.text")); // NOI18N labelsTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.labelsTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(authorLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.authorLabel.text")); // NOI18N authorTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.authorTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(mentionsLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.mentionsLabel.text")); // NOI18N mentionsTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.mentionsTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(assigneeLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.assigneeLabel.text")); // NOI18N assigneeTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.assigneeTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(involvesLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.involvesLabel.text")); // NOI18N involvesTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.involvesTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(inLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.inLabel.text")); // NOI18N inTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.inTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(noLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.noLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(isLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.isLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(languageLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.languageLabel.text")); // NOI18N languageTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.languageTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(createdLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.createdLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(updatedLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.updatedLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(mergedLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.mergedLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(closedLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.closedLabel.text")); // NOI18N createdTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.createdTextField.text")); // NOI18N updatedTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.updatedTextField.text")); // NOI18N mergedTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.mergedTextField.text")); // NOI18N closedTextField.setText(org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.closedTextField.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(sortLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.sortLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(orderLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.orderLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(headerNameLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.headerNameLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(headerErrorLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.headerErrorLabel.text")); // NOI18N javax.swing.GroupLayout headerPanelLayout = new javax.swing.GroupLayout(headerPanel); headerPanel.setLayout(headerPanelLayout); headerPanelLayout.setHorizontalGroup( headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(headerPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(headerNameLabel) .addComponent(headerErrorLabel)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); headerPanelLayout.setVerticalGroup( headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(headerPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(headerNameLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE) .addComponent(headerErrorLabel) .addContainerGap()) ); org.openide.awt.Mnemonics.setLocalizedText(resetButton, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.resetButton.text")); // NOI18N resetButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { resetButtonActionPerformed(evt); } }); mainIssueTablePanel.setLayout(new java.awt.BorderLayout()); org.openide.awt.Mnemonics.setLocalizedText(resultsLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.resultsLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(typeLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.typeLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(milestoneLabel, org.openide.util.NbBundle.getMessage(GitHubQueryPanel.class, "GitHubQueryPanel.milestoneLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(headerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(mentionsLabel) .addComponent(assigneeLabel) .addComponent(authorLabel) .addComponent(involvesLabel) .addComponent(labelsLabel) .addComponent(languageLabel) .addComponent(keywordLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(authorTextField) .addComponent(mentionsTextField) .addComponent(assigneeTextField) .addComponent(involvesTextField) .addComponent(labelsTextField) .addComponent(languageTextField)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(createdLabel) .addComponent(updatedLabel) .addComponent(mergedLabel) .addComponent(closedLabel) .addComponent(inLabel) .addComponent(commentsLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(createdTextField) .addComponent(updatedTextField) .addComponent(mergedTextField) .addComponent(closedTextField) .addComponent(inTextField) .addComponent(commentsTextField))) .addGroup(layout.createSequentialGroup() .addComponent(keywordTextField) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(milestoneLabel) .addGap(6, 6, 6) .addComponent(milestoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(stateLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(stateComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGap(12, 12, 12) .addComponent(mainIssueTablePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(12, 12, 12)) .addGroup(layout.createSequentialGroup() .addGap(12, 12, 12) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(isLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(isOpenComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(isMergedComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(isIssueComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(noLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(noComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(typeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addComponent(searchButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(saveButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(resetButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(resultsLabel)) .addGroup(layout.createSequentialGroup() .addComponent(sortLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sortComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(orderLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(orderComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(headerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(keywordLabel) .addComponent(keywordTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(stateLabel) .addComponent(stateComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(milestoneLabel) .addComponent(milestoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(authorLabel) .addComponent(authorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(createdLabel) .addComponent(createdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(mentionsLabel) .addComponent(mentionsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(updatedLabel) .addComponent(updatedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(assigneeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(assigneeLabel) .addComponent(mergedLabel) .addComponent(mergedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(involvesTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(involvesLabel) .addComponent(closedLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(labelsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(inLabel) .addComponent(labelsLabel))) .addGroup(layout.createSequentialGroup() .addGap(6, 6, 6) .addComponent(closedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(inTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(languageTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(languageLabel)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(commentsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(commentsLabel))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(isLabel) .addComponent(isOpenComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(isMergedComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(isIssueComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(noLabel) .addComponent(noComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(typeLabel) .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(sortLabel) .addComponent(sortComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(orderLabel) .addComponent(orderComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(searchButton) .addComponent(saveButton) .addComponent(resetButton) .addComponent(resultsLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(mainIssueTablePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed }//GEN-LAST:event_searchButtonActionPerformed private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed update(); }//GEN-LAST:event_resetButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel assigneeLabel; private javax.swing.JTextField assigneeTextField; private javax.swing.JLabel authorLabel; private javax.swing.JTextField authorTextField; private javax.swing.JLabel closedLabel; private javax.swing.JTextField closedTextField; private javax.swing.JLabel commentsLabel; private javax.swing.JTextField commentsTextField; private javax.swing.JLabel createdLabel; private javax.swing.JTextField createdTextField; private javax.swing.JLabel headerErrorLabel; private javax.swing.JLabel headerNameLabel; private javax.swing.JPanel headerPanel; private javax.swing.JLabel inLabel; private javax.swing.JTextField inTextField; private javax.swing.JLabel involvesLabel; private javax.swing.JTextField involvesTextField; private javax.swing.JComboBox<Is> isIssueComboBox; private javax.swing.JLabel isLabel; private javax.swing.JComboBox<Is> isMergedComboBox; private javax.swing.JComboBox<Is> isOpenComboBox; private javax.swing.JLabel keywordLabel; private javax.swing.JTextField keywordTextField; private javax.swing.JLabel labelsLabel; private javax.swing.JTextField labelsTextField; private javax.swing.JLabel languageLabel; private javax.swing.JTextField languageTextField; private javax.swing.JPanel mainIssueTablePanel; private javax.swing.JLabel mentionsLabel; private javax.swing.JTextField mentionsTextField; private javax.swing.JLabel mergedLabel; private javax.swing.JTextField mergedTextField; private javax.swing.JComboBox<Milestone> milestoneComboBox; private javax.swing.JLabel milestoneLabel; private javax.swing.JComboBox<No> noComboBox; private javax.swing.JLabel noLabel; private javax.swing.JComboBox<Order> orderComboBox; private javax.swing.JLabel orderLabel; private javax.swing.JButton resetButton; private javax.swing.JLabel resultsLabel; private javax.swing.JButton saveButton; private javax.swing.JButton searchButton; private javax.swing.JComboBox<Sort> sortComboBox; private javax.swing.JLabel sortLabel; private javax.swing.JComboBox<State> stateComboBox; private javax.swing.JLabel stateLabel; private javax.swing.JComboBox<Type> typeComboBox; private javax.swing.JLabel typeLabel; private javax.swing.JLabel updatedLabel; private javax.swing.JTextField updatedTextField; // End of variables declaration//GEN-END:variables private class DefaultDocumentListener implements DocumentListener { @Override public void insertUpdate(DocumentEvent e) { processUpdate(); } @Override public void removeUpdate(DocumentEvent e) { processUpdate(); } @Override public void changedUpdate(DocumentEvent e) { processUpdate(); } private void processUpdate() { fireChange(); } } }