package io.cattle.platform.object.util; import io.cattle.platform.object.meta.ObjectMetaDataManager; import io.cattle.platform.util.type.CollectionUtils; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; public class DataUtils { public static final String DATA = "data"; public static final String OPTIONS = "options"; public static final String FIELDS = "fields"; public static String getState(Object obj) { try { return BeanUtils.getProperty(obj, ObjectMetaDataManager.STATE_FIELD); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } return null; } public static Map<String, Object> getFields(Object obj) { Map<String, Object> data = DataAccessor.getData(obj, true); Map<String, Object> fields = CollectionUtils.toMap(data.get(FIELDS)); return Collections.unmodifiableMap(fields); } @SuppressWarnings("unchecked") public static Map<String, Object> getWritableFields(Object obj) { Map<String, Object> data = DataAccessor.getData(obj, false); Map<String, Object> fields = (Map<String, Object>) data.get(FIELDS); if (fields == null) { fields = new HashMap<String, Object>(); data.put(FIELDS, fields); } return fields; } protected static void setData(Object obj, Map<String, Object> data) { ObjectUtils.setPropertyIgnoreErrors(obj, DATA, data); } @SuppressWarnings("unchecked") public static <T> List<T> getFieldList(Map<String, Object> data, String name, Class<T> type) { Map<String, Object> fields = CollectionUtils.castMap(data.get(FIELDS)); Object value = fields.get(name); if (value == null) { return null; } if (value instanceof List) { List<?> list = (List<?>) value; Object firstValue = list.size() > 0 ? list.get(0) : null; if (list.size() > 0 && firstValue != null && type.isAssignableFrom(firstValue.getClass())) { return (List<T>) list; } List<T> result = new ArrayList<T>(list.size()); for (Object obj : list) { result.add((T) ConvertUtils.convert(obj, type)); } return result; } else { throw new IllegalArgumentException("[" + value + "] is not a list"); } } // @SuppressWarnings("unchecked") // public static <T> T getField(Map<String,Object> data, String name, // Class<T> type) { // Map<String,Object> fields = CollectionUtils.castMap(data.get(FIELDS)); // Object value = fields.get(name); // // if ( value == null ) { // return null; // } // // return (T)ConvertUtils.convert(value, type); // } @SuppressWarnings("unchecked") public static <T> T getFieldFromRequest(ApiRequest request, String name, Class<T> type) { if (request == null) { return null; } Map<String, Object> fields = CollectionUtils.castMap(request.getRequestObject()); Object value = fields.get(name); if (value == null) { return null; } return (T) ConvertUtils.convert(value, type); } }