Skip to content

Commit 501f017

Browse files
author
lbownik
committed
fixed displaying of compound fields and missing exported data
1 parent 66843aa commit 501f017

2 files changed

Lines changed: 65 additions & 23 deletions

File tree

dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/search/CSVResultPrinter.java

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package edu.harvard.iq.dataverse.search;
22

33
import static java.util.Collections.emptyList;
4-
import static java.util.stream.Collectors.toList;
54

65
import java.io.ByteArrayInputStream;
76
import java.io.ByteArrayOutputStream;
87
import java.io.IOException;
98
import java.io.OutputStream;
109
import java.io.OutputStreamWriter;
10+
import java.util.ArrayList;
1111
import java.util.List;
1212

1313
import org.apache.commons.csv.CSVFormat;
@@ -34,12 +34,7 @@ public final class CSVResultPrinter {
3434
public CSVResultPrinter(final DatasetRepository datasetRepo,
3535
final MetadataBlockRepository metadataBlockRepo) {
3636
this.datasetRepo = datasetRepo;
37-
this.exportedFields = metadataBlockRepo.findSystemMetadataBlocks()
38-
.stream()
39-
.map(MetadataBlock::getDatasetFieldTypes)
40-
.flatMap(List::stream)
41-
.filter(DatasetFieldType::isExportToFile)
42-
.collect(toList());
37+
this.exportedFields = findFieldsToExportIn(metadataBlockRepo);
4338
}
4439

4540
public StreamedContent print(final List<SolrSearchResult> results) {
@@ -81,7 +76,7 @@ private void printHeaders(final CSVPrinter printer) throws IOException {
8176
+ type.getParentDatasetFieldType().getTitle() + "->"
8277
+ type.getTitle());
8378
} else {
84-
printer.print(type.getMetadataBlock().getName()
79+
printer.print(type.getMetadataBlock().getName()
8580
+ "->" + type.getTitle());
8681
}
8782
}
@@ -106,14 +101,42 @@ private List<DatasetField> getAllFieldsOfLatestVersionOf(final Long datasetId) {
106101

107102
private static String getFieldValueOfType(final List<DatasetField> fields,
108103
final DatasetFieldType type) {
109-
return fields.stream()
110-
.filter(f -> f.isOfType(type))
111-
.findAny()
112-
.map(DatasetField::getDisplayValue)
113-
.orElse(null);
104+
for(final DatasetField field : fields) {
105+
for(final DatasetField childField : field.getChildren()){
106+
if(childField.isOfType(type)) {
107+
return childField.getDisplayValue();
108+
}
109+
}
110+
if(field.isOfType(type)) {
111+
return field.getDisplayValue();
112+
}
113+
}
114+
return null;
114115
}
115116

116117
private CSVPrinter newPrinter(final OutputStream output) throws IOException {
117118
return new CSVPrinter(new OutputStreamWriter(output, "utf-8"), format);
118119
}
120+
121+
private static List<DatasetFieldType> findFieldsToExportIn(
122+
final MetadataBlockRepository metadataBlockRepo) {
123+
final ArrayList<DatasetFieldType> result = new ArrayList<>();
124+
125+
for (final MetadataBlock block : metadataBlockRepo
126+
.findSystemMetadataBlocks()) {
127+
for (final DatasetFieldType type : block.getDatasetFieldTypes()) {
128+
if (type.isCompound()) {
129+
for (final DatasetFieldType childType : type
130+
.getChildDatasetFieldTypes()) {
131+
if (childType.isExportToFile()) {
132+
result.add(childType);
133+
}
134+
}
135+
} else if (type.isExportToFile()) {
136+
result.add(type);
137+
}
138+
}
139+
}
140+
return result;
141+
}
119142
}

dataverse-webapp/src/test/java/edu/harvard/iq/dataverse/search/SearchIncludeFragmentTest.java

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public class SearchIncludeFragmentTest {
7272

7373
private DatasetFieldType type1 = new DatasetFieldType();
7474
private DatasetFieldType type2 = new DatasetFieldType();
75+
private DatasetFieldType type3 = new DatasetFieldType();
76+
private DatasetFieldType compoundType = new DatasetFieldType();
7577
private MetadataBlock metaBlock = new MetadataBlock();
7678

7779
private Dataset dataset = new Dataset();
@@ -102,17 +104,34 @@ public void setUp() {
102104
this.type1.setExportToFile(true);
103105
this.type2.setId(2L);
104106
this.type2.setTitle("abc");
107+
this.type3.setId(3L);
108+
this.type3.setTitle("ghi");
109+
this.type3.setExportToFile(true);
110+
this.type3.setParentDatasetFieldType(this.compoundType);
111+
this.compoundType.setId(4L);
112+
this.compoundType.setTitle("compound");
113+
this.compoundType.getChildDatasetFieldTypes().add(this.type3);
114+
105115

106116
this.metaBlock.setName("Block1");
107-
this.metaBlock.setDatasetFieldTypes(asList(this.type1, this.type2));
117+
this.metaBlock.setDatasetFieldTypes(asList(this.type1, this.type2, this.compoundType));
108118
this.type1.setMetadataBlock(this.metaBlock);
109119
this.type2.setMetadataBlock(this.metaBlock);
120+
this.type3.setMetadataBlock(this.metaBlock);
121+
this.compoundType.setMetadataBlock(this.metaBlock);
110122

111123
DatasetVersion dsv = new DatasetVersion();
112-
DatasetField df = new DatasetField();
113-
df.setDatasetFieldType(this.type1);
114-
df.setValue("one");
115-
dsv.setDatasetFields(asList(df));
124+
DatasetField df1 = new DatasetField();
125+
df1.setDatasetFieldType(this.type1);
126+
df1.setValue("one");
127+
DatasetField df2 = new DatasetField();
128+
df2.setDatasetFieldType(this.type3);
129+
df2.setValue("two");
130+
DatasetField compoundField = new DatasetField();
131+
compoundField.setDatasetFieldType(this.compoundType);
132+
compoundField.getChildren().add(df2);
133+
134+
dsv.setDatasetFields(asList(df1, compoundField));
116135
this.dataset.setVersions(asList(dsv));
117136
}
118137

@@ -156,8 +175,8 @@ public void searchresultsSavedToCSV_containIntendedData() throws Exception {
156175

157176
List<String> lines = readLines(file.getStream(), "utf-8");
158177
assertThat(lines.size()).isEqualTo(2);
159-
assertThat(lines.get(0)).isEqualTo("Id,Name,Title,Block1->def");
160-
assertThat(lines.get(1)).isEqualTo("id1,name1,title1,one");
178+
assertThat(lines.get(0)).isEqualTo("Id,Name,Title,Block1->def,Block1->compound->ghi");
179+
assertThat(lines.get(1)).isEqualTo("id1,name1,title1,one,two");
161180
}
162181

163182
@Test
@@ -168,7 +187,7 @@ public void emptyResultsSavedToCSV_generateFileWithColumnNamesOnly()
168187
any(), anyInt(), anyInt(), anyBoolean())).thenReturn(responseOf());
169188
when(this.searchService.search(any(SolrQuery.class))).thenReturn(asList());
170189
when(this.datasetFieldTypeRepo.findAll())
171-
.thenReturn(asList(this.type1, this.type2));
190+
.thenReturn(asList(this.type1, this.type2, this.type3));
172191
when(this.metadataBlockRepo.findSystemMetadataBlocks())
173192
.thenReturn(asList(this.metaBlock));
174193

@@ -178,11 +197,11 @@ public void emptyResultsSavedToCSV_generateFileWithColumnNamesOnly()
178197
assertThat(file.getContentEncoding()).isEqualTo("utf-8");
179198
assertThat(file.getContentType()).isEqualTo("text/csv");
180199
assertThat(file.getName()).isEqualTo("searchResults.csv");
181-
assertThat(file.getContentLength()).isEqualTo(27);
200+
assertThat(file.getContentLength()).isEqualTo(49);
182201

183202
List<String> lines = readLines(file.getStream(), "utf-8");
184203
assertThat(lines.size()).isEqualTo(1);
185-
assertThat(lines.get(0)).isEqualTo("Id,Name,Title,Block1->def");
204+
assertThat(lines.get(0)).isEqualTo("Id,Name,Title,Block1->def,Block1->compound->ghi");
186205
}
187206

188207
@Test

0 commit comments

Comments
 (0)