import javax.swing.event.EventListenerList;


public class GraduationModel {
	
	private EventListenerList listeners;
	
	private int value=0;
	
	
	public GraduationModel() {
		super();
		this.listeners = new EventListenerList();
	}

	public GraduationModel(int value) {
		super();
		this.listeners = new EventListenerList();
		this.value = value;
	}
	
	/**Renvoie la valeur du modèle
	 * 
	 * @return la valeur du modèle
	 */
	public int getValue() {
		return value;
	}

	/**change la valeur du modèle
	 * 
	 * @param value
	 */
	public void setValue(int value) {
		int oldValue = this.value;
		if(value>100) {
			this.value = 100;
		} else if(value<0) {
			this.value = 0;
		} else {
			this.value = value;
		}
		
		
		fireValueChanged(oldValue,this.value);
	}
	
	/**Propage les modifications aux listeners enregistr&eacute;
	 * 
	 * @param oldValue l'ancienne valeur
	 * @param newValue la nouvelle valeur
	 */
	protected void fireValueChanged(int oldValue, int newValue) {
	    GraduationEvent event = null;
	    
	    for(GraduationListener listener : getValueListeners()) {
	        if(event == null)
	            event = new GraduationEvent(oldValue, newValue);
	        listener.valueChanged(event);
	    }
	    
	}

	/**Renvoie les listeners 
	 * 
	 * @return
	 */
	public GraduationListener[] getValueListeners() {
		// TODO Auto-generated method stub
		return listeners.getListeners(GraduationListener.class);
	}
	
	/**Ajoute un listener au model
	 * 
	 * @param l Le listener &agrave; ajouter
	 */
	public void addGraduateListener(GraduationListener l) {
		listeners.add(GraduationListener.class, l);
	}
	
	/**Renvoie la valeur en float entre 0 et 1 du modèle
	 * 
	 * @return
	 */
	public float getFloatValue() {
		return (float)(value/100f);
	}
}
