blob: e050fb8db83204d2cdda94bc381d1e704d4d8261 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.cvsSupport2.actions;
import com.intellij.cvsSupport2.CvsUtil;
import com.intellij.cvsSupport2.actions.actionVisibility.CvsActionVisibility;
import com.intellij.cvsSupport2.actions.cvsContext.CvsContext;
import com.intellij.cvsSupport2.application.CvsEntriesManager;
import com.intellij.cvsSupport2.cvsstatuses.CvsStatusProvider;
import com.intellij.cvsSupport2.util.CvsVfsUtil;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.vcs.FileStatus;
import com.intellij.openapi.vcs.actions.VcsContext;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
/**
* author: lesya
*/
public abstract class ActionOnSelectedElement extends AbstractAction {
protected static File[] getAllSelectedFiles(VcsContext context) {
VirtualFile[] selectedFiles = context.getSelectedFiles();
File[] selectedIOFiles = context.getSelectedIOFiles();
ArrayList result = new ArrayList();
if (selectedFiles != null) {
for (int i = 0; i < selectedFiles.length; i++) {
result.add(CvsVfsUtil.getFileFor(selectedFiles[i]));
}
}
;
if (selectedIOFiles != null) ContainerUtil.addAll(result, selectedIOFiles);
return (File[])result.toArray(new File[result.size()]);
}
protected static CvsActionVisibility.Condition FILES_HAVE_PARENT_UNDER_CVS =
new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
return CvsUtil.filesHaveParentUnderCvs(getAllSelectedFiles(context));
}
};
protected final static CvsActionVisibility.Condition FILES_ARENT_UNDER_CVS =
new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
return CvsUtil.filesArentUnderCvs(getAllSelectedFiles(context));
}
};
public static final CvsActionVisibility.Condition FILES_ARE_UNDER_CVS =
new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
return CvsUtil.filesAreUnderCvs(getAllSelectedFiles(context));
}
};
public static final CvsActionVisibility.Condition FILES_EXIST_IN_CVS =
new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
return CvsUtil.filesExistInCvs(getAllSelectedFiles(context));
}
};
public static final CvsActionVisibility.Condition FILES_ARE_NOT_DELETED =
new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
return CvsUtil.filesAreNotDeleted(getAllSelectedFiles(context));
}
};
public static final CvsActionVisibility.Condition FILES_ARE_CHANGED = new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
VirtualFile[] selectedFiles = context.getSelectedFiles();
if (selectedFiles == null) return false;
for (int i = 0; i < selectedFiles.length; i++) {
VirtualFile selectedFile = selectedFiles[i];
if (CvsStatusProvider.getStatus(selectedFile) == FileStatus.NOT_CHANGED) {
return documentIsModified(selectedFile);
}
}
return true;
}
};
public static final CvsActionVisibility.Condition FILES_ARE_NOT_IGNORED = new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
VirtualFile[] selectedFiles = context.getSelectedFiles();
if (selectedFiles == null) return false;
final CvsEntriesManager entriesManager = CvsEntriesManager.getInstance();
for (VirtualFile selectedFile : selectedFiles) {
if (entriesManager.fileIsIgnored(selectedFile)) return false;
}
return true;
}
};
public static final CvsActionVisibility.Condition FILES_ARE_LOCALLY_ADDED = new CvsActionVisibility.Condition() {
public boolean isPerformedOn(CvsContext context) {
VirtualFile[] selectedFiles = context.getSelectedFiles();
if (selectedFiles == null) return false;
for (VirtualFile selectedFile : selectedFiles) {
if (!CvsUtil.fileIsLocallyAdded(selectedFile)) return false;
}
return true;
}
};
private static boolean documentIsModified(final VirtualFile file) {
final boolean[] result = new boolean[]{false};
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {
result[0] = FileDocumentManager.getInstance().isFileModified(file);
}
});
return result[0];
}
private final CvsActionVisibility myVisibility = new CvsActionVisibility();
public ActionOnSelectedElement(boolean startLvcsAction) {
super(startLvcsAction);
}
public ActionOnSelectedElement(boolean startLvcsAction, String name, Icon icon) {
super(startLvcsAction, name, icon);
}
public void update(AnActionEvent e) {
getVisibility().applyToEvent(e);
}
protected CvsActionVisibility getVisibility() {
return myVisibility;
}
}