diff options
Diffstat (limited to 'java/com/google/gerrit/server/edit/ChangeEditJson.java')
-rw-r--r-- | java/com/google/gerrit/server/edit/ChangeEditJson.java | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/java/com/google/gerrit/server/edit/ChangeEditJson.java b/java/com/google/gerrit/server/edit/ChangeEditJson.java new file mode 100644 index 0000000000..55e0aefbbf --- /dev/null +++ b/java/com/google/gerrit/server/edit/ChangeEditJson.java @@ -0,0 +1,107 @@ +// Copyright (C) 2014 The Android Open Source Project +// +// 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. + +package com.google.gerrit.server.edit; + +import com.google.gerrit.extensions.common.CommitInfo; +import com.google.gerrit.extensions.common.EditInfo; +import com.google.gerrit.extensions.common.FetchInfo; +import com.google.gerrit.extensions.config.DownloadCommand; +import com.google.gerrit.extensions.config.DownloadScheme; +import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; +import com.google.gerrit.server.CommonConverters; +import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.change.DownloadCommandsJson; +import com.google.inject.Inject; +import com.google.inject.Provider; +import com.google.inject.Singleton; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.Map; +import org.eclipse.jgit.revwalk.RevCommit; + +@Singleton +public class ChangeEditJson { + private final DynamicMap<DownloadCommand> downloadCommands; + private final DynamicMap<DownloadScheme> downloadSchemes; + private final Provider<CurrentUser> userProvider; + + @Inject + ChangeEditJson( + DynamicMap<DownloadCommand> downloadCommand, + DynamicMap<DownloadScheme> downloadSchemes, + Provider<CurrentUser> userProvider) { + this.downloadCommands = downloadCommand; + this.downloadSchemes = downloadSchemes; + this.userProvider = userProvider; + } + + public EditInfo toEditInfo(ChangeEdit edit, boolean downloadCommands) { + EditInfo out = new EditInfo(); + out.commit = fillCommit(edit.getEditCommit()); + out.baseRevision = edit.getBasePatchSet().getRevision().get(); + out.basePatchSetNumber = edit.getBasePatchSet().getPatchSetId(); + out.ref = edit.getRefName(); + if (downloadCommands) { + out.fetch = fillFetchMap(edit); + } + return out; + } + + private static CommitInfo fillCommit(RevCommit editCommit) { + CommitInfo commit = new CommitInfo(); + commit.commit = editCommit.toObjectId().getName(); + commit.author = CommonConverters.toGitPerson(editCommit.getAuthorIdent()); + commit.committer = CommonConverters.toGitPerson(editCommit.getCommitterIdent()); + commit.subject = editCommit.getShortMessage(); + commit.message = editCommit.getFullMessage(); + + commit.parents = new ArrayList<>(editCommit.getParentCount()); + for (RevCommit p : editCommit.getParents()) { + CommitInfo i = new CommitInfo(); + i.commit = p.name(); + commit.parents.add(i); + } + + return commit; + } + + private Map<String, FetchInfo> fillFetchMap(ChangeEdit edit) { + Map<String, FetchInfo> r = new LinkedHashMap<>(); + for (Extension<DownloadScheme> e : downloadSchemes) { + String schemeName = e.getExportName(); + DownloadScheme scheme = e.getProvider().get(); + if (!scheme.isEnabled() + || (scheme.isAuthRequired() && !userProvider.get().isIdentifiedUser())) { + continue; + } + + // No fluff, just stuff + if (!scheme.isAuthSupported()) { + continue; + } + + String projectName = edit.getChange().getProject().get(); + String refName = edit.getRefName(); + FetchInfo fetchInfo = new FetchInfo(scheme.getUrl(projectName), refName); + r.put(schemeName, fetchInfo); + + DownloadCommandsJson.populateFetchMap( + scheme, downloadCommands, projectName, refName, fetchInfo); + } + + return r; + } +} |