diff -r 1612dbcec451 -r 639991d0808a java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/FileStorage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/FileStorage.java Sat Feb 28 21:31:02 2009 +0100 @@ -0,0 +1,175 @@ +/* ================================================================ + * Cewolf : Chart enabling Web Objects Framework + * ================================================================ + * + * Project Info: http://cewolf.sourceforge.net + * Project Lead: Guido Laures (guido@laures.de); + * + * (C) Copyright 2002, by Guido Laures + * + * This library is free software; you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + */ + +package de.laures.cewolf.storage; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.PageContext; + +import de.laures.cewolf.CewolfException; +import de.laures.cewolf.ChartImage; +import de.laures.cewolf.Configuration; +import de.laures.cewolf.Storage; +import de.laures.cewolf.taglib.util.KeyGenerator; + +/** + * Storage for storing images as files in the web application directory as files _chart-XXXXX. + * Note that by default the files won't ever be removed. To remove saved images on VM exit set + * the FileStorage.deleteOnExit configuration parameter to "true". For example: + * + *
+ *		
+ *			storage
+ *			de.laures.cewolf.storage.FileStorage
+ *		
+ *		
+ *				FileStorage.deleteOnExit
+ *				true
+ *		 
+ *	
+ * + * @author guido + */ +public class FileStorage implements Storage { + + String basePath = null; + List stored = new ArrayList(); + private boolean deleteOnExit = false; + + /** + * @see de.laures.cewolf.Storage#storeChartImage(ChartImage, PageContext) + */ + public String storeChartImage(ChartImage cid, PageContext pageContext) { + if(contains(cid, pageContext)){ + return getKey(cid); + } + String id = getKey(cid); + ObjectOutputStream oos = null; + try { + String fileName = getFileName(id); + pageContext.getServletContext().log("Storing image to file " + fileName); + File f = new File(fileName); + if (deleteOnExit) { + f.deleteOnExit(); + } + oos = new ObjectOutputStream(new FileOutputStream(f)); + oos.writeObject(new SerializableChartImage(cid)); + oos.close(); + } catch(IOException ioex){ + ioex.printStackTrace(); + } catch(CewolfException cwex){ + cwex.printStackTrace(); + } finally { + if(oos != null){ + try { + oos.close(); + } catch(IOException ioex){ + ioex.printStackTrace(); + } + } + } + return id; + } + + /** + * @see de.laures.cewolf.Storage#getChartImage(String, HttpServletRequest) + */ + public ChartImage getChartImage(String id, HttpServletRequest request) { + ChartImage res = null; + ObjectInputStream ois = null; + try { + ois = new ObjectInputStream(new FileInputStream(getFileName(id))); + res = (ChartImage)ois.readObject(); + ois.close(); + } catch(Exception ex){ + ex.printStackTrace(); + } finally { + if(ois != null){ + try { + ois.close(); + } catch(IOException ioex){ + ioex.printStackTrace(); + } + } + } + return res; + } + + /** + * @see de.laures.cewolf.Storage#contains(ChartImage, PageContext) + */ + public boolean contains(ChartImage chartImage, PageContext pageContext) { + return new File(getFileName(chartImage)).exists(); + } + + /** + * @see de.laures.cewolf.Storage#getKey(ChartImage) + */ + public String getKey(ChartImage chartImage) { + return String.valueOf(KeyGenerator.generateKey((Serializable)chartImage)); + } + + /** + * @see de.laures.cewolf.Storage#init(ServletContext) + */ + public void init(ServletContext servletContext) throws CewolfException { + basePath = servletContext.getRealPath("/"); + Configuration config = Configuration.getInstance(servletContext); + deleteOnExit = "true".equalsIgnoreCase("" + config.getParameters().get("FileStorage.deleteOnExit")); + servletContext.log("FileStorage initialized, deleteOnExit=" + deleteOnExit); + } + + private String getFileName(ChartImage chartImage){ + return getFileName(getKey(chartImage)); + } + + private String getFileName(String id){ + return basePath + "_chart" + id; + } + + /** + * @see de.laures.cewolf.Storage#removeChartImage(java.lang.String, javax.servlet.jsp.PageContext) + */ + public String removeChartImage(String imgKey, HttpServletRequest pageContext) throws CewolfException { + File file = new File(getFileName(imgKey)); + if (file.exists()) + { + if (!file.delete()) + { + throw new CewolfException("Could not delete file " + file.getAbsolutePath()); + } + } + return imgKey; + } + +}