/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.k_int.aggregator.dpp.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Utility methods to handle encoding of values to make them URL safe
 * for use when editing records
 * 
 * @author rpb rich@k-int.com
 * @version 1.0 29.11.10
 */
public class EncodingUtils {

    private static Log log = LogFactory.getLog(EncodingUtils.class);

    public static String encode(String toEncode) {

        String returnValue = toEncode;
        try {
            MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
            digest.update(toEncode.getBytes());
            byte[] hash = digest.digest();
            returnValue = new String(Hex.encodeHex(hash));

        } catch (NoSuchAlgorithmException nsae) {
            log.error("NoSuchAlgorithmException when trying to MD5 a string!!");
        }

        return returnValue;
    }

    public static Map<String, String> encodeSet(Set<String> toEncode) {
        Map<String, String> returnValue = new HashMap<String, String>();

        if (toEncode != null) {
            Iterator<String> listIter = toEncode.iterator();
            while (listIter.hasNext()) {
                String nextVal = listIter.next();
                if (nextVal != null && !"".equals(nextVal.trim())) {
                    returnValue.put(nextVal.trim(), encode(nextVal.trim()));
                }
            }
        }

        return returnValue;
    }

    public static Map<String, String> encodeMap(Map<String, String> toEncode) {
        Map<String, String> returnValue = new HashMap<String, String>();

        if (toEncode != null) {
            Set<String> keyset = toEncode.keySet();
            Iterator<String> keysetIter = keyset.iterator();
            while (keysetIter.hasNext()) {
                String key = keysetIter.next();
                if (key != null && !"".equals(key.trim())) {
                    returnValue.put(key, encode(key.trim()));
                }
            }
        }

        return returnValue;
    }

    public static Map<String, String> encodeList(List<String> toEncode) {
        Map<String, String> returnValue = new HashMap<String, String>();

        if (toEncode != null) {
            Iterator<String> listIter = toEncode.iterator();
            while (listIter.hasNext()) {
                String nextVal = listIter.next();
                if (nextVal != null && !"".equals(nextVal.trim())) {
                    returnValue.put(nextVal.trim(), encode(nextVal.trim()));
                }
            }
        }

        return returnValue;
    }

}
