Tomas Jelinek has uploaded a new change for review. Change subject: userportal,webadmin: Added instance images to VM dialog ......................................................................
userportal,webadmin: Added instance images to VM dialog WIP Change-Id: I32cec1002b2c2af81e05788ae823141c97cb27d4 Signed-off-by: Tomas Jelinek <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.ui.xml 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/builders/vm/VmSpecificUnitToVmBuilder.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 9 files changed, 285 insertions(+), 106 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/89/28589/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index d556f35..bc1ee9c 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -670,7 +670,7 @@ @DefaultStringValue("Watchdog Model") String watchdogModel(); - @DefaultStringValue("Template Provisioning") + @DefaultStringValue("Template/Image Provisioning") String templateProvisVmPopup(); @DefaultStringValue("Thin") @@ -721,7 +721,7 @@ @DefaultStringValue("Storage Allocation:") String storageAllocVmPopup(); - @DefaultStringValue("(Available only when a template is selected)") + @DefaultStringValue("(Available only when a template or image is selected)") String availOnlyTemplSelectedVmPopup(); @DefaultStringValue("Boot Sequence:") diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java index 144c77f..2f4e06d 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java @@ -16,7 +16,7 @@ @Inject public AbstractVmPopupView(EventBus eventBus, CommonApplicationResources resources, AbstractVmPopupWidget popupWidget) { - this(eventBus, resources, popupWidget, "690px", "580px"); //$NON-NLS-1$ //$NON-NLS-2$ + this(eventBus, resources, popupWidget, "700px", "580px"); //$NON-NLS-1$ //$NON-NLS-2$ } public AbstractVmPopupView(EventBus eventBus, CommonApplicationResources resources, diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.ui.xml index 99c240c..6f0585c 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.ui.xml @@ -10,7 +10,7 @@ float: left; padding-left: 5px; margin-left: 5px; - width: 400px; + width: 95%; } .headerLabel { 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 330fbf4..e18a057 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 @@ -201,6 +201,16 @@ public ListModelTypeAheadListBoxEditor<VmTemplate> templateEditor; @UiField(provided = true) + @Path(value = "baseInstanceImage.selectedItem") + @WithElementId("baseInstanceImage") + public ListModelTypeAheadListBoxEditor<VmTemplate> baseInstanceImageEditor; + + @UiField(provided = true) + @Path(value = "instanceImage.selectedItem") + @WithElementId("instanceImage") + public ListModelTypeAheadListBoxEditor<VmTemplate> instanceImageEditor; + + @UiField(provided = true) @Path(value = "OSType.selectedItem") @WithElementId("osType") public ListModelListBoxEditor<Integer> oSTypeEditor; @@ -1066,52 +1076,19 @@ new ModeSwitchingVisibilityRenderer()); baseTemplateEditor = new ListModelTypeAheadListBoxEditor<VmTemplate>( - new ListModelTypeAheadListBoxEditor.NullSafeSuggestBoxRenderer<VmTemplate>() { - - @Override - public String getReplacementStringNullSafe(VmTemplate data) { - return data.getName(); - } - - @Override - public String getDisplayStringNullSafe(VmTemplate data) { - return typeAheadNameDescriptionTemplateNullSafe( - data.getName(), - data.getDescription() - ); - } - }, + new BaseTemplateSuggestBoxRenderer(), new ModeSwitchingVisibilityRenderer()); templateEditor = new ListModelTypeAheadListBoxEditor<VmTemplate>( - new ListModelTypeAheadListBoxEditor.NullSafeSuggestBoxRenderer<VmTemplate>() { + new TemplateVersionSuggestBoxRenderer(), + new ModeSwitchingVisibilityRenderer()); - @Override - public String getReplacementStringNullSafe(VmTemplate data) { - return getDisplayableTemplateVersionName(data); - } + baseInstanceImageEditor = new ListModelTypeAheadListBoxEditor<VmTemplate>( + new BaseTemplateSuggestBoxRenderer(), + new ModeSwitchingVisibilityRenderer()); - @Override - public String getDisplayStringNullSafe(VmTemplate data) { - return typeAheadNameDescriptionTemplateNullSafe( - getDisplayableTemplateVersionName(data), - data.getDescription() - ); - } - - private String getDisplayableTemplateVersionName(VmTemplate template) { - String versionName = template.getTemplateVersionName(); - if (ConstantsManager.getInstance().getConstants().latestTemplateVersionName().equals(versionName)) { - return constants.latest(); - } - - versionName = template.getId().equals(template.getBaseTemplateId()) ? - constants.baseTemplate() : template.getTemplateVersionName(); - - return (versionName == null ? "" : versionName) //$NON-NLS-1$ - + StringFormat.format(" (%d)", template.getTemplateVersionNumber()); //$NON-NLS-1$ - } - }, + instanceImageEditor = new ListModelTypeAheadListBoxEditor<VmTemplate>( + new TemplateVersionSuggestBoxRenderer(), new ModeSwitchingVisibilityRenderer()); oSTypeEditor = new ListModelListBoxEditor<Integer>(new AbstractRenderer<Integer>() { @@ -1353,6 +1330,8 @@ } protected void applyStyles() { + baseInstanceImageEditor.hideLabel(); + instanceImageEditor.hideLabel(); hostCpuEditor.addContentWidgetStyleName(style.longCheckboxContent()); allowConsoleReconnectEditor.addContentWidgetStyleName(style.longCheckboxContent()); provisioningEditor.addContentWidgetStyleName(style.provisioningEditorContent()); @@ -2025,6 +2004,8 @@ dataCenterWithClusterEditor.setEnabled(false); templateEditor.setEnabled(false); baseTemplateEditor.setEnabled(false); + instanceImageEditor.setEnabled(false); + baseInstanceImageEditor.setEnabled(false); vmTypeEditor.setEnabled(false); instanceTypesEditor.setEnabled(false); } @@ -2085,4 +2066,47 @@ adminOnlyField.setVisible(false); } } + + class BaseTemplateSuggestBoxRenderer extends ListModelTypeAheadListBoxEditor.NullSafeSuggestBoxRenderer<VmTemplate> { + @Override + public String getReplacementStringNullSafe(VmTemplate data) { + return data.getName(); + } + + @Override + public String getDisplayStringNullSafe(VmTemplate data) { + return typeAheadNameDescriptionTemplateNullSafe( + data.getName(), + data.getDescription() + ); + } + } + + class TemplateVersionSuggestBoxRenderer extends ListModelTypeAheadListBoxEditor.NullSafeSuggestBoxRenderer<VmTemplate> { + @Override + public String getReplacementStringNullSafe(VmTemplate data) { + return getDisplayableTemplateVersionName(data); + } + + @Override + public String getDisplayStringNullSafe(VmTemplate data) { + return typeAheadNameDescriptionTemplateNullSafe( + getDisplayableTemplateVersionName(data), + data.getDescription() + ); + } + + private String getDisplayableTemplateVersionName(VmTemplate template) { + String versionName = template.getTemplateVersionName(); + if (ConstantsManager.getInstance().getConstants().latestTemplateVersionName().equals(versionName)) { + return constants.latest(); + } + + versionName = template.getId().equals(template.getBaseTemplateId()) ? + constants.baseTemplate() : template.getTemplateVersionName(); + + return (versionName == null ? "" : versionName) //$NON-NLS-1$ + + StringFormat.format(" (%d)", template.getTemplateVersionNumber()); //$NON-NLS-1$ + } + } } 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 a4e6976..090feeb 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 @@ -323,23 +323,27 @@ float: left; } - .labelToCoupleCouple { + .labelToCoupleCouple, .instanceImageCouple { float: right; line-height: 30px; padding: 0 5px; + } + + .labelToCoupleCouple { width: 230px; } - .labelToCoupleCoupleLeft { - float: left; - } - - .labelToCoupleCoupleRight { + .labelToCoupleCoupleLeft, .labelToCoupleCoupleRight { float: left; } .cpuSahresValueListBox, .cpuSahresValueTextBox { width: 110px; + } + + .instanceImageListBox { + width: 192px; + padding-left: 5px; } .cpuPinningTextBox { @@ -451,6 +455,13 @@ <ge:EntityModelCheckBoxEditor ui:field="isDeleteProtectedEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> <ge:EntityModelCheckBoxEditor ui:field="copyTemplatePermissionsEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> </g:FlowPanel> + <g:FlowPanel addStyleNames="{style.labelToCouple}"> + <g:Label text="{constants.templateTypeImage}" addStyleNames="{style.labelToCoupleLabel}"/> + <g:FlowPanel addStyleNames="{style.instanceImageCouple}"> + <e:ListModelTypeAheadListBoxEditor ui:field="baseInstanceImageEditor" addStyleNames="{style.labelToCoupleCoupleLeft}" contentWidgetStyleName="{style.instanceImageListBox}" /> + <e:ListModelTypeAheadListBoxEditor ui:field="instanceImageEditor" addStyleNames="{style.labelToCoupleCoupleRight}" contentWidgetStyleName="{style.instanceImageListBox}" /> + </g:FlowPanel> + </g:FlowPanel> <g:FlowPanel ui:field="logicalNetworksEditorPanel" addStyleNames="{style.sectionPanel}"> <p:ProfilesInstanceTypeEditor ui:field="profilesInstanceTypeEditor" /> </g:FlowPanel> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java index ee7fe31..555db93 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.uicommonweb.builders.vm; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; @@ -12,6 +13,7 @@ @Override protected void build(UnitVmModel model, VM vm) { vm.setVmtGuid(model.getTemplate().getSelectedItem().getId()); + vm.setImageTypeId(model.getTemplate().getSelectedItem().getId().equals(Guid.Empty) ? null : model.getTemplate().getSelectedItem().getId()); vm.setCustomProperties(model.getCustomPropertySheet().serialize()); vm.setInstanceTypeId(model.getInstanceTypes().getSelectedItem().getId()); } 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 61e3207..13c3725 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 @@ -114,28 +114,20 @@ getModel().getKernel_parameters().setEntity(template.getKernelParams()); getModel().getInitrd_path().setEntity(template.getInitrdUrl()); - if (!template.getId().equals(Guid.Empty)) - { - getModel().getStorageDomain().setIsChangable(true); - getModel().getProvisioning().setIsChangable(true); + updateStorageRelatedFieldsAvailability(); + if (!template.getId().equals(Guid.Empty)) { getModel().getVmType().setSelectedItem(template.getVmType()); getModel().setIsBlankTemplate(false); getModel().getCopyPermissions().setIsAvailable(true); getModel().getAllowConsoleReconnect().setEntity(template.isAllowConsoleReconnect()); - initDisks(); updateRngDevice(template.getId()); - } - else - { - getModel().getStorageDomain().setIsChangable(false); - getModel().getProvisioning().setIsChangable(false); - + } else { getModel().setIsBlankTemplate(true); - getModel().setIsDisksAvailable(false); getModel().getCopyPermissions().setIsAvailable(false); - getModel().setDisks(null); } + + initDisks(); initStorageDomains(); @@ -160,6 +152,28 @@ getModel().getBootMenuEnabled().setEntity(template.isBootMenuEnabled()); } + } + + @Override + public void instanceImageSelectedItemChanged() { + super.instanceImageSelectedItemChanged(); + updateStorageRelatedFieldsAvailability(); + } + + private void updateStorageRelatedFieldsAvailability() { + VmTemplate template = getModel().getTemplate().getSelectedItem(); + VmTemplate instanceImage = getModel().getInstanceImage().getSelectedItem(); + + if (template == null || instanceImage == null) { + return; + } + + boolean blankTemplateSelected = template.getId().equals(Guid.Empty); + boolean blankInstanceImageSelected = instanceImage.getId().equals(Guid.Empty); + + getModel().getStorageDomain().setIsChangable(!(blankInstanceImageSelected && blankTemplateSelected)); + getModel().getProvisioning().setIsChangable(!(blankInstanceImageSelected && blankTemplateSelected)); + getModel().setIsDisksAvailable(!(blankInstanceImageSelected && blankTemplateSelected)); } @Override @@ -306,9 +320,36 @@ } }, getModel().getHash()), dataCenter.getId(), VmEntityType.TEMPLATE); + + AsyncDataProvider.getTemplateListByDataCenter(new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + List<VmTemplate> templates = (List<VmTemplate>) returnValue; + + postInitImageTypes(AsyncDataProvider.filterTemplatesByArchitecture(templates, + dataCenterWithCluster.getCluster().getArchitecture())); + + } + }, getModel().getHash()), dataCenter.getId(), VmEntityType.IMAGE_TYPE); + } } + private void postInitImageTypes(ArrayList<VmTemplate> images) { + + List<VmTemplate> baseTemplates = filterNotBaseImage(images); + + // If there was some template selected before, try select it again. + VmTemplate prevBaseTemplate = getModel().getBaseInstanceImage().getSelectedItem(); + + getModel().getBaseInstanceImage().setItems(baseTemplates); + + getModel().getBaseInstanceImage().setSelectedItem(Linq.firstOrDefault(baseTemplates, + new Linq.TemplatePredicate(prevBaseTemplate != null ? prevBaseTemplate.getId() : Guid.Empty))); + + } + private void postInitTemplate(List<VmTemplate> templates) { List<VmTemplate> baseTemplates = filterNotBaseTemplates(templates); 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 6a191c5..135b67a 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 @@ -515,6 +515,26 @@ baseTemplate = value; } + private NotChangableForVmInPoolListModel<VmTemplate> instanceImage; + + public ListModel<VmTemplate> getInstanceImage() { + return instanceImage; + } + + public void setInstanceImage(NotChangableForVmInPoolListModel<VmTemplate> instanceImage) { + this.instanceImage = instanceImage; + } + + private NotChangableForVmInPoolListModel<VmTemplate> baseInstanceImage; + + public ListModel<VmTemplate> getBaseInstanceImage() { + return baseInstanceImage; + } + + public void setBaseInstanceImage(NotChangableForVmInPoolListModel<VmTemplate> baseInstanceImage) { + this.baseInstanceImage = baseInstanceImage; + } + private NotChangableForVmInPoolListModel<InstanceType> instanceTypes; public void setInstanceTypes(NotChangableForVmInPoolListModel<InstanceType> instanceTypes) { @@ -1448,6 +1468,12 @@ setBaseTemplate(new NotChangableForVmInPoolListModel<VmTemplate>()); getBaseTemplate().getSelectedItemChangedEvent().addListener(this); + setBaseInstanceImage(new NotChangableForVmInPoolListModel<VmTemplate>()); + getBaseInstanceImage().getSelectedItemChangedEvent().addListener(this); + + setInstanceImage(new NotChangableForVmInPoolListModel<VmTemplate>()); + getInstanceImage().getSelectedItemChangedEvent().addListener(this); + setCdAttached(new NotChangableForVmInPoolEntityModel<Boolean>()); getCdAttached().getEntityChangedEvent().addListener(new IEventListener() { @Override @@ -1751,6 +1777,10 @@ } else if (sender == getBaseTemplate()) { behavior.baseTemplateSelectedItemChanged(); + } else if (sender == getBaseInstanceImage()) { + behavior.baseInstanceImageSelectedItemChanged(); + } else if (sender == getInstanceImage()) { + behavior.instanceImageSelectedItemChanged(); } } else if (ev.matchesDefinition(EntityModel.entityChangedEventDefinition)) 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 6f5b3979..d204715 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 @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.uicommonweb.models.vms; +import java.util.LinkedList; import java.util.Set; import org.ovirt.engine.core.common.TimeZoneType; import org.ovirt.engine.core.common.businessentities.ActionGroup; @@ -56,7 +57,10 @@ private final UIMessages messages = ConstantsManager.getInstance().getMessages(); private TModel privateModel; + private final HashMap<Guid, List<VmTemplate>> baseTemplateToSubTemplates = new HashMap<Guid, List<VmTemplate>>(); + + private final HashMap<Guid, List<VmTemplate>> baseImageToSubImage = new HashMap<Guid, List<VmTemplate>>(); public TModel getModel() { return privateModel; @@ -81,6 +85,10 @@ private PriorityUtil priorityUtil; private VirtioScsiUtil virtioScsiUtil; + + private List<DiskImage> templateDisks; + + private List<DiskImage> instanceImageDisks; public void initialize(SystemTreeItemModel systemTreeSelectedItem) { @@ -205,24 +213,32 @@ } + protected List<VmTemplate> filterNotBaseImage(List<VmTemplate> images) { + return filterNotBaseTemplateBasedEntity(images, baseImageToSubImage); + } + protected List<VmTemplate> filterNotBaseTemplates(List<VmTemplate> templates) { + return filterNotBaseTemplateBasedEntity(templates, baseTemplateToSubTemplates); + } + + protected List<VmTemplate> filterNotBaseTemplateBasedEntity(List<VmTemplate> templateBasedEntities, HashMap<Guid, List<VmTemplate>> baseTemplateBasedEntityToVersions) { List<VmTemplate> baseTemplates = new ArrayList<VmTemplate>(); - for (VmTemplate template : templates) { + for (VmTemplate template : templateBasedEntities) { if (template.getId().equals(template.getBaseTemplateId())) { baseTemplates.add(template); - baseTemplateToSubTemplates.put(template.getId(), + baseTemplateBasedEntityToVersions.put(template.getId(), new ArrayList<VmTemplate>()); } } - for (VmTemplate template : templates) { + for (VmTemplate template : templateBasedEntities) { Guid baseTemplateId = template.getBaseTemplateId(); - if (baseTemplateToSubTemplates.containsKey(baseTemplateId)) { - baseTemplateToSubTemplates.get(baseTemplateId).add(template); + if (baseTemplateBasedEntityToVersions.containsKey(baseTemplateId)) { + baseTemplateBasedEntityToVersions.get(baseTemplateId).add(template); } } - for (List<VmTemplate> subversions : baseTemplateToSubTemplates.values()) { + for (List<VmTemplate> subversions : baseTemplateBasedEntityToVersions.values()) { Collections.sort(subversions, new Comparator<VmTemplate>() { @Override public int compare(VmTemplate o1, VmTemplate o2) { @@ -231,7 +247,7 @@ }); } - for (List<VmTemplate> subversions : baseTemplateToSubTemplates.values()) { + for (List<VmTemplate> subversions : baseTemplateBasedEntityToVersions.values()) { subversions.add(0, createLatestTemplate(subversions.get(0))); } @@ -260,6 +276,18 @@ // it's safe because in index 0 there's the latest version and // in index 1 the base version or the last custom version getModel().getTemplate().setSelectedItem(subVersions.get(1)); + } + } + + public void baseInstanceImageSelectedItemChanged() { + VmTemplate baseTemplate = getModel().getBaseInstanceImage().getSelectedItem(); + if (baseTemplate != null) { + List<VmTemplate> subVersions = baseImageToSubImage.get(baseTemplate.getId()); + getModel().getInstanceImage().setItems(new ArrayList<VmTemplate>(subVersions)); + + // it's safe because in index 0 there's the latest version and + // in index 1 the base version or the last custom version + getModel().getInstanceImage().setSelectedItem(subVersions.get(1)); } } @@ -525,49 +553,89 @@ }, getModel().getHash()), version); } - public void initDisks() - { - VmTemplate template = getModel().getTemplate().getSelectedItem(); + public void initDisks() { + initTemplateDisks(); + initInstanceImageDisks(); + } + + private void initInstanceImageDisks() { + final VmTemplate instanceImage = getModel().getInstanceImage().getSelectedItem(); + if (instanceImage == null) { + return; + } AsyncDataProvider.getTemplateDiskList(new AsyncQuery(getModel(), new INewAsyncCallback() { @Override public void onSuccess(Object target, Object returnValue) { - - UnitVmModel model = (UnitVmModel) target; - ArrayList<DiskImage> disks = (ArrayList<DiskImage>) returnValue; - Collections.sort(disks, new Linq.DiskByAliasComparer()); - ArrayList<DiskModel> list = new ArrayList<DiskModel>(); - - for (Disk disk : disks) { - DiskModel diskModel = new DiskModel(); - diskModel.getAlias().setEntity(disk.getDiskAlias()); - - if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { - DiskImage diskImage = (DiskImage) disk; - - EntityModel tempVar = new EntityModel(); - tempVar.setEntity(diskImage.getSizeInGigabytes()); - diskModel.setSize(tempVar); - ListModel tempVar2 = new ListModel(); - tempVar2.setItems((diskImage.getVolumeType() == VolumeType.Preallocated ? new ArrayList<VolumeType>(Arrays.asList(new VolumeType[]{VolumeType.Preallocated})) - : AsyncDataProvider.getVolumeTypeList())); - tempVar2.setSelectedItem(diskImage.getVolumeType()); - diskModel.setVolumeType(tempVar2); - diskModel.getVolumeType().setIsAvailable(false); - } - - diskModel.setDisk(disk); - list.add(diskModel); - } - - model.setDisks(list); - updateIsDisksAvailable(); - initStorageDomains(); + instanceImageDisks = (List<DiskImage>) returnValue; + initLoadedDisks(); } }, getModel().getHash()), - template.getId()); + instanceImage.getId()); + } + + private void initTemplateDisks() { + final VmTemplate template = getModel().getTemplate().getSelectedItem(); + if (template == null) { + return; + } + + AsyncDataProvider.getTemplateDiskList(new AsyncQuery(getModel(), + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + templateDisks = (List<DiskImage>) returnValue; + initLoadedDisks(); + } + }, + getModel().getHash()), + template.getId()); + } + + private void initLoadedDisks() { + if (templateDisks == null || instanceImageDisks == null) { + return; + } + + List<DiskImage> disks = new LinkedList<DiskImage>(); + + disks.addAll(templateDisks); + disks.addAll(instanceImageDisks); + + Collections.sort(disks, new Linq.DiskByAliasComparer()); + ArrayList<DiskModel> list = new ArrayList<DiskModel>(); + + for (Disk disk : disks) { + DiskModel diskModel = new DiskModel(); + diskModel.getAlias().setEntity(disk.getDiskAlias()); + + if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { + DiskImage diskImage = (DiskImage) disk; + + EntityModel tempVar = new EntityModel(); + tempVar.setEntity(diskImage.getSizeInGigabytes()); + diskModel.setSize(tempVar); + ListModel tempVar2 = new ListModel(); + tempVar2.setItems((diskImage.getVolumeType() == VolumeType.Preallocated ? new ArrayList<VolumeType>(Arrays.asList(new VolumeType[]{VolumeType.Preallocated})) + : AsyncDataProvider.getVolumeTypeList())); + tempVar2.setSelectedItem(diskImage.getVolumeType()); + diskModel.setVolumeType(tempVar2); + diskModel.getVolumeType().setIsAvailable(false); + } + + diskModel.setDisk(disk); + list.add(diskModel); + } + + getModel().setDisks(list); + + templateDisks = null; + instanceImageDisks = null; + + updateIsDisksAvailable(); + initStorageDomains(); } public void updateIsDisksAvailable() { @@ -1177,4 +1245,7 @@ return selectedInstanceType == null || selectedInstanceType instanceof CustomInstanceType; } + public void instanceImageSelectedItemChanged() { + initDisks(); + } } -- To view, visit http://gerrit.ovirt.org/28589 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I32cec1002b2c2af81e05788ae823141c97cb27d4 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
