/**
   * Constructor.
   *
   * @param passedRecordList List of Records that Passed over Filter.
   * @param peName Name of Physical Entity.
   * @param bpContainer
   */
  public DownloadDetails(
      List<BasicRecordType> passedRecordList, String peName, CPath2Factory factory) {
    super();
    this.factory = factory;

    this.peName = peName;
    this.setTitle("Retrieval Confirmation");
    this.setModal(true);
    Container contentPane = getContentPane();
    contentPane.setLayout(new BorderLayout());
    GradientHeader header =
        new GradientHeader("Confirm Retrieval: " + passedRecordList.size() + " records");
    contentPane.add(header, BorderLayout.NORTH);

    DefaultTableModel tableModel = new NonEditableTableModel();
    Vector headerList = new Vector();
    headerList.add("Name (if available)");
    headerList.add("Type");
    headerList.add("Data Source");
    tableModel.setColumnIdentifiers(headerList);
    tableModel.setRowCount(passedRecordList.size());
    JTable table = new JTable(tableModel);

    //  Adjust width / height of viewport;  fixes bug #1620.
    Dimension d = table.getPreferredSize();
    d.width = d.width * 2;
    if (d.height > 200) {
      d.height = 200;
    }
    table.setPreferredScrollableViewportSize(d);
    table.setAutoCreateColumnsFromModel(true);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    ids = new long[passedRecordList.size()];
    int i = 0;
    for (BasicRecordType record : passedRecordList) {
      if (record.getName().equalsIgnoreCase("N/A")) {
        record.setName("---");
      }
      tableModel.setValueAt(record.getName(), i, 0);
      tableModel.setValueAt(record.getEntityType(), i, 1);
      if (record.getDataSource() != null) {
        tableModel.setValueAt(record.getDataSource().getName(), i, 2);
      } else {
        tableModel.setValueAt("---", i, 3);
      }
      ids[i++] = record.getPrimaryId();
    }
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.add(scrollPane, BorderLayout.CENTER);

    JPanel buttonPanel = createButtonPanel(this);
    mergePanel = factory.createMergePanel();
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    if (mergePanel != null) {
      panel.add(mergePanel);
    }
    panel.add(buttonPanel);
    contentPane.add(panel, BorderLayout.SOUTH);
    pack();
    setLocationRelativeTo(factory.getCySwingApplication().getJFrame());
  }