Frank Kobzik has uploaded a new change for review.

Change subject: frontend: VirtIO RNG device in instance types
......................................................................

frontend: VirtIO RNG device in instance types

This patch adds RNG device to instance types.

(Attached/detached icon is added only to RNG enabled/disabled checkbox).

Change-Id: I4d4eadff40f9a855d9ad8a1c42909d0ae7dfc09a
Signed-off-by: Frantisek Kobzik <fkob...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeAttachDetachManager.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
7 files changed, 95 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/28691/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
index fdf88d1..9704a00 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
@@ -521,7 +521,7 @@
 
     @UiField(provided = true)
     @WithElementId
-    public EntityModelWidgetWithInfo<String> isRngEnabledCheckboxWithInfoIcon;
+    public EntityModelDetachableWidgetWithInfo<String> 
isRngEnabledCheckboxWithInfoIcon;
 
     @UiField
     @Ignore
@@ -846,10 +846,6 @@
         isConsoleDeviceEnabledEditor = new 
EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer(), 
true);
 
         isRngEnabledEditor = new EntityModelCheckBoxOnlyEditor(new 
ModeSwitchingVisibilityRenderer());
-        StringEntityModelLabel rnglabel = new StringEntityModelLabel();
-        rnglabel.setText(constants.rngDevEnabled());
-        isRngEnabledCheckboxWithInfoIcon = new 
EntityModelWidgetWithInfo<String>(rnglabel, isRngEnabledEditor);
-        
isRngEnabledCheckboxWithInfoIcon.setExplanation(SafeHtmlUtils.fromTrustedString(constants.rngDevExplanation()));
         rngPeriodEditor = new IntegerEntityModelTextBoxEditor(new 
ModeSwitchingVisibilityRenderer());
         rngBytesEditor = new IntegerEntityModelTextBoxEditor(new 
ModeSwitchingVisibilityRenderer());
         rngSourceRandom = new EntityModelRadioButtonEditor("rndBackendModel"); 
//$NON-NLS-1$
@@ -926,6 +922,11 @@
         
overrideMigrationDowntimeEditor.getContentWidgetContainer().getElement().getStyle().setWidth(20,
 Unit.PX);
         isVirtioScsiEnabledWithDetachable = new 
EntityModelDetachableWidget(isVirtioScsiEnabled, Align.RIGHT);
         migrationModeEditorWithDetachable = new 
EntityModelDetachableWidget(migrationModeEditor, Align.RIGHT);
+
+        StringEntityModelLabel rnglabel = new StringEntityModelLabel();
+        rnglabel.setText(constants.rngDevEnabled());
+        isRngEnabledCheckboxWithInfoIcon = new 
EntityModelDetachableWidgetWithInfo<String>(rnglabel, isRngEnabledEditor);
+        
isRngEnabledCheckboxWithInfoIcon.setExplanation(SafeHtmlUtils.fromTrustedString(constants.rngDevExplanation()));
     }
 
     protected void initialize() {
@@ -1965,7 +1966,8 @@
                 isVirtioScsiEnabledWithDetachable,
                 detachableMemSizeEditor,
                 overrideMigrationDowntimeEditorWithDetachable,
-                watchdogLabel
+                watchdogLabel,
+                isRngEnabledCheckboxWithInfoIcon
         );
     }
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
index 2a99f1f..ba9c4f1 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
@@ -695,7 +695,7 @@
             <t:DialogTab ui:field="rngDeviceTab">
                 <t:content>
                     <g:FlowPanel>
-                        <w:EntityModelWidgetWithInfo 
ui:field="isRngEnabledCheckboxWithInfoIcon" addStyleNames="{style.checkbox}" />
+                        <w:EntityModelDetachableWidgetWithInfo 
ui:field="isRngEnabledCheckboxWithInfoIcon" addStyleNames="{style.checkbox}" />
                         <g:FlowPanel ui:field="rngPanel">
                             <ge:IntegerEntityModelTextBoxEditor 
ui:field="rngPeriodEditor"/>
                             <ge:IntegerEntityModelTextBoxEditor 
ui:field="rngBytesEditor" />
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
index 8e7f238..4aeb264 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
@@ -231,6 +231,7 @@
         
addInstanceTypeParameters.setVirtioScsiEnabled(model.getIsVirtioScsiEnabled().getEntity());
 
         setVmWatchdogToParams(model, addInstanceTypeParameters);
+        setRngDeviceToParams(model, addInstanceTypeParameters);
 
         getWindow().startProgress(null);
 
@@ -262,6 +263,7 @@
         
updateInstanceTypeParameters.setVirtioScsiEnabled(model.getIsVirtioScsiEnabled().getEntity());
 
         setVmWatchdogToParams(model, updateInstanceTypeParameters);
+        setRngDeviceToParams(model, updateInstanceTypeParameters);
 
         getWindow().startProgress(null);
 
@@ -393,6 +395,11 @@
         }
     }
 
+    private void setRngDeviceToParams(UnitVmModel model, 
VmTemplateParametersBase parameters) {
+        parameters.setUpdateRngDevice(true);
+        parameters.setRngDevice(model.getIsRngEnabled().getEntity() ? 
model.generateRngDevice() : null);
+    }
+
     public UICommand getNewInstanceTypeCommand() {
         return newInstanceTypeCommand;
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
index bf0be16..7a9f472 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
@@ -762,10 +762,33 @@
     private NotChangableForVmInPoolEntityModel<Boolean> isConsoleDeviceEnabled;
 
     public void setRngDevice(VmRngDevice dev) {
-        rngBytes.setEntity(dev.getBytes() == null ? null : dev.getBytes());
-        rngPeriod.setEntity(dev.getPeriod() == null ? null : dev.getPeriod());
-        rngSourceRandom.setEntity(dev.getSource() == 
VmRngDevice.Source.RANDOM);
-        rngSourceHwrng.setEntity(dev.getSource() == VmRngDevice.Source.HWRNG);
+        maybeSetEntity(rngBytes, dev.getBytes() == null ? null : 
dev.getBytes());
+        maybeSetEntity(rngPeriod, dev.getPeriod() == null ? null : 
dev.getPeriod());
+        maybeSetEntity(rngSourceRandom, dev.getSource() == 
VmRngDevice.Source.RANDOM);
+        maybeSetEntity(rngSourceHwrng, dev.getSource() == 
VmRngDevice.Source.HWRNG);
+
+        // post check - at least one source must be selected
+        // if, for example, instance type has forbidden source checked, 
maybeSetEntity doesn't select any source, which
+        // is invalid
+        if (!Boolean.TRUE.equals(rngSourceRandom.getEntity()) && 
!Boolean.TRUE.equals(rngSourceHwrng.getEntity())) {
+            getBehavior().deactivateInstanceTypeManager();
+
+            EntityModel[] entityModels = {rngSourceRandom, rngSourceHwrng};
+            for (EntityModel entityModel : entityModels) {
+                if (entityModel.getIsAvailable() && 
entityModel.getIsChangable()) {
+                    entityModel.setEntity(Boolean.TRUE); // select first 
available
+                    break;
+                }
+            }
+
+            getBehavior().activateInstanceTypeManager();
+        }
+    }
+
+    private <T> void maybeSetEntity(EntityModel<T> eMo, T value) {
+        if (eMo != null && eMo.getIsChangable() && eMo.getIsAvailable()) {
+            eMo.setEntity(value);
+        }
     }
 
     public VmRngDevice generateRngDevice() {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
index 68ddc81..f79d101 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
@@ -2,6 +2,8 @@
 
 import org.ovirt.engine.core.common.businessentities.InstanceType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.businessentities.VmRngDevice;
 import org.ovirt.engine.core.common.businessentities.VmWatchdog;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
@@ -111,6 +113,21 @@
                 }
             }
         }), instanceType.getId());
+
+       Frontend.getInstance().runQuery(VdcQueryType.GetRngDevice, new 
IdQueryParameters(instanceType.getId()), new AsyncQuery(
+               this,
+               new INewAsyncCallback() {
+                   @Override
+                   public void onSuccess(Object model, Object returnValue) {
+                       List<VmDevice> rngDevices = ((VdcQueryReturnValue) 
returnValue).getReturnValue();
+                       
getModel().getIsRngEnabled().setEntity(!rngDevices.isEmpty());
+                       if (!rngDevices.isEmpty()) {
+                           VmRngDevice rngDevice = new 
VmRngDevice(rngDevices.get(0));
+                           getModel().setRngDevice(rngDevice);
+                       }
+                   }
+               }
+       ));
     }
 
     protected void initSoundCard(Guid id) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeAttachDetachManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeAttachDetachManager.java
index fb65f80..8e2694a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeAttachDetachManager.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeAttachDetachManager.java
@@ -161,7 +161,12 @@
                         model.getWatchdogAction(),
                         model.getMinAllocatedMemory(),
                         model.getMemoryBalloonDeviceEnabled(),
-                        model.getIsVirtioScsiEnabled()
+                        model.getIsVirtioScsiEnabled(),
+                        model.getIsRngEnabled(),
+                        model.getRngBytes(),
+                        model.getRngPeriod(),
+                        model.getRngSourceRandom(),
+                        model.getRngSourceHwrng()
                 }
         );
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
index c4fa110..29df5c4 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
@@ -4,6 +4,8 @@
 import org.ovirt.engine.core.common.businessentities.InstanceType;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.VmBase;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.businessentities.VmRngDevice;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.VmWatchdog;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
@@ -308,6 +310,31 @@
                             deactivate();
                             
getModel().getMemoryBalloonDeviceEnabled().setEntity((Boolean) 
((VdcQueryReturnValue)returnValue).getReturnValue());
                             activate();
+                            updateRngDevice(vmBase);
+                        }
+                    }
+            ));
+        } else {
+            updateRngDevice(vmBase);
+        }
+
+    }
+
+    private void updateRngDevice(final VmBase vmBase) {
+        if (model.getIsRngEnabled().getIsChangable() && 
model.getIsRngEnabled().getIsAvailable()) {
+            Frontend.getInstance().runQuery(VdcQueryType.GetRngDevice, new 
IdQueryParameters(vmBase.getId()), new AsyncQuery(
+                    this,
+                    new INewAsyncCallback() {
+                        @Override
+                        public void onSuccess(Object model, Object 
returnValue) {
+                            deactivate();
+                            List<VmDevice> rngDevices = ((VdcQueryReturnValue) 
returnValue).getReturnValue();
+                            
getModel().getIsRngEnabled().setEntity(!rngDevices.isEmpty());
+                            if (!rngDevices.isEmpty()) {
+                                VmRngDevice rngDevice = new 
VmRngDevice(rngDevices.get(0));
+                                getModel().setRngDevice(rngDevice);
+                            }
+                            activate();
                             updateVirtioScsi(vmBase);
                         }
                     }
@@ -315,7 +342,6 @@
         } else {
             updateVirtioScsi(vmBase);
         }
-
     }
 
     private void updateVirtioScsi(VmBase vmBase) {
@@ -376,13 +402,13 @@
         maybeSetEntity(model.getIsSingleQxlEnabled(), 
vmBase.getSingleQxlPci());
     }
 
-    private void maybeSetSelectedItem(ListModel listModel, Object value) {
+    private <T> void maybeSetSelectedItem(ListModel<T> listModel, T value) {
         if (listModel != null && listModel.getIsChangable() && 
listModel.getIsAvailable()) {
             listModel.setSelectedItem(value);
         }
     }
 
-    private void maybeSetEntity(EntityModel listModel, Object value) {
+    private <T> void maybeSetEntity(EntityModel<T> listModel, T value) {
         if (listModel != null && listModel.getIsChangable() && 
listModel.getIsAvailable()) {
             listModel.setEntity(value);
         }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4d4eadff40f9a855d9ad8a1c42909d0ae7dfc09a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Frank Kobzik <fkob...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to