Remove GitShowAllSubmittedFilesAction, use ShowAllAffectedGenericAction
[idea/community.git] / plugins / git4idea / src / git4idea / ui / GitReferenceValidator.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 git4idea.ui;
17
18 import com.intellij.openapi.project.Project;
19 import com.intellij.openapi.vcs.VcsException;
20 import com.intellij.openapi.vfs.VirtualFile;
21 import com.intellij.ui.DocumentAdapter;
22 import git4idea.GitRevisionNumber;
23 import git4idea.GitUtil;
24 import git4idea.util.GitUIUtil;
25
26 import javax.swing.*;
27 import javax.swing.event.DocumentEvent;
28 import java.awt.event.ActionEvent;
29 import java.awt.event.ActionListener;
30
31 /**
32  * The class setups validation for references in the text fields.
33  */
34 public class GitReferenceValidator {
35   /**
36    * The result of last validation
37    */
38   private boolean myLastResult;
39   /**
40    * The text that was used for last validation
41    */
42   private String myLastResultText = null;
43   /**
44    * The project
45    */
46   private final Project myProject;
47   /**
48    * The git root combobox
49    */
50   private final JComboBox myGitRoot;
51   /**
52    * The text field that contains object reference
53    */
54   private final JTextField myTextField;
55   /**
56    * The button that initiates validation action
57    */
58   private final JButton myButton;
59
60   /**
61    * A constructor from fields
62    *
63    * @param project       the project to use
64    * @param gitRoot       the git root directory
65    * @param textField     the text field that contains object reference
66    * @param button        the button that initiates validation action
67    * @param statusChanged the action that is invoked when validation status changed
68    */
69   public GitReferenceValidator(final Project project,
70                                final JComboBox gitRoot,
71                                final JTextField textField,
72                                final JButton button,
73                                final Runnable statusChanged) {
74     myProject = project;
75     myGitRoot = gitRoot;
76     myTextField = textField;
77     myButton = button;
78     myGitRoot.addActionListener(new ActionListener() {
79       public void actionPerformed(final ActionEvent e) {
80         myLastResult = false;
81         myLastResultText = null;
82       }
83     });
84     myTextField.getDocument().addDocumentListener(new DocumentAdapter() {
85       protected void textChanged(final DocumentEvent e) {
86         // note that checkOkButton is called in other listener
87         myButton.setEnabled(myTextField.getText().trim().length() != 0);
88       }
89     });
90     myButton.addActionListener(new ActionListener() {
91       public void actionPerformed(final ActionEvent e) {
92         final String revisionExpression = myTextField.getText();
93         myLastResultText = revisionExpression;
94         myLastResult = false;
95         try {
96           GitRevisionNumber revision = GitRevisionNumber.resolve(myProject, gitRoot(), revisionExpression);
97           GitUtil.showSubmittedFiles(myProject, revision.asString(), gitRoot(), false, false);
98           myLastResult = true;
99         }
100         catch (VcsException ex) {
101           GitUIUtil.showOperationError(myProject, ex, "Validating revision: " + revisionExpression);
102         }
103         if (statusChanged != null) {
104           statusChanged.run();
105         }
106       }
107     });
108     myButton.setEnabled(myTextField.getText().length() != 0);
109   }
110
111   /**
112    * @return true if the reference is known to be invalid
113    */
114   public boolean isInvalid() {
115     final String revisionExpression = myTextField.getText();
116     return revisionExpression.equals(myLastResultText) && !myLastResult;
117   }
118
119   /**
120    * @return currently selected git root
121    */
122   private VirtualFile gitRoot() {
123     return (VirtualFile)myGitRoot.getSelectedItem();
124   }
125 }