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