001 package org.shiftone.jrat.core.output;
002
003
004 import org.shiftone.jrat.core.Environment;
005 import org.shiftone.jrat.util.io.nop.NullOutputStream;
006 import org.shiftone.jrat.util.io.nop.NullPrintWriter;
007 import org.shiftone.jrat.util.io.nop.NullWriter;
008 import org.shiftone.jrat.util.log.Logger;
009
010 import java.io.*;
011
012
013 /**
014 * @author jeff@shiftone.org (Jeff Drost)
015 */
016 public class FileOutputFactory {
017
018 private static final Logger LOG = Logger.getLogger(FileOutputFactory.class);
019 private final FileOutputRegistry fileOutputRegistry;
020 private final int bufferSize;
021
022 public FileOutputFactory(FileOutputRegistry fileOutputRegistry, int bufferSize) {
023
024 this.fileOutputRegistry = fileOutputRegistry;
025 this.bufferSize = bufferSize;
026
027 }
028
029
030 public FileOutputFactory(FileOutputRegistry fileOutputRegistry) {
031 this(fileOutputRegistry, Environment.getSettings().getOutputBufferSize());
032 }
033
034
035 public OutputStream createOutputStreamSafely(File file) {
036
037 try {
038 return createOutputStream(file);
039 }
040 catch (Throwable e) {
041 LOG.error("unable to column OutputStream for '" + file + "' return /dev/null");
042
043 return NullOutputStream.INSTANCE;
044 }
045 }
046
047
048 public Writer createWriterSafely(File file) {
049
050 try {
051 return createWriter(file);
052 }
053 catch (Throwable e) {
054 LOG.error("unable to column Writer for '" + file + "' return /dev/null");
055
056 return NullWriter.INSTANCE;
057 }
058 }
059
060
061 public PrintWriter createPrintWriterSafely(File file) {
062
063 try {
064 return createPrintWriter(file);
065 }
066 catch (Throwable e) {
067 LOG.error("unable to column PrintWriter for '" + file + "' return /dev/null");
068
069 return NullPrintWriter.INSTANCE;
070 }
071 }
072
073
074 public OutputStream createOutputStream(File file) throws IOException {
075
076 LOG.info("createOutputStream " + file.getAbsolutePath());
077
078 OutputStream out = internalCreateOutputStream(file);
079
080 return fileOutputRegistry.add(out, file.getName());
081 }
082
083
084 public Writer createWriter(File file) throws IOException {
085
086 LOG.info("createWriter " + file.getAbsolutePath());
087
088 Writer out = new OutputStreamWriter(internalCreateOutputStream(file));
089
090 return fileOutputRegistry.add(out, file.getName());
091 }
092
093
094 public PrintWriter createPrintWriter(File file) throws IOException {
095
096 LOG.info("createPrintWriter " + file.getAbsolutePath());
097
098 PrintWriter out = new PrintWriter(new OutputStreamWriter(internalCreateOutputStream(file)));
099
100 return fileOutputRegistry.add(out, file.getName());
101 }
102
103
104 private OutputStream internalCreateOutputStream(File file) throws IOException {
105
106 LOG.info("createOutputStream " + file.getAbsolutePath());
107
108 File parent = file.getParentFile();
109
110 if (!parent.exists()) {
111 LOG.info("creating parent directory : " + parent.getAbsolutePath());
112 parent.mkdirs();
113 }
114
115 OutputStream out = new FileOutputStream(file);
116
117 if (bufferSize > 0) {
118 out = new BufferedOutputStream(out, bufferSize);
119 }
120
121 return out;
122 }
123
124
125 public String toString() {
126 return "FileOutputFactory[" + fileOutputRegistry + "]";
127 }
128 }