2 * Copyright 2000-2009 JetBrains s.r.o.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package com
.intellij
.cvsSupport2
.actions
;
18 import com
.intellij
.cvsSupport2
.CvsUtil
;
19 import com
.intellij
.cvsSupport2
.actions
.actionVisibility
.CvsActionVisibility
;
20 import com
.intellij
.cvsSupport2
.actions
.cvsContext
.CvsContext
;
21 import com
.intellij
.cvsSupport2
.application
.CvsEntriesManager
;
22 import com
.intellij
.cvsSupport2
.cvsstatuses
.CvsStatusProvider
;
23 import com
.intellij
.cvsSupport2
.util
.CvsVfsUtil
;
24 import com
.intellij
.openapi
.actionSystem
.AnActionEvent
;
25 import com
.intellij
.openapi
.application
.ApplicationManager
;
26 import com
.intellij
.openapi
.editor
.Document
;
27 import com
.intellij
.openapi
.fileEditor
.FileDocumentManager
;
28 import com
.intellij
.openapi
.vcs
.FileStatus
;
29 import com
.intellij
.openapi
.vcs
.actions
.VcsContext
;
30 import com
.intellij
.openapi
.vfs
.VirtualFile
;
34 import java
.util
.ArrayList
;
35 import java
.util
.Arrays
;
41 public abstract class ActionOnSelectedElement
extends AbstractAction
{
43 protected static File
[] getAllSelectedFiles(VcsContext context
) {
44 VirtualFile
[] selectedFiles
= context
.getSelectedFiles();
45 File
[] selectedIOFiles
= context
.getSelectedIOFiles();
46 ArrayList result
= new ArrayList();
47 if (selectedFiles
!= null) {
48 for (int i
= 0; i
< selectedFiles
.length
; i
++) {
49 result
.add(CvsVfsUtil
.getFileFor(selectedFiles
[i
]));
53 if (selectedIOFiles
!= null) result
.addAll(Arrays
.asList(selectedIOFiles
));
54 return (File
[])result
.toArray(new File
[result
.size()]);
57 protected static CvsActionVisibility
.Condition FILES_HAVE_PARENT_UNDER_CVS
=
58 new CvsActionVisibility
.Condition() {
59 public boolean isPerformedOn(CvsContext context
) {
60 return CvsUtil
.filesHaveParentUnderCvs(getAllSelectedFiles(context
));
64 protected static CvsActionVisibility
.Condition FILES_ARENT_UNDER_CVS
=
65 new CvsActionVisibility
.Condition() {
66 public boolean isPerformedOn(CvsContext context
) {
67 return CvsUtil
.filesArentUnderCvs(getAllSelectedFiles(context
));
71 public static CvsActionVisibility
.Condition FILES_ARE_UNDER_CVS
=
72 new CvsActionVisibility
.Condition() {
73 public boolean isPerformedOn(CvsContext context
) {
74 return CvsUtil
.filesAreUnderCvs(getAllSelectedFiles(context
));
78 public static CvsActionVisibility
.Condition FILES_EXIST_IN_CVS
=
79 new CvsActionVisibility
.Condition() {
80 public boolean isPerformedOn(CvsContext context
) {
81 return CvsUtil
.filesExistInCvs(getAllSelectedFiles(context
));
85 public static CvsActionVisibility
.Condition FILES_ARE_NOT_DELETED
=
86 new CvsActionVisibility
.Condition() {
87 public boolean isPerformedOn(CvsContext context
) {
88 return CvsUtil
.filesAreNotDeleted(getAllSelectedFiles(context
));
92 public static final CvsActionVisibility
.Condition FILES_ARE_CHANGED
= new CvsActionVisibility
.Condition() {
93 public boolean isPerformedOn(CvsContext context
) {
94 VirtualFile
[] selectedFiles
= context
.getSelectedFiles();
95 if (selectedFiles
== null) return false;
96 for (int i
= 0; i
< selectedFiles
.length
; i
++) {
97 VirtualFile selectedFile
= selectedFiles
[i
];
98 if (CvsStatusProvider
.getStatus(selectedFile
) == FileStatus
.NOT_CHANGED
) {
99 return documentIsModified(selectedFile
);
106 public static final CvsActionVisibility
.Condition FILES_ARE_NOT_IGNORED
= new CvsActionVisibility
.Condition() {
107 public boolean isPerformedOn(CvsContext context
) {
108 VirtualFile
[] selectedFiles
= context
.getSelectedFiles();
109 if (selectedFiles
== null) return false;
110 final CvsEntriesManager entriesManager
= CvsEntriesManager
.getInstance();
111 for (VirtualFile selectedFile
: selectedFiles
) {
112 if (entriesManager
.fileIsIgnored(selectedFile
)) return false;
118 public static final CvsActionVisibility
.Condition FILES_ARE_LOCALLY_ADDED
= new CvsActionVisibility
.Condition() {
119 public boolean isPerformedOn(CvsContext context
) {
120 VirtualFile
[] selectedFiles
= context
.getSelectedFiles();
121 if (selectedFiles
== null) return false;
122 for (VirtualFile selectedFile
: selectedFiles
) {
123 if (!CvsUtil
.fileIsLocallyAdded(selectedFile
)) return false;
130 private static boolean documentIsModified(final VirtualFile file
) {
131 final boolean[] result
= new boolean[]{false};
132 ApplicationManager
.getApplication().runReadAction(new Runnable() {
134 Document document
= FileDocumentManager
.getInstance().getCachedDocument(file
);
135 if (document
== null) {
139 result
[0] = document
.getModificationStamp() != file
.getModificationStamp();
147 private final CvsActionVisibility myVisibility
= new CvsActionVisibility();
149 public ActionOnSelectedElement(boolean startLvcsAction
) {
150 super(startLvcsAction
);
153 public ActionOnSelectedElement(boolean startLvcsAction
, String name
, Icon icon
) {
154 super(startLvcsAction
, name
, icon
);
158 public void update(AnActionEvent e
) {
159 getVisibility().applyToEvent(e
);
162 protected CvsActionVisibility
getVisibility() {