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 los parmetros que se pueden definir * en la aplicacin. * @author Vctor E. Tamames Gmez */ public class Parametro implements Cloneable { /** * El nombre del parmetro (obligatorio). Debe ser nico en el conjunto * compuesto por los nombres de los parmetros, procesos y categoras. */ private String nombre; /** * Una descripcin del parmetro (opcional). */ private String descripcion; /** * La definicin del parmetro para simulaciones continuas. */ private String definicionContinua; /** * Otros parmetros que dependen de ste. */ private Vector parametrosVinculados = new Vector(); /** * Procesos que dependen de este parmetro. */ private Vector procesosVinculados = new Vector(); /** * Compartimentos que dependen de este parmetro. */ private Vector compartimentosVinculados = new Vector(); /** * Constructor de la clase. */ public Parametro() { } /** * Mtodo para cambiar el nombre del parmetro. * @param nombrePar El nuevo nombre. */ public void setNombre(String nombrePar) { this.nombre = nombrePar; } /** * Mtodo para obtener el nombre del parmetro. * @return El nombre del parmetro. */ public String getNombre() { return this.nombre; } /** * Mtodo para cambiar la descripcin del parmetro. * @param descripcionPar La nueva descripcin. */ public void setDescripcion(String descripcionPar) { this.descripcion = descripcionPar; } /** * Mtodo para obtener la descripcin del parmetro. * @return La descripcin del parmetro. */ public String getDescripcion() { return this.descripcion; } /** * Mtodo para cambiar la definicin continua del parmetro. * @param valorPar La nueva definicin continua. */ public void setDefinicionContinua(String valorPar) { this.definicionContinua = valorPar; } /** * Mtodo para obtener la definicin continua del parmetro. * @return La definicin continua del parmetro. */ public String getDefinicionContinua() { return this.definicionContinua; } /** * Mtodo para cambiar el conjunto de parmetros que dependen de ste. * @param parametrosVinculadosPar Los nombres del nuevo conjunto de * parmetros vinculados. */ public void setParametrosVinculados(String[] parametrosVinculadosPar) { this.parametrosVinculados = new Vector(); for (String parVinc : parametrosVinculadosPar) { if (!this.parametrosVinculados.contains(parVinc)) { this.parametrosVinculados.add(parVinc); } } } /** * Mtodo para obtener los parmetros que dependen de ste. * @return Los nombres del conjunto de parmetros vinculados. */ public String[] getParametrosVinculados() { String[] parVinculados = new String[this.parametrosVinculados.size()]; for (int i = 0; i < this.parametrosVinculados.size(); i++) { parVinculados[i] = (String) this.parametrosVinculados.get(i); } return parVinculados; } /** * Mtodo para aadir un nuevo parmetro a la lista de parmetros vinculados. * Si ya estuviera contenido en ella, no se hace nada. * @param parVincNuevo El nombre del parmetro a aadir. */ public void anadirParametroVinculado(String parVincNuevo) { if (!this.parametrosVinculados.contains(parVincNuevo)) { this.parametrosVinculados.add(parVincNuevo); } } /** * Mtodo para eliminar un parmetro de la lista de parmetros vinculados. * Si no estuviera contenido en ella, no se hace nada. * @param parVincEliminado El nombre del parmetro a eliminar. */ public void eliminarParametroVinculado(String parVincEliminado) { this.parametrosVinculados.remove(parVincEliminado); } /** * Mtodo para cambiar el conjunto de procesos que dependen de este * parmetro. * @param procesosVinculadosPar Los nombres del nuevo conjunto de procesos * vinculados. */ public void setProcesosVinculados(String[] procesosVinculadosPar) { this.procesosVinculados = new Vector(); for (String procVinc : procesosVinculadosPar) { if (!this.procesosVinculados.contains(procVinc)) { this.procesosVinculados.add(procVinc); } } } /** * Mtodo para obtener los procesos que dependen de este parmetro. * @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 este * parmetro. * @param compartimentosVinculadosPar Los nombres del nuevo conjunto de * compartimentos. */ public void setCompartimentosVinculados(String[] compartimentosVinculadosPar) { this.compartimentosVinculados = new Vector(); for (String compVinc : compartimentosVinculadosPar) { if (!this.compartimentosVinculados.contains(compVinc)) { this.compartimentosVinculados.add(compVinc); } } } /** * Mtodo para obtener el conjunto de compartimentos que dependen de este * parmetro. * @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 este parmetro. 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 este parmetro. 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 cargar los datos contenidos en un objeto de tipo * <CODE>org.dom4j.Element</CODE> en este objeto. * @param elementoParametro El objeto <CODE>org.dom4j.Element</CODE>. */ public void cargarDesdeXML(Element elementoParametro) { this.setNombre(elementoParametro.attributeValue("nombre")); this.setDescripcion(elementoParametro.elementText("descripcion")); String[] parVinculados = new String[elementoParametro.elements("parametroVinculado").size()]; int indice = 0; for (Iterator i = elementoParametro.elementIterator("parametroVinculado"); i.hasNext();) { Element elementoParametroVinculado = (Element) i.next(); parVinculados[indice++] = elementoParametroVinculado.attributeValue("nombre"); } this.setParametrosVinculados(parVinculados); String[] procVinculados = new String[elementoParametro.elements("procesoVinculado").size()]; indice = 0; for (Iterator i = elementoParametro.elementIterator("procesoVinculado"); i.hasNext();) { Element elementoProcesoVinculado = (Element) i.next(); procVinculados[indice++] = elementoProcesoVinculado.attributeValue("nombre"); } this.setProcesosVinculados(procVinculados); String[] compVinculados = new String[elementoParametro.elements("compartimentoVinculado").size()]; indice = 0; for (Iterator i = elementoParametro.elementIterator("compartimentoVinculado"); i.hasNext();) { Element elementoCompartimentoVinculado = (Element) i.next(); compVinculados[indice++] = elementoCompartimentoVinculado.attributeValue("nombre"); } this.setCompartimentosVinculados(compVinculados); Element elementoDefinicionContinua = elementoParametro.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 elementoParametro = new DefaultElement("parametro"); elementoParametro.addAttribute("nombre", this.nombre); if (this.descripcion != null) { if (!this.descripcion.equals("")) { Element elementoDescripcion = elementoParametro.addElement("descripcion"); elementoDescripcion.setText(this.descripcion); } } for (int i = 0; i < this.parametrosVinculados.size(); i++) { Element elementoParametroVinculado = elementoParametro.addElement("parametroVinculado"); elementoParametroVinculado.addAttribute("nombre", (String) this.parametrosVinculados.get(i)); } for (int i = 0; i < this.procesosVinculados.size(); i++) { Element elementoProcesoVinculado = elementoParametro.addElement("procesoVinculado"); elementoProcesoVinculado.addAttribute("nombre", (String) this.procesosVinculados.get(i)); } for (int i = 0; i < this.compartimentosVinculados.size(); i++) { Element elementoCompartimentoVinculado = elementoParametro.addElement("compartimentoVinculado"); elementoCompartimentoVinculado.addAttribute("nombre", (String) this.compartimentosVinculados.get(i)); } if (this.definicionContinua != null && !this.definicionContinua.equals("")) { Element elementoDefinicionContinua = elementoParametro.addElement("definicionContinua"); elementoDefinicionContinua.addAttribute("definicion", this.definicionContinua); } return elementoParametro; } /** * Implementacin de la interfaz Cloneable. * @return Un clon idntico a este objeto. */ @Override public Parametro clone() { Parametro clon = new Parametro(); clon.setNombre(this.getNombre()); clon.setDescripcion(this.getDescripcion()); clon.setParametrosVinculados(this.getParametrosVinculados()); clon.setProcesosVinculados(this.getProcesosVinculados()); clon.setCompartimentosVinculados(this.getCompartimentosVinculados()); clon.setDefinicionContinua(this.getDefinicionContinua()); return clon; } }