THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block |
---|
public class RemoteImage extends Image { /** */ final IModel<String> urlModel; /** * @param id * @param urlModel */ public RemoteImage(String id, IModel<String> urlModel) { super(id); this.urlModel = urlModel; } /** * @see org.apache.wicket.markup.html.image.Image#getImageResource() */ @Override protected Resource getImageResource() { return new DynamicImageResource() { @Override protected byte[] getImageData() { try { URL url = new URL(urlModel.getObject()); HttpURLConnection uc = (HttpURLConnection) url.openConnection(); try { final int size; InputStream inputStream; { int tmp = uc.getContentLength(); if (tmp < 0) { inputStream = new BufferedInputStream(uc.getInputStream()); inputStream.mark(Integer.MAX_VALUE); while (0 <= inputStream.read()) { // read } inputStream.reset(); size = inputStream.available(); } else { size = tmp; inputStream = uc.getInputStream(); } } int filled = 0; byte[] imageData = new byte[size]; do { byte[] tmpData = new byte[size-filled]; int read = uc.getInputStream()inputStream.read(tmpData); System.arraycopy(tmpData, 0, imageData, filled, read); filled += read; } while (filled < size); return imageData; } finally { uc.getInputStream().close(); uc.disconnect(); } } catch (IOException e) { Utils.errorLog(RemoteImage.class, "Failed to load remote image", e); } return new byte[] {}; } @Override protected void setHeaders(WebResponse response) { response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); } }; } } |