package org.fireflow.service.file.writer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fireflow.engine.exception.ServiceInvocationException;
public class FileWriterImpl implements FileWriter {
private static final Log log = LogFactory.getLog(FileWriterImpl.class);
FileWriteServiceDef fileWriteService = null;
public FileWriteServiceDef getFileWriteService() {
return fileWriteService;
}
public void setFileWriteService(FileWriteServiceDef fileWriteService) {
this.fileWriteService = fileWriteService;
}
public void writeBytesToFile(String fileName, byte[] content) throws ServiceInvocationException{
if (StringUtils.isEmpty(fileWriteService.getDirectory())){
throw new ServiceInvocationException("FileWriteService[id="+fileWriteService.getId()+";name="+fileWriteService.getName()+"] is invalid: the directory can NOT be empty.");
}
File directory = new File(fileWriteService.getDirectory());
if (!directory.exists()){
try{
boolean b = directory.createNewFile();
if (!b){
throw new ServiceInvocationException("FileWriteService[id="+fileWriteService.getId()+";name="+fileWriteService.getName()+"] is invalid: the directory["+fileWriteService.getDirectory()+"] can NOT be created.");
}
}catch(Exception e){
log.error(e);
throw new ServiceInvocationException("FileWriteService[id="+fileWriteService.getId()+";name="+fileWriteService.getName()+"] is invalid: the directory["+fileWriteService.getDirectory()+"] can NOT be created.");
}
}
File f = new File(fileWriteService.getDirectory()+File.separator+fileName);
if (f.exists()){
//TODO 缺省覆盖模式
boolean b = f.delete();
if (!b){
throw new ServiceInvocationException("Invoking FileWriteService[id="+fileWriteService.getId()+";name="+fileWriteService.getName()+"] failed: the file["+fileName+"] is exist and can NOT be deleted.");
}
}
try{
FileOutputStream fOut = new FileOutputStream(f);
fOut.write(content);
}catch(IOException e){
throw new ServiceInvocationException(e);
}
}
public void writeStringToFile(String fileName, String content)throws ServiceInvocationException {
String s = content;
if (content==null) s = "";
try{
byte[] bytes = s.getBytes(fileWriteService.getCharset());
this.writeBytesToFile(fileName, bytes);
}catch(Exception e){
log.error(e);
}
}
}