/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.tck; import org.mule.runtime.core.util.ClassUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.UncheckedIOException; import java.net.URL; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * Provides utility methods to work with ZIP files */ public class ZipUtils { private ZipUtils() {} /** * Describes a resource that can be compressed in a ZIP file */ public static class ZipResource { private final String file; private final String alias; public ZipResource(String file, String alias) { this.file = file; this.alias = alias; } } /** * Compress a set of resource files into a ZIP file * * @param targetFile file that will contain the zipped files * @param resources resources to compress * @throws UncheckedIOException in case of any error processing the files */ public static void compress(File targetFile, ZipResource[] resources) { try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(targetFile))) { for (ZipResource zipResource : resources) { URL resourceUrl = ClassUtils.getResource(zipResource.file, ZipUtils.class); if (resourceUrl == null) { resourceUrl = new File(zipResource.file).toURI().toURL(); } try (FileInputStream in = new FileInputStream(resourceUrl.getFile())) { out.putNextEntry(new ZipEntry(zipResource.alias == null ? zipResource.file : zipResource.alias)); byte[] buffer = new byte[1024]; int count; while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); } } } } catch (IOException e) { throw new UncheckedIOException(e); } } }