001package net.sf.logdistiller;
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
017import java.io.IOException;
018import java.io.Writer;
019
020/**
021 * Report formats' base class.
022 */
023public abstract class ReportFormat
024{
025    private final String id;
026
027    protected ReportFormat( String id )
028    {
029        this.id = id;
030    }
031
032    public String getId()
033    {
034        return id;
035    }
036
037    public abstract String getContentType();
038
039    public abstract String getFileExtension();
040
041    public abstract void report( LogDistillation ld, Writer output )
042        throws IOException;
043
044    public abstract void report( LogDistillation.Group group, Writer output )
045        throws IOException;
046
047    protected int addPluginsGroupReport( LogDistillation.Group group, PluginReport report )
048    {
049        LogDistillation.Plugin[] plugins = group.getPlugins();
050        int len = plugins.length;
051        int count = 0;
052        for ( int i = 0; i < len; i++ )
053        {
054            LogDistillation.Plugin plugin = plugins[i];
055            if ( plugin.getDefinition().isGroupReportEnabled() )
056            {
057                plugin.appendGroupReport( report );
058                count++;
059            }
060        }
061        return count;
062    }
063
064    protected int addPluginsGlobalReport( LogDistillation.Group group, PluginReport report )
065    {
066        LogDistillation.Plugin[] plugins = group.getPlugins();
067        int len = plugins.length;
068        int count = 0;
069        for ( int i = 0; i < len; i++ )
070        {
071            LogDistillation.Plugin plugin = plugins[i];
072            if ( plugin.getDefinition().isGlobalReportEnabled() )
073            {
074                plugin.appendGlobalReport( report );
075                count++;
076            }
077        }
078        return count;
079    }
080
081    public static abstract class PluginReport
082    {
083        public abstract void beginPluginReport( LogDistillation.Plugin plugin, String description );
084
085        public abstract void addLink( String filename, String description );
086
087        public abstract void addParam( String param, String value );
088
089        public abstract void addItem( int count, String description );
090
091        public abstract void endPluginReport();
092    }
093}