//Construimos el DOM con las preferencias
DocumentBuilderFactory dbFactory;
DocumentBuilder docBuilder;
LogicExperimento experimento = null;
try
{
dbFactory = DocumentBuilderFactory.newInstance();
docBuilder = dbFactory.newDocumentBuilder();
if(fichExperimento.exists()) {
xmlDoc = docBuilder.parse(fichExperimento);
elementoCabecera = xmlDoc.getDocumentElement();
} else {
Practica1.log.error("Abrir, no existe el experimento");
throw new ExperimentoInvalidoException(
Language.getI().getP("NO_EXISTE_EXPERIMENTO"));
}
//Buscamos las propiedades del experimento
NodeList lstPropiedades = elementoCabecera.
getElementsByTagName("propiedades-experimento");
boolean propiedadesCorrecto = false;
if(lstPropiedades.getLength() == 1) {
Node nodePropiedades = lstPropiedades.item(0);
//Obtenemos las propiedades del experimento
NodeList lstValores = nodePropiedades.getChildNodes();
//Recorremos las propiedades
for(int i=0; i<lstValores.getLength(); i++) {
Node nodoPropExp = lstValores.item(i);
if(nodoPropExp.getNodeType() == Node.ELEMENT_NODE) {
String nProp = nodoPropExp.getNodeName();
//Comprobamos en orden que se cumplen las propiedades esperadas
switch(i) {
case 1: //Nombre experimento
if(nProp.equals("nombre-experimento")) {
nombreExperimento = nodoPropExp.
getTextContent();
} else {
Practica1.log.error("Abrir, nombre experimento inválido");
throw new ExperimentoInvalidoException(
Language.getI().getP("FICHERO_INVALIDO"));
}
break;
case 3:
if(nProp.equals("tipo-bacteria")) {
tipoBacteria = nodoPropExp.
getTextContent();
} else {
Practica1.log.error("Abrir, tipo bacteria inválido");
throw new ExperimentoInvalidoException(
Language.getI().getP("FICHERO_INVALIDO"));
}
break;
case 5:
if(nProp.equals("nombre-investigador")) {
nombreInvestigador = nodoPropExp.
getTextContent();
} else {
Practica1.log.error("Abrir, nombre investigador inválido");
throw new ExperimentoInvalidoException(
Language.getI().getP("FICHERO_INVALIDO"));
}
break;
case 7:
if(nProp.equals("proyecto-investigacion")) {
proyectoInvestigacion = nodoPropExp.
getTextContent();
propiedadesCorrecto = true;
} else {
Practica1.log.error("Abrir, proyecto investigación inválido");
throw new ExperimentoInvalidoException(
Language.getI().getP("FICHERO_INVALIDO"));
}
break;
}
}
}
} else {
Practica1.log.error("Abrir, fichero inválido");
throw new ExperimentoInvalidoException(
Language.getI().getP("FICHERO_INVALIDO"));
}
if(!propiedadesCorrecto) {
throw new ExperimentoInvalidoException(
Language.getI().getP("FICHERO_INVALIDO"));
}
//Creamos el modelo del experimento
experimento = new LogicExperimento(fichExperimento,
nombreExperimento, tipoBacteria, nombreInvestigador,
proyectoInvestigacion);
//Buscamos las poblaciones del experimento
NodeList lstPoblaciones = elementoCabecera.
getElementsByTagName("poblacion");
//Recorremos las poblaciones y las analizamos
for(int i=0; i<lstPoblaciones.getLength(); i++) {
if(lstPoblaciones.item(i).getNodeType() == Node.ELEMENT_NODE) {
cargarPoblacion(experimento, lstPoblaciones.item(i));
}
}
}
catch (Exception ex)
{
Practica1.log.error(Language.getI().getP("ERROR"), ex);
throw new ExperimentoInvalidoException(ex);
}
xmlDoc = null;
elementoCabecera= null;
experimento.setModified(false);
return experimento;
}