package org.ovirt.engine.core.bll.storage;
import java.util.Collections;
import java.util.Map;
import org.ovirt.engine.core.bll.AddVdsGroupCommand;
import org.ovirt.engine.core.bll.MultiLevelAdministrationHandler;
import org.ovirt.engine.core.bll.utils.VersionSupport;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.StoragePoolManagementParameter;
import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
import org.ovirt.engine.core.common.businessentities.StorageType;
import org.ovirt.engine.core.common.businessentities.network;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.VdcBllMessages;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class AddEmptyStoragePoolCommand<T extends StoragePoolManagementParameter> extends
StoragePoolManagementCommandBase<T> {
public AddEmptyStoragePoolCommand(T parameters) {
super(parameters);
}
protected void AddStoragePoolToDb() {
getStoragePool().setId(Guid.NewGuid());
getStoragePool().setstatus(StoragePoolStatus.Uninitialized);
DbFacade.getInstance().getStoragePoolDAO().save(getStoragePool());
}
@Override
protected void executeCommand() {
AddStoragePoolToDb();
getReturnValue().setActionReturnValue(getStoragePool().getId());
AddDefaultNetworks();
setSucceeded(true);
}
@Override
public AuditLogType getAuditLogTypeValue() {
return getSucceeded() ? AuditLogType.USER_ADD_STORAGE_POOL : AuditLogType.USER_ADD_STORAGE_POOL_FAILED;
}
private void AddDefaultNetworks() {
network net = new network();
net.setId(Guid.NewGuid());
net.setname(Config.<String> GetValue(ConfigValues.ManagementNetwork));
net.setdescription(AddVdsGroupCommand.DefaultNetworkDescription);
net.setstorage_pool_id(getStoragePool().getId());
DbFacade.getInstance().getNetworkDAO().save(net);
}
@Override
protected boolean canDoAction() {
addCanDoActionMessage(VdcBllMessages.VAR__ACTION__CREATE);
boolean result = super.canDoAction();
if (result && DbFacade.getInstance().getStoragePoolDAO().getByName(getStoragePool().getname()) != null) {
result = false;
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NAME_ALREADY_EXIST);
} else if (!CheckStoragePoolNameLengthValid()) {
result = false;
} else if (!VersionSupport.checkVersionSupported(getStoragePool().getcompatibility_version()
)) {
addCanDoActionMessage(VersionSupport.getUnsupportedVersionMessage());
result = false;
} else if (getStoragePool().getstorage_pool_type() == StorageType.LOCALFS
&& !Config.<Boolean> GetValue(ConfigValues.LocalStorageEnabled, getStoragePool()
.getcompatibility_version().toString())) {
result = false;
addCanDoActionMessage(VdcBllMessages.DATA_CENTER_LOCAL_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION);
}
return result;
}
@Override
public Map<Guid, VdcObjectType> getPermissionCheckSubjects() {
return Collections.singletonMap(MultiLevelAdministrationHandler.SYSTEM_OBJECT_ID, VdcObjectType.System);
}
}