001    /**
002     * ========================================
003     * JFreeReport : a free Java report library
004     * ========================================
005     *
006     * Project Info:  http://reporting.pentaho.org/
007     *
008     * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009     *
010     * This library is free software; you can redistribute it and/or modify it under the terms
011     * of the GNU Lesser General Public License as published by the Free Software Foundation;
012     * either version 2.1 of the License, or (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public License along with this
019     * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA 02111-1307, USA.
021     *
022     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023     * in the United States and other countries.]
024     *
025     * ------------
026     * $Id: ReportProgressBar.java 3525 2007-10-16 11:43:48Z tmorgner $
027     * ------------
028     * (C) Copyright 2000-2005, by Object Refinery Limited.
029     * (C) Copyright 2005-2007, by Pentaho Corporation.
030     */
031    
032    package org.jfree.report.modules.gui.swing.common;
033    
034    import java.text.MessageFormat;
035    import java.util.Locale;
036    import java.util.ResourceBundle;
037    import javax.swing.JProgressBar;
038    import javax.swing.SwingUtilities;
039    
040    import org.jfree.report.event.ReportProgressEvent;
041    import org.jfree.report.event.ReportProgressListener;
042    import org.jfree.report.modules.gui.common.GuiCommonModule;
043    
044    public class ReportProgressBar extends JProgressBar
045    {
046      private class ScreenUpdateRunnable implements Runnable
047      {
048        private int page;
049        private int activity;
050        private int currentRow;
051    
052        private ScreenUpdateRunnable (final int activity,
053                                     final int currentRow,
054                                     final int page)
055        {
056          this.activity = activity;
057          this.currentRow = currentRow;
058          this.page = page;
059        }
060    
061        public void run ()
062        {
063          //updatePassMessage(activity, currentRow, page);
064          setValue(currentRow);
065        }
066      }
067    
068      private class ReportProgressHandler implements ReportProgressListener
069      {
070        private ReportProgressHandler()
071        {
072        }
073    
074        public void reportProcessingStarted(final ReportProgressEvent event)
075        {
076          postUpdate(event);
077        }
078    
079        public void reportProcessingUpdate(final ReportProgressEvent event)
080        {
081          postUpdate(event);
082        }
083    
084        public void reportProcessingFinished(final ReportProgressEvent event)
085        {
086          postUpdate(event);
087        }
088    
089        private void postUpdate (final ReportProgressEvent event)
090        {
091          final ScreenUpdateRunnable runnable = new ScreenUpdateRunnable
092                  (event.getActivity(), event.getRow(), event.getPage());
093          if (SwingUtilities.isEventDispatchThread())
094          {
095            runnable.run();
096          }
097          else
098          {
099            SwingUtilities.invokeLater(runnable);
100          }
101        }
102      }
103    
104      /**
105       * The reuseable message format for the page label.
106       */
107      private MessageFormat pageMessageFormatter;
108      /**
109       * The reuseable message format for the pass label.
110       */
111      private MessageFormat currentRowFormatter;
112      /**
113       * a text which describes the layouting process.
114       */
115      private String layoutText;
116      /**
117       * a text that describes the export phase of the report processing.
118       */
119      private String outputText;
120    
121      /**
122       * Localised resources.
123       */
124      private ResourceBundle resources;
125    
126      /**
127       * Creates a horizontal progress bar that displays a border but no progress string. The
128       * initial and minimum values are 0, and the maximum is 100.
129       *
130       * @see #setOrientation
131       * @see #setBorderPainted
132       * @see #setStringPainted
133       * @see #setString
134       * @see #setIndeterminate
135       */
136      public ReportProgressBar (final Locale locale)
137      {
138        setLocale(locale);
139        initialize();
140      }
141    
142      /**
143       * Creates a horizontal progress bar that displays a border but no progress
144       * string. The initial and minimum values are 0, and the maximum is 100.
145       *
146       * @see #setOrientation
147       * @see #setBorderPainted
148       * @see #setStringPainted
149       * @see #setString
150       * @see #setIndeterminate
151       */
152      public ReportProgressBar()
153      {
154        setLocale(Locale.getDefault());
155        initialize();
156      }
157    
158      private void initialize()
159      {
160        resources = ResourceBundle.getBundle(GuiCommonModule.RESOURCE_BASE_NAME);
161        pageMessageFormatter = new MessageFormat
162            (resources.getString("progress-dialog.page-label"));
163        currentRowFormatter = new MessageFormat
164            (resources.getString("progress-dialog.current-row-label"));
165      }
166    }