/*
 * 
 */
package com.fp.persistence.commondb.helper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fp.persistence.commondb.exception.CommondbException;

/**
 * Class MapUtil encargada de maneja los resultados de un Query.
 * 
 * @author gfiallos
 */
public final class MapUtil {

    /** El valor de instance. */
    private static MapUtil instance = null;

    /**
     * Crea una nueva instancia de map util.
     */
    private MapUtil() {
    }

    /**
     * Obtiene la única instancia de MapUtil.
     * 
     * @return única instancia de MapUtil
     */
    public static MapUtil getInstance() {
        synchronized (MapUtil.class) {
            if (MapUtil.instance == null) {
                MapUtil.instance = new MapUtil();
            }
            return MapUtil.instance;
        }
    }

    /**
     * Convierte los datos de una lista de objectos a una lista de Maps
     * 
     * @param pData data en Arreglo
     * @param pNames Nombre de los key por campo
     * @return list data convertida
     * @throws CommondbException la commondb exception
     */
    public List<Map<String, Object>> arrayToMapList(List<Object[]> pData, String... pNames) throws CommondbException {
        List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
        for (Object[] obj : pData) {
            data.add(this.arrayToMap(obj, pNames));
        }
        return data;
    }

    /**
     * TRansforma un arreglo de objetos a Map
     * 
     * @param pData Data en arraglo
     * @param pNames Nombre de los Keys
     * @return map Resultado
     * @throws CommondbException la commondb exception
     */
    public Map<String, Object> arrayToMap(Object[] pData, String... pNames) throws CommondbException {
        Map<String, Object> data = new HashMap<String, Object>();
        if ((pData == null) || (pNames == null) || (pData.length < pNames.length)) {
            throw new CommondbException("COMMONDB-00021", "NUMERO DE ETIQUETAS ERRADO");
        }
        for (int i = 0; i < pData.length; i++) {
            if (i >= pNames.length) {
                break;
            }
            data.put(pNames[i], pData[i]);

        }
        return data;
    }
}
