001/**
002 * Copyright (C) 2014  Universidade de Aveiro, DETI/IEETA, Bioinformatics Group - http://bioinformatics.ua.pt/
003 *
004 * This file is part of Dicoogle/dicoogle.
005 *
006 * Dicoogle/dicoogle is free software: you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation, either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * Dicoogle/dicoogle is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with Dicoogle.  If not, see <http://www.gnu.org/licenses/>.
018 */
019/*
020 * SearchTips.java
021 *
022 * Created on December 8, 2007, 12:53 AM
023 */
024
025package pt.ua.dicoogle.rGUI.client.windows;
026
027import java.rmi.RemoteException;
028import org.slf4j.Logger;
029import org.slf4j.LoggerFactory;
030import org.slf4j.Logger;
031import org.slf4j.LoggerFactory;
032import pt.ua.dicoogle.*;
033import java.awt.Image;
034import java.awt.Toolkit;
035import java.util.HashMap;
036import java.util.Iterator;
037import java.util.Set;
038import java.util.TreeSet;
039import javax.swing.DefaultListModel;
040import javax.swing.JTextField;
041import pt.ua.dicoogle.rGUI.client.UserRefs;
042import pt.ua.dicoogle.rGUI.interfaces.controllers.ISearch;
043
044/**
045 *
046 * @author  filipe
047 */
048@Deprecated
049public class SearchTips extends javax.swing.JFrame {
050    private MainWindow aThis = MainWindow.getInstance();
051    private JTextField query = null;
052    private ISearch search;
053    private HashMap tags;
054    
055    public SearchTips(JTextField query)
056    {
057        try {
058            this.query = query;
059            initComponents();
060
061            //this.aThis.setEnabled(false);
062            this.search = UserRefs.getInstance().getSearch();
063
064            tags = search.getTagList();
065
066            Image image = Toolkit.getDefaultToolkit().getImage(Thread.currentThread().getContextClassLoader().getResource("trayicon.gif"));
067            this.setIconImage(image);
068            
069            updateList(null);
070
071        } catch (RemoteException ex) {
072            LoggerFactory.getLogger(SearchTips.class).error(ex.getMessage(), ex);
073        }
074
075    }
076    
077    /** This method is called from within the constructor to
078     * initialize the form.
079     * WARNING: Do NOT modify this code. The content of this method is
080     * always regenerated by the Form Editor.
081     */
082    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
083    private void initComponents() {
084
085        jLabel1 = new javax.swing.JLabel();
086        jLabel2 = new javax.swing.JLabel();
087        jLabel3 = new javax.swing.JLabel();
088        jLabel4 = new javax.swing.JLabel();
089        jLabel5 = new javax.swing.JLabel();
090        jButton1 = new javax.swing.JButton();
091        jScrollPane1 = new javax.swing.JScrollPane();
092        jListElements = new javax.swing.JList();
093        jTextFieldFiltering = new javax.swing.JTextField();
094        jLabel6 = new javax.swing.JLabel();
095        jButtonInsertQuery = new javax.swing.JButton();
096        jButton3 = new javax.swing.JButton();
097
098        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
099        setTitle("Search Tips");
100        setResizable(false);
101        addWindowListener(new java.awt.event.WindowAdapter() {
102            public void windowClosing(java.awt.event.WindowEvent evt) {
103                formWindowClosing(evt);
104            }
105        });
106
107        jLabel1.setText("Search tips:");
108
109        jLabel2.setText("With default search, you can use boolean expressions, with operators like AND, OR.");
110
111        jLabel3.setText("You can provide specific fields value. For example:");
112
113        jLabel4.setText("PatientName:\"John Doe\"");
114
115        jLabel5.setText("The fields supported are:");
116
117        jButton1.setText("Close");
118        jButton1.addActionListener(new java.awt.event.ActionListener() {
119            public void actionPerformed(java.awt.event.ActionEvent evt) {
120                jButton1ActionPerformed(evt);
121            }
122        });
123
124        jListElements.addMouseListener(new java.awt.event.MouseAdapter() {
125            public void mouseClicked(java.awt.event.MouseEvent evt) {
126                jListElementsMouseClicked(evt);
127            }
128        });
129        jScrollPane1.setViewportView(jListElements);
130
131        jTextFieldFiltering.addKeyListener(new java.awt.event.KeyAdapter() {
132            public void keyReleased(java.awt.event.KeyEvent evt) {
133                jTextFieldFilteringKeyReleased(evt);
134            }
135        });
136
137        jLabel6.setText("Insert the tag name:");
138
139        jButtonInsertQuery.setText("Insert into Query");
140        jButtonInsertQuery.addActionListener(new java.awt.event.ActionListener() {
141            public void actionPerformed(java.awt.event.ActionEvent evt) {
142                jButtonInsertQueryActionPerformed(evt);
143            }
144        });
145
146        jButton3.setText("See Details");
147        jButton3.setEnabled(false);
148
149        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
150        getContentPane().setLayout(layout);
151        layout.setHorizontalGroup(
152            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
153            .addGroup(layout.createSequentialGroup()
154                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
155                    .addGroup(layout.createSequentialGroup()
156                        .addContainerGap()
157                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
158                            .addComponent(jLabel1)
159                            .addGroup(layout.createSequentialGroup()
160                                .addGap(12, 12, 12)
161                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
162                                    .addComponent(jLabel2)
163                                    .addComponent(jLabel3)
164                                    .addGroup(layout.createSequentialGroup()
165                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
166                                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
167                                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
168                                                    .addComponent(jLabel6, javax.swing.GroupLayout.Alignment.LEADING)
169                                                    .addComponent(jLabel5))
170                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
171                                                .addComponent(jTextFieldFiltering))
172                                            .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 354, javax.swing.GroupLayout.PREFERRED_SIZE))
173                                        .addGap(30, 30, 30)
174                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
175                                            .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
176                                            .addComponent(jButtonInsertQuery, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))))
177                    .addGroup(layout.createSequentialGroup()
178                        .addGap(130, 130, 130)
179                        .addComponent(jLabel4))
180                    .addGroup(layout.createSequentialGroup()
181                        .addGap(182, 182, 182)
182                        .addComponent(jButton1)))
183                .addContainerGap())
184        );
185        layout.setVerticalGroup(
186            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
187            .addGroup(layout.createSequentialGroup()
188                .addContainerGap()
189                .addComponent(jLabel1)
190                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
191                .addComponent(jLabel2)
192                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
193                .addComponent(jLabel3)
194                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
195                .addComponent(jLabel4)
196                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
197                .addComponent(jLabel5)
198                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
199                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
200                    .addComponent(jLabel6)
201                    .addComponent(jTextFieldFiltering, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
202                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
203                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
204                    .addGroup(layout.createSequentialGroup()
205                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE)
206                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
207                        .addComponent(jButton1))
208                    .addGroup(layout.createSequentialGroup()
209                        .addComponent(jButtonInsertQuery)
210                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
211                        .addComponent(jButton3)))
212                .addContainerGap())
213        );
214
215        pack();
216    }// </editor-fold>//GEN-END:initComponents
217
218    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
219            this.setVisible(false);
220            aThis.setEnabled(true);
221            aThis.toFront();
222            this.dispose();
223    }//GEN-LAST:event_jButton1ActionPerformed
224
225    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
226            this.setVisible(false);
227            aThis.setEnabled(true);
228            aThis.toFront();
229    }//GEN-LAST:event_formWindowClosing
230
231    private void jButtonInsertQueryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonInsertQueryActionPerformed
232        String tagName = (String) jListElements.getSelectedValue() ;
233        
234        if (tagName == null)
235            return;
236
237        if(query.getText().equals(""))
238            query.setText(tagName +":");
239        else
240            query.setText(query.getText()+ " " + tagName +":");
241    }//GEN-LAST:event_jButtonInsertQueryActionPerformed
242
243    private void jListElementsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jListElementsMouseClicked
244          if (evt.getClickCount() == 2)
245              jButtonInsertQuery.doClick();
246    }//GEN-LAST:event_jListElementsMouseClicked
247
248    private void jTextFieldFilteringKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldFilteringKeyReleased
249        updateList(jTextFieldFiltering.getText());
250    }//GEN-LAST:event_jTextFieldFilteringKeyReleased
251
252
253
254    private void updateList(String prefix)
255    {
256
257        DefaultListModel listModel;
258        listModel = new DefaultListModel();
259
260        Set<String> set = getTagList(prefix);
261
262        Iterator<String> it = (Iterator<String>) set.iterator();
263        while(it.hasNext())
264        {
265            String tagName = it.next();
266            listModel.addElement(tagName);
267        }
268        jListElements.setModel(listModel);
269
270    }
271
272
273    private Set<String> getTagList(String prefix) {
274        Set<String> set = new TreeSet<String>();
275
276        Set<String> sset = tags.keySet();
277
278        for (String item : sset) {
279            if (prefix != null && !prefix.equals("")) {
280                if (item.toLowerCase().startsWith(prefix.toLowerCase())) {
281                    set.add(item);
282                }
283            } else {
284                set.add(item);
285            }
286        }
287
288        return set;
289    }
290
291
292        
293    // Variables declaration - do not modify//GEN-BEGIN:variables
294    private javax.swing.JButton jButton1;
295    private javax.swing.JButton jButton3;
296    private javax.swing.JButton jButtonInsertQuery;
297    private javax.swing.JLabel jLabel1;
298    private javax.swing.JLabel jLabel2;
299    private javax.swing.JLabel jLabel3;
300    private javax.swing.JLabel jLabel4;
301    private javax.swing.JLabel jLabel5;
302    private javax.swing.JLabel jLabel6;
303    private javax.swing.JList jListElements;
304    private javax.swing.JScrollPane jScrollPane1;
305    private javax.swing.JTextField jTextFieldFiltering;
306    // End of variables declaration//GEN-END:variables
307
308
309}