Alexander Wels has uploaded a new change for review. Change subject: webadmin: UI plugin event handler ......................................................................
webadmin: UI plugin event handler - Changed the way UI plugin events are handled so they don't instantiate all the presenters at once. Change-Id: I83ad213a1dca8d31cf63c6b2c5f761f3242b43bc Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1155992 Signed-off-by: Alexander Wels <aw...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractTabPresenter.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/ActionButtonPluginHandler.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/DynamicTabContainerPresenter.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/MainContentPresenter.java 5 files changed, 117 insertions(+), 35 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/70/34570/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java index f53cafa..ba7c570 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.common.gin; +import org.ovirt.engine.ui.common.presenter.ActionButtonPluginHandler; import org.ovirt.engine.ui.common.utils.ConsoleOptionsFrontendPersisterImpl; import org.ovirt.engine.ui.common.utils.ConsoleUtilsImpl; import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister; @@ -14,6 +15,7 @@ protected void configure() { bind(ConsoleOptionsFrontendPersister.class).to(ConsoleOptionsFrontendPersisterImpl.class).in(Singleton.class); bind(ConsoleUtils.class).to(ConsoleUtilsImpl.class).in(Singleton.class); + bind(ActionButtonPluginHandler.class).in(Singleton.class); } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractTabPresenter.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractTabPresenter.java index 251d373..0c02c47 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractTabPresenter.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractTabPresenter.java @@ -1,13 +1,17 @@ package org.ovirt.engine.ui.common.presenter; +import java.util.List; + import org.ovirt.engine.ui.common.widget.action.ActionButtonDefinition; import org.ovirt.engine.ui.common.widget.table.ActionTable; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.GwtEvent.Type; +import com.google.inject.Inject; import com.gwtplatform.mvp.client.Presenter; import com.gwtplatform.mvp.client.View; -import com.gwtplatform.mvp.client.annotations.ProxyEvent; import com.gwtplatform.mvp.client.proxy.RevealContentHandler; import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace; @@ -21,24 +25,51 @@ */ public abstract class AbstractTabPresenter<V extends View, P extends TabContentProxyPlace<?>> extends Presenter<V, P> { + private ActionButtonPluginHandler actionButtonPluginHandler; + public AbstractTabPresenter(EventBus eventBus, V view, P proxy, Type<RevealContentHandler<?>> slot) { super(eventBus, view, proxy, slot); } + @Override + protected void onBind() { + super.onBind(); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + @Override + public void execute() { + List<ActionButtonDefinition<?>> pluginActionButtonList = actionButtonPluginHandler.getButtons(getProxy().getTargetHistoryToken()); + if (getTable() != null && pluginActionButtonList != null) { + for(ActionButtonDefinition<?> buttonDef: pluginActionButtonList) { + getTable().addActionButton((ActionButtonDefinition) buttonDef); + } + } + } + }); + //Register this handler for whichever tab opens first, it is bound before the plugin fires its events and + //before the actionButtonPluginHandler is instantiated and listening to events. + registerHandler(getEventBus().addHandler(AddTabActionButtonEvent.getType(), + new AddTabActionButtonEvent.AddTabActionButtonHandler() { + + @Override + public void onAddTabActionButton(AddTabActionButtonEvent event) { + if (getProxy().getTargetHistoryToken().equals(event.getHistoryToken())) { + if (getTable() != null) { + getTable().addActionButton((ActionButtonDefinition) event.getButtonDefinition()); + } + } + } + })); + + } /** * Returns the table widget provided by view or {@code null} if this widget isn't available. */ protected abstract ActionTable<?> getTable(); - @SuppressWarnings({ "unchecked", "rawtypes" }) - @ProxyEvent - public void onAddTabActionButton(AddTabActionButtonEvent event) { - if (getProxy().getTargetHistoryToken().equals(event.getHistoryToken())) { - if (getTable() != null) { - getTable().addActionButton((ActionButtonDefinition) event.getButtonDefinition()); - } - } + @Inject + public void setActionButtonPluginHandler(ActionButtonPluginHandler actionButtonPluginHandler) { + this.actionButtonPluginHandler = actionButtonPluginHandler; } - } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/ActionButtonPluginHandler.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/ActionButtonPluginHandler.java new file mode 100644 index 0000000..9b326fe --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/ActionButtonPluginHandler.java @@ -0,0 +1,37 @@ +package org.ovirt.engine.ui.common.presenter; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.ui.common.widget.action.ActionButtonDefinition; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class ActionButtonPluginHandler { + private final Map<String, List<ActionButtonDefinition<?>>> definitionMap = + new HashMap<String, List<ActionButtonDefinition<?>>>(); + + @Inject + public ActionButtonPluginHandler(EventBus eventBus) { + eventBus.addHandler(AddTabActionButtonEvent.getType(), + new AddTabActionButtonEvent.AddTabActionButtonHandler() { + + @Override + public void onAddTabActionButton(AddTabActionButtonEvent event) { + List<ActionButtonDefinition<?>> buttonDefinitionList = definitionMap.get(event.getHistoryToken()); + if (buttonDefinitionList == null) { + buttonDefinitionList = new ArrayList<ActionButtonDefinition<?>>(); + definitionMap.put(event.getHistoryToken(), buttonDefinitionList); + } + buttonDefinitionList.add(event.getButtonDefinition()); + } + }); + } + + public List<ActionButtonDefinition<?>> getButtons(String historyToken) { + return definitionMap.get(historyToken); + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/DynamicTabContainerPresenter.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/DynamicTabContainerPresenter.java index 8ef1259..9f0f217 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/DynamicTabContainerPresenter.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/DynamicTabContainerPresenter.java @@ -15,7 +15,6 @@ import com.gwtplatform.mvp.client.TabContainerPresenter; import com.gwtplatform.mvp.client.TabPanel; import com.gwtplatform.mvp.client.TabView; -import com.gwtplatform.mvp.client.annotations.ProxyEvent; import com.gwtplatform.mvp.client.proxy.Proxy; import com.gwtplatform.mvp.client.proxy.RevealContentHandler; import com.gwtplatform.mvp.client.proxy.TabContentProxy; @@ -84,21 +83,28 @@ return tabContentSlot; } - @ProxyEvent - public void onRedrawDynamicTabContainer(RedrawDynamicTabContainerEvent event) { - if (requestTabsEventType == event.getRequestTabsEventType()) { - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - @Override - public void execute() { - // Remove all tabs - getView().removeTabs(); + @Override + protected void onBind() { + super.onBind(); + registerHandler(getEventBus().addHandler(RedrawDynamicTabContainerEvent.getType(), + new RedrawDynamicTabContainerEvent.RedrawDynamicTabContainerHandler() { - // Re-add tabs in response to RequestTabsEvent - RequestTabsEvent.fire(DynamicTabContainerPresenter.this, - requestTabsEventType, DynamicTabContainerPresenter.this); + @Override + public void onRedrawDynamicTabContainer(RedrawDynamicTabContainerEvent event) { + if (requestTabsEventType == event.getRequestTabsEventType()) { + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + // Remove all tabs + getView().removeTabs(); + + // Re-add tabs in response to RequestTabsEvent + RequestTabsEvent.fire(DynamicTabContainerPresenter.this, + requestTabsEventType, DynamicTabContainerPresenter.this); + } + }); } - }); - } + } + })); } - } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/MainContentPresenter.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/MainContentPresenter.java index 075f71b..f6c39c1 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/MainContentPresenter.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/MainContentPresenter.java @@ -7,7 +7,6 @@ import com.gwtplatform.mvp.client.View; import com.gwtplatform.mvp.client.annotations.ContentSlot; import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; -import com.gwtplatform.mvp.client.annotations.ProxyEvent; import com.gwtplatform.mvp.client.proxy.Proxy; import com.gwtplatform.mvp.client.proxy.RevealContentHandler; @@ -37,15 +36,22 @@ super(eventBus, view, proxy, MainSectionPresenter.TYPE_SetMainContent); } - @ProxyEvent - public void onUpdateMainContentLayout(UpdateMainContentLayoutEvent event) { - boolean subTabPanelVisible = event.isSubTabPanelVisible(); - getView().setSubTabPanelVisible(subTabPanelVisible); + @Override + protected void onBind() { + super.onBind(); + registerHandler(getEventBus().addHandler(UpdateMainContentLayoutEvent.getType(), + new UpdateMainContentLayoutEvent.UpdateMainContentLayoutHandler() { - if (!subTabPanelVisible) { - // Clear sub tab panel slot to ensure consistent sub tab presenter lifecycle - clearSlot(TYPE_SetSubTabPanelContent); - } + @Override + public void onUpdateMainContentLayout(UpdateMainContentLayoutEvent event) { + boolean subTabPanelVisible = event.isSubTabPanelVisible(); + getView().setSubTabPanelVisible(subTabPanelVisible); + + if (!subTabPanelVisible) { + // Clear sub tab panel slot to ensure consistent sub tab presenter lifecycle + clearSlot(TYPE_SetSubTabPanelContent); + } + } + })); } - } -- To view, visit http://gerrit.ovirt.org/34570 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I83ad213a1dca8d31cf63c6b2c5f761f3242b43bc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <aw...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches