package com.idega.core.file.tmp;
import java.io.File;
import java.net.URI;
import java.util.Collection;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import com.idega.idegaweb.IWMainApplication;
import com.idega.util.CoreConstants;
import com.idega.util.EventTimer;
import com.idega.util.FileUtil;
/**
* @author <a href="mailto:arunas@idega.com">Arūnas Vasmanas</a>
* @version $Revision: 1.3 $
*
* Last modified: $Date: 2009/02/20 14:26:23 $ by $Author: civilis $
*/
@Service
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class TmpFilesManager {
static String UPLOADS_PATH;
private Collection<TmpFileResolver> resResolvers;
public void init(Collection<TmpFileResolver> resResolvers) {
IWMainApplication iwma = IWMainApplication.getDefaultIWMainApplication();
String realPath = iwma.getApplicationRealPath();
UPLOADS_PATH = realPath + "tmpFiles/";
FileUtil.createFolder(UPLOADS_PATH);
if (resResolvers != null) {
for (TmpFileResolver resResolver : resResolvers) {
String ctxFolder = resResolver.getContextPath();
if (ctxFolder.startsWith(CoreConstants.SLASH))
ctxFolder = ctxFolder.substring(1);
String custFolder = UPLOADS_PATH + ctxFolder;
FileUtil.createFolder(custFolder);
resResolver.setRealBasePath(custFolder);
}
}
this.resResolvers = resResolvers;
}
public void cleanup(String identifier, Object resource, TmpFileResolver resolver) {
Collection<File> filesToClean = resolver.getFilesToCleanUp(identifier, resource);
for (File f : filesToClean) {
if (f.exists()) {
if (f.isDirectory()) {
FileUtil.deleteNotEmptyDirectory(f);
} else {
FileUtil.delete(f);
}
}
}
}
public void doPeriodicalCleanup() {
if (resResolvers != null) {
for (TmpFileResolver resResolver : resResolvers) {
FileUtil.deleteAllFilesAndFolderInFolderOlderThan(resResolver.getRealBasePath(), EventTimer.THREAD_SLEEP_24_HOURS);
}
}
}
/**
*
* @param identifier
* - might be some specific identifier, that you want to get
* files for, e.g., variable in xforms submission data. Highly
* resolver dependent.
* @param resource
* - the same as with identifier
* @param resolver
* @return files uris. Might be local files, or stored in slide etc.
*/
public Collection<URI> getFilesUris(String identifier, Object resource, TmpFileResolver resolver) {
return resolver.resolveFilesUris(identifier, resource);
}
}