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) { | ||||||
|  |             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()); |                   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
	 Edwin Kempin
					Edwin Kempin