package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.Objects; import org.ovirt.engine.core.common.businessentities.ArchitectureType; import org.ovirt.engine.core.common.businessentities.OsType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicompat.UIMessages; import org.ovirt.engine.ui.uicompat.external.StringUtils; import com.google.gwt.i18n.client.NumberFormat; public class VmGuestInfoModel extends EntityModel<VM> { private static final UIMessages messages = ConstantsManager.getInstance().getMessages(); private String guestUserName; private OsType guestOsType; private ArchitectureType guestOsArch; private String guestOsCodename; private String guestOsDistribution; private String guestOsKernelVersion; private String guestOsVersion; private String guestOs; private String guestOsTimezoneName; private Integer guestOsTimezoneOffset; private String guestOsNamedVersion; private String guestOsTimezone; private String clientIp; private String consoleUserName; public VmGuestInfoModel() { setTitle(ConstantsManager.getInstance().getConstants().guestInformationTitle()); setHelpTag(HelpTag.guest_info); setHashName("guest_info"); //$NON-NLS-1$ guestOsType = OsType.Other; guestOsArch = ArchitectureType.undefined; guestOsCodename = ""; guestOsDistribution = ""; guestOsKernelVersion = ""; guestOsVersion = ""; guestOs = ""; guestOsTimezoneName = ""; guestOsTimezoneOffset = 0; guestOsNamedVersion = ""; guestOsTimezone = ""; } @Override protected void onEntityChanged() { super.onEntityChanged(); if (getEntity() != null) { updateProperties(); } } @Override protected void entityPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.entityPropertyChanged(sender, e); updateProperties(); } public String getClientIp() { return clientIp; } public void setClientIp(String clientIp) { if (!Objects.equals(this.clientIp, clientIp)) { this.clientIp = clientIp; onPropertyChanged(new PropertyChangedEventArgs("ClientIp")); //$NON-NLS-1$ } } public String getConsoleUserName() { return consoleUserName; } public void setConsoleUserName(String consoleUserName) { if (!Objects.equals(this.consoleUserName, consoleUserName)) { this.consoleUserName = consoleUserName; onPropertyChanged(new PropertyChangedEventArgs("ConsoleUserName")); //$NON-NLS-1$ } } private void updateProperties() { Object entity = getEntity(); // This class is, among other, used in extended user portal where the entity may also be a VmPool. // The Guest Info subtab should be hidden for pools. if (!(entity instanceof VM)) { return; } VM vm = (VM) entity; setClientIp(vm.getClientIp()); setConsoleUserName(!StringUtils.isEmpty(vm.getClientIp()) ? vm.getConsoleCurentUserName() : null); setGuestUserName(vm.getGuestCurentUserName()); setGuestOs(vm.getGuestOs()); setGuestOsArch(vm.getGuestOsArch()); setGuestOsCodename(vm.getGuestOsCodename()); setGuestOsDistribution(vm.getGuestOsDistribution()); setGuestOsKernelVersion(vm.getGuestOsKernelVersion()); setGuestOsType(vm.getGuestOsType()); setGuestOsVersion(vm.getGuestOsVersion()); setGuestOsTimezoneName(vm.getGuestOsTimezoneName()); setGuestOsTimezoneOffset(vm.getGuestOsTimezoneOffset()); setGuestOsNamedVersion(); String hours = NumberFormat.getFormat("00").format(guestOsTimezoneOffset / 60.); //$NON-NLS-1$ String minutes = NumberFormat.getFormat("00").format(guestOsTimezoneOffset % 60); //$NON-NLS-1$ if (guestOsTimezoneOffset >= 0) { guestOsTimezone = messages.positiveTimezoneOffset(guestOsTimezoneName, hours, minutes); } else { guestOsTimezone = messages.negativeTimezoneOffset(guestOsTimezoneName, hours, minutes); } } public String getGuestOs() { return guestOs; } public void setGuestOs(String guestOs) { if (!Objects.equals(this.guestOs, guestOs)) { this.guestOs = guestOs; onPropertyChanged(new PropertyChangedEventArgs("GuestOs")); //$NON-NLS-1$ } } public String getGuestOsTimezone() { return guestOsTimezone; } public String getGuestUserName() { return guestUserName; } public void setGuestUserName(String guestUserName) { if (!Objects.equals(this.guestUserName, guestUserName)) { this.guestUserName = guestUserName; onPropertyChanged(new PropertyChangedEventArgs("GuestUserName")); //$NON-NLS-1$ } } public String getGuestOsType() { return guestOsType.name(); } public void setGuestOsType(OsType guestOsType) { if (!Objects.equals(this.guestOsType, guestOsType)) { this.guestOsType = guestOsType; onPropertyChanged(new PropertyChangedEventArgs("GuestOsType")); //$NON-NLS-1$ } } public String getGuestOsArch() { return guestOsArch.name(); } public void setGuestOsArch(ArchitectureType guestOsArch) { if (!Objects.equals(this.guestOsArch, guestOsArch)) { this.guestOsArch = guestOsArch; onPropertyChanged(new PropertyChangedEventArgs("GuestOsArch")); //$NON-NLS-1$ } } public String getGuestOsCodename() { return guestOsCodename; } public void setGuestOsCodename(String guestOsCodename) { if (!Objects.equals(this.guestOsCodename, guestOsCodename)) { this.guestOsCodename = guestOsCodename; onPropertyChanged(new PropertyChangedEventArgs("GuestOsCodename")); //$NON-NLS-1$ } } public String getGuestOsDistribution() { return guestOsDistribution; } public void setGuestOsDistribution(String guestOsDistribution) { if (!Objects.equals(this.guestOsDistribution, guestOsDistribution)) { this.guestOsDistribution = guestOsDistribution; onPropertyChanged(new PropertyChangedEventArgs("GuestOsDistribution")); //$NON-NLS-1$ } } public String getGuestOsKernelVersion() { return guestOsKernelVersion; } public void setGuestOsKernelVersion(String guestOsKernelVersion) { if (!Objects.equals(this.guestOsKernelVersion, guestOsKernelVersion)) { this.guestOsKernelVersion = guestOsKernelVersion; onPropertyChanged(new PropertyChangedEventArgs("GuestOsKernelVersion")); //$NON-NLS-1$ } } public String getGuestOsVersion() { return guestOsVersion; } public void setGuestOsVersion(String guestOsVersion) { if (!Objects.equals(this.guestOsVersion, guestOsVersion)) { this.guestOsVersion = guestOsVersion; onPropertyChanged(new PropertyChangedEventArgs("GuestOsVersion")); //$NON-NLS-1$ } } public String getGuestOsTimezoneName() { return guestOsTimezoneName; } public void setGuestOsTimezoneName(String guestOsTimezoneName) { if (!Objects.equals(this.guestOsTimezoneName, guestOsTimezoneName)) { this.guestOsTimezoneName = guestOsTimezoneName; onPropertyChanged(new PropertyChangedEventArgs("TimezoneName")); //$NON-NLS-1$ } } public Integer getGuestOsTimezoneOffset() { return guestOsTimezoneOffset; } public void setGuestOsTimezoneOffset(Integer guestOsTimezoneOffset) { if (!Objects.equals(this.guestOsTimezoneOffset, guestOsTimezoneOffset)) { this.guestOsTimezoneOffset = guestOsTimezoneOffset; onPropertyChanged(new PropertyChangedEventArgs("TimezoneOffset")); //$NON-NLS-1$ } } public String getGuestOsNamedVersion() { return guestOsNamedVersion; } private void setGuestOsNamedVersion() { if (guestOsType == OsType.Linux) { String optional = ""; // $NON-NLS-1$ if (!StringUtils.isEmpty(guestOsCodename)) { optional = messages.guestOSVersionOptional(guestOsCodename); } guestOsNamedVersion = messages.guestOSVersionLinux(guestOsDistribution, guestOsVersion, optional); } else if (guestOsType == OsType.Windows && guestOs.startsWith("Win ")) { //$NON-NLS-1$ if (guestOs.startsWith("Win 20")) { //$NON-NLS-1$ guestOsNamedVersion = messages.guestOSVersionWindowsServer(guestOs.substring(4), guestOsVersion); } else { guestOsNamedVersion = messages.guestOSVersionWindows(guestOs.substring(4), guestOsVersion); } } } }