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}