Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Chen2012-06-14 09:42:52 +0000
committerWilliam Chen2012-06-14 09:42:52 +0000
commita804c0d58533b437a6e5489550cfea42c7e63f95 (patch)
tree57cd00cf6bb7b2f131b16297f19053286c3b4511
parentfab509bb4215807c94dcfac542a68c1b51bad4eb (diff)
downloadorg.eclipse.tcf-a804c0d58533b437a6e5489550cfea42c7e63f95.tar.gz
org.eclipse.tcf-a804c0d58533b437a6e5489550cfea42c7e63f95.tar.xz
org.eclipse.tcf-a804c0d58533b437a6e5489550cfea42c7e63f95.zip
Target Explorer: Changes Find feature based on feedback(TBC).
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpen.java13
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpenChannel.java28
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneReadDir.java7
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/RefreshStateDoneOpenChannel.java9
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/Operation.java3
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeAdapterFactory.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeSearchable.java165
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.java20
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/nls/Messages.properties44
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/QueryDoneOpenChannel.java7
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/interfaces/ISearchable.java15
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/AbstractSearcher.java6
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/BreadthFirstSearcher.java4
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/DepthFirstSearcher.java4
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/SearchEngine.java15
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/TreeViewerSearchDialog.java100
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java1
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties3
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/utils/AbstractSearchable.java78
21 files changed, 250 insertions, 278 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpen.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpen.java
index be859e69e..d24c85997 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpen.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpen.java
@@ -65,11 +65,18 @@ public class QueryDoneOpen extends CallbackBase implements DoneOpen {
if (handle != null) {
service.close(handle, new DoneClose() {
@Override
- public void doneClose(IToken token, FileSystemException error) {}
+ public void doneClose(IToken token, FileSystemException error) {
+ IStatus status;
+ if (error == null) status = Status.OK_STATUS;
+ else status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), getErrorMessage(error), error);
+ callback.done(this, status);
+ }
});
}
- IStatus status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), getErrorMessage(error), error);
- callback.done(this, status);
+ else {
+ IStatus status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), getErrorMessage(error), error);
+ callback.done(this, status);
+ }
}
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpenChannel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpenChannel.java
index 5907c741d..755366737 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpenChannel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneOpenChannel.java
@@ -11,6 +11,7 @@ package org.eclipse.tcf.te.tcf.filesystem.core.internal.callbacks;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.Protocol;
@@ -31,6 +32,7 @@ public class QueryDoneOpenChannel extends CallbackBase implements DoneOpenChanne
FSTreeNode parentNode;
// Callback object.
ICallback callback;
+ boolean first;
/**
* Create an instance with a parent node.
@@ -71,24 +73,20 @@ public class QueryDoneOpenChannel extends CallbackBase implements DoneOpenChanne
}
};
if(error == null) {
- if(channel != null) {
- IFileSystem service = channel.getRemoteService(IFileSystem.class);
- if(service != null) {
- if(parentNode.isSystemRoot()) {
- service.roots(new QueryDoneRoots(proxy, parentNode));
- } else {
- String absPath = parentNode.getLocation();
- service.opendir(absPath, new QueryDoneOpen(proxy, channel, service, parentNode));
- }
+ IFileSystem service = channel.getRemoteService(IFileSystem.class);
+ if(service != null) {
+ if(parentNode.isSystemRoot()) {
+ service.roots(new QueryDoneRoots(proxy, parentNode));
} else {
- Status status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), Messages.Operation_NoFileSystemError, null);
- proxy.done(this, status);
+ String absPath = parentNode.getLocation();
+ service.opendir(absPath, new QueryDoneOpen(proxy, channel, service, parentNode));
}
+ } else {
+ Status status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), Messages.Operation_NoFileSystemError, null);
+ proxy.done(this, status);
}
- else {
- proxy.done(this, Status.OK_STATUS);
- }
- } else {
+ }
+ else if(!(error instanceof OperationCanceledException)) {
IStatus status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), getErrorMessage(error), error);
proxy.done(this, status);
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneReadDir.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneReadDir.java
index 2f23f4258..414b7ef32 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneReadDir.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/QueryDoneReadDir.java
@@ -86,10 +86,11 @@ public class QueryDoneReadDir extends CallbackBase implements DoneReadDir {
// Close the handle and channel if EOF is signaled or an error occurred.
service.close(handle, new DoneClose() {
@Override
- public void doneClose(IToken token, FileSystemException error) {}
+ public void doneClose(IToken token, FileSystemException error) {
+ IStatus status = error == null ? Status.OK_STATUS : new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), getErrorMessage(error), error);
+ callback.done(this, status);
+ }
});
- Status status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), getErrorMessage(error), error);
- callback.done(this, status);
}
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/RefreshStateDoneOpenChannel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/RefreshStateDoneOpenChannel.java
index 9b4f1623b..4484255c6 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/RefreshStateDoneOpenChannel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/callbacks/RefreshStateDoneOpenChannel.java
@@ -10,6 +10,7 @@
package org.eclipse.tcf.te.tcf.filesystem.core.internal.callbacks;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS;
import org.eclipse.tcf.protocol.IChannel;
@@ -52,9 +53,11 @@ public class RefreshStateDoneOpenChannel extends CallbackBase implements IChanne
if(channel != null) {
Tcf.getChannelManager().closeChannel(channel);
}
- String message = getErrorMessage(error);
- IStatus status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), message, error);
- invokeCallback(status);
+ if (!(error instanceof OperationCanceledException)) {
+ String message = getErrorMessage(error);
+ IStatus status = new Status(IStatus.ERROR, CorePlugin.getUniqueIdentifier(), message, error);
+ invokeCallback(status);
+ }
}
else {
IFileSystem service = channel.getRemoteService(IFileSystem.class);
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/Operation.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/Operation.java
index 5b470f5ea..4067ee2e3 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/Operation.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/Operation.java
@@ -18,6 +18,7 @@ import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.osgi.util.NLS;
import org.eclipse.tcf.protocol.IChannel;
@@ -150,7 +151,7 @@ public class Operation extends Ancestor<FSTreeNode> implements IOperation {
String message = NLS.bind(Messages.Operation_NotResponding, peer.getID());
errors[0] = new TCFChannelException(message);
}
- else {
+ else if(!(error instanceof OperationCanceledException)) {
String message = NLS.bind(Messages.Operation_OpeningChannelFailureMessage, peer.getID(), error.getMessage());
errors[0] = new TCFChannelException(message, error);
}
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 49018aa55..843942527 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
@@ -68,7 +68,7 @@ public class FSTreeNodeAdapterFactory implements IAdapterFactory {
return node.getPeerModel();
}
else if(adapterType == ISearchable.class) {
- return new FSTreeNodeSearchable();
+ return new FSTreeNodeSearchable(node);
}
}
return null;
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeSearchable.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeSearchable.java
index 27118f87d..29d1efd96 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeSearchable.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/adapters/FSTreeNodeSearchable.java
@@ -10,176 +10,23 @@
package org.eclipse.tcf.te.tcf.filesystem.ui.internal.adapters;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
import org.eclipse.tcf.te.tcf.filesystem.core.model.FSTreeNode;
import org.eclipse.tcf.te.tcf.filesystem.ui.nls.Messages;
-import org.eclipse.tcf.te.ui.interfaces.AbstractSearchable;
-import org.eclipse.tcf.te.ui.interfaces.ISearchMatcher;
+import org.eclipse.tcf.te.ui.utils.CompositeSearchable;
/**
* The ISearchable adapter for a FSTreeNode which creates a UI for the user to
* input the matching condition and returns a matcher to do the matching.
*/
-public class FSTreeNodeSearchable extends AbstractSearchable implements ISearchMatcher {
- // The case sensitive check box.
- Button fBtnCase;
- // The matching rule check box.
- Button fBtnMatch;
- // The types of target files.
- Combo fBtnFileOnly;
- // The input field for searching conditions.
- Text fSearchField;
- // Whether it is case sensitive
- boolean fCaseSensitive;
- // Whether it is precise matching.
- boolean fMatchPrecise;
- // The current selected target type index.
- int fTargetType;
- // The current target names.
- String fTargetName;
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.interfaces.ISearchable#createPart(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void createPart(Composite container) {
- Composite comp = new Composite(container, SWT.NONE);
- GridLayout glayout = new GridLayout(2, false);
- glayout.marginHeight = 0;
- glayout.marginWidth = 0;
- comp.setLayout(glayout);
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- // Searching field.
- Label label = new Label(comp, SWT.NONE);
- label.setText(Messages.TreeViewerSearchDialog_LblCancelText);
- fSearchField = new Text(comp, SWT.SINGLE | SWT.BORDER);
- fSearchField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- fSearchField.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- searchTextModified();
- }
- });
-
- SelectionListener l = new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- optionChecked(e);
- }
- };
-
- // Search Options Group
- Group group = new Group(container, SWT.SHADOW_ETCHED_IN);
- group.setText(Messages.TreeViewerSearchDialog_GrpOptionsText);
- GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
- group.setLayoutData(data);
- group.setLayout(new GridLayout(2, false));
-
- label = new Label(group, SWT.NONE);
- label.setText(Messages.FSTreeNodeSearchable_SearchingTargets);
-
- // Search files only
- fBtnFileOnly = new Combo(group, SWT.BORDER | SWT.READ_ONLY);
- fBtnFileOnly.setItems(new String[]{Messages.FSTreeNodeSearchable_FilesAndFolders, Messages.FSTreeNodeSearchable_FilesOnly, Messages.FSTreeNodeSearchable_FoldersOnly});
- fBtnFileOnly.setLayoutData(new GridData());
- fBtnFileOnly.select(0);
- fBtnFileOnly.addSelectionListener(l);
-
- // Case sensitive
- fBtnCase = new Button(group, SWT.CHECK);
- fBtnCase.setText(Messages.TreeViewerSearchDialog_BtnCaseText);
- fBtnCase.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- fBtnCase.addSelectionListener(l);
-
- // Matching precisely
- fBtnMatch = new Button(group, SWT.CHECK);
- fBtnMatch.setText(Messages.TreeViewerSearchDialog_BtnPreciseText);
- fBtnMatch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- fBtnMatch.addSelectionListener(l);
- }
-
- /**
- * The text for searching is modified.
- */
- protected void searchTextModified() {
- fireOptionChanged();
- fTargetName = fSearchField.getText().trim();
- }
+public class FSTreeNodeSearchable extends CompositeSearchable {
/**
- * An option has been selected.
+ * Create an instance with the specified node.
*
- * @param e The selection event.
+ * @param node The directory node.
*/
- protected void optionChecked(SelectionEvent e) {
- Object src = e.getSource();
- if (src == fBtnCase) {
- fCaseSensitive = fBtnCase.getSelection();
- }
- else if (src == fBtnMatch) {
- fMatchPrecise = fBtnMatch.getSelection();
- }
- else if (src == fBtnFileOnly) {
- fTargetType = fBtnFileOnly.getSelectionIndex();
- }
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.interfaces.ISearchable#getMatcher()
- */
- @Override
- public ISearchMatcher getMatcher() {
- return this;
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.interfaces.ISearchable#isInputValid()
- */
- @Override
- public boolean isInputValid() {
- String txt = fSearchField.getText();
- boolean valid = txt != null && txt.trim().length() > 0;
- return valid;
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.interfaces.ISearchMatcher#match(java.lang.Object)
- */
- @Override
- public boolean match(Object context) {
- if (context == null) return false;
- if (context instanceof FSTreeNode) {
- FSTreeNode node = (FSTreeNode) context;
- if(fTargetType == 1 && !node.isFile() || fTargetType == 2 && !node.isDirectory()) return false;
- String text = node.name;
- if (text == null) return false;
- String target = fTargetName;
- if (!fCaseSensitive) {
- text = text.toLowerCase();
- target = target != null ? target.toLowerCase() : null;
- }
- if (fMatchPrecise) return text.equals(target);
- return text.indexOf(target) != -1;
- }
- return false;
+ public FSTreeNodeSearchable(FSTreeNode node) {
+ super(new FSGeneralSearchable(node), new FSModifiedSearchable(node), new FSSizeSearchable(node));
}
/*
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 1d253d716..f403048a2 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
@@ -96,6 +96,18 @@ public class Messages extends NLS {
public static String FSDropTargetListener_MovingWarningMultiple;
public static String FSDropTargetListener_MovingWarningSingle;
public static String FSExplorerEditorPage_PageTitle;
+ public static String FSGeneralSearchable_FileType;
+ public static String FSGeneralSearchable_Find;
+ public static String FSGeneralSearchable_GeneralOptionText;
+ public static String FSGeneralSearchable_SearchHiddenFiles;
+ public static String FSGeneralSearchable_SearchSystemFiles;
+ public static String FSModifiedSearchable_DontRemember;
+ public static String FSModifiedSearchable_LastWeek;
+ public static String FSModifiedSearchable_PastMonth;
+ public static String FSModifiedSearchable_PastYear;
+ public static String FSModifiedSearchable_SpecifyDates;
+ public static String FSModifiedSearchable_ToDate;
+ public static String FSModifiedSearchable_WhenModified;
public static String FSUpload_Cancel;
public static String FSUpload_No;
public static String FSUpload_OverwriteConfirmation;
@@ -117,6 +129,14 @@ public class Messages extends NLS {
public static String OpenWithMenu_NoEditorFound;
public static String OpenWithMenu_OpenWith;
public static String FSRename_RenameFileFolderTitle;
+ public static String FSSizeSearchable_DontRemember;
+ public static String FSSizeSearchable_KBS;
+ public static String FSSizeSearchable_Large;
+ public static String FSSizeSearchable_Medium;
+ public static String FSSizeSearchable_Small;
+ public static String FSSizeSearchable_SpecifySize;
+ public static String FSSizeSearchable_ToText;
+ public static String FSSizeSearchable_WhatSize;
public static String FSTreeNodeSearchable_FilesAndFolders;
public static String FSTreeNodeSearchable_FilesOnly;
public static String FSTreeNodeSearchable_FindFilesAndFolders;
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 1ef54ccbe..9d361e447 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
@@ -22,8 +22,8 @@ DeleteFilesHandler_DeleteMultipleFilesConfirmation=Are you sure you want to dele
DeleteFilesHandler_DeleteOneFileConfirmation=Are you sure you want to delete ''{0}''?
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=A file/folder name cannot contain any of the following characters:\n/
-FSRenamingAssistant_WinIllegalCharacters=A file/folder name cannot contain any of the following characters:\n\\/:*?<>|
+FSRenamingAssistant_UnixIllegalCharacters=File or folder name cannot contain any of the following characters:\n/
+FSRenamingAssistant_WinIllegalCharacters=File or folder name cannot contain any of the following characters:\n\\/:*?<>|
LocalTypedElement_SavingFile=Saving file: {0}
MergeEditorInput_LocalFile=Local: {0}
MergeEditorInput_RemoteFile=Remote: {0}
@@ -36,6 +36,18 @@ FSDropTargetListener_ConfirmMoveTitle=Confirm Move
FSDropTargetListener_MovingWarningMultiple=This operation will delete the files after moving. You can copy them without deletion by CTRL + dragging. \n\nAre you sure you want to move these {0} files/folders?
FSDropTargetListener_MovingWarningSingle=This operation will delete the file after moving. You can copy it without deletion by CTRL + dragging. \n\nAre you sure you want to move ''{0}''?
FSExplorerEditorPage_PageTitle=File System Explorer
+FSGeneralSearchable_FileType=Type of file
+FSGeneralSearchable_Find=Find:
+FSGeneralSearchable_GeneralOptionText=General search options
+FSGeneralSearchable_SearchHiddenFiles=Search hidden files/folders
+FSGeneralSearchable_SearchSystemFiles=Search system files/folders
+FSModifiedSearchable_DontRemember=Don't remember
+FSModifiedSearchable_LastWeek=Within the last week
+FSModifiedSearchable_PastMonth=Past month
+FSModifiedSearchable_PastYear=Within the past year
+FSModifiedSearchable_SpecifyDates=Specify dates, from
+FSModifiedSearchable_ToDate=to
+FSModifiedSearchable_WhenModified=When was it modified?
FSUpload_Cancel=Cancel
FSUpload_No=No
FSUpload_OverwriteConfirmation=A file with a same name already exists. Are you sure to overwrite {0}?
@@ -57,13 +69,21 @@ OpenWithMenu_DefaultEditor=&Default Editor
OpenWithMenu_NoEditorFound=No editor found to edit the file resource.
OpenWithMenu_OpenWith=Open With
FSRename_RenameFileFolderTitle=Error Renaming File or Folder
-FSTreeNodeSearchable_FilesAndFolders=Files/Folders
-FSTreeNodeSearchable_FilesOnly=Files Only
-FSTreeNodeSearchable_FindFilesAndFolders=Find Files/Folders
-FSTreeNodeSearchable_FindMessage=Find files/folders under {0}\nNote that the subsidary nodes will be loaded and searched too.
-FSTreeNodeSearchable_FoldersOnly=Folders Only
-FSTreeNodeSearchable_SearchingTargets=Search targets:
-FSTreeNodeSearchable_SelectedFileSystem=selected File System
+FSSizeSearchable_DontRemember=Don't remember
+FSSizeSearchable_KBS=KB(s)
+FSSizeSearchable_Large=Large (more than 1 MB)
+FSSizeSearchable_Medium=Medium (less than 1 MB)
+FSSizeSearchable_Small=Small (less than 100 KB)
+FSSizeSearchable_SpecifySize=Specify size, from
+FSSizeSearchable_ToText=KB(s) to
+FSSizeSearchable_WhatSize=What size is it?
+FSTreeNodeSearchable_FilesAndFolders=both files and folders
+FSTreeNodeSearchable_FilesOnly=files only
+FSTreeNodeSearchable_FindFilesAndFolders=Find Files
+FSTreeNodeSearchable_FindMessage=Find files and folders under {0}.\nWarning: subsidiary files and folders will be loaded and searched.
+FSTreeNodeSearchable_FoldersOnly=folders only
+FSTreeNodeSearchable_SearchingTargets=Find in
+FSTreeNodeSearchable_SelectedFileSystem=the selected file system
RenameFilesHandler_TitleRename=Rename
RenameFilesHandler_TitleRenameFile=Rename File
RenameFilesHandler_TitleRenameFolder=Rename Folder
@@ -107,10 +127,10 @@ PermissionsGroup_Writable=Writable
BasicFolderSection_BasicInfoText=Basic Information
LinuxPermissionsSection_Permissions=Permissions
WindowsAttributesSection_Attributes=Attributes
-FolderValidator_SpecifyFolder=Please specify the folder where the file/folder is going to be created.
+FolderValidator_SpecifyFolder=Please specify the folder where the file or folder is going to be created.
FolderValidator_DirNotExist=The directory {0} does not exist in the current target.
FolderValidator_NotWritable=The directory {0} is not writable. Please choose a different one.
-NameValidator_SpecifyFolder=Please specify the folder where the file/folder is going to be created.
+NameValidator_SpecifyFolder=Please specify the folder where the file or folder is going to be created.
NewFileWizard_NewFileWizardTitle=New File Wizard
NewFileWizardPage_NewFileWizardPageDescription=Create a new file in the directory.
NewFileWizardPage_NewFileWizardPageNameLabel=File name:
@@ -120,7 +140,7 @@ NewFolderWizardPage_NewFolderWizardPageDescription=Create a new folder in the di
NewFolderWizardPage_NewFolderWizardPageNameLabel=Folder name:
NewFolderWizardPage_NewFolderWizardPageTitle=New Folder
NewNodeWizardPage_PromptFolderLabel=Enter or select the parent folder:
-TargetSelectionPage_Description=Please select the target where the new file/folder is created.
+TargetSelectionPage_Description=Please select the target where the new file or folder is created.
TargetSelectionPage_Targets=Targets:
TargetSelectionPage_Title=Select the target.
TreeViewerSearchDialog_LblCancelText=Find:
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/QueryDoneOpenChannel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/QueryDoneOpenChannel.java
index 4b52b8270..5d41d9999 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/QueryDoneOpenChannel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/QueryDoneOpenChannel.java
@@ -11,6 +11,7 @@ package org.eclipse.tcf.te.tcf.processes.core.callbacks;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.Protocol;
@@ -58,7 +59,7 @@ public class QueryDoneOpenChannel implements IChannelManager.DoneOpenChannel {
@Override
public void doneOpenChannel(Throwable error, final IChannel channel) {
Assert.isTrue(Protocol.isDispatchThread());
- if (error == null && channel != null) {
+ if (error == null) {
ISysMonitor service = channel.getRemoteService(ISysMonitor.class);
if (service != null) {
service.getChildren(parentNode.id, new QueryDoneGetChildren(new Callback(){
@@ -76,8 +77,8 @@ public class QueryDoneOpenChannel implements IChannelManager.DoneOpenChannel {
callback.done(this, Status.OK_STATUS);
}
}
- else if (callback != null) {
- IStatus status = error == null ? Status.OK_STATUS : new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), error.getMessage(), error);
+ else if (!(error instanceof OperationCanceledException) && callback != null) {
+ IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), error.getMessage(), error);
callback.done(this, status);
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java
index d042613de..96325fa54 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java
@@ -47,7 +47,7 @@ public class RefreshChildrenDoneOpenChannel implements IChannelManager.DoneOpenC
@Override
public void doneOpenChannel(Throwable error, final IChannel channel) {
Assert.isTrue(Protocol.isDispatchThread());
- if (error == null && channel != null) {
+ if (error == null) {
ISysMonitor service = channel.getRemoteService(ISysMonitor.class);
if (service != null) {
final CallbackMonitor monitor = new CallbackMonitor(new Callback(){
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java
index d22cd5b5e..e034a9904 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java
@@ -47,7 +47,7 @@ public class RefreshDoneOpenChannel implements IChannelManager.DoneOpenChannel {
@Override
public void doneOpenChannel(Throwable error, final IChannel channel) {
Assert.isTrue(Protocol.isDispatchThread());
- if (error == null && channel != null) {
+ if (error == null) {
ISysMonitor service = channel.getRemoteService(ISysMonitor.class);
if (service != null) {
Queue<ProcessTreeNode> queue = new ConcurrentLinkedQueue<ProcessTreeNode>();
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/interfaces/ISearchable.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/interfaces/ISearchable.java
index 13f8ca90b..7e21966c9 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/interfaces/ISearchable.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/interfaces/ISearchable.java
@@ -10,6 +10,7 @@
package org.eclipse.tcf.te.ui.interfaces;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tcf.te.ui.utils.AbstractSearchable;
/**
* This interface should be implemented or adapted by the tree nodes which
@@ -46,12 +47,20 @@ public interface ISearchable {
public String getElementText(Object element);
/**
- * Create the option part in the searching dialog where the user
- * enters the matching rule used in searching.
+ * Create the part in the searching dialog where the user
+ * enters the common matching rule used in searching.
*
* @param parent The parent composite of this option part.
*/
- public void createPart(Composite parent);
+ public void createCommonPart(Composite parent);
+
+ /**
+ * Create the part in the searching dialog where the user
+ * enters the advanced matching rule used in searching.
+ *
+ * @param parent The parent composite of this option part.
+ */
+ public void createAdvancedPart(Composite parent);
/**
* Get a searching matcher object to test if a tree node matches
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/AbstractSearcher.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/AbstractSearcher.java
index ef00c6456..264bffc7e 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/AbstractSearcher.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/AbstractSearcher.java
@@ -15,7 +15,6 @@ import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.tcf.te.ui.interfaces.ILazyLoader;
-import org.eclipse.tcf.te.ui.interfaces.ISearchMatcher;
import org.eclipse.tcf.te.ui.interfaces.ISearchable;
import org.eclipse.tcf.te.ui.interfaces.ITreeSearcher;
import org.eclipse.tcf.te.ui.trees.Pending;
@@ -30,10 +29,8 @@ public abstract class AbstractSearcher implements ITreeSearcher {
protected TreeViewer fViewer;
// The label provider of the tree viewer.
protected ILabelProvider fLabelProvider;
-
+ // The searchable element.
protected ISearchable fSearchable;
-
- protected ISearchMatcher fMatcher;
/**
* Create a searcher with the specified viewer and matcher.
@@ -45,7 +42,6 @@ public abstract class AbstractSearcher implements ITreeSearcher {
fViewer = viewer;
fLabelProvider = (ILabelProvider) fViewer.getLabelProvider();
this.fSearchable = searchable;
- this.fMatcher = searchable.getMatcher();
}
/**
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/BreadthFirstSearcher.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/BreadthFirstSearcher.java
index 4e8009e6e..58b62e2e5 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/BreadthFirstSearcher.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/BreadthFirstSearcher.java
@@ -17,6 +17,7 @@ import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.te.ui.interfaces.ISearchMatcher;
import org.eclipse.tcf.te.ui.interfaces.ISearchable;
/**
@@ -57,6 +58,7 @@ public class BreadthFirstSearcher extends AbstractSearcher{
@Override
public TreePath searchNext(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException{
TreePath result = null;
+ ISearchMatcher matcher = fSearchable.getMatcher();
while(queue != null && !queue.isEmpty() && result == null && !monitor.isCanceled()) {
TreePath path = queue.poll();
Object element = path.getLastSegment();
@@ -69,7 +71,7 @@ public class BreadthFirstSearcher extends AbstractSearcher{
}
String elementText = fSearchable.getElementText(element);
monitor.subTask(elementText);
- if(fMatcher.match(element)) {
+ if(matcher.match(element)) {
result = path;
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/DepthFirstSearcher.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/DepthFirstSearcher.java
index 6e35813ac..19a1f013b 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/DepthFirstSearcher.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/DepthFirstSearcher.java
@@ -16,6 +16,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.te.ui.interfaces.ISearchMatcher;
import org.eclipse.tcf.te.ui.interfaces.ISearchable;
/**
@@ -111,12 +112,13 @@ public class DepthFirstSearcher extends AbstractSearcher {
@Override
public TreePath searchNext(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
TreePath result = null;
+ ISearchMatcher matcher = fSearchable.getMatcher();
while (!fSearchStack.isEmpty() && result == null && !monitor.isCanceled()) { //Search util the stack is empty or the result is found.
StackElement top = fSearchStack.getLast(); //Get the top stack element.
if(!fForeward && top.index == END_INDEX || fForeward && top.index == START_INDEX){
String elementText = fSearchable.getElementText(top.node);
monitor.subTask(elementText);
- result = fMatcher.match(top.node) ? this.createContextPath() : null;
+ result = matcher.match(top.node) ? this.createContextPath() : null;
}
if (top.index == END_INDEX) {//If the top index is END_INDEX, it means the node has been finished.
fSearchStack.removeLast(); //Then discard it.
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/SearchEngine.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/SearchEngine.java
index 9a5fc9125..dc22b9728 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/SearchEngine.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/SearchEngine.java
@@ -58,8 +58,13 @@ public class SearchEngine {
fDepthFirst = depthFirst;
}
- public void setSearchable(ISearchable matcher) {
- fSearchable = matcher;
+ /**
+ * The set the searchable
+ *
+ * @param searchable the searchable element.
+ */
+ public void setSearchable(ISearchable searchable) {
+ fSearchable = searchable;
fSearcher = fDepthFirst ? new DepthFirstSearcher(fViewer, fSearchable) : new BreadthFirstSearcher(fViewer, fSearchable);
}
@@ -96,6 +101,11 @@ public class SearchEngine {
}
}
+ /**
+ * Get the start path.
+ *
+ * @return the start path.
+ */
public TreePath getStartPath() {
return fStartPath;
}
@@ -158,6 +168,7 @@ public class SearchEngine {
return Status.OK_STATUS;
}
};
+ fSearchJob.setSystem(true);
fSearchJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(final IJobChangeEvent event) {
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/TreeViewerSearchDialog.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/TreeViewerSearchDialog.java
index 5efde2f01..aaba866fa 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/TreeViewerSearchDialog.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/utils/TreeViewerSearchDialog.java
@@ -23,24 +23,19 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
-import org.eclipse.tcf.te.ui.forms.FormLayoutFactory;
import org.eclipse.tcf.te.ui.interfaces.IOptionListener;
import org.eclipse.tcf.te.ui.interfaces.ISearchCallback;
import org.eclipse.tcf.te.ui.interfaces.ISearchable;
import org.eclipse.tcf.te.ui.jface.dialogs.CustomTitleAreaDialog;
import org.eclipse.tcf.te.ui.nls.Messages;
-import org.eclipse.ui.forms.events.ExpansionEvent;
-import org.eclipse.ui.forms.events.IExpansionListener;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
/**
* The searching dialog used to get the searching input.
@@ -200,63 +195,64 @@ public class TreeViewerSearchDialog extends CustomTitleAreaDialog implements ISe
// Create the main container
Composite composite = (Composite) super.createDialogArea(parent);
Composite container = new Composite(composite, SWT.NONE);
- GridLayout glayout = new GridLayout();
- glayout.marginHeight = 5;
- glayout.marginWidth = 5;
- glayout.verticalSpacing = 5;
- glayout.horizontalSpacing = 5;
- container.setLayout(glayout);
+ container.setLayout(new GridLayout());
container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if(fSearchable != null) {
- fSearchable.createPart(container);
+ fSearchable.createCommonPart(container);
+ fSearchable.createAdvancedPart(container);
}
- SelectionListener l = new SelectionAdapter() {
+ // Progress monitor part to display or cancel searching process.
+ fPmPart = new ProgressMonitorPart(container, null, true);
+ GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ fPmPart.setLayoutData(data);
+ fPmPart.setVisible(false);
+
+ if(fSearchable != null) {
+ String title = fSearchable.getSearchTitle();
+ getShell().setText(title);
+ this.setTitle(title);
+ }
+
+ return composite;
+ }
+
+ /**
+ * Create the part to input the general search options.
+ *
+ * @param container The parent container
+ */
+ protected void createGeneralOptions(Composite container) {
+ SelectionListener l = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
selectionChanged(e);
}
};
- Section section = new Section(container, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT);
- section.setText(Messages.TreeViewerSearchDialog_AdvancedOptions);
- section.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 2));
- GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- section.setLayoutData(layoutData);
-
- final Composite client = new Composite(section, SWT.NONE);
- client.setLayout(new GridLayout(3, false));
- client.setBackground(section.getBackground());
- section.setClient(client);
+ Group generalGroup = new Group(container, SWT.NONE);
+ generalGroup.setText(Messages.TreeViewerSearchDialog_GeneralOptions);
+ generalGroup.setLayout(new GridLayout(3, false));
+ generalGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- section.addExpansionListener(new IExpansionListener(){
- @Override
- public void expansionStateChanging(ExpansionEvent e) {
- }
-
- @Override
- public void expansionStateChanged(ExpansionEvent e) {
- expansionChanged(e.getState(), client.getSize().y);
- }});
-
- Label label = new Label(client, SWT.NONE);
+ Label label = new Label(generalGroup, SWT.NONE);
label.setLayoutData(new GridData());
label.setText(Messages.TreeViewerSearchDialog_SearchNodesUsing);
- fCmbAlg = new Combo(client, SWT.BORDER | SWT.READ_ONLY);
+ fCmbAlg = new Combo(generalGroup, SWT.BORDER | SWT.READ_ONLY);
fCmbAlg.setLayoutData(new GridData());
fCmbAlg.setItems(new String[]{Messages.TreeViewerSearchDialog_BFS, Messages.TreeViewerSearchDialog_DFS});
fCmbAlg.select(0);
fCmbAlg.addSelectionListener(l);
- label = new Label(client, SWT.NONE);
+ label = new Label(generalGroup, SWT.NONE);
GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
label.setLayoutData(data);
label.setText(Messages.TreeViewerSearchDialog_UseOptions);
// Wrap search
- fBtnWrap = new Button(client, SWT.CHECK);
+ fBtnWrap = new Button(generalGroup, SWT.CHECK);
fBtnWrap.setText(Messages.TreeViewerSearchDialog_BtnWrapText);
data = new GridData(SWT.FILL, SWT.CENTER, true, false);
data.horizontalSpan = 3;
@@ -265,7 +261,7 @@ public class TreeViewerSearchDialog extends CustomTitleAreaDialog implements ISe
fBtnWrap.addSelectionListener(l);
// Search backward.
- fBtnBackward = new Button(client, SWT.CHECK);
+ fBtnBackward = new Button(generalGroup, SWT.CHECK);
fBtnBackward.setText(Messages.TreeViewerSearchDialog_BtnBackText);
data = new GridData(SWT.FILL, SWT.CENTER, true, false);
data.horizontalSpan = 3;
@@ -274,26 +270,6 @@ public class TreeViewerSearchDialog extends CustomTitleAreaDialog implements ISe
fBtnBackward.addSelectionListener(l);
// Hidden if it is breadth-first search
fBtnBackward.setEnabled(fSearcher.isDepthFirst());
-
- // Progress monitor part to display or cancel searching process.
- fPmPart = new ProgressMonitorPart(container, null, true);
- data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
- fPmPart.setLayoutData(data);
- fPmPart.setVisible(false);
-
- if(fSearchable != null) {
- String title = fSearchable.getSearchTitle();
- getShell().setText(title);
- this.setTitle(title);
- }
-
- return composite;
- }
-
- protected void expansionChanged(boolean state, int client_height) {
- Point p = getShell().getSize();
- p.y = state ? p.y + client_height : p.y - client_height;
- getShell().setSize(p.x, p.y);
}
private ISearchable getSearchable() {
@@ -311,10 +287,6 @@ public class TreeViewerSearchDialog extends CustomTitleAreaDialog implements ISe
if(searchable == null) {
searchable = (ISearchable)Platform.getAdapterManager().getAdapter(element, ISearchable.class);
}
- if(searchable != null) {
- searchable.addOptionListener(this);
- fSearcher.setSearchable(searchable);
- }
return searchable;
}
}
@@ -356,6 +328,8 @@ public class TreeViewerSearchDialog extends CustomTitleAreaDialog implements ISe
fSearcher.setStartPath(rootPath);
fSearchable = getSearchable();
if (fSearchable != null) {
+ fSearchable.addOptionListener(this);
+ fSearcher.setSearchable(fSearchable);
Object element = rootPath.getLastSegment();
String text = fSearchable.getSearchMessage(element);
if (text != null) {
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java
index 2d1fa24b7..441e5d679 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java
@@ -88,5 +88,6 @@ public class Messages extends NLS {
public static String TreeViewerSearchDialog_BreadthFirst;
public static String ViewerStateManager_MkdirFailed;
public static String TreeViewerSearchDialog_BtnWrapText;
+ public static String TreeViewerSearchDialog_GeneralOptions;
public static String TreeViewerSearchDialog_UseOptions;
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties
index 0d96398db..51c52d37e 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties
@@ -56,7 +56,7 @@ NameValuePairDialog_usedOrIllegalName_error=The name ''{0}'' is reserved or alre
PreferencePage_label=General settings for Target Explorer:
QuickFilterPopup_PromptMessage=<ENTER> to confirm, <ESC> to reset
-TreeViewerSearchDialog_AdvancedOptions=Advanced Options
+TreeViewerSearchDialog_AdvancedOptions=Advanced options
TreeViewerSearchDialog_All=All
TreeViewerSearchDialog_BFS=Breadth-first search
TreeViewerSearchDialog_BtnBackText=Find backward
@@ -75,4 +75,5 @@ TreeViewerSearchDialog_Selected=Selected element
TreeViewerSearchDialog_BreadthFirst=Breadth-First Search
ViewerStateManager_MkdirFailed=Making the directory for viewerstate.xml failed\!
TreeViewerSearchDialog_BtnWrapText=Wrap search
+TreeViewerSearchDialog_GeneralOptions=General search options
TreeViewerSearchDialog_UseOptions=with option(s):
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/utils/AbstractSearchable.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/utils/AbstractSearchable.java
new file mode 100644
index 000000000..254b5872e
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/utils/AbstractSearchable.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 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.ui.utils;
+
+import org.eclipse.core.commands.common.EventManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tcf.te.ui.interfaces.IOptionListener;
+import org.eclipse.tcf.te.ui.interfaces.ISearchable;
+
+/**
+ * The base class that implements ISearchable and provide basic implementation method
+ * for adding and removing listeners.
+ */
+public abstract class AbstractSearchable extends EventManager implements ISearchable {
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.interfaces.ISearchable#addOptionListener(org.eclipse.tcf.te.ui.interfaces.IOptionListener)
+ */
+ @Override
+ public void addOptionListener(IOptionListener listener) {
+ super.addListenerObject(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.interfaces.ISearchable#removeOptionListener(org.eclipse.tcf.te.ui.interfaces.IOptionListener)
+ */
+ @Override
+ public void removeOptionListener(IOptionListener listener) {
+ super.removeListenerObject(listener);
+ }
+
+ /**
+ * Fire an option changed event to the listeners to notify
+ * the current option input has changed.
+ */
+ protected void fireOptionChanged() {
+ Object[] listeners = super.getListeners();
+ for(Object listener : listeners) {
+ ((IOptionListener)listener).optionChanged(null);
+ }
+ }
+
+ @Override
+ public void createCommonPart(Composite parent) {
+ }
+
+ @Override
+ public void createAdvancedPart(Composite parent) {
+ }
+
+ @Override
+ public boolean isInputValid() {
+ return true;
+ }
+
+ @Override
+ public String getSearchTitle() {
+ return null;
+ }
+
+ @Override
+ public String getSearchMessage(Object rootElement) {
+ return null;
+ }
+
+ @Override
+ public String getElementText(Object element) {
+ return null;
+ }
+}

Back to the top