package org.ovirt.engine.ui.uicommon.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.uicommon.*; import org.ovirt.engine.ui.uicommon.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.ui.uicommon.validation.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.ui.uicommon.*; import org.ovirt.engine.ui.uicommon.models.*; @SuppressWarnings("unused") public class HostModel extends Model implements ITaskTarget { 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) { VDSGroup oldCluster = (VDSGroup)getCluster().getSelectedItem(); java.util.ArrayList<VDSGroup> clusters = DataProvider.GetClusterList(dataCenter.getId()); getCluster().setItems(clusters); if (oldCluster != null) { getCluster().setSelectedItem(Linq.FirstOrDefault(clusters, new Linq.ClusterPredicate(oldCluster.getID()))); } if (getCluster().getSelectedItem() == null) { getCluster().setSelectedItem(Linq.FirstOrDefault(clusters)); } } } private void Cluster_SelectedItemChanged() { VDSGroup cluster = (VDSGroup)getCluster().getSelectedItem(); if (cluster != null) { String pmType = (String)getPmType().getSelectedItem(); getPmType().setItems(DataProvider.GetPmTypeList(cluster.getcompatibility_version())); if (((java.util.ArrayList<String>)getPmType().getItems()).contains(pmType)) { getPmType().setSelectedItem(pmType); } else { getPmType().setSelectedItem(null); } } } private void PmType_SelectedItemChanged() { UpdatePmModels(); } private void UpdatePmModels() { String pmType = (String)getPmType().getSelectedItem(); java.util.ArrayList<String> pmOptions = !StringHelper.isNullOrEmpty(pmType) ? DataProvider.GetPmOptions(pmType) : new java.util.ArrayList<String>(); 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(); Task.Create(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { BeginTestStage, getManagementIp().getEntity(), getPmType().getSelectedItem(), getPmUserName().getEntity(), getPmPassword().getEntity(), cluster.getstorage_pool_id() != null ? cluster.getstorage_pool_id().getValue() : Guid.Empty, getPmOptionsMap() }))).Run(); } 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); RegexValidation tempVar = new RegexValidation(); tempVar.setExpression(hostNameRegex); tempVar.setMessage(hostNameMessage); getName().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar }); getHost().ValidateEntity(new IValidation[] { new NotEmptyValidation(), new HostAddressValidation() }); IntegerValidation tempVar2 = new IntegerValidation(); tempVar2.setMinimum(1); tempVar2.setMaximum(65535); getPort().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar2 }); getDataCenter().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); getCluster().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() }); String name = (String)getName().getEntity(); //Check name unicitate. if (name.compareToIgnoreCase(getOriginalName()) != 0 && !DataProvider.IsHostNameUnique(name)) { getName().setIsValid(false); getName().getInvalidityReasons().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(); } } public void run(TaskContext context) { java.util.ArrayList<Object> state = (java.util.ArrayList<Object>)context.getState(); String stage = (String)state.get(0); //C# TO JAVA CONVERTER NOTE: The following 'switch' operated on a string member and was converted to Java 'if-else' logic: // switch (stage) //ORIGINAL LINE: case BeginTestStage: if (StringHelper.stringsEqual(stage, BeginTestStage)) { String message = null; GetNewVdsFenceStatusParameters param = new GetNewVdsFenceStatusParameters(); if (getHostId() != null) { param.setVdsId(getHostId().getValue()); } param.setManagementIp((String)state.get(1)); param.setPmType((String)state.get(2)); param.setUser((String)state.get(3)); param.setPassword((String)state.get(4)); param.setStoragePoolId((Guid)state.get(5)); param.setFencingOptions(new ValueObjectMap((java.util.HashMap<String, String>)state.get(6), false)); VdcQueryReturnValue returnValue = Frontend.RunQuery(VdcQueryType.GetNewVdsFenceStatus, param); if (returnValue != null && returnValue.getReturnValue() != null) { FenceStatusReturnValue fenceStatusReturnValue = (FenceStatusReturnValue) returnValue.getReturnValue(); message = fenceStatusReturnValue.toString(); } else { message = "Test Failed (unknown error)."; } context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { EndTestStage, message }))); } //ORIGINAL LINE: case EndTestStage: else if (StringHelper.stringsEqual(stage, EndTestStage)) { setMessage((String)state.get(1)); getTestCommand().setIsExecutionAllowed(true); } } }