From 6f1e9413f68312be630ba774f57004df67a0b4f5 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Tue, 8 Apr 2025 13:35:08 -0500 Subject: [PATCH] Update for use-case of Get - listing a single file - to pass that file name in, to avoid listing huge directory when not needed --- .../actions/AbstractBaseFilesystemAction.java | 21 +++++++- .../sftp/actions/AbstractSFTPAction.java | 53 +++++++++++++++---- .../s3/actions/S3QueryActionTest.java | 17 ++++++ 3 files changed, 78 insertions(+), 13 deletions(-) diff --git a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/actions/AbstractBaseFilesystemAction.java b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/actions/AbstractBaseFilesystemAction.java index 3c300d27..f6acc377 100644 --- a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/actions/AbstractBaseFilesystemAction.java +++ b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/actions/AbstractBaseFilesystemAction.java @@ -59,9 +59,11 @@ import com.kingsrook.qqq.backend.core.model.metadata.variants.BackendVariantSett import com.kingsrook.qqq.backend.core.model.metadata.variants.BackendVariantsUtil; import com.kingsrook.qqq.backend.core.model.statusmessages.SystemErrorStatusMessage; import com.kingsrook.qqq.backend.core.modules.backend.implementations.utils.BackendQueryFilterUtils; +import com.kingsrook.qqq.backend.core.utils.CollectionUtils; import com.kingsrook.qqq.backend.core.utils.ExceptionUtils; import com.kingsrook.qqq.backend.core.utils.ObjectUtils; import com.kingsrook.qqq.backend.core.utils.StringUtils; +import com.kingsrook.qqq.backend.core.utils.ValueUtils; import com.kingsrook.qqq.backend.core.utils.lambdas.UnsafeSupplier; import com.kingsrook.qqq.backend.module.filesystem.base.FilesystemRecordBackendDetailFields; import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.AbstractFilesystemBackendMetaData; @@ -296,8 +298,23 @@ public abstract class AbstractBaseFilesystemAction QueryOutput queryOutput = new QueryOutput(queryInput); - String requestedPath = null; - List files = listFiles(table, queryInput.getBackend(), requestedPath); + String requestedPath = null; + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // if this is a query for a single file name, then get that file name in the requestedPath param for the listFiles call // + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + if(queryInput.getFilter() != null) + { + for(QFilterCriteria criteria : CollectionUtils.nonNullList(queryInput.getFilter().getCriteria())) + { + if(criteria.getFieldName().equals(tableDetails.getFileNameFieldName()) && criteria.getOperator().equals(QCriteriaOperator.EQUALS)) + { + requestedPath = ValueUtils.getValueAsString(criteria.getValues().get(0)); + } + } + } + + List files = listFiles(table, queryInput.getBackend(), requestedPath); switch(tableDetails.getCardinality()) { diff --git a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/sftp/actions/AbstractSFTPAction.java b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/sftp/actions/AbstractSFTPAction.java index 37db6178..507012d3 100644 --- a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/sftp/actions/AbstractSFTPAction.java +++ b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/sftp/actions/AbstractSFTPAction.java @@ -325,20 +325,51 @@ public class AbstractSFTPAction extends AbstractBaseFilesystemAction