package org.ovirt.engine.ui.uicommonweb.models.clusters; 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.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.ui.uicommonweb.validation.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.ui.uicommonweb.dataprovider.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; @SuppressWarnings("unused") public class ClusterModel extends Model { private int privateServerOverCommit; public int getServerOverCommit() { return privateServerOverCommit; } public void setServerOverCommit(int value) { privateServerOverCommit = value; } private int privateDesktopOverCommit; public int getDesktopOverCommit() { return privateDesktopOverCommit; } public void setDesktopOverCommit(int value) { privateDesktopOverCommit = value; } private int privateDefaultOverCommit; public int getDefaultOverCommit() { return privateDefaultOverCommit; } public void setDefaultOverCommit(int value) { privateDefaultOverCommit = value; } private VDSGroup privateEntity; public VDSGroup getEntity() { return privateEntity; } public void setEntity(VDSGroup value) { privateEntity = value; } private boolean privateIsEdit; public boolean getIsEdit() { return privateIsEdit; } public void setIsEdit(boolean value) { privateIsEdit = value; } private boolean isCPUinitialized = false; private boolean privateIsNew; public boolean getIsNew() { return privateIsNew; } public void setIsNew(boolean value) { privateIsNew = value; } private String privateOriginalName; public String getOriginalName() { return privateOriginalName; } public void setOriginalName(String value) { privateOriginalName = value; } private NGuid privateClusterId; public NGuid getClusterId() { return privateClusterId; } public void setClusterId(NGuid value) { privateClusterId = value; } private EntityModel privateName; public EntityModel getName() { return privateName; } public void setName(EntityModel value) { privateName = value; } private EntityModel privateDescription; public EntityModel getDescription() { return privateDescription; } public void setDescription(EntityModel value) { privateDescription = value; } private ListModel privateDataCenter; public ListModel getDataCenter() { return privateDataCenter; } public void setDataCenter(ListModel value) { privateDataCenter = value; } private ListModel privateCPU; public ListModel getCPU() { return privateCPU; } public void setCPU(ListModel value) { privateCPU = value; } private ListModel privateVersion; public ListModel getVersion() { return privateVersion; } public void setVersion(ListModel value) { privateVersion = value; } private EntityModel privateOptimizationNone; public EntityModel getOptimizationNone() { return privateOptimizationNone; } public void setOptimizationNone(EntityModel value) { privateOptimizationNone = value; } private EntityModel privateOptimizationForServer; public EntityModel getOptimizationForServer() { return privateOptimizationForServer; } public void setOptimizationForServer(EntityModel value) { privateOptimizationForServer = value; } private EntityModel privateOptimizationForDesktop; public EntityModel getOptimizationForDesktop() { return privateOptimizationForDesktop; } public void setOptimizationForDesktop(EntityModel value) { privateOptimizationForDesktop = value; } private EntityModel privateOptimizationCustom; public EntityModel getOptimizationCustom() { return privateOptimizationCustom; } public void setOptimizationCustom(EntityModel value) { privateOptimizationCustom = value; } private EntityModel privateOptimizationNone_IsSelected; public EntityModel getOptimizationNone_IsSelected() { return privateOptimizationNone_IsSelected; } public void setOptimizationNone_IsSelected(EntityModel value) { privateOptimizationNone_IsSelected = value; } private EntityModel privateOptimizationForServer_IsSelected; public EntityModel getOptimizationForServer_IsSelected() { return privateOptimizationForServer_IsSelected; } public void setOptimizationForServer_IsSelected(EntityModel value) { privateOptimizationForServer_IsSelected = value; } private EntityModel privateOptimizationForDesktop_IsSelected; public EntityModel getOptimizationForDesktop_IsSelected() { return privateOptimizationForDesktop_IsSelected; } public void setOptimizationForDesktop_IsSelected(EntityModel value) { privateOptimizationForDesktop_IsSelected = value; } private EntityModel privateOptimizationCustom_IsSelected; public EntityModel getOptimizationCustom_IsSelected() { return privateOptimizationCustom_IsSelected; } public void setOptimizationCustom_IsSelected(EntityModel value) { privateOptimizationCustom_IsSelected = value; } private EntityModel privateMigrateOnErrorOption_NO; public EntityModel getMigrateOnErrorOption_NO() { return privateMigrateOnErrorOption_NO; } public void setMigrateOnErrorOption_NO(EntityModel value) { privateMigrateOnErrorOption_NO = value; } private EntityModel privateMigrateOnErrorOption_YES; public EntityModel getMigrateOnErrorOption_YES() { return privateMigrateOnErrorOption_YES; } public void setMigrateOnErrorOption_YES(EntityModel value) { privateMigrateOnErrorOption_YES = value; } private EntityModel privateMigrateOnErrorOption_HA_ONLY; public EntityModel getMigrateOnErrorOption_HA_ONLY() { return privateMigrateOnErrorOption_HA_ONLY; } public void setMigrateOnErrorOption_HA_ONLY(EntityModel value) { privateMigrateOnErrorOption_HA_ONLY = value; } private boolean isGeneralTabValid; public boolean getIsGeneralTabValid() { return isGeneralTabValid; } public void setIsGeneralTabValid(boolean value) { if (isGeneralTabValid != value) { isGeneralTabValid = value; OnPropertyChanged(new PropertyChangedEventArgs("IsGeneralTabValid")); } } private MigrateOnErrorOptions migrateOnErrorOption = MigrateOnErrorOptions.values()[0]; public MigrateOnErrorOptions getMigrateOnErrorOption() { if ((Boolean)getMigrateOnErrorOption_NO().getEntity() == true) { return MigrateOnErrorOptions.NO; } else if ((Boolean)getMigrateOnErrorOption_YES().getEntity() == true) { return MigrateOnErrorOptions.YES; } else if ((Boolean)getMigrateOnErrorOption_HA_ONLY().getEntity() == true) { return MigrateOnErrorOptions.HA_ONLY; } return MigrateOnErrorOptions.YES; } public void setMigrateOnErrorOption(MigrateOnErrorOptions value) { if (migrateOnErrorOption != value) { migrateOnErrorOption = value; //webadmin use. switch (migrateOnErrorOption) { case NO: getMigrateOnErrorOption_NO().setEntity(true); getMigrateOnErrorOption_YES().setEntity(false); getMigrateOnErrorOption_HA_ONLY().setEntity(false); break; case YES: getMigrateOnErrorOption_NO().setEntity(false); getMigrateOnErrorOption_YES().setEntity(true); getMigrateOnErrorOption_HA_ONLY().setEntity(false); break; case HA_ONLY: getMigrateOnErrorOption_NO().setEntity(false); getMigrateOnErrorOption_YES().setEntity(false); getMigrateOnErrorOption_HA_ONLY().setEntity(true); break; default: break; } OnPropertyChanged(new PropertyChangedEventArgs("MigrateOnErrorOption")); } } private boolean privateisResiliencePolicyTabAvailable; public boolean getisResiliencePolicyTabAvailable() { return privateisResiliencePolicyTabAvailable; } public void setisResiliencePolicyTabAvailable(boolean value) { privateisResiliencePolicyTabAvailable = value; } public boolean getIsResiliencePolicyTabAvailable() { return getisResiliencePolicyTabAvailable(); } public void setIsResiliencePolicyTabAvailable(boolean value) { if (getisResiliencePolicyTabAvailable() != value) { setisResiliencePolicyTabAvailable(value); OnPropertyChanged(new PropertyChangedEventArgs("IsResiliencePolicyTabAvailable")); } } public int getMemoryOverCommit() { if ((Boolean)getOptimizationNone_IsSelected().getEntity()) { return (Integer)getOptimizationNone().getEntity(); } if ((Boolean)getOptimizationForServer_IsSelected().getEntity()) { return (Integer)getOptimizationForServer().getEntity(); } if ((Boolean)getOptimizationForDesktop_IsSelected().getEntity()) { return (Integer)getOptimizationForDesktop().getEntity(); } if ((Boolean)getOptimizationCustom_IsSelected().getEntity()) { return (Integer)getOptimizationCustom().getEntity(); } return DataProvider.GetClusterDefaultMemoryOverCommit(); } public void setMemoryOverCommit(int value) { getOptimizationNone_IsSelected().setEntity(value == (Integer)getOptimizationNone().getEntity()); getOptimizationForServer_IsSelected().setEntity(value == (Integer)getOptimizationForServer().getEntity()); getOptimizationForDesktop_IsSelected().setEntity(value == (Integer)getOptimizationForDesktop().getEntity()); if (!(Boolean)getOptimizationNone_IsSelected().getEntity() && !(Boolean)getOptimizationForServer_IsSelected().getEntity() && !(Boolean)getOptimizationForDesktop_IsSelected().getEntity()) { getOptimizationCustom().setIsAvailable(true); getOptimizationCustom().setEntity(value); getOptimizationCustom_IsSelected().setIsAvailable(true); getOptimizationCustom_IsSelected().setEntity(true); } } public ClusterModel() { } public void Init(boolean isEdit) { setIsEdit(isEdit); setName(new EntityModel()); setDescription(new EntityModel()); setOptimizationNone(new EntityModel()); setOptimizationForServer(new EntityModel()); setOptimizationForDesktop(new EntityModel()); setOptimizationCustom(new EntityModel()); EntityModel tempVar = new EntityModel(); tempVar.setEntity(false); setOptimizationNone_IsSelected(tempVar); getOptimizationNone_IsSelected().getEntityChangedEvent().addListener(this); EntityModel tempVar2 = new EntityModel(); tempVar2.setEntity(false); setOptimizationForServer_IsSelected(tempVar2); getOptimizationForServer_IsSelected().getEntityChangedEvent().addListener(this); EntityModel tempVar3 = new EntityModel(); tempVar3.setEntity(false); setOptimizationForDesktop_IsSelected(tempVar3); getOptimizationForDesktop_IsSelected().getEntityChangedEvent().addListener(this); EntityModel tempVar4 = new EntityModel(); tempVar4.setEntity(false); tempVar4.setIsAvailable(false); setOptimizationCustom_IsSelected(tempVar4); getOptimizationCustom_IsSelected().getEntityChangedEvent().addListener(this); EntityModel tempVar5 = new EntityModel(); tempVar5.setEntity(false); setMigrateOnErrorOption_YES(tempVar5); getMigrateOnErrorOption_YES().getEntityChangedEvent().addListener(this); EntityModel tempVar6 = new EntityModel(); tempVar6.setEntity(false); setMigrateOnErrorOption_NO(tempVar6); getMigrateOnErrorOption_NO().getEntityChangedEvent().addListener(this); EntityModel tempVar7 = new EntityModel(); tempVar7.setEntity(false); setMigrateOnErrorOption_HA_ONLY(tempVar7); getMigrateOnErrorOption_HA_ONLY().getEntityChangedEvent().addListener(this); //Optimization methods: //default value =100; setDefaultOverCommit(DataProvider.GetClusterDefaultMemoryOverCommit()); AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { ClusterModel clusterModel = (ClusterModel)model; clusterModel.setServerOverCommit((Integer)result); AsyncQuery _asyncQuery1 = new AsyncQuery(); _asyncQuery1.setModel(clusterModel); _asyncQuery1.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model1, Object result1) { ClusterModel clusterModel1 = (ClusterModel)model1; clusterModel1.setDesktopOverCommit((Integer)result1); //temp is used for conversion purposes EntityModel temp; temp = clusterModel1.getOptimizationNone(); temp.setEntity(clusterModel1.getDefaultOverCommit()); //res1, res2 is used for conversion purposes. boolean res1 = clusterModel1.getDesktopOverCommit() != clusterModel1.getDefaultOverCommit(); boolean res2 = clusterModel1.getServerOverCommit() != clusterModel1.getDefaultOverCommit(); temp = clusterModel1.getOptimizationNone_IsSelected(); setIsSelected(res1 && res2); temp.setEntity(getIsSelected()); temp = clusterModel1.getOptimizationForServer(); temp.setEntity(clusterModel1.getServerOverCommit()); temp = clusterModel1.getOptimizationForServer_IsSelected(); temp.setEntity(clusterModel1.getServerOverCommit() == clusterModel1.getDefaultOverCommit()); temp = clusterModel1.getOptimizationForDesktop(); temp.setEntity(clusterModel1.getDesktopOverCommit()); temp = temp = clusterModel1.getOptimizationForDesktop_IsSelected(); temp.setEntity(clusterModel1.getDesktopOverCommit() == clusterModel1.getDefaultOverCommit()); temp = clusterModel1.getOptimizationCustom(); temp.setIsAvailable(false); temp.setIsChangable(false); if (clusterModel1.getIsEdit()) { clusterModel1.postInit(); } }}; AsyncDataProvider.GetClusterServerMemoryOverCommit(_asyncQuery1); }}; AsyncDataProvider.GetClusterDesktopMemoryOverCommit(_asyncQuery); setDataCenter(new ListModel()); getDataCenter().getSelectedItemChangedEvent().addListener(this); setCPU(new ListModel()); getCPU().setIsAvailable(false); setVersion(new ListModel()); getVersion().getSelectedItemChangedEvent().addListener(this); setMigrateOnErrorOption(MigrateOnErrorOptions.YES); setIsGeneralTabValid(true); setIsResiliencePolicyTabAvailable(true); } private void postInit() { getDescription().setEntity(getEntity().getdescription()); setMemoryOverCommit(getEntity().getmax_vds_memory_over_commit()); AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { ClusterModel clusterModel = (ClusterModel)model; java.util.ArrayList<storage_pool> dataCenters = (java.util.ArrayList<storage_pool>)result; clusterModel.getDataCenter().setItems(dataCenters); clusterModel.getDataCenter().setSelectedItem(null); for (storage_pool a : dataCenters) { if (clusterModel.getEntity().getstorage_pool_id() != null && a.getId().equals(clusterModel.getEntity().getstorage_pool_id())) { clusterModel.getDataCenter().setSelectedItem(a); break; } } clusterModel.getDataCenter().setIsChangable(clusterModel.getDataCenter().getSelectedItem() == null); clusterModel.setMigrateOnErrorOption(clusterModel.getEntity().getMigrateOnError()); }}; AsyncDataProvider.GetDataCenterList(_asyncQuery); } @Override public void eventRaised(Event ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); if (ev.equals(ListModel.SelectedItemChangedEventDefinition)) { if (sender == getDataCenter()) { StoragePool_SelectedItemChanged(args); } else if (sender == getVersion()) { Version_SelectedItemChanged(args); } } else if (ev.equals(EntityModel.EntityChangedEventDefinition)) { EntityModel senderEntityModel = (EntityModel)sender; if ((Boolean)senderEntityModel.getEntity()) { if (senderEntityModel == getOptimizationNone_IsSelected()) { getOptimizationForServer_IsSelected().setEntity(false); getOptimizationForDesktop_IsSelected().setEntity(false); getOptimizationCustom_IsSelected().setEntity(false); } else if (senderEntityModel == getOptimizationForServer_IsSelected()) { getOptimizationNone_IsSelected().setEntity(false); getOptimizationForDesktop_IsSelected().setEntity(false); getOptimizationCustom_IsSelected().setEntity(false); } else if (senderEntityModel == getOptimizationForDesktop_IsSelected()) { getOptimizationNone_IsSelected().setEntity(false); getOptimizationForServer_IsSelected().setEntity(false); getOptimizationCustom_IsSelected().setEntity(false); } else if (senderEntityModel == getOptimizationCustom_IsSelected()) { getOptimizationNone_IsSelected().setEntity(false); getOptimizationForServer_IsSelected().setEntity(false); getOptimizationForDesktop_IsSelected().setEntity(false); } else if (senderEntityModel == getMigrateOnErrorOption_YES()) { getMigrateOnErrorOption_NO().setEntity(false); getMigrateOnErrorOption_HA_ONLY().setEntity(false); } else if (senderEntityModel == getMigrateOnErrorOption_NO()) { getMigrateOnErrorOption_YES().setEntity(false); getMigrateOnErrorOption_HA_ONLY().setEntity(false); } else if (senderEntityModel == getMigrateOnErrorOption_HA_ONLY()) { getMigrateOnErrorOption_YES().setEntity(false); getMigrateOnErrorOption_NO().setEntity(false); } } } } private void Version_SelectedItemChanged(EventArgs e) { Version version; if (getVersion().getSelectedItem() != null) { version = (Version)getVersion().getSelectedItem(); } else { version = ((storage_pool)getDataCenter().getSelectedItem()).getcompatibility_version(); } AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { ClusterModel clusterModel = (ClusterModel)model; java.util.ArrayList<ServerCpu> cpus = (java.util.ArrayList<ServerCpu>)result; ServerCpu oldSelectedCpu = (ServerCpu)clusterModel.getCPU().getSelectedItem(); clusterModel.getCPU().setItems(cpus); if (oldSelectedCpu != null) { clusterModel.getCPU().setSelectedItem(Linq.FirstOrDefault(cpus, new Linq.ServerCpuPredicate(oldSelectedCpu.getCpuName()))); } if (clusterModel.getCPU().getSelectedItem() == null || !isCPUinitialized) { clusterModel.getCPU().setSelectedItem(Linq.FirstOrDefault(cpus)); InitCPU(); } }}; AsyncDataProvider.GetCPUList(_asyncQuery, version); } private void InitCPU() { if (!isCPUinitialized && getIsEdit()) { isCPUinitialized = true; getCPU().setSelectedItem(null); for (ServerCpu a : (java.util.ArrayList<ServerCpu>)getCPU().getItems()) { if (StringHelper.stringsEqual(a.getCpuName(), getEntity().getcpu_name())) { getCPU().setSelectedItem(a); break; } } } } private void StoragePool_SelectedItemChanged(EventArgs e) { // possible versions for new cluster (when editing cluster, this event won't occur) // are actually the possible versions for the data-center that the cluster is going // to be attached to. storage_pool selectedDataCenter = (storage_pool)getDataCenter().getSelectedItem(); if (selectedDataCenter == null) { return; } if (selectedDataCenter.getstorage_pool_type() == StorageType.LOCALFS) { setIsResiliencePolicyTabAvailable(false); } else { setIsResiliencePolicyTabAvailable(true); } AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { ClusterModel clusterModel = (ClusterModel)model; java.util.ArrayList<Version> versions = (java.util.ArrayList<Version>)result; clusterModel.getVersion().setItems(versions); if (!versions.contains((Version)clusterModel.getVersion().getSelectedItem())) { if (versions.contains(((storage_pool)clusterModel.getDataCenter().getSelectedItem()).getcompatibility_version())) { clusterModel.getVersion().setSelectedItem((Version)((storage_pool)clusterModel.getDataCenter().getSelectedItem()).getcompatibility_version()); } else { clusterModel.getVersion().setSelectedItem(Linq.SelectHighestVersion(versions)); } } }}; AsyncDataProvider.GetDataCenterVersions(_asyncQuery, selectedDataCenter == null ? null : (NGuid)(selectedDataCenter.getId())); } public boolean Validate() { return Validate(true); } public boolean Validate(boolean validateStoragePool) { LengthValidation tempVar = new LengthValidation(); tempVar.setMaxLength(40); RegexValidation tempVar2 = new RegexValidation(); tempVar2.setExpression("^[A-Za-z0-9_-]+$"); tempVar2.setMessage("Name can contain only 'A-Z', 'a-z', '0-9', '_' or '-' characters."); getName().ValidateEntity(new IValidation[] { new NotEmptyValidation(), new NoSpacesValidation(), tempVar, tempVar2 }); if (validateStoragePool) { getDataCenter().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); } getCPU().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); getVersion().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); //TODO: async validation for webadmin //string name = (string)Name.Entity; ////Check name unicitate. //if (String.Compare(name, OriginalName, true) != 0 && !DataProvider.IsClusterNameUnique(name)) //{ // Name.IsValid = false; // Name.InvalidityReasons.Add("Name must be unique."); //} setIsGeneralTabValid(getName().getIsValid() && getDataCenter().getIsValid() && getCPU().getIsValid() && getVersion().getIsValid()); return getName().getIsValid() && getDataCenter().getIsValid() && getCPU().getIsValid() && getVersion().getIsValid(); } }