1 50 51 package org.openlaszlo.iv.flash.cache; 52 53 import org.openlaszlo.iv.flash.api.*; 54 import org.openlaszlo.iv.flash.util.*; 55 import org.openlaszlo.iv.flash.url.*; 56 import java.util.*; 57 import java.io.*; 58 59 public class MediaCache extends GenericCache { 60 61 private static MediaCache instance = new MediaCache(); 62 63 private MediaCache() { 64 } 65 66 public static MediaCache getInstance() { 67 return instance; 68 } 69 70 public static CacheSettings getSettings() { 71 return instance.getMySettings(); 72 } 73 74 79 public static Object getMedia( IVUrl url ) { 80 return getMedia( url.getName() ); 81 } 82 83 88 public static Object getMedia( String key ) { 89 CacheItem item = instance.getItem( key ); 90 if( item == null ) return null; 91 return item.getObject(); 92 } 93 94 102 public static void addMedia( IVUrl url, Object media, int size, boolean templCache ) { 103 long lifespan = getSettings().getDefaultExpire(); 105 if( !getSettings().isForce() ) { 106 String gmcStr = url.getParameter( "gmc" ); 107 if( gmcStr != null ) { 108 if( !Util.toBool(gmcStr, false) ) return; 109 String v = url.getParameter( "gme" ); 110 if( v != null ) { 111 lifespan = Util.toLong( v, -1L )*1000L; 112 } 113 } else { 114 if( !templCache ) return; 115 } 116 } 117 long now = System.currentTimeMillis(); 119 if( lifespan <= 0 ) { 120 lifespan = Long.MAX_VALUE-now; 121 } 122 long expire = now + lifespan; 123 CacheItem item = new MediaCacheItem( url, media, size, now, expire, getSettings().isCheckModifiedSince() ); 124 instance.addItem( item ); 125 } 126 127 protected boolean isModified( CacheItem item ) { 128 if( !getSettings().isCheckModifiedSince() ) return super.isModified( item ); 129 MediaCacheItem it = (MediaCacheItem) item; 130 it.getUrl().refresh(); 131 return it.lastModified() != it.getUrl().lastModified(); 132 } 133 134 public static class MediaCacheItem extends CacheItem { 135 private long lastModified = 0; 136 private IVUrl url; 137 138 public MediaCacheItem( IVUrl url, Object object, int size, long cacheTime, long expireAfter, boolean isCheckModifiedSince ) { 139 super( url.getName(), object, size, cacheTime, expireAfter ); 140 this.url = url; 141 if( isCheckModifiedSince ) { 142 this.lastModified = url.lastModified(); 143 } 144 } 145 146 public IVUrl getUrl() { return url; } 147 public long lastModified() { return lastModified; } 148 } 149 150 } 151 | Popular Tags |