001    package org.shiftone.jrat.core.output;
002    
003    
004    import org.shiftone.jrat.util.log.Logger;
005    
006    import java.io.PrintWriter;
007    import java.io.Writer;
008    
009    
010    /**
011     * @author jeff@shiftone.org (Jeff Drost)
012     */
013    public class FileOutputPrintWriter extends PrintWriter implements FileOutput {
014    
015        private static final Logger LOG = Logger.getLogger(FileOutputPrintWriter.class);
016        private FileOutputRegistry registry;
017        private String name;
018        private boolean closed = false;
019    
020        public FileOutputPrintWriter(FileOutputRegistry registry, Writer out, String name) {
021    
022            super(out);
023    
024            this.registry = registry;
025            this.name = name;
026        }
027    
028    
029        public synchronized void close() {
030    
031            if (!closed) {
032                LOG.info("closing");
033    
034                closed = true;
035    
036                registry.remove(this);
037                super.flush();
038                super.close();
039            }
040        }
041    
042    
043        public String toString() {
044            return "PrintWriter[" + name + "]";
045        }
046    }