blob: a22a1e8be139c5bbbde69e7aa15681e19dba5916 [file] [log] [blame]
// Copyright (C) 2015 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.client.info;
import com.google.gerrit.client.rpc.NativeMap;
import com.google.gerrit.client.rpc.NativeString;
import com.google.gerrit.client.rpc.Natives;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayString;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class DownloadInfo extends JavaScriptObject {
public final List<String> schemes() {
return _schemes().sortedKeys();
}
public final List<String> archives() {
List<String> archives = new ArrayList<>();
archives.addAll(Natives.asList(_archives()));
return archives;
}
public final native DownloadSchemeInfo scheme(String n) /*-{ return this.schemes[n]; }-*/;
private native NativeMap<DownloadSchemeInfo> _schemes() /*-{ return this.schemes; }-*/;
private native JsArrayString _archives() /*-{ return this.archives; }-*/;
protected DownloadInfo() {}
public static class DownloadSchemeInfo extends JavaScriptObject {
public final List<String> commandNames() {
return _commands().sortedKeys();
}
public final Set<DownloadCommandInfo> commands(String project) {
Set<DownloadCommandInfo> commands = new HashSet<>();
for (String commandName : commandNames()) {
commands.add(new DownloadCommandInfo(commandName, command(commandName, project)));
}
return commands;
}
public final String command(String commandName, String project) {
return command(commandName).replaceAll("\\$\\{project\\}", project);
}
private static String projectBaseName(String project) {
return project.substring(project.lastIndexOf('/') + 1);
}
public final List<String> cloneCommandNames() {
return _cloneCommands().sortedKeys();
}
public final List<DownloadCommandInfo> cloneCommands(String project) {
List<String> commandNames = cloneCommandNames();
List<DownloadCommandInfo> commands = new ArrayList<>(commandNames.size());
for (String commandName : commandNames) {
commands.add(new DownloadCommandInfo(commandName, cloneCommand(commandName, project)));
}
return commands;
}
public final String cloneCommand(String commandName, String project) {
return cloneCommand(commandName)
.replaceAll("\\$\\{project\\}", project)
.replaceAll("\\$\\{project-base-name\\}", projectBaseName(project));
}
public final String getUrl(String project) {
return url().replaceAll("\\$\\{project\\}", project);
}
public final native String name() /*-{ return this.name; }-*/;
public final native String url() /*-{ return this.url; }-*/;
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 native NativeMap<NativeString> _commands() /*-{ return this.commands; }-*/;
private native NativeMap<NativeString> _cloneCommands() /*-{ return this.clone_commands; }-*/;
protected DownloadSchemeInfo() {}
}
public static class DownloadCommandInfo {
private final String name;
private final String command;
DownloadCommandInfo(String name, String command) {
this.name = name;
this.command = command;
}
public String name() {
return name;
}
public String command() {
return command;
}
}
}