package li.mvc.adapter;
import java.util.List;
import javax.servlet.ServletRequest;
import li.dao.Page;
import li.model.Action;
import li.mvc.Context;
import li.util.Convert;
import li.util.Verify;
/**
* 文件上传适配器
*
* @author 明伟
*/
public class UploadAdapter extends AbstractAdapter {
private Uploader uploader = new Uploader();
private List<FileMeta> fileMetas;
/***
* 要解析fileMeta和基本类型参数,TODO 要不要做数据对象参数
*/
public Boolean match(Class<?> type) {
if (FileMeta.class.isAssignableFrom(type)) {
return true;
} else if (type.isArray() && FileMeta.class.isAssignableFrom(type.getComponentType())) {
return true;
} else if (Verify.basicType(type) && !type.isArray()) {
return true;
} else if (Verify.basicType(type) && type.isArray()) {
return true;
} else if (Page.class.isAssignableFrom(type)) {
return true;
}
return false;
}
/**
* adapt
*/
public Object adapt(ServletRequest request, Integer argIndex) throws Exception {
Action action = Context.getAction();
Class<?> type = action.argTypes[argIndex];
String key = (null == action.argAnnotations[argIndex]) ? action.argNames[argIndex] : action.argAnnotations[argIndex].value();// ParameterKey
if (FileMeta.class.isAssignableFrom(type)) {
if (null == fileMetas) {
fileMetas = uploader.upload(request, Context.getRootPath() + "\\temp\\");
}
return fileMetas.isEmpty() ? null : fileMetas.get(0);
} else if (type.isArray() && FileMeta.class.isAssignableFrom(type.getComponentType())) {
if (null == fileMetas) {
fileMetas = uploader.upload(request, Context.getRootPath() + "\\temp\\");
}
return fileMetas.toArray(new FileMeta[] {});
} else if (Verify.basicType(type) && !type.isArray()) {
return Convert.toType(type, Context.getRequest().getParameter(key));
} else if (Verify.basicType(type) && type.isArray()) {
return Context.getArray(type.getComponentType(), key);
} else if (Page.class.isAssignableFrom(type)) {
return Context.getPage(key);
}
return null;
}
}