delphsim.model.Poblacion.java Source code

Java tutorial

Introduction

Here is the source code for delphsim.model.Poblacion.java

Source

/** 
 * 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 javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import org.dom4j.Element;
import org.dom4j.tree.DefaultElement;

/**
 * Esta clase representa la configuracin de la poblacin que va a sufrir la
 * epidemia.
 * @author Vctor E. Tamames Gmez
 */
public class Poblacion implements Cloneable {

    /**
     * El nombre de la poblacin.
     */
    private String nombre;

    /**
     * El nmero de habitantes total de la poblacin.
     */
    private long habitantes;

    /**
     * Las divisiones de esta poblacin.
     */
    private Division[] divisiones = new Division[0];

    /**
     * Constructor de la clase.
     */
    public Poblacion() {
    }

    /**
     * Mtodo para cambiar el nombre de la poblacin.
     * @param nombrePob El nuevo nombre.
     */
    public void setNombre(String nombrePob) {
        this.nombre = nombrePob;
    }

    /**
     * Mtodo para obtener el nombre de la poblacin.
     * @return El nombre de la poblacin.
     */
    public String getNombre() {
        return this.nombre;
    }

    /**
     * Mtodo para cambiar el nmero total de habitantes.
     * @param numHabitantes El nuevo nmero total.
     */
    public void setHabitantes(long numHabitantes) {
        this.habitantes = numHabitantes;
    }

    /**
     * Mtodo para obtener el nmero total de habitantes.
     * @return Nmero total de habitantes.
     */
    public long getHabitantes() {
        return this.habitantes;
    }

    /**
     * Mtodo para cambiar las divisiones de esta poblacin.
     * @param divisionesPob Las nuevas divisiones.
     */
    public void setDivisiones(Division[] divisionesPob) {
        this.divisiones = divisionesPob;
    }

    /**
     * Mtodo para obtener las divisiones de esta poblacin.
     * @return Las divisiones.
     */
    public Division[] getDivisiones() {
        return this.divisiones;
    }

    /**
     * Mtodo que transforma la informacin contenida por este objeto en un
     * modelo de rbol para ser mostrada por pantalla.
     * @return Un modelo de rbol para un <CODE>JTree</CODE> con la informacin
     * de esta poblacin.
     */
    public DefaultTreeModel construirArbolDistribucion() {
        DefaultMutableTreeNode raiz = new DefaultMutableTreeNode("raiz");
        DefaultTreeModel distribucion = new DefaultTreeModel(raiz, false);
        for (Division division : this.getDivisiones()) {
            DefaultMutableTreeNode otraDivision = new DefaultMutableTreeNode(division.getNombre());
            raiz.add(otraDivision);
            for (Categoria categoria : division.getCategorias()) {
                DefaultMutableTreeNode otraCategoria = new DefaultMutableTreeNode(categoria.getNombre());
                otraDivision.add(otraCategoria);
            }
        }
        return distribucion;
    }

    /**
     * Mtodo para cargar los datos contenidos en un objeto de tipo
     * <CODE>org.dom4j.Element</CODE> en este objeto.
     * @param elementoPoblacion El objeto <CODE>org.dom4j.Element</CODE>.
     */
    public void cargarDesdeXML(Element elementoPoblacion) {
        this.setNombre(elementoPoblacion.attributeValue("nombre"));
        this.setHabitantes(Long.valueOf(elementoPoblacion.attributeValue("habitantes")));
        this.divisiones = new Division[elementoPoblacion.elements("division").size()];
        int indice = 0;
        for (Iterator i = elementoPoblacion.elementIterator("division"); i.hasNext();) {
            Element elementoDivision = (Element) i.next();
            this.divisiones[indice] = new Division();
            this.divisiones[indice++].cargarDesdeXML(elementoDivision);
        }
    }

    /**
     * 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 elementoPoblacion = new DefaultElement("poblacion");

        elementoPoblacion.addAttribute("nombre", this.nombre);
        elementoPoblacion.addAttribute("habitantes", String.valueOf(this.habitantes));
        for (Division div : this.divisiones) {
            elementoPoblacion.add(div.volcarAXML());
        }

        return elementoPoblacion;
    }

    /**
     * Implementacin de la interfaz Cloneable.
     * @return Un clon idntico a este objeto.
     */
    @Override
    public Poblacion clone() {
        int numDivs = this.getDivisiones().length;
        Poblacion clon = new Poblacion();
        clon.setNombre(this.getNombre());
        clon.setHabitantes(this.getHabitantes());
        clon.setDivisiones(new Division[numDivs]);
        for (int i = 0; i < numDivs; i++) {
            clon.getDivisiones()[i] = this.getDivisiones()[i].clone();
        }
        return clon;
    }
}