001/** 002 * Copyright (C) 2014 Universidade de Aveiro, DETI/IEETA, Bioinformatics Group - http://bioinformatics.ua.pt/ 003 * 004 * This file is part of Dicoogle/dicoogle. 005 * 006 * Dicoogle/dicoogle is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * Dicoogle/dicoogle is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Dicoogle. If not, see <http://www.gnu.org/licenses/>. 018 */ 019package pt.ua.dicoogle.rGUI.client.windows; 020 021import java.awt.Image; 022import java.awt.Toolkit; 023import java.net.URL; 024import java.rmi.RemoteException; 025import java.rmi.server.RMISocketFactory; 026import java.rmi.server.UnicastRemoteObject; 027import java.util.ArrayList; 028import org.slf4j.Logger; 029import org.slf4j.LoggerFactory; 030import org.slf4j.Logger; 031import org.slf4j.LoggerFactory; 032import javax.swing.ImageIcon; 033 034import javax.swing.JTree; 035import javax.swing.JFrame; 036import javax.swing.tree.DefaultMutableTreeNode; 037import javax.swing.tree.DefaultTreeModel; 038import pt.ua.dicoogle.rGUI.client.signals.LogsSignal; 039import pt.ua.dicoogle.rGUI.interfaces.controllers.ILogs; 040import pt.ua.dicoogle.Main; 041 042import pt.ua.dicoogle.DicomLog.LogLine; 043import pt.ua.dicoogle.rGUI.MultihomeRMIClientSocketFactory; 044import pt.ua.dicoogle.rGUI.client.AdminRefs; 045import pt.ua.dicoogle.rGUI.interfaces.signals.ILogsSignal; 046 047/** 048 * There are two diferent logs in this class 049 * the Server Log with the activities in server 050 * and the DICOM Services Log 051 * 052 * @author Samuel Campos <samuelcampos@ua.pt> 053 */ 054@Deprecated 055public class Logs extends JFrame { 056 057 private static Logs instance = null; 058 private static ILogs logs; 059 private static ILogsSignal logsSignal; 060 private DefaultMutableTreeNode topLog = null; 061 062 public static Image getImage(final String pathAndFileName) { 063 final URL url = Thread.currentThread().getContextClassLoader().getResource(pathAndFileName); 064 return Toolkit.getDefaultToolkit().getImage(url); 065 } 066 067 068 public static synchronized Logs getInstance() { 069 if (instance == null) { 070 instance = new Logs(); 071 } 072 073 return instance; 074 } 075 076 /** Creates new form Logs */ 077 private Logs() { 078 initComponents(); 079 080 Image image = Toolkit.getDefaultToolkit().getImage(Thread.currentThread().getContextClassLoader().getResource("trayicon.gif")); 081 this.setIconImage(image); 082 083 084 Logs.logs = AdminRefs.getInstance().getLogs(); 085 086 topLog = new DefaultMutableTreeNode("Logging.."); 087 jTreeLog.setModel(new DefaultTreeModel(topLog)); 088 089 try { 090 logsSignal = new LogsSignal(this); 091 092 ILogsSignal logsSignalStub = (ILogsSignal) UnicastRemoteObject.exportObject(logsSignal, 0, new MultihomeRMIClientSocketFactory(), RMISocketFactory.getDefaultSocketFactory());; 093 094 //if (logs == null) 095 // System.out.println("LOGS IS NULL"); 096 097 logs.RegisterSignalBack(logsSignalStub); 098 099 } catch (RemoteException ex) { 100 LoggerFactory.getLogger(Logs.class).error(ex.getMessage(), ex); 101 } 102 } 103 104 public void getDICOMLog() { 105 try { 106 ArrayList<LogLine> logLines = logs.getPendingDICOMLog(); 107 108 for (LogLine line : logLines) { 109 addDICOMLog(line); 110 } 111 112 jTreeLog.setModel(new DefaultTreeModel(topLog)); 113 114 } catch (RemoteException ex) { 115 LoggerFactory.getLogger(Logs.class).error(ex.getMessage(), ex); 116 } 117 } 118 119 public void getServerLog() { 120 try { 121 String logText = logs.getServerLog(); 122 123 jTextLogWindow.setText(logText); 124 jTextLogWindow.setCaretPosition(jTextLogWindow.getDocument().getLength()); 125 126 } catch (RemoteException ex) { 127 LoggerFactory.getLogger(Logs.class).error(ex.getMessage(), ex); 128 } 129 } 130 131 public void getSessionsLog(){ 132 try { 133 String addLog = logs.getPendingSessionsLog(); 134 135 jTextSessionsLogWindow.setText(jTextSessionsLogWindow.getText() + addLog); 136 137 } catch (RemoteException ex) { 138 LoggerFactory.getLogger(Logs.class).error(ex.getMessage(), ex); 139 } 140 } 141 142 private void addDICOMLog(LogLine l) { 143 DefaultMutableTreeNode group = null; 144 DefaultMutableTreeNode subGroup = null; 145 146 group = new DefaultMutableTreeNode(l.getType() + " -- " + l.getDate()); 147 topLog.add(group); 148 subGroup = new DefaultMutableTreeNode(l.getAe() + ":: " + l.getAdd()); 149 group.add(subGroup); 150 } 151 152 /** This method is called from within the constructor to 153 * initialize the form. 154 * WARNING: Do NOT modify this code. The content of this method is 155 * always regenerated by the Form Editor. 156 */ 157 @SuppressWarnings("unchecked") 158 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 159 private void initComponents() { 160 161 jTabbedPane1 = new javax.swing.JTabbedPane(); 162 jScrollPane1 = new javax.swing.JScrollPane(); 163 jTextLogWindow = new javax.swing.JTextArea(); 164 jScrollPane8 = new javax.swing.JScrollPane(); 165 //Create the nodes. 166 topLog =new DefaultMutableTreeNode("Logging.."); 167 jTreeLog = new JTree(topLog); 168 jScrollPane2 = new javax.swing.JScrollPane(); 169 jTextSessionsLogWindow = new javax.swing.JTextArea(); 170 jButtonClear = new javax.swing.JButton(); 171 172 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 173 setTitle("Logs"); 174 setMinimumSize(new java.awt.Dimension(400, 300)); 175 addWindowListener(new java.awt.event.WindowAdapter() { 176 public void windowClosing(java.awt.event.WindowEvent evt) { 177 formWindowClosing(evt); 178 } 179 }); 180 181 jTextLogWindow.setColumns(20); 182 jTextLogWindow.setEditable(false); 183 jTextLogWindow.setRows(5); 184 jScrollPane1.setViewportView(jTextLogWindow); 185 186 jTabbedPane1.addTab("Server Log", jScrollPane1); 187 188 jScrollPane8.setViewportView(jTreeLog); 189 190 jTabbedPane1.addTab("DICOM Log Services", jScrollPane8); 191 192 jTextSessionsLogWindow.setColumns(20); 193 jTextSessionsLogWindow.setEditable(false); 194 jTextSessionsLogWindow.setRows(5); 195 jScrollPane2.setViewportView(jTextSessionsLogWindow); 196 197 jTabbedPane1.addTab("User Sessions Log", jScrollPane2); 198 199 jButtonClear.setIcon(new ImageIcon(getImage("log.gif"))); 200 jButtonClear.setText("Clear Log"); 201 jButtonClear.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 202 jButtonClear.setMaximumSize(new java.awt.Dimension(97, 21)); 203 jButtonClear.setMinimumSize(new java.awt.Dimension(97, 21)); 204 jButtonClear.setPreferredSize(new java.awt.Dimension(97, 21)); 205 jButtonClear.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 206 jButtonClear.addActionListener(new java.awt.event.ActionListener() { 207 public void actionPerformed(java.awt.event.ActionEvent evt) { 208 jButtonClearActionPerformed(evt); 209 } 210 }); 211 212 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 213 getContentPane().setLayout(layout); 214 layout.setHorizontalGroup( 215 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 216 .addGroup(layout.createSequentialGroup() 217 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 218 .addGroup(layout.createSequentialGroup() 219 .addContainerGap() 220 .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 511, Short.MAX_VALUE)) 221 .addGroup(layout.createSequentialGroup() 222 .addGap(14, 14, 14) 223 .addComponent(jButtonClear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) 224 .addContainerGap()) 225 ); 226 layout.setVerticalGroup( 227 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 228 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 229 .addComponent(jButtonClear, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE) 230 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 231 .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE) 232 .addContainerGap()) 233 ); 234 235 jTabbedPane1.getAccessibleContext().setAccessibleName("Server Log"); 236 237 pack(); 238 }// </editor-fold>//GEN-END:initComponents 239 240 private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing 241 MainWindow main = MainWindow.getInstance(); 242 243 main.toFront(); 244 main.setEnabled(true); 245 246 this.dispose(); 247 }//GEN-LAST:event_formWindowClosing 248 249 private void jButtonClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonClearActionPerformed 250 try { 251 if (jTabbedPane1.getSelectedIndex() == 0) { 252 logs.clearServerLog(); 253 } else if(jTabbedPane1.getSelectedIndex() == 1) { 254 255 //LogDICOM.getInstance().clearLog(); 256 logs.clearDICOMLog(); 257 258 topLog = new DefaultMutableTreeNode("Logging.."); 259 260 jTreeLog.setModel(new DefaultTreeModel(topLog)); 261 } 262 else { 263 jTextSessionsLogWindow.setText(""); 264 logs.clearSessionsLog(); 265 } 266 } catch (RemoteException ex) { 267 LoggerFactory.getLogger(Logs.class).error(ex.getMessage(), ex); 268 } 269}//GEN-LAST:event_jButtonClearActionPerformed 270 // Variables declaration - do not modify//GEN-BEGIN:variables 271 private javax.swing.JButton jButtonClear; 272 private javax.swing.JScrollPane jScrollPane1; 273 private javax.swing.JScrollPane jScrollPane2; 274 private javax.swing.JScrollPane jScrollPane8; 275 private javax.swing.JTabbedPane jTabbedPane1; 276 private javax.swing.JTextArea jTextLogWindow; 277 private javax.swing.JTextArea jTextSessionsLogWindow; 278 private javax.swing.JTree jTreeLog; 279 // End of variables declaration//GEN-END:variables 280}