package org.ovirt.engine.ui.uicommon.models.vms; import java.util.Collections; import org.ovirt.engine.core.compat.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.vdscommands.*; import org.ovirt.engine.core.common.queries.*; import org.ovirt.engine.core.common.action.*; import org.ovirt.engine.ui.frontend.*; import org.ovirt.engine.ui.uicommon.*; import org.ovirt.engine.ui.uicommon.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.ui.uicommon.dataprovider.*; import org.ovirt.engine.ui.uicommon.validation.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.ui.uicommon.*; import org.ovirt.engine.ui.uicommon.models.*; @SuppressWarnings("unused") public abstract class IVmModelBehavior { private UnitVmModel privateModel; public UnitVmModel getModel() { return privateModel; } public void setModel(UnitVmModel value) { privateModel = value; } private SystemTreeItemModel privateSystemTreeSelectedItem; public SystemTreeItemModel getSystemTreeSelectedItem() { return privateSystemTreeSelectedItem; } public void setSystemTreeSelectedItem(SystemTreeItemModel value) { privateSystemTreeSelectedItem = value; } public void Initialize(SystemTreeItemModel systemTreeSelectedItem) { this.setSystemTreeSelectedItem(systemTreeSelectedItem); } public abstract void DataCenter_SelectedItemChanged(); public abstract void Template_SelectedItemChanged(); public abstract void Cluster_SelectedItemChanged(); public abstract void DefaultHost_SelectedItemChanged(); public abstract void Provisioning_SelectedItemChanged(); public abstract void UpdateMinAllocatedMemory(); public boolean Validate() { return true; } protected void UpdateCdImage() { storage_pool dataCenter = (storage_pool)getModel().getDataCenter().getSelectedItem(); if (dataCenter == null) { return; } AsyncDataProvider.GetIsoDomainByDataCenterId(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { IVmModelBehavior behavior = (IVmModelBehavior)target; storage_domains storageDomain = (storage_domains)returnValue; if (storageDomain != null) { behavior.PostUpdateCdImage(storageDomain.getid()); } else { behavior.getModel().getCdImage().setItems(new java.util.ArrayList<String>()); } } }, getModel().getHash()), dataCenter.getId()); } public void PostUpdateCdImage(Guid storageDomainId) { AsyncDataProvider.GetIrsImageList(new AsyncQuery(getModel(), new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { UnitVmModel model = (UnitVmModel)target; java.util.ArrayList<String> images = (java.util.ArrayList<String>)returnValue; String oldCdImage = (String)model.getCdImage().getSelectedItem(); model.getCdImage().setItems(images); model.getCdImage().setSelectedItem((oldCdImage != null) ? oldCdImage : Linq.FirstOrDefault(images)); } }, getModel().getHash()), storageDomainId, false); } private Iterable<java.util.Map.Entry<String, String>> cachedTimeZones; protected void UpdateTimeZone() { if (cachedTimeZones == null) { AsyncDataProvider.GetTimeZoneList(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { IVmModelBehavior behavior = (IVmModelBehavior)target; cachedTimeZones = ((java.util.HashMap<String, String>)returnValue).entrySet(); behavior.PostUpdateTimeZone(); } }, getModel().getHash())); } else { PostUpdateTimeZone(); } } public void PostUpdateTimeZone() { //If there was some time zone selected before, try select it again. String oldTimeZoneKey = ((java.util.Map.Entry<String, String>)getModel().getTimeZone().getSelectedItem()).getKey(); getModel().getTimeZone().setItems(cachedTimeZones); if (oldTimeZoneKey != null) { getModel().getTimeZone().setSelectedItem(Linq.FirstOrDefault(cachedTimeZones, new Linq.TimeZonePredicate(oldTimeZoneKey))); } else { getModel().getTimeZone().setSelectedItem(null); } } private String cachedDefaultTimeZoneKey; protected void UpdateDefaultTimeZone() { if (cachedDefaultTimeZoneKey == null) { AsyncDataProvider.GetDefaultTimeZone(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { IVmModelBehavior behavior = (IVmModelBehavior)target; cachedDefaultTimeZoneKey = (String)returnValue; behavior.PostUpdateDefaultTimeZone(); } }, getModel().getHash())); } else { PostUpdateDefaultTimeZone(); } } public void PostUpdateDefaultTimeZone() { //Patch! Create key-value pair with a right key. getModel().getTimeZone().setSelectedItem(new KeyValuePairCompat<String, String>(cachedDefaultTimeZoneKey, "")); UpdateTimeZone(); } protected void UpdateDomain() { AsyncDataProvider.GetDomainList(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { IVmModelBehavior behavior = (IVmModelBehavior)target; java.util.List<String> domains = (java.util.List<String>)returnValue; String oldDomain = (String)behavior.getModel().getDomain().getSelectedItem(); if (oldDomain != null && !oldDomain.equals("") && !domains.contains(oldDomain)) { domains.add(0, oldDomain); } behavior.getModel().getDomain().setItems(domains); behavior.getModel().getDomain().setSelectedItem((oldDomain != null) ? oldDomain : Linq.FirstOrDefault(domains)); } }, getModel().getHash()), true); } protected void InitPriority(int priority) { AsyncDataProvider.GetRoundedPriority(new AsyncQuery(getModel(), new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { UnitVmModel model = (UnitVmModel)target; int value = (Integer)returnValue; EntityModel tempVar = new EntityModel(); tempVar.setEntity(value); model.getPriority().setSelectedItem(tempVar); UpdatePriority(); } }, getModel().getHash()), priority); } private Integer cachedMaxPrority; protected void UpdatePriority() { if (cachedMaxPrority == null) { AsyncDataProvider.GetMaxVmPriority(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { IVmModelBehavior behavior = (IVmModelBehavior)target; cachedMaxPrority = (Integer)returnValue; behavior.PostUpdatePriority(); } }, getModel().getHash())); } else { PostUpdatePriority(); } } private void PostUpdatePriority() { java.util.ArrayList<EntityModel> items = new java.util.ArrayList<EntityModel>(); EntityModel tempVar = new EntityModel(); tempVar.setTitle("Low"); tempVar.setEntity(1); items.add(tempVar); EntityModel tempVar2 = new EntityModel(); tempVar2.setTitle("Medium"); tempVar2.setEntity(cachedMaxPrority / 2); //C# TO JAVA CONVERTER TODO TASK: Arithmetic operations involving nullable type instances are not converted to null-value logic: items.add(tempVar2); EntityModel tempVar3 = new EntityModel(); tempVar3.setTitle("High"); tempVar3.setEntity(cachedMaxPrority); items.add(tempVar3); //If there was some priority selected before, try select it again. EntityModel oldPriority = (EntityModel)getModel().getPriority().getSelectedItem(); getModel().getPriority().setItems(items); if (oldPriority != null) { for (EntityModel item : items) { int val1 = (Integer) item.getEntity(); int val2 = (Integer) oldPriority.getEntity(); if ((new Integer(val1)).equals(val2)) { getModel().getPriority().setSelectedItem(item); break; } } } else { getModel().getPriority().setSelectedItem(Linq.FirstOrDefault(items)); } } protected void ChangeDefualtHost() { } protected void UpdateDefaultHost() { VDSGroup cluster = (VDSGroup)getModel().getCluster().getSelectedItem(); if (cluster == null) { getModel().getDefaultHost().setItems(new java.util.ArrayList<VDS>()); getModel().getDefaultHost().setSelectedItem(null); return; } AsyncDataProvider.GetHostListByCluster(new AsyncQuery(getModel(), new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { UnitVmModel model = (UnitVmModel)target; java.util.ArrayList<VDS> hosts = (java.util.ArrayList<VDS>)returnValue; VDS oldDefaultHost = (VDS)model.getDefaultHost().getSelectedItem(); if(model.getBehavior().getSystemTreeSelectedItem() != null && model.getBehavior().getSystemTreeSelectedItem().getType() == SystemTreeItemType.Host) { VDS host = (VDS) model.getBehavior().getSystemTreeSelectedItem().getEntity(); for (VDS vds : hosts) { if(host.getvds_id().equals(vds.getvds_id())) { model.getDefaultHost().setItems(new java.util.ArrayList<VDS>(java.util.Arrays.asList(new VDS[] {vds}))); model.getDefaultHost().setSelectedItem(vds); model.getDefaultHost().setIsChangable(false); model.getDefaultHost().setInfo("Cannot choose other Host in tree context"); break; } } } else { model.getDefaultHost().setItems(hosts); model.getDefaultHost().setSelectedItem(oldDefaultHost != null ? Linq.FirstOrDefault(hosts, new Linq.HostPredicate(oldDefaultHost.getvds_id())) : Linq.FirstOrDefault(hosts)); } ChangeDefualtHost(); } }, getModel().getHash()), cluster.getname()); } protected void UpdateIsCustomPropertiesAvailable() { VDSGroup cluster = (VDSGroup)getModel().getCluster().getSelectedItem(); if (cluster != null) { AsyncDataProvider.IsCustomPropertiesAvailable(new AsyncQuery(getModel(), new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { UnitVmModel model = (UnitVmModel)target; model.setIsCustomPropertiesAvailable((Boolean)returnValue); } }, getModel().getHash()), cluster.getcompatibility_version().toString()); } } public int maxCpus = 0; public int maxCpusPerSocket = 0; protected void UpdateNumOfSockets() { VDSGroup cluster = (VDSGroup)getModel().getCluster().getSelectedItem(); if (cluster == null) { return; } String version = cluster.getcompatibility_version().toString(); AsyncDataProvider.GetMaxNumOfVmSockets(new AsyncQuery(new Object[] { this, getModel() }, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { Object[] array = (Object[])target; IVmModelBehavior behavior = (IVmModelBehavior)array[0]; UnitVmModel model = (UnitVmModel)array[1]; model.getNumOfSockets().setMax((Integer)returnValue); model.getNumOfSockets().setMin(1); model.getNumOfSockets().setInterval(1); model.getNumOfSockets().setIsAllValuesSet(true); if (model.getNumOfSockets().getEntity() == null) { model.getNumOfSockets().setEntity(1); } behavior.PostUpdateNumOfSockets(); } }, getModel().getHash()), version); } public void PostUpdateNumOfSockets() { VDSGroup cluster = (VDSGroup)getModel().getCluster().getSelectedItem(); String version = cluster.getcompatibility_version().toString(); AsyncDataProvider.GetMaxNumOfVmCpus(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { IVmModelBehavior behavior = (IVmModelBehavior)target; behavior.maxCpus = (Integer)returnValue; behavior.PostUpdateNumOfSockets2(); } }, getModel().getHash()), version); } public void PostUpdateNumOfSockets2() { VDSGroup cluster = (VDSGroup)getModel().getCluster().getSelectedItem(); String version = cluster.getcompatibility_version().toString(); AsyncDataProvider.GetMaxNumOfCPUsPerSocket(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { IVmModelBehavior behavior = (IVmModelBehavior)target; behavior.maxCpusPerSocket = (Integer)returnValue; behavior.UpdateTotalCpus(); } }, getModel().getHash()), version); } public void UpdateTotalCpus() { int numOfSockets = Integer.parseInt(getModel().getNumOfSockets().getEntity().toString()); int totalCPUCores = getModel().getTotalCPUCores().getEntity() != null ? Integer.parseInt(getModel().getTotalCPUCores().getEntity().toString()) : 0; int realMaxCpus = maxCpus < numOfSockets * maxCpusPerSocket ? maxCpus : numOfSockets * maxCpusPerSocket; if (maxCpus == 0 || maxCpusPerSocket == 0) { return; } getModel().getTotalCPUCores().setMax(realMaxCpus - (realMaxCpus % numOfSockets)); getModel().getTotalCPUCores().setMin(numOfSockets); getModel().getTotalCPUCores().setInterval(numOfSockets); //update value if needed //if the slider in the range but not on tick update it to lowest tick if ((totalCPUCores % numOfSockets != 0) && totalCPUCores < getModel().getTotalCPUCores().getMax() && totalCPUCores > getModel().getTotalCPUCores().getMin()) { getModel().getTotalCPUCores().setEntity(totalCPUCores - (totalCPUCores % numOfSockets)); } //if the value is lower than range update it to min else if (totalCPUCores < getModel().getTotalCPUCores().getMin()) { getModel().getTotalCPUCores().setEntity((int)getModel().getTotalCPUCores().getMin()); } //if the value is higher than range update it to max else if (totalCPUCores > getModel().getTotalCPUCores().getMax()) { getModel().getTotalCPUCores().setEntity((int)getModel().getTotalCPUCores().getMax()); } getModel().getTotalCPUCores().setIsAllValuesSet(true); } }