// $Id: SystemInfoDialog.java,v 1.8 2004/06/24 06:25:40 linus Exp $
// Copyright (c) 2003-2004 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
// software and its documentation without fee, and without a written
// agreement is hereby granted, provided that the above copyright notice
// and this paragraph appear in all copies. This software program and
// documentation are copyrighted by The Regents of the University of
// California. The software program and documentation are supplied "AS
// IS", without any accompanying services from The Regents. The Regents
// does not warrant that the operation of the program will be
// uninterrupted or error-free. The end-user understands that the program
// was developed for research purposes and is advised not to rely
// exclusively on the program for any reason. IN NO EVENT SHALL THE
// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
/*
* SessionDialog.java
*/
package org.argouml.ui;
import java.awt.Frame;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import org.argouml.kernel.ProjectManager;
import org.argouml.kernel.ClienteConecta;
import org.argouml.kernel.ClienteConecta;
import org.tigris.gef.base.Editor;
import org.tigris.gef.base.Globals;
import org.tigris.gef.base.SelectionManager;
import org.tigris.gef.base.ClienteConectaGEF;
import org.tigris.gef.base.ClienteRecebe;
import javax.swing.JComboBox;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
import org.argouml.kernel.ProjectManager;
import org.argouml.kernel.*;
import org.argouml.ui.*;
import org.argouml.uml.ui.TabCht;
import org.argouml.uml.diagram.ui.UMLDiagram;
import org.argouml.uml.diagram.use_case.ui.*;
import org.argouml.i18n.Translator;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.StringBufferInputStream;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
// Imports da colabora��o
import org.tigris.gef.base.Diagram;
import org.tigris.gef.base.Editor;
import org.tigris.gef.base.Globals;
import org.tigris.gef.base.Globals;
import org.tigris.gef.base.ClienteConectaGEF;
import org.tigris.gef.presentation.Fig;
import org.argouml.kernel.ProjectManager;
import org.argouml.kernel.ClienteConecta;
import org.argouml.ui.LookAndFeelMgr;
import org.argouml.util.ArgoDialog;
/**
* Display System Information (JDK Version, JDK Vendor, etc).
* A Copy to System Clipboard button is provided to help generate bug reports.
*
* @author Eugenio Alvarez
*/
public class SessionDialog extends ArgoDialog {
////////////////////////////////////////////////////////////////
// instance varaibles
JButton _aplButton = new JButton();
JLabel _labelsessao = new JLabel("Nova sess�o:");
JTextField _textosessao = new JTextField("", 20);
JTable _table = new JTable(0, 0);
JLabel _titleLabel;
JLabel _userLabel;
public static String PRIORITIES[] = {
};
////////////////////////////////////////////////////////////////
// constructors
public SessionDialog() {
this((Frame) null, false);
}
public SessionDialog(Frame owner) {
this(owner, false);
}
public SessionDialog(Frame owner, boolean modal) {
super("Escolha da sess�o", ArgoDialog.CLOSE_OPTION, modal);
JPanel mainContent = new JPanel();
mainContent.setLayout(new BorderLayout(15, 15));
JPanel detailsPanel = new JPanel(new GridBagLayout());
GridBagConstraints labelConstraints = new GridBagConstraints();
labelConstraints.anchor = GridBagConstraints.FIRST_LINE_END;
labelConstraints.gridy = 0;
labelConstraints.gridx = 0;
labelConstraints.gridwidth = 1;
labelConstraints.gridheight = 1;
labelConstraints.insets = new Insets(0, 10, 5, 4);
GridBagConstraints fieldConstraints = new GridBagConstraints();
fieldConstraints.anchor = GridBagConstraints.FIRST_LINE_END;
fieldConstraints.fill = GridBagConstraints.HORIZONTAL;
fieldConstraints.gridy = 0;
fieldConstraints.gridx = 1;
fieldConstraints.gridwidth = 3;
fieldConstraints.gridheight = 1;
fieldConstraints.weightx = 1.0;
fieldConstraints.insets = new Insets(0, 4, 5, 10);
fieldConstraints.gridy = 0;
labelConstraints.gridy = 0;
_userLabel = new JLabel("Usu�rio: " +ProjectManager.getManager().clienteEnvia.getLogin() );
detailsPanel.add(_userLabel, labelConstraints);
labelConstraints.gridy = 1;
fieldConstraints.gridy = 1;
detailsPanel.add(_labelsessao, labelConstraints);
detailsPanel.add(_textosessao, fieldConstraints);
// Aqui vou adiconar os controles!
((DefaultTableModel )_table.getModel()).addColumn("Sess�o");
((DefaultTableModel )_table.getModel()).addColumn("Usu�rios");
_table.setRowSelectionAllowed(true);
// _table.getSelectionModel().addListSelectionListener(this);
JScrollPane sp = new JScrollPane(_table);
Font labelFont = LookAndFeelMgr.getInstance().getSmallFont();
_table.setFont(labelFont);
_titleLabel = new JLabel("Sess�es atuais:");
_table.setPreferredScrollableViewportSize(new Dimension(30, 120));
resizeColumns();
_table.doLayout();
_table.repaint();
fieldConstraints.gridy = 2;
labelConstraints.gridy = 2;
detailsPanel.add(_titleLabel, labelConstraints);
detailsPanel.add(sp, fieldConstraints);
// detailsPanel.add(sp,labelConstraints);
_table.doLayout();
_table.repaint();
// Agora vou adicionar os caras
Vector totas_se = ProjectManager.getManager().clienteEnvia.listaSessoes;
for (int i = 0; i < totas_se.size(); i++)
{
String[] x = (String[]) totas_se.elementAt(i);
((DefaultTableModel )_table.getModel()).addRow(x);
}
mainContent.add(detailsPanel, BorderLayout.CENTER);
// // Bot�o Aplicar(conectar)
_aplButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Aqui vou indicar para o servidor qual � a sess�o que vai foi escolhida
if ( !_textosessao.getText().equals(""))
{
// Vou obter o modelo do diagrama atual!
try {
ArrayList o;
ProjectBrowser pb = ProjectBrowser.getInstance();
o = pb.InitialSend(new File("c:\\teste.zargo"));
ArrayList l = new ArrayList();
l.add(_textosessao.getText());
l.add(o);
// o terceiro elemento eh um arraylist contendo os Ids globais das Figs
l.add(getIds());
// Enviando para o argo uma mensagem de 'protocolo'
ProjectManager.getManager().clienteEnvia.EnviaEvento(l,"PROT_nova_sessao");
// Enviando para o GEF uma mensagem de 'protocolo'
Globals.curEditor().clienteEnvia.EnviaEvento(l,"PROT_nova_sessao");
} catch (Exception erro) {
System.out.println("Algum problema na grava��o do arquivo!");
}
// ArgoDiagram di = (ArgoDiagram) ProjectManager.getManager().getCurrentProject().getActiveDiagram();
// String dia_pgml = ProjectManager.getManager().getCurrentProject().toPGML(di);
// ArrayList l = new ArrayList();
// l.add(_textonsessao.getText());
// l.add(dia_pgml);
// Enviando para o argo uma mensagem de 'protocolo'
// ProjectManager.getManager().clienteEnvia.EnviaEvento(l,"PROT_nova_sessao");
// Enviando para o GEF uma mensagem de 'protocolo'
// Globals.curEditor().clienteEnvia.EnviaEvento(l,"PROT_nova_sessao");
// Aqui foi retirar qualquer sele��o que possa existir nos elementos
// do diagrama atual
////////////////////////////////////LOCK////////////////////////////////////////////
// Enviando para o servidor um lock clear, para liberar todos os locks
Globals.curEditor().getSelectionManager().deselectAll();
// Neste Loop todas as figuras v�o ser retornadas. Vou passar todas elas para a
// System.out.println("Loop1 - Fig - mouseReleased em ModeSelect:" + f);
if( (Globals.curEditor().clienteEnvia.connected) &&
(Globals.curEditor().IsCollab==false) )
{
Globals.curEditor().clienteEnvia.EnviaEvento(null,"PROT_lock_clear");
}
////////////////////////////////////LOCK////////////////////////////////////////////
hide();
dispose();
}
else
{
// Aqui vou entrar na sess�o escolhida ( e tb validar o usu�rio
int linha = _table.getSelectedRow();
if(linha == -1)
{
JOptionPane.showMessageDialog(ProjectBrowser.getInstance(),"Escolha uma sess�o colaborativa ou cria uma nova!","Erro de conex�o",JOptionPane.ERROR_MESSAGE);
return;
}
String nome_sessao = (String) ((DefaultTableModel )_table.getModel()).getValueAt(linha, 0);
String usuarios = (String) ((DefaultTableModel )_table.getModel()).getValueAt(linha, 1);
nome_sessao = nome_sessao.trim();
if( usuarios.indexOf(ProjectManager.getManager().clienteEnvia.getLogin()) >= 0)
{
JOptionPane.showMessageDialog(ProjectBrowser.getInstance(),"Login j� existe na sess�o!","Erro de conex�o",JOptionPane.ERROR_MESSAGE);
return;
}
else
{
// Enviando para o argo uma mensagem de 'protocolo'
ProjectManager.getManager().clienteEnvia.EnviaEvento(nome_sessao,"PROT_sessao_existente");
// Enviando para o GEF uma mensagem de 'protocolo'
Globals.curEditor().clienteEnvia.EnviaEvento(nome_sessao,"PROT_sessao_existente");
hide();
dispose();
}
}
}
});
// int getSelectedRow()
// Returns the index of the first selected row, -1 if no row is selected.
nameButton(_aplButton, "Iniciar");
addButton(_aplButton, 0);
// preciso adicionar os controles ao
setContent(new JScrollPane(mainContent));
addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent e) {
}
});
pack();
}
// Obtendo todos os ID's globais dos elementos do diagrama atual
public ArrayList getIds()
{
ArrayList ret = new ArrayList();
Editor e = Globals.curEditor();
Enumeration fs = e.figs();
int id = e.GeraGID();
while(fs.hasMoreElements())
{
Fig ff = (Fig) fs.nextElement();
// Primeiro vou colocar os ID's para depois peg�-los
ff.setGlobalID(id);
String []x = {ff.classNameAndBounds(),String.valueOf(ff.getGlobalID())};
ret.add(x);
id++;
}
return ret;
}
public void resizeColumns() {
TableColumn keyCol = _table.getColumnModel().getColumn(0);
TableColumn valCol = _table.getColumnModel().getColumn(1);
keyCol.setMinWidth(5);
keyCol.setWidth(5);
keyCol.setPreferredWidth(5);
valCol.setMinWidth(20);
valCol.setWidth(20);
valCol.setPreferredWidth(20);
//_table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
_table.sizeColumnsToFit(-1); }
} /* end class SessionDialog */