package uk.ac.ic.wlgitbridge.server; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import uk.ac.ic.wlgitbridge.bridge.BridgeAPI; import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.snapshot.base.JSONSource; import uk.ac.ic.wlgitbridge.snapshot.push.exception.UnexpectedPostbackException; import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostExceptionBuilder; import uk.ac.ic.wlgitbridge.util.Util; /** * Created by Winston on 17/11/14. */ public class PostbackContents implements JSONSource { private static final String CODE_SUCCESS = "upToDate"; private final BridgeAPI bridgeAPI; private final String projectName; private final String postbackKey; private final SnapshotPostExceptionBuilder snapshotPostExceptionBuilder; private int versionID; private SnapshotPostException exception; public PostbackContents(BridgeAPI bridgeAPI, String projectName, String postbackKey, String contents) { this.bridgeAPI = bridgeAPI; this.projectName = projectName; this.postbackKey = postbackKey; snapshotPostExceptionBuilder = new SnapshotPostExceptionBuilder(); fromJSON(new Gson().fromJson(contents, JsonElement.class)); } @Override public void fromJSON(JsonElement json) { JsonObject responseObject = json.getAsJsonObject(); String code = Util.getCodeFromResponse(responseObject); setResult(responseObject, code); } public void processPostback() throws UnexpectedPostbackException { if (exception == null) { bridgeAPI.postbackReceivedSuccessfully(projectName, postbackKey, versionID); } else { bridgeAPI.postbackReceivedWithException(projectName, postbackKey, exception); } } private void setResult(JsonObject responseObject, String code) { if (code.equals(CODE_SUCCESS)) { setVersionID(responseObject); } else { setException(responseObject, code); } } private void setVersionID(JsonObject responseObject) { versionID = responseObject.get("latestVerId").getAsInt(); } private void setException(JsonObject responseObject, String code) { try { exception = snapshotPostExceptionBuilder.build(code, responseObject); } catch (UnexpectedPostbackException e) { throw new RuntimeException(e); } } }