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.RenamedEntityInfoProvider; import org.ovirt.engine.core.bll.ValidationResult; 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.UpdateEntity; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.dao.provider.ProviderDao; public class UpdateProviderCommand<P extends ProviderParameters> extends CommandBase<P> implements RenamedEntityInfoProvider { @Inject private ProviderDao providerDao; private Provider<?> oldProvider; public UpdateProviderCommand(Guid commandId) { super(commandId); } public UpdateProviderCommand(P parameters, CommandContext cmdContext) { super(parameters, cmdContext); } private Provider<?> getProvider() { return getParameters().getProvider(); } private Provider<?> getOldProvider() { if (oldProvider == null) { oldProvider = providerDao.get(getProvider().getId()); } return oldProvider; } public String getProviderName() { return getOldProvider().getName(); } @Override protected boolean validate() { ProviderValidator validatorOld = new ProviderValidator(getOldProvider()); ProviderValidator validatorNew = new ProviderValidator(getProvider()); return validate(validatorOld.providerIsSet()) && (nameKept() || validate(validatorNew.nameAvailable())) && validate(providerTypeNotChanged(getOldProvider(), getProvider())); } private ValidationResult providerTypeNotChanged(Provider<?> oldProvider, Provider<?> newProvider) { return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_CANNOT_CHANGE_PROVIDER_TYPE) .when(oldProvider.getType() != newProvider.getType()); } private boolean nameKept() { return getOldProvider().getName().equals(getProvider().getName()); } @Override protected void executeCommand() { providerDao.update(getProvider()); ProviderProxy providerProxy = ProviderProxyFactory.getInstance().create(getProvider()); if (providerProxy != null) { providerProxy.onModification(); } 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__UPDATE); addValidationMessage(EngineMessage.VAR__TYPE__PROVIDER); } @Override protected List<Class<?>> getValidationGroups() { addValidationGroup(UpdateEntity.class); return super.getValidationGroups(); } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.PROVIDER_UPDATED : AuditLogType.PROVIDER_UPDATE_FAILED; } @Override public String getEntityType() { return VdcObjectType.PROVIDER.getVdcObjectTranslation(); } @Override public String getEntityOldName() { return getOldProvider().getName(); } @Override public String getEntityNewName() { return getProvider().getName(); } @Override public void setEntityId(AuditLogableBase logable) { } }