Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Refactor QoS view side
......................................................................

webadmin: Refactor QoS view side

The business entity and model aspects of QoS were recently refactored
into a reasonable class hierarchy, this does the same for the view
aspect of things to ease implementation of additional QoS dialogs
(e.g. host network QoS).

Change-Id: Ia6c3be8a4ed4378ef10512fbef3e5a7e17f521a4
Signed-off-by: Lior Vernia <[email protected]>
---
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/StorageQosPopupPresenterWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.ui.xml
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.java
R 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.ui.xml
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosWidget.java
10 files changed, 244 insertions(+), 192 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/34126/1

diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
index 9768854..a7c05f7 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
@@ -8,7 +8,6 @@
 import com.google.gwt.event.shared.EventBus;
 import com.google.inject.Inject;
 
-
 public class CpuQosPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<QosModel<CpuQos, CpuQosParametersModel>, 
CpuQosPopupPresenterWidget.ViewDef> {
 
     public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<QosModel<CpuQos, 
CpuQosParametersModel>> {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/StorageQosPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/StorageQosPopupPresenterWidget.java
index 32d84b4..b9ff205 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/StorageQosPopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/StorageQosPopupPresenterWidget.java
@@ -8,7 +8,6 @@
 import com.google.gwt.event.shared.EventBus;
 import com.google.inject.Inject;
 
-
 public class StorageQosPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<QosModel<StorageQos, 
StorageQosParametersModel>, StorageQosPopupPresenterWidget.ViewDef> {
 
     public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<QosModel<StorageQos, 
StorageQosParametersModel>> {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
index 51c9529..0f7dc6a 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
@@ -1,99 +1,35 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
 
-import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
-import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
-import org.ovirt.engine.ui.common.idhandler.WithElementId;
-import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
-import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
-import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
-import 
org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor;
-import 
org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
-import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.CpuQosParametersModel;
 import org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
 import org.ovirt.engine.ui.webadmin.ApplicationResources;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.CpuQosPopupPresenterWidget;
 
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
 import com.google.gwt.editor.client.SimpleBeanEditorDriver;
 import com.google.gwt.event.shared.EventBus;
-import com.google.gwt.uibinder.client.UiBinder;
-import com.google.gwt.uibinder.client.UiField;
 import com.google.inject.Inject;
 
-public class CpuQosPopupView extends 
AbstractModelBoundPopupView<QosModel<CpuQos, CpuQosParametersModel>>
-        implements CpuQosPopupPresenterWidget.ViewDef {
-
-    @UiField(provided = true)
-    @Path(value = "dataCenters.selectedItem")
-    @WithElementId
-    ListModelListBoxEditor<StoragePool> dataCenterEditor;
-
-    @UiField
-    @Path(value = "name.entity")
-    @WithElementId
-    StringEntityModelTextBoxEditor nameEditor;
-
-    @UiField
-    @Path(value = "description.entity")
-    @WithElementId
-    StringEntityModelTextBoxEditor descriptionEditor;
-
-    @UiField
-    @Path(value = "qosParametersModel.cpuLimit.entity")
-    @WithElementId
-    IntegerEntityModelTextBoxEditor cpuLimitEditor;
+public class CpuQosPopupView extends QosPopupView<CpuQos, 
CpuQosParametersModel> implements CpuQosPopupPresenterWidget.ViewDef {
 
     interface Driver extends SimpleBeanEditorDriver<QosModel<CpuQos, 
CpuQosParametersModel>, CpuQosPopupView> {
     }
 
-    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
CpuQosPopupView> {
-        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
-    }
-
-    interface ViewIdHandler extends ElementIdHandler<CpuQosPopupView> {
-        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
-    }
-
-    private final Driver driver = GWT.create(Driver.class);
-
     @Inject
     public CpuQosPopupView(EventBus eventBus, ApplicationResources resources, 
ApplicationConstants constants) {
-        super(eventBus, resources);
-        initListBoxEditors();
-        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
-        ViewIdHandler.idHandler.generateAndSetIds(this);
-
-        localize(constants);
-        driver.initialize(this);
-    }
-
-    private void initListBoxEditors() {
-        dataCenterEditor = new ListModelListBoxEditor<StoragePool>(new 
NullSafeRenderer<StoragePool>() {
-            @Override
-            public String renderNullSafe(StoragePool dataCenter) {
-                return dataCenter.getName();
-            }
-        });
-    }
-
-    private void localize(ApplicationConstants constants) {
-        nameEditor.setLabel(constants.storageQosName());
-        descriptionEditor.setLabel(constants.storageQosDescription());
-        dataCenterEditor.setLabel(constants.dataCenterQosPopup());
-        cpuLimitEditor.setLabel(constants.cpuQosCpuLimit());
+        super(eventBus, resources, constants);
     }
 
     @Override
-    public void edit(QosModel<CpuQos, CpuQosParametersModel> object) {
-        driver.edit(object);
+    protected void createQosWidget() {
+        qosWidget = new CpuQosWidget(constants);
     }
 
     @Override
-    public QosModel<CpuQos, CpuQosParametersModel> flush() {
-        return driver.flush();
+    protected SimpleBeanEditorDriver<QosModel<CpuQos, CpuQosParametersModel>, 
QosPopupView<CpuQos, CpuQosParametersModel>> createDriver() {
+        return GWT.create(Driver.class);
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.java
new file mode 100644
index 0000000..562fa87
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
+
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+import org.ovirt.engine.ui.common.idhandler.WithElementId;
+import 
org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.CpuQosParametersModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.FlowPanel;
+
+public class CpuQosWidget extends QosWidget<CpuQos, CpuQosParametersModel> {
+
+    interface Driver extends SimpleBeanEditorDriver<CpuQosParametersModel, 
CpuQosWidget> {
+    }
+
+    interface ViewUiBinder extends UiBinder<FlowPanel, CpuQosWidget> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    interface ViewIdHandler extends ElementIdHandler<CpuQosWidget> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    @UiField
+    @Path(value = "cpuLimit.entity")
+    @WithElementId
+    IntegerEntityModelTextBoxEditor cpuLimitEditor;
+
+    public CpuQosWidget(ApplicationConstants constants) {
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+
+        cpuLimitEditor.setLabel(constants.cpuQosCpuLimit());
+
+        driver = GWT.create(Driver.class);
+        driver.initialize(this);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.ui.xml
new file mode 100644
index 0000000..60bb64d
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosWidget.ui.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+       xmlns:g="urn:import:com.google.gwt.user.client.ui" 
xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor.generic">
+
+    <ui:style>
+        .decorator {
+            margin: 5px;
+           }
+    </ui:style>
+
+    <g:FlowPanel ui:field="mainPanel" >
+        <e:IntegerEntityModelTextBoxEditor ui:field="cpuLimitEditor" 
addStyleNames="{style.decorator}" />
+    </g:FlowPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.java
new file mode 100644
index 0000000..32c75db
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.java
@@ -0,0 +1,104 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
+
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.qos.QosBase;
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+import org.ovirt.engine.ui.common.idhandler.WithElementId;
+import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
+import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
+import 
org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
+import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
+import org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosParametersModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+
+public abstract class QosPopupView<T extends QosBase, P extends 
QosParametersModel<T>> extends AbstractModelBoundPopupView<QosModel<T, P>> {
+
+    @UiField(provided = true)
+    @Path(value = "dataCenters.selectedItem")
+    @WithElementId
+    ListModelListBoxEditor<StoragePool> dataCenterEditor;
+
+    @UiField
+    @Path(value = "name.entity")
+    @WithElementId
+    StringEntityModelTextBoxEditor nameEditor;
+
+    @UiField
+    @Path(value = "description.entity")
+    @WithElementId
+    StringEntityModelTextBoxEditor descriptionEditor;
+
+    @UiField(provided = true)
+    @Ignore
+    @WithElementId
+    protected QosWidget<T, P> qosWidget;
+
+    protected final ApplicationConstants constants;
+
+    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, QosPopupView<?, 
?>> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    interface ViewIdHandler extends ElementIdHandler<QosPopupView<?, ?>> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    private final SimpleBeanEditorDriver<QosModel<T, P>, QosPopupView<T, P>> 
driver;
+
+    public QosPopupView(EventBus eventBus, ApplicationResources resources, 
ApplicationConstants constants) {
+        super(eventBus, resources);
+        this.constants = constants;
+
+        initListBoxEditors();
+        createQosWidget();
+
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+
+        localize();
+
+        driver = createDriver();
+        driver.initialize(this);
+    }
+
+    private void initListBoxEditors() {
+        dataCenterEditor = new ListModelListBoxEditor<StoragePool>(new 
NullSafeRenderer<StoragePool>() {
+            @Override
+            public String renderNullSafe(StoragePool dataCenter) {
+                return dataCenter.getName();
+            }
+        });
+    }
+
+    private void localize() {
+        nameEditor.setLabel(constants.storageQosName());
+        descriptionEditor.setLabel(constants.storageQosDescription());
+        dataCenterEditor.setLabel(constants.dataCenterQosPopup());
+    }
+
+    @Override
+    public void edit(QosModel<T, P> object) {
+        driver.edit(object);
+        qosWidget.edit(object.getQosParametersModel());
+    }
+
+    @Override
+    public QosModel<T, P> flush() {
+        qosWidget.flush();
+        return driver.flush();
+    }
+
+    abstract protected void createQosWidget();
+
+    abstract protected SimpleBeanEditorDriver<QosModel<T, P>, QosPopupView<T, 
P>> createDriver();
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.ui.xml
similarity index 95%
rename from 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.ui.xml
rename to 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.ui.xml
index e71cdd8..ae2877b 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosPopupView.ui.xml
@@ -20,7 +20,7 @@
                                        <ge:StringEntityModelTextBoxEditor 
ui:field="nameEditor" />
                                        <ge:StringEntityModelTextBoxEditor 
ui:field="descriptionEditor" />
                                </g:FlowPanel>
-                               <q:StorageQosWidget ui:field="qosWidget" />
+                               <q:QosWidget ui:field="qosWidget" />
                        </g:FlowPanel>
                </d:content>
        </d:SimpleDialogPanel>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosWidget.java
new file mode 100644
index 0000000..65146bf
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/QosWidget.java
@@ -0,0 +1,59 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
+
+import org.ovirt.engine.core.common.businessentities.qos.QosBase;
+import 
org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosParametersModel;
+import org.ovirt.engine.ui.uicompat.Event;
+import org.ovirt.engine.ui.uicompat.IEventListener;
+import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
+
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.FlowPanel;
+
+public abstract class QosWidget<T extends QosBase, P extends 
QosParametersModel<T>> extends AbstractModelBoundPopupWidget<P> {
+
+    @UiField
+    FlowPanel mainPanel;
+
+    protected SimpleBeanEditorDriver<P, QosWidget<T, P>> driver;
+
+    private QosParametersModel<? extends QosBase> model;
+    private final IEventListener<PropertyChangedEventArgs> 
availabilityListener;
+
+    public QosWidget() {
+        availabilityListener = new IEventListener<PropertyChangedEventArgs>() {
+
+            @Override
+            public void eventRaised(Event<? extends PropertyChangedEventArgs> 
ev,
+                    Object sender,
+                    PropertyChangedEventArgs args) {
+                if ("IsAvailable".equals(args.propertyName)) { //$NON-NLS-1$
+                    toggleVisibility();
+                }
+            }
+        };
+    }
+
+    private void toggleVisibility() {
+        mainPanel.setVisible(model.getIsAvailable());
+    }
+
+    @Override
+    public void edit(P model) {
+        driver.edit(model);
+
+        if (this.model != null) {
+            
this.model.getPropertyChangedEvent().removeListener(availabilityListener);
+        }
+        this.model = model;
+        model.getPropertyChangedEvent().addListener(availabilityListener);
+        toggleVisibility();
+    }
+
+    @Override
+    public P flush() {
+        return driver.flush();
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
index 6457a04..ed5952c 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
@@ -1,100 +1,35 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
 
-import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.qos.StorageQos;
-import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
-import org.ovirt.engine.ui.common.idhandler.WithElementId;
-import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
-import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
-import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
-import 
org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
-import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
 import org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.StorageQosParametersModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
 import org.ovirt.engine.ui.webadmin.ApplicationResources;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.StorageQosPopupPresenterWidget;
 
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
 import com.google.gwt.editor.client.SimpleBeanEditorDriver;
 import com.google.gwt.event.shared.EventBus;
-import com.google.gwt.uibinder.client.UiBinder;
-import com.google.gwt.uibinder.client.UiField;
 import com.google.inject.Inject;
 
-public class StorageQosPopupView extends 
AbstractModelBoundPopupView<QosModel<StorageQos, StorageQosParametersModel>>
-        implements StorageQosPopupPresenterWidget.ViewDef {
-
-    @UiField(provided = true)
-    @Path(value = "dataCenters.selectedItem")
-    @WithElementId
-    ListModelListBoxEditor<StoragePool> dataCenterEditor;
-
-    @UiField
-    @Path(value = "name.entity")
-    @WithElementId
-    StringEntityModelTextBoxEditor nameEditor;
-
-    @UiField
-    @Path(value = "description.entity")
-    @WithElementId
-    StringEntityModelTextBoxEditor descriptionEditor;
-
-    @UiField(provided = true)
-    @Ignore
-    @WithElementId
-    StorageQosWidget qosWidget;
+public class StorageQosPopupView extends QosPopupView<StorageQos, 
StorageQosParametersModel> implements StorageQosPopupPresenterWidget.ViewDef {
 
     interface Driver extends SimpleBeanEditorDriver<QosModel<StorageQos, 
StorageQosParametersModel>, StorageQosPopupView> {
     }
 
-    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
StorageQosPopupView> {
-        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
-    }
-
-    interface ViewIdHandler extends ElementIdHandler<StorageQosPopupView> {
-        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
-    }
-
-    private final Driver driver = GWT.create(Driver.class);
-
     @Inject
     public StorageQosPopupView(EventBus eventBus, ApplicationResources 
resources, ApplicationConstants constants) {
-        super(eventBus, resources);
-        initListBoxEditors();
+        super(eventBus, resources, constants);
+    }
+
+    @Override
+    protected void createQosWidget() {
         qosWidget = new StorageQosWidget(constants);
-        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
-        ViewIdHandler.idHandler.generateAndSetIds(this);
-
-        localize(constants);
-        driver.initialize(this);
-    }
-
-    private void initListBoxEditors() {
-        dataCenterEditor = new ListModelListBoxEditor<StoragePool>(new 
NullSafeRenderer<StoragePool>() {
-            @Override
-            public String renderNullSafe(StoragePool dataCenter) {
-                return dataCenter.getName();
-            }
-        });
-    }
-
-    private void localize(ApplicationConstants constants) {
-        nameEditor.setLabel(constants.storageQosName());
-        descriptionEditor.setLabel(constants.storageQosDescription());
-        dataCenterEditor.setLabel(constants.dataCenterQosPopup());
     }
 
     @Override
-    public void edit(QosModel<StorageQos, StorageQosParametersModel> object) {
-        driver.edit(object);
-        qosWidget.edit(object.getQosParametersModel());
-    }
-
-    @Override
-    public QosModel<StorageQos, StorageQosParametersModel> flush() {
-        qosWidget.flush();
-        return driver.flush();
+    protected SimpleBeanEditorDriver<QosModel<StorageQos, 
StorageQosParametersModel>, QosPopupView<StorageQos, 
StorageQosParametersModel>> createDriver() {
+        return GWT.create(Driver.class);
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosWidget.java
index a5bdcef..6e9f3a7 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosWidget.java
@@ -1,15 +1,12 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
 
+import org.ovirt.engine.core.common.businessentities.qos.StorageQos;
 import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
 import org.ovirt.engine.ui.common.idhandler.WithElementId;
 import org.ovirt.engine.ui.common.widget.Align;
 import 
org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor;
 import 
org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxOnlyEditor;
-import 
org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.StorageQosParametersModel;
-import org.ovirt.engine.ui.uicompat.Event;
-import org.ovirt.engine.ui.uicompat.IEventListener;
-import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
 
 import com.google.gwt.core.client.GWT;
@@ -19,12 +16,10 @@
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.user.client.ui.FlowPanel;
 
-public class StorageQosWidget extends 
AbstractModelBoundPopupWidget<StorageQosParametersModel> {
+public class StorageQosWidget extends QosWidget<StorageQos, 
StorageQosParametersModel> {
 
     interface Driver extends SimpleBeanEditorDriver<StorageQosParametersModel, 
StorageQosWidget> {
     }
-
-    private final Driver driver = GWT.create(Driver.class);
 
     interface ViewUiBinder extends UiBinder<FlowPanel, StorageQosWidget> {
         ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
@@ -40,9 +35,6 @@
 
     @UiField
     WidgetStyle style;
-
-    @UiField
-    FlowPanel mainPanel;
 
     @UiField(provided = true)
     @Path(value = "throughput.enabled.entity")
@@ -84,9 +76,6 @@
     @WithElementId
     IntegerEntityModelTextBoxOnlyEditor iopsWriteEditor;
 
-    private StorageQosParametersModel model;
-    private final IEventListener<PropertyChangedEventArgs> 
availabilityListener;
-
     public StorageQosWidget(ApplicationConstants constants) {
         throughputEnabled = new EntityModelCheckBoxEditor(Align.RIGHT);
         iopsEnabled = new EntityModelCheckBoxEditor(Align.RIGHT);
@@ -95,17 +84,9 @@
 
         setStyle();
         localize(constants);
+
+        driver = GWT.create(Driver.class);
         driver.initialize(this);
-
-        availabilityListener = new IEventListener<PropertyChangedEventArgs>() {
-
-            @Override
-            public void eventRaised(Event<? extends PropertyChangedEventArgs> 
ev, Object sender, PropertyChangedEventArgs args) {
-                if ("IsAvailable".equals(args.propertyName)) { //$NON-NLS-1$
-                    toggleVisibility();
-                }
-            }
-        };
     }
 
     private void setStyle() {
@@ -126,27 +107,6 @@
         iopsTotalEditor.setTitle(constants.totalStorageQosPopup() + 
constants.iopsCountLabelQosPopup());
         iopsReadEditor.setTitle(constants.readStorageQosPopup() + 
constants.iopsCountLabelQosPopup());
         iopsWriteEditor.setTitle(constants.writeStorageQosPopup() + 
constants.iopsCountLabelQosPopup());
-    }
-
-    private void toggleVisibility() {
-        mainPanel.setVisible(model.getIsAvailable());
-    }
-
-    @Override
-    public void edit(StorageQosParametersModel model) {
-        driver.edit(model);
-
-        if (this.model != null) {
-            
this.model.getPropertyChangedEvent().removeListener(availabilityListener);
-        }
-        this.model = model;
-        model.getPropertyChangedEvent().addListener(availabilityListener);
-        toggleVisibility();
-    }
-
-    @Override
-    public StorageQosParametersModel flush() {
-        return driver.flush();
     }
 
 }


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

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

Reply via email to