package play.utils.dyn; import static play.libs.Json.toJson; import java.util.Map; import java.util.Set; import play.Logger; import play.Logger.ALogger; import play.mvc.Result; import play.utils.crud.APIController; import play.utils.meta.FieldMetadata; import play.utils.meta.ModelMetadata; import com.google.common.collect.ImmutableMap; @SuppressWarnings({ "rawtypes", "unchecked" }) @Dynamic public class DynamicRestController extends APIController { private static ALogger log = Logger.of(DynamicRestController.class); private ModelMetadata model; public DynamicRestController(ModelMetadata model) { super(new DynamicDAO(model), model.getKeyField().getType(), model.getType()); this.model = model; } @Override public Result create() { Result check = checkRequired("name"); if (check != null) { if (log.isDebugEnabled()) log.debug("check : " + check); return check; } Object key = null; try { Object m = modelClass.newInstance(); Map<String, FieldMetadata> fields = model.getFields(); Set<String> fieldNames = fields.keySet(); for (String fieldName : fieldNames) { String valueStr = jsonText(fieldName); model.setField(m, fieldName, valueStr); } key = dao.create(m); if (log.isDebugEnabled()) log.debug("key : " + key); } catch (Exception e) { log.error("exception occured", e); } if (key != null) return created(toJson(ImmutableMap.of("status", "OK", "key", key))); else return internalServerError(); } }