PageRenderTime 49ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/src/org/bitbucket/connectors/jetbrains/tasks/BitbucketIssueRepositoryEditor.java

https://bitbucket.org/atlassian/jetbrains-bitbucket-connector/
Java | 129 lines | 106 code | 23 blank | 0 comment | 17 complexity | 5fdb499b9d7c0988379d68e67873b796 MD5 | raw file
  1. package org.bitbucket.connectors.jetbrains.tasks;
  2. import com.intellij.ui.ListCellRendererWrapper;
  3. import com.intellij.openapi.diagnostic.Logger;
  4. import com.intellij.openapi.project.Project;
  5. import com.intellij.tasks.config.BaseRepositoryEditor;
  6. import com.intellij.util.ArrayUtil;
  7. import com.intellij.util.Consumer;
  8. import org.bitbucket.connectors.jetbrains.BitbucketSettings;
  9. import org.bitbucket.connectors.jetbrains.BitbucketUtil;
  10. import org.bitbucket.connectors.jetbrains.RepositoryInfo;
  11. import org.bitbucket.connectors.jetbrains.ui.BitbucketBundle;
  12. import javax.swing.*;
  13. import java.awt.*;
  14. import java.awt.event.ItemEvent;
  15. import java.awt.event.ItemListener;
  16. import java.lang.reflect.InvocationTargetException;
  17. import java.util.Collections;
  18. public class BitbucketIssueRepositoryEditor extends BaseRepositoryEditor<BitbucketIssueRepository> {
  19. private static final Logger log =
  20. Logger.getInstance("#org.bitbucket.connectors.jetbrains.tasks.BitbucketIssueRepository");
  21. private JComboBox mySelectRepositoryComboBox;
  22. private JPanel bitbucketCustomPanel;
  23. public BitbucketIssueRepositoryEditor(final Project project, final BitbucketIssueRepository repository,
  24. Consumer<BitbucketIssueRepository> changeListener) {
  25. super(project, repository, changeListener);
  26. myUrlLabel.setVisible(false);
  27. myURLText.setVisible(false);
  28. myPasswordLabel.setVisible(false);
  29. myPasswordText.setVisible(false);
  30. myUserNameText.setEditable(false);
  31. myUserNameText.setText(BitbucketSettings.getInstance().getLogin());
  32. myPasswordText.setText(BitbucketSettings.getInstance().getPassword());
  33. if (!SwingUtilities.isEventDispatchThread()) try {
  34. SwingUtilities.invokeAndWait(new Runnable() {
  35. public void run() {
  36. setupUI(project, repository);
  37. }
  38. });
  39. } catch (InterruptedException e) {
  40. log.info(e);
  41. } catch (InvocationTargetException e) {
  42. log.info(e);
  43. }
  44. else setupUI(project, repository);
  45. }
  46. protected JComponent createCustomPanel() {
  47. bitbucketCustomPanel = new JPanel();
  48. return bitbucketCustomPanel;
  49. }
  50. private boolean setupUI(Project project, BitbucketIssueRepository repository) {
  51. java.util.List<RepositoryInfo> repos = BitbucketUtil.getRepositories(project, false);
  52. if (repos == null || repos.size() == 0) {
  53. bitbucketCustomPanel.add(new JLabel(BitbucketBundle.message("no-repos-available")), BorderLayout.CENTER);
  54. mySelectRepositoryComboBox = null;
  55. return true;
  56. }
  57. Collections.sort(repos);
  58. mySelectRepositoryComboBox = new JComboBox(ArrayUtil.toObjectArray(repos));
  59. mySelectRepositoryComboBox
  60. .setRenderer(new ListCellRendererWrapper<RepositoryInfo>() {
  61. public void customize(JList list, RepositoryInfo value, int index, boolean selected,
  62. boolean cellHasFocus) {
  63. if (value == null) return;
  64. setText(value.getOwner() + "/" + value.getName());
  65. }
  66. });
  67. for (int i = 0; i < mySelectRepositoryComboBox.getItemCount(); i++) {
  68. RepositoryInfo r = (RepositoryInfo) mySelectRepositoryComboBox.getItemAt(i);
  69. if (r == null) continue;
  70. log.debug(r.toString());
  71. if (r.getOwner().equals(repository.getRepositoryOwner()) && r.getSlug().equals(repository.getRepositoryName())) {
  72. mySelectRepositoryComboBox.setSelectedIndex(i);
  73. break;
  74. }
  75. }
  76. if (mySelectRepositoryComboBox.getSelectedIndex() == -1) {
  77. mySelectRepositoryComboBox.setSelectedIndex(0);
  78. apply();
  79. }
  80. mySelectRepositoryComboBox.addItemListener(new ItemListener() {
  81. public void itemStateChanged(ItemEvent e) {
  82. apply();
  83. }
  84. });
  85. bitbucketCustomPanel.add(mySelectRepositoryComboBox, BorderLayout.CENTER);
  86. bitbucketCustomPanel.add(new JLabel(BitbucketBundle.message("select-task-repository"), SwingConstants.RIGHT) {
  87. @Override
  88. public Dimension getPreferredSize() {
  89. final Dimension oldSize = super.getPreferredSize();
  90. final Dimension size = mySelectRepositoryComboBox.getPreferredSize();
  91. return new Dimension(oldSize.width, size.height);
  92. }
  93. }, BorderLayout.CENTER);
  94. bitbucketCustomPanel.doLayout();
  95. return false;
  96. }
  97. @Override
  98. public void apply() {
  99. if (mySelectRepositoryComboBox != null) {
  100. final RepositoryInfo info = ((RepositoryInfo) mySelectRepositoryComboBox.getSelectedItem());
  101. myRepository.setRepositoryName(info.getSlug());
  102. myRepository.setRepositoryOwner(info.getOwner());
  103. }
  104. super.apply();
  105. }
  106. }