gt:     if (imagePanel==null) {
context: package org.openswing.swing.miscellaneous.client;
  
  
  import java.util.*;
  
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  
  import org.openswing.swing.client.*;
  import org.openswing.swing.util.client.*;
  
  
  /**
   * <p>Title: OpenSwing Framework</p>
   * <p>Description: Panel that contains a progress bar and messages related to progress state.</p>
   * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p>
   *
   * <p> This file is part of OpenSwing Framework.
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the (LGPL) Lesser General Public
   * License as published by the Free Software Foundation;
   *
   *                GNU LESSER GENERAL PUBLIC LICENSE
   *                 Version 2.1, February 1999
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Library General Public License for more details.
   *
   * You should have received a copy of the GNU Library General Public
   * License along with this library; if not, write to the Free
   * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   *
   *       The author may be contacted at:
   *           maurocarniel@tin.it</p>
   *
   * @author Mauro Carniel
   * @version 1.0
   */
  public class ProgressPanel extends JPanel {
  
    BorderLayout borderLayout1 = new BorderLayout();
    JPanel titlePanel = new JPanel();
    JPanel progressPanel = new JPanel();
    GridBagLayout gridBagLayout1 = new GridBagLayout();
    ImagePanel imagePanel = null;
    JLabel labelMainTitle = new JLabel();
    JScrollPane scrollPane = new JScrollPane();
    JTextArea controlMainMessage = new JTextArea();
    GridBagLayout gridBagLayout2 = new GridBagLayout();
    JLabel labelProgress = new JLabel();
    ProgressBar progressBar = new ProgressBar();
    JButton buttonCancel = new JButton();
  
    /** list of JLabels */
    private ArrayList messages = new ArrayList();
  
    /** number of labeld added above the progress bar */
    private int currentRow = 0;
  
  
    /**
     * Constructor that can be used with any JFrame.
     * @param mainTitle main title (showed in BOLD style); this text will be automatically translate, according to ClientSettings content
     * @param mainMessage main message; this text will be automatically translate, according to ClientSettings content
     * @param messageLabels list of label texts to set above the progress bar; this text will be automatically translate, according to ClientSettings content
     * @param minValue minimum value allowed in the progress bar
     * @param maxValue maximum value allowed in the progress bar
     * @param boolean showCancelButton flag that indicates if the cancel button must be showed
     */
    public ProgressPanel(String mainTitle,String mainMessage,String[] messageLabels,double minValue,double maxValue,boolean showCancelButton) {
      progressBar.setMinValue(minValue);
      progressBar.setMaxValue(maxValue);
      try {
        jbInit();
  
        // set text content...
        labelMainTitle.setText(ClientSettings.getInstance().getResources().getResource(mainTitle));
        controlMainMessage.setFont(new JLabel().getFont());
        controlMainMessage.setBackground(progressPanel.getBackground());
  
        for(int i=0;i<messageLabels.length;i++) {
          JLabel label1a = new JLabel(ClientSettings.getInstance().getResources().getResource(messageLabels[i]));
          JLabel label1b = new JLabel();
          messages.add(label1b);
  
          progressPanel.add(label1a,   new GridBagConstraints(0, currentRow, 1, 1, 0.0, 0.0
                  ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
          progressPanel.add(label1b,    new GridBagConstraints(1, currentRow, 1, 1, 0.0, 0.0
                  ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
          currentRow++;
        }
  
        // set main message height...
        StringTokenizer st = new StringTokenizer(mainMessage,"\n");
        controlMainMessage.setRows(st.countTokens()+1);
        controlMainMessage.setText(ClientSettings.getInstance().getResources().getResource(mainMessage));
  
        // set progress bar bounds...
        setMinimumValue(minValue);
        setMaximumValue(maxValue);
  
        // show/hide the cancel button...
        if (showCancelButton)
          progressPanel.add(buttonCancel,    new GridBagConstraints(1, currentRow+3, 1, 1, 0.0, 1.0
                  ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
        else
          progressPanel.add(new JLabel(""),    new GridBagConstraints(1, currentRow+3, 1, 1, 0.0, 1.0
                  ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
  
        progressBar.setForeground(ClientSettings.GRID_SELECTION_BACKGROUND);
  
      }
      catch(Exception e) {
        e.printStackTrace();
      }
    }
  
  
    private void jbInit() throws Exception {
      this.setLayout(borderLayout1);
      progressPanel.setBorder(BorderFactory.createEtchedBorder());
      progressPanel.setLayout(gridBagLayout2);
      titlePanel.setLayout(gridBagLayout1);
      scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
      scrollPane.setBorder(BorderFactory.createEmptyBorder());
  //    controlMainMessage.setBackground(SystemColor.scrollbar);
      controlMainMessage.setDoubleBuffered(false);
      controlMainMessage.setEditable(false);
      controlMainMessage.setText("");
      labelMainTitle.setFont(new java.awt.Font(labelMainTitle.getFont().getName(), Font.BOLD, labelMainTitle.getFont().getSize()+1));
      labelProgress.setText(ClientSettings.getInstance().getResources().getResource("progress")+":");
      buttonCancel.setText(ClientSettings.getInstance().getResources().getResource("cancel"));
      this.add(titlePanel, BorderLayout.NORTH);
      this.add(progressPanel,  BorderLayout.CENTER);
      titlePanel.add(labelMainTitle,  new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
              ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
      titlePanel.add(scrollPane,    new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0
              ,GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 25, 5, 5), 0, 0));
      scrollPane.getViewport().add(controlMainMessage, null);
      progressPanel.add(labelProgress,    new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
              ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
      progressPanel.add(progressBar,    new GridBagConstraints(1, currentRow+2, 1, 1, 1.0, 0.0
              ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
    }
  
  
    /**
     * Notify an event that will update the progress bar and the other window content.
     * @param event progress event
     */
    public final void processProgressEvent(ProgressEvent event) {
      labelMainTitle.setText(ClientSettings.getInstance().getResources().getResource(event.getMainTitle()));
      controlMainMessage.setText(ClientSettings.getInstance().getResources().getResource(event.getMainMessage()));
  
      for(int i=0;i<event.getText().length;i++)
        ((JLabel)messages.get(i)).setText(ClientSettings.getInstance().getResources().getResource(event.getText()[i]));
  
      progressBar.setValue((int)event.getProgressValue());
    }
  
  
    /**
     * Add an action listener to the cancel button.
     * @param listener listener to add
     */
    public final void addCancelButtonListener(ActionListener listener) {
      buttonCancel.addActionListener(listener);
    }
  
  
    /**
     * Remove the specified action listener to the cancel button.
     * @param listener listener to remove
     */
    public final void removeCancelButtonListener(ActionListener listener) {
      buttonCancel.removeActionListener(listener);
    }
  
  
    /**
     * Set the minimum value allowed in the progress bar.
     * @param minValue minimum value allowed in the progress bar
     */
    public final void setMinimumValue(double minValue) {
      progressBar.setMinValue(minValue);
    }
  
  
    /**
     * Set the maximum value allowed in the progress bar.
     * @param maxValue maximum value allowed in the progress bar
     */
    public final void setMaximumValue(double maxValue) {
      progressBar.setMaxValue(maxValue);
    }
  
  
    /**
     * @return inimum value allowed in the progress bar
     */
    public final double getMinimumValue() {
      return progressBar.getMinValue();
    }
  
  
    /**
     * @return maximum value allowed in the progress bar
     */
    public final double getMaximumValue() {
      return progressBar.getMaxValue();
    }
  
  
    /**
     * Set the progress bar color.
     * @param color progress bar color
     */
    public final void setProgressBarColor(Color color) {
      progressBar.setBackground(color);
    }
  
  
    /**
     * @return progress bar color
     */
    public final Color getProgressBarColor() {
      return progressBar.getBackground();
    }
  
  
    /**
     * Set an image panel a the left of the main title.
     * @param imageName image name that identifies the image to show; the image must be located in "images" sub-folder
     */
    public final void setImageName(String imageName) {
  