package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.Objects; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmPauseStatus; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.SearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.EnumTranslator; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicompat.UIConstants; public class VmImportGeneralModel extends AbstractGeneralModel<ImportVmData> { private static final VmTemplateNameRenderer vmTemplateNameRenderer = new VmTemplateNameRenderer(); private static EnumTranslator translator = EnumTranslator.getInstance(); final UIConstants constants = ConstantsManager.getInstance().getConstants(); private EntityModel<String> name; private ListModel<Integer> operatingSystems; private String description; private String template; private String definedMemory; private String guestFreeCachedBufferedMemInfo; private String minAllocatedMemory; private String os; private String defaultDisplayType; private String quotaName; private boolean quotaAvailable; private int monitorCount; private boolean hasDomain; private boolean hasTimeZone; private String usbPolicy; private String cpuInfo; private int guestCpuCount; private boolean isHighlyAvailable; private String priority; private boolean hasAlert; private String alert; private String domain; private String storageDomain; private String timeZone; private boolean hasDefaultHost; private String defaultHost; private boolean hasCustomProperties; private String customProperties; private String vmId; private String fqdn; private String compatibilityVersion; private ImportSource source; public VmImportGeneralModel() { name = new EntityModel<>(); operatingSystems = new ListModel<>(); getName().getEntityChangedEvent().addListener((ev, sender, args) -> getEntity().getVm().setName(getName().getEntity())); getOperatingSystems().getSelectedItemChangedEvent().addListener((ev, sender, args) -> { if (getOperatingSystems().getSelectedItem() != null) { getEntity().getVm().setVmOs(getOperatingSystems().getSelectedItem()); } }); getOperatingSystems().getItemsChangedEvent().addListener((ev, sender, args) -> getOperatingSystems().setSelectedItem(getEntity().getVm().getOs())); } public void setSource(ImportSource source) { this.source = source; } public ImportSource getSource() { return source; } @Override protected void onEntityChanged() { super.onEntityChanged(); if (getEntity() != null) { updateProperties(); } } public String getOrigin() { return translator.translate(getEntity().getVm().getOrigin()); } public ListModel<Integer> getOperatingSystems() { return operatingSystems; } private void updateProperties() { VM vm = getEntity().getVm(); super.updateProperties(vm.getId()); getName().setEntity(vm.getName()); getOperatingSystems().setItems(AsyncDataProvider.getInstance().getOsIds(vm.getClusterArch())); setDescription(vm.getVmDescription()); setQuotaName(vm.getQuotaName() != null ? vm.getQuotaName() : ""); //$NON-NLS-1$ setQuotaAvailable(vm.getQuotaEnforcementType() != null && !vm.getQuotaEnforcementType().equals(QuotaEnforcementTypeEnum.DISABLED)); setTemplate(vmTemplateNameRenderer.render(vm)); setDefinedMemory(vm.getVmMemSizeMb() + " MB"); //$NON-NLS-1$ setMinAllocatedMemory(vm.getMinAllocatedMem() + " MB"); //$NON-NLS-1$ if(vm.isRunningOrPaused() && vm.getGuestMemoryBuffered() != null && vm.getGuestMemoryCached() != null && vm.getGuestMemoryFree() != null) { setGuestFreeCachedBufferedMemInfo((vm.getGuestMemoryFree() / 1024L) + " / " // $NON-NLS-1$ + (vm.getGuestMemoryBuffered() / 1024L) + " / " // $NON-NLS-1$ + (vm.getGuestMemoryCached() / 1024L) + " MB"); //$NON-NLS-1$ } else { setGuestFreeCachedBufferedMemInfo(null); // Handled in form } setOS(AsyncDataProvider.getInstance().getOsName(vm.getVmOsId())); setDefaultDisplayType(translator.translate(vm.getDefaultDisplayType())); setIsHighlyAvailable(vm.isAutoStartup()); setPriority(AsyncDataProvider.getInstance().priorityToString(vm.getPriority())); setMonitorCount(vm.getNumOfMonitors()); setUsbPolicy(translator.translate(vm.getUsbPolicy())); setCpuInfo(ConstantsManager.getInstance().getMessages().cpuInfoLabel( vm.getNumOfCpus(), vm.getNumOfSockets(), vm.getCpuPerSocket(), vm.getThreadsPerCpu())); setGuestCpuCount(vm.getGuestCpuCount()); setHasDomain(AsyncDataProvider.getInstance().isWindowsOsType(vm.getVmOsId())); if (vm.getVmInit() != null) { setDomain(vm.getVmInit().getDomain()); } setHasTimeZone(AsyncDataProvider.getInstance().isWindowsOsType(vm.getVmOsId())); setTimeZone(vm.getTimeZone()); setHasCustomProperties(!StringHelper.isNullOrEmpty(vm.getCustomProperties())); setCustomProperties(getHasCustomProperties() ? constants.configured() : constants.notConfigured()); setCompatibilityVersion(vm.getCompatibilityVersion() != null ? vm.getCompatibilityVersion().toString() : ""); //$NON-NLS-1$ setVmId(vm.getId().toString()); setFqdn(vm.getFqdn()); setHasAlert(vm.getVmPauseStatus() != VmPauseStatus.NONE && vm.getVmPauseStatus() != VmPauseStatus.NOERR); if (getHasAlert()) { setAlert(translator.translate(vm.getVmPauseStatus())); } else { setAlert(null); } setHasDefaultHost(!vm.getDedicatedVmForVdsList().isEmpty()); if (getHasDefaultHost()) { Frontend.getInstance().runQuery(VdcQueryType.Search, new SearchParameters("Host: cluster = " + vm.getClusterName() //$NON-NLS-1$ + " sortby name", SearchType.VDS), new AsyncQuery<VdcQueryReturnValue>(returnValue -> { //$NON-NLS-1$ VM localVm = getEntity() != null ? getEntity().getVm() : null; if (localVm == null) { return; } ArrayList<VDS> hosts = returnValue.getReturnValue(); for (VDS host : hosts) { if (localVm.getDedicatedVmForVdsList().contains(host.getId())) { setDefaultHost(host.getName()); break; } } })); } else { setDefaultHost(ConstantsManager.getInstance().getConstants().anyHostInCluster()); } } public EntityModel<String> getName() { return name; } public String getDescription() { return description; } public void setDescription(String value) { if (!Objects.equals(description, value)) { description = value; onPropertyChanged(new PropertyChangedEventArgs("Description")); //$NON-NLS-1$ } } public String getTemplate() { return template; } public void setTemplate(String value) { if (!Objects.equals(template, value)) { template = value; onPropertyChanged(new PropertyChangedEventArgs("Template")); //$NON-NLS-1$ } } public String getDefinedMemory() { return definedMemory; } public void setDefinedMemory(String value) { if (!Objects.equals(definedMemory, value)) { definedMemory = value; onPropertyChanged(new PropertyChangedEventArgs("DefinedMemory")); //$NON-NLS-1$ } } public String getGuestFreeCachedBufferedMemInfo() { return guestFreeCachedBufferedMemInfo; } public void setGuestFreeCachedBufferedMemInfo(String value) { if (!Objects.equals(guestFreeCachedBufferedMemInfo, value)) { guestFreeCachedBufferedMemInfo = value; onPropertyChanged(new PropertyChangedEventArgs("GuestFreeCachedBufferedMemInfo")); //$NON-NLS-1$ } } public String getMinAllocatedMemory() { return minAllocatedMemory; } public void setMinAllocatedMemory(String value) { if (!Objects.equals(minAllocatedMemory, value)) { minAllocatedMemory = value; onPropertyChanged(new PropertyChangedEventArgs("MinAllocatedMemory")); //$NON-NLS-1$ } } public String getOS() { return os; } public void setOS(String value) { if (!Objects.equals(os, value)) { os = value; onPropertyChanged(new PropertyChangedEventArgs("OS")); //$NON-NLS-1$ } } public String getDefaultDisplayType() { return defaultDisplayType; } public void setDefaultDisplayType(String value) { if (!Objects.equals(defaultDisplayType, value)) { defaultDisplayType = value; onPropertyChanged(new PropertyChangedEventArgs("DefaultDisplayType")); //$NON-NLS-1$ } } public String getQuotaName() { return quotaName; } public void setQuotaName(String quotaName) { this.quotaName = quotaName; } public boolean isQuotaAvailable() { return quotaAvailable; } public void setQuotaAvailable(boolean quotaAvailable) { this.quotaAvailable = quotaAvailable; } public int getMonitorCount() { return monitorCount; } public void setMonitorCount(int value) { if (monitorCount != value) { monitorCount = value; onPropertyChanged(new PropertyChangedEventArgs("MonitorCount")); //$NON-NLS-1$ } } public boolean getHasDomain() { return hasDomain; } public void setHasDomain(boolean value) { if (hasDomain != value) { hasDomain = value; onPropertyChanged(new PropertyChangedEventArgs("HasDomain")); //$NON-NLS-1$ } } public boolean getHasTimeZone() { return hasTimeZone; } public void setHasTimeZone(boolean value) { if (hasTimeZone != value) { hasTimeZone = value; onPropertyChanged(new PropertyChangedEventArgs("HasTimeZone")); //$NON-NLS-1$ } } public String getUsbPolicy() { return usbPolicy; } public void setUsbPolicy(String value) { if (!Objects.equals(usbPolicy, value)) { usbPolicy = value; onPropertyChanged(new PropertyChangedEventArgs("UsbPolicy")); //$NON-NLS-1$ } } public String getCpuInfo() { return cpuInfo; } public void setCpuInfo(String value) { if (!Objects.equals(cpuInfo, value)) { cpuInfo = value; onPropertyChanged(new PropertyChangedEventArgs("CpuInfo")); //$NON-NLS-1$ } } public String getGuestCpuCount() { if (guestCpuCount > 0) { return String.valueOf(guestCpuCount); } else { return ConstantsManager.getInstance().getConstants().notAvailableLabel(); } } public void setGuestCpuCount(int value) { guestCpuCount = value; } public boolean getIsHighlyAvailable() { return isHighlyAvailable; } public void setIsHighlyAvailable(boolean value) { if (isHighlyAvailable != value) { isHighlyAvailable = value; onPropertyChanged(new PropertyChangedEventArgs("IsHighlyAvailable")); //$NON-NLS-1$ } } public String getPriority() { return priority; } public void setPriority(String value) { if (!Objects.equals(priority, value)) { priority = value; onPropertyChanged(new PropertyChangedEventArgs("Priority")); //$NON-NLS-1$ } } public boolean getHasAlert() { return hasAlert; } public void setHasAlert(boolean value) { if (hasAlert != value) { hasAlert = value; onPropertyChanged(new PropertyChangedEventArgs("HasAlert")); //$NON-NLS-1$ } } public String getAlert() { return alert; } public void setAlert(String value) { if (!Objects.equals(alert, value)) { alert = value; onPropertyChanged(new PropertyChangedEventArgs("Alert")); //$NON-NLS-1$ } } public String getDomain() { return domain; } public void setDomain(String value) { if (!Objects.equals(domain, value)) { domain = value; onPropertyChanged(new PropertyChangedEventArgs("Domain")); //$NON-NLS-1$ } } public String getStorageDomain() { return storageDomain; } public void setStorageDomain(String value) { if (!Objects.equals(storageDomain, value)) { storageDomain = value; onPropertyChanged(new PropertyChangedEventArgs("StorageDomain")); //$NON-NLS-1$ } } public String getTimeZone() { return timeZone; } public void setTimeZone(String value) { if (!Objects.equals(timeZone, value)) { timeZone = value; onPropertyChanged(new PropertyChangedEventArgs("TimeZone")); //$NON-NLS-1$ } } public boolean getHasDefaultHost() { return hasDefaultHost; } public void setHasDefaultHost(boolean value) { if (hasDefaultHost != value) { hasDefaultHost = value; onPropertyChanged(new PropertyChangedEventArgs("HasDefaultHost")); //$NON-NLS-1$ } } public String getDefaultHost() { return defaultHost; } public void setDefaultHost(String value) { if (!Objects.equals(defaultHost, value)) { defaultHost = value; onPropertyChanged(new PropertyChangedEventArgs("DefaultHost")); //$NON-NLS-1$ } } public boolean getHasCustomProperties() { return hasCustomProperties; } public void setHasCustomProperties(boolean value) { if (hasCustomProperties != value) { hasCustomProperties = value; onPropertyChanged(new PropertyChangedEventArgs("HasCustomProperties")); //$NON-NLS-1$ } } public String getCustomProperties() { return customProperties; } public void setCustomProperties(String value) { if (!Objects.equals(customProperties, value)) { customProperties = value; onPropertyChanged(new PropertyChangedEventArgs("CustomProperties")); //$NON-NLS-1$ } } public String getVmId() { return vmId; } public void setVmId(String value) { if (!Objects.equals(vmId, value)) { vmId = value; onPropertyChanged(new PropertyChangedEventArgs("VmId")); //$NON-NLS-1$ } } public String getFqdn() { return fqdn; } public void setFqdn(String value) { if (!Objects.equals(fqdn, value)) { fqdn = value; onPropertyChanged(new PropertyChangedEventArgs("FQDN")); //$NON-NLS-1$ } } public String getCompatibilityVersion() { return compatibilityVersion; } public void setCompatibilityVersion(String value) { if (!Objects.equals(compatibilityVersion, value)) { compatibilityVersion = value; onPropertyChanged(new PropertyChangedEventArgs("CompatibilityVersion")); //$NON-NLS-1$ } } }