Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Chen2012-01-19 02:23:46 +0000
committerWilliam Chen2012-01-19 02:23:46 +0000
commitcf12b480308228592bfc95a0f3f6df2e80dddb36 (patch)
tree889a0c02fced16cdc829ffa2a259aa81f602c672
parent84fb371f6544b143db92b6192279bd69c21d4272 (diff)
downloadorg.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.
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.properties3
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml111
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/DeleteHandlerDelegate.java85
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/adapters/NodeStateFilterFactory.java7
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/handlers/DeleteFilesHandler.java54
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;
- }
-}

Back to the top