package org.test4j.tools.datagen;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import org.test4j.json.ITypeConverter;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class AbstractDataMap extends LinkedHashMap<String, Object> {
private static final long serialVersionUID = 1L;
/**
* put(String,Object[])的快捷写法
*
* @param key
* @param value1
* @param value2
* @param more
*/
public void put(String key, Object value1, Object value2, Object... more) {
List<Object> list = new ArrayList<Object>();
list.add(value1);
list.add(value2);
for (Object item : more) {
list.add(item);
}
super.put(key, list.toArray(new Object[0]));
}
public AbstractDataMap convert(String key, ITypeConverter converter) {
Object value = this.get(key);
if (value instanceof String && converter.accept(value)) {
value = converter.convert((String) value);
this.put(key, value);
} else if (value instanceof List) {
value = this.conveterList((List) value, converter);
this.put(key, value);
}
return this;
}
private List conveterList(List list, ITypeConverter converter) {
List value = new ArrayList();
for (Object item : list) {
if (item instanceof String) {
Object o = converter.convert((String) item);
value.add(o);
}
}
return value;
}
/**
* 批量转换DataMap列表
*
* @param list
* @param key
* @param converter
*/
public static void convert(Collection list, String key, ITypeConverter converter) {
for (Object dm : list) {
if (dm instanceof AbstractDataMap) {
((AbstractDataMap) dm).convert(key, converter);
}
}
}
public static void convert(Object[] array, String key, ITypeConverter converter) {
for (Object dm : array) {
if (dm instanceof AbstractDataMap) {
((AbstractDataMap) dm).convert(key, converter);
}
}
}
}