package org.greengin.sciencetoolkit.spotit.logic.remote; import java.io.File; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.greengin.sciencetoolkit.common.logic.remote.RemoteJsonAction; import org.greengin.sciencetoolkit.common.model.Model; import org.greengin.sciencetoolkit.common.ui.base.ToastMaker; import org.greengin.sciencetoolkit.spotit.logic.data.DataManager; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.util.Log; public class UploadRemoteAction extends RemoteJsonAction { Activity context; Model project; Model observation; public UploadRemoteAction(Activity context, Model observation) { this.context = context; this.observation = observation; this.project = this.observation.getParent().getParent(); } @Override public HttpRequestBase[] createRequests(String urlBase) { File image = new File(observation.getString("uri")); if (image.exists() && image.isFile()) { HttpPost post = new HttpPost(String.format( "%sproject/%s/spotit/data", urlBase, project.getString("id"))); MultipartEntityBuilder entityBuilder = MultipartEntityBuilder .create(); entityBuilder.addTextBody("title", image.getName(), ContentType.TEXT_PLAIN); entityBuilder .addTextBody("description", "", ContentType.TEXT_PLAIN); entityBuilder .addTextBody("geolocation", "", ContentType.TEXT_PLAIN); entityBuilder.addPart("image", new FileBody(image)); HttpEntity entity = entityBuilder.build(); post.setEntity(entity); return new HttpRequestBase[] { post }; } return new HttpRequestBase[] {}; } @Override public void result(int request, JSONObject result, JSONArray array) { Log.d("stk remote", "result: " + result.toString()); try { String id = result.getString("newItemId"); if (id != null) { DataManager.get().markAsSent(project, observation, 2); ToastMaker.l(context, "Data uploaded successfully!"); } else { error(request, result.getString("create")); } } catch (JSONException e) { error(request, "The server did not allow uploading data at this point."); e.printStackTrace(); } } @Override public void error(int request, String error) { String msg = null; if ("nologin".equals(error)) { msg = "It was not possible to upload the data because you are not logged in."; } else { msg = error; } ToastMaker.le(context, msg); DataManager.get().markAsSent(project, observation, 0); } }