package br.com.bbsys.control.campeonato;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import br.com.bbsys.control.campeonato.Inscrito.AtletaDisputaController;
import br.com.bbsys.control.campeonato.Inscrito.JuizBateriaController;
import br.com.bbsys.dao.campeonato.Bateria_dao;
import br.com.bbsys.model.campeonato.Bateria_model;
import br.com.bbsys.model.campeonato.Inscrito.AtletaDisputa_model;
import br.com.bbsys.model.campeonato.Inscrito.JuizBateria_model;
import br.com.bbsys.model.usuario.Atleta_model;
public class BateriaController extends CampeonatoEtapaController {
public BateriaController() {
// TODO Auto-generated constructor stub
}
/**
* Funcao que carrega um Bateria_model apartir da instancia atual
* @param Bateria_model bateriaModel
* @return Bateria_model bateriaModel
* */
public Bateria_model carregarBateria( Bateria_model bateriaModel ){
//Inicio os objetos que ser�o utilizados para este metodo
Bateria_model bateriaModelAux = null;
Bateria_dao bateriaDao = new Bateria_dao();
bateriaModelAux = bateriaDao.carregarBateria(bateriaModel);
return bateriaModelAux;
}
/**
* Funcao que carrega uma lista de Bateria_model apartir da instancia atual
* @param Bateria_model bateriaModel
* @param String ordenar
* @return ArrayList<Bateria_model> listaBateria
* */
public ArrayList<Bateria_model> listarBateria( Bateria_model bateriaModel, String ordenar ){
//Inicio os objetos que ser�o utilizados para este metodo
ArrayList<Bateria_model> listaBateria = null;
listaBateria = Bateria_dao.listarBateria(bateriaModel,ordenar);
return listaBateria;
}
/**
* Funcao que carrega uma lista de Bateria_model que um juiz deve julgar
* @param Bateria_model bateriaModel
* @param JuizBateria_model juizBateriaModel
* @param String ordenar
* @return ArrayList<Bateria_model> listaBateria
* */
public ArrayList<Bateria_model> listarBateriaJuiz( Bateria_model bateriaModel,JuizBateria_model juizBateriaModel, String ordenar ){
//Inicio os objetos que ser�o utilizados para este metodo
ArrayList<Bateria_model> listaBateria = null;
try {
listaBateria = Bateria_dao.listarBateriaJuiz(bateriaModel,juizBateriaModel,ordenar);
return listaBateria;
} catch (Exception e) {
return null;
}
}
/**
* Funcao para alterar um status de bateria
* @param int idbateria
* @param int status
* @return boolean resultdo
* */
public static boolean editarStatusBateria( int idbateria,int status ){
//Inicio os objetos que ser�o utilizados para este metodo
boolean resultdo = false;
try {
resultdo = Bateria_dao.editarStatusBateria(idbateria,status);
return resultdo;
} catch (Exception e) {
return false;
}
}
/**
* Funcao que seta a instancia de Bateria_model apartir de um obj ResultSet
* @param ResultSet res
* @return Bateria_model bateriaModel
* */
public static Bateria_model carregarBateriaResultSet( ResultSet res ){
//Inicio os objetos que ser�o utilizados para este metodo
Bateria_model bateriaModel = new Bateria_model();
try{
if( res.next() ){
/*
bateriaModel.setIdcampeonatoetapa(res.getInt("idcampeonatoetapa"));
bateriaModel.setIdcampeonato(res.getInt("idcampeonato"));
bateriaModel.setNomeEtapa(res.getString("nome"));
bateriaModel.setPraia(res.getString("praia"));
bateriaModel.setCidade(res.getString("cidade"));
bateriaModel.setIdestado(res.getInt("idestado"));
bateriaModel.setIdpais(res.getInt("idpais"));
bateriaModel.setDataEncerramentoEtapa(res.getDate("dataEncerramento"));
bateriaModel.setDataInicioEtapa(res.getDate("dataInicio"));
bateriaModel.setDataCadastroEtapa(res.getDate("dataCadastro"));
*/
//bateria model
bateriaModel.setIdbateria(res.getInt("idbateria"));
bateriaModel.setFase(res.getInt("fase"));
bateriaModel.setTempo(res.getInt("tempo"));
bateriaModel.setIntervaloTempo(res.getInt("intervaloTempo"));
bateriaModel.setTempoInicio(res.getDate("tempoInicio"));
bateriaModel.setTempoEncerramento(res.getDate("tempoEncerramento"));
bateriaModel.setDataCadastroBateria(res.getDate("dataCadastro"));
}
return bateriaModel;
}catch (Exception e) {
return null;
}
}
/**
* Funcao que retorna um arrayList<bateriaModel_model> apartir de um obj ResultSet
* @param ResultSet res
* @return ArrayList<bateriaModel_model>
* */
public static ArrayList<Bateria_model> carregarListaBateriaResultSet( ResultSet res ){
//Inicio as variaveis que ser�o utilizados para este metodo
ArrayList<Bateria_model> listabateriaModel = null;
Bateria_model bateriaModel = null;
try{
listabateriaModel = new ArrayList<Bateria_model>();
while(res.next()){
bateriaModel = new Bateria_model();
/*
bateriaModel.setIdcampeonatoetapa(res.getInt("idcampeonatoetapa"));
bateriaModel.setIdcampeonato(res.getInt("idcampeonato"));
bateriaModel.setNomeEtapa(res.getString("nome"));
bateriaModel.setPraia(res.getString("praia"));
bateriaModel.setCidade(res.getString("cidade"));
bateriaModel.setIdestado(res.getInt("idestado"));
bateriaModel.setIdpais(res.getInt("idpais"));
bateriaModel.setDataEncerramentoEtapa(res.getDate("dataEncerramento"));
bateriaModel.setDataInicioEtapa(res.getDate("dataInicio"));
bateriaModel.setDataCadastroEtapa(res.getDate("dataCadastro"));
*/
//bateria model
bateriaModel.setIdbateria(res.getInt("idbateria"));
bateriaModel.setFase(res.getInt("fase"));
bateriaModel.setTempo(res.getInt("tempo"));
bateriaModel.setIntervaloTempo(res.getInt("intervaloTempo"));
bateriaModel.setTempoInicio(res.getDate("tempoInicio"));
bateriaModel.setTempoEncerramento(res.getDate("tempoEncerramento"));
bateriaModel.setDataCadastroBateria(res.getDate("dataCadastro"));
listabateriaModel.add(bateriaModel);
}
return listabateriaModel;
}catch (Exception e) {
return null;
}
}
/**
* Funcao que retorna um arrayList<bateriaModel_model> que um juiz deve julgar apartir de um obj ResultSet
* @param ResultSet res
* @return ArrayList<bateriaModel_model>
* */
public ArrayList<Bateria_model> carregarListaBateriaJuizResultSet( ResultSet res ){
//Inicio as variaveis que ser�o utilizados para este metodo
ArrayList<Bateria_model> listabateriaModel = null;
Bateria_model bateriaModel = null;
try{
listabateriaModel = new ArrayList<Bateria_model>();
while(res.next()){
bateriaModel = new Bateria_model();
//dados da etapa
bateriaModel.setIdcampeonatoetapa(res.getInt("ce.idcampeonatoetapa"));
bateriaModel.setIdcampeonato(res.getInt("ce.idcampeonato"));
bateriaModel.setNomeEtapa(res.getString("ce.nome"));
bateriaModel.setPraia(res.getString("ce.praia"));
bateriaModel.setCidade(res.getString("ce.cidade"));
//bateriaModel.setIdestado(res.getInt("ce.idestado"));
//bateriaModel.setIdpais(res.getInt("ce.idpais"));
bateriaModel.setDataEncerramentoEtapa(res.getDate("ce.dataEncerramento"));
bateriaModel.setDataInicioEtapa(res.getDate("ce.dataInicio"));
bateriaModel.setDataCadastroEtapa(res.getDate("ce.dataCadastro"));
//bateria model
bateriaModel.setIdbateria(res.getInt("b.idbateria"));
bateriaModel.setFase(res.getInt("b.fase"));
bateriaModel.setTempo(res.getInt("b.tempo"));
bateriaModel.setIntervaloTempo(res.getInt("b.intervaloTempo"));
bateriaModel.setTempoInicio(res.getDate("b.tempoInicio"));
bateriaModel.setTempoEncerramento(res.getDate("b.tempoEncerramento"));
bateriaModel.setDataCadastroBateria(res.getDate("b.dataCadastro"));
bateriaModel.setStatus(res.getInt("b.status"));
//carrego a lista de atletas de uma bateria
bateriaModel.setListaAtletaDisputa( listarAtletasBateria(bateriaModel) );
listabateriaModel.add(bateriaModel);
}
return listabateriaModel;
}catch (Exception e) {
return null;
}
}
/**
* Funcao que embaralha os atletas para montar uma bateria
* @param ArrayList<Atleta_model>
* @return ArrayList<Atleta_model>
* */
public ArrayList<Atleta_model> misturarAtletas( ArrayList<Atleta_model> listaAtletaInscrito ){
try{
//misturo a lista de atleta para formar as baterias
Collections.shuffle(listaAtletaInscrito);
}catch (Exception e) {
return null;
}
return listaAtletaInscrito;
}
/**
* Funcao que monta as baterias de uma etapa de campeonato
* @param Bateria_model bateriaModel
* @param ArrayList<Atleta_model> listaAtletaInscrito
* @return ArrayList<Bateria_model>
* */
public ArrayList<Bateria_model> montarBateria( Bateria_model bateriaModel, ArrayList<Atleta_model> listaAtletaInscrito ){
//Inicio as variaveis que ser�o utilizados para este metodo
ArrayList<Bateria_model> listabateriaModel = new ArrayList<Bateria_model>();
ArrayList<AtletaDisputa_model> listaAtletaDisputaModel = null;
AtletaDisputa_model atletaDisputaModel = null;
Atleta_model atletaModelAux = null;
Bateria_model bateriaModelAux = null;
int contador = 0;
int posicaoContador = 0;
//pego os valores da instancia de bateriaModel
int campeonatoEtapaId = bateriaModel.getIdcampeonatoetapa();
int fase = bateriaModel.getFase();
int tempo = bateriaModel.getTempo();
int tempoIntervalo = bateriaModel.getIntervaloTempo();
Date dataInicio = bateriaModel.getDataInicio();
Date dataEncerramento = bateriaModel.getDataEncerramento();
try{
//checo se poderemos montar esta bateria
int totalDeAtletas = listaAtletaInscrito.size();
int resto = totalDeAtletas%4;
if(resto != 0){
return null;
}
//misturo os atletas
this.misturarAtletas(listaAtletaInscrito);
String arrayAux[] = new String[4];
arrayAux[0] = "Branca";
arrayAux[1] = "Verde";
arrayAux[2] = "Preta";
arrayAux[3] = "Vermelha";
//enquanto tenho lista de atleta monto as baterias
while( listaAtletaInscrito.size() != 0 ){
for(int i = 0; i <= totalDeAtletas; i++){
//se for a primeira iteracao instancio um obj Bateria_model
if(contador == 0){
//instancio a lista de AtletaDisputa_model
listaAtletaDisputaModel = new ArrayList<AtletaDisputa_model>();
//instancio o obj Bateria_model
bateriaModelAux = new Bateria_model(fase,tempo,tempoIntervalo,dataInicio,dataEncerramento,listaAtletaDisputaModel);
//seto o id deste campeonatoEtapa
bateriaModelAux.setIdcampeonatoetapa(campeonatoEtapaId);
}
//se ja tenho uma lista de 4 atletas monto a primeira bateria e adiciono na lista
if( bateriaModelAux.getListaAtletaDisputa().size() == 4 ){
//preecho a lista de bateria
listabateriaModel.add(bateriaModelAux);
contador = 0;
posicaoContador = 0;
//saio deste loop
break;
}
//caso entre em loop infinito utilizo o meu contador de seguranca para sair deste loop
if(posicaoContador > 4){
listabateriaModel = null;
break;
}
//pego o atleta da lista
atletaModelAux = listaAtletaInscrito.get(0);
//instancio a disputa de atleta
atletaDisputaModel = new AtletaDisputa_model(atletaModelAux,bateriaModelAux,arrayAux[contador]);
//seto o atletaDisputaModel no atributo listaAtletaDisputa da bateria
bateriaModelAux.getListaAtletaDisputa().add(atletaDisputaModel);
//tiro da lista o atleta que acabei de adicionar
listaAtletaInscrito.remove(0);
//incremento os contadores
posicaoContador ++;
contador ++;
}
}
}catch (Exception e) {
return null;
}
return listabateriaModel;
}
/**
* Funcao para persistir uma lista de baterias j� montadas
* @param ArrayList<Bateria_model> listaBateriaModel
* @param ArrayList<JuizBateria_model> listaJuizInscritoBateriaModel
* @return boolean
* */
public boolean gravarListaDeBateriaMontada( ArrayList<Bateria_model> listaBateriaModel, ArrayList<JuizBateria_model> listaJuizInscritoBateriaModel ){
//Inicio as variaveis que ser�o utilizados para este metodo
boolean resultado = false;
Bateria_model bateriaModel = null;
try{
Bateria_dao bateriaDao = new Bateria_dao();
for(Bateria_model bateriaModelAux : listaBateriaModel){
//primeiro gravo a bateria
bateriaModelAux = bateriaDao.salvarBateriaMontada(bateriaModelAux);
//instancio o controlador do obj AtletaDisputa
AtletaDisputaController atletaDisputaControl = new AtletaDisputaController();
JuizBateriaController juizBateriaControl = new JuizBateriaController();
if(bateriaModelAux != null){
//depois gravo os atletas disputas
for(AtletaDisputa_model atletaDisputaModelAux : bateriaModelAux.getListaAtletaDisputa() ){
atletaDisputaModelAux.setBateriaModel(bateriaModelAux);
resultado = atletaDisputaControl.salvarAtletaDisputa(atletaDisputaModelAux);
if(resultado == false){
break;
}
}
//gravo a lista de juizes para esta bateria
for(JuizBateria_model juizBateriaModelAux : listaJuizInscritoBateriaModel ){
juizBateriaModelAux.setBateriaModel(bateriaModelAux);
//resultado = atletaDisputaControl.salvarAtletaDisputa(juizBateriaModelAux);
resultado = juizBateriaControl.salvarJuizBateria(juizBateriaModelAux);
if(resultado == false){
break;
}
}
}else{
break;
}
}
/*
//caso de algum problema deleto os registros do BD
if(resultado == false){
for(Bateria_model bateriaModelAux : listaBateriaModel){
//primeiro gravo a bateria
bateriaModelAux = bateriaDao.salvarBateriaMontada(bateriaModelAux);
atletaDisputaControl.deletarTodosAtletaDisputa(atletaDisputaModelAux);
}
}
*/
}catch (Exception e) {
return false;
}
return resultado;
}
/**
* Funcao que monta uma lista com todas as chaves da bateria
* @param Bateria_model bateriaModel
* @return ArrayList<Bateria_model>
* */
public ArrayList<Bateria_model> listarBateriaChaves( Bateria_model bateriaModel ){
//Inicio as variaveis que ser�o utilizados para este metodo
ArrayList<Bateria_model> listabateriaModel = null;
ArrayList<AtletaDisputa_model> listaAtletaDisputaModel = null;
AtletaDisputa_model atletaDisputaModel = null;
AtletaDisputaController atletaDisputaControl = null;
String ordem = "fase";
try{
//Inicio os objetos que ser�o utilizados para este metodo
listabateriaModel = Bateria_dao.listarBateria(bateriaModel,ordem);
atletaDisputaControl = new AtletaDisputaController();
for(Bateria_model bateriaModelAux : listabateriaModel ){
atletaDisputaModel = new AtletaDisputa_model();
atletaDisputaModel.setBateriaModel(bateriaModelAux);
//carrego alista de atletas que vao disputar essa bateria
listaAtletaDisputaModel = atletaDisputaControl.listarAtletaDisputa(atletaDisputaModel);
if(listaAtletaDisputaModel != null){
bateriaModelAux.setListaAtletaDisputa(listaAtletaDisputaModel);
}
}
}catch (Exception e) {
return null;
}
return listabateriaModel;
}
/**
* Funcao que monta uma lista com todas os atletas participantes de uma bateria
* @param Bateria_model bateriaModel
* @return ArrayList<AtletaDisputa_model>
* */
public ArrayList<AtletaDisputa_model> listarAtletasBateria( Bateria_model bateriaModel ){
//Inicio as variaveis que ser�o utilizados para este metodo
ArrayList<AtletaDisputa_model> listaAtletaDisputaModel = null;
AtletaDisputa_model atletaDisputaModel = null;
AtletaDisputaController atletaDisputaControl = null;
try{
atletaDisputaModel = new AtletaDisputa_model();
atletaDisputaModel.setBateriaModel(bateriaModel);
//carrego alista de atletas que vao disputar essa bateria
atletaDisputaControl = new AtletaDisputaController();
listaAtletaDisputaModel = atletaDisputaControl.listarAtletaDisputa(atletaDisputaModel);
return listaAtletaDisputaModel;
}catch (Exception e) {
return null;
}
}
/**
* Funcao para pegar o tempo restante de uma bateria
* @param Date tempoEncerramento
* @return int idadeAux
* */
public int pegarTempoBateria(Date tempoEncerramento){
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(tempoEncerramento);
Calendar hoje = Calendar.getInstance();
int tempoRestante = hoje.get(Calendar.MINUTE);
return tempoRestante;
}
}