diff options
author | William Chen | 2012-01-19 02:23:46 +0000 |
---|---|---|
committer | William Chen | 2012-01-19 02:23:46 +0000 |
commit | cf12b480308228592bfc95a0f3f6df2e80dddb36 (patch) | |
tree | 889a0c02fced16cdc829ffa2a259aa81f602c672 | |
parent | 84fb371f6544b143db92b6192279bd69c21d4272 (diff) | |
download | org.eclipse.tcf-cf12b480308228592bfc95a0f3f6df2e80dddb36.tar.gz org.eclipse.tcf-cf12b480308228592bfc95a0f3f6df2e80dddb36.tar.xz org.eclipse.tcf-cf12b480308228592bfc95a0f3f6df2e80dddb36.zip |
Target Explorer: [368801] Implement the generic IDeleteHandlerDelegate
and integrate it to File System and Process Monitor.
5 files changed, 110 insertions, 150 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.properties index 1bd8c595a..7ea30d154 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.properties +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.properties @@ -108,4 +108,5 @@ command.refreshViewer.name = Refresh Viewer propertyTab.general.label = General propertyTab.advanced.label = Advanced -propertyTab.permission.label = Permissions
\ No newline at end of file +propertyTab.permission.label = Permissions +command.refresh.tooltip = Refresh the selected node
\ No newline at end of file diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml index 17a3cae38..8243e9c4d 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml @@ -296,12 +296,14 @@ </separator> <command commandId="org.eclipse.ui.edit.delete" - helpContextId="org.eclipse.tcf.te.tcf.filesystem.command_Delete" - icon="platform:/plugin/org.eclipse.ui/icons/full/obj16/delete_obj.gif" - id="delete" + disabledIcon="platform:/plugin/org.eclipse.ui/icons/full/dtool16/delete.gif" + helpContextId="org.eclipse.tcf.te.ui.command_Delete" + icon="platform:/plugin/org.eclipse.ui/icons/full/etool16/delete.gif" + id="org.eclipse.tcf.te.ui.commands.delete" label="%command.label.delete" mnemonic="D" - style="push"> + style="push" + tooltip="%command.delete.description"> <visibleWhen checkEnabled="false"> <with @@ -309,10 +311,13 @@ <count value="+"> </count> - <iterate> - <instanceof - value="org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode"> - </instanceof> + <iterate + ifEmpty="false" + operator="and"> + <test + property="org.eclipse.tcf.te.ui.views.isDeletableElement" + value="true"> + </test> </iterate> </with> </visibleWhen> @@ -375,7 +380,7 @@ label="%fsmenu.refresh.label" mnemonic="f" style="push" - tooltip="Refresh the selected node"> + tooltip="%command.refresh.tooltip"> <visibleWhen checkEnabled="false"> <with @@ -699,32 +704,6 @@ </visibleWhen> </command> <separator - name="group.delete"> - </separator> - <command - commandId="org.eclipse.ui.edit.delete" - helpContextId="org.eclipse.tcf.te.tcf.filesystem.command_Delete" - icon="platform:/plugin/org.eclipse.ui/icons/full/obj16/delete_obj.gif" - id="delete" - label="%command.label.delete.1" - mnemonic="D" - style="push"> - <visibleWhen - checkEnabled="false"> - <with - variable="selection"> - <count - value="+"> - </count> - <iterate> - <instanceof - value="org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode"> - </instanceof> - </iterate> - </with> - </visibleWhen> - </command> - <separator name="group.move" visible="true"> </separator> @@ -1263,65 +1242,6 @@ </enabledWhen> </handler> - <handler - class="org.eclipse.tcf.te.tcf.filesystem.internal.handlers.DeleteFilesHandler" - commandId="org.eclipse.ui.edit.delete"> - <activeWhen> - <and> - <with variable="activePartId"> - <or> - <equals value="org.eclipse.tcf.te.ui.views.TargetExplorer"/> - <equals value="org.eclipse.tcf.te.ui.views.Editor"/> - </or> - </with> - <with variable="selection"> - <iterate operator="and" ifEmpty="false"> - <instanceof value="org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode"/> - </iterate> - </with> - </and> - </activeWhen> - <enabledWhen> - <with - variable="selection"> - <count - value="+"> - </count> - <iterate> - <instanceof - value="org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode"> - </instanceof> - <not> - <test - property="org.eclipse.tcf.te.tcf.filesystem.propertytester.treenode.isRoot"> - </test> - </not> - <or> - <and> - <test - property="org.eclipse.tcf.te.tcf.filesystem.propertytester.treenode.isWindows"> - </test> - <not> - <test - property="org.eclipse.tcf.te.tcf.filesystem.propertytester.treenode.isReadOnly"> - </test> - </not> - </and> - <and> - <not> - <test - property="org.eclipse.tcf.te.tcf.filesystem.propertytester.treenode.isWindows"> - </test> - </not> - <test - property="org.eclipse.tcf.te.tcf.filesystem.propertytester.treenode.isWritable"> - </test> - </and> - </or> - </iterate> - </with> - </enabledWhen> - </handler> <handler class="org.eclipse.tcf.te.tcf.filesystem.internal.handlers.CutFilesHandler" @@ -1760,6 +1680,9 @@ <adapter type="org.eclipse.tcf.te.ui.views.interfaces.handler.IRefreshHandlerDelegate"> </adapter> + <adapter + type="org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate"> + </adapter> </factory> </extension> diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/DeleteHandlerDelegate.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/DeleteHandlerDelegate.java new file mode 100644 index 000000000..f4232dd86 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/DeleteHandlerDelegate.java @@ -0,0 +1,85 @@ +/*******************************************************************************
+ * Copyright (c) 2012 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.internal.adapters;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
+import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer;
+import org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSDelete;
+import org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode;
+import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
+import org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * File System tree node delete handler delegate implementation.
+ */
+public class DeleteHandlerDelegate implements IDeleteHandlerDelegate {
+
+ // The key to access the selection in the state.
+ private static final String KEY_SELECTION = "selection"; //$NON-NLS-1$
+ // The key to access the processed state in the state.
+ private static final String KEY_PROCESSED = "processed"; //$NON-NLS-1$
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate#canDelete(java.lang.Object)
+ */
+ @Override
+ public boolean canDelete(Object element) {
+ if (element instanceof FSTreeNode) {
+ FSTreeNode node = (FSTreeNode) element;
+ if (!node.isSystemRoot() && !node.isRoot()) {
+ return node.isWindowsNode() && !node.isReadOnly()
+ || !node.isWindowsNode() && node.isWritable();
+ }
+ }
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate#delete(java.lang.Object, org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer, org.eclipse.tcf.te.runtime.interfaces.callback.ICallback)
+ */
+ @Override
+ public void delete(Object element, IPropertiesContainer state, ICallback callback) {
+ Assert.isNotNull(element);
+ Assert.isNotNull(state);
+
+ UUID lastProcessed = (UUID) state.getProperty(KEY_PROCESSED);
+ if (lastProcessed == null || !lastProcessed.equals(state.getUUID())) {
+ state.setProperty(KEY_PROCESSED, state.getUUID());
+ IStructuredSelection selection = (IStructuredSelection) state.getProperty(KEY_SELECTION);
+ List<FSTreeNode> nodes = selection.toList();
+ String question;
+ if (nodes.size() == 1) {
+ FSTreeNode node = nodes.get(0);
+ question = NLS.bind(Messages.DeleteFilesHandler_DeleteOneFileConfirmation, node.name);
+ }
+ else {
+ question = NLS.bind(Messages.DeleteFilesHandler_DeleteMultipleFilesConfirmation, Integer.valueOf(nodes.size()));
+ }
+ Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ if (MessageDialog.openQuestion(parent, Messages.DeleteFilesHandler_ConfirmDialogTitle, question)) {
+ FSDelete delete = new FSDelete(nodes);
+ delete.doit();
+ }
+ }
+ if (callback != null) callback.done(this, Status.OK_STATUS);
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/NodeStateFilterFactory.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/NodeStateFilterFactory.java index 1675fda6d..622f95484 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/NodeStateFilterFactory.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/NodeStateFilterFactory.java @@ -18,6 +18,7 @@ import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.tcf.te.tcf.filesystem.internal.columns.FSTreeElementLabelProvider;
import org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode;
+import org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate;
import org.eclipse.tcf.te.ui.views.interfaces.handler.IRefreshHandlerDelegate;
import org.eclipse.ui.IActionFilter;
@@ -26,9 +27,10 @@ import org.eclipse.ui.IActionFilter; */
public class NodeStateFilterFactory implements IAdapterFactory {
private static ILabelProvider nodeLabelProvider = new FSTreeElementLabelProvider();
+ private static IDeleteHandlerDelegate deleteDelegate = new DeleteHandlerDelegate();
private static IRefreshHandlerDelegate refreshDelegate = new RefreshHandlerDelegate();
// The ADAPTERS adapted by this factory.
- private static Class<?>[] ADAPTERS = {IActionFilter.class, ILabelProvider.class, IRefreshHandlerDelegate.class};
+ private static Class<?>[] ADAPTERS = {IActionFilter.class, ILabelProvider.class, IRefreshHandlerDelegate.class, IDeleteHandlerDelegate.class};
// The fFilters map caching fFilters for FS nodes.
private Map<FSTreeNode, NodeStateFilter> filters;
@@ -60,6 +62,9 @@ public class NodeStateFilterFactory implements IAdapterFactory { else if(adapterType == IRefreshHandlerDelegate.class) {
return refreshDelegate;
}
+ else if(adapterType == IDeleteHandlerDelegate.class) {
+ return deleteDelegate;
+ }
}
return null;
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/handlers/DeleteFilesHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/handlers/DeleteFilesHandler.java deleted file mode 100644 index 59fcc009a..000000000 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/handlers/DeleteFilesHandler.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 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.internal.handlers; - -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.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.osgi.util.NLS; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSDelete; -import org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode; -import org.eclipse.tcf.te.tcf.filesystem.nls.Messages; -import org.eclipse.ui.handlers.HandlerUtil; -/** - * The handler that deletes the selected files or folders from the file system. - */ -public class DeleteFilesHandler extends AbstractHandler { - - /* - * (non-Javadoc) - * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - IStructuredSelection selection = (IStructuredSelection) HandlerUtil - .getCurrentSelection(event); - List<FSTreeNode> nodes = selection.toList(); - String question; - if (nodes.size() == 1) { - FSTreeNode node = nodes.get(0); - question = NLS.bind(Messages.DeleteFilesHandler_DeleteOneFileConfirmation, node.name); - } - else { - question = NLS.bind(Messages.DeleteFilesHandler_DeleteMultipleFilesConfirmation, Integer.valueOf(nodes.size())); - } - Shell parent = HandlerUtil.getActiveShellChecked(event); - if (MessageDialog.openQuestion(parent, Messages.DeleteFilesHandler_ConfirmDialogTitle, question)) { - FSDelete delete = new FSDelete(nodes); - delete.doit(); - } - return null; - } -} |