com.perrier.music.entity.album.AlbumZipper.java Source code

Java tutorial

Introduction

Here is the source code for com.perrier.music.entity.album.AlbumZipper.java

Source

/*
 * (c) Copyright 2016 Calabrio, Inc.
 * All Rights Reserved. www.calabrio.com LICENSED MATERIALS
 * Property of Calabrio, Inc., Minnesota, USA
 *
 * No part of this publication may be reproduced, stored or transmitted,
 * in any form or by any means (electronic, mechanical, photocopying,
 * recording or otherwise) without prior written permission from Calabrio, Inc.
 */

package com.perrier.music.entity.album;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.commons.io.IOUtils;

import com.google.inject.Inject;
import com.perrier.music.entity.track.Track;
import com.perrier.music.storage.S3StorageService;

/**
 * Creates a zip file of all the tracks for an album
 */
public class AlbumZipper {

    private static final String ZIP_PREFIX = "album-";

    private final S3StorageService storageService;

    @Inject
    public AlbumZipper(S3StorageService storageService) {
        this.storageService = storageService;
    }

    public File zip(Album album) throws IOException {

        Path zipPath = Files.createTempFile(ZIP_PREFIX + album.getId() + "-", ".zip");
        File zipFile = zipPath.toFile();

        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
            List<Track> tracks = album.getTracks();
            for (Track t : tracks) {
                String name = createFileName(t);
                ZipEntry zipEntry = new ZipEntry(name);
                zos.putNextEntry(zipEntry);

                try (InputStream audioStream = this.storageService.getAudioStream(t.getAudioStorageKey())) {
                    IOUtils.copy(audioStream, zos);
                }
            }
        }

        return zipFile;
    }

    private static String createFileName(Track track) {
        StringBuilder b = new StringBuilder();

        if (track.getNumber() != null) {
            b.append(track.getNumber()).append("-");
        }

        b.append(track.getName());

        if (track.getArtist() != null) {
            b.append("-").append(track.getArtist().getName());
        }

        b.append(".mp3");

        return b.toString();
    }
}