1 31 32 package org.opencms.scheduler.jobs; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.loader.CmsImageLoader; 36 import org.opencms.main.CmsLog; 37 import org.opencms.scheduler.I_CmsScheduledJob; 38 39 import java.io.File ; 40 import java.util.Map ; 41 42 import org.apache.commons.logging.Log; 43 44 61 public class CmsImageCacheCleanupJob implements I_CmsScheduledJob { 62 63 64 public static final String PARAM_MAXAGE = "maxage"; 65 66 67 private static final Log LOG = CmsLog.getLog(CmsImageCacheCleanupJob.class); 68 69 78 public static int cleanImageCache(float maxAge) { 79 80 long expireDate = System.currentTimeMillis() - (long)(maxAge * 60f * 60f * 1000f); 82 File basedir = new File (CmsImageLoader.getImageRepositoryPath()); 83 return cleanImageCache(expireDate, basedir); 85 } 86 87 95 private static int cleanImageCache(long maxAge, File directory) { 96 97 int count = 0; 98 if (directory.canRead() && directory.isDirectory()) { 99 File [] files = directory.listFiles(); 100 for (int i = 0; i < files.length; i++) { 101 File f = files[i]; 102 if (f.isDirectory()) { 103 count += cleanImageCache(maxAge, f); 104 } 105 if (f.canWrite()) { 106 if (f.lastModified() < maxAge) { 107 try { 108 f.delete(); 109 count++; 110 } catch (Exception e) { 111 LOG.error(Messages.get().getBundle().key( 112 Messages.LOG_IMAGE_CACHE_UNABLE_TO_DELETE_1, 113 f.getAbsolutePath())); 114 } 115 } 116 } 117 } 118 if (directory.listFiles().length <= 0) { 119 try { 120 directory.delete(); 121 count++; 122 } catch (Exception e) { 123 LOG.error(Messages.get().getBundle().key( 124 Messages.LOG_IMAGE_CACHE_UNABLE_TO_DELETE_1, 125 directory.getAbsolutePath())); 126 } 127 } 128 } 129 return count; 130 } 131 132 135 public String launch(CmsObject cms, Map parameters) throws Exception { 136 137 if (!CmsImageLoader.isEnabled() || (CmsImageLoader.getImageRepositoryPath() == null)) { 138 return Messages.get().getBundle().key(Messages.LOG_IMAGE_SCALING_DISABLED_0); 140 } 141 142 String maxAgeStr = (String )parameters.get(PARAM_MAXAGE); 143 float maxAge; 144 try { 145 maxAge = Float.parseFloat(maxAgeStr); 146 } catch (NumberFormatException e) { 147 maxAge = 24f * 7f; 149 LOG.error(Messages.get().getBundle().key( 150 Messages.LOG_IMAGE_CACHE_BAD_MAXAGE_2, 151 maxAgeStr, 152 new Float (maxAge))); 153 } 154 155 int count = cleanImageCache(maxAge); 157 158 return Messages.get().getBundle().key(Messages.LOG_IMAGE_CACHE_CLEANUP_COUNT_1, new Integer (count)); 159 } 160 } | Popular Tags |