001    package railo.commons.io;
002    
003    import java.io.IOException;
004    import java.io.Writer;
005    
006    public class ForkWriter extends Writer {
007    
008            private final Writer w1;
009            private final Writer w2;
010    
011            public ForkWriter(Writer w1, Writer w2) {
012                    this.w1=w1;
013                    this.w2=w2;
014            }
015    
016            @Override
017            public Writer append(char c) throws IOException {
018                    try {
019                            w1.write(c);
020                    }
021                    finally {
022                            w2.write(c);
023                    }
024                    return this;
025            }
026    
027            @Override
028            public Writer append(CharSequence csq, int start, int end) throws IOException {
029                    try {
030                            w1.write(csq.toString(), start, end);
031                    }
032                    finally {
033                            w2.write(csq.toString(), start, end);
034                    }
035                    return this;
036            }
037    
038            @Override
039            public Writer append(CharSequence csq) throws IOException {
040                    try {
041                            w1.write(csq.toString());
042                    }
043                    finally {
044                            w2.write(csq.toString());
045                    }
046                    return this;
047            }
048    
049            @Override
050            public void write(char[] cbuf) throws IOException {
051                    try {
052                            w1.write(cbuf);
053                    }
054                    finally {
055                            w2.write(cbuf);
056                    }
057            }
058    
059            @Override
060            public void write(int c) throws IOException {
061                    try {
062                            w1.write(c);
063                    }
064                    finally {
065                            w2.write(c);
066                    }
067            }
068    
069            @Override
070            public void write(String str, int off, int len) throws IOException {
071                    try {
072                            w1.write(str, off, len);
073                    }
074                    finally {
075                            w2.write(str, off, len);
076                    }
077            }
078    
079            @Override
080            public void write(String str) throws IOException {
081                    try {
082                            w1.write(str);
083                    }
084                    finally {
085                            w2.write(str);
086                    }
087            }
088    
089            @Override
090            public void close() throws IOException {
091                    try {
092                            w1.close();
093                    }
094                    finally {
095                            w2.close();
096                    }
097            }
098    
099            @Override
100            public void flush() throws IOException {
101    
102                    try {
103                            w1.flush();
104                    }
105                    finally {
106                            w2.flush();
107                    }
108            }
109    
110            @Override
111            public void write(char[] cbuf, int off, int len) throws IOException {
112    
113                    try {
114                            w1.write(cbuf, off, len);
115                    }
116                    finally {
117                            w2.write(cbuf, off, len);
118                    }
119            }
120    
121    }