package net.bounceme.chronos.utils.test.prototype;

import java.util.HashMap;
import java.util.Map;

/**
 * The Class FactoriaPrototipo.
 */
public class FactoriaPrototipo {
    
    /** The mapa objetos. */
    private Map<String, Producto> mapaObjetos;
    
    /** The nombre por defecto. */
    private String nombrePorDefecto;

    /**
     * Instantiates a new factoria prototipo.
     */
    public FactoriaPrototipo() {
        mapaObjetos = new HashMap<String, Producto>();
        // Se incluyen en el mapa todos los productos prototipo
        mapaObjetos.put("producto 1", new ProductoConcreto(1));
    }

    /**
     * Creates the.
     *
     * @return the object
     */
    public Object create() {
        return create(nombrePorDefecto);
    }

    /**
     * Crea un nuevo objeto a través del prototipo
     *
     * @param nombre the nombre
     * @return the object
     */
    public Object create(String nombre) {
        nombrePorDefecto = nombre;
        
        /**
         * Se obtiene el objeto prototipo del mapa,
         * pero en su lugar con clone se devuelve
         * una nueva instancia idéntica
         */
        Producto objeto = (Producto)mapaObjetos.get(nombre);
        return objeto != null ? objeto.clone() : null;
    }
    
    /**
     * Gets the prototipo reference
     *
     * @param nombre the nombre
     * @return the prototipo
     */
    public Object getPrototipo(String nombre) {
    	return mapaObjetos.get(nombre);
    }
}
