package org.ovirt.engine.ui.uicommonweb.models.hosts; 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 HostModel extends Model { public static final int HostNameMaxLength = 255; public static final String PmSecureKey = "secure"; public static final String PmPortKey = "port"; public static final String PmSlotKey = "slot"; public static final String BeginTestStage = "BeginTest"; public static final String EndTestStage = "EndTest"; private UICommand privateTestCommand; public UICommand getTestCommand() { return privateTestCommand; } private void setTestCommand(UICommand value) { privateTestCommand = value; } public boolean getIsNew() { return getHostId() == null; } private NGuid privateHostId; public NGuid getHostId() { return privateHostId; } public void setHostId(NGuid value) { privateHostId = value; } private String privateOriginalName; public String getOriginalName() { return privateOriginalName; } public void setOriginalName(String value) { privateOriginalName = value; } private EntityModel privateName; public EntityModel getName() { return privateName; } private void setName(EntityModel value) { privateName = value; } private EntityModel privateHost; public EntityModel getHost() { return privateHost; } private void setHost(EntityModel value) { privateHost = value; } private EntityModel privateManagementIp; public EntityModel getManagementIp() { return privateManagementIp; } private void setManagementIp(EntityModel value) { privateManagementIp = value; } private ListModel privateDataCenter; public ListModel getDataCenter() { return privateDataCenter; } private void setDataCenter(ListModel value) { privateDataCenter = value; } private ListModel privateCluster; public ListModel getCluster() { return privateCluster; } private void setCluster(ListModel value) { privateCluster = value; } private EntityModel privatePort; public EntityModel getPort() { return privatePort; } private void setPort(EntityModel value) { privatePort = value; } private EntityModel privateRootPassword; public EntityModel getRootPassword() { return privateRootPassword; } private void setRootPassword(EntityModel value) { privateRootPassword = value; } private EntityModel privateOverrideIpTables; public EntityModel getOverrideIpTables() { return privateOverrideIpTables; } private void setOverrideIpTables(EntityModel value) { privateOverrideIpTables = value; } private EntityModel privateIsPm; public EntityModel getIsPm() { return privateIsPm; } private void setIsPm(EntityModel value) { privateIsPm = value; } private EntityModel privatePmUserName; public EntityModel getPmUserName() { return privatePmUserName; } private void setPmUserName(EntityModel value) { privatePmUserName = value; } private EntityModel privatePmPassword; public EntityModel getPmPassword() { return privatePmPassword; } private void setPmPassword(EntityModel value) { privatePmPassword = value; } private ListModel privatePmType; public ListModel getPmType() { return privatePmType; } private void setPmType(ListModel value) { privatePmType = value; } private EntityModel privatePmSecure; public EntityModel getPmSecure() { return privatePmSecure; } private void setPmSecure(EntityModel value) { privatePmSecure = value; } private EntityModel privatePmPort; public EntityModel getPmPort() { return privatePmPort; } private void setPmPort(EntityModel value) { privatePmPort = value; } private EntityModel privatePmSlot; public EntityModel getPmSlot() { return privatePmSlot; } private void setPmSlot(EntityModel value) { privatePmSlot = value; } private EntityModel privatePmOptions; public EntityModel getPmOptions() { return privatePmOptions; } private void setPmOptions(EntityModel value) { privatePmOptions = value; } private boolean isGeneralTabValid; public boolean getIsGeneralTabValid() { return isGeneralTabValid; } public void setIsGeneralTabValid(boolean value) { if (isGeneralTabValid != value) { isGeneralTabValid = value; OnPropertyChanged(new PropertyChangedEventArgs("IsGeneralTabValid")); } } private boolean isPowerManagementTabValid; public boolean getIsPowerManagementTabValid() { return isPowerManagementTabValid; } public void setIsPowerManagementTabValid(boolean value) { if (isPowerManagementTabValid != value) { isPowerManagementTabValid = value; OnPropertyChanged(new PropertyChangedEventArgs("IsPowerManagementTabValid")); } } private boolean isPowerManagementSelected; public boolean getIsPowerManagementSelected() { return isPowerManagementSelected; } public void setIsPowerManagementSelected(boolean value) { if (isPowerManagementSelected != value) { isPowerManagementSelected = value; OnPropertyChanged(new PropertyChangedEventArgs("IsPowerManagementSelected")); } } public java.util.HashMap<String, String> getPmOptionsMap() { java.util.HashMap<String, String> dict = new java.util.HashMap<String, String>(); //Add well known pm options. if (getPmPort().getIsAvailable()) { dict.put(PmPortKey, getPmPort().getEntity() == null ? "" : (String)getPmPort().getEntity()); } if (getPmSlot().getIsAvailable()) { dict.put(PmSlotKey, getPmSlot().getEntity() == null ? "" : (String)getPmSlot().getEntity()); } if (getPmSecure().getIsAvailable()) { dict.put(PmSecureKey, getPmSecure().getEntity().toString()); } //Add unknown pm options. //Assume Validate method was called before this getter. String pmOptions = (String)getPmOptions().getEntity(); if (!StringHelper.isNullOrEmpty(pmOptions)) { for (String pair : pmOptions.split("[,]", -1)) { String[] array = pair.split("[=]", -1); if (array.length == 2) { dict.put(array[0], array[1]); } else if (array.length == 1) { dict.put(array[0], ""); } } } return dict; } public void setPmOptionsMap(java.util.HashMap<String, String> value) { String pmOptions = ""; for (java.util.Map.Entry<String, String> pair : value.entrySet()) { String k = pair.getKey(); String v = pair.getValue(); //C# TO JAVA CONVERTER NOTE: The following 'switch' operated on a string member and was converted to Java 'if-else' logic: // switch (k) //Handle well known pm options. //ORIGINAL LINE: case PmPortKey: if (StringHelper.stringsEqual(k, PmPortKey)) { getPmPort().setEntity(StringHelper.isNullOrEmpty(value.get(k)) ? "" : value.get(k)); } //ORIGINAL LINE: case PmSlotKey: else if (StringHelper.stringsEqual(k, PmSlotKey)) { getPmSlot().setEntity(StringHelper.isNullOrEmpty(value.get(k)) ? "" : value.get(k)); } //ORIGINAL LINE: case PmSecureKey: else if (StringHelper.stringsEqual(k, PmSecureKey)) { getPmSecure().setEntity(Boolean.parseBoolean(value.get(k))); } else { //Compose custom string from unknown pm options. if (StringHelper.isNullOrEmpty(v)) { pmOptions += StringFormat.format("%1$s,", k); } else { pmOptions += StringFormat.format("%1$s=%2$s,", k, v); } } } if (!StringHelper.isNullOrEmpty(pmOptions)) { getPmOptions().setEntity(pmOptions.substring(0, pmOptions.length() - 1)); } } public HostModel() { setTestCommand(new UICommand("Test", this)); setName(new EntityModel()); setHost(new EntityModel()); setManagementIp(new EntityModel()); setDataCenter(new ListModel()); getDataCenter().getSelectedItemChangedEvent().addListener(this); setCluster(new ListModel()); getCluster().getSelectedItemChangedEvent().addListener(this); setPort(new EntityModel()); setRootPassword(new EntityModel()); EntityModel tempVar = new EntityModel(); tempVar.setEntity(false); setOverrideIpTables(tempVar); setPmUserName(new EntityModel()); setPmPassword(new EntityModel()); setPmType(new ListModel()); getPmType().getSelectedItemChangedEvent().addListener(this); setPmSecure(new EntityModel()); getPmSecure().setIsAvailable(false); getPmSecure().setEntity(false); setPmPort(new EntityModel()); getPmPort().setIsAvailable(false); setPmSlot(new EntityModel()); getPmSlot().setIsAvailable(false); setPmOptions(new EntityModel()); setIsPm(new EntityModel()); getIsPm().getEntityChangedEvent().addListener(this); getIsPm().setEntity(false); setIsPowerManagementTabValid(true); setIsGeneralTabValid(getIsPowerManagementTabValid()); } @Override public void eventRaised(Event ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); if (ev.equals(ListModel.SelectedItemChangedEventDefinition) && sender == getDataCenter()) { DataCenter_SelectedItemChanged(); } else if (ev.equals(ListModel.SelectedItemChangedEventDefinition) && sender == getCluster()) { Cluster_SelectedItemChanged(); } else if (ev.equals(ListModel.SelectedItemChangedEventDefinition) && sender == getPmType()) { PmType_SelectedItemChanged(); } else if (ev.equals(EntityModel.EntityChangedEventDefinition) && sender == getIsPm()) { IsPm_EntityChanged(); } } private void IsPm_EntityChanged() { UpdatePmModels(); } private void DataCenter_SelectedItemChanged() { storage_pool dataCenter = (storage_pool)getDataCenter().getSelectedItem(); if (dataCenter != null) { AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { HostModel hostModel = (HostModel)model; java.util.ArrayList<VDSGroup> clusters = (java.util.ArrayList<VDSGroup>)result; VDSGroup oldCluster = (VDSGroup)hostModel.getCluster().getSelectedItem(); storage_pool selectedDataCenter = (storage_pool) getDataCenter().getSelectedItem(); // Update selected cluster only if the returned cluster list is indeed the selected datacenter's clusters if (clusters.isEmpty() || clusters.size() > 0 && clusters.get(0).getstorage_pool_id().getValue().equals(selectedDataCenter.getId().getValue())) { hostModel.getCluster().setItems(clusters); if (oldCluster != null) { VDSGroup newSelectedItem = Linq.FirstOrDefault(clusters, new Linq.ClusterPredicate(oldCluster.getID())); if (newSelectedItem != null) { hostModel.getCluster().setSelectedItem(newSelectedItem); } } if (hostModel.getCluster().getSelectedItem() == null) { hostModel.getCluster().setSelectedItem(Linq.FirstOrDefault(clusters)); } } }}; AsyncDataProvider.GetClusterList(_asyncQuery, dataCenter.getId()); } } private void Cluster_SelectedItemChanged() { VDSGroup cluster = (VDSGroup)getCluster().getSelectedItem(); if (cluster != null) { AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { HostModel hostModel = (HostModel)model; java.util.ArrayList<String> pmTypeList = (java.util.ArrayList<String>)result; String pmType = (String)hostModel.getPmType().getSelectedItem(); hostModel.getPmType().setItems(pmTypeList); if (pmTypeList.contains(pmType)) { hostModel.getPmType().setSelectedItem(pmType); } else { hostModel.getPmType().setSelectedItem(null); } }}; AsyncDataProvider.GetPmTypeList(_asyncQuery, cluster.getcompatibility_version()); } } private void PmType_SelectedItemChanged() { UpdatePmModels(); } private void UpdatePmModels() { String pmType = (String)getPmType().getSelectedItem(); AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { HostModel hostModel = (HostModel)model; hostModel.postGetPmOptions((java.util.ArrayList<String>)result); }}; if (!StringHelper.isNullOrEmpty(pmType)) { AsyncDataProvider.GetPmOptions(_asyncQuery, pmType); } else { postGetPmOptions(new java.util.ArrayList<String>()); } } public void postGetPmOptions(java.util.ArrayList<String> pmOptions) { getPmPort().setIsAvailable(pmOptions.contains(PmPortKey)); getPmSlot().setIsAvailable(pmOptions.contains(PmSlotKey)); getPmSecure().setIsAvailable(pmOptions.contains(PmSecureKey)); boolean isPm = (Boolean)getIsPm().getEntity(); getTestCommand().setIsExecutionAllowed(isPm); getManagementIp().setIsChangable((Boolean)getIsPm().getEntity()); getManagementIp().setIsValid(true); getPmUserName().setIsChangable((Boolean)getIsPm().getEntity()); getPmUserName().setIsValid(true); getPmPassword().setIsChangable((Boolean)getIsPm().getEntity()); getPmPassword().setIsValid(true); getPmType().setIsChangable((Boolean)getIsPm().getEntity()); getPmType().setIsValid(true); getPmOptions().setIsChangable((Boolean)getIsPm().getEntity()); getPmSecure().setIsChangable((Boolean)getIsPm().getEntity()); getPmPort().setIsChangable((Boolean)getIsPm().getEntity()); getPmPort().setIsValid(true); getPmSlot().setIsChangable((Boolean)getIsPm().getEntity()); } public void Test() { //Validate user input. if ((Boolean)getIsPm().getEntity()) { getCluster().setIsValid(true); getCluster().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); ValidatePmModels(); } if (!getManagementIp().getIsValid() || !getPmUserName().getIsValid() || !getPmPassword().getIsValid() || !getPmType().getIsValid() || !getPmPort().getIsValid() || !getPmOptions().getIsValid()) { return; } setMessage("Testing in progress. It will take a few seconds. Please wait..."); getTestCommand().setIsExecutionAllowed(false); VDSGroup cluster = (VDSGroup)getCluster().getSelectedItem(); GetNewVdsFenceStatusParameters param = new GetNewVdsFenceStatusParameters(); if (getHostId() != null) { param.setVdsId(getHostId().getValue()); } param.setManagementIp((String)getManagementIp().getEntity()); param.setPmType((String)getPmType().getSelectedItem()); param.setUser((String)getPmUserName().getEntity()); param.setPassword((String)getPmPassword().getEntity()); param.setStoragePoolId((Guid)cluster.getstorage_pool_id().getValue() != null ? cluster.getstorage_pool_id().getValue().getValue() : Guid.Empty); param.setFencingOptions(new ValueObjectMap((java.util.HashMap<String, String>)getPmOptionsMap(), false)); Frontend.RunQuery(VdcQueryType.GetNewVdsFenceStatus, param, new IFrontendQueryAsyncCallback() { @Override public void OnSuccess(FrontendQueryAsyncResult result) { if (result != null && result.getReturnValue() != null && result.getReturnValue().getReturnValue() != null) { FenceStatusReturnValue fenceStatusReturnValue = (FenceStatusReturnValue) result.getReturnValue().getReturnValue(); String message = fenceStatusReturnValue.toString(); setMessage(message); getTestCommand().setIsExecutionAllowed(true); } } @Override public void OnFailure(FrontendQueryAsyncResult result) { String message = "Test Failed (unknown error)."; setMessage(message); getTestCommand().setIsExecutionAllowed(true); } }); } private void ValidatePmModels() { getManagementIp().ValidateEntity(new IValidation[] { new NotEmptyValidation(), new HostAddressValidation() }); getPmUserName().ValidateEntity(new IValidation[] { new NotEmptyValidation() }); getPmPassword().ValidateEntity(new IValidation[] { new NotEmptyValidation() }); getPmType().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); IntegerValidation tempVar = new IntegerValidation(); tempVar.setMinimum(1); tempVar.setMaximum(65535); getPmPort().ValidateEntity(new IValidation[] { tempVar }); getPmOptions().ValidateEntity(new IValidation[] { new KeyValuePairValidation(true) }); } public boolean Validate() { String hostNameRegex = StringFormat.format("^[0-9a-zA-Z-_\\.]{1,%1$s}$", HostNameMaxLength); String hostNameMessage = StringFormat.format("This field can't contain blanks or special characters, must " + "be at least one character long, legal values are 0-9, a-z, '_', '.' " + "and a length of up to %1$s characters.", HostNameMaxLength); LengthValidation tempVar = new LengthValidation(); tempVar.setMaxLength(255); RegexValidation tempVar2 = new RegexValidation(); tempVar2.setExpression(hostNameRegex); tempVar2.setMessage(hostNameMessage); getName().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar, tempVar2 }); LengthValidation tempVar3 = new LengthValidation(); tempVar3.setMaxLength(255); getHost().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar3, new HostAddressValidation() }); IntegerValidation tempVar4 = new IntegerValidation(); tempVar4.setMinimum(1); tempVar4.setMaximum(65535); getPort().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar4 }); getDataCenter().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); getCluster().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); //TODO: async validation. //string name = (string)Name.Entity; ////Check name unicitate. //if (String.Compare(name, OriginalName, true) != 0 && !DataProvider.IsHostNameUnique(name)) //{ // Name.IsValid = false; // Name.InvalidityReasons.Add("Name must be unique."); //} if ((Boolean)getIsPm().getEntity()) { ValidatePmModels(); } setIsGeneralTabValid(getName().getIsValid() && getHost().getIsValid() && getPort().getIsValid() && getCluster().getIsValid()); setIsPowerManagementTabValid(getManagementIp().getIsValid() && getPmUserName().getIsValid() && getPmPassword().getIsValid() && getPmType().getIsValid() && getPmPort().getIsValid() && getPmOptions().getIsValid()); return getName().getIsValid() && getHost().getIsValid() && getPort().getIsValid() && getCluster().getIsValid() && getManagementIp().getIsValid() && getPmUserName().getIsValid() && getPmPassword().getIsValid() && getPmType().getIsValid() && getPmPort().getIsValid() && getPmOptions().getIsValid(); } @Override public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); if (command == getTestCommand()) { Test(); } } }