diff --git a/src/main/java/com/CDPrintable/MusicBrainzResources/MusicBrainzJSONReader.java b/src/main/java/com/CDPrintable/MusicBrainzResources/MusicBrainzJSONReader.java index 77a883e..3f76fc1 100644 --- a/src/main/java/com/CDPrintable/MusicBrainzResources/MusicBrainzJSONReader.java +++ b/src/main/java/com/CDPrintable/MusicBrainzResources/MusicBrainzJSONReader.java @@ -370,13 +370,12 @@ public DefaultTableModel getArtistsAsTableModel(MusicBrainzArtist[] artistArray) * @param trackArray The array of tracks. */ public DefaultTableModel getTracksAsTableModel(MusicBrainzTrack[] trackArray) { - String[] columnNames = {"#", "Track Name", "Artist", "Length"}; + String[] columnNames = {"#", "Track Name", "Length"}; return createTableModel(trackArray, columnNames, item -> { MusicBrainzTrack track = (MusicBrainzTrack) item; return new String[]{ getOrDefault(Integer.toString(track.getTrackNumber())), getOrDefault(track.getTitle()), - getOrDefault(track.getArtist()), getOrDefault(track.getLength()) }; }); diff --git a/src/main/java/com/CDPrintable/ProgramWindow.java b/src/main/java/com/CDPrintable/ProgramWindow.java index 6d56ab5..190833f 100644 --- a/src/main/java/com/CDPrintable/ProgramWindow.java +++ b/src/main/java/com/CDPrintable/ProgramWindow.java @@ -406,12 +406,38 @@ private void clickSearch(int row, int col, JTable table) { System.out.println("This also kinda works"); String response = getReleaseTrackListResponseString(row); MusicBrainzJSONReader reader = new MusicBrainzJSONReader(response); - DefaultTableModel model = reader.getTracksAsTableModel(reader.getReleaseTracks()); + MusicBrainzTrack[] tracks = reader.getReleaseTracks(); + DefaultTableModel model = reader.getTracksAsTableModel(tracks); + + String title = table.getValueAt(row, 0).toString(); + String artist = table.getValueAt(row, 1).toString(); + int trackCount = Integer.parseInt(table.getValueAt(row, 2).toString()); + String date = table.getValueAt(row, 3).toString(); + + JPanel mainPanel = new JPanel(new BorderLayout()); + JPanel panel = new JPanel(new BorderLayout()); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + + panel.add(new JLabel("Title: " + title)); + panel.add(new JLabel("Artist: " + artist)); + panel.add(new JLabel("Track Count: " + trackCount)); + panel.add(new JLabel("Date: " + date)); JTable trackTable = new JTable(model); resizeColumnWidths(trackTable); JScrollPane trackScrollPane = new JScrollPane(trackTable); + + mainPanel.add(panel, BorderLayout.NORTH); + mainPanel.add(trackScrollPane, BorderLayout.CENTER); + mainPanel.add(new JLabel("Would you like to add this record to your CD label?"), BorderLayout.SOUTH); + setSearchStatus("All Done!", "green"); - JOptionPane.showMessageDialog(null, trackScrollPane, "Tracks", JOptionPane.PLAIN_MESSAGE); + // the worst she can say is no... + int result = JOptionPane.showConfirmDialog(null, mainPanel, "Tracks", JOptionPane.YES_NO_OPTION); + if (result == JOptionPane.YES_OPTION) { + System.out.println("give me redbull"); + } else if (result == JOptionPane.NO_OPTION) { + System.out.println("give me beer"); + } } } } diff --git a/src/test/java/MusicBrainzObjectTests.java b/src/test/java/MusicBrainzObjectTests.java index 916fa90..a5f80d3 100644 --- a/src/test/java/MusicBrainzObjectTests.java +++ b/src/test/java/MusicBrainzObjectTests.java @@ -42,19 +42,34 @@ public void invalidJsonString() { "{\"invalidKey\": []}, cdstubs", "{\"cdstubs\": []}, cdstubs", "{\"invalidKey\": []}, artists", - "{\"artists\": []}, artists" + "{\"artists\": []}, artists", + "{\"invalidKey\": []}, tracks", + "{\"tracks\": []}, tracks" }) void testGetItemsWithInvalidJsonStructure(String jsonString, String key) { MusicBrainzJSONReader reader = new MusicBrainzJSONReader(jsonString); - if (key.equals("releases")) { - MusicBrainzRelease[] releases = reader.getReleases(); - assertNotNull(releases); - assertEquals(0, releases.length); - } else if (key.equals("cdstubs")) { - MusicBrainzCDStub[] cdStubs = reader.getCDStubs(); - assertNotNull(cdStubs); - assertEquals(0, cdStubs.length); + switch (key) { + case "releases" -> { + MusicBrainzRelease[] releases = reader.getReleases(); + assertNotNull(releases); + assertEquals(0, releases.length); + } + case "cdstubs" -> { + MusicBrainzCDStub[] cdStubs = reader.getCDStubs(); + assertNotNull(cdStubs); + assertEquals(0, cdStubs.length); + } + case "artists" -> { + MusicBrainzArtist[] artists = reader.getArtists(); + assertNotNull(artists); + assertEquals(0, artists.length); + } + case "tracks" -> { + MusicBrainzTrack[] tracks = reader.getTracks(); + assertNotNull(tracks); + assertEquals(0, tracks.length); + } } } @@ -67,30 +82,56 @@ void testGetItemsWithInvalidJsonStructure(String jsonString, String key) { @CsvSource({ "{\"releases\": [{\"title\": null, \"date\": null, \"count\": null, \"id\": null, \"artist-credit\": []}]}, releases", "{\"cdstubs\": [{\"title\": null, \"id\": null, \"count\": null, \"artist\": null}]}, cdstubs", - "{\"artists\": [{\"name\": null, \"sort-name\": null, \"country\": null, \"gender\": null, \"disambiguation\": null, \"life-span\": null}]}, artists" + "{\"artists\": [{\"name\": null, \"sort-name\": null, \"country\": null, \"gender\": null, \"disambiguation\": null, \"life-span\": null}]}, artists", + "{\"tracks\": [{\"title\": null, \"id\": null, \"count\": null, \"artist\": null}]}, tracks" }) void testGetItemsWithMissingOrNullFields(String jsonString, String key) { MusicBrainzJSONReader reader = new MusicBrainzJSONReader(jsonString); - if (key.equals("releases")) { - MusicBrainzRelease[] releases = reader.getReleases(); - assertNotNull(releases); - assertEquals(1, releases.length); - - assertNull(releases[0].getTitle()); - assertNull(releases[0].getDate()); - assertEquals(-1, releases[0].getTrackCount()); - assertNull(releases[0].getId()); - assertEquals(0, releases[0].getArtists().length); - } else if (key.equals("cdstubs")) { - MusicBrainzCDStub[] cdStubs = reader.getCDStubs(); - assertNotNull(cdStubs); - assertEquals(1, cdStubs.length); - - assertNull(cdStubs[0].getTitle()); - assertNull(cdStubs[0].getId()); - assertEquals(-1, cdStubs[0].getTrackCount()); - assertNull(cdStubs[0].getArtists()[0]); + switch (key) { + case "releases" -> { + MusicBrainzRelease[] releases = reader.getReleases(); + assertNotNull(releases); + assertEquals(1, releases.length); + + assertNull(releases[0].getTitle()); + assertNull(releases[0].getDate()); + assertEquals(-1, releases[0].getTrackCount()); + assertNull(releases[0].getId()); + assertEquals(0, releases[0].getArtists().length); + } + case "cdstubs" -> { + MusicBrainzCDStub[] cdStubs = reader.getCDStubs(); + assertNotNull(cdStubs); + assertEquals(1, cdStubs.length); + + assertNull(cdStubs[0].getTitle()); + assertNull(cdStubs[0].getId()); + assertEquals(-1, cdStubs[0].getTrackCount()); + assertNull(cdStubs[0].getArtists()[0]); + } + case "artists" -> { + MusicBrainzArtist[] artists = reader.getArtists(); + assertNotNull(artists); + assertEquals(1, artists.length); + + assertNull(artists[0].getName()); + assertNull(artists[0].getSortName()); + assertNull(artists[0].getCountry()); + assertNull(artists[0].getGender()); + assertNull(artists[0].getDisambiguation()); + assertNull(artists[0].getLifeSpan()); + } + case "tracks" -> { + MusicBrainzTrack[] tracks = reader.getTracks(); + assertNotNull(tracks); + assertEquals(1, tracks.length); + + assertNull(tracks[0].getTitle()); + assertNull(tracks[0].getId()); + assertEquals(-1, tracks[0].getTrackNumber()); + assertNull(tracks[0].getArtist()); + } } } @@ -112,27 +153,48 @@ void testGetItemsWithMissingOrNullFields(String jsonString, String key) { "cdstubs, false, {}", // case 2 "artists, true, null", // case 1 "artists, false, {}", // case 2 + "tracks, true, null", // case 1 + "tracks, false, {}", // case 2 "releases, false, {\"releases\": null}", // case 3 "cdstubs, false, {\"cdstubs\": null}", // case 3 "artists, false, {\"artists\": null}", // case 3 + "tracks, false, {\"tracks\": null}", // case 3 "releases, false, {\"invalidKey\": []}", // case 4 "cdstubs, false, {\"invalidKey\": []}", // case 4 - "artists, false, {\"invalidKey\": []}" // case 4 + "artists, false, {\"invalidKey\": []}", // case 4 + "tracks, false, {\"invalidKey\": []}" // case 4 }) void testGetTableModelWithArrayIssues(String key, boolean isNull, String readerJson) { MusicBrainzJSONReader reader = new MusicBrainzJSONReader(readerJson != null ? readerJson : ""); - if (key.equals("releases")) { - MusicBrainzRelease[] releases = isNull ? null : new MusicBrainzRelease[0]; - DefaultTableModel tableModel = reader.getReleasesAsTableModel(releases); - - assertNotNull(tableModel); - assertEquals(0, tableModel.getRowCount()); - } else if (key.equals("cdstubs")) { - MusicBrainzCDStub[] cdStubs = isNull ? null : new MusicBrainzCDStub[0]; - DefaultTableModel tableModel = reader.getCDStubsAsTableModel(cdStubs); - - assertNotNull(tableModel); - assertEquals(0, tableModel.getRowCount()); + switch (key) { + case "releases" -> { + MusicBrainzRelease[] releases = isNull ? null : new MusicBrainzRelease[0]; + DefaultTableModel tableModel = reader.getReleasesAsTableModel(releases); + + assertNotNull(tableModel); + assertEquals(0, tableModel.getRowCount()); + } + case "cdstubs" -> { + MusicBrainzCDStub[] cdStubs = isNull ? null : new MusicBrainzCDStub[0]; + DefaultTableModel tableModel = reader.getCDStubsAsTableModel(cdStubs); + + assertNotNull(tableModel); + assertEquals(0, tableModel.getRowCount()); + } + case "artists" -> { + MusicBrainzArtist[] artists = isNull ? null : new MusicBrainzArtist[0]; + DefaultTableModel tableModel = reader.getArtistsAsTableModel(artists); + + assertNotNull(tableModel); + assertEquals(0, tableModel.getRowCount()); + } + case "tracks" -> { + MusicBrainzTrack[] tracks = isNull ? null : new MusicBrainzTrack[0]; + DefaultTableModel tableModel = reader.getTracksAsTableModel(tracks); + + assertNotNull(tableModel); + assertEquals(0, tableModel.getRowCount()); + } } } @@ -229,6 +291,16 @@ void genericGetArtistsTest() { } + /** + * Test the JSON reader against the example JSON files. This is effectively + * normal operation for the program. + * This test is for Tracks. + */ + @Test + public void genericGetTracksTest() { + + } + /** * Tests the JSON reader again, but requests a table model and tests that instead. * This is effectively normal operation for the program.