package org.ovirt.engine.core.bll;
import java.util.Collection;
import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
import org.ovirt.engine.core.common.queries.GetTasksStatusesByTasksIDsParameters;
import org.ovirt.engine.core.compat.Guid;
public class GetTasksStatusesByTasksIDsQuery<P extends GetTasksStatusesByTasksIDsParameters>
extends QueriesCommandBase<P> {
public GetTasksStatusesByTasksIDsQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
boolean userAuthorizedToRunQuery = getUser().isAdmin();
if (!userAuthorizedToRunQuery) {
Collection<Guid> userIds = CommandCoordinatorUtil.getUserIdsForVdsmTaskIds(getParameters().getTasksIDs());
boolean tasksOwnedByUser = userIds.size() == 1 && userIds.contains(getUserID());
// if user ids is empty the tasks have completed
userAuthorizedToRunQuery = userIds.isEmpty() || tasksOwnedByUser;
}
if (userAuthorizedToRunQuery) {
getQueryReturnValue().setReturnValue(CommandCoordinatorUtil.pollTasks(getParameters().getTasksIDs()));
} else {
String errMessage = "Query execution failed due to insufficient permissions. Users can only query tasks started by them.";
log.error(errMessage);
getQueryReturnValue().setExceptionString(errMessage);
}
}
}