Skip to content

Commit

Permalink
Merge branch 'main' into HU-CompararAtletas
Browse files Browse the repository at this point in the history
  • Loading branch information
uo289039 committed Nov 27, 2023
2 parents cf7db93 + 49155b1 commit ccf36c7
Show file tree
Hide file tree
Showing 27 changed files with 1,743 additions and 398 deletions.
12 changes: 12 additions & 0 deletions src/main/java/files/GrupoCovadonga.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
GrupoCovadonga;11;;;;
[email protected];Alberto;2006;10;12;Masculino
[email protected];Bego�a;2001;7;25;Femenino
[email protected];Carlos;2004;4;27;Masculino
[email protected];Daniel;2003;2;8;Masculino
[email protected];Enrique;1998;5;18;Masculino
[email protected];Fernando;1995;9;21;Masculino
[email protected];Gonzalo;2005;11;24;Masculino
[email protected];Hugo;2006;4;14;Masculino
[email protected];Irlanda;2002;2;9;Femenino
[email protected];Juana;2000;7;11;Femenino
[email protected];Karoline;1999;8;3;Femenino
4 changes: 4 additions & 0 deletions src/main/java/files/GrupoMasaveu.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
GrupoMasaveu;3;;;;
[email protected];Luis;2006;10;12;Masculino
[email protected];Marta;2001;7;25;Femenino
[email protected];Nuria;2004;4;27;Femenino
26 changes: 5 additions & 21 deletions src/main/java/giis/demo/tkrun/CarreraDisplayDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,51 +15,35 @@ public class CarreraDisplayDTO {
private double cuota;
private double distancia;
private String nombre_c;
private String inicio;
private String fin;
private int nPlazas;
private String iban;
public CarreraDisplayDTO() {}
public CarreraDisplayDTO(String rowId, String rowDescripcion, String rowEstado, String rowCuota,String rowDistancia, String rowNombre_c, String rowInicio, String rowFin, String rowPlazas) {
public CarreraDisplayDTO(String rowId, String rowDescripcion, String rowEstado, String rowCuota,String rowDistancia, String rowNombre_c, String rowPlazas, String rowIban) {
this.id=rowId;
this.descr=rowDescripcion;
this.abierta=rowEstado;
this.cuota=Double.parseDouble(rowCuota);
this.distancia=Double.parseDouble(rowDistancia);
this.inicio=rowInicio;
this.fin=rowFin;
this.nombre_c=rowNombre_c;
this.nPlazas=Integer.parseInt(rowPlazas);
this.iban = rowIban;
}
public String getId() { return this.id; }
public String getDescr() { return this.descr; }
public String getEstado() { return this.abierta; }
public double getCuota() {return this.cuota;}
public double getDistancia() {return this.distancia;}
public String getNombre_c() {return nombre_c;}
public String getIban() { return this.iban; }
public void setId(String value) { this.id=value; }
public void setDescr(String value) { this.descr=value; }
public void setAbierta(String value) { this.abierta=value; }
public void setCuota(double c) {this.cuota=c;}
public void setDistancia(double d) {this.distancia=d;}
public void setNombre_c(String nombre_c) {this.nombre_c = nombre_c;}
public void setnPlazas(int nPlazas) {this.nPlazas = nPlazas;}
public void setIban(String value) { this.iban=value; }





public String getInicio() {
return inicio;
}
public void setInicio(String inicio) {
this.inicio = inicio;
}
public String getFin() {
return fin;
}
public void setFin(String fin) {
this.fin = fin;
}
@Override
public String toString() {
return this.getNombre_c()+" - "+this.getId();
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/giis/demo/tkrun/CarreraEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,12 @@ public class CarreraEntity {
private int tp3;
private int tp4;
private int tp5;


private String inicio; //las fechas son string (vienen de sqlite)
private String fin;


public String getId() { return this.id; }
public String getFecha() { return this.fecha; }
public String getDescr() { return this.descr; }
Expand Down Expand Up @@ -108,6 +110,7 @@ public int getTp5() {
public void setTp5(int tp5) {
this.tp5 = tp5;
}

public String getInicio() {
return inicio;
}
Expand All @@ -120,6 +123,7 @@ public String getFin() {
public void setFin(String fin) {
this.fin = fin;
}




Expand Down
30 changes: 24 additions & 6 deletions src/main/java/giis/demo/tkrun/CarrerasModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,15 @@ public class CarrerasModel {
//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_CARRERAS=
"SELECT nombre_c,descr,cuota,distancia,"
+" case when ?<inicio then ''" //antes de inscripcion
+" when ?<=fin then '(Abierta)'" //fase 1
"SELECT nombre_c,c.descr,p.cuota,distancia,"
+" case when ?<p.fechaIni then ''" //antes de inscripcion
+" when ?<=p.fechaFin then '(Abierta)'" //fase 1
+" when ?<fecha then '(Abierta)'" //fase 2
+" when ?=fecha then '(Abierta)'" //fase 3
+" else '' " //despues de fin carrera
+" end as abierta"
+" from Competicion where fecha>=? order by id";
+" from Competicion c, Plazo p,"
+ " where c.fecha>=? order by c.id";
/**
* Obtiene la lista de carreras futuras (posteriores a una fecha dada) con el id, descripcion
* y la indicacion de si tienen inscripcion abierta.
Expand All @@ -53,14 +54,27 @@ public List<Object[]> getListaCarrerasArray(Date fechaInscripcion) {
public List<CarreraDisplayDTO> getListaCarreras(Date fechaInscripcion) {
validateNotNull(fechaInscripcion,MSG_FECHA_INSCRIPCION_NO_NULA);
String sql=
"SELECT nombre_c,c.descr,p.cuota,distancia, p.fechaIni as inicio, fechaFin as fin,case"

// "SELECT nombre_c,c.descr,p.cuota,distancia, p.fechaIni as inicio, fechaFin as fin,case"
// + " when ?<p.fechaIni then ''" //antes de inscripcion
// +" when ?<=fechaFin then '(Abierta)'" //fase 1

"SELECT nombre_c,c.descr,p.cuota,c.distancia, p.fechaIni, p.fechaFin,case"
+ " when ?<p.fechaIni then ''" //antes de inscripcion
+" when ?<=fechaFin then '(Abierta)'" //fase 1
+" when ?<=p.fechaFin then '(Abierta)'" //fase 1

+" when ?<fecha then '(Abierta)'" //fase 2
+" when ?=fecha then '(Abierta)'" //fase 3
+" else '' " //despues de fin carrera
+" end as abierta"

+" from Competicion c, Plazo p where fecha>=? and c.id=p.id_c order by id";
//
// +" from Competicion c, Plazo p"
// +" where c.fecha>=?"
// //+" and p.fechaFin in (select min(fechaFin) from plazo)"
// +" and p.id_c = c.id order by c.id";

String d=Util.dateToIsoString(fechaInscripcion);
return db.executeQueryPojo(CarreraDisplayDTO.class, sql, d, d, d, d, d);
}
Expand Down Expand Up @@ -97,7 +111,11 @@ else if (rows.get(0)[0]==null)
* Obtiene todos los datos de la carrera con el id indicado
*/
public CarreraEntity getCarrera(int id) {

String sql="SELECT nombre_c,fechaIni,fechaFin,fecha,descr from Competicion c, Plazo p where id=? and id_c=id";

// String sql="SELECT * from Competicion where id=?";

List<CarreraEntity> carreras=db.executeQueryPojo(CarreraEntity.class, sql, id);
validateCondition(!carreras.isEmpty(),"Id de competicion no encontrado: "+id);
return carreras.get(0);
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/giis/demo/tkrun/CategoriaDisplayDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package giis.demo.tkrun;

public class CategoriaDisplayDTO {
private String id_c;
private String nombre_cat;
private int edadMin;
private int edadMax;
private String genero;
public CategoriaDisplayDTO() {}
public CategoriaDisplayDTO(String rownombre, int rowMin, int rowMax, String rowGenero) {
this.nombre_cat=rownombre;
this.edadMin=rowMin;
this.edadMax=rowMax;
this.genero = rowGenero;
}
public String getId() { return this.id_c; }
public String getNombre() { return this.nombre_cat; }
public int getEdadMin() { return this.edadMin; }
public int getEdadMax() { return this.edadMax; }
public String getGenero() { return this.genero; }
public void setId(String value) { this.id_c=value; }
public void setNombre(String value) { this.nombre_cat=value; }
public void setEdadMin(int value) { this.edadMin=value; }
public void setEdadMax(int value) { this.edadMax=value; }
public void setGenero(String value) { this.genero=value; }

}
29 changes: 29 additions & 0 deletions src/main/java/giis/demo/tkrun/CategoriaEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package giis.demo.tkrun;

/**
* Datos del modelo de dominio de cada una de las carreras
* IMPORTANTE: Cuando se usan los componentes de Apache Commons DbUtils debe
* mantenerse de forma estricta el convenio de capitalización de Java:
* - Capitalizar todas las palabras que forman un identificador
* excepto la primera letra de nombres de métodos y variables.
* - No utilizar subrayados
* Seguir tambien estos mismos criterios en los nombres de tablas y campos de la BD
*/
public class CategoriaEntity {
private String id_comp;
private String nombre_cat;
private int edadMin;
private int edadMax;
private String genero;

public String getId() { return this.id_comp; }
public String getNombre() { return this.nombre_cat; }
public int getEdadMin() { return this.edadMin; }
public int getEdadMax() { return this.edadMax; }
public String getGenero() { return this.genero; }
public void setId(String value) { this.id_comp=value; }
public void setNombre(String value) { this.nombre_cat=value; }
public void setEdadMin(int value) { this.edadMin=value; }
public void setEdadMax(int value) { this.edadMax=value; }
public void setGenero(String value) { this.genero=value; }
}
111 changes: 111 additions & 0 deletions src/main/java/giis/demo/tkrun/ClubController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package giis.demo.tkrun;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.JOptionPane;
import javax.swing.table.TableModel;

import giis.demo.util.SwingUtil;

/**
* Controlador para la funcionalidad de visualizacion de carreras para la inscripcion.
* Es el punto de entrada de esta pantalla que se invocará:
* -instanciando el controlador con la vista y el modelo
* -ejecutando initController que instalara los manejadores de eventos
*/
public class ClubController {
private ClubModel model;
private ClubView view;
private String lastSelectedKey=""; //recuerda la ultima fila seleccionada para restaurarla cuando cambie la tabla de carreras

public ClubController(ClubModel m, ClubView v) {
this.model = m;
this.view = v;
//no hay inicializacion especifica del modelo, solo de la vista
this.initView();
}
/**
* Inicializacion del controlador: anyade los manejadores de eventos a los objetos del UI.
* Cada manejador de eventos se instancia de la misma forma, para que invoque un metodo privado
* de este controlador, encerrado en un manejador de excepciones generico para mostrar ventanas
* emergentes cuando ocurra algun problema o excepcion controlada.
*/
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.getBtnApuntarClub().addActionListener(e -> SwingUtil.exceptionWrapper(() -> actualizar()));

//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.getTablaCarreras().addMouseListener(new MouseAdapter() {
// @Override
// public void mouseReleased(MouseEvent e) {
// //no usa mouseClicked porque al establecer seleccion simple en la tabla de carreras
// //el usuario podria arrastrar el raton por varias filas e interesa solo la ultima
// SwingUtil.exceptionWrapper(() -> actualizar());
// }
// });
}

public void initView() {
this.getListaCarreras();

//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 getListaCarreras() {

List<CarreraDisplayDTO> carreras=model.getListaCarreras();
TableModel tmodel=SwingUtil.getTableModelFromPojos(carreras, new String[] {"id", "nombre_c", "descr","distancia", "nPlazas"});
view.getTablaCarreras().setModel(tmodel);
SwingUtil.autoAdjustColumns(view.getTablaCarreras());

//Como se guarda la clave del ultimo elemento seleccionado, restaura la seleccion de los detalles
this.restoreDetail();

//A modo de demo, se muestra tambien la misma informacion en forma de lista en un combobox
// List<Object[]> carrerasList=model.getListaCarrerasArray(Util.isoStringToDate(view.getFechaHoy()));
// ComboBoxModel<Object> lmodel=SwingUtil.getComboModelFromList(carrerasList);
// view.getListaCarreras().setModel(lmodel);
}
/**
* Restaura la informacion del detalle de la carrera para visualizar los valores correspondientes
* a la ultima clave almacenada.
*/
public void restoreDetail() {
//Utiliza la ultimo valor de la clave (que se reiniciara si ya no existe en la tabla)
this.lastSelectedKey=SwingUtil.selectAndGetSelectedKey(view.getTablaCarreras(), this.lastSelectedKey);
//Si hay clave para seleccionar en la tabla muestra el detalle, si no, lo reinicia
// if ("".equals(this.lastSelectedKey)) {
// view.setDescuentoNoAplicable();
// view.getDetalleCarrera().setModel(new DefaultTableModel());
// } else {
// this.updateDetail();
// }
}
/**
* 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
*/
public void actualizar() {
//Obtiene la clave seleccinada y la guarda para recordar la seleccion en futuras interacciones
this.lastSelectedKey=SwingUtil.getSelectedKey(view.getTablaCarreras());
if (lastSelectedKey == "")
JOptionPane.showMessageDialog(null, "No hay ninguna competición seleccionada");
else {
if (!model.compruebaClub(view.getTfClub().getText(),lastSelectedKey)) {
JOptionPane.showMessageDialog(null, "Este club ya está apuntado a esta competición");
} else {
model.insertarClub(lastSelectedKey, view.getTfClub().getText());
}
}
}

}
23 changes: 23 additions & 0 deletions src/main/java/giis/demo/tkrun/ClubDisplayDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package giis.demo.tkrun;

public class ClubDisplayDTO {
private String id_comp;
private String id_club;
private String nombre;
private int numAtletas;
public ClubDisplayDTO() {}
public ClubDisplayDTO(String rowcomp, String rowclub, String rownom, int rownum) {
this.id_comp = rowcomp;
this.id_club = rowclub;
this.nombre = rownom;
this.numAtletas = rownum;
}
public String getIdComp() { return this.id_comp; }
public String getIdClub() { return this.id_club; }
public String getNombre() { return this.nombre; }
public int getNumAtletas() { return this.numAtletas; }
public void setIdComp(String value) { this.id_comp=value; }
public void setIdClub(String value) { this.id_club=value; }
public void setNombre(String value) { this.nombre=value; }
public void setNumAtletas(int value) { this.numAtletas=value; }
}
22 changes: 22 additions & 0 deletions src/main/java/giis/demo/tkrun/ClubEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package giis.demo.tkrun;

public class ClubEntity {
private String id_comp;
private String id_club;
private String nombre;
private int numAtletas;
public ClubEntity(String rowcomp, String rowclub, String rownom, int rownum) {
this.id_comp = rowcomp;
this.id_club = rowclub;
this.nombre = rownom;
this.numAtletas = rownum;
}
public String getIdComp() { return this.id_comp; }
public String getIdClub() { return this.id_club; }
public String getNombre() { return this.nombre; }
public int getNumAtletas() { return this.numAtletas; }
public void setIdComp(String value) { this.id_comp=value; }
public void setIdClub(String value) { this.id_club=value; }
public void setNombre(String value) { this.nombre=value; }
public void setNumAtletas(int value) { this.numAtletas=value; }
}
Loading

0 comments on commit ccf36c7

Please sign in to comment.