Add support for branch web links
Change-Id: I1a56aa26c74a1bd6ac26aa6bc8c93adeac829e87 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
@@ -1781,6 +1781,8 @@ public class MyWeblinkPlugin implements PatchSetWebLink {
|
|||||||
ProjectWebLinks will appear in the project list in the
|
ProjectWebLinks will appear in the project list in the
|
||||||
`Repository Browser` column.
|
`Repository Browser` column.
|
||||||
|
|
||||||
|
BranchWebLinks will appear in the branch list in the last column.
|
||||||
|
|
||||||
[[documentation]]
|
[[documentation]]
|
||||||
== Documentation
|
== Documentation
|
||||||
|
|
||||||
|
@@ -1573,6 +1573,9 @@ The `BranchInfo` entity contains information about a branch.
|
|||||||
|`revision` ||The revision to which the branch points.
|
|`revision` ||The revision to which the branch points.
|
||||||
|`can_delete`|`false` if not set|
|
|`can_delete`|`false` if not set|
|
||||||
Whether the calling user can delete this branch.
|
Whether the calling user can delete this branch.
|
||||||
|
|'web_links' |optional|
|
||||||
|
Links to the branch in external sites as a list of
|
||||||
|
link:rest-api-changes.html#web-link-info[WebLinkInfo] entries.
|
||||||
|=========================
|
|=========================
|
||||||
|
|
||||||
[[ban-input]]
|
[[ban-input]]
|
||||||
|
@@ -0,0 +1,30 @@
|
|||||||
|
// 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.extensions.webui;
|
||||||
|
|
||||||
|
import com.google.gerrit.extensions.annotations.ExtensionPoint;
|
||||||
|
|
||||||
|
@ExtensionPoint
|
||||||
|
public interface BranchWebLink extends WebLink {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to branch in external service.
|
||||||
|
*
|
||||||
|
* @param projectName Name of the project
|
||||||
|
* @param branchName Name of the branch
|
||||||
|
* @return url to branch in external service.
|
||||||
|
*/
|
||||||
|
String getBranchUrl(String projectName, String branchName);
|
||||||
|
}
|
@@ -20,6 +20,7 @@ import com.google.gerrit.client.ErrorDialog;
|
|||||||
import com.google.gerrit.client.Gerrit;
|
import com.google.gerrit.client.Gerrit;
|
||||||
import com.google.gerrit.client.GitwebLink;
|
import com.google.gerrit.client.GitwebLink;
|
||||||
import com.google.gerrit.client.VoidResult;
|
import com.google.gerrit.client.VoidResult;
|
||||||
|
import com.google.gerrit.client.WebLinkInfo;
|
||||||
import com.google.gerrit.client.access.AccessMap;
|
import com.google.gerrit.client.access.AccessMap;
|
||||||
import com.google.gerrit.client.access.ProjectAccessInfo;
|
import com.google.gerrit.client.access.ProjectAccessInfo;
|
||||||
import com.google.gerrit.client.actions.ActionButton;
|
import com.google.gerrit.client.actions.ActionButton;
|
||||||
@@ -396,6 +397,22 @@ public class ProjectBranchesScreen extends ProjectScreen {
|
|||||||
actionsPanel.add(new Anchor(c.getLinkName(), false,
|
actionsPanel.add(new Anchor(c.getLinkName(), false,
|
||||||
c.toBranch(new Branch.NameKey(getProjectKey(), k.ref()))));
|
c.toBranch(new Branch.NameKey(getProjectKey(), k.ref()))));
|
||||||
}
|
}
|
||||||
|
if (k.web_links() != null) {
|
||||||
|
for (WebLinkInfo weblink : Natives.asList(k.web_links())) {
|
||||||
|
Anchor a = new Anchor();
|
||||||
|
a.setHref(weblink.url());
|
||||||
|
if (weblink.imageUrl() != null && !weblink.imageUrl().isEmpty()) {
|
||||||
|
Image img = new Image();
|
||||||
|
img.setAltText(weblink.name());
|
||||||
|
img.setUrl(weblink.imageUrl());
|
||||||
|
img.setTitle(weblink.name());
|
||||||
|
a.getElement().appendChild(img.getElement());
|
||||||
|
} else {
|
||||||
|
a.setText("(" + weblink.name() + ")");
|
||||||
|
}
|
||||||
|
actionsPanel.add(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (k.actions() != null) {
|
if (k.actions() != null) {
|
||||||
k.actions().copyKeysIntoChildren("id");
|
k.actions().copyKeysIntoChildren("id");
|
||||||
for (ActionInfo a : Natives.asList(k.actions().values())) {
|
for (ActionInfo a : Natives.asList(k.actions().values())) {
|
||||||
|
@@ -14,10 +14,12 @@
|
|||||||
|
|
||||||
package com.google.gerrit.client.projects;
|
package com.google.gerrit.client.projects;
|
||||||
|
|
||||||
|
import com.google.gerrit.client.WebLinkInfo;
|
||||||
import com.google.gerrit.client.actions.ActionInfo;
|
import com.google.gerrit.client.actions.ActionInfo;
|
||||||
import com.google.gerrit.client.rpc.NativeMap;
|
import com.google.gerrit.client.rpc.NativeMap;
|
||||||
import com.google.gerrit.reviewdb.client.Branch;
|
import com.google.gerrit.reviewdb.client.Branch;
|
||||||
import com.google.gwt.core.client.JavaScriptObject;
|
import com.google.gwt.core.client.JavaScriptObject;
|
||||||
|
import com.google.gwt.core.client.JsArray;
|
||||||
|
|
||||||
public class BranchInfo extends JavaScriptObject {
|
public class BranchInfo extends JavaScriptObject {
|
||||||
public final String getShortName() {
|
public final String getShortName() {
|
||||||
@@ -30,6 +32,7 @@ public class BranchInfo extends JavaScriptObject {
|
|||||||
public final native String revision() /*-{ return this.revision; }-*/;
|
public final native String revision() /*-{ return this.revision; }-*/;
|
||||||
public final native boolean canDelete() /*-{ return this['can_delete'] ? true : false; }-*/;
|
public final native boolean canDelete() /*-{ return this['can_delete'] ? true : false; }-*/;
|
||||||
public final native NativeMap<ActionInfo> actions() /*-{ return this.actions }-*/;
|
public final native NativeMap<ActionInfo> actions() /*-{ return this.actions }-*/;
|
||||||
|
public final native JsArray<WebLinkInfo> web_links() /*-{ return this.web_links; }-*/;
|
||||||
|
|
||||||
protected BranchInfo() {
|
protected BranchInfo() {
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,7 @@ package com.google.gerrit.server;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.gerrit.extensions.common.WebLinkInfo;
|
import com.google.gerrit.extensions.common.WebLinkInfo;
|
||||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||||
|
import com.google.gerrit.extensions.webui.BranchWebLink;
|
||||||
import com.google.gerrit.extensions.webui.PatchSetWebLink;
|
import com.google.gerrit.extensions.webui.PatchSetWebLink;
|
||||||
import com.google.gerrit.extensions.webui.ProjectWebLink;
|
import com.google.gerrit.extensions.webui.ProjectWebLink;
|
||||||
|
|
||||||
@@ -26,11 +27,14 @@ public class WebLinks {
|
|||||||
|
|
||||||
private final DynamicSet<PatchSetWebLink> patchSetLinks;
|
private final DynamicSet<PatchSetWebLink> patchSetLinks;
|
||||||
private final DynamicSet<ProjectWebLink> projectLinks;
|
private final DynamicSet<ProjectWebLink> projectLinks;
|
||||||
|
private final DynamicSet<BranchWebLink> branchLinks;
|
||||||
|
|
||||||
public WebLinks(DynamicSet<PatchSetWebLink> patchSetLinks,
|
public WebLinks(DynamicSet<PatchSetWebLink> patchSetLinks,
|
||||||
DynamicSet<ProjectWebLink> projectLinks) {
|
DynamicSet<ProjectWebLink> projectLinks,
|
||||||
|
DynamicSet<BranchWebLink> branchLinks) {
|
||||||
this.patchSetLinks = patchSetLinks;
|
this.patchSetLinks = patchSetLinks;
|
||||||
this.projectLinks = projectLinks;
|
this.projectLinks = projectLinks;
|
||||||
|
this.branchLinks = branchLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<WebLinkInfo> getPatchSetLinks(String project, String commit) {
|
public Iterable<WebLinkInfo> getPatchSetLinks(String project, String commit) {
|
||||||
@@ -52,4 +56,14 @@ public class WebLinks {
|
|||||||
}
|
}
|
||||||
return links;
|
return links;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Iterable<WebLinkInfo> getBranchLinks(String project, String branch) {
|
||||||
|
List<WebLinkInfo> links = Lists.newArrayList();
|
||||||
|
for (BranchWebLink webLink : branchLinks) {
|
||||||
|
links.add(new WebLinkInfo(webLink.getLinkName(),
|
||||||
|
webLink.getImageUrl(),
|
||||||
|
webLink.getBranchUrl(project, branch)));
|
||||||
|
}
|
||||||
|
return links;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
package com.google.gerrit.server;
|
package com.google.gerrit.server;
|
||||||
|
|
||||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||||
|
import com.google.gerrit.extensions.webui.BranchWebLink;
|
||||||
import com.google.gerrit.extensions.webui.PatchSetWebLink;
|
import com.google.gerrit.extensions.webui.PatchSetWebLink;
|
||||||
import com.google.gerrit.extensions.webui.ProjectWebLink;
|
import com.google.gerrit.extensions.webui.ProjectWebLink;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -24,17 +25,20 @@ public class WebLinksProvider implements Provider<WebLinks> {
|
|||||||
|
|
||||||
private final DynamicSet<PatchSetWebLink> patchSetLinks;
|
private final DynamicSet<PatchSetWebLink> patchSetLinks;
|
||||||
private final DynamicSet<ProjectWebLink> projectLinks;
|
private final DynamicSet<ProjectWebLink> projectLinks;
|
||||||
|
private final DynamicSet<BranchWebLink> branchLinks;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public WebLinksProvider(DynamicSet<PatchSetWebLink> patchSetLinks,
|
public WebLinksProvider(DynamicSet<PatchSetWebLink> patchSetLinks,
|
||||||
DynamicSet<ProjectWebLink> projectLinks) {
|
DynamicSet<ProjectWebLink> projectLinks,
|
||||||
|
DynamicSet<BranchWebLink> branchLinks) {
|
||||||
this.patchSetLinks = patchSetLinks;
|
this.patchSetLinks = patchSetLinks;
|
||||||
this.projectLinks = projectLinks;
|
this.projectLinks = projectLinks;
|
||||||
|
this.branchLinks = branchLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WebLinks get() {
|
public WebLinks get() {
|
||||||
WebLinks webLinks = new WebLinks(patchSetLinks, projectLinks);
|
WebLinks webLinks = new WebLinks(patchSetLinks, projectLinks, branchLinks);
|
||||||
return webLinks;
|
return webLinks;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -32,6 +32,7 @@ import com.google.gerrit.extensions.registration.DynamicItem;
|
|||||||
import com.google.gerrit.extensions.registration.DynamicMap;
|
import com.google.gerrit.extensions.registration.DynamicMap;
|
||||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||||
import com.google.gerrit.extensions.systemstatus.MessageOfTheDay;
|
import com.google.gerrit.extensions.systemstatus.MessageOfTheDay;
|
||||||
|
import com.google.gerrit.extensions.webui.BranchWebLink;
|
||||||
import com.google.gerrit.extensions.webui.PatchSetWebLink;
|
import com.google.gerrit.extensions.webui.PatchSetWebLink;
|
||||||
import com.google.gerrit.extensions.webui.ProjectWebLink;
|
import com.google.gerrit.extensions.webui.ProjectWebLink;
|
||||||
import com.google.gerrit.extensions.webui.TopMenu;
|
import com.google.gerrit.extensions.webui.TopMenu;
|
||||||
@@ -281,6 +282,7 @@ public class GerritGlobalModule extends FactoryModule {
|
|||||||
DynamicMap.mapOf(binder(), ProjectConfigEntry.class);
|
DynamicMap.mapOf(binder(), ProjectConfigEntry.class);
|
||||||
DynamicSet.setOf(binder(), PatchSetWebLink.class);
|
DynamicSet.setOf(binder(), PatchSetWebLink.class);
|
||||||
DynamicSet.setOf(binder(), ProjectWebLink.class);
|
DynamicSet.setOf(binder(), ProjectWebLink.class);
|
||||||
|
DynamicSet.setOf(binder(), BranchWebLink.class);
|
||||||
|
|
||||||
factory(UploadValidators.Factory.class);
|
factory(UploadValidators.Factory.class);
|
||||||
DynamicSet.setOf(binder(), UploadValidationListener.class);
|
DynamicSet.setOf(binder(), UploadValidationListener.class);
|
||||||
|
@@ -14,18 +14,22 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.project;
|
package com.google.gerrit.server.project;
|
||||||
|
|
||||||
|
import com.google.common.base.Strings;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.gerrit.extensions.common.ActionInfo;
|
import com.google.gerrit.extensions.common.ActionInfo;
|
||||||
|
import com.google.gerrit.extensions.common.WebLinkInfo;
|
||||||
import com.google.gerrit.extensions.registration.DynamicMap;
|
import com.google.gerrit.extensions.registration.DynamicMap;
|
||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.RestReadView;
|
import com.google.gerrit.extensions.restapi.RestReadView;
|
||||||
import com.google.gerrit.extensions.restapi.RestView;
|
import com.google.gerrit.extensions.restapi.RestView;
|
||||||
import com.google.gerrit.extensions.webui.UiAction;
|
import com.google.gerrit.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.reviewdb.client.RefNames;
|
import com.google.gerrit.reviewdb.client.RefNames;
|
||||||
|
import com.google.gerrit.server.WebLinks;
|
||||||
import com.google.gerrit.server.extensions.webui.UiActions;
|
import com.google.gerrit.server.extensions.webui.UiActions;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.google.inject.util.Providers;
|
import com.google.inject.util.Providers;
|
||||||
|
|
||||||
@@ -47,12 +51,15 @@ import java.util.TreeMap;
|
|||||||
public class ListBranches implements RestReadView<ProjectResource> {
|
public class ListBranches implements RestReadView<ProjectResource> {
|
||||||
private final GitRepositoryManager repoManager;
|
private final GitRepositoryManager repoManager;
|
||||||
private final DynamicMap<RestView<BranchResource>> branchViews;
|
private final DynamicMap<RestView<BranchResource>> branchViews;
|
||||||
|
private final Provider<WebLinks> webLinks;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ListBranches(GitRepositoryManager repoManager,
|
public ListBranches(GitRepositoryManager repoManager,
|
||||||
DynamicMap<RestView<BranchResource>> branchViews) {
|
DynamicMap<RestView<BranchResource>> branchViews,
|
||||||
|
Provider<WebLinks> webLinks) {
|
||||||
this.repoManager = repoManager;
|
this.repoManager = repoManager;
|
||||||
this.branchViews = branchViews;
|
this.branchViews = branchViews;
|
||||||
|
this.webLinks = webLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -161,6 +168,13 @@ public class ListBranches implements RestReadView<ProjectResource> {
|
|||||||
}
|
}
|
||||||
info.actions.put(d.getId(), new ActionInfo(d));
|
info.actions.put(d.getId(), new ActionInfo(d));
|
||||||
}
|
}
|
||||||
|
info.webLinks = Lists.newArrayList();
|
||||||
|
for (WebLinkInfo link : webLinks.get().getBranchLinks(
|
||||||
|
refControl.getProjectControl().getProject().getName(), ref.getName())) {
|
||||||
|
if (!Strings.isNullOrEmpty(link.name) && !Strings.isNullOrEmpty(link.url)) {
|
||||||
|
info.webLinks.add(link);
|
||||||
|
}
|
||||||
|
}
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,6 +183,7 @@ public class ListBranches implements RestReadView<ProjectResource> {
|
|||||||
public String revision;
|
public String revision;
|
||||||
public Boolean canDelete;
|
public Boolean canDelete;
|
||||||
public Map<String, ActionInfo> actions;
|
public Map<String, ActionInfo> actions;
|
||||||
|
public List<WebLinkInfo> webLinks;
|
||||||
|
|
||||||
public BranchInfo(String ref, String revision, boolean canDelete) {
|
public BranchInfo(String ref, String revision, boolean canDelete) {
|
||||||
this.ref = ref;
|
this.ref = ref;
|
||||||
|
Reference in New Issue
Block a user