blob: c14279234b8c4faa5ed598a8e1eb1c35ad842354 [file] [log] [blame]
package org.eclipse.basyx.vab.support;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* Removes type information similar to what a communication over VAB would do
* @author rajashek
*
*/
public class TypeDestroyer {
/**
* Removes type information of all objects within the map, i.e. every subclass
* of HashMap is reduced to HashMap
*
* @param map
* @return
*/
@SuppressWarnings("unchecked")
public static Map<String, Object> destroyType(Map<String, Object> map) {
return (Map<String, Object>) handle(map);
}
@SuppressWarnings("unchecked")
public static Object handle(Object o) {
if(o instanceof Map) {
return handleMap((Map<String, Object>) o);
} else if (o instanceof Set) {
return handleSet((Set<Object>) o);
} else if (o instanceof List) {
return handleList((List<Object>) o);
} else {
return o;
}
}
private static Set<Object> handleSet(Set<Object> set) {
Set<Object> ret = new HashSet<>();
for (Object o : set) {
ret.add(handle(o));
}
return ret;
}
private static List<Object> handleList(List<Object> list) {
List<Object> ret = new ArrayList<>();
for (Object o : list) {
ret.add(handle(o));
}
return ret;
}
private static Map<String, Object> handleMap(Map<String, Object> map) {
Map<String, Object> ret = new HashMap<>();
for (Entry<String, Object> entry : map.entrySet()) {
ret.put(entry.getKey(), handle(entry.getValue()));
}
return ret;
}
}