update copyright
[fedora-idea.git] / plugins / cvs / cvs-plugin / src / com / intellij / cvsSupport2 / actions / ActionOnSelectedElement.java
blob616a9baa0102bb7d5cc070f8739ff4e26f5c48fb
1 /*
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;
32 import javax.swing.*;
33 import java.io.File;
34 import java.util.ArrayList;
35 import java.util.Arrays;
37 /**
38 * author: lesya
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);
102 return true;
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;
114 return true;
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;
125 return true;
130 private static boolean documentIsModified(final VirtualFile file) {
131 final boolean[] result = new boolean[]{false};
132 ApplicationManager.getApplication().runReadAction(new Runnable() {
133 public void run() {
134 Document document = FileDocumentManager.getInstance().getCachedDocument(file);
135 if (document == null) {
136 result[0] = false;
138 else {
139 result[0] = document.getModificationStamp() != file.getModificationStamp();
143 return result[0];
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() {
163 return myVisibility;