com.microsoft.tfs.client.common.ui.dialogs.vc.FindChangesetDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.tfs.client.common.ui.dialogs.vc.FindChangesetDialog.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.dialogs.vc;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;

import com.microsoft.tfs.client.common.repository.TFSRepository;
import com.microsoft.tfs.client.common.ui.Messages;
import com.microsoft.tfs.client.common.ui.controls.generic.compatibility.table.DoubleClickEvent;
import com.microsoft.tfs.client.common.ui.controls.generic.compatibility.table.DoubleClickListener;
import com.microsoft.tfs.client.common.ui.controls.vc.FindChangesetControl;
import com.microsoft.tfs.client.common.ui.framework.dialog.ExtendedButtonDialog;
import com.microsoft.tfs.client.common.ui.framework.validation.ButtonValidatorBinding;
import com.microsoft.tfs.client.common.ui.framework.validation.NumericConstraint;
import com.microsoft.tfs.client.common.ui.framework.validation.SelectionProviderValidator;
import com.microsoft.tfs.client.common.ui.tasks.vc.ViewChangesetDetailsTask;
import com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Changeset;
import com.microsoft.tfs.util.Check;
import com.microsoft.tfs.util.valid.Validator;

public class FindChangesetDialog extends ExtendedButtonDialog {
    private static final int DETAILS_ID = IDialogConstants.CLIENT_ID + 1;

    private final TFSRepository repository;
    private String path;
    private FindChangesetControl control;

    /*
     * closeOnlyMode is specified when the dialog should only have a close
     * button (not OK/Cancel). This is used by GotoChangesetDialog, or other
     * places where we merely want to display, not allow the user to select, a
     * changeset.
     */
    private boolean closeOnlyMode = false;

    public FindChangesetDialog(final Shell parentShell, final TFSRepository repository) {
        super(parentShell);

        Check.notNull(repository, "repository"); //$NON-NLS-1$
        this.repository = repository;

        setOptionIncludeDefaultButtons(false);
        addExtendedButtonDescription(DETAILS_ID, Messages.getString("FindChangesetDialog.DetailsButtonText"), //$NON-NLS-1$
                false);
    }

    public void setCloseOnlyMode(final boolean closeOnlyMode) {
        this.closeOnlyMode = closeOnlyMode;
    }

    public Changeset getSelectedChangeset() {
        return control.getHistoryControl().getSelectedChangeset();
    }

    public void setPath(final String path) {
        this.path = path;

        if (control != null) {
            control.getOptionsControl().setPath(path);
        }
    }

    @Override
    protected void hookCustomButtonPressed(final int buttonId) {
        if (DETAILS_ID == buttonId) {
            showSelectedChangesetDetails();
        }
    }

    @Override
    protected String provideDialogTitle() {
        return Messages.getString("FindChangesetDialog.FindChangesetDialogTitle"); //$NON-NLS-1$
    }

    @Override
    protected void hookAddToDialogArea(final Composite dialogArea) {
        final FillLayout layout = new FillLayout();
        layout.marginWidth = getHorizontalMargin();
        layout.marginHeight = getVerticalMargin();
        dialogArea.setLayout(layout);

        control = new FindChangesetControl(dialogArea, SWT.NONE, repository);
        if (path != null) {
            control.getOptionsControl().setPath(path);
        }

        control.getHistoryControl().addDoubleClickListener(new DoubleClickListener() {
            @Override
            public void doubleClick(final DoubleClickEvent event) {
                if (closeOnlyMode) {
                    showSelectedChangesetDetails();
                } else {
                    okPressed();
                }
            }
        });

        control.setFocus();
    }

    @Override
    protected void createButtonsForButtonBar(final Composite parent) {
        if (closeOnlyMode) {
            addButtonDescription(IDialogConstants.CANCEL_ID, IDialogConstants.CLOSE_LABEL, true);
        } else {
            addButtonDescription(IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
            addButtonDescription(IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
        }

        super.createButtonsForButtonBar(parent);
    }

    @Override
    protected void hookAfterButtonsCreated() {
        final Validator validator = new SelectionProviderValidator(control.getHistoryControl(),
                NumericConstraint.EXACTLY_ONE, null);

        new ButtonValidatorBinding(getButton(DETAILS_ID)).bind(validator);

        if (!closeOnlyMode) {
            new ButtonValidatorBinding(getButton(IDialogConstants.OK_ID)).bind(validator);
        }
    }

    private void showSelectedChangesetDetails() {
        final Changeset selectedChangeset = control.getHistoryControl().getSelectedChangeset();

        if (selectedChangeset != null) {
            new ViewChangesetDetailsTask(getShell(), repository, selectedChangeset.getChangesetID()).run();
        }
    }
}