package fast.rocket.builder; import java.util.Map; import fast.rocket.Rocket; import fast.rocket.cache.CachePolicy; import fast.rocket.error.RocketError; import fast.rocket.request.FileRequest; import fast.rocket.request.Request.Method; import fast.rocket.response.JsonCallback; import fast.rocket.response.Response.ErrorListener; import fast.rocket.response.Response.Listener; public class RocketFileBuilder implements FileMultipartBuilder { @SuppressWarnings("rawtypes") private JsonCallback callback; /** The class type to be parsed. */ private Class<?> clazz; /** The request tag. */ private Object tag; /** The rocket instance. */ private Rocket rocket; private Map<String, String> params; private String contentType = "text/plain;"; /** The cache policy. */ private CachePolicy cachePolicy; private String uri; private String fileName; private String filePath; public RocketFileBuilder(Rocket rocket, Class<?> clazz, String uri) { this.rocket = rocket; this.clazz = clazz; this.uri = uri; } @Override public FileMultipartBuilder invoke(JsonCallback<?> callback) { this.callback = callback; addRequest(Method.POST, uri, clazz); return this; } private <T> void addRequest(int method, String uri, Class<T> clazz) { if (clazz == null || callback == null) { throw new IllegalArgumentException("Initialization params is null"); } FileRequest<T> request = new FileRequest<T>(method, uri, new Listener<T>() { @SuppressWarnings("unchecked") @Override public void onResponse(T response) { if (callback != null) { callback.onCompleted(null, response); } } }, new ErrorListener() { @SuppressWarnings("unchecked") @Override public void onErrorResponse(RocketError error) { if (callback != null) { callback.onCompleted(error, null); } } }, clazz); if(params != null) { for(String name : params.keySet()) { request.addMultipartParam(name, contentType, params.get(name)); } } request.addFile(fileName, filePath); if (tag != null) request.setTag(tag); request.setCachePolicy(cachePolicy); rocket.getRequestQueue().add(request); } @Override public FileMultipartBuilder requestTag(Object tag) { this.tag = tag; return this; } @Override public FileMultipartBuilder addFile(String name, String filePath) { this.fileName = name; this.filePath = filePath; return this; } @Override public FileMultipartBuilder addMultipartParam(Map<String, String> params) { this.params = params; return this; } @Override public FileMultipartBuilder cachePolicy(CachePolicy policy) { this.cachePolicy = policy; return this; } }