package org.nutz.mvc.upload.injector;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.nutz.lang.ContinueLoop;
import org.nutz.lang.Each;
import org.nutz.lang.ExitLoop;
import org.nutz.lang.Lang;
import org.nutz.lang.LoopException;
import org.nutz.mvc.adaptor.ParamInjector;
import org.nutz.mvc.upload.TempFile;
public class TempFileArrayInjector implements ParamInjector {
public static final TempFile[] EMTRY = new TempFile[0];
protected String name;
public TempFileArrayInjector(String name) {
this.name = name;
}
@SuppressWarnings("unchecked")
public Object get(ServletContext sc, HttpServletRequest req, HttpServletResponse resp, Object refer) {
if (refer == null)
return null;
Object obj = ((Map<String, Object>) refer).get(name);
if (obj == null || Lang.length(obj) == 0)
return EMTRY;
if (Lang.length(obj) == 1) {
Object tmp = Lang.first(obj);
if (tmp == null || !(tmp instanceof TempFile))
return EMTRY;
return new TempFile[]{(TempFile)tmp};
}
final List<TempFile> list = new ArrayList<TempFile>();
Lang.each(obj, new Each<Object>() {
public void invoke(int index, Object ele, int length) throws ExitLoop, ContinueLoop, LoopException {
if (ele instanceof TempFile) {
list.add((TempFile)ele);
}
}
});
if (list.isEmpty())
return EMTRY;
return list.toArray(new TempFile[list.size()]);
}
}