package uk.ac.ic.wlgitbridge.snapshot.getdoc; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import uk.ac.ic.wlgitbridge.snapshot.base.ForbiddenException; import uk.ac.ic.wlgitbridge.snapshot.base.Result; import uk.ac.ic.wlgitbridge.snapshot.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.snapshot.getdoc.exception.InvalidProjectException; import uk.ac.ic.wlgitbridge.snapshot.getsavedvers.WLUser; import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.snapshot.base.Request; import uk.ac.ic.wlgitbridge.snapshot.getdoc.exception.ProtectedProjectException; /** * Created by Winston on 06/11/14. */ public class GetDocResult extends Result { private int error; private int versionID; private String createdAt; private WLUser user; private SnapshotPostException exception; private ForbiddenException forbidden; public GetDocResult(Request request, JsonElement json) throws FailedConnectionException { super(request, json); } public GetDocResult(JsonElement error, int versionID, String createdAt, String email, String name) { if (error == null) { this.error = -1; } else { this.error = error.getAsInt(); } this.versionID = versionID; this.createdAt = createdAt; this.user = new WLUser(name, email); } @Override public JsonElement toJson() { JsonObject jsonThis = new JsonObject(); if (error == -1) { jsonThis.addProperty("latestVerId", versionID); jsonThis.addProperty("latestVerAt", createdAt); JsonObject latestVerBy = new JsonObject(); latestVerBy.addProperty("email", getEmail()); latestVerBy.addProperty("name", getName()); jsonThis.add("latestVerBy", latestVerBy); } else { jsonThis.addProperty("status", error); String message; if (error == 403) { message = "Forbidden"; } else { message = "Not Found"; } jsonThis.addProperty("message", message); } return jsonThis; } @Override public void fromJSON(JsonElement json) { JsonObject jsonObject = json.getAsJsonObject(); if (jsonObject.has("status")) { switch (jsonObject.get("status").getAsInt()) { case 401: case 403: forbidden = new ForbiddenException(); break; case 404: exception = new InvalidProjectException(); break; default: throw new IllegalArgumentException("unknown get doc error code"); } } else { versionID = jsonObject.get("latestVerId").getAsInt(); createdAt = jsonObject.get("latestVerAt").getAsString(); String name = null; String email = null; JsonElement latestVerBy = jsonObject.get("latestVerBy"); if (latestVerBy.isJsonObject()) { JsonObject userObject = latestVerBy.getAsJsonObject(); name = userObject.get("name").getAsString(); email = userObject.get("email").getAsString(); } user = new WLUser(name, email); } } public int getVersionID() throws SnapshotPostException { if (exception != null) { throw exception; } return versionID; } public String getCreatedAt() { return createdAt; } public String getName() { return user.getName(); } public String getEmail() { return user.getEmail(); } }