package com.jbirdvegas.mgerrit.objects; /* * Copyright (C) 2013 Android Open Kang Project (AOKP) * Author: Evan Conway (P4R4N01D), 2013 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import android.content.Context; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.annotations.SerializedName; import com.jbirdvegas.mgerrit.R; import java.util.List; /** * Contains information about a revision or patch set. This condenses both * the RevisionInfo and CommitInfo objects together into the one level */ public class CommitInfo { /** The Change-Id of the change. */ private String mChangeId; private static final String KEY_COMMIT = "commit"; /**The commit ID of the current patch set of this change. * Don't set the @SerialisedName as there is a name conflict here */ private String mCommit; public static final String KEY_AUTHOR = "author"; @SerializedName(CommitInfo.KEY_AUTHOR) private CommitterObject mAuthorObject; private static final String KEY_COMMITTER = "committer"; @SerializedName(CommitInfo.KEY_COMMITTER) private CommitterObject mCommitterObject; public static final String KEY_MESSAGE = "message"; @SerializedName(CommitInfo.KEY_MESSAGE) private String mMessage; @SerializedName(JSONCommit.KEY_SUBJECT) private String mSubject; @SerializedName("_number") private String mPatchSetNumber; public static final String KEY_CHANGED_FILES = "files"; // Information about the files in this patch set. @SerializedName(CommitInfo.KEY_CHANGED_FILES) private FileInfoList mFileInfos; @SerializedName("draft") private boolean mIsDraft; public static CommitInfo deserialise(JsonObject object, String changeId) { CommitInfo revision = new Gson().fromJson(object, CommitInfo.class); revision.mChangeId = changeId; // Add the changed files if (object.has(CommitInfo.KEY_CHANGED_FILES)) { JsonObject filesObj = object.get(CommitInfo.KEY_CHANGED_FILES).getAsJsonObject(); revision.mFileInfos = FileInfoList.deserialize(filesObj); } // Some objects are nested here if (object.has(CommitInfo.KEY_COMMIT)) { JsonObject commitObj = object.get(KEY_COMMIT).getAsJsonObject(); CommitInfo r2 = new Gson().fromJson(commitObj, CommitInfo.class); merge(revision, r2); if (commitObj.has(KEY_COMMIT)) { revision.mCommit = commitObj.get(KEY_COMMIT).getAsString(); } } return revision; } /** * Merge two CommitInfo objects together, modifying the first * @param a The commitInfo object to be modified * @param b Secondary commitInfo object to be merged into a */ private static void merge(CommitInfo a, final CommitInfo b) { a.mAuthorObject = b.mAuthorObject == null ? a.mAuthorObject : b.mAuthorObject; a.mCommitterObject = b.mCommitterObject == null ? a.mCommitterObject : b.mCommitterObject; a.mMessage = b.mMessage == null ? a.mMessage : b.mMessage; a.mSubject = b.mSubject == null ? a.mSubject : b.mSubject; } public CommitterObject getAuthorObject() { return mAuthorObject; } public CommitterObject getCommitterObject() { return mCommitterObject; } public String getMessage() { return mMessage; } protected void setMessage(Context context) { if (mMessage == null) { this.mMessage = context.getString(R.string.current_revision_is_draft_message); } } public String getChangeId() { return mChangeId; } public String getCommit() { return mCommit; } public String getSubject() { return mSubject; } public String getPatchSetNumber() { return mPatchSetNumber; } public boolean isIsDraft() { return mIsDraft; } public List<FileInfo> getChangedFiles() { return mFileInfos.getFiles(); } public void setChangedFiles(FileInfoList fileInfos) { this.mFileInfos = fileInfos; } @Override public String toString() { return "CommitInfo{" + "mChangeId='" + mChangeId + '\'' + ", mCommit='" + mCommit + '\'' + ", mAuthorObject=" + mAuthorObject + ", mCommitterObject=" + mCommitterObject + ", mMessage='" + mMessage + '\'' + ", mSubject='" + mSubject + '\'' + ", mPatchSetNumber='" + mPatchSetNumber + '\'' + ", mFileInfos=" + mFileInfos + ", mIsDraft=" + mIsDraft + '}'; } }