public ParserMessagesPopup(final GuidedDecisionTree model) {
    this.model = checkNotNull("model", model);

    for (GuidedDecisionTreeParserError error : model.getParserErrors()) {
      for (ParserMessage msg : error.getMessages()) {
        errors.add(Pair.newPair(error.getOriginalDrl(), msg));
      }
    }

    setTitle(GuidedDecisionTreeConstants.INSTANCE.popupTitleParserMessages());
    messages = new MessageTableWidget<Pair<String, ParserMessage>>();
    messages.setToolBarVisible(false);
    messages.setHeight("150px");

    footer.addButton(
        GuidedDecisionTreeConstants.INSTANCE.remove(),
        new Command() {
          @Override
          public void execute() {
            model.getParserErrors().clear();
            hide();
          }
        },
        IconType.WARNING,
        ButtonType.DANGER);
    footer.addButton(
        GuidedDecisionTreeConstants.INSTANCE.ignore(),
        new Command() {
          @Override
          public void execute() {
            hide();
          }
        },
        ButtonType.PRIMARY);

    setBody(uiBinder.createAndBindUi(this));
    add(footer);

    messages.addCellPreviewHandler(
        new CellPreviewEvent.Handler<Pair<String, ParserMessage>>() {
          @Override
          public void onCellPreview(final CellPreviewEvent<Pair<String, ParserMessage>> event) {
            if (Event.getTypeInt(event.getNativeEvent().getType()) == Event.ONCLICK) {
              drlPreview.setContent(event.getValue().getK1());
            }
          }
        });

    messages.setRowData(errors);

    messages.addLevelColumn(
        10,
        new MessageTableWidget.ColumnExtractor<Level>() {
          @Override
          public Level getValue(final Object row) {
            return Level.ERROR;
          }
        });

    messages.addTextColumn(
        90,
        new MessageTableWidget.ColumnExtractor<String>() {
          @Override
          public String getValue(final Object row) {
            return getMessage(((Pair<String, ParserMessage>) row).getK2());
          }
        });
  }