files copied from native file manager can be pasted into IDEA (part of IDEADEV-40725)
[fedora-idea.git] / platform / lang-impl / src / com / intellij / ide / FileListPasteProvider.java
blobde610642ae52cd5334b631ae66b60d301614cc97
1 package com.intellij.ide;
3 import com.intellij.openapi.actionSystem.DataContext;
4 import com.intellij.openapi.actionSystem.LangDataKeys;
5 import com.intellij.openapi.ide.CopyPasteManager;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.vfs.LocalFileSystem;
8 import com.intellij.openapi.vfs.VirtualFile;
9 import com.intellij.psi.PsiDirectory;
10 import com.intellij.psi.PsiElement;
11 import com.intellij.psi.PsiFileSystemItem;
12 import com.intellij.psi.PsiManager;
13 import com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler;
15 import java.awt.datatransfer.DataFlavor;
16 import java.awt.datatransfer.Transferable;
17 import java.awt.datatransfer.UnsupportedFlavorException;
18 import java.io.File;
19 import java.io.IOException;
20 import java.util.ArrayList;
21 import java.util.List;
23 /**
24 * @author yole
26 public class FileListPasteProvider implements PasteProvider {
27 public void performPaste(DataContext dataContext) {
28 Project project = LangDataKeys.PROJECT.getData(dataContext);
29 final IdeView ideView = LangDataKeys.IDE_VIEW.getData(dataContext);
30 if (project == null || ideView == null) return;
31 List<File> fileList;
32 try {
33 final Transferable contents = CopyPasteManager.getInstance().getContents();
34 //noinspection unchecked
35 fileList = (List<File>)contents.getTransferData(DataFlavor.javaFileListFlavor);
37 catch (UnsupportedFlavorException e) {
38 return;
40 catch (IOException e) {
41 return;
43 List<PsiElement> elements = new ArrayList<PsiElement>();
44 for (File file : fileList) {
45 final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file);
46 if (vFile != null) {
47 final PsiManager instance = PsiManager.getInstance(project);
48 PsiFileSystemItem item = vFile.isDirectory() ? instance.findDirectory(vFile) : instance.findFile(vFile);
49 if (item != null) {
50 elements.add(item);
54 if (elements.size() > 0) {
55 final PsiDirectory dir = ideView.getOrChooseDirectory();
56 if (dir != null) {
57 new CopyFilesOrDirectoriesHandler().doCopy(elements.toArray(new PsiElement[elements.size()]), dir);
62 public boolean isPastePossible(DataContext dataContext) {
63 return true;
66 public boolean isPasteEnabled(DataContext dataContext) {
67 final Transferable contents = CopyPasteManager.getInstance().getContents();
68 final IdeView ideView = LangDataKeys.IDE_VIEW.getData(dataContext);
69 return contents.isDataFlavorSupported(DataFlavor.javaFileListFlavor) && ideView != null;