/* * Copyright (C) 2003 Erik Swenson - erik@oreports.com * * 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 version 2 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 Public License for * more details. * * You should have reserved a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston, MA 02111-1307, USA. * */ package org.efs.openreports.actions.image; import java.io.IOException; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import org.apache.log4j.Logger; /** * This action is used to return images for HTML pages generated * by the JasperReports HTML export process. * * Each image generated by the export process is placed in the * session scoped IMAGES_MAP. The generated HTML page calls this * action to retreive the image from the map. * * Another possible solution is to output images generated by the * export to a directory and have the HTML page refer to the directory. * This could cause a problem with multiple users because the image names * generated are not unique. * * Both solutions are not ideal and are the result of the JasperReports * HTML export process. Rewriting the export to only generate dynamic * images and not images already available as files would probably speed * up the process but is not possible with the current api. * */ public class ImageLoaderAction extends ActionSupport { private static final long serialVersionUID = -3666965473175085098L; protected static Logger log = Logger.getLogger(ImageLoaderAction.class); private String imageName; public String execute() { Map imagesMap = (Map) ActionContext.getContext().getSession().get("IMAGES_MAP"); if (imagesMap != null) { if (imageName != null) { byte[] imageData = (byte[]) imagesMap.get(imageName); HttpServletResponse response = ServletActionContext.getResponse(); try { response.setContentLength(imageData.length); ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(imageData, 0, imageData.length); ouputStream.flush(); ouputStream.close(); } catch(IOException ioe) { log.warn(ioe.toString()); } } } return NONE; } public String getImageName() { return imageName; } public void setImageName(String imageName) { this.imageName = imageName; } }