package org.ovirt.engine.core.bll.network.cluster;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.common.action.AttachNetworkToClusterParameter;
import org.ovirt.engine.core.common.action.ManageNetworkClustersParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.compat.Version;
@NonTransactiveCommandAttribute
public class AttachNetworkToClusterCommand extends NetworkClusterCommandBase<AttachNetworkToClusterParameter> {
@Inject
private AttachNetworkClusterPermissionsChecker permissionsChecker;
public AttachNetworkToClusterCommand(AttachNetworkToClusterParameter attachNetworkToClusterParameter,
CommandContext cmdContext) {
super(attachNetworkToClusterParameter, cmdContext);
}
protected Version getClusterVersion() {
return getCluster().getCompatibilityVersion();
}
@Override
protected void executeCommand() {
final AttachNetworkToClusterParameter attachNetworkToClusterParameter = getParameters();
final VdcReturnValueBase returnValue =
runInternalAction(VdcActionType.AttachNetworkToClusterInternal, attachNetworkToClusterParameter);
setSucceeded(returnValue.getSucceeded());
if (returnValue.getSucceeded()) {
attachLabeledNetwork();
} else {
propagateFailure(returnValue);
}
}
private void attachLabeledNetwork() {
final AttachNetworkToClusterParameter attachNetworkToClusterParameter = getParameters();
runInternalAction(
VdcActionType.PropagateLabeledNetworksToClusterHosts,
new ManageNetworkClustersParameters(new ArrayList<>(Collections.singleton(attachNetworkToClusterParameter.getNetworkCluster()))));
}
@Override
public List<PermissionSubject> getPermissionCheckSubjects() {
return permissionsChecker.findPermissionCheckSubjects(
getNetworkCluster(),
getActionType());
}
@Override
protected boolean checkPermissions(final List<PermissionSubject> permSubjects) {
return permissionsChecker.checkPermissions(this, permSubjects);
}
}