package org.ovirt.engine.core.bll.provider;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.businessentities.ProviderType;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dao.provider.ProviderDao;
import org.ovirt.engine.core.utils.ReplacementUtils;
public class ProviderValidator<P extends Provider.AdditionalProperties> {
protected Provider<P> provider;
public ProviderValidator(Provider<P> provider) {
this.provider = provider;
}
protected ProviderDao getProviderDao() {
return DbFacade.getInstance().getProviderDao();
}
public ValidationResult nameAvailable() {
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_NAME_ALREADY_USED)
.when(getProviderDao().getByName(provider.getName()) != null);
}
public ValidationResult providerIsSet() {
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST)
.when(provider == null);
}
/**
* Specific validations that each sub-class can override and implement
*/
public ValidationResult validateAddProvider() {
return ValidationResult.VALID;
}
/**
* Specific validations that each sub-class can override and implement
*/
public ValidationResult validateRemoveProvider() {
return ValidationResult.VALID;
}
/**
* Validate that this action can be performed for read only providers
*/
public ValidationResult validateReadOnlyActions() {
if (provider.getType() != ProviderType.EXTERNAL_NETWORK){
return ValidationResult.VALID;
}
boolean isReadOnly = ((OpenstackNetworkProviderProperties) provider.getAdditionalProperties()).getReadOnly();
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_EXTERNAL_PROVIDER_IS_READ_ONLY,
getProviderNameReplacement()).when(isReadOnly);
}
private String getProviderNameReplacement() {
return ReplacementUtils.getVariableAssignmentString(EngineMessage.ACTION_TYPE_FAILED_EXTERNAL_PROVIDER_IS_READ_ONLY, provider.getName());
}
}