From 85ac2a8d99324e25748266ccf2fb3785063b15cd Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 1 Aug 2013 19:45:53 +0400 Subject: [PATCH] move TransferableWrapper to platforrm-impl to re-use ProjectViewDropTarget functionality (moved to FileCopyPasteUtil) --- .../ide/favoritesTreeView/FavoritesPanel.java | 2 +- .../ide/hierarchy/HierarchyBrowserBaseEx.java | 2 +- .../ide/navigationToolbar/NavBarPanel.java | 2 +- .../impl/ProjectViewDropTarget.java | 20 +++-------- .../intellij/ide/dnd/FileCopyPasteUtil.java | 34 +++++++++++++++++++ .../ide/dnd}/TransferableWrapper.java | 3 +- 6 files changed, 43 insertions(+), 20 deletions(-) rename platform/{lang-impl/src/com/intellij/ide/projectView/impl => platform-impl/src/com/intellij/ide/dnd}/TransferableWrapper.java (90%) diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesPanel.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesPanel.java index 586516b92cf3..0f996a61d060 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesPanel.java @@ -17,7 +17,7 @@ package com.intellij.ide.favoritesTreeView; import com.intellij.ide.dnd.*; import com.intellij.ide.dnd.aware.DnDAwareTree; -import com.intellij.ide.projectView.impl.TransferableWrapper; +import com.intellij.ide.dnd.TransferableWrapper; import com.intellij.ide.util.treeView.AbstractTreeBuilder; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.openapi.project.Project; diff --git a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java index a8c3d162f504..55214fc245d6 100644 --- a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java +++ b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java @@ -27,7 +27,7 @@ import com.intellij.ide.dnd.DnDManager; import com.intellij.ide.dnd.DnDSource; import com.intellij.ide.dnd.aware.DnDAwareTree; import com.intellij.ide.projectView.impl.ProjectViewTree; -import com.intellij.ide.projectView.impl.TransferableWrapper; +import com.intellij.ide.dnd.TransferableWrapper; import com.intellij.ide.util.scopeChooser.EditScopesDialog; import com.intellij.ide.util.treeView.NodeDescriptor; import com.intellij.openapi.actionSystem.*; diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java index 0286a4fa0e03..85c218157da3 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java @@ -28,7 +28,7 @@ import com.intellij.ide.navigationToolbar.ui.NavBarUIManager; import com.intellij.ide.projectView.ProjectView; import com.intellij.ide.projectView.impl.AbstractProjectViewPane; import com.intellij.ide.projectView.impl.ProjectRootsUtil; -import com.intellij.ide.projectView.impl.TransferableWrapper; +import com.intellij.ide.dnd.TransferableWrapper; import com.intellij.ide.ui.UISettings; import com.intellij.ide.ui.customization.CustomActionsSchema; import com.intellij.ide.util.DeleteHandler; diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java index d6a2deb5365b..ce9de80aff35 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java @@ -19,6 +19,7 @@ import com.intellij.ide.DataManager; import com.intellij.ide.dnd.DnDEvent; import com.intellij.ide.dnd.DnDNativeTarget; import com.intellij.ide.dnd.FileCopyPasteUtil; +import com.intellij.ide.dnd.TransferableWrapper; import com.intellij.ide.projectView.impl.nodes.DropTargetNode; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; @@ -103,8 +104,8 @@ class ProjectViewDropTarget implements DnDNativeTarget { else { // it seems like it's not possible to obtain dragged items _before_ accepting _drop_ on Macs, so just skip this check if (!SystemInfo.isMac) { - final PsiFileSystemItem[] psiFiles = getPsiFiles(getFileListFromAttachedObject(attached)); - if (psiFiles == null) return false; + final PsiFileSystemItem[] psiFiles = getPsiFiles(FileCopyPasteUtil.getFileListFromAttachedObject(attached)); + if (psiFiles == null || psiFiles.length == 0) return false; if (!MoveHandler.isValidTarget(getPsiElement(targetNode), psiFiles)) return false; } } @@ -115,17 +116,6 @@ class ProjectViewDropTarget implements DnDNativeTarget { return false; } - @Nullable - private static List getFileListFromAttachedObject(Object attached) { - if (attached instanceof TransferableWrapper) { - return ((TransferableWrapper)attached).asFileList(); - } - else if (attached instanceof EventInfo) { - return FileCopyPasteUtil.getFileList(((EventInfo)attached).getTransferable()); - } - return null; - } - @Override public void drop(DnDEvent event) { final Object attached = event.getAttachedObject(); @@ -135,8 +125,8 @@ class ProjectViewDropTarget implements DnDNativeTarget { final int dropAction = event.getAction().getActionId(); if (sourceNodes == null) { if (FileCopyPasteUtil.isFileListFlavorSupported(event)) { - final List fileList = getFileListFromAttachedObject(attached); - if (fileList != null) { + List fileList = FileCopyPasteUtil.getFileListFromAttachedObject(attached); + if (!fileList.isEmpty()) { getDropHandler(dropAction).doDropFiles(fileList, targetNode); } } diff --git a/platform/platform-impl/src/com/intellij/ide/dnd/FileCopyPasteUtil.java b/platform/platform-impl/src/com/intellij/ide/dnd/FileCopyPasteUtil.java index 382c9736322e..57e152b33450 100644 --- a/platform/platform-impl/src/com/intellij/ide/dnd/FileCopyPasteUtil.java +++ b/platform/platform-impl/src/com/intellij/ide/dnd/FileCopyPasteUtil.java @@ -18,6 +18,8 @@ package com.intellij.ide.dnd; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -27,6 +29,8 @@ import java.awt.datatransfer.FlavorMap; import java.awt.datatransfer.SystemFlavorMap; import java.awt.datatransfer.Transferable; import java.io.File; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -115,4 +119,34 @@ public class FileCopyPasteUtil { return null; } + @NotNull + public static List getFileListFromAttachedObject(Object attached) { + List result; + if (attached instanceof TransferableWrapper) { + result = ((TransferableWrapper)attached).asFileList(); + } + else if (attached instanceof DnDNativeTarget.EventInfo) { + result = getFileList(((DnDNativeTarget.EventInfo)attached).getTransferable()); + } + else { + result = null; + } + return result == null? Collections.emptyList() : result; + } + + @NotNull + public static List getVirtualFileListFromAttachedObject(Object attached) { + List result; + List fileList = getFileListFromAttachedObject(attached); + if (fileList.isEmpty()) { + result = Collections.emptyList(); + } + else { + result = new ArrayList(fileList.size()); + for (File file : fileList) { + ContainerUtil.addIfNotNull(result, VfsUtil.findFileByIoFile(file, true)); + } + } + return result; + } } diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/TransferableWrapper.java b/platform/platform-impl/src/com/intellij/ide/dnd/TransferableWrapper.java similarity index 90% rename from platform/lang-impl/src/com/intellij/ide/projectView/impl/TransferableWrapper.java rename to platform/platform-impl/src/com/intellij/ide/dnd/TransferableWrapper.java index ec39b305f88a..0e7fc9883ad9 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/TransferableWrapper.java +++ b/platform/platform-impl/src/com/intellij/ide/dnd/TransferableWrapper.java @@ -13,9 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.ide.projectView.impl; +package com.intellij.ide.dnd; -import com.intellij.ide.dnd.FileFlavorProvider; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.Nullable;