package net.coobird.thumbnailator.tasks; import java.awt.image.BufferedImage; import java.io.IOException; import net.coobird.thumbnailator.ThumbnailParameter; import net.coobird.thumbnailator.tasks.io.ImageSink; import net.coobird.thumbnailator.tasks.io.ImageSource; /** * A {@link ThumbnailTask} which holds an {@link ImageSource} from which the * image is read or retrieved, and an {@link ImageSink} to which the thumbnail * is stored or written. *

* This class will take care of handing off information from the * {@link ImageSource} to the {@link ImageSink}. For example, the output format * that should be used by the {@link ImageSink} will be handed off if the * {@link ThumbnailParameter#ORIGINAL_FORMAT} parameter is set. * * @author coobird * * @param The source class from which the source image is retrieved * or read. * @param The destination class to which the thumbnail is stored * or written. */ public class SourceSinkThumbnailTask extends ThumbnailTask { /** * The source from which the image is retrieved or read. */ private final ImageSource source; /** * The destination to which the thumbnail is stored or written. */ private final ImageSink destination; /** * Creates a {@link ThumbnailTask} in which an image is retrived from the * specified {@link ImageSource} and written to the specified * {@link ImageSink}, using the parameters provided in the specified * {@link ThumbnailParameter}. * * @param param The parameters to use to create the thumbnail. * @param source The source from which the image is retrieved * or read from. * @param destination The destination to which the thumbnail is * stored or written to. * @throws NullPointerException If either the parameter, * {@link ImageSource} or {@link ImageSink} * is {@code null}. */ public SourceSinkThumbnailTask(ThumbnailParameter param, ImageSource source, ImageSink destination) { super(param); if (source == null) { throw new NullPointerException("ImageSource cannot be null."); } if (destination == null) { throw new NullPointerException("ImageSink cannot be null."); } source.setThumbnailParameter(param); this.source = source; destination.setThumbnailParameter(param); this.destination = destination; } @Override public BufferedImage read() throws IOException { BufferedImage img = source.read(); inputFormatName = source.getInputFormatName(); return img; } @Override public void write(BufferedImage img) throws IOException { String paramOutputFormat = param.getOutputFormat(); String formatName = null; if (ThumbnailParameter.DETERMINE_FORMAT.equals(paramOutputFormat)) { paramOutputFormat = destination.preferredOutputFormatName(); } if (paramOutputFormat == ThumbnailParameter.ORIGINAL_FORMAT) { formatName = inputFormatName; } else { formatName = paramOutputFormat; } destination.setOutputFormatName(formatName); destination.write(img); } @Override public S getSource() { return source.getSource(); } @Override public D getDestination() { return destination.getSink(); } }