package com.fp.general.record;

import java.lang.reflect.Field;

/**
 * Clase para el manejo de los campos del registro
 * @author Jorge Vaca.
 * @version 2.1
 */
public class FieldData {
    /*
     * Numero de registro del cual se obtiene el valor
     */
    private Integer fieldNumber;
    /*
     * Variable que contiene el valor del campo
     */
    private Object value;
    /*
     * Variable que contiene si el valor del campo es correcto
     */
    private boolean valid = true;
    /*
     * Variable que contiene el mensaje de error
     */
    private String errorMessage;

    /**
     * Variable que contiene el nombre del atributo de la clase a convertir
     */
    private String attribute;

    /**
     * Metodo que devuelve el numero de campo del registro
     * @return
     */
    public Integer getFieldNumber() {
        return fieldNumber;
    }

    /**
     * Metodo que asigna el numero de campo del registro
     * @param fieldNumber
     */
    public void setFieldNumber(Integer fieldNumber) {
        this.fieldNumber = fieldNumber;
    }

    /**
     * Metodo que indica si el valor del campo es correcto
     * @return
     */
    public boolean isValid() {
        return valid;
    }

    /**
     * Metodo que asigna si un campo es correcto o no
     * @param valid
     */
    public void setValid(boolean valid) {
        this.valid = valid;
    }

    /**
     * Metodo que devuelve el valor del campo
     * @return
     */
    public Object getValue() {
        return value;
    }

    /**
     * Metodo que asigna el valor del campo
     * @param value
     */
    public void setValue(Object value) {
        this.value = value;
    }

    /**
     * Mensaje de error
     * @return
     */
    public String getErrorMessage() {
        return errorMessage;
    }

    /**
     * Metodo que asigna el mensaje de error
     * @param errorMessage
     */
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }


    /**
     * Metodo que devuelve el nombre del atributo de la clase que se va a convertir
     * @return
     */
    public String getAttribute() {
        return attribute;
    }

    /**
     * Metodo que asigna el nombre del atributo de la clase a la cual se va a convertir
     * @param attribute
     */
    public void setAttribute(String attribute) {
        this.attribute = attribute;
    }
    
	/** Implementación toString */
	public String toString() {
		Field[] fs = this.getClass().getDeclaredFields();
		String data = "";
		for (Field f : fs) {
			try {
				String name = f.getName();
				if (f.getType().getName().compareTo("java.util.Set") == 0)
					continue;
				if (name.compareTo("hashValue") == 0 || name.compareTo("serialVersionUID") == 0)
					continue;
				data += name + "=" + f.get(this) + ";";
			} catch (Exception e) {
				continue;
			}
		}
		if (data.compareTo("") == 0) {
			data = super.toString();
		}
		return data;
	}


}
