blob: e5bf1f6f87429693ef9b6941ba218a142cfbaabd [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 com.intellij.cvsSupport2.ui;
import com.intellij.CvsBundle;
import com.intellij.cvsSupport2.CvsUtil;
import com.intellij.cvsSupport2.config.CvsRootConfiguration;
import com.intellij.cvsSupport2.config.ui.SelectCvsConfigurationPanel;
import com.intellij.cvsSupport2.util.CvsVfsUtil;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserFactory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.vfs.VirtualFile;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.io.File;
public class MigrateRootDialog extends DialogWrapper {
private final JRadioButton myRadioButton1;
private final JRadioButton myRadioButton2 = new JRadioButton(CvsBundle.message("migrate.replace.all.roots.label"));
private final TextFieldWithBrowseButton myDirectoryField = new TextFieldWithBrowseButton();
private final SelectCvsConfigurationPanel myCvsConfigurationPanel;
private ListSelectionListener myListener;
private String myCvsRoot;
public MigrateRootDialog(Project project, VirtualFile directory) {
super(project);
setTitle("Migrate CVS Root");
final File file = CvsVfsUtil.getFileFor(directory);
final String root = CvsUtil.loadRootFrom(file);
myRadioButton1 = new JRadioButton(CvsBundle.message("migrate.replace.if.root.equals.label", root));
myRadioButton1.setSelected(true);
final ButtonGroup group = new ButtonGroup();
group.add(myRadioButton1);
group.add(myRadioButton2);
myDirectoryField.setText(directory.getPath());
final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false) {
@Override
public void validateSelectedFiles(VirtualFile[] files) throws Exception {
for (VirtualFile vFile : files) {
final File file = CvsVfsUtil.getFileFor(vFile);
final String root = CvsUtil.loadRootFrom(file);
if (root == null) {
throw new Exception(CvsBundle.message("error.message.directory.is.not.under.cvs"));
}
}
}
};
descriptor.setRoots(ProjectRootManager.getInstance(project).getContentRootsFromAllModules());
myDirectoryField.addBrowseFolderListener("Select directory to migrate to a new CVS root", "", project, descriptor);
FileChooserFactory.getInstance().installFileCompletion(myDirectoryField.getChildComponent(), descriptor, true, getDisposable());
myDirectoryField.getTextField().getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
enableOKActionConditionally();
}
@Override
public void removeUpdate(DocumentEvent e) {
enableOKActionConditionally();
}
@Override
public void changedUpdate(DocumentEvent e) {
enableOKActionConditionally();
}
});
myCvsConfigurationPanel = new SelectCvsConfigurationPanel(project);
if (SystemInfo.isMac) {
myCvsConfigurationPanel.setBorder(new EmptyBorder(2, 3, 2, 0));
}
myListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
enableOKActionConditionally();
}
};
myCvsConfigurationPanel.addListSelectionListener(myListener);
setOKButtonText("Migrate");
init();
}
@Override
protected JComponent createCenterPanel() {
final JPanel panel = new JPanel(new GridBagLayout());
final GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets.bottom = 2;
constraints.weightx = 1.0;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.anchor = GridBagConstraints.LINE_START;
final JLabel label1 = new JLabel(CvsBundle.message("migrate.cvs.root.directory.label"));
label1.setLabelFor(myDirectoryField);
panel.add(label1, constraints);
constraints.gridy = 1;
panel.add(myDirectoryField, constraints);
constraints.gridy = 2;
constraints.insets.left = 5;
panel.add(myRadioButton1, constraints);
constraints.gridy = 3;
panel.add(myRadioButton2, constraints);
constraints.gridy = 4;
constraints.insets.top = 8;
constraints.insets.left = 0;
final JLabel label2 = new JLabel(CvsBundle.message("migrate.target.root.label"));
panel.add(label2, constraints);
final JComponent component = myCvsConfigurationPanel.getPreferredFocusedComponent();
label2.setLabelFor(component);
constraints.insets.top = 0;
constraints.gridy = 5;
panel.add(myCvsConfigurationPanel, constraints);
return panel;
}
private boolean check() {
final String text = myDirectoryField.getText();
final File file = new File(text);
if (!file.exists() || !file.isDirectory()) {
return false;
}
myCvsRoot = CvsUtil.loadRootFrom(file);
if (myCvsRoot == null) {
return false;
}
myRadioButton1.setText(CvsBundle.message("migrate.replace.if.root.equals.label", myCvsRoot));
if (getSelectedCvsConfiguration() == null) {
return false;
}
return true;
}
@Override
protected void dispose() {
myCvsConfigurationPanel.removeListSelectionListener(myListener);
super.dispose();
}
private void enableOKActionConditionally() {
setOKActionEnabled(check());
}
public String getCvsRoot() {
return myCvsRoot;
}
@Override
public JComponent getPreferredFocusedComponent() {
return myCvsConfigurationPanel;
}
public CvsRootConfiguration getSelectedCvsConfiguration() {
return myCvsConfigurationPanel.getSelectedConfiguration();
}
public File getSelectedDirectory() {
return new File(myDirectoryField.getText());
}
public boolean shouldReplaceAllRoots() {
return myRadioButton2.isSelected();
}
}