EA-60956 - assert: DocumentImpl.doRemoveDocumentListener
[idea/community.git] / plugins / svn4idea / src / org / jetbrains / idea / svn / update / SvnIntegrateRootOptionsPanel.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.idea.svn.update;
17
18 import com.intellij.openapi.options.ConfigurationException;
19 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
20 import com.intellij.openapi.vcs.FilePath;
21 import org.jetbrains.idea.svn.SvnBundle;
22 import org.jetbrains.idea.svn.SvnConfiguration;
23 import org.jetbrains.idea.svn.SvnVcs;
24 import org.jetbrains.idea.svn.dialogs.SelectLocationDialog;
25
26 import javax.swing.*;
27 import java.awt.event.ActionEvent;
28 import java.awt.event.ActionListener;
29
30 public class SvnIntegrateRootOptionsPanel implements SvnPanel{
31   private TextFieldWithBrowseButton myMergeText1;
32   private TextFieldWithBrowseButton myMergeText2;
33
34   private JPanel myPanel;
35   private final FilePath myRoot;
36   private final SvnVcs myVcs;
37   private SvnRevisionPanel myRevision2;
38   private SvnRevisionPanel myRevision1;
39   private JLabel myUrlLabel1;
40
41   public SvnIntegrateRootOptionsPanel(final SvnVcs vcs, FilePath root) {
42     myRoot = root;
43     myVcs = vcs;
44
45     //myPanel.setMinimumSize(new Dimension(670, 70));
46     myMergeText1.setEditable(true);
47
48     myUrlLabel1.setLabelFor(myMergeText1);
49
50     myMergeText2.setEditable(true);
51
52     myMergeText1.addActionListener(new ActionListener() {
53       public void actionPerformed(ActionEvent e) {
54         chooseUrl(myMergeText1, vcs);
55       }
56     });
57     myMergeText2.addActionListener(new ActionListener() {
58       public void actionPerformed(ActionEvent e) {
59         chooseUrl2(vcs);
60       }
61     });
62
63     myRevision1.setProject(vcs.getProject());
64     myRevision2.setProject(vcs.getProject());
65
66     myRevision1.setRoot(myRoot.getVirtualFile());
67     myRevision2.setRoot(myRoot.getVirtualFile());
68
69     myRevision1.setUrlProvider(new SvnRevisionPanel.UrlProvider() {
70       public String getUrl() {
71         return myMergeText1.getText();
72       }
73     });
74
75     myRevision2.setUrlProvider(new SvnRevisionPanel.UrlProvider() {
76       public String getUrl() {
77         return myMergeText2.getText();
78       }
79     });
80
81   }
82
83   private boolean chooseUrl2(final SvnVcs vcs) {
84     return chooseUrl(myMergeText2, vcs);
85   }
86
87   private boolean chooseUrl(final TextFieldWithBrowseButton textField, final SvnVcs vcs) {
88     String url = textField.getText();
89     final String selectedUrl = SelectLocationDialog.selectLocation(vcs.getProject(), url);
90     if (selectedUrl != null) {
91       textField.setText(selectedUrl);
92       return true;
93     } else {
94       return false;
95     }
96   }
97
98   public void apply(SvnConfiguration conf) throws ConfigurationException {
99
100     if (myMergeText1.getText().trim().length() == 0) {
101       myMergeText1.getTextField().requestFocus();
102       throw new ConfigurationException(SvnBundle.message("source.url.could.not.be.empty.error.message"));
103     }
104
105     if (myMergeText2.getText().trim().length() == 0) {
106       myMergeText2.getTextField().requestFocus();
107       throw new ConfigurationException(SvnBundle.message("source.url.could.not.be.empty.error.message"));
108     }
109
110     if (myMergeText1.getText().equals(myMergeText2.getText()) && myRevision1.getRevisionText().equals(myRevision2.getRevisionText())) {
111       throw new ConfigurationException(SvnBundle.message("no.differences.between.sources.error.message"));
112     }
113
114     final MergeRootInfo rootInfo = conf.getMergeRootInfo(myRoot.getIOFile(), myVcs);
115     rootInfo.setUrl1(myMergeText1.getText());
116     rootInfo.setUrl2(myMergeText2.getText());
117     rootInfo.setRevision1(myRevision1.getRevision());
118     rootInfo.setRevision2(myRevision2.getRevision());
119
120   }
121
122   public boolean canApply() {
123     return !myMergeText1.getText().equals(myMergeText2.getText()) || !myRevision1.getRevisionText().equals(myRevision2.getRevisionText());
124   }
125
126   public JPanel getPanel() {
127     return myPanel;
128   }
129
130   public void reset(SvnConfiguration config) {
131     final MergeRootInfo rootInfo = config.getMergeRootInfo(myRoot.getIOFile(), myVcs);
132     myRevision1.setRevision(rootInfo.getRevision1());
133     myRevision2.setRevision(rootInfo.getRevision2());
134     myMergeText1.setText(rootInfo.getUrlString1());
135     myMergeText2.setText(rootInfo.getUrlString2());
136   }
137
138   public void setData(SvnRevisionPanel data) {
139   }
140
141   public void getData(SvnRevisionPanel data) {
142   }
143
144   public boolean isModified(SvnRevisionPanel data) {
145     return false;
146   }
147 }