diff options
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te')
7 files changed, 110 insertions, 94 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/CommonDnD.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/CommonDnD.java index b212938f5..ce23977a6 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/CommonDnD.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/CommonDnD.java @@ -12,7 +12,6 @@ package org.eclipse.tcf.te.tcf.filesystem.ui.internal.dnd; import static java.util.Arrays.asList; import java.io.File; -import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IStatus; @@ -115,80 +114,6 @@ public class CommonDnD implements IConfirmCallback { return status.isOK(); } -// private ICallback getCopyCallback(final TreeViewer viewer, final String[] files, final IFSTreeNode target) { -// return new Callback() { -// @Override -// protected void internalDone(Object caller, IStatus status) { -// // mstodo handle via notifications -// if (status.isOK()) { -// IOpExecutor executor = new JobExecutor(getSelectionCallback(viewer, files, target)); -// executor.execute(new OpRefresh(target)); -// } -// } -// }; -// } - -// private ICallback getMoveCallback(final TreeViewer viewer, final String[] files, final IFSTreeNode target) { -// return new Callback() { -// @Override -// protected void internalDone(Object caller, IStatus status) { -// if (status.isOK()) { -// for (String path : files) { -// File file = new File(path); -// if (!file.delete()) { -// } -// } - // mstodo handle via notifications -// if (successful) { -// IRuntimeModel model = ModelManager.getRuntimeModel(target.getPeerNode()); -// IOpExecutor executor = new JobExecutor(getSelectionCallback(viewer, files, target)); -// executor.execute(new OpRefresh(model.getRoot())); -// } -// } -// } -// }; -// } - -// ICallback getSelectionCallback(final TreeViewer viewer, final String[] paths, final IFSTreeNode target) { -// return new Callback() { -// @Override -// protected void internalDone(Object caller, IStatus status) { -// if(status.isOK()) { -// List<IFSTreeNode> nodes = new ArrayList<IFSTreeNode>(); -// IFSTreeNode[] children = target.getChildren(true); -// for (String path : paths) { -// File file = new File(path); -// String name = file.getName(); -// for (IFSTreeNode child : children) { -// if (name.equals(child.getName())) { -// nodes.add(child); -// break; -// } -// } -// } -// if (viewer != null) { -// updateViewer(viewer, target, nodes); -// } -// } -// } -// }; -// } - -// protected void updateViewer(final TreeViewer viewer, final IFSTreeNode target, final List<IFSTreeNode> nodes) { -// if (Display.getCurrent() != null) { -// viewer.refresh(target); -// IStructuredSelection selection = new StructuredSelection(nodes.toArray()); -// viewer.setSelection(selection, true); -// } -// else { -// PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable(){ -// @Override -// public void run() { -// updateViewer(viewer, target, nodes); -// }}); -// } -// } - /** * Perform the drop operation over dragged selection. * @@ -357,19 +282,6 @@ public class CommonDnD implements IConfirmCallback { anEvent.data = LocalSelectionTransfer.getTransfer().getSelection(); return true; } - else if (FileTransfer.getInstance().isSupportedType(anEvent.dataType)) { - IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection(); - List<IFSTreeNode> nodes = selection.toList(); - List<String> paths = new ArrayList<String>(); - for(IFSTreeNode node : nodes) { - File file = node.getCacheFile(); - if(file.exists()) { - paths.add(file.getAbsolutePath()); - } - } - if (!paths.isEmpty()) anEvent.data = paths.toArray(new String[paths.size()]); - return !paths.isEmpty(); - } return false; } } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/FSDragAdapterAssistant.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/FSDragAdapterAssistant.java index 9163a6a39..d0d9d74eb 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/FSDragAdapterAssistant.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/dnd/FSDragAdapterAssistant.java @@ -12,7 +12,6 @@ package org.eclipse.tcf.te.tcf.filesystem.ui.internal.dnd; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.dnd.DragSourceEvent; -import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.ui.navigator.CommonDragAdapterAssistant; @@ -46,7 +45,7 @@ public class FSDragAdapterAssistant extends CommonDragAdapterAssistant { */ @Override public Transfer[] getSupportedTransferTypes() { - return new Transfer[] {FileTransfer.getInstance()}; + return new Transfer[] {}; } /* diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/DownloadFilesHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/DownloadFilesHandler.java new file mode 100644 index 000000000..85f8e1717 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/DownloadFilesHandler.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved. + * This program and the accompanying materials are made available under the terms + * of the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.tcf.te.tcf.filesystem.ui.internal.handlers; + +import java.io.File; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.List; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.URIUtil; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osgi.service.datalocation.Location; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.tcf.te.tcf.filesystem.core.interfaces.runtime.IFSTreeNode; +import org.eclipse.tcf.te.tcf.filesystem.core.interfaces.runtime.IRuntimeModel; +import org.eclipse.tcf.te.tcf.filesystem.ui.activator.UIPlugin; +import org.eclipse.tcf.te.tcf.filesystem.ui.internal.operations.UiExecutor; +import org.eclipse.tcf.te.tcf.filesystem.ui.nls.Messages; +import org.eclipse.ui.handlers.HandlerUtil; +/** + * The handler that downloads the selected files or folders to a local destination folder. + */ +public class DownloadFilesHandler extends AbstractHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + Shell shell = HandlerUtil.getActiveShellChecked(event); + DirectoryDialog dlg = new DirectoryDialog(shell); + dlg.setFilterPath(getFilterPath()); + dlg.setText(Messages.DownloadFilesHandler_folderDlg_text); + dlg.setMessage(Messages.DownloadFilesHandler_folderDlg_message); + + String destination = dlg.open(); + if (destination == null) + return null; + + File destinationFile = new File(destination); + saveFilterPath(destinationFile); + + IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); + List<IFSTreeNode> nodes = selection.toList(); + IRuntimeModel peer = nodes.get(0).getRuntimeModel(); + UiExecutor.execute(peer.operationDownload(nodes, destinationFile, new MoveCopyCallback())); + return null; + } + + private String getFilterPath() { + String lastFolder = UIPlugin.getDefault().getDialogSettings().get(getClass().getName() + ".lastFolder"); //$NON-NLS-1$ + if (lastFolder != null) + return lastFolder; + Location loc = Platform.getInstanceLocation(); + if (loc != null) { + URL url = loc.getURL(); + try { + File file = URIUtil.toFile(url.toURI()); + if (file != null) + return file.getPath(); + } catch (URISyntaxException e) { + } + } + return null; + } + + private void saveFilterPath(File destinationFile) { + if (destinationFile != null) { + UIPlugin.getDefault().getDialogSettings().put(getClass().getName() + ".lastFolder", destinationFile.getPath()); //$NON-NLS-1$ + } + } + +} diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/MoveCopyCallback.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/MoveCopyCallback.java index d7536402c..b47d4e898 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/MoveCopyCallback.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/MoveCopyCallback.java @@ -9,6 +9,8 @@ *******************************************************************************/ package org.eclipse.tcf.te.tcf.filesystem.ui.internal.handlers; +import java.io.File; + import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; @@ -41,15 +43,16 @@ public class MoveCopyCallback implements IConfirmCallback { */ @Override public int confirms(Object object) { - final IFSTreeNode node = (IFSTreeNode) object; + final boolean isDirectory = isDirectory(object); + final String name = getName(object); final int[] results = new int[1]; Display display = PlatformUI.getWorkbench().getDisplay(); display.syncExec(new Runnable() { @Override public void run() { Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - String title = node.isDirectory() ? Messages.FSOperation_ConfirmFolderReplaceTitle : Messages.FSOperation_ConfirmFileReplace; - String message = NLS.bind(node.isDirectory() ? Messages.FSOperation_ConfirmFolderReplaceMessage : Messages.FSOperation_ConfirmFileReplaceMessage, node.getName()); + String title = isDirectory ? Messages.FSOperation_ConfirmFolderReplaceTitle : Messages.FSOperation_ConfirmFileReplace; + String message = NLS.bind(isDirectory ? Messages.FSOperation_ConfirmFolderReplaceMessage : Messages.FSOperation_ConfirmFileReplaceMessage, name); final Image titleImage = UIPlugin.getImage(ImageConsts.REPLACE_FOLDER_CONFIRM); MessageDialog qDialog = new MessageDialog(parent, title, null, message, MessageDialog.QUESTION, new String[] { Messages.FSOperation_ConfirmDialogYes, Messages.FSOperation_ConfirmDialogYesToAll, Messages.FSOperation_ConfirmDialogNo, Messages.FSOperation_ConfirmDialogCancel }, 0) { @Override @@ -63,4 +66,20 @@ public class MoveCopyCallback implements IConfirmCallback { return results[0]; } + private String getName(Object object) { + if (object instanceof IFSTreeNode) + return ((IFSTreeNode) object).getName(); + if (object instanceof File) + return ((File) object).getName(); + return String.valueOf(object); + } + + private boolean isDirectory(Object object) { + if (object instanceof IFSTreeNode) + return ((IFSTreeNode) object).isDirectory(); + if (object instanceof File) + return ((File) object).isDirectory(); + return false; + } + } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/operations/UiExecutor.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/operations/UiExecutor.java index da365d3ae..38931ed20 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/operations/UiExecutor.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/operations/UiExecutor.java @@ -61,7 +61,7 @@ public class UiExecutor { } }); } catch (InvocationTargetException e) { - ref.set(StatusHelper.getStatus(e)); + ref.set(StatusHelper.getStatus(e.getTargetException())); } catch (InterruptedException e) { return Status.CANCEL_STATUS; } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.java index 53f8ac980..3fd9bf9c7 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.java @@ -114,6 +114,8 @@ public class Messages extends NLS { public static String DeleteFilesHandler_DeleteMultipleFilesConfirmation; public static String DeleteFilesHandler_DeleteOneFileConfirmation; public static String DeleteFilesHandler_ConfirmDialogTitle; + public static String DownloadFilesHandler_folderDlg_message; + public static String DownloadFilesHandler_folderDlg_text; public static String FSRenamingAssistant_NameAlreadyExists; public static String FSRenamingAssistant_SpecifyNonEmptyName; public static String FSRenamingAssistant_UnixIllegalCharacters; diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.properties index 89b2d4a7d..33a0fe182 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.properties +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.properties @@ -36,6 +36,8 @@ DateValidator_YearOutofRange=The year is a number which is bigger than zero. DeleteFilesHandler_ConfirmDialogTitle=Confirm Delete DeleteFilesHandler_DeleteMultipleFilesConfirmation=Are you sure you want to delete these {0} files/folders? DeleteFilesHandler_DeleteOneFileConfirmation=Are you sure you want to delete ''{0}''? +DownloadFilesHandler_folderDlg_message=Select the destination folder: +DownloadFilesHandler_folderDlg_text=Download Files FSRenamingAssistant_NameAlreadyExists=A file/folder with the name you specified already exists\! Specify a different name. FSRenamingAssistant_SpecifyNonEmptyName=Specify a non-empty name. FSRenamingAssistant_UnixIllegalCharacters=File or folder name cannot contain any of the following characters:\n/ |