001 /* PAVLOV -- Multiple Choice Study System
002 * Copyright (C) 2000 - 2004 T.J. Willis
003 *
004 * This program is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU General Public License
006 * as published by the Free Software Foundation; either version 2
007 * of the License, or (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, write to the Free Software
016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
017 *
018 * $Header: /cvsroot/pavlov/net/sourceforge/pavlov/randommedia/ImageContentLoader.java,v 1.3 2004/05/10 14:58:54 tj_willis Exp $
019 */
020 package net.sourceforge.pavlov.randommedia;
021
022 import java.net.URL;
023 import javax.swing.ImageIcon;
024 import java.net.URLConnection;
025 import java.io.InputStream;
026 import net.sourceforge.pavlov.zipUtilities.*;
027 import org.apache.log4j.*;
028
029 /**
030 * Describe class <code>ImageContentLoader</code> here.
031 *
032 * @author <a href="mailto:tj_willis@users.sourceforge.net">T.J. Willis</a>
033 * @version 1.0
034 */
035 public class ImageContentLoader
036 implements ContentLoader
037 {
038 private Category cat
039 = Category.getInstance(ImageContentLoader.class.getName());
040 /**
041 * Describe <code>loadContent</code> method here.
042 *
043 * @param url an <code>URL</code> value
044 * @return an <code>Object</code> value
045 */
046 public Object loadContent(URL url)
047 {
048 if(url==null)return null;
049 ImageIcon tmp = null;
050 try {
051 // String bar = url.toString();
052 // if(bar==null) return (CacheObject)nullNotifier("url.toString() == null");
053 // if(bar.startsWith("jar:file:"))
054 if(JarUtilities.isInAJar(url))
055 {
056 URLConnection la = url.openConnection();
057 InputStream is = la.getInputStream();
058
059 int entrySize = la.getContentLength(); //(int)entry.getSize();
060 byte byteData[] = new byte[entrySize];
061 int readLen = 0;
062 int totalLen = 0;
063 while( readLen!= -1)
064 {
065 readLen = is.read(byteData,totalLen,entrySize - totalLen);
066 if(readLen != -1)
067 totalLen += readLen;
068 if(readLen == 0)
069 break;
070 }
071 tmp = new ImageIcon(byteData);
072 }
073 else
074 {
075 tmp = new ImageIcon(url);
076 }
077 } catch (Exception ex) {
078 cat.warn("Exception loading content",ex);
079 }catch (Error er) {
080 cat.error("Error loading content",er);
081 }
082 CacheObject foo = new CacheObject(url,tmp);
083 return foo;
084 }
085
086
087 // /**
088 // * I don't see any reason this shouldn't work, but it
089 // * coredumps in windoze...
090 // */
091 // private Object OldLoadContent(URL url)
092 // {
093 // ImageIcon tmp = null;
094 // // System.out.println("ImageContentLoader: " + url);
095
096 // // getting odd "Corrupt JPEG data: xxx extraneous bytes"
097 // // and "invalid marker..." errors...
098 // // and sun.awt.image.ImageFormatException
099 // try {
100 // tmp = new ImageIcon(url);
101 // } catch (Exception ex) {
102 //
103 // return null;
104 // }
105
106 // return new CacheObject(url,tmp);
107 // }
108
109 }