Retrieve clone commands from /config/server/info REST endpoint
Instead of hard-coding the clone commands on client-side, retrieve them from the /config/server/info REST endpoint. The clone commands are now implemented in the download-commands plugin, hence this plugin needs to be updated so that the clone commands are available. Change-Id: I58abd64e9597815ce23b3cd5ebf156185cad4c6a Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
		@@ -21,6 +21,8 @@ import com.google.gerrit.client.access.ProjectAccessInfo;
 | 
			
		||||
import com.google.gerrit.client.actions.ActionButton;
 | 
			
		||||
import com.google.gerrit.client.actions.ActionInfo;
 | 
			
		||||
import com.google.gerrit.client.change.Resources;
 | 
			
		||||
import com.google.gerrit.client.config.DownloadInfo.DownloadCommandInfo;
 | 
			
		||||
import com.google.gerrit.client.config.DownloadInfo.DownloadSchemeInfo;
 | 
			
		||||
import com.google.gerrit.client.download.DownloadPanel;
 | 
			
		||||
import com.google.gerrit.client.projects.ConfigInfo;
 | 
			
		||||
import com.google.gerrit.client.projects.ConfigInfo.ConfigParameterInfo;
 | 
			
		||||
@@ -65,6 +67,7 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public class ProjectInfoScreen extends ProjectScreen {
 | 
			
		||||
  private boolean isOwner;
 | 
			
		||||
@@ -677,23 +680,11 @@ public class ProjectInfoScreen extends ProjectScreen {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void populateDownloadCommandLinks() {
 | 
			
		||||
      if (!urls.isEmpty()) {
 | 
			
		||||
        commands.add(cmdLinkfactory.new CloneCommandLink());
 | 
			
		||||
        if (Gerrit.getConfig().getSshdAddress() != null && hasUserName()) {
 | 
			
		||||
          commands.add(
 | 
			
		||||
              cmdLinkfactory.new CloneWithCommitMsgHookCommandLink(getProjectKey()));
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    protected Set<DownloadCommandInfo> getCommands(DownloadSchemeInfo schemeInfo) {
 | 
			
		||||
      return schemeInfo.cloneCommands(project);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static boolean hasUserName() {
 | 
			
		||||
    return Gerrit.isSignedIn()
 | 
			
		||||
        && Gerrit.getUserAccount().getUserName() != null
 | 
			
		||||
        && Gerrit.getUserAccount().getUserName().length() > 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static class LabeledWidgetsGrid extends FlexTable {
 | 
			
		||||
    private String labelSuffix;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,23 @@ public class DownloadInfo extends JavaScriptObject {
 | 
			
		||||
      return command(commandName).replaceAll("\\$\\{project\\}", project);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final Set<String> cloneCommandNames() {
 | 
			
		||||
      return Natives.keys(_cloneCommands());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final Set<DownloadCommandInfo> cloneCommands(String project) {
 | 
			
		||||
      Set<DownloadCommandInfo> commands = new HashSet<>();
 | 
			
		||||
      for (String commandName : cloneCommandNames()) {
 | 
			
		||||
        commands.add(new DownloadCommandInfo(commandName, cloneCommand(
 | 
			
		||||
            commandName, project)));
 | 
			
		||||
      }
 | 
			
		||||
      return commands;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final String cloneCommand(String commandName, String project) {
 | 
			
		||||
      return cloneCommand(commandName).replaceAll("\\$\\{project\\}", project);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final String getUrl(String project) {
 | 
			
		||||
      return url().replaceAll("\\$\\{project\\}", project);
 | 
			
		||||
    }
 | 
			
		||||
@@ -72,7 +89,9 @@ public class DownloadInfo extends JavaScriptObject {
 | 
			
		||||
    public final native boolean isAuthRequired() /*-{ return this.is_auth_required || false; }-*/;
 | 
			
		||||
    public final native boolean isAuthSupported() /*-{ return this.is_auth_supported || false; }-*/;
 | 
			
		||||
    public final native String command(String n) /*-{ return this.commands[n]; }-*/;
 | 
			
		||||
    public final native String cloneCommand(String n) /*-{ return this.clone_commands[n]; }-*/;
 | 
			
		||||
    private final native NativeMap<NativeString> _commands() /*-{ return this.commands; }-*/;
 | 
			
		||||
    private final native NativeMap<NativeString> _cloneCommands() /*-{ return this.clone_commands; }-*/;
 | 
			
		||||
 | 
			
		||||
    protected DownloadSchemeInfo() {
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -15,92 +15,24 @@
 | 
			
		||||
package com.google.gerrit.client.download;
 | 
			
		||||
 | 
			
		||||
import com.google.gerrit.client.Gerrit;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Project;
 | 
			
		||||
import com.google.gerrit.client.config.DownloadInfo.DownloadCommandInfo;
 | 
			
		||||
import com.google.gwt.aria.client.Roles;
 | 
			
		||||
import com.google.gwt.event.dom.client.ClickEvent;
 | 
			
		||||
import com.google.gwt.event.dom.client.ClickHandler;
 | 
			
		||||
import com.google.gwt.user.client.Window;
 | 
			
		||||
import com.google.gwt.user.client.ui.Anchor;
 | 
			
		||||
import com.google.gwt.user.client.ui.Widget;
 | 
			
		||||
import com.google.gwtexpui.clippy.client.CopyableLabel;
 | 
			
		||||
 | 
			
		||||
public abstract class DownloadCommandLink extends Anchor implements ClickHandler {
 | 
			
		||||
  public static class CopyableCommandLinkFactory {
 | 
			
		||||
    protected CopyableLabel copyLabel = null;
 | 
			
		||||
    protected Widget widget;
 | 
			
		||||
public class DownloadCommandLink extends Anchor implements ClickHandler {
 | 
			
		||||
  private final CopyableLabel copyLabel;
 | 
			
		||||
  private final String command;
 | 
			
		||||
 | 
			
		||||
    public class CloneCommandLink extends DownloadCommandLink {
 | 
			
		||||
      public CloneCommandLink() {
 | 
			
		||||
        super("clone");
 | 
			
		||||
      }
 | 
			
		||||
  public DownloadCommandLink(CopyableLabel copyLabel,
 | 
			
		||||
      DownloadCommandInfo commandInfo) {
 | 
			
		||||
    super(commandInfo.name());
 | 
			
		||||
    this.copyLabel = copyLabel;
 | 
			
		||||
    this.command = commandInfo.command();
 | 
			
		||||
 | 
			
		||||
      @Override
 | 
			
		||||
      protected void setCurrentUrl(DownloadUrlLink link) {
 | 
			
		||||
        widget.setVisible(true);
 | 
			
		||||
        copyLabel.setText("git clone " + link.getUrlData());
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class CloneWithCommitMsgHookCommandLink extends DownloadCommandLink {
 | 
			
		||||
      private final Project.NameKey project;
 | 
			
		||||
 | 
			
		||||
      public CloneWithCommitMsgHookCommandLink(Project.NameKey project) {
 | 
			
		||||
        super("clone with commit-msg hook");
 | 
			
		||||
        this.project = project;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      @Override
 | 
			
		||||
      protected void setCurrentUrl(DownloadUrlLink link) {
 | 
			
		||||
        widget.setVisible(true);
 | 
			
		||||
 | 
			
		||||
        String sshPort = null;
 | 
			
		||||
        String sshAddr = Gerrit.getConfig().getSshdAddress();
 | 
			
		||||
        int p = sshAddr.lastIndexOf(':');
 | 
			
		||||
        if (p != -1 && !sshAddr.endsWith(":")) {
 | 
			
		||||
          sshPort = sshAddr.substring(p + 1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        StringBuilder cmd = new StringBuilder();
 | 
			
		||||
        cmd.append("git clone ");
 | 
			
		||||
        cmd.append(link.getUrlData());
 | 
			
		||||
        cmd.append(" && scp -p ");
 | 
			
		||||
        if (sshPort != null) {
 | 
			
		||||
          cmd.append("-P ");
 | 
			
		||||
          cmd.append(sshPort);
 | 
			
		||||
          cmd.append(" ");
 | 
			
		||||
        }
 | 
			
		||||
        cmd.append(Gerrit.getUserAccount().getUserName());
 | 
			
		||||
        cmd.append("@");
 | 
			
		||||
 | 
			
		||||
        if (sshAddr.startsWith("*:") || p == -1) {
 | 
			
		||||
          cmd.append(Window.Location.getHostName());
 | 
			
		||||
        } else {
 | 
			
		||||
          cmd.append(sshAddr.substring(0, p));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        cmd.append(":hooks/commit-msg ");
 | 
			
		||||
 | 
			
		||||
        p = project.get().lastIndexOf('/');
 | 
			
		||||
        if (p != -1) {
 | 
			
		||||
          cmd.append(project.get().substring(p + 1));
 | 
			
		||||
        } else {
 | 
			
		||||
          cmd.append(project.get());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        cmd.append("/.git/hooks/");
 | 
			
		||||
 | 
			
		||||
        copyLabel.setText(cmd.toString());
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public CopyableCommandLinkFactory(CopyableLabel label, Widget widget) {
 | 
			
		||||
      copyLabel = label;
 | 
			
		||||
      this.widget = widget;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public DownloadCommandLink(String text) {
 | 
			
		||||
    super(text);
 | 
			
		||||
    setStyleName(Gerrit.RESOURCES.css().downloadLink());
 | 
			
		||||
    Roles.getTabRole().set(getElement());
 | 
			
		||||
    addClickHandler(this);
 | 
			
		||||
@@ -115,6 +47,8 @@ public abstract class DownloadCommandLink extends Anchor implements ClickHandler
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void select() {
 | 
			
		||||
    copyLabel.setText(command);
 | 
			
		||||
 | 
			
		||||
    DownloadCommandPanel parent = (DownloadCommandPanel) getParent();
 | 
			
		||||
    for (Widget w : parent) {
 | 
			
		||||
      if (w != this && w instanceof DownloadCommandLink) {
 | 
			
		||||
@@ -124,6 +58,4 @@ public abstract class DownloadCommandLink extends Anchor implements ClickHandler
 | 
			
		||||
    parent.setCurrentCommand(this);
 | 
			
		||||
    addStyleName(Gerrit.RESOURCES.css().downloadLink_Active());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected abstract void setCurrentUrl(DownloadUrlLink link);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,6 @@ import com.google.gwt.user.client.ui.Widget;
 | 
			
		||||
 | 
			
		||||
public class DownloadCommandPanel extends FlowPanel {
 | 
			
		||||
  private DownloadCommandLink currentCommand;
 | 
			
		||||
  private DownloadUrlLink currentUrl;
 | 
			
		||||
 | 
			
		||||
  public DownloadCommandPanel() {
 | 
			
		||||
    setStyleName(Gerrit.RESOURCES.css().downloadLinkList());
 | 
			
		||||
@@ -37,7 +36,12 @@ public class DownloadCommandPanel extends FlowPanel {
 | 
			
		||||
 | 
			
		||||
    for (Widget w : this) {
 | 
			
		||||
      if (w instanceof DownloadCommandLink) {
 | 
			
		||||
        final DownloadCommandLink d = (DownloadCommandLink) w;
 | 
			
		||||
        DownloadCommandLink d = (DownloadCommandLink) w;
 | 
			
		||||
        if (currentCommand != null
 | 
			
		||||
            && d.getText().equals(currentCommand.getText())) {
 | 
			
		||||
          d.select();
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
        if (first == null) {
 | 
			
		||||
          first = d;
 | 
			
		||||
        }
 | 
			
		||||
@@ -51,19 +55,7 @@ public class DownloadCommandPanel extends FlowPanel {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setCurrentUrl(DownloadUrlLink link) {
 | 
			
		||||
    currentUrl = link;
 | 
			
		||||
    update();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setCurrentCommand(DownloadCommandLink cmd) {
 | 
			
		||||
    currentCommand = cmd;
 | 
			
		||||
    update();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private void update() {
 | 
			
		||||
    if (currentCommand != null && currentUrl != null) {
 | 
			
		||||
      currentCommand.setCurrentUrl(currentUrl);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,34 +15,32 @@
 | 
			
		||||
package com.google.gerrit.client.download;
 | 
			
		||||
 | 
			
		||||
import com.google.gerrit.client.Gerrit;
 | 
			
		||||
import com.google.gerrit.client.config.DownloadInfo.DownloadCommandInfo;
 | 
			
		||||
import com.google.gerrit.client.config.DownloadInfo.DownloadSchemeInfo;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
 | 
			
		||||
import com.google.gwt.user.client.ui.FlowPanel;
 | 
			
		||||
import com.google.gwt.user.client.ui.InlineLabel;
 | 
			
		||||
import com.google.gwtexpui.clippy.client.CopyableLabel;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public abstract class DownloadPanel extends FlowPanel {
 | 
			
		||||
  protected String projectName;
 | 
			
		||||
  protected final String project;
 | 
			
		||||
 | 
			
		||||
  protected DownloadCommandLink.CopyableCommandLinkFactory cmdLinkfactory;
 | 
			
		||||
 | 
			
		||||
  protected DownloadCommandPanel commands = new DownloadCommandPanel();
 | 
			
		||||
  protected DownloadUrlPanel urls = new DownloadUrlPanel(commands);
 | 
			
		||||
  protected CopyableLabel copyLabel = new CopyableLabel("");
 | 
			
		||||
  private final DownloadCommandPanel commands = new DownloadCommandPanel();
 | 
			
		||||
  private final DownloadUrlPanel urls = new DownloadUrlPanel();
 | 
			
		||||
  private final CopyableLabel copyLabel = new CopyableLabel("");
 | 
			
		||||
 | 
			
		||||
  public DownloadPanel(String project, boolean allowAnonymous) {
 | 
			
		||||
    this.projectName = project;
 | 
			
		||||
 | 
			
		||||
    this.project = project;
 | 
			
		||||
    copyLabel.setStyleName(Gerrit.RESOURCES.css().downloadLinkCopyLabel());
 | 
			
		||||
    urls.add(DownloadUrlLink.createDownloadUrlLinks(project, allowAnonymous));
 | 
			
		||||
    cmdLinkfactory = new DownloadCommandLink.CopyableCommandLinkFactory(
 | 
			
		||||
        copyLabel, urls);
 | 
			
		||||
    urls.add(DownloadUrlLink.createDownloadUrlLinks(allowAnonymous, this));
 | 
			
		||||
 | 
			
		||||
    populateDownloadCommandLinks();
 | 
			
		||||
    setupWidgets();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected void setupWidgets() {
 | 
			
		||||
    if (!commands.isEmpty()) {
 | 
			
		||||
  private void setupWidgets() {
 | 
			
		||||
    if (!urls.isEmpty()) {
 | 
			
		||||
      final AccountGeneralPreferences pref;
 | 
			
		||||
      if (Gerrit.isSignedIn()) {
 | 
			
		||||
        pref = Gerrit.getUserAccount().getGeneralPreferences();
 | 
			
		||||
@@ -50,7 +48,6 @@ public abstract class DownloadPanel extends FlowPanel {
 | 
			
		||||
        pref = new AccountGeneralPreferences();
 | 
			
		||||
        pref.resetToDefaults();
 | 
			
		||||
      }
 | 
			
		||||
      commands.select();
 | 
			
		||||
      urls.select(pref.getDownloadUrl());
 | 
			
		||||
 | 
			
		||||
      FlowPanel p = new FlowPanel();
 | 
			
		||||
@@ -66,5 +63,14 @@ public abstract class DownloadPanel extends FlowPanel {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected abstract void populateDownloadCommandLinks();
 | 
			
		||||
  void populateDownloadCommandLinks(DownloadSchemeInfo schemeInfo) {
 | 
			
		||||
    commands.clear();
 | 
			
		||||
    for (DownloadCommandInfo cmd : getCommands(schemeInfo)) {
 | 
			
		||||
      commands.add(new DownloadCommandLink(copyLabel, cmd));
 | 
			
		||||
    }
 | 
			
		||||
    commands.select();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected abstract Set<DownloadCommandInfo> getCommands(
 | 
			
		||||
      DownloadSchemeInfo schemeInfo);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -56,8 +56,8 @@ public class DownloadUrlLink extends Anchor implements ClickHandler {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static List<DownloadUrlLink> createDownloadUrlLinks(String project,
 | 
			
		||||
      boolean allowAnonymous) {
 | 
			
		||||
  public static List<DownloadUrlLink> createDownloadUrlLinks(
 | 
			
		||||
      boolean allowAnonymous, DownloadPanel downloadPanel) {
 | 
			
		||||
    List<DownloadUrlLink> urls = new ArrayList<>();
 | 
			
		||||
    for (String s : Gerrit.info().download().schemes()) {
 | 
			
		||||
      DownloadSchemeInfo scheme = Gerrit.info().download().scheme(s);
 | 
			
		||||
@@ -67,34 +67,34 @@ public class DownloadUrlLink extends Anchor implements ClickHandler {
 | 
			
		||||
 | 
			
		||||
      KnownScheme knownScheme = KnownScheme.get(s);
 | 
			
		||||
      if (knownScheme != null) {
 | 
			
		||||
        urls.add(new DownloadUrlLink(knownScheme.downloadScheme,
 | 
			
		||||
            knownScheme.text, scheme.getUrl(project)));
 | 
			
		||||
        urls.add(new DownloadUrlLink(downloadPanel, scheme,
 | 
			
		||||
            knownScheme.downloadScheme, knownScheme.text));
 | 
			
		||||
      } else {
 | 
			
		||||
        urls.add(new DownloadUrlLink(s, scheme.getUrl(project)));
 | 
			
		||||
        urls.add(new DownloadUrlLink(downloadPanel, scheme, s));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return urls;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private final DownloadPanel downloadPanel;
 | 
			
		||||
  private final DownloadSchemeInfo schemeInfo;
 | 
			
		||||
  private final DownloadScheme urlType;
 | 
			
		||||
  private final String urlData;
 | 
			
		||||
 | 
			
		||||
  public DownloadUrlLink(String text, String urlData) {
 | 
			
		||||
      this(null, text, urlData);
 | 
			
		||||
  public DownloadUrlLink(DownloadPanel downloadPanel,
 | 
			
		||||
      DownloadSchemeInfo schemeInfo, String text) {
 | 
			
		||||
    this(downloadPanel, schemeInfo, null, text);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public DownloadUrlLink(DownloadScheme urlType, String text, String urlData) {
 | 
			
		||||
  public DownloadUrlLink(DownloadPanel downloadPanel,
 | 
			
		||||
      DownloadSchemeInfo schemeInfo, DownloadScheme urlType, String text) {
 | 
			
		||||
    super(text);
 | 
			
		||||
    setStyleName(Gerrit.RESOURCES.css().downloadLink());
 | 
			
		||||
    Roles.getTabRole().set(getElement());
 | 
			
		||||
    addClickHandler(this);
 | 
			
		||||
 | 
			
		||||
    this.downloadPanel = downloadPanel;
 | 
			
		||||
    this.schemeInfo = schemeInfo;
 | 
			
		||||
    this.urlType = urlType;
 | 
			
		||||
    this.urlData = urlData;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public String getUrlData() {
 | 
			
		||||
    return urlData;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public DownloadScheme getUrlType() {
 | 
			
		||||
@@ -128,13 +128,14 @@ public class DownloadUrlLink extends Anchor implements ClickHandler {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void select() {
 | 
			
		||||
    downloadPanel.populateDownloadCommandLinks(schemeInfo);
 | 
			
		||||
 | 
			
		||||
    DownloadUrlPanel parent = (DownloadUrlPanel) getParent();
 | 
			
		||||
    for (Widget w : parent) {
 | 
			
		||||
      if (w != this && w instanceof DownloadUrlLink) {
 | 
			
		||||
        w.removeStyleName(Gerrit.RESOURCES.css().downloadLink_Active());
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    parent.setCurrentUrl(this);
 | 
			
		||||
    addStyleName(Gerrit.RESOURCES.css().downloadLink_Active());
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,10 +23,8 @@ import com.google.gwt.user.client.ui.Widget;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
 | 
			
		||||
public class DownloadUrlPanel extends FlowPanel {
 | 
			
		||||
  private final DownloadCommandPanel commandPanel;
 | 
			
		||||
 | 
			
		||||
  public DownloadUrlPanel(final DownloadCommandPanel commandPanel) {
 | 
			
		||||
    this.commandPanel = commandPanel;
 | 
			
		||||
  public DownloadUrlPanel() {
 | 
			
		||||
    setStyleName(Gerrit.RESOURCES.css().downloadLinkList());
 | 
			
		||||
    Roles.getTablistRole().set(getElement());
 | 
			
		||||
  }
 | 
			
		||||
@@ -58,10 +56,6 @@ public class DownloadUrlPanel extends FlowPanel {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setCurrentUrl(DownloadUrlLink link) {
 | 
			
		||||
    commandPanel.setCurrentUrl(link);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void add(Collection<DownloadUrlLink> links) {
 | 
			
		||||
    for (Widget link: links) {
 | 
			
		||||
      add(link);
 | 
			
		||||
 
 | 
			
		||||
 Submodule plugins/download-commands updated: 1cf69212a7...c0f1b84e49
									
								
							
		Reference in New Issue
	
	Block a user