private void attachListenersForArchiveOutputUtil() {
    archiveOutputUtil.addPropertyChangeListener(
        "archiveOutputFailed",
        new PropertyChangeListener() {
          public void propertyChange(PropertyChangeEvent propertyChangeEvent) {
            // if the output fails, tell the user why it failed and point to the error report
            SwingUtilities.invokeLater(
                new Runnable() {
                  public void run() {
                    OutputFailedUI failUI =
                        new OutputFailedUI(archiveOutputUtil.getArchiveOutputStatus().getText());

                    failUI.addPropertyChangeListener(
                        "viewErrors",
                        new PropertyChangeListener() {
                          public void propertyChange(PropertyChangeEvent propertyChangeEvent) {
                            ViewErrorUI enw =
                                new ViewErrorUI(archiveOutputUtil.getBrowseViewErrorPane());
                            enw.setLocation(getX(), getY());
                            dispose();
                          }
                        });
                    swapContainers(failUI);
                  }
                });
          }
        });

    archiveOutputUtil.addPropertyChangeListener(
        "archiveOutputCompleted",
        new PropertyChangeListener() {
          public void propertyChange(PropertyChangeEvent propertyChangeEvent) {
            // if the output completes, tell the user it has completed and where the files were
            // saved,
            // then automatically close the window after 3 seconds :)

            SwingUtilities.invokeLater(
                new Runnable() {
                  public void run() {
                    OutputSuccessUI successUI =
                        new OutputSuccessUI(
                            archiveOutputUtil.getStatistics().getStatisticsAsHTML());
                    swapContainers(successUI);
                  }
                });
            closeWindowTimer.start();
          }
        });
  }