/*
  i-net software provides programming examples for illustration only, without warranty
  either expressed or implied, including, but not limited to, the implied warranties
  of merchantability and/or fitness for a particular purpose. This programming example
  assumes that you are familiar with the programming language being demonstrated and
  the tools used to create and debug procedures. i-net software support professionals
  can help explain the functionality of a particular procedure, but they will not modify
  these examples to provide added functionality or construct procedures to meet your
  specific needs.
  © i-net software 1998-2010
*/
 
package samples.viewer;
 
import java.awt.BorderLayout;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;

import javax.swing.JFrame;

import com.inet.report.Listener;
import com.inet.viewer.SwingReportViewer;
import com.inet.viewer.URLRenderData;

/** 
 * This sample demonstrates how you can change the logging stream of i-net Clear Reports
 * viewer to any PrintStream, including a FileOutputStream which is used in this example.
 */
public class LoggingToFile extends JFrame {

    private URLRenderData renderConnection;   // This is our main render data connection - the source of our raw report data coming from our report server
    private SwingReportViewer viewer;         // Our top-level viewer object

    /*
     * Note: This listener is only started for example purposes, since the viewer requires some form of
     * report server or source of data. In your own application, you'd most likely already have a
     * report server and would simply change the URL given to URLRenderData.
     * 
     * This starts a listener on localhost, port 9000.
     */
    private static final Listener LISTENER = new Listener();

    /**
     * Change the logging stream of the Java viewer.
     */
    public LoggingToFile() {
        super( "i-net Clear Reports - Multiple Reports View" );
        try { 
            // to initialize we first create a top level ReportViewer:
            viewer = new SwingReportViewer();

            // Here we now choose to change the logging output of the viewer:
            File f = new File("C:/viewerlog.txt");
            SwingReportViewer.setLoggingStream( new PrintStream(new FileOutputStream(f)) );
            // Note that instead, we could supply any other PrintStream (we could also supply null in order
            // to deactivate log outputs completely)
            // SwingReportViewer.setLoggingStream( null );
              
            // then initialize the render data connection.
            renderConnection = new URLRenderData( LISTENER.getUrlString() + "/?report=file:c:/report1.rpt" );
        
            // addNewReportView causes a new report view to be created using the given connection as its data source, and then
            // for this newly created report to be added to the viewer.
            viewer.addNewReportView( renderConnection );

            // add the viewer to the target window
            getContentPane().add( BorderLayout.CENTER, viewer);

            pack();
        } catch(Throwable e) {
            e.printStackTrace();
        }
    }
    
    /**
     * Main method of this sample
     * @param args arguments not used
     */
    public static void main(String[] args) {
        (new LoggingToFile()).setVisible( true );
    }    
}
