com.microsoft.tfs.client.common.ui.teambuild.teamexplorer.actions.EditBuildDefinitionAction.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.tfs.client.common.ui.teambuild.teamexplorer.actions.EditBuildDefinitionAction.java

Source

// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See License.txt in the repository root.

package com.microsoft.tfs.client.common.ui.teambuild.teamexplorer.actions;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;

import com.microsoft.tfs.client.common.ui.teambuild.Messages;
import com.microsoft.tfs.client.common.ui.teambuild.dialogs.BuildDefinitionDialog;
import com.microsoft.tfs.client.common.ui.teambuild.dialogs.TfsBuildDefinitionDialog;
import com.microsoft.tfs.client.common.ui.teambuild.editors.BuildExplorer;
import com.microsoft.tfs.client.common.ui.teambuild.git.EGitHelpers;
import com.microsoft.tfs.client.common.ui.teambuild.teamexplorer.events.BuildDefinitionEventArg;
import com.microsoft.tfs.client.common.ui.teambuild.teamexplorer.helpers.BuildHelpers;
import com.microsoft.tfs.client.common.ui.teamexplorer.TeamExplorerEvents;
import com.microsoft.tfs.core.clients.build.BuildSourceProviders;
import com.microsoft.tfs.core.clients.build.IBuildDefinition;
import com.microsoft.tfs.core.clients.build.exceptions.BuildException;

public class EditBuildDefinitionAction extends TeamExplorerSingleBuildDefinitionAction {
    private static final Log log = LogFactory.getLog(EditBuildDefinitionAction.class);

    @Override
    public void doRun(final IAction action) {
        // Get a fresh copy of the build definition. This makes sure edits we
        // make will get ignored on Cancel but also that we have a fresh copy of
        // the definition so reduce the risk of overwriting someone else's
        // changes.
        final IBuildDefinition buildDefinition = BuildHelpers.getUpToDateBuildDefinition(getShell(),
                selectedDefinition);

        // Make sure the build hasn't been deleted.
        if (buildDefinition == null) {
            final BuildDefinitionEventArg arg = new BuildDefinitionEventArg(selectedDefinition);
            getContext().getEvents().notifyListener(TeamExplorerEvents.BUILD_DEFINITION_DELETED, arg);

            return;
        }

        final BuildDefinitionDialog dialog;

        if (buildDefinition.getSourceProviders() != null && buildDefinition.getSourceProviders().length > 0
                && BuildSourceProviders.isTfGit(buildDefinition.getSourceProviders()[0])) {
            dialog = (BuildDefinitionDialog) EGitHelpers.getGitBuildDefinitionDialog(getShell(), buildDefinition);

            if (dialog == null) {
                final String errorMessage = Messages.getString("BuildHelpers.EGitRequired"); //$NON-NLS-1$
                final String title = Messages.getString("EditBuildDefinitionFromDetailsAction.EGitNotInstalled"); //$NON-NLS-1$

                log.error("Cannot edit the build definition. EGit plugin is requered for this action."); //$NON-NLS-1$
                MessageDialog.openError(getShell(), title, errorMessage);

                return;
            }
        } else {
            dialog = new TfsBuildDefinitionDialog(getShell(), buildDefinition);
        }

        try {
            if (dialog.open() == IDialogConstants.OK_ID) {
                dialog.commitChangesIfNeeded();

                // We should redraw build definitions at this point
                if (BuildExplorer.getInstance() != null && !BuildExplorer.getInstance().isDisposed()) {
                    BuildExplorer.getInstance().reloadBuildDefinitions();
                }

                // We should redraw and build agents at this point because we
                // may
                // have added new ones.
                if (BuildExplorer.getInstance() != null && !BuildExplorer.getInstance().isDisposed()
                        && BuildExplorer.getInstance().getQueueEditorPage() != null) {
                    BuildExplorer.getInstance().getQueueEditorPage().reloadBuildAgents();
                }

                if (selectedDefinition != null) {
                    final BuildDefinitionEventArg arg = new BuildDefinitionEventArg(selectedDefinition);
                    getContext().getEvents().notifyListener(TeamExplorerEvents.BUILD_DEFINITION_CHANGED, arg);
                }
            }
        } catch (final BuildException e) {
            final String title = Messages
                    .getString("EditBuildDefinitionFromDetailsAction.CannotEditDefinitionTitle"); //$NON-NLS-1$
            log.warn(title, e);
            MessageDialog.openWarning(getShell(), title, e.getMessage());
        } catch (final Exception e) {
            final String title = Messages
                    .getString("EditBuildDefinitionFromDetailsAction.FailedEditDefinitionTitle"); //$NON-NLS-1$
            log.error(title, e);
            MessageDialog.openError(getShell(), title, e.getLocalizedMessage());
        }
    }
}