diff --git a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/model/metadata/FilesystemTableMetaDataBuilder.java b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/model/metadata/FilesystemTableMetaDataBuilder.java index 3c33eb39..7e61300f 100644 --- a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/model/metadata/FilesystemTableMetaDataBuilder.java +++ b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/base/model/metadata/FilesystemTableMetaDataBuilder.java @@ -22,12 +22,15 @@ package com.kingsrook.qqq.backend.module.filesystem.base.model.metadata; +import java.util.ArrayList; +import java.util.List; import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType; import com.kingsrook.qqq.backend.core.model.metadata.fields.DisplayFormat; import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.SectionFactory; import com.kingsrook.qqq.backend.module.filesystem.local.FilesystemBackendModule; @@ -59,6 +62,8 @@ public class FilesystemTableMetaDataBuilder private String basePath; private String glob; + private String contentsAdornmentFileNameField = "baseName"; + /******************************************************************************* @@ -66,46 +71,64 @@ public class FilesystemTableMetaDataBuilder *******************************************************************************/ public QTableMetaData buildStandardCardinalityOneTable() { + boolean includeCreateDate = true; AbstractFilesystemTableBackendDetails tableBackendDetails = switch(backend.getBackendType()) { - case S3BackendModule.BACKEND_TYPE -> new S3TableBackendDetails(); + case S3BackendModule.BACKEND_TYPE -> + { + includeCreateDate = false; + yield new S3TableBackendDetails(); + } case FilesystemBackendModule.BACKEND_TYPE -> new FilesystemTableBackendDetails(); case SFTPBackendModule.BACKEND_TYPE -> new SFTPTableBackendDetails(); default -> throw new IllegalStateException("Unexpected value: " + backend.getBackendType()); }; + List fields = new ArrayList<>(); + + fields.add((new QFieldMetaData("fileName", QFieldType.STRING))); + fields.add((new QFieldMetaData("baseName", QFieldType.STRING))); + fields.add((new QFieldMetaData("size", QFieldType.LONG).withDisplayFormat(DisplayFormat.COMMAS))); + fields.add((new QFieldMetaData("modifyDate", QFieldType.DATE_TIME))); + fields.add((new QFieldMetaData("contents", QFieldType.BLOB) + .withIsHeavy(true) + .withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD) + .withValue(AdornmentType.FileDownloadValues.FILE_NAME_FORMAT, "%s") + .withValue(AdornmentType.FileDownloadValues.FILE_NAME_FIELD, contentsAdornmentFileNameField + )))); + + QFieldSection t3Section = SectionFactory.defaultT3("modifyDate"); + + AbstractFilesystemTableBackendDetails backendDetails = tableBackendDetails + .withCardinality(Cardinality.ONE) + .withFileNameFieldName("fileName") + .withBaseNameFieldName("baseName") + .withContentsFieldName("contents") + .withSizeFieldName("size") + .withModifyDateFieldName("modifyDate") + .withBasePath(basePath) + .withGlob(glob); + + if(includeCreateDate) + { + fields.add((new QFieldMetaData("createDate", QFieldType.DATE_TIME))); + backendDetails.setCreateDateFieldName("createDate"); + + ArrayList t3FieldNames = new ArrayList<>(t3Section.getFieldNames()); + t3FieldNames.add(0, "createDate"); + t3Section.setFieldNames(t3FieldNames); + } + return new QTableMetaData() .withName(name) .withIsHidden(true) .withBackendName(backend.getName()) .withPrimaryKeyField("fileName") - - .withField(new QFieldMetaData("fileName", QFieldType.STRING)) - .withField(new QFieldMetaData("baseName", QFieldType.STRING)) - .withField(new QFieldMetaData("size", QFieldType.LONG).withDisplayFormat(DisplayFormat.COMMAS)) - .withField(new QFieldMetaData("createDate", QFieldType.DATE_TIME)) - .withField(new QFieldMetaData("modifyDate", QFieldType.DATE_TIME)) - .withField(new QFieldMetaData("contents", QFieldType.BLOB) - .withIsHeavy(true) - .withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD) - .withValue(AdornmentType.FileDownloadValues.FILE_NAME_FORMAT, "%s") - .withValue(AdornmentType.FileDownloadValues.FILE_NAME_FIELD, "fileName") - )) - + .withFields(fields) .withSection(SectionFactory.defaultT1("fileName")) .withSection(SectionFactory.defaultT2("baseName", "contents", "size")) - .withSection(SectionFactory.defaultT3("createDate", "modifyDate")) - - .withBackendDetails(tableBackendDetails - .withCardinality(Cardinality.ONE) - .withFileNameFieldName("fileName") - .withBaseNameFieldName("baseName") - .withContentsFieldName("contents") - .withSizeFieldName("size") - .withCreateDateFieldName("createDate") - .withModifyDateFieldName("modifyDate") - .withBasePath(basePath) - .withGlob(glob)); + .withSection(t3Section) + .withBackendDetails(backendDetails); } @@ -232,4 +255,35 @@ public class FilesystemTableMetaDataBuilder return (this); } + + /******************************************************************************* + ** Getter for contentsAdornmentFileNameField + *******************************************************************************/ + public String getContentsAdornmentFileNameField() + { + return (this.contentsAdornmentFileNameField); + } + + + + /******************************************************************************* + ** Setter for contentsAdornmentFileNameField + *******************************************************************************/ + public void setContentsAdornmentFileNameField(String contentsAdornmentFileNameField) + { + this.contentsAdornmentFileNameField = contentsAdornmentFileNameField; + } + + + + /******************************************************************************* + ** Fluent setter for contentsAdornmentFileNameField + *******************************************************************************/ + public FilesystemTableMetaDataBuilder withContentsAdornmentFileNameField(String contentsAdornmentFileNameField) + { + this.contentsAdornmentFileNameField = contentsAdornmentFileNameField; + return (this); + } + + }