Package practica1.logic

Source Code of practica1.logic.LogicPoblacion

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package practica1.logic;

import java.util.ArrayList;
import practica1.domain.Poblacion;
import practica1.domain.event.PoblacionPropertyEvent;
import practica1.domain.listener.PoblacionPropertyListener;
import practica1.logic.event.LogicPoblacionEvent;
import practica1.logic.listener.LogicPoblacionListener;
import practica1.util.HashCodeUtil;

/**
* Clase que extiende de Poblacion y se encarga de implementar su lógica
* @author Miguel González - Ceura
*/
public class LogicPoblacion extends Poblacion {
    private boolean sincronizarComida;
    private boolean modified;
    private ArrayList<LogicPoblacionListener> listeners;
    //Se guarda el experimento lógico que contiene a esta población
    //Facilita el manejo de eventos entre padre e hijo
    //NOTA: Tener cuidado al modificar el código para no romper la relación y
    //probocar errores
    private LogicExperimento experimentoPadre;
   
    /**
     * Constructor de una población lógica
     * @param nombrePoblacion Nombre de la población
     * @param experimentoPadre Experimento lógico que lo contiene
     */
    public LogicPoblacion(String nombrePoblacion, LogicExperimento experimentoPadre) {
        super(nombrePoblacion);
        super.addPropertyChangeListener(new PoblacionPropertyListener() {

            @Override
            public void propertyChange(PoblacionPropertyEvent propertyChange) {
                firePoblacionChange();
            }
           
        });
        this.experimentoPadre = experimentoPadre;
        sincronizarComida = true;
        modified = false;
        listeners = new ArrayList<LogicPoblacionListener>();
    }

    /**
     * Devuelve el nombre de la población
     * @return String nombrePoblacion
     */
    @Override
    public String toString() {
        return getNombrePoblacion();
    }
   
    /**
     * Compara una población lógica
     * @param poblacion Object LogicPoblacion
     * @return Devuelve verdad si son iguales, sino falso
     */
    @Override
    public boolean equals(Object poblacion) {
        if(poblacion != null) {
            if(poblacion instanceof LogicPoblacion) {
                LogicPoblacion p = (LogicPoblacion) poblacion;
               
                if(p.getFecha().equals(getFecha()) &&
                        p.getEscalaTemperatura().equals(getEscalaTemperatura())
                        && p.getLuminosidad().equals(getLuminosidad()) &&
                        p.getModeloGraficaComida().equals(
                        getModeloGraficaComida()) && p.getModeloPoblacionTabla()
                        .equals(getModeloPoblacionTabla())
                        && p.getNombrePoblacion().equals(getNombrePoblacion())
                        && p.getTamanioPoblacion() == getTamanioPoblacion() &&
                        p.getTemperatura() == getTemperatura()
                   
                        && sincronizarComida == p.isSincronizarComida() &&
                        p.getExperimentoPadre().getFichExperimento().equals(
                        experimentoPadre.getFichExperimento()) &&
                        p.getExperimentoPadre().getNombreExperimento().equals(
                        experimentoPadre.getNombreExperimento())) {
                    return true;
                }
            }
        }
       
        return false;
    }
   
    /**
     * Devuelve el hashCode de la población lógica
     * @return int hashCode
     */
    @Override
    public int hashCode() {
        int result = HashCodeUtil.SEED;
       
        result = HashCodeUtil.hash(result, super.hashCode());
        result = HashCodeUtil.hash(result, sincronizarComida);
        result = HashCodeUtil.hash(result, experimentoPadre);
       
        return result;
    }
   
    /**
     * Permite suscribirse a los cambios en el modelo lógico de la población
     * @param listener LogicPoblacionListener
     */
    public void addLogicPoblacionListener(LogicPoblacionListener listener) {
        if(listener != null) {
            listeners.add(listener);
        }
    }
   
    /**
     * Permite desuscribirse a los cambios en el modelo lógico de la población
     * @param listener LogicPoblacionListener
     */
    public void removeLogicPoblacionListener(LogicPoblacionListener listener) {
        if(listener != null) {
            listeners.remove(listener);
        }
    }
   
    /**
     * Devuelve el experimento que contiene la población lógica
     * @return LogicExperimento
     */
    public LogicExperimento getExperimentoPadre() {
        return experimentoPadre;
    }
   
    /**
     * Devuelve si la población lógica ha sido modificada
     * @return Devuelve verdad si la población lógica ha sido modificada, sino falso
     */
    public boolean isModified() {
        return modified;
    }
   
    /**
     * Establece el estado de la población lógica
     * @param modified Verdad si está modificada, falso sino
     */
    public void setModified(boolean modified) {
        this.modified = modified;
    }
   
    /**
     * Devuelve si se está sincronizando la comida con la tabla
     * @return Verdad si lo está haciendo, sino falso
     */
    public boolean isSincronizarComida() {
        return sincronizarComida;
    }

    /**
     * Establece si la comida debe sincronziarse con la tabla
     * @param sincronizarComida Verdad si lo debe hacer, sino falso
     */
    public void setSincronizarComida(boolean sincronizarComida) {
        this.sincronizarComida = sincronizarComida;
        firePoblacionChange();
    }

    /**
     * Notifica a todos los que escuchan el modelo lógico de la población
     * que ha sido modificada
     */
    private void firePoblacionChange() {
        modified = true;
        for(LogicPoblacionListener l : listeners) {
            l.poblacionChange(new LogicPoblacionEvent(this));
        }
    }
}
TOP

Related Classes of practica1.logic.LogicPoblacion

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.