Support int/long project specific plugin parameters for edit in UI
Change-Id: Id406537bf81d749a953f12d94bd6214c52262827 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
@@ -1295,7 +1295,8 @@ parameter.
|
|||||||
|`display_name` |optional|
|
|`display_name` |optional|
|
||||||
The display name of the configuration parameter.
|
The display name of the configuration parameter.
|
||||||
|`type` ||
|
|`type` ||
|
||||||
The type of the configuration parameter, can be `STRING`.
|
The type of the configuration parameter, can be `STRING`, `INT` or
|
||||||
|
`LONG`.
|
||||||
|`value` |optional|
|
|`value` |optional|
|
||||||
The value of the configuration parameter as string.
|
The value of the configuration parameter as string.
|
||||||
|===============================
|
|===============================
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import com.google.gerrit.client.rpc.GerritCallback;
|
|||||||
import com.google.gerrit.client.rpc.NativeMap;
|
import com.google.gerrit.client.rpc.NativeMap;
|
||||||
import com.google.gerrit.client.rpc.Natives;
|
import com.google.gerrit.client.rpc.Natives;
|
||||||
import com.google.gerrit.client.rpc.ScreenLoadCallback;
|
import com.google.gerrit.client.rpc.ScreenLoadCallback;
|
||||||
|
import com.google.gerrit.client.ui.NpIntTextBox;
|
||||||
import com.google.gerrit.client.ui.OnEditEnabler;
|
import com.google.gerrit.client.ui.OnEditEnabler;
|
||||||
import com.google.gerrit.client.ui.SmallHeading;
|
import com.google.gerrit.client.ui.SmallHeading;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand;
|
||||||
@@ -364,7 +365,9 @@ public class ProjectInfoScreen extends ProjectScreen {
|
|||||||
for (ConfigParameterInfo param : Natives.asList(pluginConfig.values())) {
|
for (ConfigParameterInfo param : Natives.asList(pluginConfig.values())) {
|
||||||
FocusWidget w;
|
FocusWidget w;
|
||||||
if ("STRING".equals(param.type())) {
|
if ("STRING".equals(param.type())) {
|
||||||
w = renderTextBox(g, param);
|
w = renderTextBox(g, param, false);
|
||||||
|
} else if ("INT".equals(param.type()) || "LONG".equals(param.type())) {
|
||||||
|
w = renderTextBox(g, param, true);
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -375,8 +378,9 @@ public class ProjectInfoScreen extends ProjectScreen {
|
|||||||
enableForm();
|
enableForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextBox renderTextBox(LabeledWidgetsGrid g, ConfigParameterInfo param) {
|
private TextBox renderTextBox(LabeledWidgetsGrid g,
|
||||||
NpTextBox textBox = new NpTextBox();
|
ConfigParameterInfo param, boolean numbersOnly) {
|
||||||
|
NpTextBox textBox = numbersOnly ? new NpIntTextBox() : new NpTextBox();
|
||||||
textBox.setValue(param.value());
|
textBox.setValue(param.value());
|
||||||
g.add(param.displayName() != null
|
g.add(param.displayName() != null
|
||||||
? param.displayName() : param.name(), textBox);
|
? param.displayName() : param.name(), textBox);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import com.google.gerrit.extensions.annotations.ExtensionPoint;
|
|||||||
@ExtensionPoint
|
@ExtensionPoint
|
||||||
public class ProjectConfigEntry {
|
public class ProjectConfigEntry {
|
||||||
public enum Type {
|
public enum Type {
|
||||||
STRING
|
STRING, INT, LONG
|
||||||
}
|
}
|
||||||
|
|
||||||
private final String displayName;
|
private final String displayName;
|
||||||
@@ -27,9 +27,21 @@ public class ProjectConfigEntry {
|
|||||||
private final Type type;
|
private final Type type;
|
||||||
|
|
||||||
public ProjectConfigEntry(String displayName, String defaultValue) {
|
public ProjectConfigEntry(String displayName, String defaultValue) {
|
||||||
|
this(displayName, defaultValue, Type.STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProjectConfigEntry(String displayName, int defaultValue) {
|
||||||
|
this(displayName, Integer.toString(defaultValue), Type.INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProjectConfigEntry(String displayName, long defaultValue) {
|
||||||
|
this(displayName, Long.toString(defaultValue), Type.LONG);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ProjectConfigEntry(String displayName, String defaultValue, Type type) {
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
this.defaultValue = defaultValue;
|
this.defaultValue = defaultValue;
|
||||||
this.type = Type.STRING;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDisplayName() {
|
public String getDisplayName() {
|
||||||
|
|||||||
@@ -190,7 +190,27 @@ public class PutConfig implements RestModifyView<ProjectResource, Input> {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (v.getValue() != null) {
|
if (v.getValue() != null) {
|
||||||
cfg.setString(v.getKey(), v.getValue());
|
try {
|
||||||
|
switch (projectConfigEntry.getType()) {
|
||||||
|
case INT:
|
||||||
|
cfg.setInt(v.getKey(), Integer.parseInt(v.getValue()));
|
||||||
|
break;
|
||||||
|
case LONG:
|
||||||
|
cfg.setLong(v.getKey(), Long.parseLong(v.getValue()));
|
||||||
|
break;
|
||||||
|
case STRING:
|
||||||
|
cfg.setString(v.getKey(), v.getValue());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
log.warn(String.format(
|
||||||
|
"The type '%s' of parameter '%s' is not supported.",
|
||||||
|
projectConfigEntry.getType().name(), v.getKey()));
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
throw new BadRequestException(String.format(
|
||||||
|
"The value '%s' of config parameter '%s' of plugin '%s' is invalid: %s",
|
||||||
|
v.getValue(), v.getKey(), pluginName, ex.getMessage()));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cfg.unset(v.getKey());
|
cfg.unset(v.getKey());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user