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 net.sf.logdistiller.*;
020    import net.sf.logdistiller.LogDistillation.Group;
021    import net.sf.logdistiller.LogDistiller.Report;
022    
023    /**
024     * An empty publisher, delegating everything to a delegate publisher. The delegate publisher gets instantiated on the
025     * first use, then its libraries dependencies are needed only if the publisher is really used, not when the publisher
026     * is registered.
027     *
028     * @since 1.1
029     */
030    public class DelegatePublisher
031        extends Publisher
032    {
033        private final String id;
034    
035        private final String className;
036    
037        private Publisher delegate;
038    
039        public DelegatePublisher( String id, String className )
040        {
041            this.id = id;
042            this.className = className;
043        }
044    
045        public String getId()
046        {
047            return id;
048        }
049    
050        protected Publisher getDelegate()
051        {
052            if ( delegate == null )
053            {
054                try
055                {
056                    delegate = (Publisher) Class.forName( className ).newInstance();
057                }
058                catch ( InstantiationException ie )
059                {
060                    throw new RuntimeException( "unable to instantiate " + className, ie );
061                }
062                catch ( IllegalAccessException iae )
063                {
064                    throw new RuntimeException( "unable to instantiate " + className, iae );
065                }
066                catch ( ClassNotFoundException cnfe )
067                {
068                    throw new RuntimeException( "unable to instantiate " + className, cnfe );
069                }
070            }
071    
072            return delegate;
073        }
074    
075        public void publish( LogDistillation logdistillation, LogDistiller.Report report )
076            throws IOException, PublishException
077        {
078            getDelegate().publish( logdistillation, report );
079        }
080    
081        public void publish( Group group, Report report )
082            throws IOException, PublishException
083        {
084            getDelegate().publish( group, report );
085        }
086    }