package play.utils.meta;
import java.lang.reflect.Field;
import java.util.Map;
import play.utils.meta.convert.Converter;
public class ModelMetadata {
Class<?> type;
FieldMetadata keyField;
Map<String, FieldMetadata> fields;
public ModelMetadata(Class<?> type, Map<String, FieldMetadata> allFields, FieldMetadata keyField) {
this.type = type;
this.fields = allFields;
this.keyField = keyField;
}
public Class<?> getType() {
return type;
}
public String getName() {
return type.getSimpleName();
}
public FieldMetadata getKeyField() {
return keyField;
}
public Map<String, FieldMetadata> getFields() {
return fields;
}
public Converter<?> getKeyConverter() {
return keyField.getConverter();
}
public <M> void setField(M modelObject, String fieldName, String valueStr) throws IllegalArgumentException, IllegalAccessException {
FieldMetadata fieldMeta = fields.get(fieldName);
Converter<?> converter = fieldMeta.getConverter();
Field field = fieldMeta.getField();
Object value = converter.convert(valueStr);
field.set(modelObject, value);
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("ModelMetadata [").append(type).append("]");
return builder.toString();
}
}