package org.ovirt.engine.ui.uicommonweb.models.pools;
import java.util.ArrayList;
import java.util.Objects;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmPool;
import org.ovirt.engine.core.common.interfaces.SearchType;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
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.ui.frontend.AsyncCallback;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
import org.ovirt.engine.ui.uicommonweb.models.vms.AbstractGeneralModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.VmTemplateNameRenderer;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.EnumTranslator;
import org.ovirt.engine.ui.uicompat.Event;
import org.ovirt.engine.ui.uicompat.EventArgs;
import org.ovirt.engine.ui.uicompat.EventDefinition;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
import org.ovirt.engine.ui.uicompat.Translator;
public class PoolGeneralModel extends AbstractGeneralModel<VmPool> {
public static final EventDefinition updateCompleteEventDefinition;
private Event<EventArgs> privateUpdateCompleteEvent;
private static final VmTemplateNameRenderer vmTemplateNameRenderer = new VmTemplateNameRenderer();
public Event<EventArgs> getUpdateCompleteEvent() {
return privateUpdateCompleteEvent;
}
private void setUpdateCompleteEvent(Event<EventArgs> value) {
privateUpdateCompleteEvent = value;
}
private VM privatevm;
public VM getvm() {
return privatevm;
}
public void setvm(VM value) {
privatevm = value;
}
private String name;
public String getName() {
return name;
}
public void setName(String value) {
if (!Objects.equals(name, value)) {
name = value;
onPropertyChanged(new PropertyChangedEventArgs("Name")); //$NON-NLS-1$
}
}
private String description;
public String getDescription() {
return description;
}
public void setDescription(String value) {
if (!Objects.equals(description, value)) {
description = value;
onPropertyChanged(new PropertyChangedEventArgs("Description")); //$NON-NLS-1$
}
}
private int os;
public int getOS() {
return os;
}
public void setOS(int value) {
if (os != value) {
os = value;
onPropertyChanged(new PropertyChangedEventArgs("OS")); //$NON-NLS-1$
}
}
private String defaultDisplayType;
public String getDefaultDisplayType() {
return defaultDisplayType;
}
public void setDefaultDisplayType(String value) {
if (!Objects.equals(defaultDisplayType, value)) {
defaultDisplayType = value;
onPropertyChanged(new PropertyChangedEventArgs("DefaultDisplayType")); //$NON-NLS-1$
}
}
private String origin;
public String getOrigin() {
return origin;
}
public void setOrigin(String value) {
if (!Objects.equals(origin, value)) {
origin = value;
onPropertyChanged(new PropertyChangedEventArgs("Origin")); //$NON-NLS-1$
}
}
private String template;
public String getTemplate() {
return template;
}
public void setTemplate(String value) {
if (!Objects.equals(template, value)) {
template = value;
onPropertyChanged(new PropertyChangedEventArgs("Template")); //$NON-NLS-1$
}
}
private int cpuCount;
public int getCpuCount() {
return cpuCount;
}
public void setCpuCount(int value) {
if (cpuCount != value) {
cpuCount = value;
onPropertyChanged(new PropertyChangedEventArgs("CpuCount")); //$NON-NLS-1$
}
}
private int monitorCount;
public int getMonitorCount() {
return monitorCount;
}
public void setMonitorCount(int value) {
if (monitorCount != value) {
monitorCount = value;
onPropertyChanged(new PropertyChangedEventArgs("MonitorCount")); //$NON-NLS-1$
}
}
private String definedMemory;
public String getDefinedMemory() {
return definedMemory;
}
public void setDefinedMemory(String value) {
if (!Objects.equals(definedMemory, value)) {
definedMemory = value;
onPropertyChanged(new PropertyChangedEventArgs("DefinedMemory")); //$NON-NLS-1$
}
}
private String minAllocatedMemory;
public String getMinAllocatedMemory() {
return minAllocatedMemory;
}
public void setMinAllocatedMemory(String value) {
if (!Objects.equals(minAllocatedMemory, value)) {
minAllocatedMemory = value;
onPropertyChanged(new PropertyChangedEventArgs("MinAllocatedMemory")); //$NON-NLS-1$
}
}
private boolean hasDomain;
public boolean getHasDomain() {
return hasDomain;
}
public void setHasDomain(boolean value) {
if (hasDomain != value) {
hasDomain = value;
onPropertyChanged(new PropertyChangedEventArgs("HasDomain")); //$NON-NLS-1$
}
}
private boolean hasTimeZone;
public boolean getHasTimeZone() {
return hasTimeZone;
}
public void setHasTimeZone(boolean value) {
if (hasTimeZone != value) {
hasTimeZone = value;
onPropertyChanged(new PropertyChangedEventArgs("HasTimeZone")); //$NON-NLS-1$
}
}
private String usbPolicy;
public String getUsbPolicy() {
return usbPolicy;
}
public void setUsbPolicy(String value) {
if (!Objects.equals(usbPolicy, value)) {
usbPolicy = value;
onPropertyChanged(new PropertyChangedEventArgs("UsbPolicy")); //$NON-NLS-1$
}
}
private String domain;
public String getDomain() {
return domain;
}
public void setDomain(String value) {
if (!Objects.equals(domain, value)) {
domain = value;
onPropertyChanged(new PropertyChangedEventArgs("Domain")); //$NON-NLS-1$
}
}
private String timeZone;
public String getTimeZone() {
return timeZone;
}
public void setTimeZone(String value) {
if (!Objects.equals(timeZone, value)) {
timeZone = value;
onPropertyChanged(new PropertyChangedEventArgs("TimeZone")); //$NON-NLS-1$
}
}
private String cpuInfo;
public String getCpuInfo() {
return cpuInfo;
}
public void setCpuInfo(String value) {
if (!Objects.equals(cpuInfo, value)) {
cpuInfo = value;
onPropertyChanged(new PropertyChangedEventArgs("CpuInfo")); //$NON-NLS-1$
}
}
private boolean hasDefaultHost;
public boolean getHasDefaultHost() {
return hasDefaultHost;
}
public void setHasDefaultHost(boolean value) {
if (hasDefaultHost != value) {
hasDefaultHost = value;
onPropertyChanged(new PropertyChangedEventArgs("HasDefaultHost")); //$NON-NLS-1$
}
}
private String defaultHost;
public String getDefaultHost() {
return defaultHost;
}
public void setDefaultHost(String value) {
if (!Objects.equals(defaultHost, value)) {
defaultHost = value;
onPropertyChanged(new PropertyChangedEventArgs("DefaultHost")); //$NON-NLS-1$
}
}
private boolean isStateless;
public boolean getIsStateless() {
return isStateless;
}
public void setIsStateless(boolean value) {
if (isStateless != value) {
isStateless = value;
onPropertyChanged(new PropertyChangedEventArgs("IsStateless")); //$NON-NLS-1$
}
}
private String quotaName;
public void setQuotaName(String value) {
if (!Objects.equals(defaultHost, value)) {
this.quotaName = value;
onPropertyChanged(new PropertyChangedEventArgs("QuotaName")); //$NON-NLS-1$
}
}
public String getQuotaName() {
return quotaName;
}
static {
updateCompleteEventDefinition = new EventDefinition("UpdateComplete", PoolGeneralModel.class); //$NON-NLS-1$
}
public PoolGeneralModel() {
setUpdateCompleteEvent(new Event<>(updateCompleteEventDefinition));
setTitle(ConstantsManager.getInstance().getConstants().generalTitle());
setHelpTag(HelpTag.general);
setHashName("general"); //$NON-NLS-1$
}
@Override
protected void onEntityChanged() {
super.onEntityChanged();
if (getEntity() != null) {
updateProperties();
}
}
@Override
protected void entityPropertyChanged(Object sender, PropertyChangedEventArgs e) {
super.entityPropertyChanged(sender, e);
updateProperties();
}
private void updateProperties() {
final VmPool pool = getEntity();
setName(pool.getName());
setDescription(pool.getVmPoolDescription());
Frontend.getInstance().runQuery(VdcQueryType.GetVmDataByPoolId,
new IdQueryParameters(pool.getVmPoolId()),
new AsyncQuery<>(new AsyncCallback<VdcQueryReturnValue>() {
@Override
public void onSuccess(VdcQueryReturnValue result) {
// currently, only query that is being invoked asynchrounously in
// this context is GetVmDataByPoolIdQuery. If more async queries will be needed,
// refactor to "switch ... case...".
if (result != null) {
setvm((VM) result.getReturnValue());
}
if (getvm() != null) {
setTemplate(vmTemplateNameRenderer.render(getvm()));
setCpuInfo(ConstantsManager.getInstance().getMessages().cpuInfoLabel(
getvm().getNumOfCpus(),
getvm().getNumOfSockets(),
getvm().getCpuPerSocket(),
getvm().getThreadsPerCpu()));
setMonitorCount(getvm().getNumOfMonitors());
setOS(getvm().getVmOsId());
setDefinedMemory(getvm().getVmMemSizeMb() + " MB"); //$NON-NLS-1$
setMinAllocatedMemory(getvm().getMinAllocatedMem() + " MB"); //$NON-NLS-1$
Translator translator = EnumTranslator.getInstance();
setDefaultDisplayType(translator.translate(getvm().getDefaultDisplayType()));
setOrigin(translator.translate(getvm().getOrigin()));
setUsbPolicy(translator.translate(getvm().getUsbPolicy()));
setHasDomain(AsyncDataProvider.getInstance().isWindowsOsType(getvm().getVmOsId()));
setHasTimeZone(AsyncDataProvider.getInstance().isWindowsOsType(getvm().getVmOsId()));
setTimeZone(getvm().getTimeZone());
setIsStateless(!pool.isStateful());
setQuotaName(getvm().getQuotaName());
setHasDefaultHost(getvm().getDedicatedVmForVdsList().size() > 0);
if (getHasDefaultHost()) {
Frontend.getInstance().runQuery(VdcQueryType.Search, new SearchParameters("Host: cluster = " //$NON-NLS-1$
+ getvm().getClusterName() + " sortby name", SearchType.VDS), new AsyncQuery<VdcQueryReturnValue>(returnValue1 -> { //$NON-NLS-1$
String defaultHost1 = "";
ArrayList<VDS> hosts = returnValue1.getReturnValue();
for (VDS host : hosts) {
if (getvm().getDedicatedVmForVdsList().contains(host.getId())) {
if (defaultHost1.isEmpty()) {
defaultHost1 = host.getName();
} else {
defaultHost1 += ", " + host.getName(); //$NON-NLS-1$
}
}
}
setDefaultHost(defaultHost1);
}));
}
else {
setDefaultHost(ConstantsManager.getInstance()
.getConstants()
.anyHostInCluster());
}
if (getvm() != null) {
PoolGeneralModel.super.updateProperties(getvm().getId());
}
}
else {
setTemplate(null);
setCpuCount(0);
setMonitorCount(0);
setOS(0);
setDefinedMemory(null);
setMinAllocatedMemory(null);
setDefaultDisplayType(null);
setHasDomain(false);
setDomain(null);
setHasTimeZone(false);
setTimeZone(null);
setUsbPolicy(null);
setDefaultHost(null);
setIsStateless(!pool.isStateful());
setGraphicsType(""); //$NON-NLS-1$
getUpdateCompleteEvent().raise(this, EventArgs.EMPTY);
}
}
}));
}
@Override
public void cleanup() {
cleanupEvents(getUpdateCompleteEvent());
super.cleanup();
}
}