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 */ 019package pt.ua.dicoogle.rGUI.client.windows; 020 021import java.awt.Image; 022import java.awt.Toolkit; 023import java.io.File; 024import java.net.URL; 025import java.rmi.RemoteException; 026import java.util.ArrayList; 027import java.util.Collections; 028import java.util.Enumeration; 029import java.util.HashMap; 030import java.util.Observable; 031import java.util.Observer; 032 033import javax.swing.DefaultListModel; 034import javax.swing.ImageIcon; 035import javax.swing.JFileChooser; 036import javax.swing.JOptionPane; 037import javax.swing.filechooser.FileFilter; 038import org.slf4j.LoggerFactory; 039 040import pt.ua.dicoogle.common.ExtensionFilter; 041import pt.ua.dicoogle.core.ExportDataSupport; 042import pt.ua.dicoogle.rGUI.client.UserRefs; 043import pt.ua.dicoogle.rGUI.interfaces.controllers.ISearch; 044import pt.ua.dicoogle.sdk.utils.TagValue; 045 046/** 047 * This class is used to select the tags that will be used to export to file 048 * 049 * @author Samuel da Costa Campos <samuelcampos@ua.pt> 050 * 051 */ 052@Deprecated 053public class ExportData extends javax.swing.JFrame implements Observer { 054 055 private ISearch search; 056 private HashMap<String, Integer> tags; 057 private HashMap<Integer, TagValue> dimFields; 058 private ArrayList<String> listAvaliable; 059 private ExportDataSupport eds; 060 061 private String query; 062 private boolean keywords; 063 private boolean local; 064 private boolean network; 065 private HashMap<String, Boolean> origins; 066 067 /** Creates new form ExportData */ 068 public ExportData(String query, boolean keywords, HashMap<String, Boolean> origins) { 069 initComponents(); 070 071 Image image = Toolkit.getDefaultToolkit().getImage(Thread.currentThread().getContextClassLoader().getResource("trayicon.gif")); 072 this.setIconImage(image); 073 074 jLabelExporting.setVisible(false); 075 076 try { 077 this.search = UserRefs.getInstance().getSearch(); 078 079 tags = search.getTagList(); 080 dimFields = search.getDIMFields(); 081 082 this.query = query; 083 this.keywords = keywords; 084 this.origins = origins; 085 086 fillLists(); 087 088 } catch (RemoteException ex) { 089 LoggerFactory.getLogger(ExportData.class).error(ex.getMessage(), ex); 090 } 091 } 092 093 094 095 public static Image getImage(final String pathAndFileName) { 096 final URL url = Thread.currentThread().getContextClassLoader().getResource(pathAndFileName); 097 return Toolkit.getDefaultToolkit().getImage(url); 098 } 099 100 /** This method is called from within the constructor to 101 * initialize the form. 102 * WARNING: Do NOT modify this code. The content of this method is 103 * always regenerated by the Form Editor. 104 */ 105 @SuppressWarnings("unchecked") 106 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 107 private void initComponents() { 108 109 jLabelExporting = new javax.swing.JLabel(); 110 jTabbedPaneExport = new javax.swing.JTabbedPane(); 111 jPanelBasic = new javax.swing.JPanel(); 112 jButtonDown = new javax.swing.JButton(); 113 jButtonUp = new javax.swing.JButton(); 114 jTextFieldAvaliableFilter = new javax.swing.JTextField(); 115 jLabel3 = new javax.swing.JLabel(); 116 jLabel2 = new javax.swing.JLabel(); 117 jLabel1 = new javax.swing.JLabel(); 118 jButtonRemove = new javax.swing.JButton(); 119 jButtonAdd = new javax.swing.JButton(); 120 jScrollPane2 = new javax.swing.JScrollPane(); 121 jListExportTags = new javax.swing.JList(); 122 jScrollPane1 = new javax.swing.JScrollPane(); 123 jListAvaliableTags = new javax.swing.JList(); 124 jPanel2 = new javax.swing.JPanel(); 125 jScrollPane3 = new javax.swing.JScrollPane(); 126 jTextAreaTagList = new javax.swing.JTextArea(); 127 jLabel4 = new javax.swing.JLabel(); 128 jButtonExport = new javax.swing.JButton(); 129 jButtonCancel = new javax.swing.JButton(); 130 131 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 132 setTitle("Export Query Results"); 133 setMinimumSize(new java.awt.Dimension(679, 387)); 134 135 jLabelExporting.setIcon(new ImageIcon(getImage("ajax-loader.gif"))); 136 jLabelExporting.setText("Exporting..."); 137 138 jButtonDown.setText("Down"); 139 jButtonDown.addActionListener(new java.awt.event.ActionListener() { 140 public void actionPerformed(java.awt.event.ActionEvent evt) { 141 jButtonDownActionPerformed(evt); 142 } 143 }); 144 145 jButtonUp.setText("Up"); 146 jButtonUp.addActionListener(new java.awt.event.ActionListener() { 147 public void actionPerformed(java.awt.event.ActionEvent evt) { 148 jButtonUpActionPerformed(evt); 149 } 150 }); 151 152 jTextFieldAvaliableFilter.addKeyListener(new java.awt.event.KeyAdapter() { 153 public void keyReleased(java.awt.event.KeyEvent evt) { 154 jTextFieldAvaliableFilterKeyReleased(evt); 155 } 156 }); 157 158 jLabel3.setText("Tags for export:"); 159 160 jLabel2.setText("Avaliable Tags:"); 161 162 jLabel1.setText("Select Tags to use for export:"); 163 164 jButtonRemove.setText("<-"); 165 jButtonRemove.addActionListener(new java.awt.event.ActionListener() { 166 public void actionPerformed(java.awt.event.ActionEvent evt) { 167 jButtonRemoveActionPerformed(evt); 168 } 169 }); 170 171 jButtonAdd.setText("->"); 172 jButtonAdd.addActionListener(new java.awt.event.ActionListener() { 173 public void actionPerformed(java.awt.event.ActionEvent evt) { 174 jButtonAddActionPerformed(evt); 175 } 176 }); 177 178 jListExportTags.setSize(new java.awt.Dimension(39, 136)); 179 jScrollPane2.setViewportView(jListExportTags); 180 181 jScrollPane1.setViewportView(jListAvaliableTags); 182 183 org.jdesktop.layout.GroupLayout jPanelBasicLayout = new org.jdesktop.layout.GroupLayout(jPanelBasic); 184 jPanelBasic.setLayout(jPanelBasicLayout); 185 jPanelBasicLayout.setHorizontalGroup( 186 jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 187 .add(0, 992, Short.MAX_VALUE) 188 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 189 .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanelBasicLayout.createSequentialGroup() 190 .addContainerGap() 191 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) 192 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelBasicLayout.createSequentialGroup() 193 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 194 .add(jPanelBasicLayout.createSequentialGroup() 195 .add(jLabel2) 196 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 197 .add(jTextFieldAvaliableFilter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE)) 198 .add(org.jdesktop.layout.GroupLayout.TRAILING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)) 199 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 200 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 201 .add(jButtonAdd, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE) 202 .add(jButtonRemove, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE) 203 .add(jButtonUp, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE) 204 .add(jButtonDown, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)) 205 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 206 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 207 .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) 208 .add(jLabel3)) 209 .add(12, 12, 12)) 210 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelBasicLayout.createSequentialGroup() 211 .add(jLabel1) 212 .add(749, 749, 749))) 213 .addContainerGap())) 214 ); 215 jPanelBasicLayout.setVerticalGroup( 216 jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 217 .add(0, 461, Short.MAX_VALUE) 218 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 219 .add(jPanelBasicLayout.createSequentialGroup() 220 .addContainerGap() 221 .add(jLabel1) 222 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) 223 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelBasicLayout.createSequentialGroup() 224 .add(50, 50, 50) 225 .add(jButtonAdd) 226 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 227 .add(jButtonRemove) 228 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 182, Short.MAX_VALUE) 229 .add(jButtonUp) 230 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 231 .add(jButtonDown)) 232 .add(jPanelBasicLayout.createSequentialGroup() 233 .add(11, 11, 11) 234 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) 235 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelBasicLayout.createSequentialGroup() 236 .add(4, 4, 4) 237 .add(jLabel3) 238 .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) 239 .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 301, Short.MAX_VALUE)) 240 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelBasicLayout.createSequentialGroup() 241 .add(jPanelBasicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 242 .add(jLabel2) 243 .add(jTextFieldAvaliableFilter, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 244 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 245 .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE))))) 246 .add(79, 79, 79))) 247 ); 248 249 jTabbedPaneExport.addTab("Basic", jPanelBasic); 250 251 jTextAreaTagList.setColumns(20); 252 jTextAreaTagList.setRows(5); 253 jScrollPane3.setViewportView(jTextAreaTagList); 254 255 jLabel4.setText("Write Tags to use for export (one per line):"); 256 257 org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2); 258 jPanel2.setLayout(jPanel2Layout); 259 jPanel2Layout.setHorizontalGroup( 260 jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 261 .add(jPanel2Layout.createSequentialGroup() 262 .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 263 .add(jPanel2Layout.createSequentialGroup() 264 .add(35, 35, 35) 265 .add(jLabel4)) 266 .add(jPanel2Layout.createSequentialGroup() 267 .addContainerGap() 268 .add(jScrollPane3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 860, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) 269 .addContainerGap(126, Short.MAX_VALUE)) 270 ); 271 jPanel2Layout.setVerticalGroup( 272 jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 273 .add(jPanel2Layout.createSequentialGroup() 274 .add(jLabel4) 275 .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) 276 .add(jScrollPane3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 427, Short.MAX_VALUE) 277 .addContainerGap()) 278 ); 279 280 jTabbedPaneExport.addTab("Expert", jPanel2); 281 282 jButtonExport.setText("Export Data"); 283 jButtonExport.addActionListener(new java.awt.event.ActionListener() { 284 public void actionPerformed(java.awt.event.ActionEvent evt) { 285 jButtonExportActionPerformed(evt); 286 } 287 }); 288 289 jButtonCancel.setText("Cancel"); 290 jButtonCancel.addActionListener(new java.awt.event.ActionListener() { 291 public void actionPerformed(java.awt.event.ActionEvent evt) { 292 jButtonCancelActionPerformed(evt); 293 } 294 }); 295 296 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); 297 getContentPane().setLayout(layout); 298 layout.setHorizontalGroup( 299 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 300 .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() 301 .add(612, 612, 612) 302 .add(jLabelExporting) 303 .add(101, 101, 101) 304 .add(jButtonExport) 305 .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) 306 .add(jButtonCancel) 307 .add(29, 29, 29)) 308 .add(layout.createSequentialGroup() 309 .addContainerGap() 310 .add(jTabbedPaneExport, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 1013, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 311 .addContainerGap(32, Short.MAX_VALUE)) 312 ); 313 layout.setVerticalGroup( 314 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 315 .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() 316 .addContainerGap() 317 .add(jTabbedPaneExport, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 507, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 318 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 38, Short.MAX_VALUE) 319 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 320 .add(jButtonExport) 321 .add(jButtonCancel) 322 .add(jLabelExporting)) 323 .addContainerGap()) 324 ); 325 326 pack(); 327 }// </editor-fold>//GEN-END:initComponents 328 329 private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelActionPerformed 330 this.dispose(); 331 }//GEN-LAST:event_jButtonCancelActionPerformed 332 333 private void jButtonAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddActionPerformed 334 int index = jListAvaliableTags.getSelectedIndex(); 335 336 if (index == -1) 337 return; 338 339 // removes the selected element of the list of avaliable tags 340 DefaultListModel model = (DefaultListModel) jListAvaliableTags.getModel(); 341 String tagName = (String) model.getElementAt(index); 342 listAvaliable.remove(tagName); 343 updateAvaliableList(jTextFieldAvaliableFilter.getText()); 344 345 // inserts the element in the list of tags to be exported 346 model = (DefaultListModel) jListExportTags.getModel(); 347 model.addElement(tagName); 348 jListExportTags.setModel(model); 349 }//GEN-LAST:event_jButtonAddActionPerformed 350 351 private void jButtonRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRemoveActionPerformed 352 int index = jListExportTags.getSelectedIndex(); 353 354 if (index == -1) 355 return; 356 357 // removes the selected element of the list of export tags 358 DefaultListModel model = (DefaultListModel) jListExportTags.getModel(); 359 String tagName = (String) model.getElementAt(index); 360 model.remove(index); 361 jListExportTags.setModel(model); 362 363 // inserts the element in the list of avaliable tags 364 listAvaliable.add(tagName); 365 366 //sort the list of avaliable tags 367 Collections.sort(listAvaliable); 368 369 updateAvaliableList(jTextFieldAvaliableFilter.getText()); 370 }//GEN-LAST:event_jButtonRemoveActionPerformed 371 372 private void jButtonExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonExportActionPerformed 373 374 DefaultListModel list = (DefaultListModel) jListExportTags.getModel(); 375 376 //if(list.isEmpty()) 377 // return; 378 379 JFileChooser chooser = new JFileChooser(); 380 chooser.setCurrentDirectory(new File(".")); 381 chooser.setDialogTitle("Export File Name"); 382 383 chooser.setDialogType(JFileChooser.SAVE_DIALOG); 384 chooser.setAcceptAllFileFilterUsed(false); 385 chooser.setApproveButtonText("Save"); 386 387 FileFilter fileType = new ExtensionFilter("Comma-separated values", ".csv"); 388 389 chooser.setFileFilter(fileType); 390 391 if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){ 392 String filePath = chooser.getSelectedFile().toString(); 393 394 Enumeration<String> en = (Enumeration<String>) list.elements(); 395 ArrayList<String> tagList = new ArrayList<String>(); 396 if (jTabbedPaneExport.getSelectedIndex()==0) 397 { 398 399 // Basic 400 while(en.hasMoreElements()) 401 tagList.add(en.nextElement()); 402 } 403 else if (jTabbedPaneExport.getSelectedIndex()==1) 404 { 405 406 String text = jTextAreaTagList.getText(); 407 String [] arr = text.split("\n"); 408 409 for (String s:arr) 410 { 411 if (!s.isEmpty()) 412 { 413 tagList.add(s); 414 } 415 } 416 417 } 418 //System.out.println("Exporting with File Path: " + filePath); 419 420 try { 421 jLabelExporting.setVisible(true); 422 423 this.eds = new ExportDataSupport(query, origins, keywords, tagList, filePath); 424 //eds.addObserver(this); 425 this.eds.InitiateExport(this); 426 jListAvaliableTags.setEnabled(false); 427 jListExportTags.setEnabled(false); 428 jButtonAdd.setEnabled(false); 429 jButtonRemove.setEnabled(false); 430 jButtonExport.setEnabled(false); 431 jButtonCancel.setEnabled(false); 432 433 } catch (Exception ex) { 434 LoggerFactory.getLogger(ExportData.class).error(ex.getMessage(), ex); 435 } 436 } 437 }//GEN-LAST:event_jButtonExportActionPerformed 438 439 private void jTextFieldAvaliableFilterKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldAvaliableFilterKeyReleased 440 updateAvaliableList(jTextFieldAvaliableFilter.getText()); 441 }//GEN-LAST:event_jTextFieldAvaliableFilterKeyReleased 442 443 private void jButtonUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonUpActionPerformed 444 int index = jListExportTags.getSelectedIndex(); 445 446 if(index > 0){ 447 DefaultListModel model = (DefaultListModel) jListExportTags.getModel(); 448 Object element1 = model.getElementAt(index-1); 449 Object element2 = model.getElementAt(index); 450 451 model.set(index, element1); 452 model.set(index-1, element2); 453 454 jListExportTags.setModel(model); 455 jListExportTags.setSelectedIndex(index-1); 456 } 457 }//GEN-LAST:event_jButtonUpActionPerformed 458 459 private void jButtonDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDownActionPerformed 460 int index = jListExportTags.getSelectedIndex(); 461 DefaultListModel model = (DefaultListModel) jListExportTags.getModel(); 462 463 if(index > -1 && index < model.size()){ 464 465 Object element1 = model.getElementAt(index); 466 Object element2 = model.getElementAt(index+1); 467 468 model.set(index+1, element1); 469 model.set(index, element2); 470 471 jListExportTags.setModel(model); 472 jListExportTags.setSelectedIndex(index+1); 473 } 474 }//GEN-LAST:event_jButtonDownActionPerformed 475 476 // Variables declaration - do not modify//GEN-BEGIN:variables 477 private javax.swing.JButton jButtonAdd; 478 private javax.swing.JButton jButtonCancel; 479 private javax.swing.JButton jButtonDown; 480 private javax.swing.JButton jButtonExport; 481 private javax.swing.JButton jButtonRemove; 482 private javax.swing.JButton jButtonUp; 483 private javax.swing.JLabel jLabel1; 484 private javax.swing.JLabel jLabel2; 485 private javax.swing.JLabel jLabel3; 486 private javax.swing.JLabel jLabel4; 487 private javax.swing.JLabel jLabelExporting; 488 private javax.swing.JList jListAvaliableTags; 489 private javax.swing.JList jListExportTags; 490 private javax.swing.JPanel jPanel2; 491 private javax.swing.JPanel jPanelBasic; 492 private javax.swing.JScrollPane jScrollPane1; 493 private javax.swing.JScrollPane jScrollPane2; 494 private javax.swing.JScrollPane jScrollPane3; 495 private javax.swing.JTabbedPane jTabbedPaneExport; 496 private javax.swing.JTextArea jTextAreaTagList; 497 private javax.swing.JTextField jTextFieldAvaliableFilter; 498 // End of variables declaration//GEN-END:variables 499 500 501 /** 502 * Fill the list of avaliable tags and the default list of export tags with DIM Fields 503 */ 504 private void fillLists(){ 505 DefaultListModel listModel = new DefaultListModel(); 506 507 ArrayList<TagValue> list = new ArrayList<TagValue>( dimFields.values()); 508 ArrayList<String> listDIM = new ArrayList<String>(); 509 510 for(TagValue tag : list) 511 listDIM.add(tag.getAlias()); 512 513 Collections.sort(listDIM); 514 515 for(String tag : listDIM) 516 listModel.addElement(tag); 517 518 jListExportTags.setModel(listModel); 519 520 521 ArrayList<String> listTags = new ArrayList<String>(tags.keySet()); 522 listAvaliable = new ArrayList<String>(); 523 524 for(String tag: listTags) 525 if(!listDIM.contains(tag)) 526 listAvaliable.add(tag); 527 528 listAvaliable.add("FileName"); 529 listAvaliable.add("FilePath"); 530 531 //sort the list of avaliable tags 532 Collections.sort(listAvaliable); 533 534 updateAvaliableList(null); 535 } 536 537 @Override 538 public void update(Observable o, Object arg) { 539 if (o==null) 540 { 541 LoggerFactory.getLogger(ExportData.class).error("Update invoked with null o"); 542 return; 543 } 544 LoggerFactory.getLogger(ExportData.class).debug("Update"); 545 Boolean finish = (Boolean) arg; 546 547 class AuxThread extends Thread 548 { 549 private javax.swing.JFrame t; 550 public void set(javax.swing.JFrame t) 551 { 552 this.t = t; 553 } 554 555 @Override 556 public void run() 557 { 558 559 JOptionPane.showMessageDialog(t, "Query results successfully exported!", "Export Query Results", JOptionPane.INFORMATION_MESSAGE); 560 t.dispose(); 561 } 562 }; 563 564 if (finish) 565 { 566 AuxThread _thread = new AuxThread(); 567 _thread.set(this); 568 _thread.start(); 569 570 this.setVisible(false); 571 } 572 } 573 574 /** 575 * Update the avaliable tags jList based on a String prefix to filter tags 576 * If you don't want to filter anything, send the prefix NULL or "" (empty string) 577 * 578 * @param prefix - string with the start of tag name to filter 579 */ 580 private void updateAvaliableList(String prefix){ 581 DefaultListModel listModel = new DefaultListModel(); 582 583 for(String tag: listAvaliable){ 584 if(prefix != null && !prefix.equals("")){ 585 if(tag.toLowerCase().startsWith(prefix.toLowerCase())) 586 listModel.addElement(tag); 587 } 588 else 589 listModel.addElement(tag); 590 } 591 592 jListAvaliableTags.setModel(listModel); 593 } 594 595}