Martin Mucha has uploaded a new change for review.

Change subject: webadmin: syntax sugar, simplified popup definition syntat
......................................................................

webadmin: syntax sugar, simplified popup definition syntat

Change-Id: I0d2a31583b16a70fb4763a0915a2641ebda9e1e7
Signed-off-by: Martin Mucha <[email protected]>
---
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SearchableDetailModelProviderBuilder.java
2 files changed, 122 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/42/33942/1

diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
index 389acdb..1436078 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
@@ -1,10 +1,10 @@
 package org.ovirt.engine.ui.webadmin.gin.uicommon;
 
+import org.ovirt.engine.core.common.businessentities.Permissions;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
-import org.ovirt.engine.core.common.businessentities.Permissions;
 import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet;
 import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
 import org.ovirt.engine.core.common.businessentities.network.NetworkView;
@@ -326,6 +326,19 @@
         };
     }
 
+    public SearchableDetailModelProvider<Permissions, NetworkListModel, 
PermissionListModel> getNetworkPermissionListProvider____(EventBus eventBus,
+            Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider,
+            Provider<PermissionsPopupPresenterWidget> popupProvider,
+            Provider<RolePermissionsRemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider) {
+
+        SearchableDetailModelProviderBuilder<NetworkListModel, 
PermissionListModel> builder =
+                
SearchableDetailModelProviderBuilder.createBuilder(PermissionListModel.class, 
NetworkListModel.class);
+
+        return 
builder.addConfirmPopupRule(builder.getDetailModel().getRemoveCommand(), 
removeConfirmPopupProvider)
+                
.addModelPopupRule(builder.getDetailModel().getRemoveCommand(), popupProvider)
+                .build(eventBus, defaultConfirmPopupProvider);
+    }
+
     @Override
     protected void configure() {
     }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SearchableDetailModelProviderBuilder.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SearchableDetailModelProviderBuilder.java
new file mode 100644
index 0000000..8aad746
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SearchableDetailModelProviderBuilder.java
@@ -0,0 +1,108 @@
+package org.ovirt.engine.ui.webadmin.gin.uicommon;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import 
org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget;
+import org.ovirt.engine.ui.common.uicommon.model.CommonModelManager;
+import 
org.ovirt.engine.ui.common.uicommon.model.SearchableDetailTabModelProvider;
+import org.ovirt.engine.ui.common.uicommon.model.UiCommonModelResolver;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Provider;
+
+public class SearchableDetailModelProviderBuilder<M extends 
ListWithDetailsModel, D extends SearchableListModel> {
+
+    private final Class<D> detailModelClass;
+    private final Class<M> mainModelClass;
+
+    private final Map<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends Model, ?>>> popupProviderMap;
+    private final Map<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>>> 
confirmPopupProviderMap;
+
+    public SearchableDetailModelProviderBuilder(Class<D> detailModelClass, 
Class<M> mainModelClass) {
+        this.detailModelClass = detailModelClass;
+        this.mainModelClass = mainModelClass;
+
+        confirmPopupProviderMap = new HashMap<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>>>();
+        popupProviderMap = new HashMap<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends Model, ?>>>();
+    }
+
+    public static <M extends ListWithDetailsModel, D extends 
SearchableListModel> SearchableDetailModelProviderBuilder<M, D> 
createBuilder(Class<D> detailModel, Class<M> mainModel) {
+        return new SearchableDetailModelProviderBuilder<M, D>(detailModel, 
mainModel);
+    }
+
+    public D getDetailModel() {
+        return 
UiCommonModelResolver.getDetailListModel(CommonModelManager.instance(), 
mainModelClass, detailModelClass);
+    }
+
+    public SearchableDetailModelProviderBuilder<M ,D> 
addModelPopupRule(UICommand uiCommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends Model, ?>> provider) {
+        popupProviderMap.put(uiCommand, provider);
+        return this;
+    }
+
+    public SearchableDetailModelProviderBuilder<M, D> 
addConfirmPopupRule(UICommand uiCommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>> 
provider) {
+        confirmPopupProviderMap.put(uiCommand, provider);
+        return this;
+    }
+
+    public <T> SearchableDetailTabModelProvider<T, M, D> build(EventBus 
eventBus, Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider) {
+        return new 
SearchableDetailTabModelProviderWithConfirmAndPopupProvider<T, M, D>(eventBus,
+                defaultConfirmPopupProvider,
+                mainModelClass,
+                detailModelClass,
+                popupProviderMap,
+                confirmPopupProviderMap
+                );
+    }
+
+    public static class 
SearchableDetailTabModelProviderWithConfirmAndPopupProvider<T, M extends 
ListWithDetailsModel, D extends SearchableListModel>
+            extends  SearchableDetailTabModelProvider<T, M, D>{
+
+        Map<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends Model, ?>>> popupProviderMap;
+        Map<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>>> 
confirmPopupProviderMap;
+
+        public 
SearchableDetailTabModelProviderWithConfirmAndPopupProvider(EventBus eventBus,
+                Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider,
+                Class<M> mainModelClass,
+                Class<D> detailModelClass,
+                Map<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends Model, ?>>> popupProviderMap,
+                Map<UICommand, Provider<? extends 
AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>>> 
confirmPopupProviderMap) {
+            super(eventBus, defaultConfirmPopupProvider, mainModelClass, 
detailModelClass);
+
+            this.popupProviderMap = popupProviderMap;
+            this.confirmPopupProviderMap = confirmPopupProviderMap;
+        }
+
+        @Override
+        public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> 
getModelPopup(D source,
+                UICommand lastExecutedCommand, Model windowModel) {
+
+            Provider<? extends AbstractModelBoundPopupPresenterWidget<? 
extends Model, ?>> popupProvider = popupProviderMap.get(lastExecutedCommand);
+
+            if (popupProvider != null) {
+                return popupProvider.get();
+            } else {
+                return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
+            }
+        }
+
+        @Override
+        public AbstractModelBoundPopupPresenterWidget<? extends 
ConfirmationModel, ?> getConfirmModelPopup(D source,
+                UICommand lastExecutedCommand) {
+
+            Provider<? extends AbstractModelBoundPopupPresenterWidget<? 
extends ConfirmationModel, ?>> confirmPopupProvider = 
confirmPopupProviderMap.get(lastExecutedCommand);
+            if (confirmPopupProvider != null) {
+                return confirmPopupProvider.get();
+            } else {
+                return super.getConfirmModelPopup(source, lastExecutedCommand);
+            }
+        }
+    }
+
+}


-- 
To view, visit http://gerrit.ovirt.org/33942
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0d2a31583b16a70fb4763a0915a2641ebda9e1e7
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Mucha <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to