public String computeThreads(boolean showThreads) {
   String threadsWindowRes = Icons.getResource(ProfilerIcons.WINDOW_THREADS);
   return "<b><img border='0' align='bottom' src='nbresloc:/"
       + threadsWindowRes
       + "'>&nbsp;&nbsp;" // NOI18N
       + Bundle.OverviewController_ThreadsString()
       + "</b><br><hr>" // NOI18N
       + (showThreads
           ? getStackTrace()
           : ("&nbsp;&nbsp;&nbsp;&nbsp;<a href='"
               + SHOW_THREADS_URL
               + "'>"
               + Bundle.OverviewController_ShowThreadsLinkString()
               + "</a><br>&nbsp;")); // NOI18N
   // NOTE: the above HTML string should be terminated by newline to workaround HTML rendering bug
   // in JDK 5, see Issue 120157
 }
  public String computeSystemProperties(boolean showSystemProperties) {
    Properties sysprops = getSystemProperties();

    if (sysprops == null) {
      return Bundle.OverviewController_NotAvailableMsg();
    }

    String propertiesRes = Icons.getResource(HeapWalkerIcons.PROPERTIES);
    return "<b><img border='0' align='bottom' src='nbresloc:/"
        + propertiesRes
        + "'>&nbsp;&nbsp;" // NOI18N
        + Bundle.OverviewController_SystemPropertiesString()
        + "</b><br><hr>" // NOI18N
        + (showSystemProperties
            ? formatSystemProperties(sysprops)
            : ("&nbsp;&nbsp;&nbsp;&nbsp;<a href='"
                + SHOW_SYSPROPS_URL
                + "'>"
                + Bundle.OverviewController_ShowSysPropsLinkString()
                + "</a>")); // NOI18N
  }
 // ~ Constructors
 // -------------------------------------------------------------------------------------------------------------
 public TakeSnapshotAction() {
   listener = Lookup.getDefault().lookup(Listener.class);
   listener.setDelegate(this);
   setIcon(Icons.getIcon(ProfilerIcons.SNAPSHOT_TAKE));
   putValue("iconBase", Icons.getResource(ProfilerIcons.SNAPSHOT_TAKE)); // NOI18N
 }
  public String computeEnvironment() {
    Properties sysprops = getSystemProperties();

    if (sysprops == null) {
      return Bundle.OverviewController_NotAvailableMsg();
    }

    String patchLevel = sysprops.getProperty("sun.os.patch.level", ""); // NOI18N
    String os =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_OsItemString(
                sysprops.getProperty(
                    "os.name", Bundle.OverviewController_NotAvailableMsg()), // NOI18N
                sysprops.getProperty("os.version", ""), // NOI18N
                ("unknown".equals(patchLevel) ? "" : patchLevel) // NOI18N
                );

    String arch =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_ArchitectureItemString(
                sysprops.getProperty(
                    "os.arch", Bundle.OverviewController_NotAvailableMsg()), // NOI18N
                sysprops.getProperty("sun.arch.data.model", "?") + "bit" // NOI18N
                );

    String jdk =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_JavaHomeItemString(
                sysprops.getProperty(
                    "java.home", Bundle.OverviewController_NotAvailableMsg())); // NOI18N

    String version =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_JavaVersionItemString(
                sysprops.getProperty(
                    "java.version", Bundle.OverviewController_NotAvailableMsg())); // NOI18N

    String jvm =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_JvmItemString(
                sysprops.getProperty(
                    "java.vm.name", Bundle.OverviewController_NotAvailableMsg()), // NOI18N
                sysprops.getProperty("java.vm.version", ""), // NOI18N
                sysprops.getProperty("java.vm.info", "") // NOI18N
                );

    String vendor =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_JavaVendorItemString(
                sysprops.getProperty(
                    "java.vendor", Bundle.OverviewController_NotAvailableMsg())); // NOI18N

    String sysinfoRes = Icons.getResource(HeapWalkerIcons.SYSTEM_INFO);
    return "<b><img border='0' align='bottom' src='nbresloc:/"
        + sysinfoRes
        + "'>&nbsp;&nbsp;" // NOI18N
        + Bundle.OverviewController_EnvironmentString()
        + "</b><br><hr>"
        + os
        + "<br>"
        + arch
        + "<br>"
        + jdk
        + "<br>"
        + version
        + "<br>"
        + jvm
        + "<br>"
        + vendor; // NOI18N
  }
  public String computeSummary() {
    File file = heapFragmentWalker.getHeapDumpFile();
    Heap heap = heapFragmentWalker.getHeapFragment();
    HeapSummary hsummary = heap.getSummary();
    long finalizers = computeFinalizers(heap);
    int nclassloaders = 0;
    JavaClass cl = heap.getJavaClassByName("java.lang.ClassLoader"); // NOI18N
    NumberFormat numberFormat = (NumberFormat) NumberFormat.getInstance().clone();
    numberFormat.setMaximumFractionDigits(1);

    oome = getOOMEThread(heap);
    if (cl != null) {
      nclassloaders = cl.getInstancesCount();

      Collection<JavaClass> jcs = cl.getSubClasses();

      for (JavaClass jc : jcs) {
        nclassloaders += jc.getInstancesCount();
      }
    }

    String filename =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_FileItemString(
                file != null && file.exists()
                    ? file.getAbsolutePath()
                    : Bundle.OverviewController_NotAvailableMsg());

    String filesize =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_FileSizeItemString(
                file != null && file.exists()
                    ? numberFormat.format(file.length() / (1024 * 1024.0)) + " MB"
                    : // NOI18N
                    Bundle.OverviewController_NotAvailableMsg());

    String dateTaken =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_DateTakenItemString(
                new Date(hsummary.getTime()).toString());

    String liveBytes =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_TotalBytesItemString(
                numberFormat.format(hsummary.getTotalLiveBytes()));

    String liveClasses =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_TotalClassesItemString(
                numberFormat.format(heap.getAllClasses().size()));

    String liveInstances =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_TotalInstancesItemString(
                numberFormat.format(hsummary.getTotalLiveInstances()));

    String classloaders =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_ClassloadersItemString(numberFormat.format(nclassloaders));

    String gcroots =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_GcRootsItemString(
                numberFormat.format(heap.getGCRoots().size()));

    String finalizersInfo =
        "&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
            + Bundle.OverviewController_FinalizersItemString(numberFormat.format(finalizers));

    String oomeString = "";
    if (oome != null) {
      Instance thread = oome.getInstance();
      String threadName = htmlize(getThreadName(thread));
      String threadUrl =
          "<a href='"
              + THREAD_URL_PREFIX
              + thread.getJavaClass().getName()
              + "/"
              + thread.getInstanceId()
              + "'>"
              + threadName
              + "</a>"; // NOI18N
      oomeString =
          "<br><br>&nbsp;&nbsp;&nbsp;&nbsp;" // NOI18N
              + Bundle.OverviewController_OOMELabelString()
              + "<br>&nbsp;&nbsp;&nbsp;&nbsp;"
              + Bundle.OverviewController_OOMEItemString(threadUrl);
    }
    String memoryRes = Icons.getResource(ProfilerIcons.HEAP_DUMP);
    return "<b><img border='0' align='bottom' src='nbresloc:/"
        + memoryRes
        + "'>&nbsp;&nbsp;" // NOI18N
        + Bundle.OverviewController_SummaryString()
        + "</b><br><hr>"
        + dateTaken
        + "<br>"
        + filename
        + "<br>"
        + filesize
        + "<br><br>"
        + liveBytes // NOI18N
        + "<br>"
        + liveClasses
        + "<br>"
        + liveInstances
        + "<br>"
        + classloaders
        + "<br>"
        + gcroots
        + "<br>"
        + finalizersInfo
        + oomeString; // NOI18N
  }
  private void initComponents() {
    treeCellRenderer.setLeafIcon(null);
    treeCellRenderer.setClosedIcon(null);
    treeCellRenderer.setOpenIcon(null);

    fieldsListTableModel.setRealColumnVisibility(2, false);
    fieldsListTableModel.setRealColumnVisibility(4, false);

    if (retainedSizeSupported)
      fieldsListTableModel.setRealColumnVisibility(
          5,
          referencesBrowserController
                  .getReferencesControllerHandler()
                  .getHeapFragmentWalker()
                  .getRetainedSizesStatus()
              == HeapFragmentWalker.RETAINED_SIZES_COMPUTED);

    fieldsListTable =
        new JTreeTable(fieldsListTableModel) {
          public void doLayout() {
            int columnsWidthsSum = 0;
            int realFirstColumn = -1;

            TableColumnModel colModel = getColumnModel();

            for (int i = 0; i < fieldsListTableModel.getColumnCount(); i++) {
              if (fieldsListTableModel.getRealColumn(i) == 0) {
                realFirstColumn = i;
              } else {
                columnsWidthsSum += colModel.getColumn(i).getPreferredWidth();
              }
            }

            if (realFirstColumn != -1) {
              colModel.getColumn(realFirstColumn).setPreferredWidth(getWidth() - columnsWidthsSum);
            }

            super.doLayout();
          }
        };
    fieldsListTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    fieldsListTable.setGridColor(UIConstants.TABLE_VERTICAL_GRID_COLOR);
    fieldsListTable.setSelectionBackground(UIConstants.TABLE_SELECTION_BACKGROUND_COLOR);
    fieldsListTable.setSelectionForeground(UIConstants.TABLE_SELECTION_FOREGROUND_COLOR);
    fieldsListTable.setShowHorizontalLines(UIConstants.SHOW_TABLE_HORIZONTAL_GRID);
    fieldsListTable.setShowVerticalLines(UIConstants.SHOW_TABLE_VERTICAL_GRID);
    fieldsListTable.setRowMargin(UIConstants.TABLE_ROW_MARGIN);
    fieldsListTable.setRowHeight(UIUtils.getDefaultRowHeight() + 2);
    fieldsListTable.getTree().setLargeModel(true);
    fieldsListTable.getTree().setToggleClickCount(0);
    fieldsListTable.getColumnModel().getColumn(0).setMinWidth(150);
    fieldsListTable
        .getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
        .put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "DEFAULT_ACTION"); // NOI18N
    fieldsListTable
        .getActionMap()
        .put(
            "DEFAULT_ACTION", // NOI18N
            new AbstractAction() {
              public void actionPerformed(ActionEvent e) {
                performDefaultAction();
              }
            });

    // Disable traversing table cells using TAB and Shift+TAB
    Set keys =
        new HashSet(
            fieldsListTable.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
    keys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
    fieldsListTable.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);

    keys =
        new HashSet(
            fieldsListTable.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
    keys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK));
    fieldsListTable.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);

    setColumnsData();

    tablePopup = createTablePopup();

    cornerPopup = new JPopupMenu();

    JTreeTablePanel tablePanel = new JTreeTablePanel(fieldsListTable);
    tablePanel.setCorner(
        JScrollPane.UPPER_RIGHT_CORNER, createHeaderPopupCornerButton(cornerPopup));

    dataPanel = new JPanel(new BorderLayout());
    dataPanel.add(tablePanel, BorderLayout.CENTER);

    noDataPanel = new JPanel(new BorderLayout());
    noDataPanel.setBorder(BorderFactory.createLoweredBevelBorder());

    HTMLTextArea hintArea = new HTMLTextArea();
    hintArea.setBorder(BorderFactory.createEmptyBorder(10, 8, 8, 8));

    String instancesRes = Icons.getResource(HeapWalkerIcons.INSTANCES);
    String hintText =
        Bundle.ReferencesBrowserControllerUI_NoInstanceSelectedMsg(
            "<img border='0' align='bottom' src='nbresloc:/" + instancesRes + "'>"); // NOI18N

    hintArea.setText(hintText);
    noDataPanel.add(hintArea, BorderLayout.CENTER);

    contents = new CardLayout();
    setLayout(contents);
    add(noDataPanel, NO_DATA);
    add(dataPanel, DATA);

    fieldsListTable.addMouseListener(new FieldsListTableMouseListener());
    fieldsListTable.addKeyListener(new FieldsListTableKeyListener());
  }