/* * Copyright 2000-2020 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.teamcity.ui.actions; import jetbrains.buildServer.Build; import jetbrains.buildServer.IncompatiblePluginError; import jetbrains.buildServer.RefreshSummaryCommand; import jetbrains.buildServer.RunningBuild; import jetbrains.buildServer.serverProxy.RemoteBuildServerFacade; import jetbrains.buildServer.serverSide.auth.AuthenticationFailedException; import jetbrains.buildServer.serverSide.auth.Permission; import jetbrains.buildServer.users.User; import jetbrains.buildServer.users.UserData; import jetbrains.buildServer.xmlrpc.RemoteCallException; import jetbrains.teamcity.Activator; import jetbrains.teamcity.SharedImages; import org.eclipse.jface.action.Action; import org.jetbrains.annotations.Nullable; public class StopBuildAction extends Action { private Build myBuild; public StopBuildAction() { super(Messages.getString("StopBuildAction.name"), SharedImages.getImageDescriptorByPath(SharedImages.STOP_BUILD_ACTION)); //$NON-NLS-1$ } public void setBuildNode(@Nullable Build build) { myBuild = build; setEnabled(myBuild != null && !myBuild.isFinished() && hasPermissions() && myBuild.getCanceledInfo() == null); } private boolean hasPermissions() { UserData user = Activator.getDefault().getSnapshot().getUser(); return !(user != null && !user.isPermissionGrantedForProject(myBuild.getProjectId(), Permission.CANCEL_BUILD)); } @Override public void run() { Activator.getDefault().getIDE().addToQueue(new RefreshSummaryCommand(Activator.getDefault().getSnapshot()) { @Override public void execute() throws AuthenticationFailedException, IncompatiblePluginError, RemoteCallException { RemoteBuildServerFacade facade = getServer().getServerFacade(); User user = Activator.getDefault().getSnapshot().getUser(); facade.stopBuild((RunningBuild) myBuild, user, Messages.getString("StopBuildAction.reason")); //$NON-NLS-1$ super.execute(); // getServer().scheduleUpdate(); } }); } }