package com.mossle.core.store; import java.io.File; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import javax.activation.DataSource; import javax.activation.FileDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.FileCopyUtils; public class FileStoreHelper implements StoreHelper { private static Logger logger = LoggerFactory .getLogger(FileStoreHelper.class); private String baseDir; public StoreResult getStore(String model, String key) throws Exception { if (key == null) { logger.info("key cannot be null"); return null; } if (key.indexOf("../") != -1) { StoreResult storeResult = new StoreResult(); storeResult.setModel(model); storeResult.setKey(key); return storeResult; } File file = new File(baseDir + "/" + model + "/" + key); if (!file.exists()) { logger.info("cannot find : {}", file); return null; } StoreResult storeResult = new StoreResult(); storeResult.setModel(model); storeResult.setKey(key); storeResult.setDataSource(new FileDataSource(file)); return storeResult; } public void removeStore(String model, String key) throws Exception { if (key.indexOf("../") != -1) { return; } File file = new File(baseDir + "/" + model + "/" + key); file.delete(); } public StoreResult saveStore(String model, DataSource dataSource) throws Exception { String prefix = new SimpleDateFormat("yyyyMMdd").format(new Date()); String suffix = this.getSuffix(dataSource.getName()); String path = prefix + "/" + UUID.randomUUID() + suffix; File dir = new File(baseDir + "/" + model + "/" + prefix); if (!dir.exists()) { boolean success = dir.mkdirs(); if (!success) { logger.error("cannot create directory : {}", dir); } } File targetFile = new File(baseDir + "/" + model + "/" + path); FileOutputStream fos = new FileOutputStream(targetFile); try { FileCopyUtils.copy(dataSource.getInputStream(), fos); fos.flush(); } finally { fos.close(); } StoreResult storeResult = new StoreResult(); storeResult.setModel(model); storeResult.setKey(path); storeResult.setDataSource(new FileDataSource(targetFile)); return storeResult; } public StoreResult saveStore(String model, String key, DataSource dataSource) throws Exception { String path = key; File dir = new File(baseDir + "/" + model); dir.mkdirs(); File targetFile = new File(baseDir + "/" + model + "/" + path); FileOutputStream fos = new FileOutputStream(targetFile); try { FileCopyUtils.copy(dataSource.getInputStream(), fos); fos.flush(); } finally { fos.close(); } StoreResult storeResult = new StoreResult(); storeResult.setModel(model); storeResult.setKey(path); storeResult.setDataSource(new FileDataSource(targetFile)); return storeResult; } public void mkdir(String path) { File dir = new File(baseDir + "/" + path); boolean result = dir.mkdirs(); logger.info("mkdir : {}", result); } public String getSuffix(String name) { int lastIndex = name.lastIndexOf("."); if (lastIndex != -1) { return name.substring(lastIndex); } else { return ""; } } public void setBaseDir(String baseDir) { this.baseDir = baseDir; } }