public void viewServiceCall(String filter) {
    if (filter == null) return;

    StackFileInfo stackFileInfo = getSelectedStackFileInfo();
    if (stackFileInfo == null) return;

    String filename = StackParser.getWorkingThreadFilename(stackFileInfo.getFilename());
    int stackStartLine = stackFileInfo.getParserConfig().getStackStartLine();
    if (filename != null && filter != null) {
      getBrowser()
          .setText(
              HtmlUtils.filterServiceCall(
                  filename, filter, stackFileInfo.getParserConfig().getService(), stackStartLine));
    }
  }
  private void reanalyzeStackFileInfo() {
    TreeItem item = getSelectedRootItemFromMainTree();
    if (item == null) {
      return;
    }

    StackFileInfo stackFileInfo = (StackFileInfo) item.getData();
    if (stackFileInfo == null) {
      return;
    }

    try {
      ParserConfigReader reader =
          new ParserConfigReader(stackFileInfo.getParserConfig().getConfigFilename());
      ParserConfig config = reader.read();

      StackParser.removeAllAnalyzedFile(stackFileInfo);

      processStackFile(stackFileInfo, config, null, false, true);
    } catch (RuntimeException ex) {
      closeStackFileInfo();
      throw ex;
    }
    item.removeAll();
    item.setText(stackFileInfo.toTreeInfo());
    addMainTreeSubItem(item, stackFileInfo.getStackAnalyzedInfoList());
    item.setExpanded(true);

    clearTable();
  }
  public void analyzeFilterStack(String inputFilter, boolean isInclude) {
    String filter = null;
    if (inputFilter == null) {
      filter = getSelectedAnalyzedFunction();
    } else {
      filter = inputFilter;
    }

    if (filter == null) return;

    StackFileInfo stackFileInfo = getSelectedStackFileInfo();
    if (stackFileInfo == null) return;

    ParserConfigReader reader =
        new ParserConfigReader(stackFileInfo.getParserConfig().getConfigFilename());
    ParserConfig config = reader.read();

    StackFileInfo filteredStackFileInfo =
        processStackFile(
            StackParser.getWorkingThreadFilename(stackFileInfo.getFilename()),
            config,
            filter,
            false,
            isInclude);
    addProcessedStack(filteredStackFileInfo);
  }
  public void viewThreadStack(String filter) {
    if (filter == null) return;

    StackFileInfo stackFileInfo = getSelectedStackFileInfo();
    if (stackFileInfo == null) return;

    String filename = StackParser.getWorkingThreadFilename(stackFileInfo.getFilename());
    int stackStartLine = stackFileInfo.getParserConfig().getStackStartLine();
    if (filename != null && filter != null) {
      Browser broswer = getBrowser();
      if (m_isExcludeStack)
        broswer.setText(
            HtmlUtils.filterThreadStack(
                filename,
                filter,
                stackFileInfo.getParserConfig().getExcludeStack(),
                stackStartLine));
      else broswer.setText(HtmlUtils.filterThreadStack(filename, filter, null, stackStartLine));
    }
  }