package org.ovirt.engine.ui.uicommonweb.models.hosts;
import org.ovirt.engine.core.common.action.VdsOperationActionParameters.AuthenticationMethod;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.compat.RpmVersion;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicommonweb.models.providers.HostNetworkProviderModel;
import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
public class InstallModel extends Model {
private EntityModel<String> privateUserPassword;
private VDS vds;
public EntityModel<String> getUserPassword() {
return privateUserPassword;
}
private void setUserPassword(EntityModel<String> value) {
privateUserPassword = value;
}
private ListModel<RpmVersion> privateOVirtISO;
public ListModel<RpmVersion> getOVirtISO() {
return privateOVirtISO;
}
private void setOVirtISO(ListModel<RpmVersion> value) {
privateOVirtISO = value;
}
private EntityModel<Boolean> privateOverrideIpTables;
public EntityModel<Boolean> getOverrideIpTables() {
return privateOverrideIpTables;
}
private void setOverrideIpTables(EntityModel<Boolean> value) {
privateOverrideIpTables = value;
}
private EntityModel<Boolean> activateHostAfterInstall;
public EntityModel<Boolean> getActivateHostAfterInstall() {
return activateHostAfterInstall;
}
private void setActivateHostAfterInstall(EntityModel<Boolean> value) {
activateHostAfterInstall = value;
}
private EntityModel<String> hostVersion;
public EntityModel<String> getHostVersion() {
return hostVersion;
}
public void setHostVersion(EntityModel<String> value) {
hostVersion = value;
}
private EntityModel<String> privateUserName;
public EntityModel<String> getUserName() {
return privateUserName;
}
private void setUserName(EntityModel<String> value) {
privateUserName = value;
}
private EntityModel<String> privatePublicKey;
public EntityModel<String> getPublicKey() {
return privatePublicKey;
}
private void setPublicKey(EntityModel<String> value) {
privatePublicKey = value;
}
private AuthenticationMethod hostAuthenticationMethod;
public void setAuthenticationMethod(AuthenticationMethod value) {
hostAuthenticationMethod = value;
}
public AuthenticationMethod getAuthenticationMethod() {
return hostAuthenticationMethod;
}
private HostNetworkProviderModel networkProviderModel;
public HostNetworkProviderModel getNetworkProviderModel() {
return networkProviderModel;
}
private void setNetworkProviderModel(HostNetworkProviderModel value) {
networkProviderModel = value;
}
public ListModel<?> getNetworkProviders() {
return getNetworkProviderModel().getNetworkProviders();
}
public EntityModel<?> getInterfaceMappings() {
return getNetworkProviderModel().getInterfaceMappings();
}
public void setVds(VDS value) {
vds = value;
}
public VDS getVds() {
return vds;
}
private EntityModel<Boolean> validationFailed;
public EntityModel<Boolean> getValidationFailed() {
return validationFailed;
}
public void setValidationFailed(EntityModel<Boolean> value) {
validationFailed = value;
onPropertyChanged(new PropertyChangedEventArgs("ValidationFailed")); //$NON-NLS-1$
}
private HostedEngineHostModel hostedEngineHostModel;
public HostedEngineHostModel getHostedEngineHostModel() {
return hostedEngineHostModel;
}
public void setHostedEngineHostModel(HostedEngineHostModel hostedEngineHostModel) {
this.hostedEngineHostModel = hostedEngineHostModel;
}
public InstallModel() {
setUserPassword(new EntityModel<String>());
setOVirtISO(new ListModel<RpmVersion>());
setHostVersion(new EntityModel<String>());
setOverrideIpTables(new EntityModel<Boolean>());
setActivateHostAfterInstall(new EntityModel<Boolean>());
getOverrideIpTables().setEntity(false);
getActivateHostAfterInstall().setEntity(false);
setUserName(new EntityModel<String>());
getUserName().setEntity(HostModel.RootUserName);
// TODO: remove setIsChangeable when configured ssh username is enabled
getUserName().setIsChangeable(false);
setPublicKey(new EntityModel<String>());
getPublicKey().setEntity(""); //$NON-NLS-1$
setValidationFailed(new EntityModel<Boolean>());
fetchEngineSshPublicKey();
setNetworkProviderModel(new HostNetworkProviderModel());
setHostedEngineHostModel(new HostedEngineHostModel());
}
public boolean validate(boolean isOVirt) {
getOVirtISO().setIsValid(true);
getUserPassword().setIsValid(true);
if (isOVirt) {
getOVirtISO().validateSelectedItem(new IValidation[] { new NotEmptyValidation() });
} else {
if (getAuthenticationMethod() == AuthenticationMethod.Password) {
getUserPassword().validateEntity(new IValidation[] { new NotEmptyValidation() });
}
}
getNetworkProviderModel().validate();
return getUserPassword().getIsValid()
&& getOVirtISO().getIsValid()
&& getNetworkProviderModel().getIsValid()
&& getHostedEngineHostModel().getIsValid();
}
public void fetchEngineSshPublicKey() {
AsyncDataProvider.getInstance().getEngineSshPublicKey(new AsyncQuery<>(pk -> {
if (pk != null && pk.length() > 0) {
getPublicKey().setEntity(pk);
}
}));
}
}