org.jetbrains.idea.svn.dialogs.browser.CheckoutOptionsDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.jetbrains.idea.svn.dialogs.browser.CheckoutOptionsDialog.java

Source

/*
 * Copyright 2000-2012 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 org.jetbrains.idea.svn.dialogs.browser;

import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.openapi.vcs.checkout.CheckoutStrategy;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.components.JBScrollPane;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.svn.DepthCombo;
import org.jetbrains.idea.svn.SvnBundle;
import org.jetbrains.idea.svn.revision.SvnSelectRevisionPanel;
import org.jetbrains.idea.svn.update.SvnRevisionPanel;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.wc.SVNRevision;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CheckoutOptionsDialog extends DialogWrapper {
    private JCheckBox myExternalsCheckbox;
    private JLabel myUrlLabel;
    private JPanel myTopPanel;
    private SvnSelectRevisionPanel svnSelectRevisionPanel;
    private DepthCombo myDepthCombo;
    private JLabel myDepthLabel;
    private JList myLocalTargetList;
    private FixedSizeButton mySelectTarget;
    private JBScrollPane myScroll;
    private final String myRelativePath;

    public CheckoutOptionsDialog(final Project project, SVNURL url, File target, final VirtualFile root,
            final String relativePath) {
        super(project, true);
        myRelativePath = relativePath;
        final String urlText = url.toDecodedString();
        myUrlLabel.setText(urlText);

        fillTargetList(target);
        validateTargetSelected();

        mySelectTarget.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                // choose directory here/
                FileChooserDescriptor fcd = FileChooserDescriptorFactory.createSingleFolderDescriptor();
                fcd.setShowFileSystemRoots(true);
                fcd.setTitle(SvnBundle.message("checkout.directory.chooser.title"));
                fcd.setDescription(SvnBundle.message("checkout.directory.chooser.prompt"));
                fcd.setHideIgnored(false);
                VirtualFile file = FileChooser.chooseFile(fcd, getContentPane(), project, null);
                if (file == null) {
                    return;
                }
                fillTargetList(new File(file.getPath()));
                validateTargetSelected();
            }
        });
        myLocalTargetList.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(final ListSelectionEvent e) {
                validateTargetSelected();
            }
        });

        svnSelectRevisionPanel.setRoot(root);
        svnSelectRevisionPanel.setProject(project);
        svnSelectRevisionPanel.setUrlProvider(new SvnRevisionPanel.UrlProvider() {
            public String getUrl() {
                return urlText;
            }
        });

        setTitle(SvnBundle.message("checkout.options.dialog.title"));
        myDepthLabel.setLabelFor(myDepthCombo);
        init();
        myScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    }

    private void validateTargetSelected() {
        Object[] objects = myLocalTargetList.getSelectedValues();
        boolean disable = objects == null || objects.length != 1;
        setOKActionEnabled(!disable);
    }

    private void fillTargetList(final File target) {
        final DefaultListModel listModel = new DefaultListModel();
        final List<CheckoutStrategy> strategies = new ArrayList<CheckoutStrategy>();
        Collections.addAll(strategies,
                CheckoutStrategy.createAllStrategies(target, new File(myRelativePath), false));
        strategies.add(new SvnTrunkCheckoutStrategy(target, new File(myRelativePath), false));
        final List<File> targets = new ArrayList<File>(5);
        for (CheckoutStrategy strategy : strategies) {
            final File result = strategy.getResult();
            if (result != null && (!targets.contains(result))) {
                targets.add(result);
            }
        }
        Collections.sort(targets);
        for (File file : targets) {
            listModel.addElement(file);
        }
        myLocalTargetList.setModel(listModel);
        myLocalTargetList.setVisibleRowCount(4);
        myLocalTargetList.setPreferredSize(new Dimension(20, 80));
        myLocalTargetList.setMinimumSize(new Dimension(20, 80));
        myLocalTargetList.setSelectedValue(target, true);
        if (myLocalTargetList.getSelectedValues() == null && (!targets.isEmpty())) {
            myLocalTargetList.setSelectedIndex(0);
        }
    }

    @NonNls
    protected String getDimensionServiceKey() {
        return "svn4idea.checkout.options";
    }

    @Nullable
    public File getTarget() {
        Object[] objects = myLocalTargetList.getSelectedValues();
        return (objects == null) || (objects.length != 1) ? null : (File) objects[0];
    }

    public SVNDepth getDepth() {
        return myDepthCombo.getDepth();
    }

    public boolean isIgnoreExternals() {
        return !myExternalsCheckbox.isSelected();
    }

    @Nullable
    protected JComponent createCenterPanel() {
        return myTopPanel;
    }

    @NotNull
    public SVNRevision getRevision() throws ConfigurationException {
        return svnSelectRevisionPanel.getRevision();
    }

    private void createUIComponents() {
        mySelectTarget = new FixedSizeButton(20);
        myDepthCombo = new DepthCombo(false);
    }
}