2e70e4ab26b9a4341a4825950aec0d4298dc7235
[idea/community.git] / plugins / hg4idea / src / org / zmlx / hg4idea / ui / HgPullDialog.java
1 // Copyright 2008-2010 Victor Iacoban
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software distributed under
10 // the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 // either express or implied. See the License for the specific language governing permissions and
12 // limitations under the License.
13 package org.zmlx.hg4idea.ui;
14
15 import com.intellij.openapi.application.ApplicationManager;
16 import com.intellij.openapi.project.Project;
17 import com.intellij.openapi.ui.DialogWrapper;
18 import com.intellij.openapi.vfs.VirtualFile;
19 import org.apache.commons.lang.StringUtils;
20 import org.zmlx.hg4idea.command.HgShowConfigCommand;
21
22 import javax.swing.*;
23 import javax.swing.event.DocumentEvent;
24 import javax.swing.event.DocumentListener;
25 import java.awt.event.ActionEvent;
26 import java.awt.event.ActionListener;
27 import java.util.Collection;
28
29 public class HgPullDialog extends DialogWrapper {
30
31   private final Project project;
32   private HgRepositorySelectorComponent hgRepositorySelector;
33   private JTextField sourceTxt;
34   private JPanel mainPanel;
35
36   public HgPullDialog(Project project) {
37     super(project, false);
38     this.project = project;
39     hgRepositorySelector.setTitle("Select repository to pull changesets for");
40     hgRepositorySelector.addActionListener(new ActionListener() {
41       public void actionPerformed(ActionEvent e) {
42         onChangeRepository();
43       }
44     });
45     DocumentListener documentListener = new DocumentListener() {
46       public void insertUpdate(DocumentEvent e) {
47         onChangePullSource();
48       }
49
50       public void removeUpdate(DocumentEvent e) {
51         onChangePullSource();
52       }
53
54       public void changedUpdate(DocumentEvent e) {
55         onChangePullSource();
56       }
57     };
58     sourceTxt.getDocument().addDocumentListener(documentListener);
59     setTitle("Pull");
60     init();
61   }
62
63   public VirtualFile getRepository() {
64     return hgRepositorySelector.getRepository();
65   }
66
67   public String getSource() {
68     return sourceTxt.getText();
69   }
70
71   public void setRoots(Collection<VirtualFile> repos) {
72     hgRepositorySelector.setRoots(repos);
73     onChangeRepository();
74   }
75
76   protected JComponent createCenterPanel() {
77     return mainPanel;
78   }
79
80   @Override
81   protected String getHelpId() {
82     return "reference.mercurial.pull.dialog";
83   }
84
85   private void onChangeRepository() {
86     ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
87       @Override
88       public void run() {
89         VirtualFile repo = hgRepositorySelector.getRepository();
90         HgShowConfigCommand configCommand = new HgShowConfigCommand(project);
91         String defaultPath = configCommand.getDefaultPath(repo);
92         sourceTxt.setText(defaultPath);
93         onChangePullSource();
94       }
95     });
96   }
97
98   private void onChangePullSource() {
99     setOKActionEnabled(StringUtils.isNotBlank(sourceTxt.getText()));
100   }
101
102 }