/* * 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.AddToQueueResult; import jetbrains.buildServer.BuildType; import jetbrains.buildServer.IncompatiblePluginError; import jetbrains.buildServer.RefreshSummaryCommand; import jetbrains.buildServer.serverSide.TriggeredByBuilder; import jetbrains.buildServer.serverSide.auth.AuthenticationFailedException; import jetbrains.buildServer.xmlrpc.RemoteCallException; import jetbrains.teamcity.Activator; import jetbrains.teamcity.EclipseIDE; import jetbrains.teamcity.core.Util; import jetbrains.teamcity.ui.InformationalDialog; import jetbrains.teamcity.ui.UIUtil; import jetbrains.teamcity.ui.views.model.ProjectTreeBuildNode; import jetbrains.teamcity.ui.views.model.ProjectTreeBuildTypeNode; import org.eclipse.core.runtime.IStatus; import org.jetbrains.annotations.Nullable; import java.util.Collections; /** * @author Vladislav.Rassokhin */ public class RunBuildAction extends SelectionBasedAction { @Nullable public static BuildType getBuildType(@Nullable final Object node) { if (node instanceof ProjectTreeBuildTypeNode) { return ((ProjectTreeBuildTypeNode) node).getBuildType(); } else if (node instanceof ProjectTreeBuildNode) { return ((ProjectTreeBuildNode) node).getBuild().getBuildType(); } return null; } @Override public void run() { for (final Object selected : getStructuredSelection().toList()) { final BuildType buildType = getBuildType(selected); if (buildType != null) { Activator.getDefault().getIDE().addToQueue(new RefreshSummaryCommand(Activator.getDefault().getSnapshot()) { @Override public void execute() throws AuthenticationFailedException, IncompatiblePluginError, RemoteCallException { TriggeredByBuilder builder = new TriggeredByBuilder(getServer().getUser()); builder.addParameter(TriggeredByBuilder.IDE_PLUGIN_PARAM_NAME, EclipseIDE.getProductNameAndVersion()); final AddToQueueResult status = getServer().getServerFacade().addToQueue(buildType, builder.toString()); if (status.hasFailures()) { UIUtil.execUI(new Runnable() { public void run() { InformationalDialog.openError(UIUtil.getWorkbenchShell(), Messages.getString("RunBuildAction.adding.error.title"), null, Util.createStatus( IStatus.ERROR, status.formatReasons(Collections.singletonList(buildType))), null); } }, true); } super.execute(); } }); } } } }