From fc2870e07ec51ed8c3a5485c95e737486fe43fb5 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Wed, 25 Mar 2009 20:24:37 +0000 Subject: [PATCH] [243495] [api] New: Allow file name search in Remote Search to not be case sensitive --- .../files/ui/search/SystemSearchPage.java | 44 ++++++++++--- .../miners/UniversalFileSystemMiner.java | 13 +++- .../filesystem/UniversalSearchHandler.java | 7 ++- .../dstore/search/DStoreSearchService.java | 11 +++- .../clientserver/SystemSearchString.java | 62 +++++++++++++++++-- 5 files changed, 119 insertions(+), 18 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/search/SystemSearchPage.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/search/SystemSearchPage.java index ac1ed9dbf00..e7ac97a4752 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/search/SystemSearchPage.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/search/SystemSearchPage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2008 IBM Corporation and others. + * Copyright (c) 2002, 2009 IBM Corporation 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 @@ -19,6 +19,7 @@ * Martin Oberhuber (Wind River) - [196936] Hide disabled system types * David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible * David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared + * David McKnight (IBM) - [243495] [api] New: Allow file name search in Remote Search to not be case sensitive *******************************************************************************/ package org.eclipse.rse.internal.files.ui.search; @@ -117,9 +118,12 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { private Combo fileNameCombo; private Button fileNameBrowseButton; private Label fileNameHintLabel; - private Button fileNameRegexButton; + private Button fileNameCaseSensitiveButton; + private boolean initialFileNameCaseSensitive; + private Button fileNameRegexButton; private boolean initialFileNameRegex; + // file name editor private FileNameEditor fileNameEditor; @@ -141,6 +145,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { private static final String REMOTE_SEARCH_PAGE_NAME = "RemoteSearchPage"; //$NON-NLS-1$ private static final String STORE_CONFIG_CASE_SENSITIVE = "caseSensitive"; //$NON-NLS-1$ private static final String STORE_CONFIG_STRING_REGEX = "stringRegex"; //$NON-NLS-1$ + private static final String STORE_CONFIG_FILENAME_CASE_SENSITIVE = "fileNameCaseSensitive"; //$NON-NLS-1$ private static final String STORE_CONFIG_FILENAME_REGEX = "fileNameRegex"; //$NON-NLS-1$ private static final String STORE_CONFIG_INCLUDE_ARCHIVES = "includeArchives"; //$NON-NLS-1$ private static final String STORE_CONFIG_INCLUDE_SUBFOLDERS = "includeSubfolders"; //$NON-NLS-1$ @@ -153,6 +158,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { private static final String STORE_DATA_CASE_SENSITIVE = "caseSensitive"; //$NON-NLS-1$ private static final String STORE_DATA_STRING_REGEX = "stringRegex"; //$NON-NLS-1$ private static final String STORE_DATA_FILE_NAMES = "fileNames"; //$NON-NLS-1$ + private static final String STORE_DATA_FILE_NAME_CASE_SENSITIVE = "fileNameCaseSensitive"; //$NON-NLS-1$ private static final String STORE_DATA_FILE_NAME_REGEX = "fileNameRegex"; //$NON-NLS-1$ private static final String STORE_DATA_PROFILE_NAME = "profileName"; //$NON-NLS-1$ private static final String STORE_DATA_CONNECTION_NAME = "connectionName"; //$NON-NLS-1$ @@ -160,7 +166,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { private static final String STORE_DATA_INCLUDE_ARCHIVES = "includeArchives"; //$NON-NLS-1$ private static final String STORE_DATA_INCLUDE_SUBFOLDERS = "includeSubfolders"; //$NON-NLS-1$ - // a list to hold previous searche data + // a list to hold previous search data private List previousSearchData = new ArrayList(); // maximum size of data list @@ -173,6 +179,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { private boolean caseSensitive; private boolean stringRegex; private String fileNames; + private boolean fileNameCaseSensitive; private boolean fileNameRegex; private String profileName; private String connectionName; @@ -186,6 +193,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { * @param caseSensitive true if case sensitive, false otherwise. * @param stringRegex true if search string is a regular expression, false otherwise. * @param fileNames set of file names. + * @param fileNameCaseSensitive true if the file name is searched case sensitively, false otherwise. * @param fileNameRegex true if the file name is a regular expression, false otherwise. * @param profileName the profile name. * @param connectionName the connection name. @@ -194,12 +202,13 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { * @param includeSubfolders true if subfolders should also be searched, false otherwise. */ private RemoteSearchData(String searchString, boolean caseSensitive, boolean stringRegex, - String fileNames, boolean fileNameRegex, String profileName, String connectionName, + String fileNames, boolean fileNameCaseSensitive, boolean fileNameRegex, String profileName, String connectionName, String folderName, boolean includeArchives, boolean includeSubfolders) { this.searchString = searchString; this.caseSensitive = caseSensitive; this.stringRegex = stringRegex; this.fileNames = fileNames; + this.fileNameCaseSensitive = fileNameCaseSensitive; this.fileNameRegex = fileNameRegex; this.profileName = profileName; this.connectionName = connectionName; @@ -603,6 +612,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { data.caseSensitive = caseButton.getSelection(); data.stringRegex = stringRegexButton.getSelection(); data.fileNames = getFileNames(); + data.fileNameCaseSensitive = fileNameCaseSensitiveButton.getSelection(); data.fileNameRegex = fileNameRegexButton.getSelection(); data.profileName = getProfileName(); data.connectionName = getConnectionName(); @@ -617,7 +627,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { // otherwise create new data else { data = new RemoteSearchData(searchString, caseButton.getSelection(), stringRegexButton.getSelection(), - getFileNames(), fileNameRegexButton.getSelection(), getProfileName(), getConnectionName(), + getFileNames(), fileNameCaseSensitiveButton.getSelection(), fileNameRegexButton.getSelection(), getProfileName(), getConnectionName(), getFolderName(), searchArchivesButton.getSelection(), searchSubfoldersButton.getSelection()); } @@ -718,7 +728,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { // get the data corresponding to the current dialog state RemoteSearchData data = getSearchData(); - SystemSearchString searchString = new SystemSearchString(data.searchString, data.caseSensitive, data.stringRegex, data.fileNames, data.fileNameRegex, data.includeArchives, data.includeSubfolders); + SystemSearchString searchString = new SystemSearchString(data.searchString, data.caseSensitive, data.stringRegex, data.fileNames, data.fileNameCaseSensitive, data.fileNameRegex, data.includeArchives, data.includeSubfolders); IRemoteFileSubSystem subsys = getRemoteFileSubSystem(data.profileName, data.connectionName); @@ -1182,6 +1192,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { // set file name regex fileNameHintLabel.setVisible(!data.fileNameRegex); + fileNameCaseSensitiveButton.setSelection(data.fileNameCaseSensitive); fileNameRegexButton.setSelection(data.fileNameRegex); // set the remote folder properties @@ -1270,12 +1281,25 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { gd.horizontalSpan = 2; fileNameHintLabel.setLayoutData(gd); + // checkbox for case sensitivity + fileNameCaseSensitiveButton = new Button(comp, SWT.CHECK); + fileNameCaseSensitiveButton.setText(FileResources.RESID_SEARCH_CASE_BUTTON_LABEL); + fileNameCaseSensitiveButton.setToolTipText(FileResources.RESID_SEARCH_CASE_BUTTON_TOOLTIP); + + gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + fileNameCaseSensitiveButton.setLayoutData(gd); + fileNameCaseSensitiveButton.setSelection(initialFileNameCaseSensitive); + // checkbox for regex fileNameRegexButton = new Button(comp, SWT.CHECK); fileNameRegexButton.setText(FileResources.RESID_SEARCH_FILENAME_REGEX_LABEL); fileNameRegexButton.setToolTipText(FileResources.RESID_SEARCH_FILENAME_REGEX_TOOLTIP); - gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + //gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + + gd = new GridData(GridData.HORIZONTAL_ALIGN_END); + gd.horizontalSpan = 3; + fileNameRegexButton.setLayoutData(gd); fileNameRegexButton.setSelection(initialFileNameRegex); fileNameHintLabel.setVisible(!fileNameRegexButton.getSelection()); @@ -1456,6 +1480,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { IDialogSettings s = getConfigDialogSettings(); initialCaseSensitive = s.getBoolean(STORE_CONFIG_CASE_SENSITIVE); initialStringRegex = s.getBoolean(STORE_CONFIG_STRING_REGEX); + initialFileNameCaseSensitive = s.getBoolean(STORE_CONFIG_FILENAME_CASE_SENSITIVE); initialFileNameRegex = s.getBoolean(STORE_CONFIG_FILENAME_REGEX); initialSearchArchives = s.getBoolean(STORE_CONFIG_INCLUDE_ARCHIVES); initialSearchSubfolders = s.getBoolean(STORE_CONFIG_INCLUDE_SUBFOLDERS); @@ -1468,6 +1493,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { IDialogSettings s = getConfigDialogSettings(); s.put(STORE_CONFIG_CASE_SENSITIVE, caseButton.getSelection()); s.put(STORE_CONFIG_STRING_REGEX, stringRegexButton.getSelection()); + s.put(STORE_CONFIG_FILENAME_CASE_SENSITIVE, fileNameCaseSensitiveButton.getSelection()); s.put(STORE_CONFIG_FILENAME_REGEX, fileNameRegexButton.getSelection()); s.put(STORE_CONFIG_INCLUDE_ARCHIVES, searchArchivesButton.getSelection()); s.put(STORE_CONFIG_INCLUDE_SUBFOLDERS, searchSubfoldersButton.getSelection()); @@ -1505,6 +1531,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { boolean stringRegex = dataSection.getBoolean(STORE_DATA_STRING_REGEX); String fileNamesString = dataSection.get(STORE_DATA_FILE_NAMES); + boolean fileNameCaseSensitive = dataSection.getBoolean(STORE_DATA_FILE_NAME_CASE_SENSITIVE); boolean fileNameRegex = dataSection.getBoolean(STORE_DATA_FILE_NAME_REGEX); String profileName = dataSection.get(STORE_DATA_PROFILE_NAME); @@ -1514,7 +1541,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { boolean searchArchives = dataSection.getBoolean(STORE_DATA_INCLUDE_ARCHIVES); boolean searchSubfolders = dataSection.getBoolean(STORE_DATA_INCLUDE_SUBFOLDERS); - RemoteSearchData data = new RemoteSearchData(searchString, caseSensitive, stringRegex, fileNamesString, fileNameRegex, profileName, connectionName, folderName, searchArchives, searchSubfolders); + RemoteSearchData data = new RemoteSearchData(searchString, caseSensitive, stringRegex, fileNamesString, fileNameCaseSensitive, fileNameRegex, profileName, connectionName, folderName, searchArchives, searchSubfolders); previousSearchData.add(data); } } @@ -1551,6 +1578,7 @@ public class SystemSearchPage extends DialogPage implements ISearchPage { dataSection.put(STORE_DATA_STRING_REGEX, data.stringRegex); dataSection.put(STORE_DATA_FILE_NAMES, data.fileNames); + dataSection.put(STORE_DATA_FILE_NAME_CASE_SENSITIVE, data.fileNameCaseSensitive); dataSection.put(STORE_DATA_FILE_NAME_REGEX, data.fileNameRegex); dataSection.put(STORE_DATA_PROFILE_NAME, data.profileName); diff --git a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java index f1630f9b5be..3d25c4d7097 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2008 IBM Corporation and others. + * Copyright (c) 2002, 2009 IBM Corporation 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 @@ -39,6 +39,7 @@ * David McKnight (IBM) - [246234] Change of file permissions changes the file owner * David McKnight (IBM) - [250168] handleCommand should not blindly set the status to "done" * David McKnight (IBM) - [251729][dstore] problems querying symbolic link folder + * David McKnight (IBM) - [243495] [api] New: Allow file name search in Remote Search to not be case sensitive *******************************************************************************/ package org.eclipse.rse.dstore.universal.miners; @@ -260,7 +261,7 @@ public class UniversalFileSystemMiner extends Miner { * Method to do a search. */ public DataElement handleSearch(DataElement theElement, DataElement status, - String queryType, boolean fileNamesCaseSensitive) { + String queryType, boolean systemFileNamesCaseSensitive) { File fileobj = null; DataElement subject = getCommandArgument(theElement, 0); @@ -290,6 +291,7 @@ public class UniversalFileSystemMiner extends Miner { DataElement arg1 = getCommandArgument(theElement, 1); DataElement arg2 = getCommandArgument(theElement, 2); DataElement arg3 = getCommandArgument(theElement, 3); + DataElement arg4 = getCommandArgument(theElement, 4); String textString = arg1.getType(); boolean isCaseSensitive = Boolean.valueOf(arg1.getName()).booleanValue(); @@ -305,8 +307,13 @@ public class UniversalFileSystemMiner extends Miner { // boolean showHidden = Boolean.valueOf(arg3.getSource()).booleanValue(); Boolean.valueOf(arg3.getSource()).booleanValue(); + boolean isFileNamesCaseSensitive = true; + if (arg4 != null && arg4.getType().equals("file.name.case.sensitive")){ //$NON-NLS-1$ + isFileNamesCaseSensitive = Boolean.valueOf(arg4.getName()).booleanValue(); + } + SystemSearchString searchString = new SystemSearchString( - textString, isCaseSensitive, isTextRegex, fileNamesString, + textString, isCaseSensitive, isTextRegex, fileNamesString, isFileNamesCaseSensitive, isFileNamesRegex, isIncludeArchives, isIncludeSubfolders, classification); UniversalSearchHandler searchThread = new UniversalSearchHandler( diff --git a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/filesystem/UniversalSearchHandler.java b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/filesystem/UniversalSearchHandler.java index a01813bb9b0..d7cf30d5f41 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/filesystem/UniversalSearchHandler.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/filesystem/UniversalSearchHandler.java @@ -22,6 +22,7 @@ * David McKnight (IBM) - [250168] update to just search file of canonical paths (not symbolic links) * David McKnight (IBM) - [255390] memory checking * David McKnight (IBM) - [261644] [dstore] remote search improvements + * David McKnight (IBM) - [243495] [api] New: Allow file name search in Remote Search to not be case sensitive ********************************************************************************/ package org.eclipse.rse.internal.dstore.universal.miners.filesystem; @@ -117,7 +118,11 @@ public class UniversalSearchHandler extends SecuredThread implements ICancellabl // i.e. we do not want to look inside files _isFileSearch = _stringMatcher.isSearchStringEmpty() || _stringMatcher.isSearchStringAsterisk(); - _fileNameMatcher = new SystemSearchFileNameMatcher(_searchString.getFileNamesString(), fsCaseSensitive, _searchString.isFileNamesRegex()); + boolean fileNamesCaseSensitive = fsCaseSensitive; + if (fileNamesCaseSensitive){ // even though it may be a case sensitive system we may want to search case-insensitive + fileNamesCaseSensitive = searchString.isFileNamesCaseSensitive(); + } + _fileNameMatcher = new SystemSearchFileNameMatcher(_searchString.getFileNamesString(), fileNamesCaseSensitive, _searchString.isFileNamesRegex()); // classification of files to restrict the search to _classificationString = _searchString.getClassificationString(); diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/search/DStoreSearchService.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/search/DStoreSearchService.java index de4b7130d85..47d2ba490cc 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/search/DStoreSearchService.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/search/DStoreSearchService.java @@ -20,6 +20,7 @@ * David McKnight (IBM) - [216252] use SimpleSystemMessage instead of getMessage() * David McKnight (IBM) - [255390] don't assume one update means the search is done * David McKnight (IBM) - [261644] [dstore] remote search improvements + * David McKnight (IBM) - [243495] [api] New: Allow file name search in Remote Search to not be case sensitive *******************************************************************************/ package org.eclipse.rse.internal.services.dstore.search; @@ -72,6 +73,7 @@ public class DStoreSearchService extends AbstractDStoreService implements ISearc boolean isCaseSensitive = searchString.isCaseSensitive(); boolean isTextRegex = searchString.isTextStringRegex(); String fileNamesString = searchString.getFileNamesString(); + boolean isFileNamesCaseSensitive = searchString.isFileNamesCaseSensitive(); boolean isFileNamesRegex = searchString.isFileNamesRegex(); boolean includeArchives = searchString.isIncludeArchives(); boolean includeSubfolders = searchString.isIncludeSubfolders(); @@ -85,7 +87,7 @@ public class DStoreSearchService extends AbstractDStoreService implements ISearc if (queryCmd != null) { - ArrayList argList = setSearchAttributes(textString, isCaseSensitive, isTextRegex, fileNamesString, isFileNamesRegex, includeArchives, includeSubfolders, classificationString, true); + ArrayList argList = setSearchAttributes(textString, isCaseSensitive, isTextRegex, fileNamesString, isFileNamesCaseSensitive, isFileNamesRegex, includeArchives, includeSubfolders, classificationString, true); DataElement status = ds.command(queryCmd, argList, deObj); DStoreSearchResultConfiguration config = (DStoreSearchResultConfiguration) searchConfig; @@ -142,6 +144,7 @@ public class DStoreSearchService extends AbstractDStoreService implements ISearc boolean isCaseSensitive, boolean isTextRegex, String fileNamesString, + boolean isFileNamesCaseSensitive, boolean isFileNamesRegex, boolean includeArchives, boolean includeSubfolders, @@ -156,13 +159,17 @@ public class DStoreSearchService extends AbstractDStoreService implements ISearc DataElement arg1 = ds.createObject(universaltemp, textString, String.valueOf(isCaseSensitive), String.valueOf(isTextRegex)); DataElement arg2 = ds.createObject(universaltemp, fileNamesString, String.valueOf(isFileNamesRegex), classificationString); DataElement arg3 = ds.createObject(universaltemp, String.valueOf(includeArchives), String.valueOf(includeSubfolders), String.valueOf(showHidden)); + + // extra arg (for version 3.1) + DataElement arg4 = ds.createObject(universaltemp, "file.name.case.sensitive", String.valueOf(isFileNamesCaseSensitive)); // add the arguments to the argument list ArrayList argList = new ArrayList(); argList.add(arg1); argList.add(arg2); argList.add(arg3); - + argList.add(arg4); + return argList; } diff --git a/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/SystemSearchString.java b/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/SystemSearchString.java index b60cd152ec5..44385ed22de 100644 --- a/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/SystemSearchString.java +++ b/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/SystemSearchString.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2003, 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2003, 2009 IBM Corporation. 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 @@ -11,7 +11,7 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David McKnight (IBM) - [243495] [api] New: Allow file name search in Remote Search to not be case sensitive ********************************************************************************/ package org.eclipse.rse.services.clientserver; @@ -31,6 +31,11 @@ public class SystemSearchString { protected boolean isCaseSensitive; protected boolean isTextStringRegex; protected String fileNamesString; + + /** + * @since 3.1 for determining whether filename should be searched case-sensitive or not + */ + protected boolean isFileNamesCaseSensitive; protected boolean isFileNamesRegex; protected boolean includeArchives; protected boolean includeSubfolders; @@ -49,7 +54,26 @@ public class SystemSearchString { public SystemSearchString(String textString, boolean isCaseSensitive, boolean isTextStringRegex, String fileNamesString, boolean isFileNamesRegex, boolean includeArchives, boolean includeSubfolders) { - this(textString, isCaseSensitive, isTextStringRegex, fileNamesString, isFileNamesRegex, includeArchives, + this(textString, isCaseSensitive, isTextStringRegex, fileNamesString, true, isFileNamesRegex, includeArchives, + includeSubfolders); + } + + /** + * Creates a new search string. + * @param textString the text string. + * @param isCaseSensitive true if the search should be case sensitive, false otherwise. + * @param isTextStringRegex true if the text string is a regular expression, false otherwise. + * @param fileNamesString the file names pattern. + * @param isFileNamesCaseSensitive true if the file name search should be case sensitive, false otherwise. + * @param isFileNamesRegex true if the file names string is a regular expression, false otherwise. + * @param includeArchives true to search inside archives, false otherwise. + * @param includeSubfolders true to search subfolders, false otherwise. + * @since 3.1 + */ + public SystemSearchString(String textString, boolean isCaseSensitive, boolean isTextStringRegex, + String fileNamesString, boolean isFileNamesCaseSensitive, boolean isFileNamesRegex, boolean includeArchives, + boolean includeSubfolders) { + this(textString, isCaseSensitive, isTextStringRegex, fileNamesString, isFileNamesCaseSensitive, isFileNamesRegex, includeArchives, includeSubfolders, ""); //$NON-NLS-1$ } @@ -67,10 +91,31 @@ public class SystemSearchString { public SystemSearchString(String textString, boolean isCaseSensitive, boolean isTextStringRegex, String fileNamesString, boolean isFileNamesRegex, boolean includeArchives, boolean includeSubfolders, String classificationString) { + this(textString, isCaseSensitive, isTextStringRegex, fileNamesString, true, isFileNamesRegex, + includeArchives, includeSubfolders, classificationString); + } + + /** + * Creates a new search string that allows search to be restricted to files with a certain classification. + * @param textString the text string. + * @param isCaseSensitive true if the search should be case sensitive, false otherwise. + * @param isTextStringRegex true if the text string is a regular expression, false otherwise. + * @param fileNamesString the file names pattern. + * @param isFileNamesCaseSensitive true if the file name search should be case sensitive, false otherwise. + * @param isFileNamesRegex true if the file names string is a regular expression, false otherwise. + * @param includeArchives true to search inside archives, false otherwise. + * @param includeSubfolders true to search subfolders, false otherwise. + * @param classificationString the classification string that file classifications should match with. + * @since 3.1 + */ + public SystemSearchString(String textString, boolean isCaseSensitive, boolean isTextStringRegex, + String fileNamesString, boolean isFileNamesCaseSensitive, boolean isFileNamesRegex, boolean includeArchives, + boolean includeSubfolders, String classificationString) { this.textString = textString; this.isCaseSensitive = isCaseSensitive; this.isTextStringRegex = isTextStringRegex; this.fileNamesString = fileNamesString; + this.isFileNamesCaseSensitive = isFileNamesCaseSensitive; this.isFileNamesRegex = isFileNamesRegex; this.includeArchives = includeArchives; this.includeSubfolders = includeSubfolders; @@ -109,6 +154,15 @@ public class SystemSearchString { return fileNamesString; } + /** + * Returns whether the file names search is case sensitive. + * @return true if the file names search is case sensitive, false otherwise. + * @since 3.1 + */ + public boolean isFileNamesCaseSensitive() { + return isFileNamesCaseSensitive; + } + /** * Returns whether the file names string is a regular expression. * @return true if the file names string is a regular expression, false otherwise. @@ -147,7 +201,7 @@ public class SystemSearchString { */ public String toString() { return textString + " - " + isCaseSensitive + " - " + isTextStringRegex + " - " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - fileNamesString + " - " + isFileNamesRegex + " - " + includeArchives + " - " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + fileNamesString + " - " + isFileNamesCaseSensitive + " - " + isFileNamesRegex + " - " + includeArchives + " - " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ includeSubfolders + " - " + classificationString; //$NON-NLS-1$ } } \ No newline at end of file