Skip to content

Commit

Permalink
Avance en la comparacion de atletas
Browse files Browse the repository at this point in the history
  • Loading branch information
uo289039 committed Nov 19, 2023
1 parent bab95ad commit dff115d
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 47 deletions.
57 changes: 42 additions & 15 deletions src/main/java/giis/demo/tkrun/ComparaModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,34 +24,44 @@ public class ComparaModel {
//SQL para obtener la lista de carreras activas para una fecha dada,
//se incluye aqui porque se usara en diferentes versiones de los metodos bajo prueba
public static final String SQL_LISTA_DATOS_ATLETAS=
"Select distinct a.dni, a.nombre, c.tipo as categoria, a.inscripcion as fechaInscripcionCambioEstado, p.estadoI as estadoInscripcion, p.dorsal"
+ " from Atleta a, Participa p, Competicion c, Categoria ct "
+ "where a.correoE=p.correoElec and p.id_c=c.id and c.nombre_c=? order by a.inscripcion,p.estadoI";
"Select nombre from Atleta a, Participa p, Competicion c WHERE a.correoE =p.correoElec "
+ "and p.id_c =c.id and c.nombre_c =?";


private static final String OBTENER_CLASIFICACION = "SELECT DISTINCT a.nombre, a.sexo, t.dorsal, t.tiempo"
+ " FROM atleta a, participa p, tiempo t"
+ " WHERE p.id_c = ? AND p.id_c = t.id_c"
+ " AND a.correoE = p.correoElec"
+ " AND p.dorsal = t.dorsal"
+ " AND p.dorsal <> 0"
+ " ORDER BY CASE WHEN t.tiempo = '---' THEN 1 ELSE 0 END";


private static final String OBTENER_ID = "SELECT id FROM competicion"
+ " WHERE nombre_c = ?";

/**
* Obtiene la lista de carreras futuras (posteriores a una fecha dada) con el id, descripcion
* y la indicacion de si tienen inscripcion abierta.
* Implementacion usando la utilidad que obtiene una lista de arrays de objetos
* resultado de la ejecucion de una query sql
*/
public List<Object[]> getListaAtletasArray(String nombreCompeticion) {
public List<Object[]> getListaComparaAtletasArray(String nombreCompeticion) {
//validateNotNull(fechaInscripcionnscripcion,MSG_FECHA_INSCRIPCION_NO_NULA);
//concatena los campos deseados en una unica columna pues el objetivo es devolver una lista de strings
String sql="SELECT dni || '-' || nombre || ' ' || categoria || ' ' || fechaInscripcionCambioEstado || ' ' || estadoInscripcion || ' ' || dorsal"
String sql="SELECT tiempo || '-' || puesto || ' ' || t_intermedio || ' ' || ritmo || ' ' || distancia || ' ' || estado"
+ " from (" + SQL_LISTA_DATOS_ATLETAS + ")";

return db.executeQueryArray(sql, nombreCompeticion);
}
/**
* Obtiene la lista de carreras activas en forma objetos para una fecha de inscripcion dada
*/
public List<AtletaDisplayDTO> getListaAtletas(String idCategoria) {
public List<AtletaDisplayDTO> getListaComparaAtletas(String nombreCompetidor) {
//validateNotNull(fechaInscripcionnscripcion,MSG_FECHA_INSCRIPCION_NO_NULA);
String sql=
"Select distinct a.dni, a.nombre, c.tipo as categoria, a.inscripcion as fechaInscripcionCambioEstado, p.estadoI as estadoInscripcion, p.dorsal \n"
+" from Atleta a, Participa p, Competicion c \n "
+ " where a.correoE=p.correoElec and p.id_c=c.id and c.nombre_c=? order by a.inscripcion,p.estadoI";

//String d=Util.dateToIsoString(fechaInscripcionnscripcion);
return db.executeQueryPojo(AtletaDisplayDTO.class, sql, idCategoria);
return db.executeQueryPojo(AtletaDisplayDTO.class, SQL_LISTA_DATOS_ATLETAS, nombreCompetidor);
}
/**
* Obtiene el porcentaje de descuento (valor negativo) o recargo aplicable a una carrera dada por su id cuando se
Expand Down Expand Up @@ -86,7 +96,7 @@ public List<AtletaDisplayDTO> getListaAtletas(String idCategoria) {
* Obtiene todos los datos de la carrera con el id indicado
*/
public CarreraEntity getAtletas(int id) {
String sql="SELECT dni,f_nacimiento,nombre,sexo,inscripcion from Atleta where dni=?";
String sql="SELECT nombre from Atleta where dni=?";
List<CarreraEntity> atletas=db.executeQueryPojo(CarreraEntity.class, sql, id);
validateCondition(!atletas.isEmpty(),"Id de competicion no encontrado: "+id);
return atletas.get(0);
Expand Down Expand Up @@ -120,8 +130,25 @@ private void validateCondition(boolean condition, String message) {
}


// private void updateInscritos() {
// String sql="UPDATE participa SET inicio=?, fin=? WHERE id=?";
// }
public List<ComparaDisplayDTO> getTiempos(String nombreCarrera) {
String carreraId = getId(nombreCarrera);
List<ComparaDisplayDTO> tiempos = db.executeQueryPojo(ComparaDisplayDTO.class, OBTENER_CLASIFICACION, carreraId);
int pos = 1;
for(ComparaDisplayDTO t: tiempos) {
t.setPuesto(pos);
pos++;
}
return tiempos;
}


public String getId(String nombre) {
List<CarreraDisplayDTO> res = db.executeQueryPojo(CarreraDisplayDTO.class, OBTENER_ID, nombre);
if(res.isEmpty()) {
return "";
}
return res.get(0).getId();
}


}
46 changes: 32 additions & 14 deletions src/main/java/giis/demo/tkrun/ComparasController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;


//import javax.swing.ComboBoxModel;
//import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


import giis.demo.util.ApplicationException;
import giis.demo.util.SwingUtil;
Expand All @@ -18,12 +20,11 @@
* -ejecutando initController que instalara los manejadores de eventos
*/
public class ComparasController {
private AtletaModel model;
private AtletasView view;
private CarrerasModel cmodel=new CarrerasModel();
private ComparaModel model;
private ComparasView view;
private String lastSelectedKey=""; //recuerda la ultima fila seleccionada para restaurarla cuando cambie la tabla de carreras

public ComparasController(AtletaModel m, AtletasView v) {
public ComparasController(ComparaModel m, ComparasView v) {
this.model = m;
this.view = v;
//no hay inicializacion especifica del modelo, solo de la vista
Expand All @@ -39,8 +40,11 @@ public void initController() {
//ActionListener define solo un metodo actionPerformed(), es un interfaz funcional que se puede invocar de la siguiente forma:
//view.getBtnTablaCarreras().addActionListener(e -> getListaCarreras());
//ademas invoco el metodo que responde al listener en el exceptionWrapper para que se encargue de las excepciones
view.getBtnTablaAtletas().addActionListener(e -> SwingUtil.exceptionWrapper(() -> getListaAtletas()));

//view.getBtnTablaAtletas().addActionListener(e -> SwingUtil.exceptionWrapper(() -> getListaAtletas()));

view.getBtnVerAtletas().addActionListener(e -> SwingUtil.exceptionWrapper(() -> getListaAtletas()));

view.getBtnAñadir().addActionListener(e -> SwingUtil.exceptionWrapper(() -> cargaTablaComparaAtletas()));
//En el caso del mouse listener (para detectar seleccion de una fila) no es un interfaz funcional puesto que tiene varios metodos
//ver discusion: https://stackoverflow.com/questions/21833537/java-8-lambda-expressions-what-about-multiple-methods-in-nested-class
view.getTablaAtletas().addMouseListener(new MouseAdapter() {
Expand All @@ -53,27 +57,27 @@ public void mouseReleased(MouseEvent e) {
});
}


public void initView() {
//Inicializa la fecha de hoy a un valor que permitira mostrar carreras en diferentes fases
//y actualiza los datos de la vista
view.setId("San Silvestre");

this.getListaAtletas();

//Abre la ventana (sustituye al main generado por WindowBuilder)
view.getFrame().setVisible(true);

}
/**
* La obtencion de la lista de carreras solo necesita obtener la lista de objetos del modelo
* y usar metodo de SwingUtil para crear un tablemodel que se asigna finalmente a la tabla.
*/
public void getListaAtletas() {
String id=cmodel.idCompeticion(view.getId());
cmodel.asignarDorsal(id);
List<AtletaDisplayDTO> carreras=model.getListaAtletas((view.getId()));
TableModel tmodel=SwingUtil.getTableModelFromPojos(carreras, new String[] {"dni", "nombre", "categoria","fechaInscripcionCambioEstado","estadoInscripcion","dorsal"});
view.getTablaAtletas().setModel(tmodel);
SwingUtil.autoAdjustColumns(view.getTablaAtletas());
String carrera=view.getTextCompeticion().getText();

List<AtletaDisplayDTO> atletas=model.getListaComparaAtletas(carrera);
view.setModeloLista(atletas);
view.getBtnAñadir().setEnabled(true);

//Como se guarda la clave del ultimo elemento seleccionado, restaura la seleccion de los detalles
this.restoreDetail();
Expand All @@ -100,6 +104,20 @@ public void restoreDetail() {
// this.updateDetail();
//}
}


private void cargaTablaComparaAtletas() {
// TODO Auto-generated method stub
List<String> competidores=view.getListaCompetidores().getSelectedValuesList();
String competicion=view.getTextCompeticion().getText();

List<ComparaDisplayDTO>tiempos=model.getTiempos(competicion);

}




/**
* Al seleccionar un item de la tabla muestra el detalle con el valor del porcentaje de descuento
* de la carrera seleccinada y los valores de esta entidad
Expand Down
55 changes: 37 additions & 18 deletions src/main/java/giis/demo/tkrun/ComparasView.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
//import javax.swing.JComboBox;
//
//import java.awt.Dimension;
//import java.awt.SystemColor;
//import javax.swing.UIManager;
import java.awt.Color;
import java.util.List;

import javax.swing.JList;

/**
Expand All @@ -33,7 +36,7 @@ public class ComparasView {
private JTable tabAtletas;
private JButton btnAñadir;
private JList<String> listNombresAtletas;
private JTextField textCorreo;
private JTextField textCompeticion;
private JButton btnVerAtletas;

/**
Expand All @@ -56,8 +59,8 @@ private void initialize() {
final JLabel lblFechaHoy;
frmCompararAtletas.getContentPane().setLayout(null);

lblFechaHoy = new JLabel("Atletas de competicion:");
lblFechaHoy.setBounds(66, 44, 112, 14);
lblFechaHoy = new JLabel("Inserte su correo identificador:");
lblFechaHoy.setBounds(21, 44, 192, 14);
frmCompararAtletas.getContentPane().add(lblFechaHoy);

txtAtleta = new JTextField();
Expand All @@ -67,12 +70,13 @@ private void initialize() {
txtAtleta.setColumns(10);

btnTabAtletas = new JButton("Eliminar seleccionado(s)");
btnTabAtletas.setBounds(566, 392, 151, 23);
btnTabAtletas.setEnabled(false);
btnTabAtletas.setBounds(532, 392, 185, 23);
lblFechaHoy.setLabelFor(btnTabAtletas);
frmCompararAtletas.getContentPane().add(btnTabAtletas);

JLabel lblNombreCompeticion = new JLabel("Inserte el nombre de la competición");
lblNombreCompeticion.setBounds(361, 44, 225, 14);
JLabel lblNombreCompeticion = new JLabel("Inserte el nombre de la competición:");
lblNombreCompeticion.setBounds(347, 44, 206, 14);
frmCompararAtletas.getContentPane().add(lblNombreCompeticion);

//Incluyo la tabla en un JScrollPane y anyado este en vez de la tabla para poder ver los headers de la tabla
Expand All @@ -86,40 +90,55 @@ private void initialize() {
frmCompararAtletas.getContentPane().add(getBtnAñadir());

listNombresAtletas = new JList<String>();
listNombresAtletas.setBounds(38, 369, 301, -252);
listNombresAtletas.setValueIsAdjusting(true);
listNombresAtletas.setBounds(21, 111, 313, 270);
frmCompararAtletas.getContentPane().add(listNombresAtletas);
frmCompararAtletas.getContentPane().add(getTextCorreo());
frmCompararAtletas.getContentPane().add(getTextCompeticion());
frmCompararAtletas.getContentPane().add(getBtnVerAtletas());
}

//Getters y Setters anyadidos para acceso desde el controlador (repersentacion compacta)
public JFrame getFrame() { return this.frmCompararAtletas; }
public String getId() { return this.txtAtleta.getText(); }
public void setId(String fechaIso) { this.txtAtleta.setText(fechaIso); }
public String getTextAtleta() { return this.txtAtleta.getText(); }
public void setTextAtleta(String fechaIso) { this.txtAtleta.setText(fechaIso); }
public JButton getBtnTablaAtletas() { return this.btnTabAtletas; }
public JTable getTablaAtletas() { return this.tabAtletas; }

public JButton getBtnAñadir() {
if (btnAñadir == null) {
btnAñadir = new JButton("Añadir");
btnAñadir.setEnabled(false);
btnAñadir.setBounds(211, 392, 89, 23);
}
return btnAñadir;
}
public JTextField getTextCorreo() {
if (textCorreo == null) {
textCorreo = new JTextField();
textCorreo.setName("txtCompeticion");
textCorreo.setColumns(10);
textCorreo.setBounds(336, 69, 218, 20);
public JTextField getTextCompeticion() {
if (textCompeticion == null) {
textCompeticion = new JTextField();
textCompeticion.setName("textCompeticion");
textCompeticion.setColumns(10);
textCompeticion.setBounds(336, 69, 218, 20);
}
return textCorreo;
return textCompeticion;
}
public JButton getBtnVerAtletas() {
if (btnVerAtletas == null) {
btnVerAtletas = new JButton("Ver Atletas");
btnVerAtletas.setBounds(594, 68, 89, 23);
btnVerAtletas.setBounds(576, 68, 107, 23);
}
return btnVerAtletas;
}

public void setModeloLista(List<AtletaDisplayDTO> atletas) {
DefaultListModel<String>modelo=new DefaultListModel<String>();
for(int i=0;i<atletas.size();i++)
modelo.add(i,atletas.get(i).getNombre());

listNombresAtletas.setModel(modelo);

}

public JList<String> getListaCompetidores(){
return listNombresAtletas;
}
}
6 changes: 6 additions & 0 deletions src/main/java/giis/demo/util/SwingMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,12 @@ public void actionPerformed(ActionEvent e) {
frame.getContentPane().add(btnHistorico);

JButton btnComparar = new JButton("Comparar Atletas");
btnComparar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ComparasController cc=new ComparasController(new ComparaModel(), new ComparasView());
cc.initController();
}
});
frame.getContentPane().add(btnComparar);


Expand Down

0 comments on commit dff115d

Please sign in to comment.