Skip to content

Commit e5d034b

Browse files
authored
Merge pull request #12 from DataBiosphere/aj-1327-get-objects
2 parents 7b9cadb + c299852 commit e5d034b

File tree

4 files changed

+47
-12
lines changed

4 files changed

+47
-12
lines changed

cli/src/test/java/bio/terra/pfb/JavaPfbCommandTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void restoreStreams() {
3434
@Test
3535
void invalidFilePath() {
3636
testCommandStringMatches(
37-
List.of("show", "-i invalid/file/path"), errContent, "(No such file or directory)");
37+
List.of("show", "-i invalid/file/path"), errContent, "Error reading PFB Value object");
3838
}
3939

4040
@Test

library/src/main/java/bio/terra/pfb/PfbReader.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,20 +48,32 @@ public static String showMetadata(String fileLocation) throws IOException {
4848
}
4949

5050
public static List<String> show(String fileLocation) throws IOException {
51-
GenericDatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
52-
URL url = isValidUrl(fileLocation);
53-
GenericRecord genericRecord = null;
5451
List<String> data = new ArrayList<>();
55-
try (InputStream in =
56-
url != null ? readFromSignedUrl(url.toString()) : readFromLocalFile(fileLocation);
57-
DataFileStream<GenericRecord> reader = new DataFileStream<>(in, datumReader)) {
58-
// Skip Metadata Object, which should always appear first
59-
reader.next(genericRecord);
60-
while (reader.hasNext()) {
61-
genericRecord = reader.next(genericRecord);
62-
data.add(convertEnum(genericRecord.toString()));
52+
53+
try (DataFileStream<GenericRecord> records = PfbReader.getGenericRecordsStream(fileLocation)) {
54+
while (records.hasNext()) {
55+
data.add(convertEnum(records.next().toString()));
6356
}
6457
return data;
58+
} catch (IOException e) {
59+
throw new InvalidPfbException("Error reading PFB Value object");
60+
}
61+
}
62+
63+
/** DataFileStream implements Closeable and must be closed by the client code. */
64+
public static DataFileStream<GenericRecord> getGenericRecordsStream(String fileLocation)
65+
throws IOException {
66+
GenericDatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
67+
URL url = isValidUrl(fileLocation);
68+
try {
69+
InputStream in =
70+
url != null ? readFromSignedUrl(url.toString()) : readFromLocalFile(fileLocation);
71+
var reader = new DataFileStream<>(in, datumReader);
72+
// advance past metadata
73+
reader.next();
74+
return reader;
75+
} catch (Exception e) {
76+
throw new InvalidPfbException("Error reading PFB Value object");
6577
}
6678
}
6779

library/src/test/java/bio/terra/pfb/PfbReaderTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import static bio.terra.pfb.utils.CompareOutputUtils.FileExtension.JSON;
44
import static bio.terra.pfb.utils.CompareOutputUtils.FileExtension.TXT;
55
import static bio.terra.pfb.utils.CompareOutputUtils.PfbCommandType.*;
6+
import static org.junit.jupiter.api.Assertions.assertThrows;
67

8+
import bio.terra.pfb.exceptions.InvalidPfbException;
79
import bio.terra.pfb.utils.CompareOutputUtils;
810
import java.io.IOException;
911
import java.util.List;
@@ -48,6 +50,21 @@ void showMetadata(String fileName) throws IOException {
4850
CompareOutputUtils.assertJavaPfbIsPyPFB(fileName, SHOW_METADATA, "", JSON);
4951
}
5052

53+
@ParameterizedTest
54+
@MethodSource("provideTestFiles")
55+
void getGenericRecordsStream(String fileName) throws IOException {
56+
CompareOutputUtils.testDataStream(fileName);
57+
}
58+
59+
@Test
60+
@MethodSource("provideTestFiles")
61+
void getGenericRecordsStreamError() throws IOException {
62+
assertThrows(
63+
InvalidPfbException.class,
64+
() -> CompareOutputUtils.testDataStream("noFile.txt"),
65+
"Error reading PFB Value object");
66+
}
67+
5168
@ParameterizedTest
5269
@MethodSource("provideTestFiles")
5370
void showTest(String fileName) throws IOException {

library/src/test/java/bio/terra/pfb/utils/CompareOutputUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static bio.terra.pfb.utils.CompareOutputUtils.FileExtension.JSON;
44
import static org.hamcrest.MatcherAssert.assertThat;
55
import static org.hamcrest.Matchers.equalTo;
6+
import static org.junit.jupiter.api.Assertions.assertNotNull;
67

78
import bio.terra.pfb.PfbReader;
89
import java.io.IOException;
@@ -51,6 +52,11 @@ public static void compareJSONLineByLine(
5152
}
5253
}
5354

55+
public static void testDataStream(String fileName) throws IOException {
56+
String avroFilePath = getAvroFilePath(fileName, "");
57+
assertNotNull(PfbReader.getGenericRecordsStream(avroFilePath));
58+
}
59+
5460
public enum PfbCommandType {
5561
SHOW_SCHEMA("showSchema"),
5662
SHOW_METADATA("showMetadata"),

0 commit comments

Comments
 (0)