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
