diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java
index 76c240c9a5f..d7a410cb348 100644
--- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java
+++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java
@@ -1071,7 +1071,14 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
{
DataElement[] subjects = getSubjectsFor(remoteParents, names);
- dsQueryCommandMulti(subjects, null, IUniversalDataStoreConstants.C_QUERY_GET_REMOTE_OBJECT, monitor);
+ // construct default array of commands
+ String[] queryStrings = new String[remoteParents.length];
+ for (int i = 0; i < queryStrings.length; i++)
+ {
+ queryStrings[i] = IUniversalDataStoreConstants.C_QUERY_GET_REMOTE_OBJECT;
+ }
+
+ dsQueryCommandMulti(subjects, null, queryStrings, monitor);
return convertToHostFiles(subjects, "*"); //$NON-NLS-1$
}
@@ -1561,11 +1568,11 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
case IFileServiceConstants.FILE_TYPE_FILES:
queryString = IUniversalDataStoreConstants.C_QUERY_VIEW_FILES;
break;
-
+
case IFileServiceConstants.FILE_TYPE_FOLDERS:
queryString = IUniversalDataStoreConstants.C_QUERY_VIEW_FOLDERS;
- break;
-
+ break;
+
case IFileServiceConstants.FILE_TYPE_FILES_AND_FOLDERS:
default:
queryString = IUniversalDataStoreConstants.C_QUERY_VIEW_ALL;
@@ -1573,6 +1580,30 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
}
return queryString;
}
+
+ private String[] getQueryStrings(int[] fileTypes)
+ {
+ String[] queryStrings = new String[fileTypes.length];
+ for (int i = 0; i < fileTypes.length; i++)
+ {
+ switch (fileTypes[i])
+ {
+ case IFileServiceConstants.FILE_TYPE_FILES:
+ queryStrings[i] = IUniversalDataStoreConstants.C_QUERY_VIEW_FILES;
+ break;
+
+ case IFileServiceConstants.FILE_TYPE_FOLDERS:
+ queryStrings[i] = IUniversalDataStoreConstants.C_QUERY_VIEW_FOLDERS;
+ break;
+
+ case IFileServiceConstants.FILE_TYPE_FILES_AND_FOLDERS:
+ default:
+ queryStrings[i] = IUniversalDataStoreConstants.C_QUERY_VIEW_ALL;
+ break;
+ }
+ }
+ return queryStrings;
+ }
public IHostFile[] list(String remoteParent, String fileFilter, int fileType, IProgressMonitor monitor)
{
@@ -1582,12 +1613,12 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
public IHostFile[] listMulti(String[] remoteParents,
- String[] fileFilters, int fileType, IProgressMonitor monitor)
+ String[] fileFilters, int[] fileTypes, IProgressMonitor monitor)
throws SystemMessageException
{
- String queryString = getQueryString(fileType);
+ String[] queryStrings = getQueryStrings(fileTypes);
- return fetchMulti(remoteParents, fileFilters, queryString, monitor);
+ return fetchMulti(remoteParents, fileFilters, queryStrings, monitor);
}
protected String[] getPathsFor(String[] remoteParents, String[] remoteFiles)
@@ -1688,11 +1719,11 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
*
* @param remoteParents the parents to query
* @param fileFilters the filters for each parent to query
- * @param queryType the type of query (files, folders, both, etc)
+ * @param queryTypes the type of queries (for each parent) - files, folders, both, etc
* @param monitor the progress monitor
* @return the results
*/
- protected IHostFile[] fetchMulti(String[] remoteParents, String[] fileFilters, String queryType, IProgressMonitor monitor)
+ protected IHostFile[] fetchMulti(String[] remoteParents, String[] fileFilters, String[] queryTypes, IProgressMonitor monitor)
{
DataStore ds = getDataStore();
if (ds == null)
@@ -1720,7 +1751,7 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
argses[i] = args;
}
- List consolidatedResults = dsQueryCommandMulti(subjects, argses, queryType, monitor);
+ List consolidatedResults = dsQueryCommandMulti(subjects, argses, queryTypes, monitor);
List convertedResults = new ArrayList();
for (int r = 0; r < consolidatedResults.size(); r++)
{
diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/AbstractDStoreService.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/AbstractDStoreService.java
index c39cab262c5..555222043d9 100644
--- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/AbstractDStoreService.java
+++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/AbstractDStoreService.java
@@ -90,12 +90,12 @@ public abstract class AbstractDStoreService implements IDStoreService
}
/**
- * query
- * @param subject
- * @param args
- * @param command
+ * query the the remote system
+ * @param subject the subject of the query
+ * @param args the arguments for the query
+ * @param command the query command
* @param monitor
- * @return
+ * @return the array of results
*/
protected DataElement[] dsQueryCommand(DataElement subject, ArrayList args, String command, IProgressMonitor monitor)
{
@@ -146,20 +146,20 @@ public abstract class AbstractDStoreService implements IDStoreService
return new DataElement[0];
}
- protected List dsQueryCommandMulti(DataElement[] subjects, String command, IProgressMonitor monitor)
+ protected List dsQueryCommandMulti(DataElement[] subjects, String[] commands, IProgressMonitor monitor)
{
- return dsQueryCommandMulti(subjects, null, command, monitor);
+ return dsQueryCommandMulti(subjects, null, commands, monitor);
}
/**
* Query multiple subjects in one shot
* @param subjects the subjects to query
- * @param command the query command
- * @param args args for the command - may be null
+ * @param commands the query commands
+ * @param argses arguments for the command - may be null
* @param monitor the progress monitor
* @return a list of DataElement[]s containing the results of each query
*/
- protected List dsQueryCommandMulti(DataElement[] subjects, ArrayList[] argses, String command, IProgressMonitor monitor)
+ protected List dsQueryCommandMulti(DataElement[] subjects, ArrayList[] argses, String[] commands, IProgressMonitor monitor)
{
List statuses = new ArrayList();
DataStore ds = getDataStore();
@@ -170,7 +170,7 @@ public abstract class AbstractDStoreService implements IDStoreService
{
DataElement subject = subjects[i];
- DataElement queryCmd = getCommandDescriptor(subject, command);
+ DataElement queryCmd = getCommandDescriptor(subject, commands[i]);
if (queryCmd != null && ds != null)
{
DataElement status = null;
diff --git a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/AbstractFileService.java b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/AbstractFileService.java
index e17e80353fe..266c8bfd82a 100644
--- a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/AbstractFileService.java
+++ b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/AbstractFileService.java
@@ -52,13 +52,13 @@ public abstract class AbstractFileService implements IFileService
}
public IHostFile[] listMulti(String[] remoteParents,
- String[] fileFilters, int fileType, IProgressMonitor monitor)
+ String[] fileFilters, int fileTypes[], IProgressMonitor monitor)
throws SystemMessageException {
List files = new ArrayList();
for (int i = 0; i < remoteParents.length; i++)
{
- IHostFile[] result = list(remoteParents[i], fileFilters[i], fileType, monitor);
+ IHostFile[] result = list(remoteParents[i], fileFilters[i], fileTypes[i], monitor);
for (int j = 0; j < result.length; j++)
{
files.add(result[j]);
diff --git a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IFileService.java b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IFileService.java
index 7d2556fbfa5..4247644527a 100644
--- a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IFileService.java
+++ b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IFileService.java
@@ -182,14 +182,17 @@ public interface IFileService extends IService
* system from which to retrieve the collective child list.
* @param fileFilters - a set of strings that can be used to filter the children. Only
* those files matching the filter corresponding to it's remoteParent make it into the list. The interface
- * does not dictate where the filtering occurs.
- * @param fileType - indicates whether to query files, folders, both or some other type
+ * does not dictate where the filtering occurs. For each remoteParent, there must be a corresponding
+ * fileFilter.
+ * @param fileTypes - indicates whether to query files, folders, both or some other type. For
+ * each remoteParent, there must be a corresponding fileType.
+ * For the default list of available file types see IFileServiceContants
* @param monitor the monitor for this potentially long running operation
* @return the collective list of host files that reside in each of the remoteParents with it's corresponding filter.
* @throws SystemMessageException if an error occurs.
* Typically this would be one of those in the RemoteFileException family.
*/
- public IHostFile[] listMulti(String[] remoteParents, String[] fileFilters, int fileType, IProgressMonitor monitor) throws SystemMessageException;
+ public IHostFile[] listMulti(String[] remoteParents, String[] fileFilters, int[] fileTypes, IProgressMonitor monitor) throws SystemMessageException;
/**
diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java
index 964a80b2d63..8fd9239ee79 100644
--- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java
+++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java
@@ -371,10 +371,10 @@ public final class FileServiceSubSystem extends RemoteFileSubSystem implements I
* by the given file name filter. It can be null for no subsetting.
* @param parents The parent folders to list folders and files in
* @param fileNameFilters The name patterns to subset the file list by, or null to return all files.
- * @param fileType - indicates whether to query files, folders, both or some other type
+ * @param fileTypes - indicates whether to query files, folders, both or some other type
* @param monitor the progress monitor
*/
- public IRemoteFile[] listMulti(IRemoteFile[] parents, String[] fileNameFilters, int fileType, IProgressMonitor monitor) throws SystemMessageException
+ public IRemoteFile[] listMulti(IRemoteFile[] parents, String[] fileNameFilters, int[] fileTypes, IProgressMonitor monitor) throws SystemMessageException
{
String[] parentPaths = new String[parents.length];
for (int i = 0; i < parents.length; i++)
@@ -382,7 +382,7 @@ public final class FileServiceSubSystem extends RemoteFileSubSystem implements I
parentPaths[i] = parents[i].getAbsolutePath();
}
- IHostFile[] results = getFileService().listMulti(parentPaths, fileNameFilters, fileType, monitor);
+ IHostFile[] results = getFileService().listMulti(parentPaths, fileNameFilters, fileTypes, monitor);
RemoteFileContext context = getDefaultContext();
IRemoteFile[] farr = getHostFileToRemoteFileAdapter().convertToRemoteFiles(this, context, null, results);
@@ -418,15 +418,15 @@ public final class FileServiceSubSystem extends RemoteFileSubSystem implements I
/**
- * Return a list of remote folders and files in the given folder.
+ * Return a list of remote folders and/or files in the given folder.
*
- * The files part of the list is subsetted by the given file name filter.
- * It can be null for no subsetting.
+ * The files part of the list is filtered by the given file name filter.
+ * It can be null for no filtering.
* This version is called by RemoteFileSubSystemImpl's resolveFilterString(s).
* @param parent The parent folder to list folders and files in
* @param fileNameFilter The name pattern to subset the file list by, or null to return all files.
* @param context The holder of state information
- * @param fileType the type of file to query
+ * @param fileType indicates whether to filter files, folders, both or something else
* @param monitor the progress monitor
*/
public IRemoteFile[] list(IRemoteFile parent, String fileNameFilter, IRemoteFileContext context, int fileType, IProgressMonitor monitor) throws SystemMessageException
diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFileSubSystem.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFileSubSystem.java
index 1a95155b380..d1f3c99a321 100644
--- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFileSubSystem.java
+++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFileSubSystem.java
@@ -109,60 +109,71 @@ public interface IRemoteFileSubSystem extends ISubSystem {
/**
- * Return a list of all remote folders and files in the given folder. The list is not subsetted.
- * @param parents The parent folders to list folders and files in
- * @param fileType - indicates whether to query files, folders, both or some other type
+ * Return a list of all remote folders and/or files in the given folders. This list is not filtered.
+ *
+ * @param parents The parent folders to list folders and/or files in
+ * @param fileTypes - indicates whether to query files, folders, both or some other type. There
+ * should be exactly one fileType specified per parent.
+ * For the default list of available file types see IFileServiceContants
* @param monitor the progress monitor
*/
- public IRemoteFile[] listMulti(IRemoteFile[] parents, int fileType, IProgressMonitor monitor) throws SystemMessageException;
+ public IRemoteFile[] listMulti(IRemoteFile[] parents, int[] fileTypes, IProgressMonitor monitor) throws SystemMessageException;
/**
- * Return a list of remote folders and files in the given folder. Only file names are subsettable
- * by the given file name filter. It can be null for no subsetting.
+ * Return a list of remote folders and/or files in the given folder. Only file names are filtered
+ * by the given file name filters. It can be null for no sub-setting.
+ *
* @param parents The parent folders to list folders and files in
- * @param fileNameFilters The name patterns to subset the file list by, or null to return all files.
- * @param fileType - indicates whether to query files, folders, both or some other type
+ * @param fileNameFilters The name patterns to subset the file list by, or null to return all files.
+ * There should be exactly one fileNameFilter per parent.
+ * @param fileTypes - indicates whether to query files, folders, both or some other type. There
+ * should be exactly one fileType specified per parent.
+ * For the default list of available file types see IFileServiceContants
* @param monitor the progress monitor
*/
- public IRemoteFile[] listMulti(IRemoteFile[] parents, String[] fileNameFilters, int fileType, IProgressMonitor monitor) throws SystemMessageException;
+ public IRemoteFile[] listMulti(IRemoteFile[] parents, String[] fileNameFilters, int[] fileTypes, IProgressMonitor monitor) throws SystemMessageException;
/**
- * Return a list of all remote folders and files in the given folder. The list is not subsetted.
- * @param parent The parent folder to list folders and files in
+ * Return a list of all remote folders and/or files in the given folder. The list is not filtered.
+ *
+ * @param parent The parent folder to list folders and/or files in
* @param monitor the progress monitor
*/
public IRemoteFile[] list(IRemoteFile parent, IProgressMonitor monitor) throws SystemMessageException;
/**
- * Return a list of all remote folders and files in the given folder. The list is not subsetted.
+ * Return a list of all remote folders and/or files in the given folder. The list is not filtered.
+ *
* @param parent The parent folder to list folders and files in
- * @param fileType - indicates whether to query files, folders, both or some other type
+ * @param fileType - indicates whether to query files, folders, both or some other type.
+ * For the default list of available file types see IFileServiceContants
* @param monitor the progress monitor
*/
public IRemoteFile[] list(IRemoteFile parent, int fileType, IProgressMonitor monitor) throws SystemMessageException;
/**
- * Return a list of remote folders and files in the given folder. Only file names are subsettable
- * by the given file name filter. It can be null for no subsetting.
+ * Return a list of remote folders and/or files in the given folder. Only file names are filtered
+ * by the given file name filter. It can be null for no filtering.
+ *
* @param parent The parent folder to list folders and files in
* @param fileNameFilter The name pattern to subset the file list by, or null to return all files.
- * @param fileType - indicates whether to query files, folders, both or some other type
+ * @param fileType - indicates whether to query files, folders, both or some other type.
+ * For the default list of available file types see IFileServiceContants
* @param monitor the progress monitor
*/
public IRemoteFile[] list(IRemoteFile parent, String fileNameFilter, int fileType, IProgressMonitor monitor) throws SystemMessageException;
/**
- * Return a list of remote folders and files in the given folder.
- *
- * The files part of the list is subsetted by the given file name filter.
- * It can be null for no subsetting.
- * This version is called by RemoteFileSubSystemImpl's resolveFilterString(s).
+ * Return a list of remote folders and/or files in the given folder. The files part of the list is filtered
+ * by the given file name filter. It can be null for no filtering.
+ *
* @param parent The parent folder to list folders and files in
* @param fileNameFilter The name pattern to subset the file list by, or null to return all files.
* @param context The holder of state information
* - indicates whether to query files, folders, both or some other type
* @param fileType - indicates whether to query files, folders, both or some other type
+ * For the default list of available file types see IFileServiceContants
* @param monitor the progress monitor
*/
diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java
index 81430700381..f023a99c609 100644
--- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java
+++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileSubSystem.java
@@ -867,10 +867,10 @@ public abstract class RemoteFileSubSystem extends SubSystem implements IRemoteFi
/**
* Return a list of all remote folders and files in the given folder. The list is not subsetted.
* @param parents The parent folders to list folders and files in
- * @param fileType - indicates whether to query files, folders, both or some other type
+ * @param fileTypes - indicates whether to query files, folders, both or some other type
* @param monitor the progress monitor
*/
- public IRemoteFile[] listMulti(IRemoteFile[] parents, int fileType, IProgressMonitor monitor) throws SystemMessageException
+ public IRemoteFile[] listMulti(IRemoteFile[] parents, int[] fileTypes, IProgressMonitor monitor) throws SystemMessageException
{
String[] fileNameFilters = new String[parents.length];
for (int i = 0; i < parents.length; i++)
@@ -878,7 +878,7 @@ public abstract class RemoteFileSubSystem extends SubSystem implements IRemoteFi
fileNameFilters[i] = "*"; // default filter //$NON-NLS-1$
}
- return listMulti(parents, fileNameFilters, fileType, monitor);
+ return listMulti(parents, fileNameFilters, fileTypes, monitor);
}
/**
diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/subsystems/files/FileSubsystemConsistencyTestCase.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/subsystems/files/FileSubsystemConsistencyTestCase.java
index 606b97b6d9e..470de6fe99d 100644
--- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/subsystems/files/FileSubsystemConsistencyTestCase.java
+++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/subsystems/files/FileSubsystemConsistencyTestCase.java
@@ -357,7 +357,13 @@ public class FileSubsystemConsistencyTestCase extends RSEBaseConnectionTestCase
long t3 = System.currentTimeMillis();
try
{
- results = ss.listMulti(remoteFiles, IFileServiceConstants.FILE_TYPE_FILES_AND_FOLDERS, new NullProgressMonitor());
+ int[] types = new int[remoteFiles.length];
+ for (int t = 0; t < remoteFiles.length; t++)
+ {
+ types[t] = IFileServiceConstants.FILE_TYPE_FILES_AND_FOLDERS;
+ }
+
+ results = ss.listMulti(remoteFiles, types, new NullProgressMonitor());
}
catch (Exception e){
exception = e;