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
;
19 import java
.io
.IOException
;
20 import java
.util
.ArrayList
;
21 import java
.util
.List
;
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;
33 final Transferable contents
= CopyPasteManager
.getInstance().getContents();
34 //noinspection unchecked
35 fileList
= (List
<File
>)contents
.getTransferData(DataFlavor
.javaFileListFlavor
);
37 catch (UnsupportedFlavorException e
) {
40 catch (IOException e
) {
43 List
<PsiElement
> elements
= new ArrayList
<PsiElement
>();
44 for (File file
: fileList
) {
45 final VirtualFile vFile
= LocalFileSystem
.getInstance().refreshAndFindFileByIoFile(file
);
47 final PsiManager instance
= PsiManager
.getInstance(project
);
48 PsiFileSystemItem item
= vFile
.isDirectory() ? instance
.findDirectory(vFile
) : instance
.findFile(vFile
);
54 if (elements
.size() > 0) {
55 final PsiDirectory dir
= ideView
.getOrChooseDirectory();
57 new CopyFilesOrDirectoriesHandler().doCopy(elements
.toArray(new PsiElement
[elements
.size()]), dir
);
62 public boolean isPastePossible(DataContext dataContext
) {
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;