Remove GWT UI This change allows the plugin to build and run with PolyGerrit. Configuration is available via the config file on the server. Change-Id: I8e8db97c7649268728712213f12cfcd94f0c0de2
diff --git a/BUILD b/BUILD index d3014d0..46269f5 100644 --- a/BUILD +++ b/BUILD
@@ -4,10 +4,8 @@ name = "menuextender", srcs = glob(["src/main/java/**/*.java"]), resources = glob(["src/main/**/*"]), - gwt_module = "com.googlesource.gerrit.plugins.menuextender.MenuExtenderPlugin", manifest_entries = [ "Gerrit-PluginName: menuextender", "Gerrit-Module: com.googlesource.gerrit.plugins.menuextender.Module", - "Gerrit-HttpModule: com.googlesource.gerrit.plugins.menuextender.HttpModule", ], )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/GetMenus.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/GetMenus.java index 4812faf..cf1e8ed 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/GetMenus.java +++ b/src/main/java/com/googlesource/gerrit/plugins/menuextender/GetMenus.java
@@ -19,7 +19,6 @@ import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.client.MenuItem; -import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.webui.TopMenu; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.config.SitePaths; @@ -37,7 +36,7 @@ import java.util.List; @RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER) -public class GetMenus implements RestReadView<ConfigResource>, TopMenu { +public class GetMenus implements TopMenu { public final static String SECTION_MENU_ITEM = "menuItem"; public final static String KEY_TOP_MENU = "topMenu"; public final static String KEY_NAME = "name"; @@ -57,11 +56,6 @@ } @Override - public List<TopMenu.MenuEntry> apply(ConfigResource rsrc) { - return getEntries(); - } - - @Override public List<MenuEntry> getEntries() { if (cfg == null || cfgSnapshot.isModified(cfgFile)) { cfgSnapshot = FileSnapshot.save(cfgFile);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/HttpModule.java deleted file mode 100644 index 5abb283..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/HttpModule.java +++ /dev/null
@@ -1,29 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender; - -import com.google.gerrit.extensions.registration.DynamicSet; -import com.google.gerrit.extensions.webui.GwtPlugin; -import com.google.gerrit.extensions.webui.WebUiPlugin; -import com.google.gerrit.httpd.plugins.HttpPluginModule; - -public class HttpModule extends HttpPluginModule { - - @Override - protected void configureServlets() { - DynamicSet.bind(binder(), WebUiPlugin.class) - .toInstance(new GwtPlugin("menuextender_plugin")); - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/MenuExtenderPlugin.gwt.xml b/src/main/java/com/googlesource/gerrit/plugins/menuextender/MenuExtenderPlugin.gwt.xml deleted file mode 100644 index fa082cc..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/MenuExtenderPlugin.gwt.xml +++ /dev/null
@@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2014 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. ---> -<module rename-to="menuextender_plugin"> - <!-- Inherit the core Web Toolkit stuff. --> - <inherits name="com.google.gwt.user.User"/> - <!-- Other module inherits --> - <inherits name="com.google.gerrit.Plugin"/> - <inherits name="com.google.gwt.http.HTTP"/> - <inherits name="com.google.gwt.json.JSON"/> - <inherits name='com.google.gwtexpui.clippy.Clippy'/> - <inherits name='com.google.gwtexpui.globalkey.GlobalKey'/> - <!-- Using GWT built-in themes adds a number of static --> - <!-- resources to the plugin. No theme inherits lines were --> - <!-- added in order to make this plugin as simple as possible --> - <!-- Specify the app entry point class. --> - <entry-point class="com.googlesource.gerrit.plugins.menuextender.client.MenuExtenderPlugin"/> - <stylesheet src="menuextender.css"/> -</module>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/Module.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/Module.java index e8c17d9..459e505 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/Module.java +++ b/src/main/java/com/googlesource/gerrit/plugins/menuextender/Module.java
@@ -14,10 +14,7 @@ package com.googlesource.gerrit.plugins.menuextender; -import static com.google.gerrit.server.config.ConfigResource.CONFIG_KIND; - import com.google.gerrit.extensions.registration.DynamicSet; -import com.google.gerrit.extensions.restapi.RestApiModule; import com.google.gerrit.extensions.webui.TopMenu; import com.google.inject.AbstractModule; @@ -26,13 +23,5 @@ @Override protected void configure() { DynamicSet.bind(binder(), TopMenu.class).to(GetMenus.class); - - install(new RestApiModule() { - @Override - protected void configure() { - get(CONFIG_KIND, "menus").to(GetMenus.class); - put(CONFIG_KIND, "menus").to(PutMenus.class); - } - }); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/PutMenus.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/PutMenus.java deleted file mode 100644 index f852bbc..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/PutMenus.java +++ /dev/null
@@ -1,92 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender; - -import static com.googlesource.gerrit.plugins.menuextender.GetMenus.KEY_ID; -import static com.googlesource.gerrit.plugins.menuextender.GetMenus.KEY_NAME; -import static com.googlesource.gerrit.plugins.menuextender.GetMenus.KEY_TARGET; -import static com.googlesource.gerrit.plugins.menuextender.GetMenus.KEY_TOP_MENU; -import static com.googlesource.gerrit.plugins.menuextender.GetMenus.SECTION_MENU_ITEM; - -import com.google.common.base.Strings; -import com.google.gerrit.common.data.GlobalCapability; -import com.google.gerrit.extensions.annotations.PluginName; -import com.google.gerrit.extensions.annotations.RequiresCapability; -import com.google.gerrit.extensions.client.MenuItem; -import com.google.gerrit.extensions.restapi.RestModifyView; -import com.google.gerrit.extensions.webui.TopMenu; -import com.google.gerrit.server.config.ConfigResource; -import com.google.gerrit.server.config.SitePaths; -import com.google.inject.Inject; - -import com.googlesource.gerrit.plugins.menuextender.PutMenus.Input; - -import org.eclipse.jgit.errors.ConfigInvalidException; -import org.eclipse.jgit.storage.file.FileBasedConfig; -import org.eclipse.jgit.util.FS; - -import java.io.IOException; -import java.util.List; - -@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER) -public class PutMenus implements RestModifyView<ConfigResource, Input> { - public static class Input { - List<TopMenu.MenuEntry> menus; - } - - private final String pluginName; - private final SitePaths sitePaths; - private final GetMenus getMenus; - - @Inject - public PutMenus(@PluginName String pluginName, SitePaths sitePaths, - GetMenus getMenus) { - this.pluginName = pluginName; - this.sitePaths = sitePaths; - this.getMenus = getMenus; - } - - @Override - public List<TopMenu.MenuEntry> apply(ConfigResource rsrc, Input input) - throws IOException, ConfigInvalidException { - FileBasedConfig cfg = - new FileBasedConfig( - sitePaths.etc_dir.resolve(pluginName + ".config").toFile(), - FS.DETECTED); - cfg.load(); - cfg.clear(); - if (input.menus != null) { - for (TopMenu.MenuEntry menuEntry : input.menus) { - for (MenuItem menuItem : menuEntry.items) { - if (menuItem.name == null) { - continue; - } - cfg.setString(SECTION_MENU_ITEM, menuItem.url, KEY_NAME, menuItem.name); - cfg.setString(SECTION_MENU_ITEM, menuItem.url, KEY_TOP_MENU, menuEntry.name); - - if (!Strings.isNullOrEmpty(menuItem.target)) { - cfg.setString(SECTION_MENU_ITEM, menuItem.url, KEY_TARGET, menuItem.target); - } - - if (!Strings.isNullOrEmpty(menuItem.id)) { - cfg.setString(SECTION_MENU_ITEM, menuItem.url, KEY_ID, menuItem.id); - } - } - } - } - cfg.save(); - return getMenus.getEntries(); - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenuConfigurationScreen.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenuConfigurationScreen.java deleted file mode 100644 index c5b601e..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenuConfigurationScreen.java +++ /dev/null
@@ -1,114 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gerrit.client.rpc.Natives; -import com.google.gerrit.plugin.client.Plugin; -import com.google.gerrit.plugin.client.rpc.RestApi; -import com.google.gerrit.plugin.client.screen.Screen; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.VerticalPanel; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class MenuConfigurationScreen extends VerticalPanel { - - static class Factory implements Screen.EntryPoint { - @Override - public void onLoad(Screen screen) { - screen.setPageTitle("Menu Configuration"); - screen.show(new MenuConfigurationScreen()); - } - } - - private final StringListPanel menusPanel; - - MenuConfigurationScreen() { - setStyleName("menuextender-panel"); - - Button save = new Button("Save"); - menusPanel = new StringListPanel("Menu Extensions", Arrays.asList( - "Top Menu*", "Menu Item*", "URL*", "Target", "ID Tag"), save, false); - add(menusPanel); - add(save); - - save.setEnabled(false); - save.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - doSave(); - } - }); - - new RestApi("config").id("server") - .view(Plugin.get().getPluginName(), "menus") - .get(new AsyncCallback<TopMenuList>() { - @Override - public void onSuccess(TopMenuList menuList) { - Plugin.get().refreshMenuBar(); - display(menuList); - } - - @Override - public void onFailure(Throwable caught) { - // never invoked - } - }); - } - - private void display(TopMenuList menuList) { - List<List<String>> valueList = new ArrayList<>(); - for (TopMenu menu : Natives.asList(menuList)) { - for (TopMenuItem item : Natives.asList(menu.getItems())) { - List<String> values = new ArrayList<>(); - values.add(menu.getName()); - values.add(item.getName()); - values.add(item.getUrl()); - values.add(item.getTarget()); - values.add(item.getId()); - valueList.add(values); - } - } - - menusPanel.display(valueList); - } - - private void doSave() { - List<TopMenu> menus = new ArrayList<>(); - for (List<String> v : menusPanel.getValues()) { - TopMenuItem item = TopMenuItem.create(v.get(1), v.get(2), v.get(3), v.get(4)); - menus.add(TopMenu.create(v.get(0), Arrays.asList(item))); - } - MenusInput input = MenusInput.create(menus); - new RestApi("config").id("server") - .view(Plugin.get().getPluginName(), "menus") - .put(input, new AsyncCallback<TopMenuList>() { - @Override - public void onSuccess(TopMenuList menuList) { - Plugin.get().refresh(); - } - - @Override - public void onFailure(Throwable caught) { - // never invoked - } - }); - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenuExtenderPlugin.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenuExtenderPlugin.java deleted file mode 100644 index be80617..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenuExtenderPlugin.java +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gerrit.plugin.client.Plugin; -import com.google.gerrit.plugin.client.PluginEntryPoint; -import com.google.gwt.core.client.GWT; - -public class MenuExtenderPlugin extends PluginEntryPoint { - public static final Resources RESOURCES = GWT.create(Resources.class); - - @Override - public void onPluginLoad() { - Plugin.get().screen("settings", new MenuConfigurationScreen.Factory()); - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenusInput.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenusInput.java deleted file mode 100644 index 6ffe23f..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/MenusInput.java +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gwt.core.client.JavaScriptObject; - -import java.util.List; - -public class MenusInput extends JavaScriptObject { - public static MenusInput create(List<TopMenu> menus) { - MenusInput i = createObject().cast(); - i.setMenus(menus); - return i; - } - - protected MenusInput() { - } - - final void setMenus(List<TopMenu> menus) { - initMenus(); - for (TopMenu m : menus) { - addMenu(m); - } - - } - final native void initMenus() /*-{ this.menus = []; }-*/; - final native void addMenu(TopMenu m) /*-{ this.menus.push(m); }-*/; -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/OnEditEnabler.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/OnEditEnabler.java deleted file mode 100644 index 608c94f..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/OnEditEnabler.java +++ /dev/null
@@ -1,184 +0,0 @@ -// Copyright (C) 2010 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.event.dom.client.ChangeEvent; -import com.google.gwt.event.dom.client.ChangeHandler; -import com.google.gwt.event.dom.client.FocusEvent; -import com.google.gwt.event.dom.client.FocusHandler; -import com.google.gwt.event.dom.client.KeyDownEvent; -import com.google.gwt.event.dom.client.KeyDownHandler; -import com.google.gwt.event.dom.client.KeyPressEvent; -import com.google.gwt.event.dom.client.KeyPressHandler; -import com.google.gwt.event.dom.client.MouseUpEvent; -import com.google.gwt.event.dom.client.MouseUpHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.event.shared.GwtEvent; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.FocusWidget; -import com.google.gwt.user.client.ui.ListBox; -import com.google.gwt.user.client.ui.TextBoxBase; -import com.google.gwt.user.client.ui.ValueBoxBase; - -import java.util.HashMap; -import java.util.Map; - - -/** Enables a FocusWidget (e.g. a Button) if an edit is detected from any - * registered input widget. - */ -public class OnEditEnabler implements KeyPressHandler, KeyDownHandler, - MouseUpHandler, ChangeHandler, ValueChangeHandler<Object> { - - private final FocusWidget widget; - private Map<TextBoxBase, String> strings = new HashMap<>(); - private String originalValue; - - - // The first parameter to the contructors must be the FocusWidget to enable, - // subsequent parameters are widgets to listenTo. - - public OnEditEnabler(final FocusWidget w, final TextBoxBase tb) { - this(w); - originalValue = tb.getValue().trim(); - listenTo(tb); - } - - public OnEditEnabler(final FocusWidget w, final ListBox lb) { - this(w); - listenTo(lb); - } - - public OnEditEnabler(final FocusWidget w, final CheckBox cb) { - this(w); - listenTo(cb); - } - - public OnEditEnabler(final FocusWidget w) { - widget = w; - } - - - // Register input widgets to be listened to - - public void listenTo(final TextBoxBase tb) { - strings.put(tb, tb.getText().trim()); - tb.addKeyPressHandler(this); - - // Is there another way to capture middle button X11 pastes in browsers - // which do not yet support ONPASTE events (Firefox)? - tb.addMouseUpHandler(this); - - // Resetting the "original text" on focus ensures that we are - // up to date with non-user updates of the text (calls to - // setText()...) and also up to date with user changes which - // occured after enabling "widget". - tb.addFocusHandler(new FocusHandler() { - @Override - public void onFocus(FocusEvent event) { - strings.put(tb, tb.getText().trim()); - } - }); - - // CTRL-V Pastes in Chrome seem only detectable via BrowserEvents or - // KeyDownEvents, the latter is better. - tb.addKeyDownHandler(this); - } - - public void listenTo(final ListBox lb) { - lb.addChangeHandler(this); - } - - @SuppressWarnings({"unchecked", "rawtypes"}) - public void listenTo(final CheckBox cb) { - cb.addValueChangeHandler((ValueChangeHandler) this); - } - - - // Handlers - - @Override - public void onKeyPress(final KeyPressEvent e) { - on(e); - } - - @Override - public void onKeyDown(final KeyDownEvent e) { - on(e); - } - - @Override - public void onMouseUp(final MouseUpEvent e) { - on(e); - } - - @Override - public void onChange(final ChangeEvent e) { - on(e); - } - - @SuppressWarnings("rawtypes") - @Override - public void onValueChange(final ValueChangeEvent e) { - on(e); - } - - private void on(final GwtEvent<?> e) { - if (widget.isEnabled() || - ! (e.getSource() instanceof FocusWidget) || - ! ((FocusWidget) e.getSource()).isEnabled() ) { - if (e.getSource() instanceof ValueBoxBase) { - final TextBoxBase box = ((TextBoxBase) e.getSource()); - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - @Override - public void execute() { - if (box.getValue().trim().equals(originalValue)) { - widget.setEnabled(false); - } - } - }); - } - return; - } - - if (e.getSource() instanceof TextBoxBase) { - onTextBoxBase((TextBoxBase) e.getSource()); - } else { - // For many widgets, we can assume that a change is an edit. If - // a widget does not work that way, it should be special cased - // above. - widget.setEnabled(true); - } - } - - private void onTextBoxBase(final TextBoxBase tb) { - // The text appears to not get updated until the handlers complete. - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - @Override - public void execute() { - String orig = strings.get(tb); - if (orig == null) { - orig = ""; - } - if (! orig.equals(tb.getText().trim())) { - widget.setEnabled(true); - } - } - }); - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/Resources.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/Resources.java deleted file mode 100644 index dd9a4ee..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/Resources.java +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gwt.resources.client.ClientBundle; -import com.google.gwt.resources.client.ImageResource; - -public interface Resources extends ClientBundle { - - @Source("arrowUp.png") - public ImageResource arrowUp(); - - @Source("arrowDown.png") - public ImageResource arrowDown(); - - @Source("info.png") - public ImageResource info(); - - @Source("listAdd.png") - public ImageResource listAdd(); -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/StringListPanel.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/StringListPanel.java deleted file mode 100644 index 174adc2..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/StringListPanel.java +++ /dev/null
@@ -1,295 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.event.dom.client.KeyPressEvent; -import com.google.gwt.event.dom.client.KeyPressHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.FocusWidget; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.ImageResourceRenderer; -import com.google.gwt.user.client.ui.Label; -import com.google.gwtexpui.globalkey.client.NpTextBox; - -import java.util.ArrayList; -import java.util.List; - -public class StringListPanel extends FlowPanel { - private final StringListTable t; - private final HorizontalPanel titlePanel; - protected final HorizontalPanel buttonPanel; - private final Button deleteButton; - private Image info; - protected FocusWidget widget; - - public StringListPanel(String title, List<String> fieldNames, FocusWidget w, - boolean autoSort) { - widget = w; - titlePanel = new HorizontalPanel(); - Label titleLabel = new Label(title); - titleLabel.setStyleName("menuextender-smallHeading"); - titlePanel.add(titleLabel); - add(titlePanel); - - t = new StringListTable(fieldNames, autoSort); - add(t); - - buttonPanel = new HorizontalPanel(); - buttonPanel.setStyleName("menuextender-stringListPanelButtons"); - deleteButton = new Button("Delete"); - deleteButton.setEnabled(false); - deleteButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - widget.setEnabled(true); - t.deleteChecked(); - } - }); - buttonPanel.add(deleteButton); - add(buttonPanel); - } - - public void display(List<List<String>> values) { - t.display(values); - } - - public void setInfo(String msg) { - if (info == null) { - info = new Image(MenuExtenderPlugin.RESOURCES.info()); - titlePanel.add(info); - } - info.setTitle(msg); - } - - public List<List<String>> getValues() { - return t.getValues(); - } - - private class StringListTable extends FlexTable { - private final List<NpTextBox> inputs; - private final boolean autoSort; - - StringListTable(List<String> names, boolean autoSort) { - this.autoSort = autoSort; - - Button addButton = - new Button(new ImageResourceRenderer().render(MenuExtenderPlugin.RESOURCES.listAdd())); - addButton.setTitle("Add"); - OnEditEnabler e = new OnEditEnabler(addButton); - inputs = new ArrayList<>(); - - setStyleName("menuextender-stringListTable"); - FlexCellFormatter fmt = getFlexCellFormatter(); - fmt.addStyleName(0, 0, "iconHeader"); - fmt.addStyleName(0, 0, "leftMostCell"); - for (int i = 0; i < names.size(); i++) { - fmt.addStyleName(0, i + 1, "dataHeader"); - setText(0, i + 1, names.get(i)); - - NpTextBox input = new NpTextBox(); - input.setVisibleLength(35); - input.addKeyPressHandler(new KeyPressHandler() { - @Override - public void onKeyPress(KeyPressEvent event) { - if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { - widget.setEnabled(true); - add(); - } - } - }); - inputs.add(input); - fmt.addStyleName(1, i + 1, "dataHeader"); - setWidget(1, i + 1, input); - e.listenTo(input); - } - addButton.setEnabled(false); - - addButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - widget.setEnabled(true); - add(); - } - }); - fmt.addStyleName(1, 0, "iconHeader"); - fmt.addStyleName(1, 0, "leftMostCell"); - setWidget(1, 0, addButton); - - if (!autoSort) { - fmt.addStyleName(0, names.size() + 1, "iconHeader"); - fmt.addStyleName(0, names.size() + 2, "iconHeader"); - fmt.addStyleName(1, names.size() + 1, "iconHeader"); - fmt.addStyleName(1, names.size() + 2, "iconHeader"); - } - } - - void display(List<List<String>> values) { - for (int row = 2; row < getRowCount(); row++) { - removeRow(row--); - } - int row = 2; - for (List<String> v : values) { - populate(row, v); - row++; - } - updateNavigationLinks(); - } - - List<List<String>> getValues() { - List<List<String>> values = new ArrayList<>(); - for (int row = 2; row < getRowCount(); row++) { - values.add(getRowItem(row)); - } - return values; - } - - protected List<String> getRowItem(int row) { - List<String> v = new ArrayList<>(); - for (int i = 0; i < inputs.size(); i++) { - v.add(getText(row, i + 1)); - } - return v; - } - - private void populate(final int row, List<String> values) { - FlexCellFormatter fmt = getFlexCellFormatter(); - fmt.addStyleName(row, 0, "leftMostCell"); - fmt.addStyleName(row, 0, "iconCell"); - CheckBox checkBox = new CheckBox(); - checkBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() { - @Override - public void onValueChange(ValueChangeEvent<Boolean> event) { - enableDelete(); - } - }); - setWidget(row, 0, checkBox); - for (int i = 0; i < values.size(); i++) { - fmt.addStyleName(row, i + 1, "dataCell"); - setText(row, i + 1, values.get(i)); - } - if (!autoSort) { - fmt.addStyleName(row, values.size() + 1, "iconCell"); - fmt.addStyleName(row, values.size() + 2, "dataCell"); - - Image down = new Image(MenuExtenderPlugin.RESOURCES.arrowDown()); - down.setTitle("Down"); - down.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - moveDown(row); - } - }); - setWidget(row, values.size() + 1, down); - - Image up = new Image(MenuExtenderPlugin.RESOURCES.arrowUp()); - up.setTitle("Up"); - up.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - moveUp(row); - } - }); - setWidget(row, values.size() + 2, up); - } - } - - void moveDown(int row) { - if (row < getRowCount() - 1) { - swap(row, row + 1); - } - } - - void moveUp(int row) { - if (row > 2) { - swap(row - 1, row); - } - } - - void swap(int row1, int row2) { - List<String> value = getRowItem(row1); - List<String> nextValue = getRowItem(row2); - populate(row1, nextValue); - populate(row2, value); - updateNavigationLinks(); - widget.setEnabled(true); - } - - private void updateNavigationLinks() { - if (!autoSort) { - for (int row = 2; row < getRowCount(); row++) { - getWidget(row, inputs.size() + 1).setVisible( - row < getRowCount() - 1); - getWidget(row, inputs.size() + 2).setVisible(row > 2); - } - } - } - - void add() { - List<String> values = new ArrayList<>(); - for (NpTextBox input : inputs) { - values.add(input.getValue().trim()); - input.setValue(""); - } - insert(values); - } - - void insert(List<String> v) { - int insertPos = getRowCount(); - if (autoSort) { - for (int row = 1; row < getRowCount(); row++) { - int compareResult = v.get(0).compareTo(getText(row, 1)); - if (compareResult < 0) { - insertPos = row; - break; - } else if (compareResult == 0) { - return; - } - } - } - insertRow(insertPos); - populate(insertPos, v); - updateNavigationLinks(); - } - - void enableDelete() { - for (int row = 2; row < getRowCount(); row++) { - if (((CheckBox) getWidget(row, 0)).getValue()) { - deleteButton.setEnabled(true); - return; - } - } - deleteButton.setEnabled(false); - } - - void deleteChecked() { - deleteButton.setEnabled(false); - for (int row = 2; row < getRowCount(); row++) { - if (((CheckBox) getWidget(row, 0)).getValue()) { - removeRow(row--); - } - } - updateNavigationLinks(); - } - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenu.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenu.java deleted file mode 100644 index d686cfd..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenu.java +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gwt.core.client.JavaScriptObject; -import com.google.gwt.core.client.JsArray; - -import java.util.List; - -public class TopMenu extends JavaScriptObject { - public static TopMenu create(String name, List<TopMenuItem> items) { - TopMenu m = createObject().cast(); - m.name(name); - m.setItems(items); - return m; - } - - protected TopMenu() { - } - - public final native String getName() /*-{ return this.name; }-*/; - public final native JsArray<TopMenuItem> getItems() /*-{ return this.items; }-*/; - - public final native void name(String n) /*-{ this.name = n }-*/; - - final void setItems(List<TopMenuItem> items) { - initItems(); - for (TopMenuItem i : items) { - addItem(i); - } - - } - final native void initItems() /*-{ this.items = []; }-*/; - final native void addItem(TopMenuItem i) /*-{ this.items.push(i); }-*/; -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenuItem.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenuItem.java deleted file mode 100644 index 4e90572..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenuItem.java +++ /dev/null
@@ -1,42 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gwt.core.client.JavaScriptObject; - -public class TopMenuItem extends JavaScriptObject { - public static TopMenuItem create(String name, String url, String target, - String id) { - TopMenuItem i = createObject().cast(); - i.name(name); - i.url(url); - i.target(target); - i.id(id); - return i; - } - - public final native String getName() /*-{ return this.name; }-*/; - public final native String getUrl() /*-{ return this.url; }-*/; - public final native String getTarget() /*-{ return this.target; }-*/; - public final native String getId() /*-{ return this.id; }-*/; - - public final native void name(String n) /*-{ this.name = n }-*/; - public final native void url(String u) /*-{ this.url = u }-*/; - public final native void target(String t) /*-{ this.target = t }-*/; - public final native void id(String i) /*-{ this.id = i }-*/; - - protected TopMenuItem() { - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenuList.java b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenuList.java deleted file mode 100644 index 7d46c98..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/TopMenuList.java +++ /dev/null
@@ -1,23 +0,0 @@ -// Copyright (C) 2014 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.googlesource.gerrit.plugins.menuextender.client; - -import com.google.gwt.core.client.JsArray; - -public class TopMenuList extends JsArray<TopMenu> { - - protected TopMenuList() { - } -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/arrowDown.png b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/arrowDown.png deleted file mode 100644 index ba67de7..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/arrowDown.png +++ /dev/null Binary files differ
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/arrowUp.png b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/arrowUp.png deleted file mode 100644 index 5674d6c..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/arrowUp.png +++ /dev/null Binary files differ
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/info.png b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/info.png deleted file mode 100644 index 8851b99..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/info.png +++ /dev/null Binary files differ
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/listAdd.png b/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/listAdd.png deleted file mode 100644 index 1aa7f09..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/client/listAdd.png +++ /dev/null Binary files differ
diff --git a/src/main/java/com/googlesource/gerrit/plugins/menuextender/public/menuextender.css b/src/main/java/com/googlesource/gerrit/plugins/menuextender/public/menuextender.css deleted file mode 100644 index bcdd84f..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/menuextender/public/menuextender.css +++ /dev/null
@@ -1,61 +0,0 @@ -.menuextender-panel { - border-spacing: 0px 5px; -} - -.menuextender-stringListTable { - border-collapse: separate; - border-spacing: 0; -} - -.menuextender-stringListTable .leftMostCell { - border-left: 1px solid #EEE; -} - -.menuextender-stringListTable .topMostCell { - border-top: 1px solid #EEE; -} - -.menuextender-stringListTable .dataHeader { - border: 1px solid #FFF; - padding: 2px 6px 1px; - background-color: #EEE; - font-style: italic; - white-space: nowrap; - color: textColor; -} - -.menuextender-stringListTable .iconHeader { - border-top: 1px solid #FFF; - border-bottom: 1px solid #FFF; - background-color: #EEE; -} - -.menuextender-stringListTable .dataCell { - padding-left: 5px; - padding-right: 5px; - border-right: 1px solid #EEE; - border-bottom: 1px solid #EEE; - vertical-align: middle; - height: 20px; -} - -.menuextender-stringListTable .iconCell { - width: 1px; - padding: 0px; - vertical-align: middle; - border-bottom: 1px solid #EEE; -} - -.menuextender-smallHeading { - margin-top: 5px; - font-weight: bold; -} - -.menuextender-stringListPanelButtons { - margin-left: 0.5em; -} -.menuextender-stringListPanelButtons .gwt-Button { - margin-right: 2em; - font-size: 7pt; - padding: 1px; -} \ No newline at end of file
diff --git a/src/main/resources/Documentation/rest-api-config.md b/src/main/resources/Documentation/rest-api-config.md deleted file mode 100644 index 78802f7..0000000 --- a/src/main/resources/Documentation/rest-api-config.md +++ /dev/null
@@ -1,109 +0,0 @@ -@PLUGIN@ - /config/ REST API -============================ - -This page describes the REST endpoints that are added by the @PLUGIN@ -plugin. - -Please also take note of the general information on the -[REST API](../../../Documentation/rest-api.html). - -<a id="config-endpoints"> Config Endpoints ------------------------------------------- - -### <a id="get-menus"> Get Menus -_GET /config/\{server\}/@PLUGIN@~menus/_ - -Gets the additional menus entries. - -#### Request - -``` - GET /config/server/@PLUGIN@~menus/ HTTP/1.0 -``` - -As response a list of [TopMenuEntryInfo](../../../Documentation/rest-api-config.html#top-menu-entry-info) -entities is returned that describe the additional menu entries. - -#### Response - -``` - HTTP/1.1 200 OK - Content-Disposition: attachment - Content-Type: application/json;charset=UTF-8 - - )]}' - [ - { - "name": "Gerrit", - "items": [ - { - "url": "http://code.google.com/p/gerrit/", - "name": "Homepage" - } - ] - } - ] -``` - -### <a id="set-menus"> Set Menus -_PUT /config/\{server\}/@PLUGIN@~menus/_ - -Sets the additional menus entries. Any additional menu entries which -have been set before are overwritten. - -The additional menu entries must be provided in the request body as a -[MenusInput](#menus-input) entity. - -#### Request - -``` - PUT /config/server/@PLUGIN@~menus/ HTTP/1.0 - Content-Type: application/json;charset=UTF-8 - - { - "menus": [ - { - "name": "Gerrit", - "items": [ - { - "url": "http://code.google.com/p/gerrit/", - "name": "Homepage" - } - ] - } - ] - } -``` - -As response a list of [TopMenuEntryInfo](../../../Documentation/rest-api-config.html#top-menu-entry-info) -entities is returned that describe the additional menu entries. - -#### Response - -``` - HTTP/1.1 200 OK - Content-Disposition: attachment - Content-Type: application/json;charset=UTF-8 - - )]}' - [ - { - "name": "Gerrit", - "items": [ - { - "url": "http://code.google.com/p/gerrit/", - "name": "Homepage" - } - ] - } - ] -``` - -<a id="json-entities">JSON Entities ------------------------------------ - -### <a id="menus-input"></a>MenusInput - -The `MenusInput` entity contains information about additional menu entries. - -* _menus_: List of [TopMenuEntryInfo](../../../Documentation/rest-api-config.html#top-menu-entry-info) entities.