package com.sequenceiq.cloudbreak.shell.transformer; import java.lang.reflect.Field; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class ResponseTransformer { public Map<String, String> transformToMap(Collection<?> responses, String keyName, String valueName) { Map<String, String> transformed = new HashMap<>(); for (Object object : responses) { String key = ""; String value = ""; Class<?> current = object.getClass(); while (current.getSuperclass() != null) { for (Field field : current.getDeclaredFields()) { field.setAccessible(true); try { Object o = field.get(object); if (o != null) { if (field.getName().equals(keyName)) { key = o.toString(); } else if (field.getName().equals(valueName)) { value = o.toString(); } } } catch (IllegalAccessException e) { value = "undefined"; } } current = current.getSuperclass(); } transformed.put(key, value); } return transformed; } public Map<String, String> transformObjectToStringMap(Object o, String... exclude) { Map<String, String> result = new HashMap<>(); Class<?> current = o.getClass(); while (current.getSuperclass() != null) { for (Field field : current.getDeclaredFields()) { if (!Arrays.asList(exclude).contains(field.getName())) { if (field.getType().isAssignableFrom(Map.class)) { field.setAccessible(true); try { Map<?, ?> o1 = (Map<?, ?>) field.get(o); for (Map.Entry<?, ?> objectObjectEntry : o1.entrySet()) { result.put(field.getName() + "." + objectObjectEntry.getKey(), objectObjectEntry.getValue() == null ? "" : objectObjectEntry.getValue().toString()); } } catch (IllegalAccessException e) { result.put(field.getName(), "undefined"); } } else if (!field.getType().isLocalClass()) { field.setAccessible(true); try { result.put(field.getName(), field.get(o) == null ? null : field.get(o).toString()); } catch (IllegalAccessException e) { result.put(field.getName(), "undefined"); } } else { for (Field field1 : field.getType().getDeclaredFields()) { field1.setAccessible(true); try { result.put(field1.getName(), field1.get(o) == null ? null : field1.get(o).toString()); } catch (IllegalAccessException e) { result.put(field.getName() + "." + field1.getName(), "undefined"); } } } } } current = current.getSuperclass(); } return result; } }