Java tutorial
/** * Copyright 2008 Vctor Enrique Tamames, * Universidad de Valladolid, Espaa. * * This file is part of DelphSim. * * DelphSim is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or any later version. * * DelphSim is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * DelphSim. If not, see <http://www.gnu.org/licenses/>. */ /** * DelphSim (Delphos Simulator), simulador de epidemias desarrollado como * Proyecto Fin de Carrera de Ingeniera Informtica para la Escuela Tcnica * Superior de Ingeniera Informtica de la Universidad de Valladolid. */ package delphsim.model; import java.util.Iterator; import java.util.Vector; import org.dom4j.Element; import org.dom4j.tree.DefaultElement; /** * Los objetos de esta clase representan cada uno de los compartimentos, fruto * de combinar las categoras entre s, entre los que se distribuyen los * habitantes de la poblacin. * @author Vctor E. Tamames Gmez */ public class Compartimento implements Cloneable { /** * El nombre del compartimento. */ private String nombre; /** * El nmero de habitantes que hay en este compartimento inicialmente. */ private long habitantes; /** * Procesos que dependen de este compartimento. */ private Vector procesosVinculados = new Vector(); /** * Otros compartimentos que dependen de ste. */ private Vector compartimentosVinculados = new Vector(); /** * Definicin de este compartimento para simulaciones continuas. */ private String definicionContinua; /** * Constructor de la clase. */ public Compartimento() { } /** * Mtodo para cambiar el nombre al compartimento. * @param nombreCat El nuevo nombre para el compartimento. */ public void setNombre(String nombreCat) { this.nombre = nombreCat; } /** * Mtodo para obtener el nombre del compartimento. * @return El nombre del compartimento. */ public String getNombre() { return this.nombre; } /** * Mtodo para cambiar el nmero de habitantes inicial del compartimento. * @param personasComp El nuevo nmero de habitantes. */ public void setHabitantes(long personasComp) { this.habitantes = personasComp; } /** * Mtodo para obtener el nmero inicial de habitantes en el compartimento. * @return El nmero de habitantes. */ public long getHabitantes() { return this.habitantes; } /** * Mtodo para cambiar el conjunto de procesos que dependen de este * compartimento. * @param procesosVinculadosComp Los nombres del nuevo conjunto de procesos * vinculados. */ public void setProcesosVinculados(String[] procesosVinculadosComp) { this.procesosVinculados = new Vector(); for (String procVinc : procesosVinculadosComp) { if (!this.procesosVinculados.contains(procVinc)) { this.procesosVinculados.add(procVinc); } } } /** * Mtodo para obtener los procesos que dependen de este compartimento. * @return Los nombres del conjunto de procesos vinculados. */ public String[] getProcesosVinculados() { String[] procVinculados = new String[this.procesosVinculados.size()]; for (int i = 0; i < this.procesosVinculados.size(); i++) { procVinculados[i] = (String) this.procesosVinculados.get(i); } return procVinculados; } /** * Mtodo para aadir un nuevo proceso a la lista de procesos vinculados. * Si ya estuviera contenido en ella, no se hace nada. * @param procVincNuevo El nombre del proceso a aadir. */ public void anadirProcesoVinculado(String procVincNuevo) { if (!this.procesosVinculados.contains(procVincNuevo)) { this.procesosVinculados.add(procVincNuevo); } } /** * Mtodo para eliminar un proceso de la lista de procesos vinculados. Si * no estuviera contenido en ella, no se hace nada. * @param procVincEliminado El nombre del proceso a eliminar. */ public void eliminarProcesoVinculado(String procVincEliminado) { this.procesosVinculados.remove(procVincEliminado); } /** * Mtodo para cambiar el conjunto de compartimentos que dependen de ste. * @param compartimentosVinculadosComp Los nombres del nuevo conjunto de * compartimentos. */ public void setCompartimentosVinculados(String[] compartimentosVinculadosComp) { this.compartimentosVinculados = new Vector(); for (String compVinc : compartimentosVinculadosComp) { if (!this.compartimentosVinculados.contains(compVinc)) { this.compartimentosVinculados.add(compVinc); } } } /** * Mtodo para obtener el conjunto de compartimentos que dependen de ste. * @return Los nombres de los compartimentos. */ public String[] getCompartimentosVinculados() { String[] compVinculados = new String[this.compartimentosVinculados.size()]; for (int i = 0; i < this.compartimentosVinculados.size(); i++) { compVinculados[i] = (String) this.compartimentosVinculados.get(i); } return compVinculados; } /** * Mtodo para aadir un compartimento a la lista de compartimentos que * dependen de ste. Si ya estuviera contenido en ella, no se hace nada. * @param compVincNuevo El nombre del compartimento a aadir. */ public void anadirCompartimentoVinculado(String compVincNuevo) { if (!this.compartimentosVinculados.contains(compVincNuevo)) { this.compartimentosVinculados.add(compVincNuevo); } } /** * Mtodo para eliminar un compartimento de la lista de compartimentos que * dependen de ste. Si no estuviera contenido en ella, no se hace nada. * @param compVincEliminado El nombre del compartimento a eliminar. */ public void eliminarCompartimentoVinculado(String compVincEliminado) { this.compartimentosVinculados.remove(compVincEliminado); } /** * Mtodo para cambiar la definicin continua de este compartimento. * @param dinamicaContinuaComp La nueva definicin continua. */ public void setDefinicionContinua(String dinamicaContinuaComp) { this.definicionContinua = dinamicaContinuaComp; } /** * Mtodo para obtener la definicin continua de este compartimento. * @return La definicin continua. */ public String getDefinicionContinua() { return this.definicionContinua; } /** * Mtodo para cargar los datos contenidos en un objeto de tipo * <CODE>org.dom4j.Element</CODE> en este objeto. * @param elementoCompartimento El objeto <CODE>org.dom4j.Element</CODE>. */ public void cargarDesdeXML(Element elementoCompartimento) { this.setNombre(elementoCompartimento.attributeValue("nombre")); this.setHabitantes(Long.valueOf(elementoCompartimento.attributeValue("habitantes"))); String[] procVinculados = new String[elementoCompartimento.elements("procesoVinculado").size()]; int indice = 0; for (Iterator i = elementoCompartimento.elementIterator("procesoVinculado"); i.hasNext();) { Element elementoProcesoVinculado = (Element) i.next(); procVinculados[indice++] = elementoProcesoVinculado.attributeValue("nombre"); } this.setProcesosVinculados(procVinculados); String[] compVinculados = new String[elementoCompartimento.elements("compartimentoVinculados").size()]; indice = 0; for (Iterator i = elementoCompartimento.elementIterator("compartimentoVinculados"); i.hasNext();) { Element elementoCompartimentoVinculado = (Element) i.next(); compVinculados[indice++] = elementoCompartimentoVinculado.attributeValue("nombre"); } this.setCompartimentosVinculados(compVinculados); Element elementoDefinicionContinua = elementoCompartimento.element("definicionContinua"); if (elementoDefinicionContinua != null) { this.setDefinicionContinua(elementoDefinicionContinua.attributeValue("definicion")); } } /** * Mtodo para volcar los datos de este objeto en uno de tipo * <CODE>org.dom4j.Element</CODE>. * @return El objeto <CODE>org.dom4j.Element</CODE>. */ public Element volcarAXML() { Element elementoCompartimento = new DefaultElement("compartimento"); elementoCompartimento.addAttribute("nombre", this.nombre); elementoCompartimento.addAttribute("habitantes", String.valueOf(this.habitantes)); for (int i = 0; i < this.procesosVinculados.size(); i++) { Element elementoProcesoVinculado = elementoCompartimento.addElement("procesoVinculado"); elementoProcesoVinculado.addAttribute("nombre", (String) this.procesosVinculados.get(i)); } for (int i = 0; i < this.compartimentosVinculados.size(); i++) { Element elementoCompartimentoVinculado = elementoCompartimento.addElement("compartimentoVinculado"); elementoCompartimentoVinculado.addAttribute("nombre", (String) this.compartimentosVinculados.get(i)); } if (this.definicionContinua != null && !this.definicionContinua.equals("")) { Element elementoDefinicionContinua = elementoCompartimento.addElement("definicionContinua"); elementoDefinicionContinua.addAttribute("definicion", this.definicionContinua); } return elementoCompartimento; } /** * Implementacin de la interfaz Cloneable. * @return Un clon idntico a este objeto. */ @Override public Compartimento clone() { Compartimento clon = new Compartimento(); clon.setNombre(this.getNombre()); clon.setHabitantes(this.getHabitantes()); clon.setProcesosVinculados(this.getProcesosVinculados()); clon.setCompartimentosVinculados(this.getCompartimentosVinculados()); clon.setDefinicionContinua(this.getDefinicionContinua()); return clon; } }