/** * Returns a repeatable media with a repeatable input stream or * reader, or null if the given media is null. */ public static Media getInstance(Media media) { if (media != null && !media.inMemory() && !(media instanceof RepeatableMedia)) { if (media.isBinary()) { final InputStream data = media.getStreamData(), after = RepeatableInputStream.getInstance(data); if (data != after) return new RepeatableMedia(media, after); } else { final Reader data = media.getReaderData(), after = RepeatableReader.getInstance(data); if (data != after) return new RepeatableMedia(media, after); } } return media; }