Merge "Merge branch 'stable-2.14'"
This commit is contained in:
commit
7f14019e1a
@ -16,7 +16,7 @@ package com.google.gerrit.pgm.init.api;
|
|||||||
|
|
||||||
import com.google.gerrit.common.Die;
|
import com.google.gerrit.common.Die;
|
||||||
import java.io.Console;
|
import java.io.Console;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.util.EnumSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/** Console based interaction with the invoking user. */
|
/** Console based interaction with the invoking user. */
|
||||||
@ -37,20 +37,6 @@ public abstract class ConsoleUI {
|
|||||||
return new Die("aborted by user");
|
return new Die("aborted by user");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Obtain all values from an enumeration. */
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
protected static <T extends Enum<?>> T[] all(final T value) {
|
|
||||||
try {
|
|
||||||
return (T[]) value.getDeclaringClass().getMethod("values").invoke(null);
|
|
||||||
} catch (IllegalArgumentException
|
|
||||||
| NoSuchMethodException
|
|
||||||
| InvocationTargetException
|
|
||||||
| IllegalAccessException
|
|
||||||
| SecurityException e) {
|
|
||||||
throw new IllegalArgumentException("Cannot obtain enumeration values", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return true if this is a batch UI that has no user interaction. */
|
/** @return true if this is a batch UI that has no user interaction. */
|
||||||
public abstract boolean isBatch();
|
public abstract boolean isBatch();
|
||||||
|
|
||||||
@ -95,7 +81,8 @@ public abstract class ConsoleUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Prompt the user to make a choice from an enumeration's values. */
|
/** Prompt the user to make a choice from an enumeration's values. */
|
||||||
public abstract <T extends Enum<?>> T readEnum(T def, String fmt, Object... args);
|
public abstract <T extends Enum<?>, A extends EnumSet<? extends T>> T readEnum(
|
||||||
|
T def, A options, String fmt, Object... args);
|
||||||
|
|
||||||
private static class Interactive extends ConsoleUI {
|
private static class Interactive extends ConsoleUI {
|
||||||
private final Console console;
|
private final Console console;
|
||||||
@ -208,9 +195,9 @@ public abstract class ConsoleUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends Enum<?>> T readEnum(T def, String fmt, Object... args) {
|
public <T extends Enum<?>, A extends EnumSet<? extends T>> T readEnum(
|
||||||
|
T def, A options, String fmt, Object... args) {
|
||||||
final String prompt = String.format(fmt, args);
|
final String prompt = String.format(fmt, args);
|
||||||
final T[] options = all(def);
|
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
String r = console.readLine("%-30s [%s/?]: ", prompt, def.toString());
|
String r = console.readLine("%-30s [%s/?]: ", prompt, def.toString());
|
||||||
if (r == null) {
|
if (r == null) {
|
||||||
@ -277,7 +264,8 @@ public abstract class ConsoleUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends Enum<?>> T readEnum(T def, String fmt, Object... args) {
|
public <T extends Enum<?>, A extends EnumSet<? extends T>> T readEnum(
|
||||||
|
T def, A options, String fmt, Object... args) {
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import com.google.inject.assistedinject.Assisted;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/** Helper to edit a section of the configuration files. */
|
/** Helper to edit a section of the configuration files. */
|
||||||
@ -110,15 +111,28 @@ public class Section {
|
|||||||
return site.resolve(string(title, name, defValue));
|
return site.resolve(string(title, name, defValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends Enum<?>> T select(final String title, final String name, final T defValue) {
|
public <T extends Enum<?>, E extends EnumSet<? extends T>> T select(
|
||||||
|
String title, String name, T defValue) {
|
||||||
return select(title, name, defValue, false);
|
return select(title, name, defValue, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends Enum<?>> T select(
|
public <T extends Enum<?>, E extends EnumSet<? extends T>> T select(
|
||||||
final String title, final String name, final T defValue, final boolean nullIfDefault) {
|
String title, String name, T defValue, boolean nullIfDefault) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
E allowedValues = (E) EnumSet.allOf(defValue.getClass());
|
||||||
|
return select(title, name, defValue, allowedValues, nullIfDefault);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends Enum<?>, E extends EnumSet<? extends T>> T select(
|
||||||
|
String title, String name, T defValue, E allowedValues) {
|
||||||
|
return select(title, name, defValue, allowedValues, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends Enum<?>, A extends EnumSet<? extends T>> T select(
|
||||||
|
String title, String name, T defValue, A allowedValues, final boolean nullIfDefault) {
|
||||||
final boolean set = get(name) != null;
|
final boolean set = get(name) != null;
|
||||||
T oldValue = flags.cfg.getEnum(section, subsection, name, defValue);
|
T oldValue = flags.cfg.getEnum(section, subsection, name, defValue);
|
||||||
T newValue = ui.readEnum(oldValue, "%s", title);
|
T newValue = ui.readEnum(oldValue, allowedValues, "%s", title);
|
||||||
if (nullIfDefault && newValue == defValue) {
|
if (nullIfDefault && newValue == defValue) {
|
||||||
newValue = null;
|
newValue = null;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user