package org.ovirt.engine.core.bll.provider;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.AgentConfiguration;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.businessentities.ProviderType;
import org.ovirt.engine.core.common.errors.EngineMessage;
public class NetworkProviderValidator extends ProviderValidator {
public NetworkProviderValidator(Provider<?> provider) {
super(provider);
}
@Override
public ValidationResult validateAddProvider() {
ValidationResult pluginTypeValidation = validatePluginType();
if (!pluginTypeValidation.isValid()) {
return pluginTypeValidation;
}
ValidationResult authValidation = validateAuthentication();
if (!authValidation.isValid()) {
return authValidation;
}
return super.validateAddProvider();
}
public ValidationResult validatePluginType() {
OpenstackNetworkProviderProperties properties = (OpenstackNetworkProviderProperties) provider.getAdditionalProperties();
String pluginType = properties.getPluginType();
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_PLUGIN_TYPE)
.when(StringUtils.isEmpty(pluginType));
}
public ValidationResult validateAuthentication() {
if (provider.isRequiringAuthentication()) {
if (StringUtils.isEmpty(provider.getUsername())) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_USER);
}
if (StringUtils.isEmpty(provider.getPassword())) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_PASSWORD);
}
if (StringUtils.isEmpty(provider.getAuthUrl())) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_AUTH_URL);
}
OpenstackNetworkProviderProperties properties = (OpenstackNetworkProviderProperties) provider.getAdditionalProperties();
if (StringUtils.isEmpty(properties.getTenantName())) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_TENANT_NAME);
}
}
return ValidationResult.VALID;
}
public ValidationResult providerTypeValid() {
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_TYPE_MISMATCH)
.when(provider.getType() != ProviderType.OPENSTACK_NETWORK);
}
public ValidationResult networkMappingsProvided(String networkMappings) {
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_MISSING_NETWORK_MAPPINGS)
.when(StringUtils.isBlank(networkMappings)
&& (getAgentConfiguration() == null
|| StringUtils.isBlank(getAgentConfiguration().getNetworkMappings())));
}
public ValidationResult messagingBrokerProvided() {
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_MISSING_MESSAGING_BROKER_PROPERTIES)
.when(getAgentConfiguration() == null
|| getAgentConfiguration().getMessagingConfiguration() == null
|| StringUtils.isEmpty(getAgentConfiguration().getMessagingConfiguration().getAddress()));
}
private AgentConfiguration getAgentConfiguration() {
OpenstackNetworkProviderProperties properties =
(OpenstackNetworkProviderProperties) provider.getAdditionalProperties();
return properties == null ? null : properties.getAgentConfiguration();
}
}