package org.ovirt.engine.ui.uicommonweb.models.hosts;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.mode.ApplicationMode;
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.UIConstants;
import org.ovirt.engine.ui.uicompat.UIMessages;
@SuppressWarnings("unused")
public class HostHardwareGeneralModel extends EntityModel<VDS> {
private static final UIConstants constants = ConstantsManager.getInstance().getConstants();
private static final UIMessages messages = ConstantsManager.getInstance().getMessages();
private String hardwareManufacturer;
public String getHardwareManufacturer() {
return hardwareManufacturer;
}
public void setHardwareManufacturer(String value) {
if (!Objects.equals(hardwareManufacturer, value)) {
hardwareManufacturer = value;
onPropertyChanged(new PropertyChangedEventArgs("manufacturer")); //$NON-NLS-1$
}
}
private String hardwareProductName;
public String getHardwareProductName() {
return hardwareProductName;
}
public void setHardwareProductName(String value) {
if (!Objects.equals(hardwareProductName, value)) {
hardwareProductName = value;
onPropertyChanged(new PropertyChangedEventArgs("productName")); //$NON-NLS-1$
}
}
private String hardwareSerialNumber;
public String getHardwareSerialNumber() {
return hardwareSerialNumber;
}
public void setHardwareSerialNumber(String value) {
if (!Objects.equals(hardwareSerialNumber, value)) {
hardwareSerialNumber = value;
onPropertyChanged(new PropertyChangedEventArgs("serialNumber")); //$NON-NLS-1$
}
}
private String hardwareVersion;
public String getHardwareVersion() {
return hardwareVersion;
}
public void setHardwareVersion(String value) {
if (!Objects.equals(hardwareVersion, value)) {
hardwareVersion = value;
onPropertyChanged(new PropertyChangedEventArgs("hardwareVersion")); //$NON-NLS-1$
}
}
private String hardwareUUID;
public String getHardwareUUID() {
return hardwareUUID;
}
public void setHardwareUUID(String value) {
if (!Objects.equals(hardwareUUID, value)) {
hardwareUUID = value;
onPropertyChanged(new PropertyChangedEventArgs("uuid")); //$NON-NLS-1$
}
}
private String hardwareFamily;
public String getHardwareFamily() {
return hardwareFamily;
}
@SuppressWarnings("deprecation")
public void setHardwareFamily(String value) {
if (!Objects.equals(hardwareFamily, value)) {
hardwareFamily = value;
onPropertyChanged(new PropertyChangedEventArgs("family")); //$NON-NLS-1$
}
}
private String cpuType;
public String getCpuType() {
return cpuType;
}
public void setCpuType(String value) {
if (!Objects.equals(cpuType, value)) {
cpuType = value;
onPropertyChanged(new PropertyChangedEventArgs("CpuType")); //$NON-NLS-1$
}
}
private String cpuModel;
public String getCpuModel() {
return cpuModel;
}
public void setCpuModel(String value) {
if (!Objects.equals(cpuModel, value)) {
cpuModel = value;
onPropertyChanged(new PropertyChangedEventArgs("CpuModel")); //$NON-NLS-1$
}
}
private Integer numberOfSockets;
public Integer getNumberOfSockets() {
return numberOfSockets;
}
public void setNumberOfSockets(Integer value) {
if (numberOfSockets == null && value == null) {
return;
} if (numberOfSockets == null || !numberOfSockets.equals(value)) {
numberOfSockets = value;
onPropertyChanged(new PropertyChangedEventArgs("NumberOfSockets")); //$NON-NLS-1$
}
}
private String coresPerSocket;
public String getCoresPerSocket() {
return coresPerSocket;
}
public void setCoresPerSocket(String value) {
if (coresPerSocket == null && value == null) {
return;
} if (coresPerSocket == null || !coresPerSocket.equals(value)) {
coresPerSocket = value;
onPropertyChanged(new PropertyChangedEventArgs("CoresPerSocket")); //$NON-NLS-1$
}
}
private String threadsPerCore;
public String getThreadsPerCore() {
return threadsPerCore;
}
public void setThreadsPerCore(String value) {
if (threadsPerCore == null && value == null) {
return;
} if (threadsPerCore == null || !threadsPerCore.equals(value)) {
threadsPerCore = value;
onPropertyChanged(new PropertyChangedEventArgs("ThreadsPerCore")); //$NON-NLS-1$
}
}
public enum HbaDeviceKeys { MODEL_NAME, // Model name field
TYPE, // Device type
WWNN, // WWNN of the NIC
WWNPS // Comma separated list of WWNPs (port ids)
};
private List<EnumMap<HbaDeviceKeys, String>> hbaDevices;
public List<EnumMap<HbaDeviceKeys, String>> getHbaDevices() {
return hbaDevices;
}
public void setHbaDevices(List<EnumMap<HbaDeviceKeys, String>> hbaDevices) {
this.hbaDevices = hbaDevices;
}
public HostHardwareGeneralModel() {
setTitle(ConstantsManager.getInstance().getConstants().generalTitle());
setHelpTag(HelpTag.hardware);
setHashName("hardware"); //$NON-NLS-1$
setAvailableInModes(ApplicationMode.VirtOnly);
}
@Override
protected void entityPropertyChanged(Object sender, PropertyChangedEventArgs e) {
super.entityPropertyChanged(sender, e);
}
private void updateProperties() {
VDS vds = getEntity();
setHardwareManufacturer(vds.getHardwareManufacturer());
setHardwareVersion(vds.getHardwareVersion());
setHardwareProductName(vds.getHardwareProductName());
setHardwareUUID(vds.getHardwareUUID());
setHardwareSerialNumber(vds.getHardwareSerialNumber());
setHardwareFamily(vds.getHardwareFamily());
setCpuType(vds.getCpuName() != null ? vds.getCpuName().getCpuName() : null);
setCpuModel(vds.getCpuModel());
setNumberOfSockets(vds.getCpuSockets());
if (vds.getCpuCores() != null && vds.getCpuSockets() != null
&& vds.getCpuThreads() != null && vds.getCpuSockets() != 0) {
int coresPerSocket = vds.getCpuCores() / vds.getCpuSockets();
String fieldValue = String.valueOf(coresPerSocket);
if (vds.getCountThreadsAsCores()) {
fieldValue = ConstantsManager.getInstance().getMessages()
.threadsAsCoresPerSocket(coresPerSocket, vds.getCpuThreads() / vds.getCpuSockets());
}
setCoresPerSocket(fieldValue);
} else {
setCoresPerSocket(null);
}
if (vds.getCpuThreads() == null || vds.getCpuCores() == null || vds.getCpuCores() == 0) {
setThreadsPerCore(constants.unknown());
} else {
Integer threads = vds.getCpuThreads() / vds.getCpuCores();
setThreadsPerCore(messages.commonMessageWithBrackets(threads.toString(), threads > 1 ? constants.smtEnabled()
: constants.smtDisabled()));
}
/* Go through the list of HBA devices and transfer the necessary info
to the GWT host hardware model */
List<EnumMap<HbaDeviceKeys, String>> hbaDevices = new ArrayList<>();
List<Map<String, String>> fcDevices = vds.getHBAs() == null ? null : vds.getHBAs().get("FC"); //$NON-NLS-1$
if (fcDevices != null) {
for (Map<String, String> device: fcDevices) {
EnumMap<HbaDeviceKeys, String> deviceModel = new EnumMap<>(HbaDeviceKeys.class);
deviceModel.put(HbaDeviceKeys.MODEL_NAME, device.get("model")); //$NON-NLS-1$
deviceModel.put(HbaDeviceKeys.WWNN, device.get("wwnn")); //$NON-NLS-1$
deviceModel.put(HbaDeviceKeys.WWNPS, device.get("wwpn")); //$NON-NLS-1$
deviceModel.put(HbaDeviceKeys.TYPE, "FC"); //$NON-NLS-1$
hbaDevices.add(deviceModel);
}
}
setHbaDevices(hbaDevices);
}
@Override
protected void onEntityChanged() {
super.onEntityChanged();
if (getEntity() != null) {
updateProperties();
}
}
}