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/* 021 * MainWindow.java 022 * 023 * Created on 9 de Novembro de 2007, 11:25 024 */ 025package pt.ua.dicoogle.rGUI.client.windows; 026 027import org.apache.commons.codec.binary.Base64; 028import org.jvnet.substance.SubstanceLookAndFeel; 029import org.jvnet.substance.skin.*; 030import org.slf4j.LoggerFactory; 031import pt.ua.dicoogle.Main; 032import pt.ua.dicoogle.core.ClientSettings; 033import pt.ua.dicoogle.core.QueryHistorySupport; 034import pt.ua.dicoogle.plugins.NetworkMember; 035import pt.ua.dicoogle.plugins.PluginController; 036import pt.ua.dicoogle.rGUI.RFileBrowser.FileAction; 037import pt.ua.dicoogle.rGUI.RFileBrowser.RemoteFile; 038import pt.ua.dicoogle.rGUI.RFileBrowser.RemoteFileChooser; 039import pt.ua.dicoogle.rGUI.client.AdminRefs; 040import pt.ua.dicoogle.rGUI.client.ClientCore; 041import pt.ua.dicoogle.rGUI.client.UIHelper.DisplayJAI; 042import pt.ua.dicoogle.rGUI.client.UIHelper.OSXAdapter; 043import pt.ua.dicoogle.rGUI.client.UIHelper.Result2Tree; 044import pt.ua.dicoogle.rGUI.client.UIHelper.TrayIconCreator; 045import pt.ua.dicoogle.rGUI.client.UserRefs; 046import pt.ua.dicoogle.rGUI.fileTransfer.FileReceiver; 047import pt.ua.dicoogle.rGUI.fileTransfer.TransferStatus; 048import pt.ua.dicoogle.rGUI.server.controllers.PluginController4user; 049import pt.ua.dicoogle.sdk.datastructs.SearchResult; 050import pt.ua.dicoogle.sdk.task.JointQueryTask; 051import pt.ua.dicoogle.sdk.task.Task; 052import pt.ua.dicoogle.utils.Dicom2JPEG; 053 054import javax.imageio.ImageIO; 055import javax.swing.GroupLayout.Group; 056import javax.swing.GroupLayout.ParallelGroup; 057import javax.swing.GroupLayout.SequentialGroup; 058import javax.swing.*; 059import javax.swing.tree.DefaultMutableTreeNode; 060import javax.swing.tree.DefaultTreeModel; 061import javax.swing.tree.TreePath; 062import javax.swing.tree.TreeSelectionModel; 063import java.awt.*; 064import java.awt.event.KeyEvent; 065import java.awt.event.MouseEvent; 066import java.awt.image.RenderedImage; 067import java.io.ByteArrayInputStream; 068import java.io.File; 069import java.io.IOException; 070import java.net.URL; 071import java.rmi.RemoteException; 072import java.text.SimpleDateFormat; 073import java.util.AbstractMap.SimpleEntry; 074import java.util.*; 075import java.util.List; 076import java.util.concurrent.ExecutionException; 077import java.util.concurrent.Semaphore; 078 079/** 080 * Dicoogle GUI Main form 081 * 082 * @author Filipe Freitas 083 * @author Luís A. Bastião Silva <bastiao@ua.pt> 084 * @author Marco Pereira 085 * @author João Pereira 086 * @author Samuel Campos <samuelcampos@ua.pt> 087 * @author Carlos Ferreira <c.ferreira@ua.pt> 088 * @author Frederico Valente 089 */ 090@Deprecated 091public class MainWindow extends javax.swing.JFrame { 092 093 private Result2Tree searchTree; 094 private static MainWindow instance = null; 095 private static Semaphore sem = new Semaphore(1, true); 096 private ClientCore clientCore; 097 //private DefaultMutableTreeNode top = null; 098 099 /* 100 * Information about last query executed 101 * It is usefull to the Export Module 102 */ 103 private String lastQueryExecuted; 104 private boolean lastQueryKeywords; 105 private boolean lastQueryAdvanced; 106 private ArrayList<javax.swing.JCheckBox> ranges; 107 108 //a popup menu for plugin extension on retrieved results 109 private JPopupMenu popupMenu = new JPopupMenu(); 110 111 public static synchronized MainWindow getInstance() { 112 try { 113 sem.acquire(); 114 if (instance == null) { 115 instance = new MainWindow(); 116 } 117 sem.release(); 118 } catch (InterruptedException ex) { 119 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 120 } 121 return instance; 122 } 123 124 public static Image getImage(final String pathAndFileName) { 125 final URL url = Thread.currentThread().getContextClassLoader().getResource(pathAndFileName); 126 return Toolkit.getDefaultToolkit().getImage(url); 127 } 128 private final TaskList taskList; 129 130 /** 131 * Creates new form MainWindow 132 */ 133 private MainWindow() { 134 ranges = new ArrayList<>(); 135 List<String> names = null; 136 try { 137 names = PluginController4user.getInstance().getPluginNames(); 138 for (String name : names) { 139 JCheckBox newJCB = new JCheckBox(name); 140 if (PluginController4user.getInstance().isLocalPlugin(name)) { 141 newJCB.setSelected(true); 142 } 143 this.ranges.add(newJCB); 144 } 145 } catch (RemoteException ex) { 146 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 147 } 148 149 initComponents(); 150 151 javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); 152 jPanel6.setLayout(jPanel6Layout); 153 SequentialGroup groupBoxesH = jPanel6Layout.createSequentialGroup().addComponent(jLabel2); 154 ParallelGroup groupBoxesV = jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel2); 155 156 for (JCheckBox cbox : this.ranges) { 157 groupBoxesH.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(cbox); 158 groupBoxesV.addComponent(cbox); 159 } 160 161 Group groupH = jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). 162 addGroup(groupBoxesH.addContainerGap(10, Short.MAX_VALUE)); 163 164 Group groupV = jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel6Layout.createSequentialGroup().addGroup(groupBoxesV).addContainerGap(5, Short.MAX_VALUE)); 165 166 jPanel6Layout.setHorizontalGroup(groupH); 167 jPanel6Layout.setVerticalGroup(groupV); 168 169 Image image = getImage("trayicon.gif"); 170 this.setIconImage(image); 171 172 clientCore = ClientCore.getInstance(); 173 174 if (!clientCore.isAdmin()) { 175 jMenu10.setVisible(false); 176 jMenuItemShutdown.setVisible(false); 177 jMenuDirScan2.setVisible(false); 178 179 //jPanel8.setVisible(false); 180 jButtonServices.setVisible(false); 181 jButtonPreferences.setVisible(false); 182 jButtonLogs.setVisible(false); 183 } 184 185 if (!clientCore.isUser()) { 186 jPanel5.setVisible(false); 187 jButtonClientPreferences.setVisible(false); 188 } else { 189 searchTree = Result2Tree.getInstance(); 190 } 191 192 if (Main.isFixedClient()) { 193 jMenuItemShutdown.setVisible(false); 194 195 } else { 196 jMenuItem7.setVisible(false); 197 } 198 199 jLabelResults.setText("Enter your terms and hit the button."); 200 SelectDefaultSearch.setSelected(true); 201 SelectAdvancedSearch.setSelected(false); 202 jPanel2.setVisible(false); 203 ModalSelectNone.setSelected(false); 204 ModalSelectAll.setSelected(true); 205 ModalCR.setSelected(true); 206 ModalCT.setSelected(true); 207 ModalDX.setSelected(true); 208 ModalES.setSelected(true); 209 ModalMG.setSelected(true); 210 ModalMR.setSelected(true); 211 ModalNM.setSelected(true); 212 ModalOT.setSelected(true); 213 ModalPT.setSelected(true); 214 ModalRF.setSelected(true); 215 ModalSC.setSelected(true); 216 ModalUS.setSelected(true); 217 ModalXA.setSelected(true); 218 219 StudyDateRangeInitialBoundary.setEnabled(false); 220 StudyDateRangeTerminalBoundary.setEnabled(false); 221 DateRange.setSelected(false); 222 ExactDate.setSelected(true); 223 224 StudyDateRangeInitialBoundaryActivation.setEnabled(false); 225 StudyDateRangeTerminalBoundaryActivation.setEnabled(false); 226 StudyDateRangeInitialBoundary.setEnabled(false); 227 StudyDateRangeTerminalBoundary.setEnabled(false); 228 229 //tree view init 230 jTreeResults.setModel(new DefaultTreeModel(Result2Tree.getInstance().getTop())); 231 jTreeResults.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 232 233 jButtonDownload.setEnabled(false); 234 jButtonView.setEnabled(false); 235 jButtonDump.setEnabled(false); 236 this.resizeWindow(); 237 registerForMacOSXEvents(); 238 centerWindow(); 239 240////////////////////////////////////////////////////////////// 241 /** 242 * This search is needed to autocomplete 243 */ 244 /* 245 QueryResults q = new QueryResults("*:*"); 246 247 248 List<String> items = q.getFields(); 249 250 251 252 boolean strictMatching = false; 253 AutoCompleteDecorator.decorate(jTextFieldQuery, items, strictMatching); 254 * 255 */ 256 //plugins v2 257 try { 258 List<JPanel> panels = PluginController4user.getInstance().getTabPanels(); 259 if (panels != null) { 260 for (JPanel panel : panels) { 261 tabPanel.add(panel); 262 } 263 } 264 } catch (RemoteException ex) { 265 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 266 } 267 268 try { 269 List<JMenuItem> menus = PluginController4user.getInstance().getPluginMenus(); 270 if (menus != null) { 271 for (JMenuItem menu : menus) { 272 pluginMenu.add(menu); 273 } 274 } 275 } catch (RemoteException ex) { 276 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 277 } 278 279 try { 280 System.err.println("Checking for plugins requiring gui expansion.,."); 281 List<JMenuItem> items = PluginController4user.getInstance().getRightButtonItems(); 282 if (items != null) { 283 for (JMenuItem item : items) { 284 popupMenu.add(item); 285 } 286 } 287 } catch (RemoteException ex) { 288 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 289 } 290 291 taskList = new TaskList(); 292 taskList.setName("Task Progress"); 293 tabPanel.add(taskList); 294 295 } 296 297 /** 298 * Center the main Window taking into account the Screen Size 299 */ 300 private void centerWindow() { 301 // Positions the window in the center of screen 302 int width = this.getWidth(); 303 int height = this.getHeight(); 304 Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 305 int x = (screen.width - width) / 2; 306 int y = (screen.height - height) / 2; 307 setBounds(x, y, width, height); 308 } 309 310 private void resizeWindow() { 311 Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 312 this.setSize(screen.width - 30, screen.height - 50); 313 } 314 315 /** 316 * Register the Events to Quit and About if Dicoogle is running on Mac_OSX 317 */ 318 private void registerForMacOSXEvents() { 319 if (Main.MAC_OS_X) { 320 try { 321 //System.out.println("Registering MAC_OSX Events"); 322 323 // Generate and register the OSXAdapter, passing it a hash of all the methods we wish to 324 // use as delegates for various com.apple.eawt.ApplicationListener methods 325 if (Main.isFixedClient()) { 326 OSXAdapter.setQuitHandler(this, getClass().getDeclaredMethod("exit", (Class[]) null)); 327 } else { 328 OSXAdapter.setQuitHandler(this, getClass().getDeclaredMethod("exitClient", (Class[]) null)); 329 } 330 331 OSXAdapter.setAboutHandler(this, getClass().getDeclaredMethod("about", (Class[]) null)); 332 //OSXAdapter.setPreferencesHandler(this, getClass().getDeclaredMethod("preferences", (Class[])null)); 333 //OSXAdapter.setFileHandler(this, getClass().getDeclaredMethod("loadImageFile", new Class[] { String.class })); 334 335 } catch (Exception e) { 336 System.err.println("Error while loading the OSXAdapter:"); 337 e.printStackTrace(); 338 } 339 } 340 } 341 342 public void exit() { 343 jMenuItem1ActionPerformed(null); 344 } 345 346 public void exitClient() { 347 jMenuItem11ActionPerformed(null); 348 } 349 350 public void about() { 351 jMenuItem3ActionPerformed(null); 352 } 353 354 /** 355 * ************************************************ 356 * Private Methods 357 ************************************************* 358 */ 359 /** 360 * Stops the window from minimizing to tray while in options screen 361 */ 362 private void showOptions() { 363 } 364 365 private void cleanThumbnails() { 366// Result2Tree.showImage("Image Thumbnail", null, jPanelThumbnail); 367 jPanelThumbnail.setSize(64, 64); 368 repaint(); 369 return; 370 } 371 372 /** 373 * * @author Joaoffr <joaoffr@ua.pt> 374 * * @author DavidP <davidp@ua.pt> 375 * @param t 376 * @return 377 */ 378 private String convMillisToTimeString(long t) { 379 long milis = t % 1000; 380 t /= 1000; 381 long segs = t % 60; 382 t /= 60; 383 long mins = t % 60; 384 t /= 60; 385 long hours = t % 60; 386 t /= 24; 387 long days = t; 388 389 return String.format("%d:%02d:%02d:%02d", days, hours, mins, segs); 390 } 391 392 private void dcm2JPEG(int thumbnailSize) { 393 394 /** 395 * Why couldn't? It works! 396 * 397 * if (System.getProperty("os.name").toUpperCase().indexOf("MAC OS") != 398 * -1) { JOptionPane.showMessageDialog(this, "Operation Not Available to 399 * MAC OS.", "Missing JAI Tool", JOptionPane.WARNING_MESSAGE); return; } 400 */ 401 String pathDir = "."; 402 403 JFileChooser chooser = new JFileChooser(); 404 chooser.setCurrentDirectory(new java.io.File(pathDir)); 405 chooser.setDialogTitle("Dicoogle Dcm2JPG - Select DICOM File"); 406 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 407 //chooser.setFileFilter(arg0) 408 chooser.setAcceptAllFileFilterUsed(false); 409 410 if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { 411 File filePath = new File(chooser.getSelectedFile().toString()); 412 if (filePath.exists() && filePath.isFile() && filePath.canRead()) { 413 File jpgFile = new File(filePath.getAbsolutePath() + ".jpg"); 414 Dicom2JPEG.convertDicom2Jpeg(filePath, jpgFile, thumbnailSize); 415 } 416 } 417 } 418 419 /** 420 * @return ArrayList<String> with selected items in the tree 421 */ 422 private ArrayList<String> getSelectedLocalFiles() { 423 ArrayList<String> files = new ArrayList<String>(); 424 425 TreePath path = jTreeResults.getSelectionPath(); 426 427 // Tree Root is not permited 428 if (path == null || path.getPathCount() < 2) { 429 return null; 430 } 431 432 jTreeResults.expandPath(path); 433 434 if (path != null) { 435 DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); 436 437 // recieves all childs 438 ArrayList<DefaultMutableTreeNode> childs = getLocalLeafs(node, path); 439 440 Iterator<DefaultMutableTreeNode> it = childs.iterator(); 441 442 // converts TreeNodes to filePaths 443 while (it.hasNext()) { 444 Object obj = it.next().getUserObject(); 445 446 if (SearchResult.class.isInstance(obj)) { 447 files.add(obj.toString()); 448 } 449 } 450 } 451 452 return files; 453 } 454 455 private ArrayList<DefaultMutableTreeNode> getLocalLeafs(DefaultMutableTreeNode node, TreePath path) { 456 ArrayList<DefaultMutableTreeNode> list = new ArrayList<DefaultMutableTreeNode>(); 457 TreePath temp; 458 459 if (node.isLeaf()) { 460 list.add(node); 461 } else { 462 Enumeration<DefaultMutableTreeNode> en = node.children(); 463 464 while (en.hasMoreElements()) { 465 DefaultMutableTreeNode elem = en.nextElement(); 466 467 temp = path.pathByAddingChild(elem); 468 jTreeResults.expandPath(temp); 469 470 list.addAll(getLocalLeafs(elem, temp)); 471 } 472 } 473 474 return list; 475 } 476 477 /** 478 * This method is called from within the constructor to initialize the form. 479 * WARNING: Do NOT modify this code. The content of this method is always 480 * regenerated by the Form Editor. 481 */ 482 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 483 private void initComponents() { 484 485 tabPanel = new javax.swing.JTabbedPane(); 486 jScrollPane2 = new javax.swing.JScrollPane(); 487 jPanel5 = new javax.swing.JPanel(); 488 SelectAdvancedSearch = new javax.swing.JRadioButton(); 489 SelectDefaultSearch = new javax.swing.JRadioButton(); 490 jLabel5 = new javax.swing.JLabel(); 491 jPanel2 = new javax.swing.JPanel(); 492 jLabel7 = new javax.swing.JLabel(); 493 jLabel8 = new javax.swing.JLabel(); 494 jLabel9 = new javax.swing.JLabel(); 495 jLabel10 = new javax.swing.JLabel(); 496 jLabel11 = new javax.swing.JLabel(); 497 OperatorName = new javax.swing.JTextField(); 498 Physician = new javax.swing.JTextField(); 499 PatientGender = new javax.swing.JComboBox(); 500 PatientName = new javax.swing.JTextField(); 501 InstitutionName = new javax.swing.JTextField(); 502 jPanel3 = new javax.swing.JPanel(); 503 ModalCR = new javax.swing.JCheckBox(); 504 ModalMG = new javax.swing.JCheckBox(); 505 ModalPT = new javax.swing.JCheckBox(); 506 ModalCT = new javax.swing.JCheckBox(); 507 ModalMR = new javax.swing.JCheckBox(); 508 ModalRF = new javax.swing.JCheckBox(); 509 ModalDX = new javax.swing.JCheckBox(); 510 ModalNM = new javax.swing.JCheckBox(); 511 ModalSC = new javax.swing.JCheckBox(); 512 ModalES = new javax.swing.JCheckBox(); 513 ModalOT = new javax.swing.JCheckBox(); 514 ModalUS = new javax.swing.JCheckBox(); 515 ModalXA = new javax.swing.JCheckBox(); 516 jLabel14 = new javax.swing.JLabel(); 517 ModalSelectAll = new javax.swing.JRadioButton(); 518 ModalSelectNone = new javax.swing.JRadioButton(); 519 jLabel19 = new javax.swing.JLabel(); 520 jLabel20 = new javax.swing.JLabel(); 521 PatientID = new javax.swing.JTextField(); 522 AdvancedSearchButton = new javax.swing.JButton(); 523 ResetFields = new javax.swing.JButton(); 524 jPanel4 = new javax.swing.JPanel(); 525 StudyDateRangeInitialBoundaryActivation = new javax.swing.JCheckBox(); 526 StudyDateRangeInitialBoundary = new javax.swing.JTextField(); 527 jLabel16 = new javax.swing.JLabel(); 528 StudyDateRangeTerminalBoundaryActivation = new javax.swing.JCheckBox(); 529 StudyDateRangeTerminalBoundary = new javax.swing.JTextField(); 530 StudyDate = new javax.swing.JTextField(); 531 jLabel13 = new javax.swing.JLabel(); 532 jLabel15 = new javax.swing.JLabel(); 533 jLabel12 = new javax.swing.JLabel(); 534 jLabel4 = new javax.swing.JLabel(); 535 ExactDate = new javax.swing.JRadioButton(); 536 DateRange = new javax.swing.JRadioButton(); 537 jLabel17 = new javax.swing.JLabel(); 538 jPanel1 = new javax.swing.JPanel(); 539 jLabel1 = new javax.swing.JLabel(); 540 jLabel3 = new javax.swing.JLabel(); 541 jTextFieldQuery = new javax.swing.JTextField(); 542 jButtonSearch = new javax.swing.JButton(); 543 SearchTips = new javax.swing.JButton(); 544 jCheckBoxKeywords = new javax.swing.JCheckBox(); 545 jButtonQueryHistory = new javax.swing.JButton(); 546 jPanel9 = new javax.swing.JPanel(); 547 jButtonSend = new javax.swing.JButton(); 548 jLabelResults = new javax.swing.JLabel(); 549 jButtonDump = new javax.swing.JButton(); 550 jButtonDownload = new javax.swing.JButton(); 551 jLabelTime = new javax.swing.JLabel(); 552 jLabel22 = new javax.swing.JLabel(); 553 jButtonView = new javax.swing.JButton(); 554 jPanelThumbnail = new javax.swing.JPanel(); 555 jButtonExport = new javax.swing.JButton(); 556 jScrollPane1 = new javax.swing.JScrollPane(); 557 jTreeResults = new javax.swing.JTree(); 558 jPanel6 = new javax.swing.JPanel(); 559 jLabel2 = new javax.swing.JLabel(); 560 jSeparator1 = new javax.swing.JSeparator(); 561 jSeparator2 = new javax.swing.JSeparator(); 562 jSplitPane1 = new javax.swing.JSplitPane(); 563 jPanel8 = new javax.swing.JPanel(); 564 jButtonServices = new javax.swing.JButton(); 565 jButtonPreferences = new javax.swing.JButton(); 566 jSeparator3 = new javax.swing.JSeparator(); 567 jButtonLogs = new javax.swing.JButton(); 568 jButtonPeers = new javax.swing.JButton(); 569 jButtonClientPreferences = new javax.swing.JButton(); 570 jMenuBar3 = new javax.swing.JMenuBar(); 571 jMenu9 = new javax.swing.JMenu(); 572 jMenuItemChangePassword = new javax.swing.JMenuItem(); 573 jMenuDirScan2 = new javax.swing.JMenuItem(); 574 jMenuDirScanResume = new javax.swing.JMenuItem(); 575 jMenuItemShutdown = new javax.swing.JMenuItem(); 576 jMenuItem11 = new javax.swing.JMenuItem(); 577 jMenuItem7 = new javax.swing.JMenuItem(); 578 jMenu10 = new javax.swing.JMenu(); 579 jMenuItemPreferences = new javax.swing.JMenuItem(); 580 jMenuItemServices = new javax.swing.JMenuItem(); 581 jMenuItem10 = new javax.swing.JMenuItem(); 582 jMenuItemUsers = new javax.swing.JMenuItem(); 583 jMenuItemActiveUsers = new javax.swing.JMenuItem(); 584 jMenuTools2 = new javax.swing.JMenu(); 585 jMenuItemDcm2jpeg2 = new javax.swing.JMenuItem(); 586 jMenu11 = new javax.swing.JMenu(); 587 jMenuItem1 = new javax.swing.JMenuItem(); 588 jMenuItem2 = new javax.swing.JMenuItem(); 589 jMenuItem3 = new javax.swing.JMenuItem(); 590 jMenuItem4 = new javax.swing.JMenuItem(); 591 jMenuItem5 = new javax.swing.JMenuItem(); 592 jMenuItem6 = new javax.swing.JMenuItem(); 593 jMenuItem8 = new javax.swing.JMenuItem(); 594 pluginMenu = new javax.swing.JMenu(); 595 jMenu12 = new javax.swing.JMenu(); 596 jMenuItem9 = new javax.swing.JMenuItem(); 597 598 setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); 599 setTitle("Dicoogle PACS Archive"); 600 setMinimumSize(new java.awt.Dimension(700, 526)); 601 setName("MainWindow"); // NOI18N 602 addWindowListener(new java.awt.event.WindowAdapter() { 603 public void windowOpened(java.awt.event.WindowEvent evt) { 604 formWindowOpened(evt); 605 } 606 public void windowClosing(java.awt.event.WindowEvent evt) { 607 formWindowClosing(evt); 608 } 609 public void windowIconified(java.awt.event.WindowEvent evt) { 610 formWindowIconified(evt); 611 } 612 public void windowDeiconified(java.awt.event.WindowEvent evt) { 613 formWindowDeiconified(evt); 614 } 615 }); 616 617 jScrollPane2.setPreferredSize(new java.awt.Dimension(602, 602)); 618 619 jPanel5.setMaximumSize(new java.awt.Dimension(1197, 100)); 620 jPanel5.setPreferredSize(new java.awt.Dimension(1197, 100)); 621 622 SelectAdvancedSearch.setText("Advanced search"); 623 SelectAdvancedSearch.addActionListener(new java.awt.event.ActionListener() { 624 public void actionPerformed(java.awt.event.ActionEvent evt) { 625 SelectAdvancedSearchActionPerformed(evt); 626 } 627 }); 628 629 SelectDefaultSearch.setText("Default search"); 630 SelectDefaultSearch.addActionListener(new java.awt.event.ActionListener() { 631 public void actionPerformed(java.awt.event.ActionEvent evt) { 632 SelectDefaultSearchActionPerformed(evt); 633 } 634 }); 635 636 jLabel5.setText("Search type:"); 637 638 jLabel7.setText("Patient Name:"); 639 640 jLabel8.setText("Patient Gender:"); 641 642 jLabel9.setText("Institution Name:"); 643 644 jLabel10.setText("Physician:"); 645 646 jLabel11.setText("Operator Name:"); 647 648 OperatorName.setText("(All operators)"); 649 650 Physician.setText("(All physicians)"); 651 652 PatientGender.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "All", "Male", "Female" })); 653 654 PatientName.setText("(All patients)"); 655 656 InstitutionName.setText("(All institutions)"); 657 658 ModalCR.setText("CR"); 659 ModalCR.addActionListener(new java.awt.event.ActionListener() { 660 public void actionPerformed(java.awt.event.ActionEvent evt) { 661 ModalCRActionPerformed(evt); 662 } 663 }); 664 665 ModalMG.setText("MG"); 666 ModalMG.addActionListener(new java.awt.event.ActionListener() { 667 public void actionPerformed(java.awt.event.ActionEvent evt) { 668 ModalMGActionPerformed(evt); 669 } 670 }); 671 672 ModalPT.setText("PT"); 673 ModalPT.addActionListener(new java.awt.event.ActionListener() { 674 public void actionPerformed(java.awt.event.ActionEvent evt) { 675 ModalPTActionPerformed(evt); 676 } 677 }); 678 679 ModalCT.setText("CT"); 680 ModalCT.addActionListener(new java.awt.event.ActionListener() { 681 public void actionPerformed(java.awt.event.ActionEvent evt) { 682 ModalCTActionPerformed(evt); 683 } 684 }); 685 686 ModalMR.setText("MR"); 687 ModalMR.addActionListener(new java.awt.event.ActionListener() { 688 public void actionPerformed(java.awt.event.ActionEvent evt) { 689 ModalMRActionPerformed(evt); 690 } 691 }); 692 693 ModalRF.setText("RF"); 694 ModalRF.addActionListener(new java.awt.event.ActionListener() { 695 public void actionPerformed(java.awt.event.ActionEvent evt) { 696 ModalRFActionPerformed(evt); 697 } 698 }); 699 700 ModalDX.setText("DX"); 701 ModalDX.addActionListener(new java.awt.event.ActionListener() { 702 public void actionPerformed(java.awt.event.ActionEvent evt) { 703 ModalDXActionPerformed(evt); 704 } 705 }); 706 707 ModalNM.setText("NM"); 708 ModalNM.addActionListener(new java.awt.event.ActionListener() { 709 public void actionPerformed(java.awt.event.ActionEvent evt) { 710 ModalNMActionPerformed(evt); 711 } 712 }); 713 714 ModalSC.setText("SC"); 715 ModalSC.addActionListener(new java.awt.event.ActionListener() { 716 public void actionPerformed(java.awt.event.ActionEvent evt) { 717 ModalSCActionPerformed(evt); 718 } 719 }); 720 721 ModalES.setText("ES"); 722 ModalES.addActionListener(new java.awt.event.ActionListener() { 723 public void actionPerformed(java.awt.event.ActionEvent evt) { 724 ModalESActionPerformed(evt); 725 } 726 }); 727 728 ModalOT.setText("OT"); 729 ModalOT.addActionListener(new java.awt.event.ActionListener() { 730 public void actionPerformed(java.awt.event.ActionEvent evt) { 731 ModalOTActionPerformed(evt); 732 } 733 }); 734 735 ModalUS.setText("US"); 736 ModalUS.addActionListener(new java.awt.event.ActionListener() { 737 public void actionPerformed(java.awt.event.ActionEvent evt) { 738 ModalUSActionPerformed(evt); 739 } 740 }); 741 742 ModalXA.setText("XA"); 743 ModalXA.addActionListener(new java.awt.event.ActionListener() { 744 public void actionPerformed(java.awt.event.ActionEvent evt) { 745 ModalXAActionPerformed(evt); 746 } 747 }); 748 749 jLabel14.setText("Modality:"); 750 751 ModalSelectAll.setText("Select all"); 752 ModalSelectAll.addActionListener(new java.awt.event.ActionListener() { 753 public void actionPerformed(java.awt.event.ActionEvent evt) { 754 ModalSelectAllActionPerformed(evt); 755 } 756 }); 757 758 ModalSelectNone.setText("Select none"); 759 ModalSelectNone.addActionListener(new java.awt.event.ActionListener() { 760 public void actionPerformed(java.awt.event.ActionEvent evt) { 761 ModalSelectNoneActionPerformed(evt); 762 } 763 }); 764 765 javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); 766 jPanel3.setLayout(jPanel3Layout); 767 jPanel3Layout.setHorizontalGroup( 768 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 769 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() 770 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 771 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 772 .addGroup(jPanel3Layout.createSequentialGroup() 773 .addComponent(jLabel14) 774 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 775 .addComponent(ModalSelectAll) 776 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 777 .addComponent(ModalSelectNone)) 778 .addGroup(jPanel3Layout.createSequentialGroup() 779 .addGap(6, 6, 6) 780 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 781 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 782 .addComponent(ModalDX) 783 .addComponent(ModalCT)) 784 .addComponent(ModalCR)) 785 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 786 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 787 .addComponent(ModalMG) 788 .addComponent(ModalNM) 789 .addComponent(ModalMR)) 790 .addGap(6, 6, 6) 791 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 792 .addComponent(ModalPT) 793 .addComponent(ModalSC) 794 .addComponent(ModalRF)) 795 .addGap(12, 12, 12) 796 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 797 .addComponent(ModalUS) 798 .addComponent(ModalXA) 799 .addComponent(ModalOT)) 800 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 801 .addComponent(ModalES))) 802 .addGap(202, 202, 202)) 803 ); 804 jPanel3Layout.setVerticalGroup( 805 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 806 .addGroup(jPanel3Layout.createSequentialGroup() 807 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 808 .addComponent(jLabel14) 809 .addComponent(ModalSelectAll) 810 .addComponent(ModalSelectNone)) 811 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 812 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 813 .addComponent(ModalPT) 814 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 815 .addComponent(ModalMG) 816 .addComponent(ModalCR, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)) 817 .addComponent(ModalXA) 818 .addComponent(ModalES)) 819 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 820 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 821 .addComponent(ModalUS, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) 822 .addComponent(ModalRF) 823 .addComponent(ModalMR) 824 .addComponent(ModalCT)) 825 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 826 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 827 .addComponent(ModalOT) 828 .addComponent(ModalSC) 829 .addComponent(ModalNM) 830 .addComponent(ModalDX)) 831 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 832 ); 833 834 jLabel19.setText("Note: Only what you change will modify the default query."); 835 836 jLabel20.setText("Patient ID:"); 837 838 PatientID.setText("(All IDs)"); 839 840 AdvancedSearchButton.setText("Search"); 841 AdvancedSearchButton.addActionListener(new java.awt.event.ActionListener() { 842 public void actionPerformed(java.awt.event.ActionEvent evt) { 843 AdvancedSearchButtonActionPerformed(evt); 844 } 845 }); 846 847 ResetFields.setText("Reset fields"); 848 ResetFields.addActionListener(new java.awt.event.ActionListener() { 849 public void actionPerformed(java.awt.event.ActionEvent evt) { 850 ResetFieldsActionPerformed(evt); 851 } 852 }); 853 854 StudyDateRangeInitialBoundaryActivation.setText("From:"); 855 StudyDateRangeInitialBoundaryActivation.addActionListener(new java.awt.event.ActionListener() { 856 public void actionPerformed(java.awt.event.ActionEvent evt) { 857 StudyDateRangeInitialBoundaryActivationActionPerformed(evt); 858 } 859 }); 860 861 StudyDateRangeInitialBoundary.setText("(Beginning)"); 862 863 jLabel16.setText("--"); 864 865 StudyDateRangeTerminalBoundaryActivation.setText("To:"); 866 StudyDateRangeTerminalBoundaryActivation.addActionListener(new java.awt.event.ActionListener() { 867 public void actionPerformed(java.awt.event.ActionEvent evt) { 868 StudyDateRangeTerminalBoundaryActivationActionPerformed(evt); 869 } 870 }); 871 872 StudyDateRangeTerminalBoundary.setText("(Today)"); 873 874 StudyDate.setText("(All dates)"); 875 876 jLabel13.setText("(yyyymmdd form)"); 877 878 jLabel15.setText("Date Range:"); 879 880 jLabel12.setText("Date:"); 881 882 jLabel4.setText("Study Date search type:"); 883 884 ExactDate.setText("Exact Date"); 885 ExactDate.addActionListener(new java.awt.event.ActionListener() { 886 public void actionPerformed(java.awt.event.ActionEvent evt) { 887 ExactDateActionPerformed(evt); 888 } 889 }); 890 891 DateRange.setText("Date Range"); 892 DateRange.addActionListener(new java.awt.event.ActionListener() { 893 public void actionPerformed(java.awt.event.ActionEvent evt) { 894 DateRangeActionPerformed(evt); 895 } 896 }); 897 898 jLabel17.setText("(yyyymmdd form)"); 899 900 javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); 901 jPanel4.setLayout(jPanel4Layout); 902 jPanel4Layout.setHorizontalGroup( 903 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 904 .addGroup(jPanel4Layout.createSequentialGroup() 905 .addGap(8, 8, 8) 906 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 907 .addGroup(jPanel4Layout.createSequentialGroup() 908 .addComponent(jLabel4) 909 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 910 .addComponent(ExactDate) 911 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 912 .addComponent(DateRange)) 913 .addGroup(jPanel4Layout.createSequentialGroup() 914 .addComponent(jLabel12) 915 .addGap(2, 2, 2) 916 .addComponent(StudyDate, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE) 917 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 918 .addComponent(jLabel13))) 919 .addGap(71, 71, 71)) 920 .addGroup(jPanel4Layout.createSequentialGroup() 921 .addGap(6, 6, 6) 922 .addComponent(jLabel15) 923 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 924 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 925 .addGroup(jPanel4Layout.createSequentialGroup() 926 .addComponent(StudyDateRangeInitialBoundary, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) 927 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 928 .addComponent(jLabel16)) 929 .addComponent(StudyDateRangeInitialBoundaryActivation)) 930 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 931 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 932 .addGroup(jPanel4Layout.createSequentialGroup() 933 .addComponent(StudyDateRangeTerminalBoundary, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) 934 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 935 .addComponent(jLabel17)) 936 .addComponent(StudyDateRangeTerminalBoundaryActivation)) 937 .addContainerGap()) 938 ); 939 jPanel4Layout.setVerticalGroup( 940 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 941 .addGroup(jPanel4Layout.createSequentialGroup() 942 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 943 .addComponent(ExactDate) 944 .addComponent(DateRange) 945 .addComponent(jLabel4)) 946 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 947 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 948 .addComponent(StudyDate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 949 .addComponent(jLabel13) 950 .addComponent(jLabel12)) 951 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 952 .addGroup(jPanel4Layout.createSequentialGroup() 953 .addGap(10, 10, 10) 954 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 955 .addComponent(StudyDateRangeInitialBoundaryActivation) 956 .addComponent(StudyDateRangeTerminalBoundaryActivation) 957 .addComponent(jLabel15))) 958 .addGroup(jPanel4Layout.createSequentialGroup() 959 .addGap(35, 35, 35) 960 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 961 .addComponent(StudyDateRangeInitialBoundary, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) 962 .addComponent(jLabel16) 963 .addComponent(StudyDateRangeTerminalBoundary, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 964 .addComponent(jLabel17)))) 965 .addContainerGap()) 966 ); 967 968 javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); 969 jPanel2.setLayout(jPanel2Layout); 970 jPanel2Layout.setHorizontalGroup( 971 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 972 .addGroup(jPanel2Layout.createSequentialGroup() 973 .addContainerGap() 974 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 975 .addGroup(jPanel2Layout.createSequentialGroup() 976 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 977 .addComponent(jLabel8) 978 .addComponent(jLabel9) 979 .addComponent(jLabel10) 980 .addComponent(jLabel11)) 981 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 982 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 983 .addComponent(PatientID) 984 .addComponent(PatientGender, 0, 118, Short.MAX_VALUE) 985 .addComponent(Physician) 986 .addComponent(InstitutionName) 987 .addComponent(PatientName) 988 .addComponent(OperatorName))) 989 .addGroup(jPanel2Layout.createSequentialGroup() 990 .addComponent(AdvancedSearchButton) 991 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 992 .addComponent(ResetFields)) 993 .addComponent(jLabel19) 994 .addComponent(jLabel7) 995 .addComponent(jLabel20)) 996 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 997 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 998 .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 999 .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1000 .addContainerGap(381, Short.MAX_VALUE)) 1001 ); 1002 jPanel2Layout.setVerticalGroup( 1003 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1004 .addGroup(jPanel2Layout.createSequentialGroup() 1005 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1006 .addGroup(jPanel2Layout.createSequentialGroup() 1007 .addGap(14, 14, 14) 1008 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1009 .addComponent(AdvancedSearchButton) 1010 .addComponent(ResetFields)) 1011 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1012 .addComponent(jLabel19) 1013 .addGap(18, 18, 18) 1014 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1015 .addComponent(jLabel7) 1016 .addComponent(PatientName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1017 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1018 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1019 .addComponent(jLabel20) 1020 .addComponent(PatientID, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1021 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1022 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1023 .addComponent(jLabel8) 1024 .addComponent(PatientGender, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1025 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1026 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1027 .addComponent(jLabel9) 1028 .addComponent(InstitutionName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1029 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1030 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1031 .addComponent(jLabel10) 1032 .addComponent(Physician, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1033 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1034 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1035 .addComponent(jLabel11) 1036 .addComponent(OperatorName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) 1037 .addGroup(jPanel2Layout.createSequentialGroup() 1038 .addContainerGap() 1039 .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE) 1040 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 1041 .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) 1042 .addContainerGap()) 1043 ); 1044 1045 jLabel1.setText("Search Pattern :"); 1046 1047 jLabel3.setText("Regular expressions are supported (eg: A*)."); 1048 1049 jTextFieldQuery.addActionListener(new java.awt.event.ActionListener() { 1050 public void actionPerformed(java.awt.event.ActionEvent evt) { 1051 jTextFieldQueryActionPerformed(evt); 1052 } 1053 }); 1054 jTextFieldQuery.addKeyListener(new java.awt.event.KeyAdapter() { 1055 public void keyPressed(java.awt.event.KeyEvent evt) { 1056 jTextFieldQueryKeyPressed(evt); 1057 } 1058 }); 1059 1060 jButtonSearch.setText("Search"); 1061 jButtonSearch.addActionListener(new java.awt.event.ActionListener() { 1062 public void actionPerformed(java.awt.event.ActionEvent evt) { 1063 jButtonSearchActionPerformed(evt); 1064 } 1065 }); 1066 1067 SearchTips.setText("Search Tips"); 1068 SearchTips.addActionListener(new java.awt.event.ActionListener() { 1069 public void actionPerformed(java.awt.event.ActionEvent evt) { 1070 SearchTipsActionPerformed(evt); 1071 } 1072 }); 1073 1074 jCheckBoxKeywords.setSelected(true); 1075 jCheckBoxKeywords.setText("keywords"); 1076 1077 jButtonQueryHistory.setText("Query History"); 1078 jButtonQueryHistory.addActionListener(new java.awt.event.ActionListener() { 1079 public void actionPerformed(java.awt.event.ActionEvent evt) { 1080 jButtonQueryHistoryActionPerformed(evt); 1081 } 1082 }); 1083 1084 javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 1085 jPanel1.setLayout(jPanel1Layout); 1086 jPanel1Layout.setHorizontalGroup( 1087 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1088 .addGroup(jPanel1Layout.createSequentialGroup() 1089 .addContainerGap() 1090 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1091 .addGroup(jPanel1Layout.createSequentialGroup() 1092 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE) 1093 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1094 .addComponent(jTextFieldQuery, javax.swing.GroupLayout.PREFERRED_SIZE, 328, javax.swing.GroupLayout.PREFERRED_SIZE) 1095 .addGap(18, 18, 18) 1096 .addComponent(jCheckBoxKeywords)) 1097 .addGroup(jPanel1Layout.createSequentialGroup() 1098 .addComponent(jButtonSearch) 1099 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1100 .addComponent(SearchTips) 1101 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1102 .addComponent(jButtonQueryHistory)) 1103 .addComponent(jLabel3)) 1104 .addContainerGap(683, Short.MAX_VALUE)) 1105 ); 1106 jPanel1Layout.setVerticalGroup( 1107 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1108 .addGroup(jPanel1Layout.createSequentialGroup() 1109 .addContainerGap() 1110 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 1111 .addComponent(jButtonSearch, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 1112 .addComponent(SearchTips, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 1113 .addComponent(jButtonQueryHistory, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 1114 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1115 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1116 .addComponent(jLabel1) 1117 .addComponent(jTextFieldQuery, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1118 .addComponent(jCheckBoxKeywords)) 1119 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1120 .addComponent(jLabel3) 1121 .addContainerGap(37, Short.MAX_VALUE)) 1122 ); 1123 1124 jButtonSend.setText("Send"); 1125 jButtonSend.addActionListener(new java.awt.event.ActionListener() { 1126 public void actionPerformed(java.awt.event.ActionEvent evt) { 1127 jButtonSendActionPerformed(evt); 1128 } 1129 }); 1130 1131 jLabelResults.setText("jLabel2"); 1132 1133 jButtonDump.setText("Dump"); 1134 jButtonDump.addActionListener(new java.awt.event.ActionListener() { 1135 public void actionPerformed(java.awt.event.ActionEvent evt) { 1136 jButtonDumpActionPerformed(evt); 1137 } 1138 }); 1139 1140 jButtonDownload.setText("Download"); 1141 jButtonDownload.addActionListener(new java.awt.event.ActionListener() { 1142 public void actionPerformed(java.awt.event.ActionEvent evt) { 1143 jButtonDownloadActionPerformed(evt); 1144 } 1145 }); 1146 1147 jLabelTime.setText("<<results time>>"); 1148 1149 jLabel22.setText("Time Results(ms):"); 1150 1151 jButtonView.setText("View"); 1152 jButtonView.addActionListener(new java.awt.event.ActionListener() { 1153 public void actionPerformed(java.awt.event.ActionEvent evt) { 1154 jButtonViewActionPerformed(evt); 1155 } 1156 }); 1157 1158 javax.swing.GroupLayout jPanelThumbnailLayout = new javax.swing.GroupLayout(jPanelThumbnail); 1159 jPanelThumbnail.setLayout(jPanelThumbnailLayout); 1160 jPanelThumbnailLayout.setHorizontalGroup( 1161 jPanelThumbnailLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1162 .addGap(0, 67, Short.MAX_VALUE) 1163 ); 1164 jPanelThumbnailLayout.setVerticalGroup( 1165 jPanelThumbnailLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1166 .addGap(0, 62, Short.MAX_VALUE) 1167 ); 1168 1169 jButtonExport.setText("Export"); 1170 jButtonExport.setMaximumSize(new java.awt.Dimension(82, 29)); 1171 jButtonExport.setMinimumSize(new java.awt.Dimension(82, 29)); 1172 jButtonExport.setPreferredSize(new java.awt.Dimension(82, 29)); 1173 jButtonExport.addActionListener(new java.awt.event.ActionListener() { 1174 public void actionPerformed(java.awt.event.ActionEvent evt) { 1175 jButtonExportActionPerformed(evt); 1176 } 1177 }); 1178 1179 javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9); 1180 jPanel9.setLayout(jPanel9Layout); 1181 jPanel9Layout.setHorizontalGroup( 1182 jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1183 .addGroup(jPanel9Layout.createSequentialGroup() 1184 .addGap(120, 120, 120) 1185 .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1186 .addComponent(jButtonExport, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 259, Short.MAX_VALUE) 1187 .addComponent(jButtonDownload, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 271, Short.MAX_VALUE) 1188 .addComponent(jButtonSend, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 259, Short.MAX_VALUE) 1189 .addComponent(jButtonView, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 259, Short.MAX_VALUE) 1190 .addComponent(jButtonDump, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 259, Short.MAX_VALUE)) 1191 .addContainerGap()) 1192 .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1193 .addGroup(jPanel9Layout.createSequentialGroup() 1194 .addContainerGap() 1195 .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1196 .addComponent(jLabelResults) 1197 .addGroup(jPanel9Layout.createSequentialGroup() 1198 .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1199 .addComponent(jLabel22) 1200 .addGroup(jPanel9Layout.createSequentialGroup() 1201 .addGap(10, 10, 10) 1202 .addComponent(jPanelThumbnail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) 1203 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 129, Short.MAX_VALUE) 1204 .addComponent(jLabelTime))) 1205 .addContainerGap())) 1206 ); 1207 jPanel9Layout.setVerticalGroup( 1208 jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1209 .addGroup(jPanel9Layout.createSequentialGroup() 1210 .addContainerGap(92, Short.MAX_VALUE) 1211 .addComponent(jButtonExport, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1212 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1213 .addComponent(jButtonDownload) 1214 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1215 .addComponent(jButtonSend) 1216 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1217 .addComponent(jButtonView) 1218 .addGap(5, 5, 5) 1219 .addComponent(jButtonDump) 1220 .addContainerGap()) 1221 .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1222 .addGroup(jPanel9Layout.createSequentialGroup() 1223 .addContainerGap() 1224 .addComponent(jLabelResults) 1225 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1226 .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1227 .addComponent(jLabel22) 1228 .addComponent(jLabelTime)) 1229 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE) 1230 .addComponent(jPanelThumbnail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1231 .addGap(53, 53, 53))) 1232 ); 1233 1234 jTreeResults.setModel(null); 1235 jTreeResults.setRowHeight(15); 1236 jTreeResults.setToggleClickCount(3); 1237 jTreeResults.addMouseListener(new java.awt.event.MouseAdapter() { 1238 public void mouseClicked(java.awt.event.MouseEvent evt) { 1239 jTreeResultsMouseClicked(evt); 1240 } 1241 }); 1242 jTreeResults.addTreeExpansionListener(new javax.swing.event.TreeExpansionListener() { 1243 public void treeCollapsed(javax.swing.event.TreeExpansionEvent evt) { 1244 } 1245 public void treeExpanded(javax.swing.event.TreeExpansionEvent evt) { 1246 jTreeResultsTreeExpanded(evt); 1247 } 1248 }); 1249 jTreeResults.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { 1250 public void valueChanged(javax.swing.event.TreeSelectionEvent evt) { 1251 jTreeResultsValueChanged(evt); 1252 } 1253 }); 1254 jTreeResults.addKeyListener(new java.awt.event.KeyAdapter() { 1255 public void keyReleased(java.awt.event.KeyEvent evt) { 1256 jTreeResultsKeyReleased(evt); 1257 } 1258 }); 1259 jScrollPane1.setViewportView(jTreeResults); 1260 1261 jLabel2.setText("Search Range:"); 1262 1263 javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); 1264 jPanel6.setLayout(jPanel6Layout); 1265 jPanel6Layout.setHorizontalGroup( 1266 jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1267 .addGroup(jPanel6Layout.createSequentialGroup() 1268 .addComponent(jLabel2) 1269 .addContainerGap(474, Short.MAX_VALUE)) 1270 ); 1271 jPanel6Layout.setVerticalGroup( 1272 jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1273 .addComponent(jLabel2) 1274 ); 1275 1276 jSeparator2.setMaximumSize(new java.awt.Dimension(50, 10)); 1277 1278 javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); 1279 jPanel5.setLayout(jPanel5Layout); 1280 jPanel5Layout.setHorizontalGroup( 1281 jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1282 .addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 1279, Short.MAX_VALUE) 1283 .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 1279, Short.MAX_VALUE) 1284 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() 1285 .addContainerGap() 1286 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1287 .addGroup(jPanel5Layout.createSequentialGroup() 1288 .addComponent(jLabel5) 1289 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 1290 .addComponent(SelectDefaultSearch) 1291 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1292 .addComponent(SelectAdvancedSearch) 1293 .addGap(28, 28, 28) 1294 .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1295 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() 1296 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 846, Short.MAX_VALUE) 1297 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1298 .addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1299 .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 1300 .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 1301 .addContainerGap()) 1302 ); 1303 jPanel5Layout.setVerticalGroup( 1304 jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1305 .addGroup(jPanel5Layout.createSequentialGroup() 1306 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1307 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 1308 .addComponent(jLabel5) 1309 .addComponent(SelectDefaultSearch) 1310 .addComponent(SelectAdvancedSearch)) 1311 .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1312 .addGap(10, 10, 10) 1313 .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1314 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1315 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1316 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 1317 .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1318 .addGap(15, 15, 15) 1319 .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1320 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1321 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1322 .addComponent(jPanel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 1323 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))) 1324 ); 1325 1326 jScrollPane2.setViewportView(jPanel5); 1327 1328 tabPanel.addTab("Search", jScrollPane2); 1329 1330 getContentPane().add(tabPanel, java.awt.BorderLayout.CENTER); 1331 1332 jSplitPane1.setDividerSize(2); 1333 jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); 1334 jSplitPane1.setMaximumSize(new java.awt.Dimension(2147483647, 100)); 1335 jSplitPane1.setPreferredSize(new java.awt.Dimension(606, 100)); 1336 1337 jPanel8.setPreferredSize(new java.awt.Dimension(604, 80)); 1338 1339 jButtonServices.setIcon(new ImageIcon(getImage("services.gif"))); 1340 jButtonServices.setText("Services"); 1341 jButtonServices.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 1342 jButtonServices.setMaximumSize(new java.awt.Dimension(80, 80)); 1343 jButtonServices.setMinimumSize(new java.awt.Dimension(80, 80)); 1344 jButtonServices.setPreferredSize(new java.awt.Dimension(80, 80)); 1345 jButtonServices.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 1346 jButtonServices.addActionListener(new java.awt.event.ActionListener() { 1347 public void actionPerformed(java.awt.event.ActionEvent evt) { 1348 jButtonServicesActionPerformed(evt); 1349 } 1350 }); 1351 1352 jButtonPreferences.setIcon(new ImageIcon(getImage("config.gif"))); 1353 jButtonPreferences.setText("Preferences"); 1354 jButtonPreferences.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 1355 jButtonPreferences.setMaximumSize(new java.awt.Dimension(80, 80)); 1356 jButtonPreferences.setMinimumSize(new java.awt.Dimension(80, 80)); 1357 jButtonPreferences.setPreferredSize(new java.awt.Dimension(80, 80)); 1358 jButtonPreferences.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 1359 jButtonPreferences.addActionListener(new java.awt.event.ActionListener() { 1360 public void actionPerformed(java.awt.event.ActionEvent evt) { 1361 jButtonPreferencesActionPerformed(evt); 1362 } 1363 }); 1364 1365 jButtonLogs.setIcon(new ImageIcon(getImage("log.gif"))); 1366 jButtonLogs.setText("Logs"); 1367 jButtonLogs.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 1368 jButtonLogs.setMaximumSize(new java.awt.Dimension(80, 80)); 1369 jButtonLogs.setMinimumSize(new java.awt.Dimension(80, 80)); 1370 jButtonLogs.setPreferredSize(new java.awt.Dimension(80, 80)); 1371 jButtonLogs.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 1372 jButtonLogs.addActionListener(new java.awt.event.ActionListener() { 1373 public void actionPerformed(java.awt.event.ActionEvent evt) { 1374 jButtonLogsActionPerformed(evt); 1375 } 1376 }); 1377 1378 jButtonPeers.setIcon(new ImageIcon(getImage("peers.png"))); 1379 jButtonPeers.setText("P2P Peers"); 1380 jButtonPeers.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 1381 jButtonPeers.setMaximumSize(new java.awt.Dimension(80, 80)); 1382 jButtonPeers.setMinimumSize(new java.awt.Dimension(80, 80)); 1383 jButtonPeers.setPreferredSize(new java.awt.Dimension(80, 80)); 1384 jButtonPeers.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 1385 jButtonPeers.addActionListener(new java.awt.event.ActionListener() { 1386 public void actionPerformed(java.awt.event.ActionEvent evt) { 1387 jButtonPeersActionPerformed(evt); 1388 } 1389 }); 1390 1391 jButtonClientPreferences.setIcon(new ImageIcon(getImage("settings.png"))); 1392 jButtonClientPreferences.setText("Client Prefs"); 1393 jButtonClientPreferences.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 1394 jButtonClientPreferences.setMaximumSize(new java.awt.Dimension(80, 80)); 1395 jButtonClientPreferences.setMinimumSize(new java.awt.Dimension(80, 80)); 1396 jButtonClientPreferences.setPreferredSize(new java.awt.Dimension(80, 80)); 1397 jButtonClientPreferences.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 1398 jButtonClientPreferences.addActionListener(new java.awt.event.ActionListener() { 1399 public void actionPerformed(java.awt.event.ActionEvent evt) { 1400 jButtonClientPreferencesActionPerformed(evt); 1401 } 1402 }); 1403 1404 javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); 1405 jPanel8.setLayout(jPanel8Layout); 1406 jPanel8Layout.setHorizontalGroup( 1407 jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1408 .addGroup(jPanel8Layout.createSequentialGroup() 1409 .addContainerGap() 1410 .addComponent(jButtonServices, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) 1411 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1412 .addComponent(jButtonPreferences, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) 1413 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1414 .addComponent(jButtonLogs, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) 1415 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1416 .addComponent(jButtonPeers, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) 1417 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 1418 .addComponent(jButtonClientPreferences, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) 1419 .addGap(102, 102, 102) 1420 .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 1421 .addContainerGap(752, Short.MAX_VALUE)) 1422 ); 1423 jPanel8Layout.setVerticalGroup( 1424 jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1425 .addGroup(jPanel8Layout.createSequentialGroup() 1426 .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 1427 .addGroup(jPanel8Layout.createSequentialGroup() 1428 .addGap(32, 32, 32) 1429 .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 1430 .addGroup(jPanel8Layout.createSequentialGroup() 1431 .addContainerGap() 1432 .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 1433 .addComponent(jButtonClientPreferences, 0, 0, Short.MAX_VALUE) 1434 .addComponent(jButtonPeers, 0, 0, Short.MAX_VALUE) 1435 .addComponent(jButtonLogs, 0, 0, Short.MAX_VALUE) 1436 .addComponent(jButtonPreferences, 0, 0, Short.MAX_VALUE) 1437 .addComponent(jButtonServices, javax.swing.GroupLayout.PREFERRED_SIZE, 64, Short.MAX_VALUE)))) 1438 .addGap(124, 124, 124)) 1439 ); 1440 1441 jSplitPane1.setTopComponent(jPanel8); 1442 1443 getContentPane().add(jSplitPane1, java.awt.BorderLayout.NORTH); 1444 1445 jMenu9.setText("File"); 1446 1447 jMenuItemChangePassword.setText("Change Password"); 1448 jMenuItemChangePassword.addActionListener(new java.awt.event.ActionListener() { 1449 public void actionPerformed(java.awt.event.ActionEvent evt) { 1450 jMenuItemChangePasswordActionPerformed(evt); 1451 } 1452 }); 1453 jMenu9.add(jMenuItemChangePassword); 1454 1455 jMenuDirScan2.setText("Scan Disk"); 1456 jMenuDirScan2.addActionListener(new java.awt.event.ActionListener() { 1457 public void actionPerformed(java.awt.event.ActionEvent evt) { 1458 jMenuDirScanActionPerformed(evt); 1459 } 1460 }); 1461 jMenu9.add(jMenuDirScan2); 1462 1463 jMenuDirScanResume.setText("Scan Disk (resume)"); 1464 jMenuDirScanResume.addActionListener(new java.awt.event.ActionListener() { 1465 public void actionPerformed(java.awt.event.ActionEvent evt) { 1466 jMenuDirScanResumeActionPerformed(evt); 1467 } 1468 }); 1469 jMenu9.add(jMenuDirScanResume); 1470 1471 jMenuItemShutdown.setText("Shutdown Client&Server"); 1472 jMenuItemShutdown.addActionListener(new java.awt.event.ActionListener() { 1473 public void actionPerformed(java.awt.event.ActionEvent evt) { 1474 jMenuItemShutdownActionPerformed(evt); 1475 } 1476 }); 1477 jMenu9.add(jMenuItemShutdown); 1478 1479 jMenuItem11.setText("Exit Client"); 1480 jMenuItem11.addActionListener(new java.awt.event.ActionListener() { 1481 public void actionPerformed(java.awt.event.ActionEvent evt) { 1482 jMenuItem11ActionPerformed(evt); 1483 } 1484 }); 1485 jMenu9.add(jMenuItem11); 1486 1487 jMenuItem7.setText("Exit Client&Server"); 1488 jMenuItem7.addActionListener(new java.awt.event.ActionListener() { 1489 public void actionPerformed(java.awt.event.ActionEvent evt) { 1490 jMenuItem7ActionPerformed(evt); 1491 } 1492 }); 1493 jMenu9.add(jMenuItem7); 1494 1495 jMenuBar3.add(jMenu9); 1496 1497 jMenu10.setText("Edit"); 1498 1499 jMenuItemPreferences.setText("Preferences"); 1500 jMenuItemPreferences.addActionListener(new java.awt.event.ActionListener() { 1501 public void actionPerformed(java.awt.event.ActionEvent evt) { 1502 jMenuItem2ActionPerformed(evt); 1503 } 1504 }); 1505 jMenu10.add(jMenuItemPreferences); 1506 1507 jMenuItemServices.setText("Services"); 1508 jMenuItemServices.addActionListener(new java.awt.event.ActionListener() { 1509 public void actionPerformed(java.awt.event.ActionEvent evt) { 1510 jMenuItemServicesActionPerformed(evt); 1511 } 1512 }); 1513 jMenu10.add(jMenuItemServices); 1514 1515 jMenuItem10.setText("Logs"); 1516 jMenuItem10.addActionListener(new java.awt.event.ActionListener() { 1517 public void actionPerformed(java.awt.event.ActionEvent evt) { 1518 jMenuItem10ActionPerformed(evt); 1519 } 1520 }); 1521 jMenu10.add(jMenuItem10); 1522 1523 jMenuItemUsers.setText("User Accounts"); 1524 jMenuItemUsers.addActionListener(new java.awt.event.ActionListener() { 1525 public void actionPerformed(java.awt.event.ActionEvent evt) { 1526 jMenuItemUsersActionPerformed(evt); 1527 } 1528 }); 1529 jMenu10.add(jMenuItemUsers); 1530 1531 jMenuItemActiveUsers.setText("ActiveUsers"); 1532 jMenuItemActiveUsers.addActionListener(new java.awt.event.ActionListener() { 1533 public void actionPerformed(java.awt.event.ActionEvent evt) { 1534 jMenuItemActiveUsersActionPerformed(evt); 1535 } 1536 }); 1537 jMenu10.add(jMenuItemActiveUsers); 1538 1539 jMenuBar3.add(jMenu10); 1540 1541 jMenuTools2.setText("Tools"); 1542 1543 jMenuItemDcm2jpeg2.setText("dcm2jpeg"); 1544 jMenuItemDcm2jpeg2.addActionListener(new java.awt.event.ActionListener() { 1545 public void actionPerformed(java.awt.event.ActionEvent evt) { 1546 jMenuItemDcm2jpeg2ActionPerformed(evt); 1547 } 1548 }); 1549 jMenuTools2.add(jMenuItemDcm2jpeg2); 1550 1551 jMenuBar3.add(jMenuTools2); 1552 1553 jMenu11.setText("Skin"); 1554 1555 jMenuItem1.setText("Business"); 1556 jMenuItem1.addActionListener(new java.awt.event.ActionListener() { 1557 public void actionPerformed(java.awt.event.ActionEvent evt) { 1558 jMenuItem1ActionPerformed1(evt); 1559 } 1560 }); 1561 jMenu11.add(jMenuItem1); 1562 1563 jMenuItem2.setText("Business Blue Steel"); 1564 jMenuItem2.addActionListener(new java.awt.event.ActionListener() { 1565 public void actionPerformed(java.awt.event.ActionEvent evt) { 1566 jMenuItem2ActionPerformed1(evt); 1567 } 1568 }); 1569 jMenu11.add(jMenuItem2); 1570 1571 jMenuItem3.setText("Business Black Steel"); 1572 jMenuItem3.addActionListener(new java.awt.event.ActionListener() { 1573 public void actionPerformed(java.awt.event.ActionEvent evt) { 1574 jMenuItem3ActionPerformed1(evt); 1575 } 1576 }); 1577 jMenu11.add(jMenuItem3); 1578 1579 jMenuItem4.setText("Creme"); 1580 jMenuItem4.addActionListener(new java.awt.event.ActionListener() { 1581 public void actionPerformed(java.awt.event.ActionEvent evt) { 1582 jMenuItem4ActionPerformed(evt); 1583 } 1584 }); 1585 jMenu11.add(jMenuItem4); 1586 1587 jMenuItem5.setText("Magma"); 1588 jMenuItem5.addActionListener(new java.awt.event.ActionListener() { 1589 public void actionPerformed(java.awt.event.ActionEvent evt) { 1590 jMenuItem5ActionPerformed(evt); 1591 } 1592 }); 1593 jMenu11.add(jMenuItem5); 1594 1595 jMenuItem6.setText("Raven"); 1596 jMenuItem6.addActionListener(new java.awt.event.ActionListener() { 1597 public void actionPerformed(java.awt.event.ActionEvent evt) { 1598 jMenuItem6ActionPerformed(evt); 1599 } 1600 }); 1601 jMenu11.add(jMenuItem6); 1602 1603 jMenuItem8.setText("Raven Graphite Glass"); 1604 jMenuItem8.addActionListener(new java.awt.event.ActionListener() { 1605 public void actionPerformed(java.awt.event.ActionEvent evt) { 1606 jMenuItem8ActionPerformed(evt); 1607 } 1608 }); 1609 jMenu11.add(jMenuItem8); 1610 1611 jMenuBar3.add(jMenu11); 1612 1613 pluginMenu.setText("Plugins"); 1614 jMenuBar3.add(pluginMenu); 1615 1616 jMenu12.setText("Help"); 1617 1618 jMenuItem9.setText("About"); 1619 jMenuItem9.addActionListener(new java.awt.event.ActionListener() { 1620 public void actionPerformed(java.awt.event.ActionEvent evt) { 1621 jMenuItem3ActionPerformed(evt); 1622 } 1623 }); 1624 jMenu12.add(jMenuItem9); 1625 1626 jMenuBar3.add(jMenu12); 1627 1628 setJMenuBar(jMenuBar3); 1629 1630 getAccessibleContext().setAccessibleDescription("Dicoogle PACS Archive"); 1631 1632 pack(); 1633 }// </editor-fold>//GEN-END:initComponents 1634 1635 private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing 1636 if (Main.isFixedClient()) { 1637 jMenuItem7.doClick(); 1638 } else { 1639 jMenuItem11.doClick(); 1640 } 1641 }//GEN-LAST:event_formWindowClosing 1642 1643 private void formWindowIconified(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowIconified 1644 this.setExtendedState(MainWindow.ICONIFIED); 1645 this.setVisible(false); 1646 }//GEN-LAST:event_formWindowIconified 1647 1648 private void formWindowDeiconified(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowDeiconified 1649 this.setExtendedState(MainWindow.NORMAL); 1650 this.setVisible(true); 1651 }//GEN-LAST:event_formWindowDeiconified 1652 1653 private void jButtonPreferencesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonPreferencesActionPerformed 1654 showOptions(); 1655 }//GEN-LAST:event_jButtonPreferencesActionPerformed 1656 1657 private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed 1658 showOptions(); 1659 }//GEN-LAST:event_jMenuItem2ActionPerformed 1660 1661 private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed 1662 1663 File toDelete = new File("pluginClasses"); 1664 String[] deleteArray = toDelete.list(); 1665 if (deleteArray != null) { 1666 for (String fileName : deleteArray) { 1667 File f = new File("pluginClasses/" + fileName); 1668 f.delete(); 1669 } 1670 } 1671 if (clientCore.isAdmin() && AdminRefs.getInstance().unsavedSettings()) { 1672 Object[] opt 1673 = { 1674 "Save", "Discard", "Cancel" 1675 }; 1676 1677 String message = "There are unsaved Server Settings.\nDo you want to save them?"; 1678 int op = JOptionPane.showOptionDialog(this, message, "Unsaved Server Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt, opt[2]); 1679 1680 if (op == 0) { 1681 AdminRefs.getInstance().saveSettings(); 1682 } 1683 1684 if (op == 2) { 1685 return; 1686 } 1687 } 1688 1689 if (ClientOptions.getInstance().unsavedSettings()) { 1690 Object[] opt 1691 = { 1692 "Save", "Discard", "Cancel" 1693 }; 1694 1695 String message = "There are unsaved Client Settings.\nDo you want to save them?"; 1696 int op = JOptionPane.showOptionDialog(this, message, "Unsaved Client Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt, opt[2]); 1697 1698 if (op == 0) { 1699 ClientOptions.getInstance().saveSettings(); 1700 } 1701 1702 if (op == 2) { 1703 return; 1704 } 1705 } 1706 1707 QueryHistorySupport.getInstance().saveQueryHistory(); 1708 1709 if (clientCore.isAdmin()) { 1710 AdminRefs.getInstance().shutdownServer(); 1711 } 1712 1713 System.exit(0); 1714 }//GEN-LAST:event_jMenuItem1ActionPerformed 1715 1716 private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed 1717 }//GEN-LAST:event_jMenuItem3ActionPerformed 1718 1719private void jMenuDirScanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuDirScanActionPerformed 1720 scanDisk(false); 1721}//GEN-LAST:event_jMenuDirScanActionPerformed 1722 1723 /** 1724 * Do an advanced search 1725 * 1726 * @param evt 1727 */ 1728 private void jButtonLogsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonLogsActionPerformed 1729 1730 Logs logs = Logs.getInstance(); 1731 1732 if (logs != null) { 1733 logs.setVisible(true); 1734 logs.toFront(); 1735 //this.setEnabled(false); 1736 } 1737 1738 }//GEN-LAST:event_jButtonLogsActionPerformed 1739 1740 private void jButtonServicesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonServicesActionPerformed 1741 Services serv = Services.getInstance(); 1742 serv.setVisible(true); 1743 serv.toFront(); 1744 //this.setEnabled(false); 1745 }//GEN-LAST:event_jButtonServicesActionPerformed 1746 1747 private void jMenuItemServicesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemServicesActionPerformed 1748 1749 // invokes the event of the button jButtonServices 1750 jButtonServices.doClick(); 1751 }//GEN-LAST:event_jMenuItemServicesActionPerformed 1752 1753 private void jMenuItem1ActionPerformed1(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed1 1754 SubstanceLookAndFeel.setSkin(new BusinessSkin()); 1755 repaint(); 1756 }//GEN-LAST:event_jMenuItem1ActionPerformed1 1757 1758 private void jMenuItem2ActionPerformed1(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed1 1759 SubstanceLookAndFeel.setSkin(new BusinessBlueSteelSkin()); 1760 repaint(); 1761 }//GEN-LAST:event_jMenuItem2ActionPerformed1 1762 1763 private void jMenuItem3ActionPerformed1(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed1 1764 SubstanceLookAndFeel.setSkin(new BusinessBlackSteelSkin()); 1765 repaint(); 1766 }//GEN-LAST:event_jMenuItem3ActionPerformed1 1767 1768 private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed 1769 SubstanceLookAndFeel.setSkin(new CremeSkin()); 1770 repaint(); 1771 }//GEN-LAST:event_jMenuItem4ActionPerformed 1772 1773 private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem5ActionPerformed 1774 SubstanceLookAndFeel.setSkin(new MagmaSkin()); 1775 repaint(); 1776 }//GEN-LAST:event_jMenuItem5ActionPerformed 1777 1778 private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem6ActionPerformed 1779 SubstanceLookAndFeel.setSkin(new RavenSkin()); 1780 repaint(); 1781 }//GEN-LAST:event_jMenuItem6ActionPerformed 1782 1783 private void jMenuItem8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem8ActionPerformed 1784 SubstanceLookAndFeel.setSkin(new RavenGraphiteGlassSkin()); 1785 repaint(); 1786 }//GEN-LAST:event_jMenuItem8ActionPerformed 1787 1788 private void jMenuItem10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem10ActionPerformed 1789 1790 // invokes the event of the button jButtonLogs 1791 jButtonLogs.doClick(); 1792 }//GEN-LAST:event_jMenuItem10ActionPerformed 1793 1794 private void jButtonPeersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonPeersActionPerformed 1795 try { 1796 List<NetworkMember> peerList = UserRefs.getInstance().getSearch().getPeerList(); 1797 1798 String peerNames = "These are the P2P peers that are connected:"; 1799 if (peerList.size() == 0) { 1800 peerNames = "No peers connected!"; 1801 } 1802 1803 for (NetworkMember s : peerList) { 1804 peerNames += "\n" + s.getPeerName() + " : " + s.getPluginName(); 1805 } 1806 1807 JOptionPane.showMessageDialog(this, peerNames, "P2P Peers", JOptionPane.INFORMATION_MESSAGE); 1808 1809 } catch (RemoteException ex) { 1810 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 1811 } 1812 }//GEN-LAST:event_jButtonPeersActionPerformed 1813 1814 private void jMenuItemUsersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemUsersActionPerformed 1815 UsersManager usersManager = UsersManager.getInstance(); 1816 1817 if (usersManager != null) { 1818 usersManager.setVisible(true); 1819 usersManager.toFront(); 1820 //this.setEnabled(false); 1821 } 1822 }//GEN-LAST:event_jMenuItemUsersActionPerformed 1823 1824 public void updateP2PThumbnail(SearchResult result) { 1825 DefaultMutableTreeNode node = (DefaultMutableTreeNode) getjTreeResults().getLastSelectedPathComponent(); 1826 if (node == null) { 1827 return; 1828 } 1829 1830 Object nodeInfo = null; 1831 DefaultMutableTreeNode nodeLeaf = null; 1832 1833 if (node.getLevel() == 4 || (node.isLeaf() && node.getLevel() > 1)) { 1834 Object nodeInfoLeaf = null; 1835 1836 if (node.getLevel() == 4) { 1837 nodeLeaf = node.getFirstLeaf(); 1838 nodeInfoLeaf = nodeLeaf.getUserObject(); 1839 } else { 1840 // Leaf 1841 nodeInfo = node.getUserObject(); 1842 nodeLeaf = node; 1843 nodeInfoLeaf = nodeInfo; 1844 } 1845 1846 //SearchResult r = (SearchResult) nodeInfoLeaf; 1847 if (nodeInfoLeaf == result) { 1848 showThumbnail((String) result.getExtraData().get("Thumbnail")); 1849 } 1850 } 1851 1852 } 1853 1854 private void jMenuItemChangePasswordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemChangePasswordActionPerformed 1855 ChangePassword changePassword = ChangePassword.getInstance(); 1856 1857 if (changePassword != null) { 1858 changePassword.setVisible(true); 1859 changePassword.toFront(); 1860 } 1861 }//GEN-LAST:event_jMenuItemChangePasswordActionPerformed 1862 1863 private void jMenuItemActiveUsersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemActiveUsersActionPerformed 1864 ActiveSessions activeSessions = ActiveSessions.getInstance(); 1865 1866 if (activeSessions != null) { 1867 activeSessions.setVisible(true); 1868 activeSessions.toFront(); 1869 //this.setEnabled(false); 1870 } 1871 }//GEN-LAST:event_jMenuItemActiveUsersActionPerformed 1872 1873 private void jButtonClientPreferencesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonClientPreferencesActionPerformed 1874 ClientOptions cliOptions = ClientOptions.getInstance(); 1875 1876 if (cliOptions != null) { 1877 cliOptions.setVisible(true); 1878 cliOptions.toFront(); 1879 } 1880 }//GEN-LAST:event_jButtonClientPreferencesActionPerformed 1881 1882 @SuppressWarnings("empty-statement") 1883 private void jMenuItemShutdownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemShutdownActionPerformed 1884 Object[] opt 1885 = { 1886 "Yes", "No" 1887 }; 1888 1889 String message = "Are you shure you want to shutdown the server?"; 1890 int op = JOptionPane.showOptionDialog(this, message, "Shut down Server", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt, opt[1]); 1891 1892 if (op == 0) { 1893 //Logout from GUI Server 1894 if (clientCore.isAdmin()) { 1895 1896 if (AdminRefs.getInstance().unsavedSettings()) { 1897 Object[] opt1 1898 = { 1899 "Save", "Discard" 1900 }; 1901 1902 message = "There are unsaved Server Settings.\nDo you want to save them?"; 1903 op = JOptionPane.showOptionDialog(this, message, "Unsaved Server Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt1, opt1[0]); 1904 1905 if (op == 0) { 1906 AdminRefs.getInstance().saveSettings(); 1907 } 1908 1909 } 1910 } 1911 1912 if (clientCore.isUser()) { 1913 if (ClientOptions.getInstance().unsavedSettings()) { 1914 Object[] opt2 1915 = { 1916 "Save", 1917 "Discard" 1918 }; 1919 1920 message = "There are unsaved Client Settings.\nDo you want to save them?"; 1921 op = JOptionPane.showOptionDialog(this, message, "Unsaved Client Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt2, opt2[0]); 1922 1923 if (op == 0) { 1924 ClientOptions.getInstance().saveSettings(); 1925 } 1926 } 1927 } 1928 1929 QueryHistorySupport.getInstance().saveQueryHistory(); 1930 1931 if (clientCore.isAdmin()) { 1932 AdminRefs.getInstance().shutdownServer(); 1933 } 1934 1935 System.exit(0); 1936 } 1937 }//GEN-LAST:event_jMenuItemShutdownActionPerformed 1938 1939 private void jMenuItemDcm2jpeg2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDcm2jpeg2ActionPerformed 1940 dcm2JPEG(0); 1941 }//GEN-LAST:event_jMenuItemDcm2jpeg2ActionPerformed 1942 1943 private void jMenuItem11ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem11ActionPerformed 1944 //Logout from GUI Server 1945 try { 1946 if (clientCore.isAdmin() && AdminRefs.getInstance().unsavedSettings()) { 1947 Object[] opt 1948 = { 1949 "Save", "Discard", "Cancel" 1950 }; 1951 1952 String message = "There are unsaved Server Settings.\nDo you want to save them?"; 1953 int op = JOptionPane.showOptionDialog(this, message, "Unsaved Server Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt, opt[2]); 1954 1955 if (op == 0) { 1956 AdminRefs.getInstance().saveSettings(); 1957 } 1958 1959 if (op == 2) { 1960 return; 1961 } 1962 } 1963 1964 if (clientCore.isUser() && ClientOptions.getInstance().unsavedSettings()) { 1965 Object[] opt 1966 = { 1967 "Save", "Discard", "Cancel" 1968 }; 1969 1970 String message = "There are unsaved Client Settings.\nDo you want to save them?"; 1971 int op = JOptionPane.showOptionDialog(this, message, "Unsaved Client Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt, opt[2]); 1972 1973 if (op == 0) { 1974 ClientOptions.getInstance().saveSettings(); 1975 } 1976 1977 if (op == 2) { 1978 return; 1979 } 1980 } 1981 1982 if (clientCore.isAdmin()) { 1983 AdminRefs.getInstance().logout(); 1984 } 1985 1986 searchTree.unexportSearchSignal(); 1987 clientCore.getUser().logout(); 1988 1989 } catch (RemoteException ex) { 1990 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 1991 } 1992 File toDelete = new File("pluginClasses"); 1993 String[] deleteArray = toDelete.list(); 1994 if (deleteArray != null) { 1995 for (String fileName : deleteArray) { 1996 File f = new File("pluginClasses/" + fileName); 1997 f.delete(); 1998 } 1999 } 2000 QueryHistorySupport.getInstance().saveQueryHistory(); 2001 2002 if (Main.isFixedClient()) { 2003 clientCore.stopKeepAlives(); 2004 this.dispose(); 2005 } else { 2006 System.exit(0); 2007 } 2008 }//GEN-LAST:event_jMenuItem11ActionPerformed 2009 2010private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem7ActionPerformed 2011 File toDelete = new File("pluginClasses"); 2012 String[] deleteArray = toDelete.list(); 2013 if (deleteArray != null) { 2014 for (String fileName : deleteArray) { 2015 File f = new File("pluginClasses/" + fileName); 2016 f.delete(); 2017 } 2018 } 2019 if (clientCore.isAdmin() && AdminRefs.getInstance().unsavedSettings()) { 2020 Object[] opt 2021 = { 2022 "Save", "Discard", "Cancel" 2023 }; 2024 2025 String message = "There are unsaved Server Settings.\nDo you want to save them?"; 2026 int op = JOptionPane.showOptionDialog(this, message, "Unsaved Server Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt, opt[2]); 2027 2028 if (op == 0) { 2029 AdminRefs.getInstance().saveSettings(); 2030 } 2031 2032 if (op == 2) { 2033 return; 2034 } 2035 } 2036 2037 if (ClientOptions.getInstance().unsavedSettings()) { 2038 Object[] opt 2039 = { 2040 "Save", "Discard", "Cancel" 2041 }; 2042 2043 String message = "There are unsaved Client Settings.\nDo you want to save them?"; 2044 int op = JOptionPane.showOptionDialog(this, message, "Unsaved Client Settings", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opt, opt[2]); 2045 2046 if (op == 0) { 2047 ClientOptions.getInstance().saveSettings(); 2048 } 2049 2050 if (op == 2) { 2051 return; 2052 } 2053 } 2054 2055 QueryHistorySupport.getInstance().saveQueryHistory(); 2056 2057 if (clientCore.isAdmin()) { 2058 AdminRefs.getInstance().shutdownServer(); 2059 } 2060 2061 System.exit(0); 2062}//GEN-LAST:event_jMenuItem7ActionPerformed 2063 2064private void jTreeResultsKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTreeResultsKeyReleased 2065 if (KeyEvent.VK_DELETE == evt.getKeyCode() && clientCore.isAdmin()) { 2066 ArrayList<String> files = getSelectedLocalFiles(); 2067 2068 if (files != null && !files.isEmpty()) { 2069 try { 2070 Object[] opt 2071 = { 2072 "Remove and Delete", "Remove", "Cancel" 2073 }; 2074 String message = "Are you sure you want to remove these files from Index Engine?"; 2075 2076 int op = JOptionPane.showOptionDialog(this, message, "Remove Files", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, opt, opt[2]); 2077 2078 if (op == 0) { 2079 AdminRefs.getInstance().getIndexOptions().removeFilesFromIndexer(files, true); 2080 } 2081 if (op == 1) { 2082 AdminRefs.getInstance().getIndexOptions().removeFilesFromIndexer(files, false); 2083 } 2084 } catch (RemoteException ex) { 2085 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 2086 } 2087 } 2088 } 2089}//GEN-LAST:event_jTreeResultsKeyReleased 2090 2091 /* 2092 * This need some serious rewritting 2093 * alot of cruft 2094 */ 2095private void jTreeResultsValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeResultsValueChanged 2096 2097 /* 2098 DefaultMutableTreeNode node = (DefaultMutableTreeNode) getjTreeResults().getLastSelectedPathComponent(); 2099 if (node == null){ 2100 return; 2101 } 2102 this.jButtonDownload.setEnabled(false); 2103 Object nodeInfo = null; 2104 DefaultMutableTreeNode nodeLeaf = null; 2105 2106 2107 if (node.getLevel() == 4 || (node.isLeaf() && node.getLevel() > 1)){ 2108 Object nodeInfoLeaf = null; 2109 2110 if (node.getLevel() == 4){ 2111 nodeLeaf = node.getFirstLeaf(); 2112 nodeInfoLeaf = nodeLeaf.getUserObject(); 2113 } 2114 else{ 2115 // Leaf 2116 nodeInfo = node.getUserObject(); 2117 nodeLeaf = node; 2118 nodeInfoLeaf = nodeInfo; 2119 } 2120 2121 SearchResult r = (SearchResult) nodeInfoLeaf; 2122 2123 //HashMap extras = r.getExtraData(); 2124 //String thumb = (String) extras.get("Thumbnail"); 2125 2126 //System.out.println("Filename: " + r.getFileName()); 2127 //System.out.println("FileHash: " + r.getFileHash()); 2128 */ 2129 /*if (thumb != null){ 2130 showThumbnail(thumb); 2131 } 2132 else if (!SearchResult.class.isInstance(nodeInfoLeaf) && SearchResult.class.isInstance(nodeInfoLeaf)){ 2133 SearchResult res = searchTree.searchThumbnail(r.getURI(), "filehash");//was r.getFileHash, should be placed on extradata 2134 2135 if (res != null){ 2136 HashMap extras2 = res.getExtraData(); 2137 2138 if (extras2 != null){ 2139 thumb = (String) extras2.get("Thumbnail"); 2140 2141 if (thumb != null){ 2142 extras.put("Thumbnail", thumb); // put the thumbnail in the original SearchResult 2143 2144 showThumbnail(thumb); 2145 } 2146 else{ 2147 cleanThumbnails(); 2148 } 2149 } 2150 } 2151 //TODO 2152 //this must be removed! we must not care where the search comes from 2153 } 2154 else if (SearchResult.class.isInstance(nodeInfoLeaf)){ 2155 searchTree.searchP2PThumbnail(r); 2156 cleanThumbnails(); 2157 } 2158 else{ 2159 cleanThumbnails(); 2160 }*/ 2161 /* } 2162 else{ 2163 cleanThumbnails(); 2164 } 2165 2166 //Controll the enable buttons 2167 if (node.isLeaf()) 2168 { 2169 jButtonDump.setEnabled(true); 2170 IPluginControllerUser plugins = null; 2171 try 2172 { 2173 plugins = this.clientCore.getUser().getPluginController(); 2174 2175 //dafuq is this? 2176 if ((SearchResult) nodeInfo==null) 2177 { 2178 2179 2180 } 2181 */ 2182 //TODO: fix this! 2183 /*if (!plugins.isLocalPlugin(((SearchResult) nodeInfo).getPluginName())) 2184 { 2185 jButtonDownload.setEnabled(true); 2186 jButtonSend.setEnabled(false); 2187 } else 2188 {*/ 2189 /* jButtonSend.setEnabled(true); 2190 jButtonView.setEnabled(true); 2191 //} 2192 } 2193 catch (RemoteException ex){ 2194 Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex); 2195 } 2196 } 2197 else{ 2198 jButtonDump.setEnabled(false); 2199 jButtonDownload.setEnabled(false); 2200 jButtonView.setEnabled(false); 2201 2202 jButtonSend.setEnabled(true); 2203 }*/ 2204}//GEN-LAST:event_jTreeResultsValueChanged 2205 2206private void jTreeResultsTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {//GEN-FIRST:event_jTreeResultsTreeExpanded 2207 //searchTree.completeTree(evt); 2208}//GEN-LAST:event_jTreeResultsTreeExpanded 2209 2210private void jTreeResultsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTreeResultsMouseClicked 2211 //Double Click -> Show MetaData 2212 if (evt.getClickCount() == 2) { 2213 showMetaData(); 2214 } 2215 2216 if (evt.getButton() == MouseEvent.BUTTON3) { 2217 popupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); 2218 popupMenu.list(); 2219 } 2220}//GEN-LAST:event_jTreeResultsMouseClicked 2221 2222private void jButtonExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonExportActionPerformed 2223 if (jTreeResults.getModel().getChildCount(jTreeResults.getModel().getRoot()) == 0) { 2224 JOptionPane.showMessageDialog(this, "You can't export information without search results.", "Lack of Search Results", JOptionPane.INFORMATION_MESSAGE); 2225 return; 2226 } 2227 2228 ExportData ed; 2229 2230 HashMap<String, Boolean> plugins = new HashMap<String, Boolean>(); 2231 for (JCheckBox box : this.ranges) { 2232 plugins.put(box.getText(), box.isSelected()); 2233 } 2234 if (!lastQueryAdvanced) { 2235 2236 ed = new ExportData(lastQueryExecuted, lastQueryKeywords, plugins); 2237 } else { 2238 ed = new ExportData(lastQueryExecuted, true, plugins); 2239 } 2240 2241 ed.setVisible(true); 2242 ed.toFront(); 2243}//GEN-LAST:event_jButtonExportActionPerformed 2244 2245//what a nice and descriptive name... I don't know what it does, 2246//so there is a big chance of having broke something 2247private void jButtonViewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonViewActionPerformed 2248 DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTreeResults.getLastSelectedPathComponent(); 2249 if (node == null) { 2250 return; 2251 } 2252 2253 Object nodeInfo = node.getUserObject(); 2254 // int selected = this.jList1.getSelectedIndex(); 2255 if (node.isLeaf()) { 2256 if (SearchResult.class.isInstance(nodeInfo)) { 2257 SearchResult tmp = (SearchResult) nodeInfo; 2258 2259 //Why are we caring about this? 2260 if (clientCore.isLocalServer()) { 2261 2262 File f = new File(tmp.getURI()); 2263 if (!f.exists()) { 2264 JOptionPane.showMessageDialog(this, "Dicoogle can't open this file, because this file does not exists in your file system. Try Dump button instead View!", "Error opening the file", JOptionPane.ERROR_MESSAGE); 2265 return; 2266 } 2267 2268 if (ClientSettings.getInstance().getExtV() == null 2269 || ClientSettings.getInstance().getExtV().equals("")) { 2270 2271 try { 2272 Desktop.getDesktop().open(new File(tmp.getURI())); 2273 2274 } catch (IOException ex) { 2275 //oh dear 2276 String folder = f.getAbsolutePath().substring(0, f.getAbsolutePath().lastIndexOf('/')); 2277 2278 try { 2279 Desktop.getDesktop().open(new File(folder)); 2280 2281 } catch (IOException ex1) { 2282 JOptionPane.showMessageDialog(this, "Dicoogle can't open this file!", "Error opening the file", JOptionPane.ERROR_MESSAGE); 2283 } 2284 } 2285 } else { 2286 try { 2287 //I changed something, no ideia do i have on what goes around here 2288 ProcessBuilder pb = new ProcessBuilder(ClientSettings.getInstance().getExtV(), tmp.getURI().toString()); 2289 pb.start(); 2290 2291 //Runtime.getRuntime().exec(ClientSettings.getInstance().getExtV() + " "+path); 2292 } catch (IOException ex) { 2293 //ex.printStackTrace(); 2294 2295 String folder = f.getAbsolutePath().substring(0, f.getAbsolutePath().lastIndexOf('/')); 2296 2297 try { 2298 Desktop.getDesktop().open(new File(folder)); 2299 2300 } catch (IOException ex1) { 2301 JOptionPane.showMessageDialog(this, "Dicoogle can't open this file!", "Error opening the file", JOptionPane.ERROR_MESSAGE); 2302 } 2303 } 2304 } 2305 } else { 2306 try { 2307 SimpleEntry<RemoteFile, Integer> entry = UserRefs.getInstance().getSearch().downloadFile(tmp); 2308 2309 TransferStatus ts = new TransferStatus(entry.getKey()); 2310 2311 FileReceiver receiver = new FileReceiver(entry.getKey(), clientCore.getServerAddress(), entry.getValue(), ts); 2312 2313 Thread tReceiver = receiver; 2314 tReceiver.start(); 2315 2316 ts.setVisible(true); 2317 ts.toFront(); 2318 2319 } catch (RemoteException ex) { 2320 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 2321 } catch (IOException ex) { 2322 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 2323 } 2324 } 2325 } 2326 } 2327}//GEN-LAST:event_jButtonViewActionPerformed 2328 2329private void jButtonDownloadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDownloadActionPerformed 2330 2331 DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTreeResults.getLastSelectedPathComponent(); 2332 if (node == null) { 2333 return; 2334 } 2335 2336 Object nodeInfo = node.getUserObject(); 2337 2338 if (node.isLeaf() && SearchResult.class.isInstance(nodeInfo)) { 2339 try { 2340 SearchResult temp = (SearchResult) nodeInfo; 2341 UserRefs.getInstance().getSearch().RequestP2PFile(temp); 2342 2343 } catch (RemoteException ex) { 2344 LoggerFactory.getLogger(MainWindow.class).error(ex.getMessage(), ex); 2345 } 2346 } 2347}//GEN-LAST:event_jButtonDownloadActionPerformed 2348 2349private void jButtonDumpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDumpActionPerformed 2350 showMetaData(); 2351}//GEN-LAST:event_jButtonDumpActionPerformed 2352 2353private void jButtonSendActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSendActionPerformed 2354 ArrayList<String> files = getSelectedLocalFiles(); 2355 2356 if (files != null && !files.isEmpty()) { 2357 DicomSend d = new DicomSend(files); 2358 2359 d.setVisible(true); 2360 d.toFront(); 2361 } else { 2362 JOptionPane.showMessageDialog(this, "Please Select Local Files to send.", "Select files", JOptionPane.INFORMATION_MESSAGE); 2363 } 2364}//GEN-LAST:event_jButtonSendActionPerformed 2365 2366private void jButtonQueryHistoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonQueryHistoryActionPerformed 2367 QueryHistory QH = QueryHistory.getInstance(); 2368 QH.setVisible(true); 2369 QH.toFront(); 2370 QH.setJTextFieldQuery(jTextFieldQuery, jCheckBoxKeywords); 2371}//GEN-LAST:event_jButtonQueryHistoryActionPerformed 2372 2373private void SearchTipsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SearchTipsActionPerformed 2374 SearchTips tip = new SearchTips(this.jTextFieldQuery); 2375 tip.setVisible(true); 2376 tip.toFront(); 2377}//GEN-LAST:event_SearchTipsActionPerformed 2378 2379 enum QUERY_STATE { 2380 2381 READY_TO_SEARCH, WAITING_FOR_RESULTS 2382 } 2383 private QUERY_STATE state = QUERY_STATE.READY_TO_SEARCH; 2384 private boolean basicSearch = true; 2385 2386 public void search() { 2387 2388 LoggerFactory.getLogger(MainWindow.class).debug("State: {}", state); 2389 if (state == QUERY_STATE.WAITING_FOR_RESULTS) { 2390 2391 LoggerFactory.getLogger(MainWindow.class).debug("Pruning query"); 2392 2393 pruneQuery(); 2394 return; 2395 } 2396 2397 this.jButtonDownload.setEnabled(false); 2398 lastQueryExecuted = jTextFieldQuery.getText(); 2399 lastQueryKeywords = jCheckBoxKeywords.isSelected(); 2400 lastQueryAdvanced = false; 2401 HashMap<String, Boolean> plugins = new HashMap<String, Boolean>(); 2402 boolean isSelectedPlugins = false; 2403 for (JCheckBox box : this.ranges) { 2404 plugins.put(box.getText(), box.isSelected()); 2405 isSelectedPlugins = isSelectedPlugins || box.isSelected(); 2406 } 2407 if (!isSelectedPlugins) { 2408 JOptionPane.showMessageDialog(this, "Please select a source to search", "Missing data source", JOptionPane.INFORMATION_MESSAGE); 2409 } else { 2410 basicSearch = true; 2411 searchTree.search(lastQueryExecuted, lastQueryKeywords, plugins); 2412 state = QUERY_STATE.WAITING_FOR_RESULTS; 2413 jButtonSearch.setText("Cancel"); 2414 cleanThumbnails(); 2415 QueryHistorySupport.getInstance().saveQueryHistory(); 2416 } 2417 2418 } 2419 2420 public void pruneQuery() { 2421 System.out.println("Prune here"); 2422 searchTree.pruneQuery(null); 2423 state = QUERY_STATE.READY_TO_SEARCH; 2424 jButtonSearch.setText("Search"); 2425 } 2426 2427 public void finishQuery() { 2428 //System.out.println("The query is done"); 2429 jButtonSearch.setText("Search"); 2430 2431 state = QUERY_STATE.READY_TO_SEARCH; 2432 } 2433 2434 /* 2435 * Updates the tree view using the query results. 2436 * 2437 * todo: the tree is not a parameter to the method, as such it has state. make the tree to be updated an argument 2438 */ 2439 private void updateSearchView(Iterable<SearchResult> searchResultIterator) { 2440 2441 HashMap<String, HashMap<String, HashMap<String, HashMap<String, SearchResult>>>> tree;//omfgIHateYou; 2442 tree = SearchResult.toTree(searchResultIterator); 2443 2444 DefaultMutableTreeNode root = new DefaultMutableTreeNode("Search Results"); 2445 2446 for (String patientName : tree.keySet()) { 2447 DefaultMutableTreeNode patientMap = new DefaultMutableTreeNode(patientName); 2448 root.add(patientMap); 2449 2450 for (String studyUID : tree.get(patientName).keySet()) { 2451 DefaultMutableTreeNode studyMap = new DefaultMutableTreeNode(studyUID); 2452 patientMap.add(studyMap); 2453 2454 for (String seriesUID : tree.get(patientName).get(studyUID).keySet()) { 2455 DefaultMutableTreeNode seriesMap = new DefaultMutableTreeNode(seriesUID); 2456 studyMap.add(seriesMap); 2457 2458 for (SearchResult r : tree.get(patientName).get(studyUID).get(seriesUID).values()) { 2459 DefaultMutableTreeNode images = new DefaultMutableTreeNode(r); 2460 seriesMap.add(images); 2461 } 2462 } 2463 } 2464 } 2465 DefaultTreeModel treeModel = new DefaultTreeModel(root); 2466 jTreeResults.setModel(treeModel); 2467 } 2468 2469private void jButtonSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSearchActionPerformed 2470 String query = jTextFieldQuery.getText(); 2471 2472 //prepares the info we are interested in 2473 HashMap<String, Object> options = new HashMap<>(); 2474 options.put("PatientName", null); 2475 options.put("PatientID", null); 2476 options.put("StudyInstanceUID", null); 2477 options.put("SeriesInstanceUID", null); 2478 options.put("SOPInstanceUID", null); 2479 2480 //runs the query task asynchronously 2481 List<String> providers = new ArrayList<>(); 2482 for (JCheckBox chkBox : this.ranges) { 2483 if (chkBox.isSelected()) { 2484 providers.add(chkBox.getText()); 2485 System.out.println("Selected: " + chkBox.getText()); 2486 } 2487 } 2488 2489 JointQueryTask task = new JointQueryTask() { 2490 2491 @Override 2492 public void onReceive(Task<Iterable<SearchResult>> e) { 2493 // TODO Auto-generated method stub 2494 try { 2495 updateSearchView(e.get()); 2496 } catch (InterruptedException | ExecutionException e1) { 2497 // TODO Auto-generated catch block 2498 e1.printStackTrace(); 2499 } 2500 } 2501 2502 @Override 2503 public void onCompletion() { 2504 // TODO Auto-generated method stub 2505 2506 } 2507 }; 2508 2509 task = PluginController.getInstance().query(task, providers, query, options); 2510 2511 2512}//GEN-LAST:event_jButtonSearchActionPerformed 2513 2514 2515private void DateRangeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_DateRangeActionPerformed 2516 if (ExactDate.isSelected()) { 2517 ExactDate.setSelected(false); 2518 } 2519 StudyDateRangeInitialBoundaryActivation.setEnabled(true); 2520 StudyDateRangeTerminalBoundaryActivation.setEnabled(true); 2521 StudyDateRangeInitialBoundary.setEnabled(false); 2522 StudyDateRangeTerminalBoundary.setEnabled(false); 2523 StudyDate.setEnabled(false); 2524}//GEN-LAST:event_DateRangeActionPerformed 2525 2526private void ExactDateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ExactDateActionPerformed 2527 if (DateRange.isSelected()) { 2528 DateRange.setSelected(false); 2529 } 2530 StudyDateRangeInitialBoundaryActivation.setEnabled(false); 2531 StudyDateRangeTerminalBoundaryActivation.setEnabled(false); 2532 StudyDateRangeInitialBoundary.setEnabled(false); 2533 StudyDateRangeTerminalBoundary.setEnabled(false); 2534 StudyDate.setEnabled(true); 2535}//GEN-LAST:event_ExactDateActionPerformed 2536 2537private void StudyDateRangeTerminalBoundaryActivationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_StudyDateRangeTerminalBoundaryActivationActionPerformed 2538 if (StudyDateRangeTerminalBoundaryActivation.isSelected()) { 2539 StudyDateRangeTerminalBoundary.setEnabled(true); 2540 } else { 2541 StudyDateRangeTerminalBoundary.setEnabled(false); 2542 } 2543}//GEN-LAST:event_StudyDateRangeTerminalBoundaryActivationActionPerformed 2544 2545private void StudyDateRangeInitialBoundaryActivationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_StudyDateRangeInitialBoundaryActivationActionPerformed 2546 if (StudyDateRangeInitialBoundaryActivation.isSelected()) { 2547 StudyDateRangeInitialBoundary.setEnabled(true); 2548 } else { 2549 StudyDateRangeInitialBoundary.setEnabled(false); 2550 } 2551}//GEN-LAST:event_StudyDateRangeInitialBoundaryActivationActionPerformed 2552 2553private void ResetFieldsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ResetFieldsActionPerformed 2554 2555 ModalSelectNone.setSelected(false); 2556 ModalSelectAll.setSelected(true); 2557 ModalCR.setSelected(true); 2558 ModalCT.setSelected(true); 2559 ModalDX.setSelected(true); 2560 ModalES.setSelected(true); 2561 ModalMG.setSelected(true); 2562 ModalMR.setSelected(true); 2563 ModalNM.setSelected(true); 2564 ModalOT.setSelected(true); 2565 ModalPT.setSelected(true); 2566 ModalRF.setSelected(true); 2567 ModalSC.setSelected(true); 2568 ModalUS.setSelected(true); 2569 ModalXA.setSelected(true); 2570 2571 StudyDateRangeInitialBoundary.setEnabled(false); 2572 StudyDateRangeTerminalBoundary.setEnabled(false); 2573 2574 DateRange.setSelected(false); 2575 ExactDate.setSelected(true); 2576 2577 StudyDateRangeInitialBoundaryActivation.setEnabled(false); 2578 StudyDateRangeTerminalBoundaryActivation.setEnabled(false); 2579 StudyDateRangeInitialBoundary.setEnabled(false); 2580 StudyDateRangeTerminalBoundary.setEnabled(false); 2581 StudyDate.setEnabled(true); 2582 PatientName.setText("(All patients)"); 2583 PatientID.setText("(All IDs)"); 2584 PatientGender.setSelectedIndex(0); 2585 InstitutionName.setText("(All institutions)"); 2586 Physician.setText("(All physicians)"); 2587 OperatorName.setText("(All operators)"); 2588 StudyDate.setText("(All dates)"); 2589 StudyDateRangeInitialBoundary.setText("(Beginning)"); 2590 StudyDateRangeTerminalBoundary.setText("(Today)"); 2591}//GEN-LAST:event_ResetFieldsActionPerformed 2592 2593private void AdvancedSearchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_AdvancedSearchButtonActionPerformed 2594 lastQueryExecuted = getAdvancedQuery(); 2595 lastQueryAdvanced = true; 2596 HashMap<String, Boolean> plugins = new HashMap<String, Boolean>(); 2597 for (JCheckBox box : this.ranges) { 2598 plugins.put(box.getText(), box.isSelected()); 2599 } 2600 searchTree.search(lastQueryExecuted, true, plugins); 2601 2602 cleanThumbnails(); 2603}//GEN-LAST:event_AdvancedSearchButtonActionPerformed 2604 2605private void ModalSelectNoneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalSelectNoneActionPerformed 2606 ModalSelectNone.setSelected(true); 2607 ModalSelectAll.setSelected(false); 2608 ModalCR.setSelected(false); 2609 ModalCT.setSelected(false); 2610 ModalDX.setSelected(false); 2611 ModalES.setSelected(false); 2612 ModalMG.setSelected(false); 2613 ModalMR.setSelected(false); 2614 ModalNM.setSelected(false); 2615 ModalOT.setSelected(false); 2616 ModalPT.setSelected(false); 2617 ModalRF.setSelected(false); 2618 ModalSC.setSelected(false); 2619 ModalUS.setSelected(false); 2620 ModalXA.setSelected(false); 2621}//GEN-LAST:event_ModalSelectNoneActionPerformed 2622 2623private void ModalSelectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalSelectAllActionPerformed 2624 ModalSelectNone.setSelected(false); 2625 ModalSelectAll.setSelected(true); 2626 ModalCR.setSelected(true); 2627 ModalCT.setSelected(true); 2628 ModalDX.setSelected(true); 2629 ModalES.setSelected(true); 2630 ModalMG.setSelected(true); 2631 ModalMR.setSelected(true); 2632 ModalNM.setSelected(true); 2633 ModalOT.setSelected(true); 2634 ModalPT.setSelected(true); 2635 ModalRF.setSelected(true); 2636 ModalSC.setSelected(true); 2637 ModalUS.setSelected(true); 2638 ModalXA.setSelected(true); 2639}//GEN-LAST:event_ModalSelectAllActionPerformed 2640 2641private void ModalXAActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalXAActionPerformed 2642 ModalSelectNone.setSelected(true); 2643 ModalSelectAll.setSelected(false); 2644}//GEN-LAST:event_ModalXAActionPerformed 2645 2646private void ModalUSActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalUSActionPerformed 2647 ModalSelectNone.setSelected(true); 2648 ModalSelectAll.setSelected(false); 2649}//GEN-LAST:event_ModalUSActionPerformed 2650 2651private void ModalOTActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalOTActionPerformed 2652 ModalSelectAll.setSelected(false); 2653 ModalSelectNone.setSelected(true); 2654}//GEN-LAST:event_ModalOTActionPerformed 2655 2656private void ModalESActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalESActionPerformed 2657 ModalSelectNone.setSelected(true); 2658 ModalSelectAll.setSelected(false); 2659}//GEN-LAST:event_ModalESActionPerformed 2660 2661private void ModalSCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalSCActionPerformed 2662 ModalSelectNone.setSelected(true); 2663 ModalSelectAll.setSelected(false); 2664}//GEN-LAST:event_ModalSCActionPerformed 2665 2666private void ModalNMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalNMActionPerformed 2667 ModalSelectNone.setSelected(true); 2668 ModalSelectAll.setSelected(false); 2669}//GEN-LAST:event_ModalNMActionPerformed 2670 2671private void ModalDXActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalDXActionPerformed 2672 ModalSelectNone.setSelected(true); 2673 ModalSelectAll.setSelected(false); 2674}//GEN-LAST:event_ModalDXActionPerformed 2675 2676private void ModalRFActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalRFActionPerformed 2677 ModalSelectNone.setSelected(true); 2678 ModalSelectAll.setSelected(false); 2679}//GEN-LAST:event_ModalRFActionPerformed 2680 2681private void ModalMRActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalMRActionPerformed 2682 ModalSelectNone.setSelected(true); 2683 ModalSelectAll.setSelected(false); 2684}//GEN-LAST:event_ModalMRActionPerformed 2685 2686private void ModalCTActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalCTActionPerformed 2687 ModalSelectNone.setSelected(true); 2688 ModalSelectAll.setSelected(false); 2689}//GEN-LAST:event_ModalCTActionPerformed 2690 2691private void ModalPTActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalPTActionPerformed 2692 ModalSelectNone.setSelected(true); 2693 ModalSelectAll.setSelected(false); 2694}//GEN-LAST:event_ModalPTActionPerformed 2695 2696private void ModalMGActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalMGActionPerformed 2697 ModalSelectNone.setSelected(true); 2698 ModalSelectAll.setSelected(false); 2699}//GEN-LAST:event_ModalMGActionPerformed 2700 2701private void ModalCRActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModalCRActionPerformed 2702 ModalSelectNone.setSelected(true); 2703 ModalSelectAll.setSelected(false); 2704}//GEN-LAST:event_ModalCRActionPerformed 2705 2706private void SelectDefaultSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SelectDefaultSearchActionPerformed 2707 SelectAdvancedSearch.setSelected(false); 2708 SelectDefaultSearch.setSelected(true); 2709 jPanel1.setVisible(true); 2710 jPanel2.setVisible(false); 2711}//GEN-LAST:event_SelectDefaultSearchActionPerformed 2712 2713private void SelectAdvancedSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SelectAdvancedSearchActionPerformed 2714 SelectDefaultSearch.setSelected(false); 2715 SelectAdvancedSearch.setSelected(true); 2716 jPanel1.setVisible(false); 2717 jPanel2.setVisible(true); 2718}//GEN-LAST:event_SelectAdvancedSearchActionPerformed 2719 2720 private void scanDisk(boolean resume) { 2721 2722 if (!clientCore.isLocalServer()) { 2723 class Action1 extends FileAction { 2724 2725 private boolean resume = false; 2726 2727 public void setResume(boolean resume) { 2728 2729 this.resume = resume; 2730 } 2731 2732 @Override 2733 public void setFileChoosed(String filePath) { 2734 AdminRefs.getInstance().index(filePath, resume); 2735 2736 /*TaskList tasks = TaskList.getInstance(); 2737 tasks.setVisible(true); 2738 tasks.toFront();*/ 2739 } 2740 } 2741 2742 Action1 action = new Action1(); 2743 action.setResume(resume); 2744 2745 RemoteFileChooser chooser = new RemoteFileChooser(AdminRefs.getInstance().getRFS(), AdminRefs.getInstance().getDefaultFilePath(), action); 2746 2747 chooser.setTitle("Dicoogle Scan Directory"); 2748 chooser.setFileSelectionMode(RemoteFileChooser.DIRECTORIES_ONLY); 2749 2750 chooser.setVisible(true); 2751 // TODO: put showTaskList = false; -- somewhere... 2752 2753 } else { 2754 JFileChooser chooser = new JFileChooser(); 2755 chooser.setCurrentDirectory(new java.io.File(AdminRefs.getInstance().getDefaultFilePath())); 2756 chooser.setDialogTitle("Dicoogle Scan Directory"); 2757 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 2758 chooser.setAcceptAllFileFilterUsed(false); 2759 2760 if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { 2761 AdminRefs.getInstance().index(chooser.getSelectedFile().toString(), resume); 2762 2763 /*TaskList tasks = TaskList.getInstance(); 2764 tasks.setVisible(true); 2765 tasks.toFront();*/ 2766 } 2767 2768 } 2769 2770 } 2771 2772private void jMenuDirScanResumeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuDirScanResumeActionPerformed 2773 2774 scanDisk(true); 2775 2776}//GEN-LAST:event_jMenuDirScanResumeActionPerformed 2777 2778private void jTextFieldQueryKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldQueryKeyPressed 2779 2780 if (evt.getKeyCode() == KeyEvent.VK_ENTER) { 2781 search(); 2782 } 2783 2784 2785}//GEN-LAST:event_jTextFieldQueryKeyPressed 2786 2787 private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened 2788 2789 if (Main.isFixedClient()) { 2790 2791 PluginController PController = PluginController.getInstance(); 2792 //TODO: DELETED 2793 //PController.initGUI(); 2794 } 2795 2796 }//GEN-LAST:event_formWindowOpened 2797 2798 private void jTextFieldQueryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFieldQueryActionPerformed 2799 // TODO add your handling code here: 2800 }//GEN-LAST:event_jTextFieldQueryActionPerformed 2801 2802 // Variables declaration - do not modify//GEN-BEGIN:variables 2803 private javax.swing.JButton AdvancedSearchButton; 2804 private javax.swing.JRadioButton DateRange; 2805 private javax.swing.JRadioButton ExactDate; 2806 private javax.swing.JTextField InstitutionName; 2807 private javax.swing.JCheckBox ModalCR; 2808 private javax.swing.JCheckBox ModalCT; 2809 private javax.swing.JCheckBox ModalDX; 2810 private javax.swing.JCheckBox ModalES; 2811 private javax.swing.JCheckBox ModalMG; 2812 private javax.swing.JCheckBox ModalMR; 2813 private javax.swing.JCheckBox ModalNM; 2814 private javax.swing.JCheckBox ModalOT; 2815 private javax.swing.JCheckBox ModalPT; 2816 private javax.swing.JCheckBox ModalRF; 2817 private javax.swing.JCheckBox ModalSC; 2818 private javax.swing.JRadioButton ModalSelectAll; 2819 private javax.swing.JRadioButton ModalSelectNone; 2820 private javax.swing.JCheckBox ModalUS; 2821 private javax.swing.JCheckBox ModalXA; 2822 private javax.swing.JTextField OperatorName; 2823 private javax.swing.JComboBox PatientGender; 2824 private javax.swing.JTextField PatientID; 2825 private javax.swing.JTextField PatientName; 2826 private javax.swing.JTextField Physician; 2827 private javax.swing.JButton ResetFields; 2828 private javax.swing.JButton SearchTips; 2829 private javax.swing.JRadioButton SelectAdvancedSearch; 2830 private javax.swing.JRadioButton SelectDefaultSearch; 2831 private javax.swing.JTextField StudyDate; 2832 private javax.swing.JTextField StudyDateRangeInitialBoundary; 2833 private javax.swing.JCheckBox StudyDateRangeInitialBoundaryActivation; 2834 private javax.swing.JTextField StudyDateRangeTerminalBoundary; 2835 private javax.swing.JCheckBox StudyDateRangeTerminalBoundaryActivation; 2836 private javax.swing.JButton jButtonClientPreferences; 2837 private javax.swing.JButton jButtonDownload; 2838 private javax.swing.JButton jButtonDump; 2839 private javax.swing.JButton jButtonExport; 2840 private javax.swing.JButton jButtonLogs; 2841 private javax.swing.JButton jButtonPeers; 2842 private javax.swing.JButton jButtonPreferences; 2843 private javax.swing.JButton jButtonQueryHistory; 2844 private javax.swing.JButton jButtonSearch; 2845 private javax.swing.JButton jButtonSend; 2846 private javax.swing.JButton jButtonServices; 2847 private javax.swing.JButton jButtonView; 2848 private javax.swing.JCheckBox jCheckBoxKeywords; 2849 private javax.swing.JLabel jLabel1; 2850 private javax.swing.JLabel jLabel10; 2851 private javax.swing.JLabel jLabel11; 2852 private javax.swing.JLabel jLabel12; 2853 private javax.swing.JLabel jLabel13; 2854 private javax.swing.JLabel jLabel14; 2855 private javax.swing.JLabel jLabel15; 2856 private javax.swing.JLabel jLabel16; 2857 private javax.swing.JLabel jLabel17; 2858 private javax.swing.JLabel jLabel19; 2859 private javax.swing.JLabel jLabel2; 2860 private javax.swing.JLabel jLabel20; 2861 private javax.swing.JLabel jLabel22; 2862 private javax.swing.JLabel jLabel3; 2863 private javax.swing.JLabel jLabel4; 2864 private javax.swing.JLabel jLabel5; 2865 private javax.swing.JLabel jLabel7; 2866 private javax.swing.JLabel jLabel8; 2867 private javax.swing.JLabel jLabel9; 2868 private javax.swing.JLabel jLabelResults; 2869 private javax.swing.JLabel jLabelTime; 2870 private javax.swing.JMenu jMenu10; 2871 private javax.swing.JMenu jMenu11; 2872 private javax.swing.JMenu jMenu12; 2873 private javax.swing.JMenu jMenu9; 2874 private javax.swing.JMenuBar jMenuBar3; 2875 private javax.swing.JMenuItem jMenuDirScan2; 2876 private javax.swing.JMenuItem jMenuDirScanResume; 2877 private javax.swing.JMenuItem jMenuItem1; 2878 private javax.swing.JMenuItem jMenuItem10; 2879 private javax.swing.JMenuItem jMenuItem11; 2880 private javax.swing.JMenuItem jMenuItem2; 2881 private javax.swing.JMenuItem jMenuItem3; 2882 private javax.swing.JMenuItem jMenuItem4; 2883 private javax.swing.JMenuItem jMenuItem5; 2884 private javax.swing.JMenuItem jMenuItem6; 2885 private javax.swing.JMenuItem jMenuItem7; 2886 private javax.swing.JMenuItem jMenuItem8; 2887 private javax.swing.JMenuItem jMenuItem9; 2888 private javax.swing.JMenuItem jMenuItemActiveUsers; 2889 private javax.swing.JMenuItem jMenuItemChangePassword; 2890 private javax.swing.JMenuItem jMenuItemDcm2jpeg2; 2891 private javax.swing.JMenuItem jMenuItemPreferences; 2892 private javax.swing.JMenuItem jMenuItemServices; 2893 private javax.swing.JMenuItem jMenuItemShutdown; 2894 private javax.swing.JMenuItem jMenuItemUsers; 2895 private javax.swing.JMenu jMenuTools2; 2896 private javax.swing.JPanel jPanel1; 2897 private javax.swing.JPanel jPanel2; 2898 private javax.swing.JPanel jPanel3; 2899 private javax.swing.JPanel jPanel4; 2900 private javax.swing.JPanel jPanel5; 2901 private javax.swing.JPanel jPanel6; 2902 private javax.swing.JPanel jPanel8; 2903 private javax.swing.JPanel jPanel9; 2904 private javax.swing.JPanel jPanelThumbnail; 2905 private javax.swing.JScrollPane jScrollPane1; 2906 private javax.swing.JScrollPane jScrollPane2; 2907 private javax.swing.JSeparator jSeparator1; 2908 private javax.swing.JSeparator jSeparator2; 2909 private javax.swing.JSeparator jSeparator3; 2910 private javax.swing.JSplitPane jSplitPane1; 2911 private javax.swing.JTextField jTextFieldQuery; 2912 private javax.swing.JTree jTreeResults; 2913 private javax.swing.JMenu pluginMenu; 2914 private javax.swing.JTabbedPane tabPanel; 2915 // End of variables declaration//GEN-END:variables 2916 2917 /** 2918 * ************************************************ 2919 * Public Methods 2920 ************************************************* 2921 */ 2922 /** 2923 * Checks if the options form is displayed 2924 * 2925 * @return true if not displaying, true otherwise 2926 */ 2927 private void showMetaData() { 2928 /** 2929 * Just show metadata for now 2930 * 2931 */ 2932 DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTreeResults.getLastSelectedPathComponent(); 2933 2934 if (node != null && node.isLeaf() && node.getLevel() > 3) { 2935 2936 Object nodeInfo = node.getUserObject(); 2937 SearchResult fileInfo = (SearchResult) nodeInfo; 2938 2939 if (nodeInfo instanceof SearchResult) { 2940 IndexedMetaData metadataWindow = new IndexedMetaData(fileInfo, this); 2941 metadataWindow.setVisible(true); 2942 metadataWindow.toFront(); 2943 } 2944 } 2945 } 2946 2947 public void showImage(String title, RenderedImage image) { 2948 if (jPanelThumbnail == null) { 2949 2950 // It can be used to show image in external window 2951 JFrame f = new JFrame(title); 2952 if (image != null) { 2953 f.getContentPane().add(new DisplayJAI(image)); 2954 } 2955 f.pack(); 2956 //f.setVisible(true); 2957 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 2958 } else { 2959 jPanelThumbnail.removeAll(); 2960 jPanelThumbnail.setLayout(new FlowLayout()); 2961 2962 // Yet another bugfix 2963 // If the indexed image does not have a thumbnail, it leads to a Null Pointer Exception 2964 if (image != null) { 2965 jPanelThumbnail.add(new DisplayJAI(image)); 2966 } 2967 2968 jPanelThumbnail.validate(); 2969 jPanelThumbnail.setVisible(true); 2970 } 2971 } 2972 2973 /** 2974 * @return the jLabelResults 2975 */ 2976 public javax.swing.JLabel getjLabelResults() { 2977 return jLabelResults; 2978 } 2979 2980 /** 2981 * @param jLabelResults the jLabelResults to set 2982 */ 2983 public void setjLabelResults(javax.swing.JLabel jLabelResults) { 2984 this.jLabelResults = jLabelResults; 2985 } 2986 2987 /** 2988 * @return the jLabelTime 2989 */ 2990 public javax.swing.JLabel getjLabelTime() { 2991 return jLabelTime; 2992 } 2993 2994 /** 2995 * @param jLabelTime the jLabelTime to set 2996 */ 2997 public void setjLabelTime(javax.swing.JLabel jLabelTime) { 2998 this.jLabelTime = jLabelTime; 2999 } 3000 3001 /** 3002 * @return the jTreeResults 3003 */ 3004 public javax.swing.JTree getjTreeResults() { 3005 return jTreeResults; 3006 } 3007 3008 /** 3009 * @param jTreeResults the jTreeResults to set 3010 */ 3011 public void setjTreeResults(javax.swing.JTree jTreeResults) { 3012 this.jTreeResults = jTreeResults; 3013 } 3014 3015 private void showThumbnail(String thumb) { 3016 if (thumb == null) { 3017 return; 3018 } 3019 3020 byte[] tb = Base64.decodeBase64(thumb.getBytes()); 3021 ByteArrayInputStream in = new ByteArrayInputStream(tb); 3022 RenderedImage out; 3023 try { 3024 out = ImageIO.read(in); 3025 jPanelThumbnail.setSize(64, 64); 3026 Result2Tree.showImage("Image Thumbnail", out, jPanelThumbnail); 3027 repaint(); 3028 } catch (IOException ex) { 3029 cleanThumbnails(); 3030 } 3031 } 3032 3033 private String getAdvancedQuery() { 3034 boolean modified = false; 3035 String advancedquery = ""; 3036 3037 if (!((PatientName.getText()).equals("(All patients)")) && !((PatientName.getText()).isEmpty())) { 3038 if (!modified) { 3039 advancedquery = (advancedquery + "PatientName:(" + PatientName.getText() + ")"); 3040 modified = true; 3041 } else { 3042 advancedquery = (advancedquery + " AND PatientName:(" + PatientName.getText() + ")"); 3043 } 3044 } 3045 3046 if (!((PatientID.getText()).equals("(All IDs)")) && !((PatientID.getText()).isEmpty())) { 3047 if (!modified) { 3048 advancedquery = (advancedquery + "PatientID:(" + PatientID.getText() + ")"); 3049 modified = true; 3050 } else { 3051 advancedquery = (advancedquery + " AND PatientID:(" + PatientID.getText() + ")"); 3052 } 3053 } 3054 3055 // 0 - All 1 - Male 1 - Female 3056 if (PatientGender.getSelectedItem().equals("All")) { 3057 } else if (PatientGender.getSelectedItem().equals("Male")) { 3058 if (!modified) { 3059 advancedquery = (advancedquery + "PatientSex:M"); 3060 modified = true; 3061 } else { 3062 advancedquery = (advancedquery + " AND PatientSex:M"); 3063 } 3064 } else if (PatientGender.getSelectedItem().equals("Female")) { 3065 if (!modified) { 3066 advancedquery = (advancedquery + "PatientSex:F"); 3067 modified = true; 3068 } else { 3069 advancedquery = (advancedquery + " AND PatientSex:F"); 3070 } 3071 } 3072 3073 if (!((InstitutionName.getText()).equals("(All institutions)")) && !((InstitutionName.getText()).isEmpty())) { 3074 if (!modified) { 3075 advancedquery = (advancedquery + "InstitutionName:(" + InstitutionName.getText() + ")"); 3076 modified = true; 3077 } else { 3078 advancedquery = (advancedquery + " AND InstitutionName:(" + InstitutionName.getText() + ")"); 3079 } 3080 } 3081 3082 if (!((Physician.getText()).equals("(All physicians)")) && !((Physician.getText()).isEmpty())) { 3083 if (!modified) { 3084 advancedquery = (advancedquery + "(PerformingPhysicianName:(" + Physician.getText() + ") OR ReferringPhysicianName:(" + Physician.getText() + "))"); 3085 modified = true; 3086 } else { 3087 advancedquery = (advancedquery + " AND (PerformingPhysicianName:(" + Physician.getText() + ") OR ReferringPhysicianName:(" + Physician.getText() + "))"); 3088 } 3089 } 3090 3091 if (!((OperatorName.getText()).equals("(All operators)")) && !((OperatorName.getText()).isEmpty())) { 3092 if (!modified) { 3093 advancedquery = (advancedquery + "OperatorName:(" + OperatorName.getText() + ")"); 3094 modified = true; 3095 } else { 3096 advancedquery = (advancedquery + " AND OperatorName:(" + OperatorName.getText() + ")"); 3097 } 3098 } 3099 3100 if (ExactDate.isSelected()) { 3101 if (!((StudyDate.getText()).equals("(All dates)")) && !((StudyDate.getText()).isEmpty())) { 3102 if (!modified) { 3103 advancedquery = (advancedquery + "StudyDate:(" + StudyDate.getText() + ")"); 3104 modified = true; 3105 } else { 3106 advancedquery = (advancedquery + " AND StudyDate:(" + StudyDate.getText() + ")"); 3107 } 3108 } 3109 } else { 3110 //http://www.rgagnon.com/javadetails/java-0106.html 3111 Calendar cal = Calendar.getInstance(); 3112 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 3113 //sdf.format(cal.getTime()); 3114 3115 if (modified) { 3116 advancedquery = (advancedquery + " AND StudyDate:["); 3117 } else { 3118 advancedquery = advancedquery + "StudyDate:["; 3119 } 3120 modified = true; 3121 3122 if (StudyDateRangeInitialBoundaryActivation.isSelected() && StudyDateRangeTerminalBoundaryActivation.isSelected()) { 3123 if (((StudyDateRangeInitialBoundary.getText()).equals("(Beginning)")) || ((StudyDateRangeInitialBoundary.getText()).isEmpty())) { 3124 advancedquery = (advancedquery + "0000101 TO "); 3125 } else { 3126 advancedquery = advancedquery + StudyDateRangeInitialBoundary.getText() + " TO "; 3127 } 3128 3129 if (((StudyDateRangeTerminalBoundary.getText()).equals("(Today)")) || ((StudyDateRangeTerminalBoundary.getText()).isEmpty())) { 3130 advancedquery = advancedquery + sdf.format(cal.getTime()) + "]"; 3131 } else { 3132 advancedquery = advancedquery + StudyDateRangeTerminalBoundary.getText() + "]"; 3133 } 3134 } else if (StudyDateRangeInitialBoundaryActivation.isSelected() && !StudyDateRangeTerminalBoundaryActivation.isSelected()) { 3135 if (((StudyDateRangeInitialBoundary.getText()).equals("(Beginning)")) || ((StudyDateRangeInitialBoundary.getText()).isEmpty())) { 3136 advancedquery = (advancedquery + "0000101 TO "); 3137 } else { 3138 advancedquery = advancedquery + StudyDateRangeInitialBoundary.getText() + " TO "; 3139 } 3140 3141 advancedquery = advancedquery + sdf.format(cal.getTime()) + "]"; 3142 } else if (!StudyDateRangeInitialBoundaryActivation.isSelected() && StudyDateRangeTerminalBoundaryActivation.isSelected()) { 3143 advancedquery = advancedquery + "0000101 TO "; 3144 if (((StudyDateRangeTerminalBoundary.getText()).equals("(Today)")) || ((StudyDateRangeTerminalBoundary.getText()).isEmpty())) { 3145 advancedquery = advancedquery + sdf.format(cal.getTime()) + "]"; 3146 } else { 3147 advancedquery = advancedquery + StudyDateRangeTerminalBoundary.getText() + "]"; 3148 } 3149 3150 } else { 3151 advancedquery = (advancedquery + "0000101 TO "); 3152 advancedquery = advancedquery + sdf.format(cal.getTime()) + "]"; 3153 } 3154 } 3155 3156 if (ModalSelectAll.isSelected()) { 3157 if (modified) { 3158 advancedquery = advancedquery + " AND "; 3159 } 3160 3161 advancedquery = advancedquery + "*:*"; 3162 } else { 3163 String modalities = ""; 3164 if (modified) { 3165 modalities = modalities + " AND ("; 3166 } else { 3167 modalities = modalities + "("; 3168 } 3169 boolean ModSelected = false; 3170 3171 if (ModalCR.isSelected()) { 3172 modified = true; 3173 ModSelected = true; 3174 modalities = modalities + "Modality:CR"; 3175 } 3176 3177 if (ModalCT.isSelected()) { 3178 modified = true; 3179 if (ModSelected) { 3180 modalities = modalities + " OR "; 3181 } 3182 ModSelected = true; 3183 modalities = modalities + "Modality:CT"; 3184 } 3185 3186 if (ModalDX.isSelected()) { 3187 modified = true; 3188 if (ModSelected) { 3189 modalities = modalities + " OR "; 3190 } 3191 ModSelected = true; 3192 modalities = modalities + "Modality:DX"; 3193 } 3194 3195 if (ModalES.isSelected()) { 3196 modified = true; 3197 if (ModSelected) { 3198 modalities = modalities + " OR "; 3199 } 3200 ModSelected = true; 3201 modalities = modalities + "Modality:ES"; 3202 } 3203 3204 if (ModalMG.isSelected()) { 3205 modified = true; 3206 if (ModSelected) { 3207 modalities = modalities + " OR "; 3208 } 3209 ModSelected = true; 3210 modalities = modalities + "Modality:MG"; 3211 } 3212 3213 if (ModalMR.isSelected()) { 3214 modified = true; 3215 if (ModSelected) { 3216 modalities = modalities + " OR "; 3217 } 3218 ModSelected = true; 3219 modalities = modalities + "Modality:MR"; 3220 } 3221 3222 if (ModalNM.isSelected()) { 3223 modified = true; 3224 if (ModSelected) { 3225 modalities = modalities + " OR "; 3226 } 3227 ModSelected = true; 3228 modalities = modalities + "Modality:NM"; 3229 } 3230 3231 if (ModalOT.isSelected()) { 3232 modified = true; 3233 if (ModSelected) { 3234 modalities = modalities + " OR "; 3235 } 3236 ModSelected = true; 3237 modalities = modalities + "Modality:OT"; 3238 } 3239 3240 if (ModalPT.isSelected()) { 3241 modified = true; 3242 if (ModSelected) { 3243 modalities = modalities + " OR "; 3244 } 3245 ModSelected = true; 3246 modalities = modalities + "Modality:PT"; 3247 } 3248 3249 if (ModalRF.isSelected()) { 3250 modified = true; 3251 if (ModSelected) { 3252 modalities = modalities + " OR "; 3253 } 3254 ModSelected = true; 3255 modalities = modalities + "Modality:RF"; 3256 } 3257 3258 if (ModalSC.isSelected()) { 3259 modified = true; 3260 if (ModSelected) { 3261 modalities = modalities + " OR "; 3262 } 3263 ModSelected = true; 3264 modalities = modalities + "Modality:SC"; 3265 } 3266 3267 if (ModalUS.isSelected()) { 3268 modified = true; 3269 if (ModSelected) { 3270 modalities = modalities + " OR "; 3271 } 3272 ModSelected = true; 3273 modalities = modalities + "Modality:US"; 3274 } 3275 3276 if (ModalXA.isSelected()) { 3277 modified = true; 3278 if (ModSelected) { 3279 modalities = modalities + " OR "; 3280 } 3281 ModSelected = true; 3282 modalities = modalities + "Modality:XA"; 3283 } 3284 3285 modalities = modalities + ")"; 3286 3287 if (!modalities.equals(" AND ()")) { 3288 advancedquery = advancedquery + modalities; 3289 } 3290 } 3291 3292 // System.out.println(modalities); 3293 if (!modified) { 3294 advancedquery = "*:*"; 3295 } 3296 3297 return advancedquery; 3298 } 3299 3300 public javax.swing.JMenu getMenu() { 3301 return jMenuTools2; 3302 } 3303 3304}