Automatically link from plugin list screen to plugin settings screens

If a plugin implements a screen for administrating its settings that
is available under "#/x/<plugin-name>/settings" it is automatically
linked from the plugin list screen.

This avoids that each plugin has to register an own menu entry for its
settings screen.

Change-Id: I6d76f5286c936fd412572e484ee45edeb176a98e
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
Edwin Kempin
2014-02-04 16:08:25 +01:00
parent 6a06f1596b
commit 289f1a0522
6 changed files with 35 additions and 11 deletions

View File

@@ -1602,6 +1602,13 @@ public class MyPlugin extends PluginEntryPoint {
} }
---- ----
[[settings-screen]]
== Plugin Settings Screen
If a plugin implements a screen for administrating its settings that is
available under "#/x/<plugin-name>/settings" it is automatically linked
from the plugin list screen.
[[http]] [[http]]
== HTTP Servlets == HTTP Servlets

View File

@@ -61,6 +61,9 @@ public interface GerritResources extends ClientBundle {
@Source("readOnly.png") @Source("readOnly.png")
public ImageResource readOnly(); public ImageResource readOnly();
@Source("gear.png")
public ImageResource gear();
@Source("info.png") @Source("info.png")
public ImageResource info(); public ImageResource info();

View File

@@ -110,8 +110,10 @@ public interface AdminConstants extends Constants {
String plugins(); String plugins();
String pluginEnabled(); String pluginEnabled();
String pluginDisabled(); String pluginDisabled();
String pluginSettingsToolTip();
String columnPluginName(); String columnPluginName();
String columnPluginSettings();
String columnPluginVersion(); String columnPluginVersion();
String columnPluginStatus(); String columnPluginStatus();

View File

@@ -89,7 +89,9 @@ projectListQueryLink = Search for changes on this project
plugins = Plugins plugins = Plugins
pluginEnabled = Enabled pluginEnabled = Enabled
pluginDisabled = Disabled pluginDisabled = Disabled
pluginSettingsToolTip = Plugin Settings
columnPluginName = Plugin Name columnPluginName = Plugin Name
columnPluginSettings = Settings
columnPluginVersion = Version columnPluginVersion = Version
columnPluginStatus = Status columnPluginStatus = Status

View File

@@ -15,14 +15,17 @@
package com.google.gerrit.client.admin; package com.google.gerrit.client.admin;
import com.google.gerrit.client.Gerrit; import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.api.ExtensionScreen;
import com.google.gerrit.client.plugins.PluginInfo; import com.google.gerrit.client.plugins.PluginInfo;
import com.google.gerrit.client.plugins.PluginMap; import com.google.gerrit.client.plugins.PluginMap;
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.FancyFlexTable; import com.google.gerrit.client.ui.FancyFlexTable;
import com.google.gerrit.client.ui.InlineHyperlink;
import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter; import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.ImageResourceRenderer;
import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.Panel;
public class PluginListScreen extends PluginScreen { public class PluginListScreen extends PluginScreen {
@@ -60,13 +63,15 @@ public class PluginListScreen extends PluginScreen {
private class PluginTable extends FancyFlexTable<PluginInfo> { private class PluginTable extends FancyFlexTable<PluginInfo> {
PluginTable() { PluginTable() {
table.setText(0, 1, Util.C.columnPluginName()); table.setText(0, 1, Util.C.columnPluginName());
table.setText(0, 2, Util.C.columnPluginVersion()); table.setText(0, 2, Util.C.columnPluginSettings());
table.setText(0, 3, Util.C.columnPluginStatus()); table.setText(0, 3, Util.C.columnPluginVersion());
table.setText(0, 4, Util.C.columnPluginStatus());
final FlexCellFormatter fmt = table.getFlexCellFormatter(); final FlexCellFormatter fmt = table.getFlexCellFormatter();
fmt.addStyleName(0, 1, Gerrit.RESOURCES.css().dataHeader()); fmt.addStyleName(0, 1, Gerrit.RESOURCES.css().dataHeader());
fmt.addStyleName(0, 2, Gerrit.RESOURCES.css().dataHeader()); fmt.addStyleName(0, 2, Gerrit.RESOURCES.css().dataHeader());
fmt.addStyleName(0, 3, Gerrit.RESOURCES.css().dataHeader()); fmt.addStyleName(0, 3, Gerrit.RESOURCES.css().dataHeader());
fmt.addStyleName(0, 4, Gerrit.RESOURCES.css().dataHeader());
} }
void display(final PluginMap plugins) { void display(final PluginMap plugins) {
@@ -86,16 +91,20 @@ public class PluginListScreen extends PluginScreen {
if (plugin.disabled() || plugin.indexUrl() == null) { if (plugin.disabled() || plugin.indexUrl() == null) {
table.setText(row, 1, plugin.name()); table.setText(row, 1, plugin.name());
} else { } else {
table.setWidget( table.setWidget(row, 1, new Anchor(plugin.name(),
row, Gerrit.selfRedirect(plugin.indexUrl()), "_blank"));
1,
new Anchor( if (new ExtensionScreen(plugin.name() + "/settings").isFound()) {
plugin.name(), InlineHyperlink adminScreenLink = new InlineHyperlink();
Gerrit.selfRedirect(plugin.indexUrl()), adminScreenLink.setHTML(new ImageResourceRenderer().render(Gerrit.RESOURCES.gear()));
"_blank")); adminScreenLink.setTargetHistoryToken("/x/" + plugin.name() + "/settings");
adminScreenLink.setTitle(Util.C.pluginSettingsToolTip());
table.setWidget(row, 2, adminScreenLink);
}
} }
table.setText(row, 2, plugin.version());
table.setText(row, 3, plugin.disabled() table.setText(row, 3, plugin.version());
table.setText(row, 4, plugin.disabled()
? Util.C.pluginDisabled() ? Util.C.pluginDisabled()
: Util.C.pluginEnabled()); : Util.C.pluginEnabled());
@@ -103,6 +112,7 @@ public class PluginListScreen extends PluginScreen {
fmt.addStyleName(row, 1, Gerrit.RESOURCES.css().dataCell()); fmt.addStyleName(row, 1, Gerrit.RESOURCES.css().dataCell());
fmt.addStyleName(row, 2, Gerrit.RESOURCES.css().dataCell()); fmt.addStyleName(row, 2, Gerrit.RESOURCES.css().dataCell());
fmt.addStyleName(row, 3, Gerrit.RESOURCES.css().dataCell()); fmt.addStyleName(row, 3, Gerrit.RESOURCES.css().dataCell());
fmt.addStyleName(row, 4, Gerrit.RESOURCES.css().dataCell());
setRowItem(row, plugin); setRowItem(row, plugin);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B