fix SafeDeleteTest
[idea/community.git] / plugins / hg4idea / src / org / zmlx / hg4idea / ui / HgPushDialog.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.project.Project;
16 import com.intellij.openapi.ui.DialogWrapper;
17 import com.intellij.openapi.vfs.VirtualFile;
18 import org.apache.commons.lang.StringUtils;
19 import org.zmlx.hg4idea.command.HgShowConfigCommand;
20
21 import javax.swing.*;
22 import javax.swing.event.ChangeEvent;
23 import javax.swing.event.ChangeListener;
24 import javax.swing.event.DocumentEvent;
25 import javax.swing.event.DocumentListener;
26 import java.awt.event.ActionEvent;
27 import java.awt.event.ActionListener;
28 import java.util.Collection;
29
30 public class HgPushDialog extends DialogWrapper {
31
32   private final Project project;
33
34   private JPanel contentPanel;
35   private JTextField repositoryTxt;
36   private JCheckBox revisionCbx;
37   private JTextField revisionTxt;
38   private HgRepositorySelectorComponent hgRepositorySelectorComponent;
39
40   public HgPushDialog(Project project) {
41     super(project, false);
42     this.project = project;
43     hgRepositorySelectorComponent.setTitle("Select repository to push from");
44     hgRepositorySelectorComponent.addActionListener(new ActionListener() {
45       public void actionPerformed(ActionEvent e) {
46         updateRepository();
47       }
48     });
49
50     revisionCbx.addChangeListener(new ChangeListener() {
51       public void stateChanged(ChangeEvent e) {
52         update();
53       }
54     });
55
56     DocumentListener documentListener = new DocumentListener() {
57       public void insertUpdate(DocumentEvent e) {
58         update();
59       }
60
61       public void removeUpdate(DocumentEvent e) {
62         update();
63       }
64
65       public void changedUpdate(DocumentEvent e) {
66         update();
67       }
68     };
69
70     repositoryTxt.getDocument().addDocumentListener(documentListener);
71     revisionTxt.getDocument().addDocumentListener(documentListener);
72
73     setTitle("Push");
74     init();
75   }
76
77   public void setRoots(Collection<VirtualFile> repos) {
78     hgRepositorySelectorComponent.setRoots(repos);
79     updateRepository();
80   }
81
82   public VirtualFile getRepository() {
83     return hgRepositorySelectorComponent.getRepository();
84   }
85
86   public String getTarget() {
87     return repositoryTxt.getText();
88   }
89
90   public boolean isRevisionSelected() {
91     return revisionCbx.isSelected();
92   }
93
94   public String getRevision() {
95     return revisionTxt.getText();
96   }
97
98   private void updateRepository() {
99     VirtualFile repo = hgRepositorySelectorComponent.getRepository();
100     HgShowConfigCommand configCommand = new HgShowConfigCommand(project);
101     String defaultPath = configCommand.getDefaultPath(repo);
102     repositoryTxt.setText(defaultPath);
103     update();
104   }
105
106   protected JComponent createCenterPanel() {
107     return contentPanel;
108   }
109
110   private void update() {
111     setOKActionEnabled(validateOptions());
112     revisionTxt.setEnabled(revisionCbx.isSelected());
113   }
114
115   private boolean validateOptions() {
116     return StringUtils.isNotBlank(repositoryTxt.getText())
117       && !(revisionCbx.isSelected() && StringUtils.isBlank(revisionTxt.getText()));
118   }
119
120 }