/*
GNU GENERAL LICENSE
Copyright (C) 2006 The Lobo Project. Copyright (C) 2014 - 2017 Lobo Evolution
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
verion 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General License for more details.
You should have received a copy of the GNU General Public
along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact info: lobochief@users.sourceforge.net; ivan.difrancesco@yahoo.it
*/
package org.lobobrowser.primary.clientlets.img;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.lobobrowser.clientlet.Clientlet;
import org.lobobrowser.clientlet.ClientletContext;
import org.lobobrowser.clientlet.ClientletException;
import org.lobobrowser.clientlet.ClientletResponse;
import org.lobobrowser.html.dombl.SVGRasterizer;
import org.lobobrowser.util.io.IORoutines;
/**
* The Class ImageClientlet.
*/
public class ImageClientlet implements Clientlet {
/** The Constant logger. */
private static final Logger logger = LogManager.getLogger(ImageClientlet.class);
/**
* Instantiates a new image clientlet.
*/
public ImageClientlet() {
super();
}
@Override
public void process(ClientletContext context) throws ClientletException {
ClientletResponse response = context.getResponse();
String mimeType = response.getMimeType();
int contentLength = response.getContentLength();
URL url = response.getResponseURL();
Image image = null;
if (url != null && url.toString().endsWith(".svg")) {
SVGRasterizer r = new SVGRasterizer(url);
image = Toolkit.getDefaultToolkit().createImage(r.createBufferedImage().getSource());
} else {
byte[] imageBytes;
try {
InputStream in = response.getInputStream();
if (contentLength == -1) {
imageBytes = IORoutines.load(in);
} else {
imageBytes = IORoutines.loadExact(in, contentLength);
}
} catch (IOException ioe) {
throw new ClientletException(ioe);
}
if (logger.isInfoEnabled()) {
logger.info("process(): Loaded " + imageBytes.length + " bytes.");
}
image = Toolkit.getDefaultToolkit().createImage(imageBytes);
}
context.setResultingContent(new ImageContent(image, mimeType));
}
}