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 * ActiveSessions.java 022 * 023 * Created on 26/Abr/2010, 14:56:44 024 */ 025 026package pt.ua.dicoogle.rGUI.client.windows; 027 028import java.awt.Image; 029import java.awt.Toolkit; 030import java.rmi.RemoteException; 031import java.util.HashMap; 032import java.util.Iterator; 033import java.util.Timer; 034import java.util.TimerTask; 035import org.slf4j.Logger; 036import org.slf4j.LoggerFactory; 037import org.slf4j.Logger; 038import org.slf4j.LoggerFactory; 039import javax.swing.DefaultListModel; 040import javax.swing.JOptionPane; 041import pt.ua.dicoogle.rGUI.client.AdminRefs; 042import pt.ua.dicoogle.rGUI.interfaces.controllers.IActiveSessions; 043import pt.ua.dicoogle.server.users.UserON; 044 045/** 046 * 047 * @author samuelcampos 048 */ 049@Deprecated 050public class ActiveSessions extends javax.swing.JFrame { 051 private HashMap<Integer, UserON> usersTable; 052 private IActiveSessions activeSessions; 053 054 private int adminID = -1; 055 056 private Timer timer; 057 private static int timeoutTime = 10000; //10 seconds 058 private TimerTask task; 059 060 private static ActiveSessions instance = null; 061 062 public static synchronized ActiveSessions getInstance() { 063 if (instance == null) { 064 instance = new ActiveSessions(); 065 } 066 return instance; 067 } 068 069 /** Creates new form ActiveSessions */ 070 private ActiveSessions() { 071 initComponents(); 072 073 Image image = Toolkit.getDefaultToolkit().getImage(Thread.currentThread().getContextClassLoader().getResource("trayicon.gif")); 074 this.setIconImage(image); 075 076 this.setTitle("Active Users"); 077 timer = new Timer(); 078 079 activeSessions = AdminRefs.getInstance().getActiveSessions(); 080 081 try { 082 adminID = activeSessions.getAdminID(); 083 } catch (RemoteException ex) { 084 LoggerFactory.getLogger(ActiveSessions.class).error(ex.getMessage(), ex); 085 } 086 } 087 088 private void RefreshUsers(){ 089 try { 090 usersTable = activeSessions.getUsersTable(); 091 092 DefaultListModel model = (DefaultListModel) jListUsers.getModel(); 093 model.clear(); 094 095 Iterator<Integer> en = usersTable.keySet().iterator(); 096 097 while(en.hasNext()) 098 model.addElement(usersTable.get(en.next())); 099 100 jListUsers.setModel(model); 101 } catch (RemoteException ex) { 102 LoggerFactory.getLogger(ActiveSessions.class).error(ex.getMessage(), ex); 103 } 104 } 105 106 /** This method is called from within the constructor to 107 * initialize the form. 108 * WARNING: Do NOT modify this code. The content of this method is 109 * always regenerated by the Form Editor. 110 */ 111 @SuppressWarnings("unchecked") 112 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 113 private void initComponents() { 114 115 buttonGroup1 = new javax.swing.ButtonGroup(); 116 jScrollPane1 = new javax.swing.JScrollPane(); 117 DefaultListModel model = new DefaultListModel(); 118 jListUsers = new javax.swing.JList(model); 119 jButtonLogout = new javax.swing.JButton(); 120 jLabel1 = new javax.swing.JLabel(); 121 jLabel2 = new javax.swing.JLabel(); 122 123 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 124 setMinimumSize(new java.awt.Dimension(446, 291)); 125 addWindowListener(new java.awt.event.WindowAdapter() { 126 public void windowClosing(java.awt.event.WindowEvent evt) { 127 formWindowClosing(evt); 128 } 129 }); 130 addComponentListener(new java.awt.event.ComponentAdapter() { 131 public void componentShown(java.awt.event.ComponentEvent evt) { 132 formComponentShown(evt); 133 } 134 }); 135 136 jScrollPane1.setViewportView(jListUsers); 137 138 jButtonLogout.setText("Logout User"); 139 jButtonLogout.addActionListener(new java.awt.event.ActionListener() { 140 public void actionPerformed(java.awt.event.ActionEvent evt) { 141 jButtonLogoutActionPerformed(evt); 142 } 143 }); 144 145 jLabel1.setText("Active users in this moment:"); 146 147 jLabel2.setText("List Refresh Time: 10 seconds"); 148 149 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); 150 getContentPane().setLayout(layout); 151 layout.setHorizontalGroup( 152 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 153 .add(layout.createSequentialGroup() 154 .add(41, 41, 41) 155 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) 156 .add(layout.createSequentialGroup() 157 .add(jLabel2) 158 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 159 .add(jButtonLogout)) 160 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 161 .add(jLabel1) 162 .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 367, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) 163 .addContainerGap(38, Short.MAX_VALUE)) 164 ); 165 layout.setVerticalGroup( 166 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 167 .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() 168 .addContainerGap(21, Short.MAX_VALUE) 169 .add(jLabel1) 170 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 171 .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 188, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 172 .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) 173 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 174 .add(jButtonLogout) 175 .add(jLabel2)) 176 .add(20, 20, 20)) 177 ); 178 179 pack(); 180 }// </editor-fold>//GEN-END:initComponents 181 182 private void jButtonLogoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonLogoutActionPerformed 183 try { 184 UserON user = (UserON) jListUsers.getSelectedValue(); 185 186 if(user != null){ 187 if(user.getUserID() != adminID){ 188 if(activeSessions.adminLogoutUser(user.getUserID())) 189 RefreshUsers(); 190 } 191 else 192 JOptionPane.showMessageDialog(this, "You can't logout yourself.", 193 "User Selection", JOptionPane.INFORMATION_MESSAGE); 194 } 195 else 196 JOptionPane.showMessageDialog(this, "Please select one user.", 197 "User Selection", JOptionPane.INFORMATION_MESSAGE); 198 199 } catch (RemoteException ex) { 200 LoggerFactory.getLogger(ActiveSessions.class).error(ex.getMessage(), ex); 201 } 202 }//GEN-LAST:event_jButtonLogoutActionPerformed 203 204 private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown 205 task = new UsersRegfresh(); 206 timer.schedule(task, 100, timeoutTime); 207 }//GEN-LAST:event_formComponentShown 208 209 private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing 210 task.cancel(); 211 timer.purge(); 212 }//GEN-LAST:event_formWindowClosing 213 214 // Variables declaration - do not modify//GEN-BEGIN:variables 215 private javax.swing.ButtonGroup buttonGroup1; 216 private javax.swing.JButton jButtonLogout; 217 private javax.swing.JLabel jLabel1; 218 private javax.swing.JLabel jLabel2; 219 private javax.swing.JList jListUsers; 220 private javax.swing.JScrollPane jScrollPane1; 221 // End of variables declaration//GEN-END:variables 222 223 private class UsersRegfresh extends TimerTask { 224 225 @Override 226 public void run() { 227 RefreshUsers(); 228 } 229 } 230}