1111package com .CDPrintable .MusicBrainzResources ;
1212
1313import com .CDPrintable .Constants ;
14+ import com .CDPrintable .ProgramWindow ;
1415import com .google .gson .*;
1516
1617import java .util .ArrayList ;
@@ -27,7 +28,7 @@ public class MusicBrainzJSONReader {
2728
2829 /*
2930 * Creates a MusicBrainzJSONReader from a JSON string.
30- * @param json The JSON string.
31+ * @param JSON The JSON string.
3132 * @throws IllegalArgumentException If the JSON is invalid.
3233 */
3334 public MusicBrainzJSONReader (String json ) throws IllegalArgumentException {
@@ -240,6 +241,49 @@ public MusicBrainzArtist[] getArtists() {
240241 }, new MusicBrainzArtist [0 ]);
241242 }
242243
244+ /**
245+ * Gets track listing from the JSON from a discID.
246+ */
247+ public MusicBrainzTrack [] getTracks () {
248+ return parseJsonArray ("tracks" , jsonObject -> {
249+ String title = jsonHasAndIsNotNull (jsonObject , "title" ) ? jsonObject .get ("title" ).getAsString () : null ;
250+ String artist = jsonHasAndIsNotNull (jsonObject , "artist" ) ? jsonObject .get ("artist" ).getAsString () : null ;
251+ int length = jsonHasAndIsNotNull (jsonObject , "length" ) ? jsonObject .get ("length" ).getAsInt () : -1 ;
252+
253+ return new MusicBrainzTrack (title , artist , length );
254+ }, new MusicBrainzTrack [0 ]);
255+ }
256+
257+ /**
258+ * Gets track listing from a release.
259+ * @return An array of MusicBrainzTrack objects.
260+ */
261+ public MusicBrainzTrack [] getReleaseTracks () {
262+ List <MusicBrainzTrack > trackList = new ArrayList <>();
263+
264+ JsonArray mediaArray = json .getAsJsonArray ("media" );
265+ for (JsonElement mediaElement : mediaArray ) {
266+ JsonObject mediaObject = mediaElement .getAsJsonObject (); // Cast each element to JsonObject
267+ JsonArray trackArray = mediaObject .getAsJsonArray ("tracks" );
268+ for (JsonElement trackElement : trackArray ) {
269+ JsonObject trackObject = trackElement .getAsJsonObject ();
270+ String title = jsonHasAndIsNotNull (trackObject , "title" ) ? trackObject .get ("title" ).getAsString () : null ;
271+ int length = jsonHasAndIsNotNull (trackObject , "length" ) ? trackObject .get ("length" ).getAsInt () : -1 ;
272+ int trackNumber = -1 ;
273+
274+ if (trackObject .has ("number" )) {
275+ trackNumber = trackObject .get ("number" ).getAsInt ();
276+ } else if (trackObject .has ("position" )) {
277+ trackNumber = trackObject .get ("position" ).getAsInt ();
278+ }
279+
280+ trackList .add (new MusicBrainzTrack (title , null , length , trackNumber ));
281+ }
282+ }
283+
284+ return trackList .toArray (new MusicBrainzTrack [0 ]);
285+ }
286+
243287 /**
244288 * Creates a table model from an array of items.
245289 * @param items The array of items. Usually a MusicBrainzRelease, MusicBrainzCDStub, etc.
@@ -266,15 +310,15 @@ private DefaultTableModel createTableModel(Object[] items, String[] columnNames,
266310 * @return The table model.
267311 */
268312 public DefaultTableModel getReleasesAsTableModel (MusicBrainzRelease [] releaseArray ) {
269- String [] columnNames = {"Release Name" , "Artist" , "Track Count" , "Date" , "" };
313+ String [] columnNames = {"Release Name" , "Artist" , "Track Count" , "Date" };
270314 return createTableModel (releaseArray , columnNames , item -> {
271315 MusicBrainzRelease release = (MusicBrainzRelease ) item ;
316+ ProgramWindow .addId (getOrDefault (release .getId ()));
272317 return new String []{
273318 getOrDefault (release .getTitle ()),
274319 getOrDefault (release .getArtistsAsString ()),
275320 getOrDefault (release .getTrackCount () != -1 ? String .valueOf (release .getTrackCount ()) : null ),
276- getOrDefault (release .getDate ()),
277- ""
321+ getOrDefault (release .getDate ())
278322 };
279323 });
280324 }
@@ -285,14 +329,14 @@ public DefaultTableModel getReleasesAsTableModel(MusicBrainzRelease[] releaseArr
285329 * @return The table model.
286330 */
287331 public DefaultTableModel getCDStubsAsTableModel (MusicBrainzCDStub [] cdStubArray ) {
288- String [] columnNames = {"Disc Name" , "Artist" , "Track Count" , "" };
332+ String [] columnNames = {"Disc Name" , "Artist" , "Track Count" };
289333 return createTableModel (cdStubArray , columnNames , item -> {
290334 MusicBrainzCDStub cdStub = (MusicBrainzCDStub ) item ;
335+ ProgramWindow .addId (getOrDefault (cdStub .getId ()));
291336 return new String []{
292337 getOrDefault (cdStub .getTitle ()),
293338 getOrDefault (cdStub .getArtistsAsString ()),
294- getOrDefault (String .valueOf (cdStub .getTrackCount ())),
295- ""
339+ getOrDefault (String .valueOf (cdStub .getTrackCount ()))
296340 };
297341 });
298342 }
@@ -303,9 +347,10 @@ public DefaultTableModel getCDStubsAsTableModel(MusicBrainzCDStub[] cdStubArray)
303347 * @return The table model.
304348 */
305349 public DefaultTableModel getArtistsAsTableModel (MusicBrainzArtist [] artistArray ) {
306- String [] columnNames = {"Name" , "Date Organised" , "Birthdate" , "Sort Name" , "Gender" , "Type" , "Disambiguation" , "Life Span" , "Country" , " " };
350+ String [] columnNames = {"Artist Name" , "Date Organised" , "Birthdate" , "Sort Name" , "Gender" , "Type" , "Disambiguation" , "Life Span" , "Country" };
307351 return createTableModel (artistArray , columnNames , item -> {
308352 MusicBrainzArtist artist = (MusicBrainzArtist ) item ;
353+ ProgramWindow .addId (getOrDefault (artist .getId ()));
309354 return new String [] {
310355 getOrDefault (artist .getName ()),
311356 getOrDefault (artist .getDateOrganized ()),
@@ -315,12 +360,28 @@ public DefaultTableModel getArtistsAsTableModel(MusicBrainzArtist[] artistArray)
315360 getOrDefault (artist .getType ()),
316361 getOrDefault (artist .getDisambiguation ()),
317362 getOrDefault (artist .getLifeSpan ()),
318- getOrDefault (artist .getCountry ()),
319- ""
363+ getOrDefault (artist .getCountry ())
320364 };
321365 });
322366 }
323367
368+ /**
369+ * Gets the tracks as a table model.
370+ * @param trackArray The array of tracks.
371+ */
372+ public DefaultTableModel getTracksAsTableModel (MusicBrainzTrack [] trackArray ) {
373+ String [] columnNames = {"#" , "Track Name" , "Artist" , "Length" };
374+ return createTableModel (trackArray , columnNames , item -> {
375+ MusicBrainzTrack track = (MusicBrainzTrack ) item ;
376+ return new String []{
377+ getOrDefault (Integer .toString (track .getTrackNumber ())),
378+ getOrDefault (track .getTitle ()),
379+ getOrDefault (track .getArtist ()),
380+ getOrDefault (track .getLength ())
381+ };
382+ });
383+ }
384+
324385 /**
325386 * Functional interface for extracting data from an item.
326387 */
0 commit comments