package com.idega.core.file.tmp; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.idega.idegaweb.IWMainApplicationShutdownEvent; import com.idega.idegaweb.IWMainApplicationStartedEvent; import com.idega.util.EventTimer; import com.idega.util.IWTimestamp; /** * @author <a href="mailto:civilis@idega.com">Arūnas Vasmanas</a> * @version $Revision: 1.2 $ * * Last modified: $Date: 2008/11/05 16:39:41 $ by $Author: laddi $ */ @Scope("singleton") @Service public class TmpFilesDaemon implements ApplicationContextAware, ApplicationListener, ActionListener { public static final String THREAD_NAME = "uploaded_file_Daemon"; public static final Logger logger = Logger.getLogger(TmpFilesDaemon.class.getName()); private EventTimer fileTimer; private TmpFilesDaemon deamon; private TmpFilesManager fManager; private ApplicationContext ctx; public void start() { // checking uploaded files every hour. this.fileTimer = new EventTimer(EventTimer.THREAD_SLEEP_1_HOUR, THREAD_NAME); this.fileTimer.addActionListener(this); // Starts the thread after 5 mins. this.fileTimer.start(EventTimer.THREAD_SLEEP_5_MINUTES); } public void actionPerformed(ActionEvent event) { try { if (event.getActionCommand().equalsIgnoreCase(THREAD_NAME)) { logger.fine("[Tmp file Daemon - " + IWTimestamp.RightNow().toString() + "] - Periodical cleanup of temporary files"); getFManager().doPeriodicalCleanup(); } } catch (Exception e) { logger.log(Level.SEVERE, "Exception while doing periodical cleanup of tmp files", e); } } public void stop() { if (this.fileTimer != null) { this.fileTimer.stop(); this.fileTimer = null; } } private List<TmpFileResolver> resResolvers; @Autowired(required = false) public void setResResolvers(List<TmpFileResolver> resResolvers) { this.resResolvers = resResolvers; } public void onApplicationEvent(ApplicationEvent applicationevent) { if (applicationevent instanceof IWMainApplicationStartedEvent) { getFManager().init(resResolvers); deamon = new TmpFilesDaemon(); deamon.setApplicationContext(ctx); deamon.setFManager(getFManager()); deamon.start(); } else if (applicationevent instanceof IWMainApplicationShutdownEvent) { deamon.stop(); } } public void setApplicationContext(ApplicationContext applicationcontext) throws BeansException { ctx = applicationcontext; } public TmpFilesManager getFManager() { return fManager; } @Autowired public void setFManager(TmpFilesManager manager) { fManager = manager; } }