blob: e42fdd5d1585f91cdb4e4f659da395b9b8a8e750 [file] [log] [blame]
/*
* 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.api.Depth;
import org.jetbrains.idea.svn.revision.SvnSelectRevisionPanel;
import org.jetbrains.idea.svn.update.SvnRevisionPanel;
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 Depth 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);
}
}