package io.cattle.platform.object.postinit; import io.cattle.platform.util.type.Priority; import io.github.ibuildthecloud.gdapi.factory.SchemaFactory; import io.github.ibuildthecloud.gdapi.model.Schema; import java.lang.reflect.InvocationTargetException; import java.util.Date; import java.util.Map; import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.beanutils.BeanUtils; public class SpecialFieldsPostInstantiationHandler implements ObjectPostInstantiationHandler, Priority { public static final String ZONE_ID = "zoneId"; public static final String CREATED = "created"; public static final String STATE = "state"; public static final String KIND = "kind"; SchemaFactory schemaFactory; @Override public <T> T postProcess(T obj, Class<T> clz, Map<String, Object> properties) { set(obj, CREATED, new Date()); set(obj, STATE, "requested"); Schema schema = schemaFactory.getSchema(clz); if (schema != null) { set(obj, KIND, schema.getId()); } // TODO Bad! set(obj, ZONE_ID, 1L); return obj; } protected void set(Object obj, String property, Object value) { try { if (BeanUtils.getProperty(obj, property) == null) { BeanUtils.setProperty(obj, property, value); } } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } } @Override public int getPriority() { return Priority.PRE; } public SchemaFactory getSchemaFactory() { return schemaFactory; } @Inject @Named("CoreSchemaFactory") public void setSchemaFactory(SchemaFactory schemaFactory) { this.schemaFactory = schemaFactory; } }