Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Stieber2012-05-02 11:20:56 +0000
committerUwe Stieber2012-05-02 11:37:35 +0000
commit82dba9bf83929c40e1a11b3453fdb630c248a630 (patch)
tree1bf4a875214f5575c759028c5c4b14291d6cc221 /target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui
parent86e0ea52f2f9bf83b690371b8b68f64594b38208 (diff)
downloadorg.eclipse.tcf-82dba9bf83929c40e1a11b3453fdb630c248a630.tar.gz
org.eclipse.tcf-82dba9bf83929c40e1a11b3453fdb630c248a630.tar.xz
org.eclipse.tcf-82dba9bf83929c40e1a11b3453fdb630c248a630.zip
Target Explorer: Rework delete handler contributions
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties3
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml70
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeAdapterFactory.java7
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/DeleteHandler.java (renamed from target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/DeleteHandlerDelegate.java)118
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/testers/TreeNodePropertyTester.java34
5 files changed, 187 insertions, 45 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties
index 7ea30d154..98877889f 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties
@@ -62,6 +62,9 @@ command.commit.name = Commit File
command.merge.name = Merge File
command.revert.name = Revert File
+command.delete.label=Delete
+command.delete.description=Delete the selected node
+
decorator.modified.label = Modified Cache
decorator.outdated.label = Outdated Cache
decorator.conflict.label = Conflicting Cache
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml
index 6346cb378..82e3fa2e1 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml
@@ -362,10 +362,9 @@
<iterate
ifEmpty="false"
operator="and">
- <test
- property="org.eclipse.tcf.te.ui.views.isDeletableElement"
- value="true">
- </test>
+ <instanceof
+ value="org.eclipse.tcf.te.tcf.filesystem.core.model.FSTreeNode">
+ </instanceof>
</iterate>
</with>
</visibleWhen>
@@ -549,6 +548,28 @@
</visibleWhen>
</command>
</menuContribution>
+ <menuContribution locationURI="popup:org.eclipse.tcf.te.ui.views.View#Popup?after=group.delete">
+ <command
+ commandId="org.eclipse.ui.edit.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.delete.label"
+ mnemonic="D"
+ style="push"
+ tooltip="%command.delete.description">
+ <visibleWhen checkEnabled="false">
+ <with variable="selection">
+ <count value="+"/>
+ <iterate operator="and" ifEmpty="false">
+ <instanceof value="org.eclipse.tcf.te.tcf.filesystem.core.model.FSTreeNode"/>
+ </iterate>
+ </with>
+ </visibleWhen>
+ </command>
+ </menuContribution>
+
<menuContribution locationURI="popup:org.eclipse.tcf.te.ui.views.View#Popup?after=group.properties">
<command
commandId="org.eclipse.ui.file.properties"
@@ -936,6 +957,13 @@
properties="isEditorActivation"
type="org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent">
</propertyTester>
+ <propertyTester
+ id="org.eclipse.tcf.te.tcf.filesystem.propertytester.treenode"
+ class="org.eclipse.tcf.te.tcf.filesystem.ui.internal.testers.TreeNodePropertyTester"
+ namespace="org.eclipse.tcf.te.tcf.filesystem"
+ properties="canDelete"
+ type="org.eclipse.tcf.te.tcf.filesystem.core.model.FSTreeNode">
+ </propertyTester>
</extension>
<!-- Command contributions -->
@@ -1565,6 +1593,37 @@
class="org.eclipse.tcf.te.tcf.filesystem.ui.internal.handlers.RefreshViewerHandler"
commandId="org.eclipse.tcf.te.tcf.filesystem.commands.refreshViewer">
</handler>
+
+ <handler
+ commandId="org.eclipse.ui.edit.delete"
+ class="org.eclipse.tcf.te.tcf.ui.handler.DeleteHandler">
+ <activeWhen>
+ <and>
+ <with variable="activePartId">
+ <or>
+ <equals value="org.eclipse.tcf.te.ui.views.View"/>
+ <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.core.model.FSTreeNode"/>
+ </iterate>
+ </with>
+ </and>
+ </activeWhen>
+ <enabledWhen>
+ <with variable="selection">
+ <iterate operator="and" ifEmpty="false">
+ <test
+ property="org.eclipse.tcf.te.tcf.filesystem.canDelete"
+ value="true">
+ </test>
+ </iterate>
+ </with>
+ </enabledWhen>
+ </handler>
+
</extension>
<!-- Decorator contributions -->
@@ -1667,9 +1726,6 @@
type="org.eclipse.tcf.te.ui.views.interfaces.handler.IRefreshHandlerDelegate">
</adapter>
<adapter
- type="org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate">
- </adapter>
- <adapter
type="org.eclipse.ui.IPersistableElement">
</adapter>
</factory>
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeAdapterFactory.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeAdapterFactory.java
index 7b53d0681..c1fe7d5b4 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeAdapterFactory.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeAdapterFactory.java
@@ -19,7 +19,6 @@ import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.tcf.te.tcf.filesystem.core.model.FSTreeNode;
import org.eclipse.tcf.te.tcf.filesystem.ui.activator.UIPlugin;
import org.eclipse.tcf.te.tcf.filesystem.ui.internal.columns.FSTreeElementLabelProvider;
-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;
import org.eclipse.ui.IPersistableElement;
@@ -29,7 +28,6 @@ import org.eclipse.ui.IPersistableElement;
*/
public class FSTreeNodeAdapterFactory implements IAdapterFactory {
private static ILabelProvider nodeLabelProvider = new FSTreeElementLabelProvider();
- private static IDeleteHandlerDelegate deleteDelegate = new DeleteHandlerDelegate();
private static IRefreshHandlerDelegate refreshDelegate = new RefreshHandlerDelegate();
// The fFilters map caching fFilters for FS nodes.
private Map<FSTreeNode, NodeStateFilter> filters;
@@ -62,9 +60,6 @@ public class FSTreeNodeAdapterFactory implements IAdapterFactory {
else if(adapterType == IRefreshHandlerDelegate.class) {
return refreshDelegate;
}
- else if(adapterType == IDeleteHandlerDelegate.class) {
- return deleteDelegate;
- }
else if(adapterType == IPersistableElement.class && UIPlugin.isExpandedPersisted()) {
return new PersistableNode(node);
}
@@ -77,6 +72,6 @@ public class FSTreeNodeAdapterFactory implements IAdapterFactory {
*/
@Override
public Class[] getAdapterList() {
- return new Class[] { IActionFilter.class, ILabelProvider.class, IRefreshHandlerDelegate.class, IDeleteHandlerDelegate.class, IPersistableElement.class };
+ return new Class[] { IActionFilter.class, ILabelProvider.class, IRefreshHandlerDelegate.class, IPersistableElement.class };
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/DeleteHandlerDelegate.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/DeleteHandler.java
index 4f0ef3aa3..da7622570 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/DeleteHandlerDelegate.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/handlers/DeleteHandler.java
@@ -7,20 +7,29 @@
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
-package org.eclipse.tcf.te.tcf.filesystem.ui.internal.adapters;
+package org.eclipse.tcf.te.tcf.filesystem.ui.internal.handlers;
+import java.util.Iterator;
import java.util.List;
import java.util.UUID;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tcf.te.runtime.callback.Callback;
import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer;
+import org.eclipse.tcf.te.runtime.properties.PropertiesContainer;
import org.eclipse.tcf.te.tcf.filesystem.core.interfaces.IConfirmCallback;
import org.eclipse.tcf.te.tcf.filesystem.core.internal.operations.IOpExecutor;
import org.eclipse.tcf.te.tcf.filesystem.core.internal.operations.OpDelete;
@@ -29,61 +38,106 @@ import org.eclipse.tcf.te.tcf.filesystem.ui.activator.UIPlugin;
import org.eclipse.tcf.te.tcf.filesystem.ui.internal.ImageConsts;
import org.eclipse.tcf.te.tcf.filesystem.ui.internal.operations.UiExecutor;
import org.eclipse.tcf.te.tcf.filesystem.ui.nls.Messages;
-import org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate;
+import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.navigator.CommonViewer;
/**
- * File System tree node delete handler delegate implementation.
+ * Delete handler implementation.
*/
-public class DeleteHandlerDelegate implements IDeleteHandlerDelegate {
+public class DeleteHandler extends AbstractHandler {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ // Get the current selection
+ ISelection selection = HandlerUtil.getCurrentSelection(event);
+ if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+ // Determine the active part
+ final IWorkbenchPart part = HandlerUtil.getActivePart(event);
+ // Create the delete state properties container
+ final IPropertiesContainer state = new PropertiesContainer();
+ // Store the selection to the state as reference
+ state.setProperty("selection", selection); //$NON-NLS-1$
+
+ // Loop over the selection and delete the elements providing an IDeleteHandlerDelegate
+ Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
+ while (iterator.hasNext()) {
+ final Object element = iterator.next();
+
+ // Delete the element if there is a valid delegate
+ if (canDelete(element)) {
+ // Determine the elements parent element
+ Object parentElement = null;
+ CommonViewer viewer = (CommonViewer)part.getAdapter(CommonViewer.class);
+ if (viewer != null && viewer.getContentProvider() instanceof ITreeContentProvider) {
+ ITreeContentProvider cp = (ITreeContentProvider)viewer.getContentProvider();
+ parentElement = cp.getParent(element);
+ }
+ final Object finParentElement = parentElement;
+
+ // Delete the element and refresh the parent element
+ delete(element, state, new Callback() {
+ @Override
+ protected void internalDone(Object caller, IStatus status) {
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ CommonViewer viewer = (CommonViewer)part.getAdapter(CommonViewer.class);
+ if (viewer != null) {
+ if (finParentElement != null) {
+ viewer.refresh(finParentElement, true);
+ } else {
+ viewer.refresh(true);
+ }
+ }
+ }
+ });
+ }
+ });
+ }
+ }
+ }
+
+ return null;
+ }
+
+ // ***** DeleteHandlerDelegate content. Clean up. *****
// 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$
// The deletion confirmation callback
- private IConfirmCallback confirmCallback;
+ private IConfirmCallback confirmCallback = new DeletionConfirmCallback();
// The confirmation call for read only files.
- private IConfirmCallback readonlyCallback;
-
- /**
- * Constructor
- */
- public DeleteHandlerDelegate() {
- confirmCallback = new DeletionConfirmCallback();
- readonlyCallback = new ReadOnlyConfirmCallback();
- }
-
+ private IConfirmCallback readonlyCallback = new ReadOnlyConfirmCallback();
+
/**
* Set the confirmation callback
- *
+ *
* @param confirmCallback The confirmation callback
*/
public void setConfirmCallback(IConfirmCallback confirmCallback) {
this.confirmCallback = confirmCallback;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.views.interfaces.handler.IDeleteHandlerDelegate#canDelete(java.lang.Object)
- */
- @Override
+ @Deprecated
public boolean canDelete(Object element) {
if (element instanceof FSTreeNode) {
FSTreeNode node = (FSTreeNode) element;
if (!node.isSystemRoot() && !node.isRoot()) {
- return node.isWindowsNode() && !node.isReadOnly()
+ 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
+ @Deprecated
public void delete(Object element, IPropertiesContainer state, ICallback callback) {
Assert.isNotNull(element);
Assert.isNotNull(state);
@@ -143,9 +197,9 @@ public class DeleteHandlerDelegate implements IDeleteHandlerDelegate {
});
return results[0];
}
-
+
}
-
+
static class DeletionConfirmCallback implements IConfirmCallback {
/*
* (non-Javadoc)
@@ -155,7 +209,7 @@ public class DeleteHandlerDelegate implements IDeleteHandlerDelegate {
public boolean requires(Object object) {
return true;
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.tcf.filesystem.interfaces.IConfirmCallback#confirms(java.lang.Object)
@@ -163,7 +217,7 @@ public class DeleteHandlerDelegate implements IDeleteHandlerDelegate {
@Override
public int confirms(Object object) {
IStructuredSelection selection = (IStructuredSelection) object;
- List<FSTreeNode> nodes = selection.toList();
+ List<FSTreeNode> nodes = selection.toList();
String question;
if (nodes.size() == 1) {
FSTreeNode node = nodes.get(0);
@@ -173,7 +227,7 @@ public class DeleteHandlerDelegate implements IDeleteHandlerDelegate {
question = NLS.bind(Messages.DeleteFilesHandler_DeleteMultipleFilesConfirmation, Integer.valueOf(nodes.size()));
}
Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- if (MessageDialog.openQuestion(parent, Messages.DeleteFilesHandler_ConfirmDialogTitle, question)) {
+ if (MessageDialog.openQuestion(parent, Messages.DeleteFilesHandler_ConfirmDialogTitle, question)) {
return IConfirmCallback.YES;
}
return IConfirmCallback.NO;
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/testers/TreeNodePropertyTester.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/testers/TreeNodePropertyTester.java
new file mode 100644
index 000000000..4e43d4b75
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/testers/TreeNodePropertyTester.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * 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.ui.internal.testers;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.tcf.te.tcf.filesystem.core.model.FSTreeNode;
+import org.eclipse.tcf.te.tcf.filesystem.ui.internal.handlers.DeleteHandler;
+
+/**
+ * Tree node property tester.
+ */
+public class TreeNodePropertyTester extends PropertyTester {
+ private final DeleteHandler deleteHandler = new DeleteHandler();
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+ */
+ @Override
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ if (receiver instanceof FSTreeNode && "canDelete".equals(property)) { //$NON-NLS-1$
+ return deleteHandler.canDelete(receiver);
+ }
+ return false;
+ }
+
+}

Back to the top