package client.model.problem;

/** <u><b>Explication générale de la classe :</b></u>
 * <P>Cette classe permet de créer un résultat.
 *
 * @author Dream Team - ING2
 */
public class Resultat {
	
	private static int idGenerator = -1;

    //Déclaration des variables
	private int idResultat;
    private int idProblem;
    private int idMethod;
    private String nomResultat;
    private String nomProbleme;
    private String nomMethode;
    private String date;
    private String pointDeDepart;
    private String pointValOptim;
    private String complexite;
    private double valeurResultat;
    private double epsilon;
    private double pas;
    private double maxIteration;
    private double errAbsolue;

    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer un objet de type Résultat.
     */
    public Resultat(){}
    
    
    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer un objet de type Résultat.
	 * @param nomResultat nom du résultat
     */
    public Resultat(String nomResultat) {
    	this.idResultat = ++idGenerator;
    	this.nomResultat = nomResultat;
    }
    
    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'id du résultat
     * 
     * @return id du résultat
     * 
     */
    public int getIdResultat() {
		return idResultat;
	}

    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'id du probleme
     * 
     * @return id du benchmark
     * 
     */
    public int getIdProblem() {
        return idProblem;
    }

    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur de l'id du probleme
     * 
     * @param idProblem nouvel id du probleme
     * 
     */
    public void setIdProblem(int idProblem) {
        this.idProblem = idProblem;
    }

    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur de l'id de la méthode
     * 
     * @param idMethod nouvel id de la méthode
     * 
     */
    public void setIdMethod(int idMethod) {
        this.idMethod = idMethod;
    }

    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'id de la méthode
     * 
     * @return id de la méthode
     * 
     */
    public int getIdMethod() {
        return idMethod;

    }
    
    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur de l'id du résultat
     * 
     * @param idResultat nouvel id du résultat
     * 
     */
	public void setIdResultat(int idResultat) {
		this.idResultat = idResultat;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le nom du problème
     * 
     * @return id du benchmark
     * 
     */
	public String getNomProbleme() {
		return nomProbleme;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur du nom du probleme
     * 
     * @param nomProbleme nouveau nom du probleme
     * 
     */
	public void setNomProbleme(String nomProbleme) {
		this.nomProbleme = nomProbleme;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le nom de la méthode
     * 
     * @return le nom de la méthode
     * 
     */
	public String getNomMethode() {
		return nomMethode;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur du nom de la méthode
     * 
     * @param nomMethode nouveau nom de la méthode
     * 
     */
	public void setNomMethode(String nomMethode) {
		this.nomMethode = nomMethode;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la date
     * 
     * @return la date
     * 
     */
	public String getDate() {
		return date;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle date
     * 
     * @param date nouvelle date
     * 
     */
	public void setDate(String date) {
		this.date = date;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le point de départ
     * 
     * @return le point de départ
     * 
     */
	public String getPointDeDepart() {
		return pointDeDepart;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner le nouveau point de départ
     * 
     * @param pointDeDepart nouveau point de départ
     * 
     */
	public void setPointDeDepart(String pointDeDepart) {
		this.pointDeDepart = pointDeDepart;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la valeur du résultat
     * 
     * @return la valeur du résultat
     * 
     */
	public double getValeurResultat() {
		return valeurResultat;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur du résultat
     * 
     * @param valeurResultat nouvelle valeur du résultat
     * 
     */
	public void setValeurResultat(double valeurResultat) {
		this.valeurResultat = valeurResultat;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la valeur de epsilon
     * 
     * @return valeur de epsilon
     * 
     */
	public double getEpsilon() {
		return epsilon;
	}
	
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur d'epsilon
     * 
     * @param epsilon nouvelle valeur d'epsilon
     * 
     */
	public void setEpsilon(double epsilon) {
		this.epsilon = epsilon;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le pas
     * 
     * @return valeur du pas
     * 
     */
	public double getPas() {
		return pas;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur du pas
     * 
     * @param pas nouvelle valeur du pas
     * 
     */
	public void setPas(double pas) {
		this.pas = pas;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le point de valeur d'optimisation
     * 
     * @return valeur d'optimisation
     * 
     */
	public String getPointValOptim() {
		return pointValOptim;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner le nouveau point de valeur d'optimisation
     * 
     * @param pointValOptim  nouveau point de valeur d'optimisation
     * 
     */
	public void setPointValOptim(String pointValOptim) {
		this.pointValOptim = pointValOptim;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la complexité
     * 
     * @return valeur de la complexité
     * 
     */
	public String getComplexite() {
		return complexite;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur de la complexité
     * 
     * @param complexite nouvelle valeur de la complexité
     * 
     */
	public void setComplexite(String complexite) {
		this.complexite = complexite;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le maximum d'itérations
     * 
     * @return le maximum d'itérations
     * 
     */
	public double getMaxIteration() {
		return maxIteration;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur du maximum d'itérations
     * 
     * @param maxIteration nouvelle valeur du maximum d'itérations
     * 
     */
	public void setMaxIteration(double maxIteration) {
		this.maxIteration = maxIteration;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'erreur absolue
     * 
     * @return l'erreur absolue
     * 
     */
	public double getErrAbsolue() {
		return errAbsolue;
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner la nouvelle valeur de l'erreur absolue
     * 
     * @param errAbsolue nouvelle valeur dde l'erreur absolue
     * 
     */
	public void setErrAbsolue(double errAbsolue) {
		this.errAbsolue = errAbsolue;
	}
	
	/**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne le nom du résultat.
     * 
     * @return nomResultat nom du résultat.
     */
    public String getNomResultat() {
        return nomResultat;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un nom à un résultat.
     * 
     * @param nomResultat resultat à assigner
     */
    public void setNomResultat(String nomResultat) {
        this.nomResultat = nomResultat;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer toutes les valeurs des attributs de la classe
     * 
     * @return String contenant toutes les informations
     */
    public String toString(){
		return "idResultat : "+idResultat+"; nomResultat : "+nomResultat+"; nomProbleme : "
		+nomProbleme+"; nomMethode : "+nomMethode+"; date : "+date+"; pointDepart : "+
		pointDeDepart+"; valeurResultat : "+valeurResultat+"; epsilon : "+epsilon+";pas : "
		+pas+"; pointValOptim : "+pointValOptim+"; complexite : "+complexite+"; maxIteration : "
		+maxIteration+";errAbsolue : "+errAbsolue+"\n";
    }

}
