/**
   * public MutableStatusBar(String s1, String s2, String s3) { super(); status_1 = new JLabel(s1);
   * status_2 = new JLabel(s2); status_3 = new JLabel(s3); this.init(); }.
   */
  protected void init() {
    this.setLayout(new GridBagLayout());
    this.setBorder(BorderFactory.createEmptyBorder(3, 2, 1, 1));
    final GridBagConstraints constraints = new GridBagConstraints();

    // status_1.setHorizontalAlignment(JLabel.CENTER);
    status_1.setBorder(
        new CompoundBorder(
            new SoftBevelBorder(SoftBevelBorder.LOWERED), new EmptyBorder(0, 2, 0, 2)));
    status_1.setPreferredSize(new Dimension(180, 16));

    status_2.setBorder(
        new CompoundBorder(
            new SoftBevelBorder(SoftBevelBorder.LOWERED), new EmptyBorder(0, 2, 0, 2)));
    status_2.setPreferredSize(new Dimension(200, 16));

    status_3.setBorder(
        new CompoundBorder(
            new SoftBevelBorder(SoftBevelBorder.LOWERED), new EmptyBorder(0, 2, 0, 2)));
    status_3.setPreferredSize(new Dimension(300, 16));

    greenStatusIcon =
        new MutableImageLabel(resource.getIcon("green_off.gif"), resource.getIcon("green_on.gif"));
    greenStatusIcon.setBorder(new EmptyBorder(2, 2, 2, 1));

    redStatusIcon =
        new MutableImageLabel(resource.getIcon("red_off.gif"), resource.getIcon("red_on.gif"));
    redStatusIcon.setBorder(new EmptyBorder(2, 1, 2, 3));
    // =====================================================================

    constraints.insets = new Insets(0, 0, 0, 4);
    constraints.anchor = GridBagConstraints.EAST;
    constraints.fill = GridBagConstraints.VERTICAL;

    constraints.weightx = 1.0;
    constraints.weighty = 1.0;
    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    this.add(status_1, constraints);

    constraints.weightx = 0.0;
    constraints.gridx++;
    this.add(status_2, constraints);

    constraints.gridx = 2;
    this.add(status_3, constraints);

    constraints.gridx++;
    if (greenStatusIcon != null) {
      this.add(greenStatusIcon, constraints);
    }

    constraints.insets = new Insets(0, 0, 0, 0);
    constraints.gridx++;
    if (redStatusIcon != null) {
      this.add(redStatusIcon, constraints);
    }
  }
/**
 * DOCUMENT ME!
 *
 * @version $Revision$, $Date$
 */
public class MutableStatusBar extends JPanel {

  // ~ Static fields/initializers ---------------------------------------------

  protected static final Logger logger = Logger.getLogger(MutableStatusBar.class);

  private static final ResourceManager resource = ResourceManager.getManager();

  // ~ Instance fields --------------------------------------------------------

  private JLabel status_1;
  private JLabel status_2;
  private JLabel status_3;

  private MutableImageLabel greenStatusIcon;
  private MutableImageLabel redStatusIcon;

  // ~ Constructors -----------------------------------------------------------

  /** Creates a new MutableStatusBar object. */
  public MutableStatusBar() {
    super();
    status_1 = new JLabel(""); // NOI18N
    status_2 = new JLabel(""); // NOI18N
    status_3 = new JLabel(""); // NOI18N
    this.init();
  }

  // ~ Methods ----------------------------------------------------------------

  /**
   * public MutableStatusBar(String s1, String s2, String s3) { super(); status_1 = new JLabel(s1);
   * status_2 = new JLabel(s2); status_3 = new JLabel(s3); this.init(); }.
   */
  protected void init() {
    this.setLayout(new GridBagLayout());
    this.setBorder(BorderFactory.createEmptyBorder(3, 2, 1, 1));
    final GridBagConstraints constraints = new GridBagConstraints();

    // status_1.setHorizontalAlignment(JLabel.CENTER);
    status_1.setBorder(
        new CompoundBorder(
            new SoftBevelBorder(SoftBevelBorder.LOWERED), new EmptyBorder(0, 2, 0, 2)));
    status_1.setPreferredSize(new Dimension(180, 16));

    status_2.setBorder(
        new CompoundBorder(
            new SoftBevelBorder(SoftBevelBorder.LOWERED), new EmptyBorder(0, 2, 0, 2)));
    status_2.setPreferredSize(new Dimension(200, 16));

    status_3.setBorder(
        new CompoundBorder(
            new SoftBevelBorder(SoftBevelBorder.LOWERED), new EmptyBorder(0, 2, 0, 2)));
    status_3.setPreferredSize(new Dimension(300, 16));

    greenStatusIcon =
        new MutableImageLabel(resource.getIcon("green_off.gif"), resource.getIcon("green_on.gif"));
    greenStatusIcon.setBorder(new EmptyBorder(2, 2, 2, 1));

    redStatusIcon =
        new MutableImageLabel(resource.getIcon("red_off.gif"), resource.getIcon("red_on.gif"));
    redStatusIcon.setBorder(new EmptyBorder(2, 1, 2, 3));
    // =====================================================================

    constraints.insets = new Insets(0, 0, 0, 4);
    constraints.anchor = GridBagConstraints.EAST;
    constraints.fill = GridBagConstraints.VERTICAL;

    constraints.weightx = 1.0;
    constraints.weighty = 1.0;
    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    this.add(status_1, constraints);

    constraints.weightx = 0.0;
    constraints.gridx++;
    this.add(status_2, constraints);

    constraints.gridx = 2;
    this.add(status_3, constraints);

    constraints.gridx++;
    if (greenStatusIcon != null) {
      this.add(greenStatusIcon, constraints);
    }

    constraints.insets = new Insets(0, 0, 0, 0);
    constraints.gridx++;
    if (redStatusIcon != null) {
      this.add(redStatusIcon, constraints);
    }
  }

  /**
   * DOCUMENT ME!
   *
   * @param statusMessage DOCUMENT ME!
   * @param messagePosition DOCUMENT ME!
   */
  public void setStatusMessage(final String statusMessage, final int messagePosition) {
    // if(logger.isDebugEnabled())logger.debug("setStatusMessage: '" + statusMessage + "' @position:
    // '" +
    // messagePosition + "'");
    switch (messagePosition) {
      case Status.MESSAGE_IGNORE:
        {
          break;
        }
      case Status.MESSAGE_POSITION_1:
        {
          status_1.setText(statusMessage);
          break;
        }
      case Status.MESSAGE_POSITION_2:
        {
          status_2.setText(statusMessage);
          break;
        }
      case Status.MESSAGE_POSITION_3:
        {
          status_3.setText(statusMessage);
          break;
        }
    }
  }

  /**
   * DOCUMENT ME!
   *
   * @param greenIconStatus DOCUMENT ME!
   */
  public void setGreenIconStatus(final int greenIconStatus) {
    // if(logger.isDebugEnabled())logger.debug("setGreenIconStatus: '" + greenIconStatus + "'");
    switch (greenIconStatus) {
      case Status.ICON_IGNORE:
        {
          break;
        }
      case Status.ICON_ACTIVATED:
        {
          greenStatusIcon.switchOn(true);
          break;
        }
      case Status.ICON_DEACTIVATED:
        {
          greenStatusIcon.switchOff(true);
          break;
        }
      case Status.ICON_BLINKING:
        {
          greenStatusIcon.blink(500);
          break;
        }
      default:
        {
          greenStatusIcon.switchOff(true);
        }
    }
  }

  /**
   * DOCUMENT ME!
   *
   * @param redIconStatus DOCUMENT ME!
   */
  public void setRedIconStatus(final int redIconStatus) {
    // if(logger.isDebugEnabled())logger.debug("setRedIconStatus: '" + redIconStatus + "'");
    switch (redIconStatus) {
      case Status.ICON_IGNORE:
        {
          break;
        }
      case Status.ICON_ACTIVATED:
        {
          redStatusIcon.switchOn(true);
          break;
        }
      case Status.ICON_DEACTIVATED:
        {
          redStatusIcon.switchOff(true);
          break;
        }
      case Status.ICON_BLINKING:
        {
          redStatusIcon.blink(500);
          break;
        }
      default:
        {
          redStatusIcon.switchOn(true);
        }
    }
  }

  /**
   * DOCUMENT ME!
   *
   * @param status DOCUMENT ME!
   */
  public void setStatus(final Status status) {
    this.setStatusMessage(status.getStatusMessage(), status.getMessagePosition());
    this.setRedIconStatus(status.getRedIconState());
    this.setGreenIconStatus(status.getGreenIconState());
  }

  /**
   * DOCUMENT ME!
   *
   * @return DOCUMENT ME!
   */
  public boolean isGreenStatusIconBlinking() {
    return greenStatusIcon.isBlinking();
  }

  /**
   * DOCUMENT ME!
   *
   * @return DOCUMENT ME!
   */
  public boolean isRedStatusIconBlinking() {
    return redStatusIcon.isBlinking();
  }
}