/** |
* compress file |
* |
* @param in |
* @param out |
* @param compressionAlgorithm |
* @param calucateCompressedMd5 |
* @param listener |
* @return |
* @throws TemplateServiceException |
*/ |
public final static String compress(File in, File out, |
String compressionAlgorithm, boolean calucateCompressedMd5, |
FileHandleListener listener) throws TemplateServiceException { |
try { |
FileInputStream fis = new FileInputStream(in); |
FileOutputStream fos = new FileOutputStream(out); |
return compress(fis, fos, compressionAlgorithm, |
calucateCompressedMd5, listener); |
} catch (FileNotFoundException e) { |
throw new TemplateServiceException( |
TemplateServiceException.FILE_NOT_EXIST_ERROR, |
new String[] { in.getPath() }); |
} |
} |
public final static String compress(InputStream in, OutputStream out, |
String compressionAlgorithm, boolean calucateCompressedMd5, |
FileHandleListener listener) throws TemplateServiceException { |
try { |
MessageDigest md = null ; |
if (calucateCompressedMd5) { |
md = MessageDigest.getInstance( "md5" ); |
out = new DigestOutputStream(out, md); |
} |
CompressorStreamFactory csf = new CompressorStreamFactory(); |
out = csf.createCompressorOutputStream( |
toCompressorAlgorithm(compressionAlgorithm), out); |
if (listener != null ) { |
out = new FileHandleOutputStream(out, listener); |
} |
FileCopyUtils.copy(in, out, null ); |
if (calucateCompressedMd5) { |
byte [] md5Bytes = md.digest(); |
String md5 = OutputFormatter.binaryToHex(md5Bytes); |
return md5; |
} |
return null ; |
} catch (NoSuchAlgorithmException e) { |
throw new TemplateServiceException( |
TemplateServiceException.UNKNOWN_ERROR); |
} catch (CompressorException e) { |
throw new TemplateServiceException( |
TemplateServiceException.UNKNOWN_ERROR); |
} |
} |
/** |
* uncompress file |
* |
* @param in |
* @param out |
* @param compressionAlgorithm |
* @param calucateUncompressedMd5 |
* @param listener |
* @return |
* @throws TemplateServiceException |
*/ |
public final static String uncompress(File in, File out, |
String compressionAlgorithm, boolean calucateUncompressedMd5, |
FileHandleListener listener) throws TemplateServiceException { |
try { |
FileInputStream fis = new FileInputStream(in); |
FileOutputStream fos = new FileOutputStream(out); |
return uncompress(fis, fos, compressionAlgorithm, |
calucateUncompressedMd5, listener); |
} catch (FileNotFoundException e) { |
throw new TemplateServiceException( |
TemplateServiceException.FILE_NOT_EXIST_ERROR, |
new String[] { in.getPath() }); |
} |
} |
public final static String uncompress(InputStream in, OutputStream out, |
String compressionAlgorithm, boolean calucateUncompressedMd5, |
FileHandleListener listener) throws TemplateServiceException { |
try { |
MessageDigest md = null ; |
if (calucateUncompressedMd5) { |
md = MessageDigest.getInstance( "md5" ); |
out = new DigestOutputStream(out, md); |
} |
CompressorStreamFactory csf = new CompressorStreamFactory(); |
in = csf.createCompressorInputStream( |
toCompressorAlgorithm(compressionAlgorithm), in); |
if (listener != null ) { |
out = new FileHandleOutputStream(out, listener); |
} |
FileCopyUtils.copy(in, out, null ); |
if (calucateUncompressedMd5) { |
byte [] md5Bytes = md.digest(); |
String md5 = OutputFormatter.binaryToHex(md5Bytes); |
return md5; |
} |
return null ; |
} catch (NoSuchAlgorithmException e) { |
throw new TemplateServiceException( |
TemplateServiceException.UNKNOWN_ERROR); |
} catch (CompressorException e) { |
throw new TemplateServiceException( |
TemplateServiceException.UNKNOWN_ERROR); |
} |
} |
public final static String toCompressorAlgorithm(String compressionAlgorithm) { |
if ( "bz2" .equalsIgnoreCase(compressionAlgorithm) |
|| "bzip2" .equalsIgnoreCase(compressionAlgorithm)) { |
return CompressorStreamFactory.BZIP2; |
} else if ( "gz" .equalsIgnoreCase(compressionAlgorithm) |
|| "gzip" .equalsIgnoreCase(compressionAlgorithm)) { |
return CompressorStreamFactory.GZIP; |
} else if ( "xz" .equalsIgnoreCase(compressionAlgorithm)) { |
return CompressorStreamFactory.XZ; |
} else if ( "pack200" .equalsIgnoreCase(compressionAlgorithm)) { |
return CompressorStreamFactory.PACK200; |
} else { |
return compressionAlgorithm; |
} |
} |