@Override
public void run() {
fireAbriendoExperimento(nombreEx);
LogicExperimento exp;
Connection con = null;
Statement sExp = null;
Statement sPob = null;
Statement sTab = null;
Statement sCom = null;
ResultSet rsExp = null;
ResultSet rsPob = null;
ResultSet rsTab = null;
ResultSet rsCom = null;
try {
con = DriverManager.getConnection(DBURL);
sExp = con.createStatement();
sPob = con.createStatement();
sTab = con.createStatement();
sCom = con.createStatement();
rsExp = sExp.executeQuery("SELECT NOMBREEXPERIMENTO, TIPOBACTERIA,"
+ " NOMBREINVESTIGADOR, PROYECTOINVESTIGACION,"
+ " NUMDIASEXPERIMENTO, LIMITEALIMENTACIONMAXIMA,"
+ " UNIDADESMEDIDA FROM " + SCHEMA + ".EXPERIMENTO WHERE"
+ " NOMBREEXPERIMENTO = '" + nombreEx + "'");
String tipoBacteria;
String nombreInvestigador;
String proyectoInvestigacion;
int numDiasExperimento;
int limiteAlimentacionMax;
String unidadesMedida;
if(rsExp.next()) {
tipoBacteria = rsExp.getString("TIPOBACTERIA");
nombreInvestigador = rsExp.getString("NOMBREINVESTIGADOR");
proyectoInvestigacion = rsExp.getString("PROYECTOINVESTIGACION");
numDiasExperimento = rsExp.getInt("NUMDIASEXPERIMENTO");
limiteAlimentacionMax = rsExp.getInt("LIMITEALIMENTACIONMAXIMA");
unidadesMedida = rsExp.getString("UNIDADESMEDIDA");
} else {
throw new SQLException("No existe el experimento " +
nombreEx + " en base de datos");
}
//Creamos el experimento a partir de los datos de la BD
exp = new LogicExperimento(new File(System.getProperty("user.home")),
nombreEx, tipoBacteria, nombreInvestigador,
proyectoInvestigacion, numDiasExperimento,
limiteAlimentacionMax, unidadesMedida, true);
//Ahora obtenemos las poblaciones
rsPob = sPob.executeQuery("SELECT NOMBREPOBLACION, FECHA,"
+ " TAMANIOPOBLACION, TEMPERATURA, NUMDIAS,"
+ " ESCALATEMPERATURA, SINCRONIZARCOMIDA, ALIMENTACIONINI,"
+ " DIAMAXIMA, ALIMENTACIONMAX, ALIMENTACIONFIN FROM "
+ SCHEMA + ".POBLACION WHERE NOMBREEXPERIMENTO = '"
+ nombreEx + "'");
while(rsPob.next()) {
String nombrePob = rsPob.getString("NOMBREPOBLACION");
String fecha = rsPob.getString("FECHA");
int tamanio = rsPob.getInt("TAMANIOPOBLACION");
int temperatura = rsPob.getInt("TEMPERATURA");
int numDias = rsPob.getInt("NUMDIAS");
String escalaTemp = rsPob.getString("ESCALATEMPERATURA");
boolean sincronizarCom = rsPob.getBoolean("SINCRONIZARCOMIDA");
int alimentacionIni = rsPob.getInt("ALIMENTACIONINI");
int diaMax = rsPob.getInt("DIAMAXIMA");
int alimentacionMax = rsPob.getInt("ALIMENTACIONMAX");
int alimentacionFin = rsPob.getInt("ALIMENTACIONFIN");
LogicPoblacion p = new LogicPoblacion(nombrePob, exp);
p.setFecha(fecha);
p.setTamanioPoblacion(tamanio);
p.setTemperatura(temperatura);
p.setNumDias(numDias);
p.setEscalaTemperatura(escalaTemp);
p.setSincronizarComida(sincronizarCom);
JGraficaComidaModel modelGrafica = new JGraficaComidaModel(numDias,
0, limiteAlimentacionMax);
modelGrafica.setAlimentoInicial(0);
modelGrafica.setAlimentoFinal(0);
modelGrafica.setAlimentoMax(alimentacionMax);
modelGrafica.setDiaMax(diaMax);
modelGrafica.setAlimentoInicial(alimentacionIni);
modelGrafica.setAlimentoFinal(alimentacionFin);
p.setModeloGraficaComida(modelGrafica);
String[][] datos = new String[numDias][];
String []cabeceras = new String[]{
Language.getI().getP("DIA"),
Language.getI().getP("TAMANIO_POBLACION"),
Language.getI().getP("BACTERIAS_MUERTAS"),
Language.getI().getP("TEMPERATURA"),
Language.getI().getP("DOSIS_COMIDA")};
//Obtenemos los datos de la tabla de la población
rsTab = sTab.executeQuery("SELECT NUMDIA, POBLACION,"
+ " BACTERIASMUERTAS, TEMPERATURA, COMIDADIA FROM "
+ SCHEMA + ".DATOSTABLA WHERE NOMBREEXPERIMENTO = "
+ "'" + nombreEx + "' AND NOMBREPOBLACION = "
+ "'" + nombrePob + "'");
while(rsTab.next()) {
int dia = rsTab.getInt("NUMDIA");
int poblacion = rsTab.getInt("POBLACION");
int bacMuertas = rsTab.getInt("BACTERIASMUERTAS");
int temp = rsTab.getInt("TEMPERATURA");
int comidaDia = rsTab.getInt("COMIDADIA");
datos[dia-1] = new String[]{"" + dia,
(poblacion != 0) ? poblacion + "" : "",
(bacMuertas != 0) ? bacMuertas + "": "",
(temp != 0) ? temp + "" : "",
"" + comidaDia};
}
ModeloPoblacionTabla modelTabla =
new ModeloPoblacionTabla(datos, cabeceras);
p.setModeloPoblacionTabla(modelTabla);
//Obtenemos los comentarios de la población
ModeloComentarios modelComentarios = new ModeloComentarios();
rsCom = sCom.executeQuery("SELECT FECHACOMENTARIO, COMENTARIO"
+ " FROM " + SCHEMA + ".COMENTARIOS WHERE NOMBREEXPERIMENTO = "
+ "'" + nombreEx + "' AND NOMBREPOBLACION = "
+ "'" + nombrePob + "'");
while(rsCom.next()) {
String fech = rsCom.getString("FECHACOMENTARIO");
String com = rsCom.getString("COMENTARIO");
modelComentarios.addComentario(new Comentario(com, fech));
}
p.setModeloComentarios(modelComentarios);
exp.addPoblacion(p);
}
//Notificamos que hemos abierto el experimento
exp.setModified(false);
fireAbiertoExperimento(exp);
} catch (GraficaComidaIncorrectValueException ex) {
Practica1.log.error("Error creando modelo de la gráfica comida", ex);
fireErrorAbriendoExperimento(nombreEx);
} catch (SQLException ex) {