PageRenderTime 8ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/src/org/bitbucket/connectors/jetbrains/ui/BitbucketCloneProjectPanel.java

https://bitbucket.org/atlassian/jetbrains-bitbucket-connector/
Java | 155 lines | 129 code | 26 blank | 0 comment | 5 complexity | 12a04a5cb2789650c776106208380a12 MD5 | raw file
  1. package org.bitbucket.connectors.jetbrains.ui;
  2. import com.intellij.openapi.fileChooser.FileChooser;
  3. import com.intellij.openapi.fileChooser.FileChooserDescriptor;
  4. import com.intellij.openapi.ui.TextFieldWithBrowseButton;
  5. import com.intellij.openapi.vfs.LocalFileSystem;
  6. import com.intellij.openapi.vfs.VirtualFile;
  7. import com.intellij.ui.DocumentAdapter;
  8. import com.intellij.ui.ListCellRendererWrapper;
  9. import com.intellij.util.ArrayUtil;
  10. import org.bitbucket.connectors.jetbrains.RepositoryInfo;
  11. import org.jetbrains.annotations.Nullable;
  12. import javax.swing.*;
  13. import javax.swing.event.DocumentEvent;
  14. import javax.swing.event.DocumentListener;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.event.ActionListener;
  17. import java.awt.event.ItemEvent;
  18. import java.awt.event.ItemListener;
  19. import java.util.Collections;
  20. import java.util.List;
  21. public class BitbucketCloneProjectPanel {
  22. private JPanel myPanel;
  23. private JComboBox mySelectRepositoryComboBox;
  24. private JTextField myRepositoryUrlField;
  25. private TextFieldWithBrowseButton myTextFieldWithBrowseButton;
  26. private JTextField myProjectNameText;
  27. private JRadioButton myRepositoryListRadioButton;
  28. private JRadioButton myRepositoryUrlRadioButton;
  29. private BitbucketCloneProjectDialog myDialog;
  30. public BitbucketCloneProjectPanel(BitbucketCloneProjectDialog dialog) {
  31. myDialog = dialog;
  32. mySelectRepositoryComboBox.setRenderer(new ListCellRendererWrapper<RepositoryInfo>() {
  33. public void customize(JList list, RepositoryInfo value, int index, boolean selected, boolean cellHasFocus) {
  34. setText(value.getOwner() + "/" + value.getName());
  35. }
  36. });
  37. mySelectRepositoryComboBox.addItemListener(new ItemListener() {
  38. public void itemStateChanged(ItemEvent e) {
  39. RepositoryInfo repositoryInfo = (RepositoryInfo) e.getItem();
  40. if (repositoryInfo != null) {
  41. myProjectNameText.setText(repositoryInfo.getName());
  42. myDialog.updateOkButton();
  43. }
  44. }
  45. });
  46. DocumentListener listener = new DocumentAdapter() {
  47. protected void textChanged(DocumentEvent documentEvent) {
  48. myDialog.updateOkButton();
  49. }
  50. };
  51. myProjectNameText.getDocument().addDocumentListener(listener);
  52. myRepositoryUrlField.getDocument().addDocumentListener(listener);
  53. myTextFieldWithBrowseButton.getChildComponent().getDocument().addDocumentListener(listener);
  54. myTextFieldWithBrowseButton.setTextFieldPreferredWidth(50);
  55. myTextFieldWithBrowseButton.addActionListener(new ActionListener() {
  56. public void actionPerformed(ActionEvent e) {
  57. chooseFolder();
  58. }
  59. });
  60. myRepositoryListRadioButton.addActionListener(new ActionListener() {
  61. public void actionPerformed(ActionEvent e) {
  62. repositoryTypeChanged(true);
  63. myDialog.updateOkButton();
  64. }
  65. });
  66. myRepositoryUrlRadioButton.addActionListener(new ActionListener() {
  67. public void actionPerformed(ActionEvent e) {
  68. repositoryTypeChanged(false);
  69. myDialog.updateOkButton();
  70. }
  71. });
  72. myRepositoryListRadioButton.setSelected(true);
  73. repositoryTypeChanged(true);
  74. }
  75. private void repositoryTypeChanged(boolean selection) {
  76. mySelectRepositoryComboBox.setEnabled(selection);
  77. myRepositoryUrlField.setEnabled(!selection);
  78. }
  79. private void chooseFolder() {
  80. FileChooserDescriptor fileChooserDescriptor = new FileChooserDescriptor(false, true, false, false, false, false) {
  81. public String getName(VirtualFile virtualFile) {
  82. return virtualFile.getName();
  83. }
  84. @Nullable
  85. public String getComment(VirtualFile virtualFile) {
  86. return virtualFile.getPresentableUrl();
  87. }
  88. };
  89. fileChooserDescriptor.setTitle("Select project destination folder");
  90. String preselectedFolderPath = myTextFieldWithBrowseButton.getText();
  91. VirtualFile preselectedFolder = LocalFileSystem.getInstance().findFileByPath(preselectedFolderPath);
  92. VirtualFile[] files = FileChooser.chooseFiles(fileChooserDescriptor, myPanel, null, preselectedFolder);
  93. if (files.length > 0) {
  94. myTextFieldWithBrowseButton.setText(files[0].getPath());
  95. }
  96. }
  97. public JComponent getPanel() {
  98. return myPanel;
  99. }
  100. public JComponent getPreferrableFocusComponent() {
  101. return mySelectRepositoryComboBox;
  102. }
  103. public boolean isRepositoryUrl() {
  104. return myRepositoryUrlRadioButton.isSelected();
  105. }
  106. public RepositoryInfo getSelectedRepository() {
  107. return myRepositoryListRadioButton.isSelected() ? (RepositoryInfo) mySelectRepositoryComboBox.getModel().getSelectedItem() : null;
  108. }
  109. public String getSelectedPath() {
  110. return myTextFieldWithBrowseButton.getText();
  111. }
  112. public String getProjectName() {
  113. return myProjectNameText.getText();
  114. }
  115. public void setAvailableRepos(List<RepositoryInfo> repos) {
  116. Collections.sort(repos);
  117. mySelectRepositoryComboBox.setModel(new DefaultComboBoxModel(ArrayUtil.toObjectArray(repos)));
  118. RepositoryInfo preselectedRepository = (RepositoryInfo) mySelectRepositoryComboBox.getSelectedItem();
  119. if (preselectedRepository != null) {
  120. myProjectNameText.setText(preselectedRepository.getName());
  121. }
  122. }
  123. public void setSelectedPath(String path) {
  124. myTextFieldWithBrowseButton.setText(path);
  125. }
  126. public String getRepositoryUrl() {
  127. return myRepositoryUrlRadioButton.isSelected() ? myRepositoryUrlField.getText() : null;
  128. }
  129. }