package com.isencia.passerelle.workbench.util;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class MapUtils {
/**
* Create a map from the two list of strings.
* @param list1
* @param list2
* @return Map
*/
public static Map<String, String> createMap(String[] list1, String[] list2) {
final Map<String,String> ret = new HashMap<String, String>(list1.length);
for (int i = 0; i < list1.length; i++) {
ret.put(list1[i].trim(), list2[i].trim());
}
return ret;
}
/**
* Like createMap(...) but uses a LinkedHashMap to maintian the items in the
* same order as they are in list1.
* @param list1
* @param list2
* @return ordered map.
*/
public static Map<String, String> createLinkedMap(String[] list1, String[] list2) {
final Map<String,String> ret = new LinkedHashMap<String,String>();
for (int i = 0; i < list1.length; i++) {
ret.put(list1[i].trim(), list2[i].trim());
}
return ret;
}
/**
* Adds the map add into data but generates unique keys
*
* @param data
* @param add
*/
public static <V> void putAllUniqueStrings(final Map<String,V> data, final Map<String,V> add) {
for (String key : add.keySet()) {
V value = add.get(key);
if (data.containsKey(key)) {
key = getUniqueKey(data.keySet(), key);
}
data.put(key, value);
}
}
/**
*
* @param data
* @param key
* @param value
*/
public static <V> void putUnique(Map<String, V> data, String key, V value) {
if (data.containsKey(key)) {
key = getUniqueKey(data.keySet(), key);
}
data.put(key, value);
}
/**
*
* @param keySet
* @param key
* @return unique string
*/
private static String getUniqueKey(Set<String> keySet, String key) {
int num = 1;
while(keySet.contains(key+num)) num++;
return key+num;
}
/**
*
* @param value
* @return v
*/
public static String getString(final Map<String,String> value) {
if (value == null) return null;
if (value.isEmpty()) return null;
final String line = value.toString();
return line.substring(1,line.length()-1); // key=value, key1=value1, ...
}
/**
*
* @param value
* @return v
*/
public static Map<String,String> getMap(final String value) {
if (value == null) return null;
if ("".equals(value.trim())) return null;
final List<String> lines = ListUtils.getList(value);
if (lines==null) return null;
if (lines.isEmpty()) return Collections.emptyMap();
final Map<String,String> ret = new HashMap<String, String>(lines.size());
for (String line : lines) {
final String[] kv = line.split("=");
if (kv==null||kv.length!=2) continue;
ret.put(kv[0].trim(), kv[1].trim());
}
return ret;
}
public static void main(String[] args) {
String test = "key=value, key1=value1, key2=value2";
Map<String,String> v = getMap(test);
System.out.println(v);
test = " ";
v = getMap(test);
System.out.println(v);
test = null;
v = getMap(test);
System.out.println(v);
test = ",";
v = getMap(test);
System.out.println(v);
test = "=";
v = getMap(test);
System.out.println(v);
test = ",=,";
v = getMap(test);
System.out.println(v);
test = ",,key=value";
v = getMap(test);
System.out.println(v);
}
}