package org.jblooming.messaging.mimeHandlers; import javax.activation.ActivationDataFlavor; import javax.activation.DataContentHandler; import javax.activation.DataSource; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Zip are managed with an array of bytes. */ public class ApplicationZipHandler implements DataContentHandler { private static ActivationDataFlavor applicationZipDF = new ActivationDataFlavor(byte[].class, "application/zip", "ZIP archive"); public Object getContent(DataSource dataSource) throws IOException { InputStream is = dataSource.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int b; while ((b = is.read()) != -1) { baos.write(b); } return baos.toByteArray(); } public Object getTransferData(DataFlavor dataFlavor, DataSource dataSource) throws UnsupportedFlavorException, IOException { if (applicationZipDF.equals(dataFlavor)) return getContent(dataSource); else return null; } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{applicationZipDF}; } public void writeTo(Object content, String mimeType, OutputStream outputStream) throws IOException { if (!(content instanceof byte[])) throw new IOException("\"" + applicationZipDF.getMimeType() + "\" DataContentHandler requires byte[] object, " + "was given object of type " + content.getClass().toString()); outputStream.write((byte[]) content); } }