// Path: P2/BolivarFrancisco-p2/src/modelo/Usuario.java
// @Entity
// public class Usuario implements Serializable {
// 	private static final long serialVersionUID = 1L;
// 
// 	@Id
// 	@GeneratedValue(strategy = GenerationType.TABLE)
// 	private long id;
// 	private String nombre;
// 	private String apellido;
// 	private String email;
// 
// 	/**
// 	 * Constructor por defecto. Crea un usuario con cadenas vacías en sus datos
// 	 */
// 	public Usuario() {
// 		nombre = apellido = email = "";
// 	}
// 
// 	/**
// 	 * Constructor por copia. Copia los datos de un usuario y crea un usuario con estos
// 	 * @param usuario
// 	 */
// 	public Usuario(Usuario usuario) {
// 		nombre = usuario.getNombre();
// 		apellido = usuario.getApellido();
// 		email = usuario.getEmail();
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "Usuario [nombre=" + nombre + ", apellido=" + apellido + ", email=" + email + "]";
// 	}
// 
// 	public long getId() {
// 		return id;
// 	}
// 
// 	public void setId(long id) {
// 		this.id = id;
// 	}
// 
// 	public String getNombre() {
// 		return nombre;
// 	}
// 
// 	public void setNombre(String nombre) {
// 		this.nombre = nombre;
// 	}
// 
// 	public String getApellido() {
// 		return apellido;
// 	}
// 
// 	public void setApellido(String apellido) {
// 		this.apellido = apellido;
// 	}
// 
// 	public String getEmail() {
// 		return email;
// 	}
// 
// 	public void setEmail(String email) {
// 		this.email = email;
// 	}
// }


import java.awt.BorderLayout;
import java.awt.Dialog.ModalExclusionType;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;
import modelo.Usuario;
	private TablaUsuarios modeloTablaUsuarios;
	
	//Para lanzar la aplicacion
	public static void main(String[] args) {
		try { // Queremos que se vea con el look-and-feel del sistema, no con el normal de Swing
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e)
		{ System.err.println("Unable to load System look and feel"); }
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Cliente frame = new Cliente();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	//Ahora crearemos la ventana
	public Cliente() {
		setTitle("Desarrollo de Sistemas Basados en Componentes y Servicios-2016. Pr\u00E1ctica 2");
		setModalExclusionType(ModalExclusionType.TOOLKIT_EXCLUDE);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 550, 300);
		setLocationRelativeTo(null);
		panelContenido = new JPanel();
		panelContenido.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(panelContenido);
		panelContenido.setLayout(new BorderLayout(0, 0));
// Path: P2/BolivarFrancisco-p2/src/modelo/Usuario.java
// @Entity
// public class Usuario implements Serializable {
// 	private static final long serialVersionUID = 1L;
// 
// 	@Id
// 	@GeneratedValue(strategy = GenerationType.TABLE)
// 	private long id;
// 	private String nombre;
// 	private String apellido;
// 	private String email;
// 
// 	/**
// 	 * Constructor por defecto. Crea un usuario con cadenas vacías en sus datos
// 	 */
// 	public Usuario() {
// 		nombre = apellido = email = "";
// 	}
// 
// 	/**
// 	 * Constructor por copia. Copia los datos de un usuario y crea un usuario con estos
// 	 * @param usuario
// 	 */
// 	public Usuario(Usuario usuario) {
// 		nombre = usuario.getNombre();
// 		apellido = usuario.getApellido();
// 		email = usuario.getEmail();
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "Usuario [nombre=" + nombre + ", apellido=" + apellido + ", email=" + email + "]";
// 	}
// 
// 	public long getId() {
// 		return id;
// 	}
// 
// 	public void setId(long id) {
// 		this.id = id;
// 	}
// 
// 	public String getNombre() {
// 		return nombre;
// 	}
// 
// 	public void setNombre(String nombre) {
// 		this.nombre = nombre;
// 	}
// 
// 	public String getApellido() {
// 		return apellido;
// 	}
// 
// 	public void setApellido(String apellido) {
// 		this.apellido = apellido;
// 	}
// 
// 	public String getEmail() {
// 		return email;
// 	}
// 
// 	public void setEmail(String email) {
// 		this.email = email;
// 	}
// }


// Path: P2/BolivarFrancisco-p2/src/interfaz/Cliente.java
import java.awt.BorderLayout;
import java.awt.Dialog.ModalExclusionType;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;
import modelo.Usuario;

	private TablaUsuarios modeloTablaUsuarios;
	
	//Para lanzar la aplicacion
	public static void main(String[] args) {
		try { // Queremos que se vea con el look-and-feel del sistema, no con el normal de Swing
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e)
		{ System.err.println("Unable to load System look and feel"); }
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Cliente frame = new Cliente();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	//Ahora crearemos la ventana
	public Cliente() {
		setTitle("Desarrollo de Sistemas Basados en Componentes y Servicios-2016. Pr\u00E1ctica 2");
		setModalExclusionType(ModalExclusionType.TOOLKIT_EXCLUDE);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 550, 300);
		setLocationRelativeTo(null);
		panelContenido = new JPanel();
		panelContenido.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(panelContenido);
		panelContenido.setLayout(new BorderLayout(0, 0));
		List<Usuario> listaUsuarios = obtenerListaUsuarios();