Tomas Jelinek has uploaded a new change for review. Change subject: frontend: made the blan template editable ......................................................................
frontend: made the blan template editable Feature Page: www.ovirt.org/Features/Blank_to_Defaults Bug-Url: https://bugzilla.redhat.com/1130174 Change-Id: I400401b8e110b4cd10404f6df7c8f8ea4cd56093 Signed-off-by: Tomas Jelinek <[email protected]> --- 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/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.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/VmModelBehaviorBase.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java R frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java M frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java M frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java M frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java M frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java 21 files changed, 372 insertions(+), 158 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/37905/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 40d907d..5f2a013 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 @@ -811,6 +811,9 @@ @WithElementId("cdAttached") public EntityModelCheckBoxEditor cdAttachedEditor; + @UiField + public HorizontalPanel attachCdPanel; + @UiField(provided = true) @Path("bootMenuEnabled.entity") @WithElementId("bootMenuEnabled") @@ -964,8 +967,6 @@ applyStyles(); localize(constants); - - super.initializeModeSwitching(generalTab); generateIds(); @@ -1522,6 +1523,8 @@ public void edit(UnitVmModel model) { super.edit(model); unitVmModel = model; + + super.initializeModeSwitching(generalTab); priorityEditor.setRowData(new ArrayList<EntityModel>()); priorityEditor.asEditor().edit(model.getPriority()); @@ -2234,4 +2237,8 @@ public UiCommandButton getNumaSupportButton() { return numaSupportButton; } + + public UnitVmModel getModel() { + return unitVmModel; + } } 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 c6c8901..87b1c80 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 @@ -740,7 +740,7 @@ <g:Label addStyleNames="{style.sectionLabel}" text="{constants.bootSequenceVmPopup}" /> <e:ListModelListBoxEditor ui:field="firstBootDeviceEditor" /> <e:ListModelListBoxEditor ui:field="secondBootDeviceEditor" /> - <g:HorizontalPanel addStyleNames="{style.attachCdPanel}" verticalAlignment="ALIGN_MIDDLE"> + <g:HorizontalPanel ui:field="attachCdPanel" addStyleNames="{style.attachCdPanel}" verticalAlignment="ALIGN_MIDDLE"> <ge:EntityModelCheckBoxEditor label="{constants.attachCdVmPopup}" ui:field="cdAttachedEditor" /> <e:ListModelListBoxEditor ui:field="cdImageEditor" addStyleNames="avmpw_cdImageEditor_pfly_fix" /> <g:PushButton ui:field="refreshButton" addStyleNames="{style.refreshButton} avmpw_refreshButton_pfly_fix"> diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java index 52f2890..0d4783a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java @@ -16,6 +16,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.ui.Widget; +import org.ovirt.engine.ui.uicommonweb.models.templates.BlankTemplateModel; public class TemplateEditPopupWidget extends AbstractVmPopupWidget { @@ -38,12 +39,21 @@ @Override protected PopupWidgetConfigMap createWidgetConfiguration() { - return super.createWidgetConfiguration(). + PopupWidgetConfigMap popupWidgetConfigMap = super.createWidgetConfiguration(). putOne(logicalNetworksEditorPanel, hiddenField()). putAll(poolSpecificFields(), hiddenField()). putOne(instanceTypesEditor, hiddenField()). putOne(templateWithVersionEditor, hiddenField()). putAll(resourceAllocationTemplateHiddenFields(), hiddenField()); + + if (getModel() instanceof BlankTemplateModel) { + popupWidgetConfigMap = popupWidgetConfigMap. + putOne(dataCenterWithClusterEditor, hiddenField()). + putOne(startRunningOnPanel, hiddenField()). + putOne(attachCdPanel, hiddenField()); + } + + return popupWidgetConfigMap; } protected List<Widget> resourceAllocationTemplateHiddenFields() { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java index a08a737..34a86cf 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java @@ -20,7 +20,7 @@ super.build(model, vm); vm.setAllowConsoleReconnect(model.getAllowConsoleReconnect().getEntity()); vm.setVmType(model.getVmType().getSelectedItem()); - vm.setVdsGroupId(model.getSelectedCluster().getId()); + vm.setVdsGroupId(model.getSelectedCluster() != null ? model.getSelectedCluster().getId() : null); vm.setTimeZone(model.getTimeZone().getIsAvailable() && model.getTimeZone().getSelectedItem() != null ? model.getTimeZone() .getSelectedItem().getTimeZoneKey() : ""); //$NON-NLS-1$ vm.setIsoPath(model.getCdImage().getIsChangable() ? model.getCdImage().getSelectedItem() : ""); //$NON-NLS-1$ @@ -36,4 +36,6 @@ vm.setMigrateCompressed(model.getMigrateCompressed().getSelectedItem()); vm.setCustomProperties(model.getCustomPropertySheet().serialize()); } + + } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java index 8410bd8..bffe2d0 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java @@ -1,7 +1,9 @@ package org.ovirt.engine.ui.uicommonweb.builders.vm; import org.ovirt.engine.core.common.businessentities.VmBase; +import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.ui.uicommonweb.builders.CompositeBuilder; +import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; public class CoreVmBaseToUnitBuilder extends CompositeBuilder<VmBase, UnitVmModel> { @@ -14,13 +16,37 @@ @Override protected void postBuild(VmBase vm, UnitVmModel model) { - model.getBootMenuEnabled().setEntity(vm.isBootMenuEnabled()); + if (supported(ConfigurationValues.BootMenuSupported, model)) { + model.getBootMenuEnabled().setEntity(vm.isBootMenuEnabled()); + } + model.getVncKeyboardLayout().setSelectedItem(vm.getVncKeyboardLayout()); model.getIsDeleteProtected().setEntity(vm.isDeleteProtected()); model.selectSsoMethod(vm.getSsoMethod()); - model.getSpiceFileTransferEnabled().setEntity(vm.isSpiceFileTransferEnabled()); - model.getSpiceCopyPasteEnabled().setEntity(vm.isSpiceCopyPasteEnabled()); - model.getAutoConverge().setSelectedItem(vm.getAutoConverge()); - model.getMigrateCompressed().setSelectedItem(vm.getMigrateCompressed()); + + if (supported(ConfigurationValues.SpiceFileTransferToggleSupported, model)) { + model.getSpiceFileTransferEnabled().setEntity(vm.isSpiceFileTransferEnabled()); + } + + if (supported(ConfigurationValues.SpiceCopyPasteToggleSupported, model)) { + model.getSpiceCopyPasteEnabled().setEntity(vm.isSpiceCopyPasteEnabled()); + } + + if (supported(ConfigurationValues.AutoConvergenceSupported, model)) { + model.getAutoConverge().setSelectedItem(vm.getAutoConverge()); + } + + if (supported(ConfigurationValues.MigrationCompressionSupported, model)) { + model.getMigrateCompressed().setSelectedItem(vm.getMigrateCompressed()); + } + } + + protected boolean supported(ConfigurationValues feature, UnitVmModel model) { + if (model.getSelectedCluster() == null || model.getSelectedCluster().getCompatibilityVersion() == null) { + return false; + } + + String version = model.getSelectedCluster().getCompatibilityVersion().getValue(); + return (Boolean) AsyncDataProvider.getInstance().getConfigValuePreConverted(feature, version); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java index 3c59c93..f767a6b 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java @@ -2,11 +2,21 @@ import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder; +import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; public class SerialNumberPolicyVmBaseToUnitBuilder extends BaseSyncBuilder<VmBase, UnitVmModel> { @Override protected void build(VmBase vm, UnitVmModel model) { + if (model.getSelectedCluster() == null || model.getSelectedCluster().getCompatibilityVersion() == null) { + return; + } + + String version = model.getSelectedCluster().getCompatibilityVersion().getValue(); + boolean enabled = AsyncDataProvider.getInstance().isSerialNumberPolicySupported(version); + if (!enabled) { + return; + } model.getSerialNumberPolicy().setSelectedSerialNumberPolicy(vm.getSerialNumberPolicy()); model.getSerialNumberPolicy().getCustomSerialNumber().setEntity(vm.getCustomSerialNumber()); } 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 c1a9415..d340853 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 @@ -44,7 +44,7 @@ import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModelNetworkAsyncCallback; import org.ovirt.engine.ui.uicommonweb.models.vms.VmBasedWidgetSwitchModeCommand; import org.ovirt.engine.ui.uicommonweb.models.vms.VmModelBehaviorBase; -import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.ExistingInstanceTypeModelBehavior; +import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.ExistingNonClusterModelBehavior; import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeInterfaceCreatingManager; import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.NewInstanceTypeModelBehavior; import org.ovirt.engine.ui.uicompat.ConstantsManager; @@ -117,7 +117,7 @@ private void editInstanceType() { createWindow( - new ExistingInstanceTypeModelBehavior((InstanceType) getSelectedItem()), + new ExistingNonClusterModelBehavior((VmTemplate) getSelectedItem()), "edit_instance_type", //$NON-NLS-1$ "OnEditInstanceType", //$NON-NLS-1$ false, diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java new file mode 100644 index 0000000..65507c3 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java @@ -0,0 +1,20 @@ +package org.ovirt.engine.ui.uicommonweb.models.templates; + +import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.VmModelBehaviorBase; + +public class BlankTemplateModel extends UnitVmModel { + + public BlankTemplateModel(VmModelBehaviorBase behavior) { + super(behavior); + } + + @Override + protected void doDisplayTypeChanged() { + // typically the Other OS + Integer osType = getOSType().getSelectedItem(); + + displayTypeSelectedItemChanged(osType, Version.getLast()); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.java new file mode 100644 index 0000000..9c40e86 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.java @@ -0,0 +1,55 @@ +package org.ovirt.engine.ui.uicommonweb.models.templates; + +import org.ovirt.engine.core.common.businessentities.VmBase; +import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor; +import org.ovirt.engine.ui.uicommonweb.builders.vm.CommentVmBaseToUnitBuilder; +import org.ovirt.engine.ui.uicommonweb.builders.vm.CommonVmBaseToUnitBuilder; +import org.ovirt.engine.ui.uicommonweb.builders.vm.NameAndDescriptionVmBaseToUnitBuilder; +import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.ExistingNonClusterModelBehavior; + +public class ExistingBlankTemplateModelBehavior extends ExistingNonClusterModelBehavior { + + private VmTemplate template; + + public ExistingBlankTemplateModelBehavior(VmTemplate template) { + super(template); + this.template = template; + } + + @Override + public void initialize(SystemTreeItemModel systemTreeSelectedItem) { + super.initialize(systemTreeSelectedItem); + + getModel().getBaseTemplate().setIsAvailable(false); + getModel().getTemplateVersionName().setIsAvailable(false); + getModel().getVmType().setIsChangable(true); + getModel().getEmulatedMachine().setIsAvailable(false); + getModel().getCustomCpu().setIsAvailable(false); + getModel().getOSType().setIsAvailable(false); + updateCustomPropertySheet(latestCluster()); + getModel().getCustomPropertySheet().deserialize(template.getCustomProperties()); + updateTimeZone(template.getTimeZone()); + getModel().getVmInitEnabled().setEntity(template.getVmInit() != null); + getModel().getVmInitModel().init(template); + } + + @Override + protected Version getClusterCompatibilityVersion() { + return latestCluster(); + } + + @Override + protected void buildModel(VmBase vm) { + BuilderExecutor.build(vm, getModel(), + new NameAndDescriptionVmBaseToUnitBuilder(), + new CommentVmBaseToUnitBuilder(), + new CommonVmBaseToUnitBuilder()); + } + + public VmTemplate getVmTemplate() { + return template; + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java index 851f913..b5b53c5 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java @@ -47,6 +47,7 @@ import org.ovirt.engine.ui.uicommonweb.models.vms.TemplateVmModelBehavior; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmBasedWidgetSwitchModeCommand; +import org.ovirt.engine.ui.uicommonweb.models.vms.VmModelBehaviorBase; import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; @@ -466,7 +467,7 @@ } private void vmInitLoaded(VmTemplate template) { - UnitVmModel model = new UnitVmModel(createBehavior(template)); + UnitVmModel model = createModel(createBehavior(template)); model.setIsAdvancedModeLocalStorageKey(getEditTemplateAdvancedModelKey()); setWindow(model); model.setTitle(ConstantsManager.getInstance().getConstants().editTemplateTitle()); @@ -493,8 +494,20 @@ return "wa_template_dialog"; //$NON-NLS-1$ } - protected TemplateVmModelBehavior createBehavior(VmTemplate template) { - return new TemplateVmModelBehavior(template); + private UnitVmModel createModel(VmModelBehaviorBase behavior) { + if (behavior instanceof ExistingBlankTemplateModelBehavior) { + return new BlankTemplateModel(behavior); + } + + return new UnitVmModel(behavior); + } + + protected VmModelBehaviorBase createBehavior(VmTemplate template) { + if (!template.isBlank()) { + return new TemplateVmModelBehavior(template); + } + + return new ExistingBlankTemplateModelBehavior(template); } private void remove() @@ -570,8 +583,15 @@ String name = model.getName().getEntity(); - if (((TemplateVmModelBehavior) model.getBehavior()).getVmTemplate().isBaseTemplate()) { + boolean isBaseTemplate = false; + if (model.getBehavior() instanceof TemplateVmModelBehavior) { + isBaseTemplate = ((TemplateVmModelBehavior) model.getBehavior()).getVmTemplate().isBaseTemplate(); + } else if (model.getBehavior() instanceof ExistingBlankTemplateModelBehavior) { + isBaseTemplate = true; + } + + if (isBaseTemplate) { AsyncDataProvider.getInstance().isTemplateNameUnique(new AsyncQuery(this, new INewAsyncCallback() { @Override @@ -597,7 +617,14 @@ return; } - VmTemplate selectedItem = ((TemplateVmModelBehavior) model.getBehavior()).getVmTemplate(); + + VmTemplate selectedItem; + if (model.getBehavior() instanceof TemplateVmModelBehavior) { + selectedItem = ((TemplateVmModelBehavior) model.getBehavior()).getVmTemplate(); + } else { + selectedItem = ((ExistingBlankTemplateModelBehavior) model.getBehavior()).getVmTemplate(); + } + final VmTemplate template = (VmTemplate) Cloner.clone(selectedItem); String name = model.getName().getEntity(); @@ -739,13 +766,6 @@ getEditCommand().setIsExecutionAllowed(items.size() == 1 && item != null && item.getStatus() != VmTemplateStatus.Locked); - if (getEditCommand().getIsExecutionAllowed() && blankSelected) - { - getEditCommand().getExecuteProhibitionReasons().add(ConstantsManager.getInstance() - .getConstants() - .blankTemplateCannotBeEdited()); - getEditCommand().setIsExecutionAllowed(false); - } getRemoveCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.canExecute(items, VmTemplate.class, VdcActionType.RemoveVmTemplate)); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java index 23a75f7..5423227 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java @@ -99,6 +99,7 @@ doChangeDefautlHost(template.getDedicatedVmForVds()); getModel().getIsStateless().setEntity(template.isStateless()); + getModel().getIsRunAndPause().setEntity(template.isRunAndPause()); boolean hasCd = !StringHelper.isNullOrEmpty(template.getIsoPath()); @@ -115,11 +116,8 @@ getModel().getStorageDomain().setIsChangable(true); getModel().getProvisioning().setIsChangable(true); - getModel().getVmType().setSelectedItem(template.getVmType()); getModel().getCopyPermissions().setIsAvailable(true); - getModel().getAllowConsoleReconnect().setEntity(template.isAllowConsoleReconnect()); initDisks(); - updateRngDevice(template.getId()); } else { @@ -131,6 +129,10 @@ getModel().setDisks(null); } + getModel().getAllowConsoleReconnect().setEntity(template.isAllowConsoleReconnect()); + getModel().getVmType().setSelectedItem(template.getVmType()); + updateRngDevice(template.getId()); + initStorageDomains(); InstanceType selectedInstanceType = getModel().getInstanceTypes().getSelectedItem(); 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 d1cef78..2ebc350 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 @@ -60,6 +60,7 @@ import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.NumaSupportModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.VmNumaSupportModel; import org.ovirt.engine.ui.uicommonweb.models.storage.DisksAllocationModel; +import org.ovirt.engine.ui.uicommonweb.models.templates.ExistingBlankTemplateModelBehavior; import org.ovirt.engine.ui.uicommonweb.models.templates.TemplateWithVersion; import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeManager; import org.ovirt.engine.ui.uicommonweb.models.vms.key_value.KeyValueModel; @@ -2313,6 +2314,10 @@ return; } + doDisplayTypeChanged(); + } + + protected void doDisplayTypeChanged() { VDSGroup cluster = getSelectedCluster(); Integer osType = getOSType().getSelectedItem(); @@ -2320,8 +2325,13 @@ return; } + displayTypeSelectedItemChanged(osType, cluster.getCompatibilityVersion()); + } + + protected void displayTypeSelectedItemChanged(int osType, Version compatibilityVersion) { Set<GraphicsTypes> graphicsTypes = new LinkedHashSet<>(); - List<Pair<GraphicsType, DisplayType>> graphicsAndDisplays = AsyncDataProvider.getInstance().getGraphicsAndDisplays(osType, cluster.getCompatibilityVersion()); + List<Pair<GraphicsType, DisplayType>> graphicsAndDisplays = AsyncDataProvider.getInstance().getGraphicsAndDisplays(osType, compatibilityVersion); + for (Pair<GraphicsType, DisplayType> graphicsAndDisplay : graphicsAndDisplays) { if (graphicsAndDisplay.getSecond() == getDisplayType().getSelectedItem()) { graphicsTypes.add(GraphicsTypes.fromGraphicsType(graphicsAndDisplay.getFirst())); @@ -2692,9 +2702,11 @@ } - setValidTab(TabName.GENERAL_TAB, isValidTab(TabName.GENERAL_TAB) - && getDataCenterWithClustersList().getIsValid() - && getTemplateWithVersion().getIsValid()); + if (!(getBehavior() instanceof ExistingBlankTemplateModelBehavior)) { + setValidTab(TabName.GENERAL_TAB, isValidTab(TabName.GENERAL_TAB) + && getDataCenterWithClustersList().getIsValid() + && getTemplateWithVersion().getIsValid()); + } setValidTab(TabName.INITIAL_RUN_TAB, getTimeZone().getIsValid()); @@ -2767,7 +2779,9 @@ // Minimum 'Physical Memory Guaranteed' is 1MB validateMemorySize(getMemSize(), Integer.MAX_VALUE, 1); - if (!(getBehavior() instanceof TemplateVmModelBehavior) && getMemSize().getIsValid()) { + boolean isTemplateBehavior = (getBehavior() instanceof TemplateVmModelBehavior) || + (getBehavior() instanceof ExistingBlankTemplateModelBehavior); + if (!isTemplateBehavior && getMemSize().getIsValid()) { validateMemorySize(getMinAllocatedMemory(), getMemSize().getEntity(), 1); } setValidTab(TabName.RESOURCE_ALLOCATION_TAB, getMinAllocatedMemory().getIsValid()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java index f3a94de..e38e80b 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java @@ -1218,6 +1218,10 @@ } protected void updateRngDevice(Guid templateId) { + if (!getModel().getIsRngEnabled().getIsChangable()) { + return; + } + Frontend.getInstance().runQuery(VdcQueryType.GetRngDevice, new IdQueryParameters(templateId), new AsyncQuery(this, new INewAsyncCallback() { @Override @@ -1264,6 +1268,12 @@ return cluster.getCompatibilityVersion(); } + protected Version latestCluster() { + // instance type and blank template always exposes all the features of the latest cluster and if some is not applicable + // than that particular feature will not be applicable on the instance creation + return Version.getLast(); + } + protected boolean basedOnCustomInstanceType() { InstanceType selectedInstanceType = getModel().getInstanceTypes().getSelectedItem(); return selectedInstanceType == null || selectedInstanceType instanceof CustomInstanceType; 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 3c9611c..121db25 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 @@ -1,91 +1,31 @@ package org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes; -import java.util.HashSet; -import org.ovirt.engine.core.common.businessentities.GraphicsDevice; -import org.ovirt.engine.core.common.businessentities.GraphicsType; -import org.ovirt.engine.core.common.businessentities.InstanceType; -import org.ovirt.engine.core.common.businessentities.UsbPolicy; -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.VmWatchdog; +import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VnicProfileView; -import org.ovirt.engine.core.common.queries.IdQueryParameters; -import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryType; -import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.AsyncQuery; -import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.Linq; -import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor; -import org.ovirt.engine.ui.uicommonweb.builders.vm.HwOnlyVmBaseToUnitBuilder; -import org.ovirt.engine.ui.uicommonweb.builders.vm.NameAndDescriptionVmBaseToUnitBuilder; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; -import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VnicInstanceType; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; -public class ExistingInstanceTypeModelBehavior extends InstanceTypeModelBehaviorBase { +public class ExistingInstanceTypeModelBehavior extends ExistingNonClusterModelBehavior { - private InstanceType instanceType; + private VmTemplate instanceType; - public ExistingInstanceTypeModelBehavior(InstanceType instanceType) { + public ExistingInstanceTypeModelBehavior(VmTemplate instanceType) { + super(instanceType); this.instanceType = instanceType; } @Override public void initialize(SystemTreeItemModel systemTreeSelectedItem) { super.initialize(systemTreeSelectedItem); - updateNumOfSockets(); - getModel().getUsbPolicy().setItems(Arrays.asList(UsbPolicy.values())); - - getModel().getIsSoundcardEnabled().setIsChangable(true); - - Frontend.getInstance().runQuery(VdcQueryType.GetGraphicsDevices, new IdQueryParameters(instanceType.getId()), new AsyncQuery( - this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object model, Object returnValue) { - List<GraphicsDevice> graphicsDevices = ((VdcQueryReturnValue) returnValue).getReturnValue(); - Collection<GraphicsType> graphicsTypesCollection = new HashSet<GraphicsType>(); - - for (GraphicsDevice graphicsDevice : graphicsDevices) { - graphicsTypesCollection.add(graphicsDevice.getGraphicsType()); - } - - initDisplayTypes(instanceType.getDefaultDisplayType(), UnitVmModel.GraphicsTypes.fromGraphicsTypes(graphicsTypesCollection)); - } - } - )); - - initSoundCard(instanceType.getId()); - updateConsoleDevice(instanceType.getId()); - initPriority(instanceType.getPriority()); - - buildModel((VmBase) instanceType); - - Frontend.getInstance().runQuery(VdcQueryType.IsBalloonEnabled, new IdQueryParameters(instanceType.getId()), new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object model, Object returnValue) { - getModel().getMemoryBalloonDeviceEnabled().setEntity((Boolean) ((VdcQueryReturnValue) returnValue).getReturnValue()); - } - } - )); - - AsyncDataProvider.getInstance().isVirtioScsiEnabledForVm(new AsyncQuery(getModel(), new INewAsyncCallback() { - @Override - public void onSuccess(Object model, Object returnValue) { - getModel().getIsVirtioScsiEnabled().setEntity((Boolean) returnValue); - } - }), instanceType.getId()); AsyncQuery getVmNicsQuery = new AsyncQuery(); getVmNicsQuery.asyncCallback = new INewAsyncCallback() { @@ -107,54 +47,5 @@ } }; AsyncDataProvider.getInstance().getTemplateNicList(getVmNicsQuery, instanceType.getId()); - - AsyncDataProvider.getInstance().getWatchdogByVmId(new AsyncQuery(this.getModel(), new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { - UnitVmModel model = (UnitVmModel) target; - @SuppressWarnings("unchecked") - Collection<VmWatchdog> watchdogs = - ((VdcQueryReturnValue) returnValue).getReturnValue(); - for (VmWatchdog watchdog : watchdogs) { - model.getWatchdogAction().setSelectedItem(watchdog.getAction()); - model.getWatchdogModel().setSelectedItem(watchdog.getModel()); - } - } - }), 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); - } - } - } - )); - getModel().getEmulatedMachine().setSelectedItem(instanceType.getCustomEmulatedMachine()); - getModel().getCustomCpu().setSelectedItem(instanceType.getCustomCpuName()); - getModel().getMigrationMode().setSelectedItem(instanceType.getMigrationSupport()); - } - - @Override - protected void buildModel(VmBase vm) { - BuilderExecutor.build(vm, getModel(), - new NameAndDescriptionVmBaseToUnitBuilder(), - new HwOnlyVmBaseToUnitBuilder()); - } - - protected void initSoundCard(Guid id) { - AsyncDataProvider.getInstance().isSoundcardEnabled(new AsyncQuery(getModel(), new INewAsyncCallback() { - - @Override - public void onSuccess(Object model, Object returnValue) { - getModel().getIsSoundcardEnabled().setEntity((Boolean) returnValue); - } - }), id); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java new file mode 100644 index 0000000..82cd63a --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java @@ -0,0 +1,135 @@ +package org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes; + +import java.util.HashSet; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; +import org.ovirt.engine.core.common.businessentities.GraphicsType; +import org.ovirt.engine.core.common.businessentities.UsbPolicy; +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; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.ui.frontend.AsyncQuery; +import org.ovirt.engine.ui.frontend.Frontend; +import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor; +import org.ovirt.engine.ui.uicommonweb.builders.vm.HwOnlyVmBaseToUnitBuilder; +import org.ovirt.engine.ui.uicommonweb.builders.vm.NameAndDescriptionVmBaseToUnitBuilder; +import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; +import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +public class ExistingNonClusterModelBehavior extends NonClusterModelBehaviorBase { + + private VmTemplate entity; + + public ExistingNonClusterModelBehavior(VmTemplate entity) { + this.entity = entity; + } + + @Override + public void initialize(SystemTreeItemModel systemTreeSelectedItem) { + super.initialize(systemTreeSelectedItem); + updateNumOfSockets(); + getModel().getUsbPolicy().setItems(Arrays.asList(UsbPolicy.values())); + + getModel().getIsSoundcardEnabled().setIsChangable(true); + + Frontend.getInstance().runQuery(VdcQueryType.GetGraphicsDevices, new IdQueryParameters(entity.getId()), new AsyncQuery( + this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + List<GraphicsDevice> graphicsDevices = ((VdcQueryReturnValue) returnValue).getReturnValue(); + Collection<GraphicsType> graphicsTypesCollection = new HashSet<GraphicsType>(); + + for (GraphicsDevice graphicsDevice : graphicsDevices) { + graphicsTypesCollection.add(graphicsDevice.getGraphicsType()); + } + + initDisplayTypes(entity.getDefaultDisplayType(), UnitVmModel.GraphicsTypes.fromGraphicsTypes(graphicsTypesCollection)); + } + } + )); + + initSoundCard(entity.getId()); + updateConsoleDevice(entity.getId()); + initPriority(entity.getPriority()); + + buildModel((VmBase) entity); + + Frontend.getInstance().runQuery(VdcQueryType.IsBalloonEnabled, new IdQueryParameters(entity.getId()), new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + getModel().getMemoryBalloonDeviceEnabled().setEntity((Boolean) ((VdcQueryReturnValue) returnValue).getReturnValue()); + } + } + )); + + AsyncDataProvider.getInstance().isVirtioScsiEnabledForVm(new AsyncQuery(getModel(), new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + getModel().getIsVirtioScsiEnabled().setEntity((Boolean) returnValue); + } + }), entity.getId()); + + + AsyncDataProvider.getInstance().getWatchdogByVmId(new AsyncQuery(this.getModel(), new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + UnitVmModel model = (UnitVmModel) target; + @SuppressWarnings("unchecked") + Collection<VmWatchdog> watchdogs = + ((VdcQueryReturnValue) returnValue).getReturnValue(); + for (VmWatchdog watchdog : watchdogs) { + model.getWatchdogAction().setSelectedItem(watchdog.getAction()); + model.getWatchdogModel().setSelectedItem(watchdog.getModel()); + } + } + }), entity.getId()); + + Frontend.getInstance().runQuery(VdcQueryType.GetRngDevice, new IdQueryParameters(entity.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); + } + } + } + )); + getModel().getEmulatedMachine().setSelectedItem(entity.getCustomEmulatedMachine()); + getModel().getCustomCpu().setSelectedItem(entity.getCustomCpuName()); + getModel().getMigrationMode().setSelectedItem(entity.getMigrationSupport()); + } + + @Override + protected void buildModel(VmBase vm) { + BuilderExecutor.build(vm, getModel(), + new NameAndDescriptionVmBaseToUnitBuilder(), + new HwOnlyVmBaseToUnitBuilder()); + } + + protected void initSoundCard(Guid id) { + AsyncDataProvider.getInstance().isSoundcardEnabled(new AsyncQuery(getModel(), new INewAsyncCallback() { + + @Override + public void onSuccess(Object model, Object returnValue) { + getModel().getIsSoundcardEnabled().setEntity((Boolean) returnValue); + } + }), id); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java index f96a93a..27014b3 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.Arrays; -public class NewInstanceTypeModelBehavior extends InstanceTypeModelBehaviorBase { +public class NewInstanceTypeModelBehavior extends NonClusterModelBehaviorBase { @Override public void initialize(SystemTreeItemModel systemTreeSelectedItem) { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeModelBehaviorBase.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java similarity index 90% rename from frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeModelBehaviorBase.java rename to frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java index 5b8fb76..715d42b 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeModelBehaviorBase.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java @@ -17,7 +17,7 @@ import java.util.Arrays; import java.util.HashSet; -public class InstanceTypeModelBehaviorBase extends VmModelBehaviorBase<UnitVmModel> { +public class NonClusterModelBehaviorBase extends VmModelBehaviorBase<UnitVmModel> { @Override public void initialize(SystemTreeItemModel systemTreeSelectedItem) { @@ -73,12 +73,6 @@ @Override protected Version getClusterCompatibilityVersion() { return latestCluster(); - } - - protected Version latestCluster() { - // instance type always exposes all the features of the latest cluster and if some is not applicable - // than that particular feature will not be applicable on the instance creation - return Version.ALL.get(Version.ALL.size() - 1); } @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java index bfeded4..3061ae4 100644 --- a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java @@ -9,7 +9,6 @@ import org.ovirt.engine.core.common.businessentities.SsoMethod; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VmBase; -import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; public abstract class BaseVmModelBehaviorTest extends BaseVmTest { @@ -69,7 +68,7 @@ protected UnitVmModel createModel(VmModelBehaviorBase behavior) { final VDSGroup cluster = new VDSGroup(); - cluster.setCompatibilityVersion(Version.v3_5); + cluster.setCompatibilityVersion(CLUSTER_VERSION); UnitVmModel model = new UnitVmModel(behavior) { @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java index 472c3e8..850763f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java @@ -11,6 +11,7 @@ import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.junit.UiCommonSetup; @@ -61,6 +62,7 @@ protected static final Integer MIGRATION_DOWNTIME_2 = 750; protected static final SerialNumberPolicy SERIAL_NUMBER_POLICY = SerialNumberPolicy.CUSTOM; protected static final String CUSTOM_SERIAL_NUMBER = "my custom number"; //$NON-NLS-1$ + protected static final Version CLUSTER_VERSION = Version.v3_5; @ClassRule public static UiCommonSetup setup = new UiCommonSetup(); @@ -68,7 +70,16 @@ @BeforeClass public static void mockAsyncDataProvider() { AsyncDataProvider adp = setup.getMocks().asyncDataProvider(); + when(adp.getConfigValuePreConverted(ConfigurationValues.VncKeyboardLayoutValidValues)).thenReturn(Collections.emptyList()); + + when(adp.getConfigValuePreConverted(ConfigurationValues.BootMenuSupported, CLUSTER_VERSION.getValue())).thenReturn(true); + when(adp.getConfigValuePreConverted(ConfigurationValues.SpiceFileTransferToggleSupported, CLUSTER_VERSION.getValue())).thenReturn(true); + when(adp.getConfigValuePreConverted(ConfigurationValues.SpiceCopyPasteToggleSupported, CLUSTER_VERSION.getValue())).thenReturn(true); + when(adp.getConfigValuePreConverted(ConfigurationValues.AutoConvergenceSupported, CLUSTER_VERSION.getValue())).thenReturn(true); + when(adp.getConfigValuePreConverted(ConfigurationValues.MigrationCompressionSupported, CLUSTER_VERSION.getValue())).thenReturn(true); + when(adp.isSerialNumberPolicySupported(CLUSTER_VERSION.getValue())).thenReturn(true); + when(adp.osNameExists(OS_TYPE)).thenReturn(true); when(adp.getMaxVmNameLengthWin()).thenReturn(15); } diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java index 9936a7e..e64f575 100644 --- a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java @@ -27,7 +27,15 @@ @Override protected UnitVmModel createModel(VmModelBehaviorBase behavior) { - return new PoolModel(behavior); + final VDSGroup cluster = new VDSGroup(); + cluster.setCompatibilityVersion(CLUSTER_VERSION); + + return new PoolModel(behavior) { + @Override + public VDSGroup getSelectedCluster() { + return cluster; + } + }; } @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java index 236901f..79421a1 100644 --- a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java @@ -17,7 +17,7 @@ @Override protected VmModelBehaviorBase getBehavior() { - return new ExistingInstanceTypeModelBehavior(instance); + return new ExistingNonClusterModelBehavior(instance); } @Override -- To view, visit http://gerrit.ovirt.org/37905 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I400401b8e110b4cd10404f6df7c8f8ea4cd56093 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tomas Jelinek <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
