package org.ovirt.engine.core.bll.provider;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.CommandBase;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.ProviderParameters;
import org.ovirt.engine.core.common.businessentities.ActionGroup;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.common.validation.group.CreateEntity;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.provider.ProviderDao;
public class AddProviderCommand<P extends ProviderParameters> extends CommandBase<P> {
@Inject
private ProviderDao providerDao;
public AddProviderCommand(Guid commandId) {
super(commandId);
}
public AddProviderCommand(P parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
private Provider<?> getProvider() {
return getParameters().getProvider();
}
public String getProviderName() {
return getProvider().getName();
}
private ProviderProxy providerProxy;
public ProviderProxy getProviderProxy() {
if (providerProxy == null) {
providerProxy = ProviderProxyFactory.getInstance().create(getProvider());
}
return providerProxy;
}
@Override
protected boolean validate() {
if (getProvider() == null) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST);
}
ProviderProxy providerProxy = getProviderProxy();
if (providerProxy == null) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NOT_SUPPORTED,
String.format("$providerType %1$s", getProvider().getType()));
}
ProviderValidator validator = getProviderProxy().getProviderValidator();
return validate(validator.nameAvailable()) && validate(validator.validateAddProvider());
}
@Override
protected void executeCommand() {
getProvider().setId(Guid.newGuid());
providerDao.save(getProvider());
ProviderProxy providerProxy = getProviderProxy();
if (providerProxy != null) {
providerProxy.onAddition();
}
getReturnValue().setActionReturnValue(getProvider().getId());
setSucceeded(true);
}
@Override
public List<PermissionSubject> getPermissionCheckSubjects() {
return Collections.singletonList(new PermissionSubject(Guid.SYSTEM,
VdcObjectType.System,
ActionGroup.CREATE_STORAGE_POOL));
}
@Override
protected void setActionMessageParameters() {
addValidationMessage(EngineMessage.VAR__ACTION__ADD);
addValidationMessage(EngineMessage.VAR__TYPE__PROVIDER);
}
@Override
protected List<Class<?>> getValidationGroups() {
addValidationGroup(CreateEntity.class);
return super.getValidationGroups();
}
@Override
public AuditLogType getAuditLogTypeValue() {
return getSucceeded() ? AuditLogType.PROVIDER_ADDED : AuditLogType.PROVIDER_ADDITION_FAILED;
}
}