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

Reply via email to