package org.ovirt.engine.core.bll.storage.domain; import javax.inject.Inject; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.common.action.StorageDomainManagementParameter; import org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.StorageDomainStaticDao; public class AddExistingFileStorageDomainCommand<T extends StorageDomainManagementParameter> extends AddNFSStorageDomainCommand<T> { @Inject private StorageDomainStaticDao storageDomainStaticDao; /** * Constructor for command creation when compensation is applied on startup */ public AddExistingFileStorageDomainCommand(Guid commandId) { super(commandId); } public AddExistingFileStorageDomainCommand(T parameters, CommandContext commandContext) { super(parameters, commandContext); } @Override protected boolean canAddDomain() { return checkExistingStorageDomain(); } @Override protected void executeCommand() { updateStaticDataDefaults(); if (StringUtils.isEmpty(getStorageDomain().getStorage())) { getStorageDomain().setStorage( Backend .getInstance() .runInternalAction( VdcActionType.AddStorageServerConnection, new StorageServerConnectionParametersBase(getStorageDomain().getStorageStaticData() .getConnection(), getVds().getId(), false)).getActionReturnValue()); } addStorageDomainInDb(); updateStorageDomainDynamicFromIrs(); setSucceeded(true); } protected boolean checkExistingStorageDomain() { if (storageDomainStaticDao.get(getStorageDomain().getId()) != null) { return failValidation(EngineMessage.ACTION_TYPE_FAILED_STORAGE_DOMAIN_ALREADY_EXIST); } Pair<StorageDomainStatic, Guid> domainFromIrs = executeHSMGetStorageDomainInfo( new HSMGetStorageDomainInfoVDSCommandParameters(getVdsId(), getStorageDomain().getId())); if (domainFromIrs == null) { return failValidation(EngineMessage.ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_EXIST); } if (!concreteCheckExistingStorageDomain(domainFromIrs)) { return false; } initStorageDomainProperties(domainFromIrs); return true; } private void initStorageDomainProperties(Pair<StorageDomainStatic, Guid> domain) { StorageDomainStatic domainFromIrs = domain.getFirst(); if (StringUtils.isEmpty(getStorageDomain().getStorageStaticData().getName())) { getStorageDomain().getStorageStaticData().setStorageName(domainFromIrs.getName()); } if (StringUtils.isEmpty(getStorageDomain().getStorageStaticData().getDescription())) { getStorageDomain().getStorageStaticData().setDescription(domainFromIrs.getDescription()); } } protected Pair<StorageDomainStatic, Guid> executeHSMGetStorageDomainInfo(HSMGetStorageDomainInfoVDSCommandParameters parameters) { return (Pair<StorageDomainStatic, Guid>) runVdsCommand(VDSCommandType.HSMGetStorageDomainInfo, parameters).getReturnValue(); } protected boolean concreteCheckExistingStorageDomain(Pair<StorageDomainStatic, Guid> domain) { boolean returnValue = false; StorageDomainStatic domainFromIrs = domain.getFirst(); if (StringUtils.isEmpty(getStorageDomain().getStorageStaticData().getStorage()) && StringUtils.isEmpty(domainFromIrs.getStorage()) && domainFromIrs.getConnection() != null && getStorageDomain().getStorageStaticData().getConnection() != null) { returnValue = StringUtils.equals(domainFromIrs.getConnection().getConnection(), getStorageDomain() .getStorageStaticData().getConnection().getConnection()); } else if (!StringUtils.isEmpty(getStorageDomain().getStorageStaticData().getStorage()) && !StringUtils.isEmpty(domainFromIrs.getStorage())) { returnValue = StringUtils.equals(domainFromIrs.getStorage(), getStorageDomain().getStorageStaticData() .getStorage()); } if (!returnValue) { addValidationMessage(EngineMessage.ERROR_CANNOT_ADD_EXISTING_STORAGE_DOMAIN_CONNECTION_DATA_ILLEGAL); } return returnValue; } }