public TrackResource (final @Nonnull Track track) { this.id = track.getId().stringValue(); this.displayName = track.as(Displayable).getDisplayName(); this.record = track.getRecord().map(r -> resourceUri("record", r)); this.diskCount = track.getDiskCount(); this.diskNumber = track.getDiskNumber(); this.trackNumber = track.getTrackNumber(); this.duration = track.getDuration().map(Duration::toString); this.source = track.getSource().map(Id::toString); this.audioFile = track.asOptional(AudioFileSupplier).map(afs -> resourceUri("audiofile", afs.getAudioFile())); } }
final AudioFile audioFile = datum.as(AudioFileSupplier).getAudioFile(); final Metadata trackMetadata = datum.getMetadata(); item.addResource(audioResourceOf(audioFile)); trackMetadata.get(TRACK_NUMBER).ifPresent(item::setOriginalTrackNumber); datum.getRecord().flatMap(record -> record.asOptional(Displayable)) .map(d -> d.getDisplayName()) .ifPresent(item::setAlbum);
.collect(toMap(Track::toDumpString, Function.identity(), (u,v) -> v)); final Map<String, Track> tracksOrphanOfRecord = new HashMap<>(tracksOrphanOfArtist); tracksOrphanOfArtist.values().stream().sorted(BY_DISPLAY_NAME).forEach(track -> pw.printf(" %s%n", track.toDumpString())); pw.printf(" COUNT OF ALL TRACKS RETRIEVED BY %d QUERIES%n", trackCountQueryCount); pw.printf(" ALL TRACKS RETRIEVED BY %d QUERIES%n", getLatestQueryCount()); artistTracksFinder.stream().forEach(track -> pw.printf(" %s%n", track.toDumpString()); tracksOrphanOfArtist.remove(track.toDumpString()); assertEquals(track.getSource(), artist.getSource()); }); pw.printf(" %s%n", track.toDumpString()); tracksOrphanOfRecord.remove(track.toDumpString()); track.getPerformance().ifPresent(performance -> pw.printf("%s%n", performance.findPerformers().stream() .sorted(BY_DISPLAY_NAME) .map(this::displayNameOf) .collect(joining("\n : ", " : ", "")))); assertEquals(track.getSource(), record.getSource()); }); tracksOrphanOfArtist.values().stream().sorted(BY_DISPLAY_NAME).forEach(track -> pw.printf(" %s%n", track.toDumpString())); tracksOrphanOfRecord.values().stream().sorted(BY_DISPLAY_NAME).forEach(track -> pw.printf(" %s%n", track.toDumpString()));
/******************************************************************************************************************* * * Constrains the search to performances of the given track. * * @param track the track * @return the {@code Finder}, in fluent fashion * ******************************************************************************************************************/ @Nonnull public default PerformanceFinder ofTrack (final @Nonnull Track track) { return ofTrack(track.getId()); }
/******************************************************************************************************************* * * Exports the cover art of a record. * * @param id the record id * @return the cover art image * ******************************************************************************************************************/ @RequestMapping(value = "/record/{id}/coverart") public ResponseEntity<byte[]> getRecordCoverArt (final @PathVariable String id) { log.info("getRecordCoverArt({})", id); checkStatus(); return catalog.findTracks().inRecord(new Id(id)) .stream() .flatMap(track -> track.asMany(AudioFileSupplier).stream()) .map(afs -> afs.getAudioFile()) .flatMap(af -> af.getMetadata().getAll(ARTWORK).stream()) .findAny() .map(bytes -> bytesResponse(bytes, "image", "jpeg", "coverart.jpg")) .orElseThrow(NotFoundException::new); }
/******************************************************************************************************************* * * Constrains the search to records containing the given track. * * @param track the track * @return the {@code Finder}, in fluent fashion * ******************************************************************************************************************/ @Nonnull public default RecordFinder containingTrack (final @Nonnull Track track) { return RecordFinder.this.containingTrack(track.getId()); } }