001    package net.sf.logdistiller.publishers;
002    
003    /*
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    import java.io.*;
018    
019    import org.apache.commons.io.IOUtils;
020    
021    import net.sf.logdistiller.*;
022    
023    /**
024     * Save report of a LogDistillation in a file.
025     * <p>
026     * Parameters:
027     * <ul>
028     * <li><code>filename</code> (default: <code>report.[ext]</code> for global report, or
029     * <code><i>[group id].[ext]</i></code> for group report): the file name (relative to output directory)
030     * </ul>
031     */
032    public class FilePublisher
033        extends Publisher
034    {
035        public String getId()
036        {
037            return "file";
038        }
039    
040        public void publish( LogDistillation logdistillation, LogDistiller.Report report )
041            throws IOException
042        {
043            ReportFormat format = ReportFormats.getReportFormat( report.getFormat() );
044            String filename = report.getParam( "filename", "result." + format.getFileExtension() );
045            Writer out = new FileWriter( logdistillation.newDestinationFile( filename ) );
046            try
047            {
048                format.report( logdistillation, out );
049            }
050            finally
051            {
052                IOUtils.closeQuietly( out );
053            }
054        }
055    
056        public void publish( LogDistillation.Group group, LogDistiller.Report report )
057            throws IOException
058        {
059            ReportFormat format = ReportFormats.getReportFormat( report.getFormat() );
060            String filename = report.getParam( "filename" );
061            if ( filename == null )
062            {
063                filename = group.getDefinition().getId() + "." + format.getFileExtension();
064            }
065            Writer out = new FileWriter( group.getLogdistillation().newDestinationFile( filename ) );
066            try
067            {
068                format.report( group, out );
069            }
070            finally
071            {
072                IOUtils.closeQuietly( out );
073            }
074        }
075    }