下面列出了怎么用org.eclipse.ui.navigator.CommonDropAdapter的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Performs a drop using the FileTransfer transfer type.
*/
private IStatus performFileDrop(final CommonDropAdapter anAdapter, final Object data) {
final int currentOperation = anAdapter.getCurrentOperation();
final MultiStatus problems =
new MultiStatus(PlatformUI.PLUGIN_ID, 0, WorkbenchNavigatorMessages.DropAdapter_problemImporting, null);
mergeStatus(problems,
validateTarget(anAdapter.getCurrentTarget(), anAdapter.getCurrentTransfer(), currentOperation));
final IContainer target = getActualTarget(ResourceManager.getResource(anAdapter.getCurrentTarget()));
final String[] names = (String[]) data;
// Run the import operation asynchronously.
// Otherwise the drag source (e.g., Windows Explorer) will be blocked
// while the operation executes. Fixes bug 16478.
Display.getCurrent().asyncExec(() -> {
getShell().forceActive();
new CopyFilesAndFoldersOperation(getShell()).copyOrLinkFiles(names, target, currentOperation);
});
return problems;
}
/**
* Performs a drop using the FileTransfer transfer type.
*/
private IStatus performFileDrop(final CommonDropAdapter anAdapter, Object data) {
final int currentOperation = anAdapter.getCurrentOperation();
MultiStatus problems = new MultiStatus(PlatformUI.PLUGIN_ID, 0,
WorkbenchNavigatorMessages.resources_ResourceDropAdapterAssistant_problemImporting, null);
mergeStatus(problems,
validateTarget(anAdapter.getCurrentTarget(), anAdapter
.getCurrentTransfer(), currentOperation));
final IContainer target = getActualTarget((IResource) anAdapter
.getCurrentTarget());
final String[] names = (String[]) data;
// Run the import operation asynchronously.
// Otherwise the drag source (e.g., Windows Explorer) will be blocked
// while the operation executes. Fixes bug 16478.
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
getShell().forceActive();
new CopyFilesAndFoldersOperation(getShell()).copyOrLinkFiles(names, target, currentOperation);
}
});
return problems;
}
/**
* Performs a drop using the FileTransfer transfer type.
*/
private IStatus performFileDrop(final CommonDropAdapter anAdapter, Object data) {
final int currentOperation = anAdapter.getCurrentOperation();
MultiStatus problems = new MultiStatus(PlatformUI.PLUGIN_ID, 0,
WorkbenchNavigatorMessages.resources_ResourceDropAdapterAssistant_problemImporting, null);
mergeStatus(problems,
validateTarget(anAdapter.getCurrentTarget(), anAdapter
.getCurrentTransfer(), currentOperation));
final IContainer target = getActualTarget((IResource) anAdapter
.getCurrentTarget());
final String[] names = (String[]) data;
// Run the import operation asynchronously.
// Otherwise the drag source (e.g., Windows Explorer) will be blocked
// while the operation executes. Fixes bug 16478.
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
getShell().forceActive();
new CopyFilesAndFoldersOperation(getShell()).copyOrLinkFiles(names, target, currentOperation);
}
});
return problems;
}
/**
* Performs a resource copy
*/
private IStatus performResourceCopy(CommonDropAdapter dropAdapter, Shell shell, IResource[] sources) {
MultiStatus problems = new MultiStatus(PlatformUI.PLUGIN_ID, 1,
WorkbenchNavigatorMessages.DropAdapter_problemsMoving, null);
mergeStatus(
problems,
validateTarget(getCurrentTarget(dropAdapter), dropAdapter.getCurrentTransfer(),
dropAdapter.getCurrentOperation()));
IContainer target = getActualTarget((IResource) getCurrentTarget(dropAdapter));
CopyFilesAndFoldersOperation operation = new CopyFilesAndFoldersOperation(shell);
IResource[] copiedResources = operation.copyResources(sources, target);
if (copiedResources.length > 0) {
PythonPathHelper.updatePyPath(copiedResources, target, PythonPathHelper.OPERATION_COPY);
}
return problems;
}
/**
* Performs a drop using the FileTransfer transfer type.
*/
private IStatus performFileDrop(CommonDropAdapter anAdapter, Object data) {
data = getActual(data);
MultiStatus problems = new MultiStatus(PlatformUI.PLUGIN_ID, 0,
WorkbenchNavigatorMessages.DropAdapter_problemImporting, null);
mergeStatus(
problems,
validateTarget(getCurrentTarget(anAdapter), anAdapter.getCurrentTransfer(),
anAdapter.getCurrentOperation()));
final IContainer target = getActualTarget((IResource) getCurrentTarget(anAdapter));
final String[] names = (String[]) data;
// Run the import operation asynchronously.
// Otherwise the drag source (e.g., Windows Explorer) will be blocked
// while the operation executes. Fixes bug 16478.
Display.getCurrent().asyncExec(new Runnable() {
@Override
public void run() {
getShell().forceActive();
CopyFilesAndFoldersOperation operation = new CopyFilesAndFoldersOperation(getShell());
operation.copyFiles(names, target);
}
});
return problems;
}
@Override
protected void initDragAndDrop() {
int operations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
CommonDragAdapter dragAdapter = createDragAdapter();
addDragSupport(operations, dragAdapter.getSupportedDragTransfers(),
dragAdapter);
CommonDropAdapter dropAdapter = createDropAdapter();
addDropSupport(operations, dropAdapter.getSupportedDropTransfers(),
dropAdapter);
// Set the drop adaptor of the PyDev content service instead of the standard one,
// which shouldn't be used for drop policies.
NavigatorDnDService dnd = (NavigatorDnDService) pyContentService.getDnDService();
dnd.setDropAdaptor(dropAdapter);
}
private IStatus performProjectCopy(final CommonDropAdapter aDropAdapter, final Shell shell,
final IResource[] resources) {
ResourceManager.setSelectedFolder(aDropAdapter.getCurrentTarget());
for (final IResource resource : resources) {
final CopyProjectOperation operation = new CopyProjectOperation(shell);
operation.copyProject((IProject) resource);
}
return null;
}
@Override
public IStatus handleDrop(final CommonDropAdapter adapter, final DropTargetEvent event, final Object target) {
if (FileTransfer.getInstance().isSupportedType(event.currentDataType)) {
final String[] files = (String[]) event.data;
if (files != null && files.length > 0) {
PasteAction.handlePaste(files);
return Status.OK_STATUS;
}
} else if (ResourceTransfer.getInstance().isSupportedType(event.currentDataType)) {
}
return Status.CANCEL_STATUS;
}
@Override
public IStatus handleDrop(CommonDropAdapter dropAdapter,
DropTargetEvent dropTargetEvent, Object target) {
Navigator navigator = (Navigator) PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage()
.findView(Navigator.ID);
DropTarget dropTarget = (DropTarget) dropTargetEvent.getSource();
INavigationElement<?> targetElement = (INavigationElement<?>) target;
if (dropTarget.getControl() == navigator.getCommonViewer().getTree())
doIt(dropTargetEvent, targetElement);
return null;
}
@Override
public IStatus handleDrop(CommonDropAdapter dropAdapter,
DropTargetEvent event, Object target) {
try {
// drop in folder
if (target instanceof IXdsFolderContainer ||
target instanceof IProject ||
target instanceof IContainer ||
(dropAdapter.getCurrentOperation() == DND.DROP_COPY && (
target instanceof IFile ||
target instanceof IXdsResource))) {
final Object data= event.data;
if (data == null) {
return Status.CANCEL_STATUS;
}
final IContainer destination= getDestination(target);
if (destination == null) {
return Status.CANCEL_STATUS;
}
IResource[] resources = null;
TransferData currentTransfer = dropAdapter.getCurrentTransfer();
final int dropOperation = dropAdapter.getCurrentOperation();
if (LocalSelectionTransfer.getTransfer().isSupportedType(
currentTransfer)) {
resources = getSelectedResources();
} else if (ResourceTransfer.getInstance().isSupportedType(
currentTransfer)) {
resources = (IResource[]) event.data;
}
if (FileTransfer.getInstance().isSupportedType(currentTransfer)) {
final String[] names = (String[]) data;
// Run the import operation asynchronously.
// Otherwise the drag source (e.g., Windows Explorer) will be blocked
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
getShell().forceActive();
CopyFilesAndFoldersOperation op= new CopyFilesAndFoldersOperation(getShell());
op.copyOrLinkFiles(names, destination, dropOperation);
}
});
} else if (event.detail == DND.DROP_COPY || event.detail == DND.DROP_LINK) {
return performResourceCopy(dropAdapter, getShell(), resources);
} else {
ReadOnlyStateChecker checker = new ReadOnlyStateChecker(
getShell(),
"Move Resource Action", //$NON-NLS-1$
"Move Resource Action");//$NON-NLS-1$
resources = checker.checkReadOnlyResources(resources);
MoveFilesAndFoldersOperation operation = new MoveFilesAndFoldersOperation(getShell());
operation.copyResources(resources, destination);
}
return Status.OK_STATUS;
}
}
finally {
// The drag source listener must not perform any operation
// since this drop adapter did the remove of the source even
// if we moved something.
event.detail= DND.DROP_NONE;
}
return Status.CANCEL_STATUS;
}
/**
* Performs a resource copy.
* Cloned from ResourceDropAdapterAssistant to support linked resources (bug 319405).
*/
private IStatus performResourceCopy(CommonDropAdapter dropAdapter,
Shell shell, IResource[] sources) {
IContainer target = getDestination(dropAdapter.getCurrentTarget());
if (target == null) {
return Status.CANCEL_STATUS;
}
boolean shouldLinkAutomatically = false;
if (target.isVirtual()) {
shouldLinkAutomatically = true;
for (int i = 0; i < sources.length; i++) {
if ((sources[i].getType() != IResource.FILE) && (sources[i].getLocation() != null)) {
// If the source is a folder, but the location is null (a
// broken link, for example),
// we still generate a link automatically (the best option).
shouldLinkAutomatically = false;
break;
}
}
}
CopyFilesAndFoldersOperation operation = new CopyFilesAndFoldersOperation(shell);
// if the target is a virtual folder and all sources are files, then
// automatically create links
if (shouldLinkAutomatically) {
operation.setCreateLinks(true);
operation.copyResources(sources, target);
} else {
boolean allSourceAreLinksOrVirtualFolders = true;
for (int i = 0; i < sources.length; i++) {
if (!sources[i].isVirtual() && !sources[i].isLinked()) {
allSourceAreLinksOrVirtualFolders = false;
break;
}
}
// if all sources are either links or groups, copy then normally,
// don't show the dialog
if (!allSourceAreLinksOrVirtualFolders) {
ImportTypeDialog dialog = new ImportTypeDialog(getShell(), dropAdapter.getCurrentOperation(), sources, target);
dialog.setResource(target);
if (dialog.open() == Window.OK) {
if (dialog.getSelection() == ImportTypeDialog.IMPORT_VIRTUAL_FOLDERS_AND_LINKS)
operation.setVirtualFolders(true);
if (dialog.getSelection() == ImportTypeDialog.IMPORT_LINK)
operation.setCreateLinks(true);
if (dialog.getVariable() != null)
operation.setRelativeVariable(dialog.getVariable());
operation.copyResources(sources, target);
} else
return Status.CANCEL_STATUS;
} else
operation.copyResources(sources, target);
}
return Status.OK_STATUS;
}
public IStatus handleDrop(CommonDropAdapter aDropAdapter,
DropTargetEvent aDropTargetEvent, Object aTarget) {
if (Policy.DEBUG_DND) {
System.out
.println("ResourceDropAdapterAssistant.handleDrop (begin)"); //$NON-NLS-1$
}
// alwaysOverwrite = false;
if (aTarget == null || aDropTargetEvent.data == null) {
return Status.CANCEL_STATUS;
}
IStatus status = null;
IResource[] resources = null;
TransferData currentTransfer = aDropAdapter.getCurrentTransfer();
if (LocalSelectionTransfer.getTransfer().isSupportedType(
currentTransfer)) {
resources = getSelectedResources();
} else if (ResourceTransfer.getInstance().isSupportedType(
currentTransfer)) {
resources = (IResource[]) aDropTargetEvent.data;
}
if (FileTransfer.getInstance().isSupportedType(currentTransfer)) {
status = performFileDrop(aDropAdapter, aDropTargetEvent.data);
} else if (resources != null && resources.length > 0) {
if ((aDropAdapter.getCurrentOperation() == DND.DROP_COPY)
|| (aDropAdapter.getCurrentOperation() == DND.DROP_LINK)) {
if (Policy.DEBUG_DND) {
System.out
.println("ResourceDropAdapterAssistant.handleDrop executing COPY."); //$NON-NLS-1$
}
status = performResourceCopy(aDropAdapter, getShell(),
resources);
} else {
if (Policy.DEBUG_DND) {
System.out
.println("ResourceDropAdapterAssistant.handleDrop executing MOVE."); //$NON-NLS-1$
}
status = performResourceMove(aDropAdapter, resources);
}
}
openError(status);
IContainer target = getActualTarget((IResource) aTarget);
if (target != null && target.isAccessible()) {
try {
target.refreshLocal(IResource.DEPTH_ONE, null);
} catch (CoreException e) {
}
}
return status;
}
/**
* Performs a resource copy
*/
private IStatus performResourceCopy(CommonDropAdapter dropAdapter,
Shell shell, IResource[] sources) {
MultiStatus problems = new MultiStatus(PlatformUI.PLUGIN_ID, 1,
WorkbenchNavigatorMessages.resources_ResourceDropAdapterAssistant_problemsMoving, null);
mergeStatus(problems, validateTarget(dropAdapter.getCurrentTarget(), dropAdapter.getCurrentTransfer(),
dropAdapter.getCurrentOperation()));
IContainer target = getActualTarget((IResource) dropAdapter.getCurrentTarget());
boolean shouldLinkAutomatically = false;
if (target.isVirtual()) {
shouldLinkAutomatically = true;
for (int i = 0; i < sources.length; i++) {
if ((sources[i].getType() != IResource.FILE) && (sources[i].getLocation() != null)) {
// If the source is a folder, but the location is null (a
// broken link, for example),
// we still generate a link automatically (the best option).
shouldLinkAutomatically = false;
break;
}
}
}
CopyFilesAndFoldersOperation operation = new CopyFilesAndFoldersOperation(shell);
// if the target is a virtual folder and all sources are files, then
// automatically create links
if (shouldLinkAutomatically) {
operation.setCreateLinks(true);
operation.copyResources(sources, target);
} else {
// boolean allSourceAreLinksOrVirtualFolders = true;
// for (int i = 0; i < sources.length; i++) {
// if (!sources[i].isVirtual() && !sources[i].isLinked()) {
// allSourceAreLinksOrVirtualFolders = false;
// break;
// }
// }
// // if all sources are either links or groups, copy then normally,
// // don't show the dialog
// if (!allSourceAreLinksOrVirtualFolders) {
// IPreferenceStore store= IDEWorkbenchPlugin.getDefault().getPreferenceStore();
// String dndPreference= store.getString(target.isVirtual() ? IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE : IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE);
//
// if (dndPreference.equals(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT)) {
// ImportTypeDialog dialog = new ImportTypeDialog(getShell(), dropAdapter.getCurrentOperation(), sources, target);
// dialog.setResource(target);
// if (dialog.open() == Window.OK) {
// if (dialog.getSelection() == ImportTypeDialog.IMPORT_VIRTUAL_FOLDERS_AND_LINKS)
// operation.setVirtualFolders(true);
// if (dialog.getSelection() == ImportTypeDialog.IMPORT_LINK)
// operation.setCreateLinks(true);
// if (dialog.getVariable() != null)
// operation.setRelativeVariable(dialog.getVariable());
// operation.copyResources(sources, target);
// } else
// return problems;
// }
// else
// operation.copyResources(sources, target);
// } else
operation.copyResources(sources, target);
}
return problems;
}
public IStatus handleDrop(CommonDropAdapter aDropAdapter,
DropTargetEvent aDropTargetEvent, Object aTarget) {
if (Policy.DEBUG_DND) {
System.out
.println("ResourceDropAdapterAssistant.handleDrop (begin)"); //$NON-NLS-1$
}
// alwaysOverwrite = false;
if (aTarget == null || aDropTargetEvent.data == null) {
return Status.CANCEL_STATUS;
}
IStatus status = null;
IResource[] resources = null;
TransferData currentTransfer = aDropAdapter.getCurrentTransfer();
if (LocalSelectionTransfer.getTransfer().isSupportedType(
currentTransfer)) {
resources = getSelectedResources();
} else if (ResourceTransfer.getInstance().isSupportedType(
currentTransfer)) {
resources = (IResource[]) aDropTargetEvent.data;
}
if (FileTransfer.getInstance().isSupportedType(currentTransfer)) {
status = performFileDrop(aDropAdapter, aDropTargetEvent.data);
} else if (resources != null && resources.length > 0) {
if ((aDropAdapter.getCurrentOperation() == DND.DROP_COPY)
|| (aDropAdapter.getCurrentOperation() == DND.DROP_LINK)) {
if (Policy.DEBUG_DND) {
System.out
.println("ResourceDropAdapterAssistant.handleDrop executing COPY."); //$NON-NLS-1$
}
status = performResourceCopy(aDropAdapter, getShell(),
resources);
} else {
if (Policy.DEBUG_DND) {
System.out
.println("ResourceDropAdapterAssistant.handleDrop executing MOVE."); //$NON-NLS-1$
}
status = performResourceMove(aDropAdapter, resources);
}
}
openError(status);
IContainer target = getActualTarget((IResource) aTarget);
if (target != null && target.isAccessible()) {
try {
target.refreshLocal(IResource.DEPTH_ONE, null);
} catch (CoreException e) {
}
}
return status;
}
/**
* Performs a resource copy
*/
private IStatus performResourceCopy(CommonDropAdapter dropAdapter,
Shell shell, IResource[] sources) {
MultiStatus problems = new MultiStatus(PlatformUI.PLUGIN_ID, 1,
WorkbenchNavigatorMessages.resources_ResourceDropAdapterAssistant_problemsMoving, null);
mergeStatus(problems, validateTarget(dropAdapter.getCurrentTarget(), dropAdapter.getCurrentTransfer(),
dropAdapter.getCurrentOperation()));
IContainer target = getActualTarget((IResource) dropAdapter.getCurrentTarget());
boolean shouldLinkAutomatically = false;
if (target.isVirtual()) {
shouldLinkAutomatically = true;
for (int i = 0; i < sources.length; i++) {
if ((sources[i].getType() != IResource.FILE) && (sources[i].getLocation() != null)) {
// If the source is a folder, but the location is null (a
// broken link, for example),
// we still generate a link automatically (the best option).
shouldLinkAutomatically = false;
break;
}
}
}
CopyFilesAndFoldersOperation operation = new CopyFilesAndFoldersOperation(shell);
// if the target is a virtual folder and all sources are files, then
// automatically create links
if (shouldLinkAutomatically) {
operation.setCreateLinks(true);
operation.copyResources(sources, target);
} else {
// boolean allSourceAreLinksOrVirtualFolders = true;
// for (int i = 0; i < sources.length; i++) {
// if (!sources[i].isVirtual() && !sources[i].isLinked()) {
// allSourceAreLinksOrVirtualFolders = false;
// break;
// }
// }
// // if all sources are either links or groups, copy then normally,
// // don't show the dialog
// if (!allSourceAreLinksOrVirtualFolders) {
// IPreferenceStore store= IDEWorkbenchPlugin.getDefault().getPreferenceStore();
// String dndPreference= store.getString(target.isVirtual() ? IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE : IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE);
//
// if (dndPreference.equals(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT)) {
// ImportTypeDialog dialog = new ImportTypeDialog(getShell(), dropAdapter.getCurrentOperation(), sources, target);
// dialog.setResource(target);
// if (dialog.open() == Window.OK) {
// if (dialog.getSelection() == ImportTypeDialog.IMPORT_VIRTUAL_FOLDERS_AND_LINKS)
// operation.setVirtualFolders(true);
// if (dialog.getSelection() == ImportTypeDialog.IMPORT_LINK)
// operation.setCreateLinks(true);
// if (dialog.getVariable() != null)
// operation.setRelativeVariable(dialog.getVariable());
// operation.copyResources(sources, target);
// } else
// return problems;
// }
// else
// operation.copyResources(sources, target);
// } else
operation.copyResources(sources, target);
}
return problems;
}
@Override
public IStatus handleDrop(CommonDropAdapter aDropAdapter, DropTargetEvent aDropTargetEvent, Object aTarget) {
// aTarget = getActual(aTarget);
if (DEBUG) {
System.out.println("ResourceDropAdapterAssistant.handleDrop (begin)"); //$NON-NLS-1$
}
// alwaysOverwrite = false;
if (getCurrentTarget(aDropAdapter) == null || aDropTargetEvent.data == null) {
return Status.CANCEL_STATUS;
}
IStatus status = null;
IResource[] resources = null;
TransferData currentTransfer = aDropAdapter.getCurrentTransfer();
if (LocalSelectionTransfer.getTransfer().isSupportedType(currentTransfer)) {
resources = getSelectedResources();
} else if (ResourceTransfer.getInstance().isSupportedType(currentTransfer)) {
resources = (IResource[]) aDropTargetEvent.data;
}
if (FileTransfer.getInstance().isSupportedType(currentTransfer)) {
status = performFileDrop(aDropAdapter, aDropTargetEvent.data);
} else if (resources != null && resources.length > 0) {
if (aDropAdapter.getCurrentOperation() == DND.DROP_COPY) {
if (DEBUG) {
System.out.println("ResourceDropAdapterAssistant.handleDrop executing COPY."); //$NON-NLS-1$
}
status = performResourceCopy(aDropAdapter, getShell(), resources);
} else {
if (DEBUG) {
System.out.println("ResourceDropAdapterAssistant.handleDrop executing MOVE."); //$NON-NLS-1$
}
status = performResourceMove(aDropAdapter, resources);
}
}
openError(status);
IContainer target = getActualTarget((IResource) getCurrentTarget(aDropAdapter));
if (target != null && target.isAccessible()) {
try {
target.refreshLocal(IResource.DEPTH_ONE, null);
} catch (CoreException e) {
}
}
return status;
}
private Object getCurrentTarget(CommonDropAdapter dropAdapter) {
return getActual(dropAdapter.getCurrentTarget());
}
@Override
public void setDropAdaptor(CommonDropAdapter da) {
super.setDropAdaptor(da);
pyDropAdapter = da;
}
@Override
protected CommonDropAdapter createDropAdapter() {
return new CommonDropAdapter(pyContentService, this);
}
/**
* Made public for testing purposes.
*
* <p>
* {@inheritDoc}
*/
@Override
@VisibleForTesting
public CommonDropAdapter getCommonDropAdapter() {
return super.getCommonDropAdapter();
}