Skip to content

Commit b1ed132

Browse files
committed
implemented a dedicated method in the VersionFileService for looking up
filemetadatas of ingested tabular datafiles only (no longer relying on the mime type, which was suboptimal). #11405
1 parent a8a7ac9 commit b1ed132

3 files changed

Lines changed: 59 additions & 20 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/DatasetVersionFilesServiceBean.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,55 @@ public List<FileMetadata> getFileMetadatas(DatasetVersion datasetVersion, Intege
180180
}
181181
return typedQuery.getResultList();
182182
}
183+
184+
/**
185+
* Similar to the above, but dedicated for retrieving FileMetadatas of only
186+
* tabular datafiles in the specified DatasetVersion. Used in the metadata
187+
* export subsystem.
188+
*
189+
* @param datasetVersion the DatasetVersion to access
190+
* @param limit for pagination, can be null
191+
* @param offset for pagination, can be null
192+
* @param publicFilesOnly skip restricted, embargoed etc. files
193+
* @return a FileMetadata list from the specified DatasetVersion
194+
*/
195+
public List<FileMetadata> getTabularDataFileMetadatas(DatasetVersion datasetVersion, Integer limit, Integer offset, boolean publicFilesOnly) {
196+
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
197+
CriteriaQuery<FileMetadata> criteriaQuery = criteriaBuilder.createQuery(FileMetadata.class);
198+
199+
Root<FileMetadata> fileMetadataRoot = criteriaQuery.from(FileMetadata.class);
200+
Predicate basePredicate = criteriaBuilder.equal(fileMetadataRoot.get("datasetVersion").<String>get("id"), datasetVersion.getId());
201+
202+
Root<DataTable> dataTableRoot = criteriaQuery.from(DataTable.class);
203+
Predicate tabularPredicate = criteriaBuilder.equal(dataTableRoot.get("dataFile"), fileMetadataRoot.get("dataFile"));
204+
205+
Predicate combinedPredicate;
206+
207+
if (publicFilesOnly) {
208+
combinedPredicate = criteriaBuilder.and(basePredicate, tabularPredicate);
209+
} else {
210+
combinedPredicate = criteriaBuilder.and(basePredicate,
211+
tabularPredicate,
212+
createSearchCriteriaAccessStatusPredicate(FileSearchCriteria.FileAccessStatus.Public,
213+
criteriaBuilder,
214+
fileMetadataRoot));
215+
}
216+
217+
criteriaQuery
218+
.select(fileMetadataRoot)
219+
.where(combinedPredicate)
220+
.orderBy(criteriaBuilder.asc(fileMetadataRoot.get("label")));
221+
222+
TypedQuery<FileMetadata> typedQuery = em.createQuery(criteriaQuery);
223+
if (limit != null) {
224+
typedQuery.setMaxResults(limit);
225+
}
226+
if (offset != null) {
227+
typedQuery.setFirstResult(offset);
228+
}
229+
230+
return typedQuery.getResultList();
231+
}
183232

184233
/**
185234
* Returns the total download size of all files for a particular DatasetVersion

src/main/java/edu/harvard/iq/dataverse/export/InternalExportDataProvider.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -132,21 +132,11 @@ public JsonArray getTabularDataDetails(ExportDataContext... context) throws Expo
132132
throw new ExportException("EJB DatasetVersionFilesService is not available");
133133
}
134134

135-
FileSearchCriteria fileSearchCriteria;
136-
try {
137-
fileSearchCriteria = new FileSearchCriteria(
138-
MIME_TYPE_INGESTED_FILE,
139-
isOnlyPublicMetadataRequested(context) ? FileSearchCriteria.FileAccessStatus.Public : null,
140-
null,
141-
null,
142-
null
143-
);
144-
} catch (IllegalArgumentException e) {
145-
throw new ExportException("Failed to build a retrieval query for tabular file metadata");
146-
}
147-
148-
fileMetadatas = datasetVersionFilesService.getFileMetadatas(dv, getLength(context), getOffset(context), fileSearchCriteria, DatasetVersionFilesServiceBean.FileOrderCriteria.NameAZ);
149-
135+
fileMetadatas = datasetVersionFilesService.getTabularDataFileMetadatas(dv,
136+
getLength(context),
137+
getOffset(context),
138+
isOnlyPublicMetadataRequested(context));
139+
150140
for (FileMetadata fileMetadata : fileMetadatas) {
151141
DataFile dataFile = fileMetadata.getDataFile();
152142
jab.add(JsonPrinter.jsonDatafileWithDatatableForExport(dataFile, fileMetadata));

src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,7 +1683,7 @@ public static void createDataDscrInBatches(XMLStreamWriter xmlw, ExportDataProvi
16831683
try {
16841684
while (inProgress) {
16851685
JsonArray tabularFileDetails = exportDataProvider.getTabularDataDetails(ExportDataContext.context().withOffset(offset).withLength(DATATABLES_BATCH_SIZE));
1686-
logger.info("retrieved "+tabularFileDetails.size()+" tabular file data entries");
1686+
logger.fine("retrieved " + tabularFileDetails.size() + " tabular file data entries");
16871687

16881688
for (int i = 0; i < tabularFileDetails.size(); i++) {
16891689
JsonObject fileJson = tabularFileDetails.getJsonObject(i);
@@ -1730,7 +1730,7 @@ private static void createVariablesForDataFile(XMLStreamWriter xmlw, JsonObject
17301730
}
17311731
JsonObject dataTable = fileJson.getJsonArray("dataTables").getJsonObject(0);
17321732
JsonArray vars = dataTable.getJsonArray("dataVariables");
1733-
logger.info(vars.size() + " variables retrieved for file " + fileJson.getJsonNumber("id"));
1733+
logger.fine(vars.size() + " variables retrieved for file " + fileJson.getJsonNumber("id"));
17341734
if (vars != null) {
17351735
for (int j = 0; j < vars.size(); j++) {
17361736
createVarDDI(xmlw, vars.getJsonObject(j), fileJson.getJsonNumber("id").toString(),
@@ -2003,11 +2003,11 @@ private static void createVarDDI(XMLStreamWriter xmlw, JsonObject dvar, String f
20032003
}
20042004

20052005
private static int createFileDscrs(XMLStreamWriter xmlw, List<FileDTO> fileDtos) throws XMLStreamException {
2006-
logger.info(fileDtos.size() + "files passed");
2006+
logger.fine("total " + fileDtos.size() + " file DTOs to process for fileDscr");
20072007
String dataverseUrl = SystemConfig.getDataverseSiteUrlStatic();
20082008
int counter = 0;
20092009
for (FileDTO fileDTo : fileDtos) {
2010-
logger.info("processing file "+ fileDTo.getDataFile().getId());
2010+
logger.fine("processing file " + fileDTo.getDataFile().getId());
20112011
if (isTabularData(fileDTo)) {
20122012
xmlw.writeStartElement("fileDscr");
20132013

@@ -2094,7 +2094,7 @@ private static int createFileDscrs(XMLStreamWriter xmlw, List<FileDTO> fileDtos)
20942094
counter++;
20952095
}
20962096
}
2097-
logger.info("produced "+counter+" fileDscr entries; returning");
2097+
logger.fine("produced " + counter + " fileDscr entries.");
20982098
return counter;
20992099
}
21002100

0 commit comments

Comments
 (0)