Example usage for com.vaadin.ui Grid Grid

List of usage examples for com.vaadin.ui Grid Grid

Introduction

In this page you can find the example usage for com.vaadin.ui Grid Grid.

Prototype

public Grid() 

Source Link

Document

Creates a new grid without support for creating columns based on property names.

Usage

From source file:management.limbr.ui.entity.EntityListViewImpl.java

License:Open Source License

@PostConstruct
@SuppressWarnings("unchecked")
public void init() {
    grid = new Grid();
    grid.setEditorEnabled(true);//  w ww  .  j ava  2  s .  c om
    grid.setSizeFull();
    TextField filter = new TextField();
    filter.setInputPrompt(messages.get("filterLabel"));
    filter.addTextChangeListener(event -> listEntities(event.getText()));

    Button addNewButton = new Button(messages.get("newButtonLabel"), FontAwesome.PLUS);
    HorizontalLayout actions = new HorizontalLayout(filter, addNewButton);
    actions.setSpacing(true);
    grid.removeAllColumns();

    java.lang.reflect.Field[] fields = entityClass.getDeclaredFields();
    for (java.lang.reflect.Field field : fields) {
        if (null != field.getAnnotation(ListColumn.class)) {
            grid.addColumn(field.getName());
        }
    }

    Grid.Column editColumn = grid.addColumn(EDIT_PROPERTY_ID);
    editColumn.setMaximumWidth(50.0);
    editColumn.setHeaderCaption("");
    editColumn.setRenderer(new ButtonRenderer(
            event -> listeners.forEach(listener -> listener.editItemClicked((T) event.getItemId()))));

    addNewButton.addClickListener(event -> listeners.forEach(EntityListView.Listener::addNewClicked));

    addComponent(actions);
    addComponent(grid);

    listeners.forEach(listener -> listener.viewInitialized(this));

    refresh();
}

From source file:management.limbr.ui.users.UsersViewImpl.java

License:Open Source License

@PostConstruct
public void init() {
    grid = new Grid();
    TextField filter = new TextField();
    filter.setInputPrompt("Filter by username");
    filter.addTextChangeListener(e -> listUsers(e.getText()));
    Button addNewButton = new Button("New user", FontAwesome.PLUS);
    HorizontalLayout actions = new HorizontalLayout(filter, addNewButton);
    actions.setSpacing(true);// w  w  w  .j a v  a2 s.c o  m
    grid.removeAllColumns();
    grid.addColumn("username");
    grid.addColumn("displayName");
    grid.addColumn("emailAddress");

    grid.addItemClickListener(e -> {
        if (e.isDoubleClick()) {
            listeners.forEach(listener -> listener.itemDoubleClicked(e.getItem()));
        }
    });

    addNewButton.addClickListener(e -> listeners.forEach(UsersViewListener::addNewClicked));

    addComponent(actions);
    addComponent(grid);

    listeners.forEach(listener -> listener.viewInitialized(this));

    refresh();
}

From source file:org.eclipse.hawkbit.ui.common.AbstractMetadataPopupLayout.java

License:Open Source License

protected Grid createMetadataGrid() {
    final Grid metadataGrid = new Grid();
    metadataGrid.addStyleName(SPUIStyleDefinitions.METADATA_GRID);
    metadataGrid.setImmediate(true);/*w  w w . j av a  2s.  c  o  m*/
    metadataGrid.setHeight("100%");
    metadataGrid.setWidth("100%");
    metadataGrid.setId(UIComponentIdProvider.METDATA_TABLE_ID);
    metadataGrid.setSelectionMode(SelectionMode.SINGLE);
    metadataGrid.setColumnReorderingAllowed(true);
    metadataGrid.setContainerDataSource(getMetadataContainer());
    metadataGrid.getColumn(KEY).setHeaderCaption(i18n.getMessage("header.key"));
    metadataGrid.getColumn(VALUE).setHeaderCaption(i18n.getMessage("header.value"));
    metadataGrid.getColumn(VALUE).setHidden(true);
    metadataGrid.addSelectionListener(this::onRowClick);
    metadataGrid.getColumn(DELETE_BUTTON).setHeaderCaption("");
    metadataGrid.getColumn(DELETE_BUTTON).setRenderer(new HtmlButtonRenderer(this::onDelete));
    metadataGrid.getColumn(DELETE_BUTTON).setWidth(50);
    metadataGrid.getColumn(KEY).setExpandRatio(1);
    return metadataGrid;
}

From source file:org.fatal1t.finbe.ui.views.DashboardView.java

@Autowired
public DashboardView(ItemsService service, CategoryRepository repo, Menu menu) {
    // autowired dependecies
    this.categoryRepository = repo;
    //this.itemForm = form;        

    //this.catForm = catForm;
    this.menu = menu;

    this.itemGrid = new Grid();
    this.categoryGrid = new Grid();
    this.itemLayout = new HorizontalLayout(this.itemGrid);
    this.categoryLayout = new HorizontalLayout(this.categoryGrid);
    itemLayout.setMargin(true);/* ww  w  . ja  v a 2 s. com*/
    itemLayout.setSpacing(true);
    itemGrid.setHeight(500, Unit.PIXELS);
    itemGrid.setWidth(500, Unit.PIXELS);
    itemGrid.setColumns("itemName", "itemPrice");
    categoryGrid.setColumns("catName");
    categoryGrid.setHeight(100, Unit.PIXELS);
    categoryGrid.setWidth(300, Unit.PIXELS);
    categoryLayout.setMargin(true);
    categoryLayout.setSpacing(true);

    //categoryGrid.setVisible(false);
    this.mainLayout = new VerticalLayout(this.menu, itemLayout, categoryLayout);

    mainLayout.setComponentAlignment(itemLayout, Alignment.MIDDLE_CENTER);
    mainLayout.setComponentAlignment(categoryLayout, Alignment.MIDDLE_CENTER);
    mainLayout.setComponentAlignment(menu, Alignment.TOP_CENTER);

    setCompositionRoot(mainLayout);
    this.service = service;

}

From source file:org.fatal1t.finbe.ui.views.ItemsView.java

@Autowired
public ItemsView(ItemForm itemForm, Menu menu, ItemsService itemsService, CategoryForm catForm,
        CategoryRepository repository) {
    //Autowired dependences
    this.itemsForm = itemForm;
    this.catgoryForm = catForm;
    this.categoryRepository = repository;

    this.menu = menu;
    this.itemsService = itemsService;

    this.itemGrid = new Grid();
    this.itemGrid.setColumns("itemName", "itemPrice", "currency", "category", "purDate");
    this.itemGrid.setWidth(700, Unit.PIXELS);

    this.catGrid = new Grid();
    this.catGrid.setColumns("catName", "createDate");
    this.catGrid.setWidth(700, Unit.PIXELS);

    HorizontalLayout itemsLayout = new HorizontalLayout(this.itemGrid, this.itemsForm);
    HorizontalLayout catsLayout = new HorizontalLayout(this.catGrid, this.catgoryForm);
    setCompositionRoot(new VerticalLayout(menu, itemsLayout, catsLayout));
    itemGrid.addSelectionListener(e -> itemForm.setItem((UserItem) itemGrid.getSelectedRow()));
    catGrid.addSelectionListener(e -> catForm.setCategory((Category) catGrid.getSelectedRow()));
}

From source file:org.geant.sat.ui.ImportEntityViewer.java

License:BSD License

/**
 * Constructor./*  ww w  .  ja  v a  2s  .c o m*/
 * 
 * @param ui
 *            main ui class.
 */
@SuppressWarnings("unchecked")
ImportEntityViewer(MainUI ui) {
    super(ui);
    Design.read(this);
    // Initialize buttons and text fields
    metadataUrl.setCaption(getString("lang.importer.text.url"));
    fetchContent.setCaption(getString("lang.importer.button.fetch"));
    fetchContent.addClickListener(this);
    cancelButton.setCaption(getString("lang.importer.button.cancel"));
    cancelButton.addClickListener(this);
    importButton.setCaption(getString("lang.importer.button.import"));
    importButton.addClickListener(this);
    importButton.setEnabled(false);
    addToBasketButton.setCaption(getString("lang.importer.button.selectforimport"));
    addToBasketButton.addClickListener(this);
    addToBasketButton.setEnabled(false);
    viewBasketButton.setVisible(false);
    viewBasketButton.addStyleName(ValoTheme.BUTTON_LINK);
    viewBasketButton.addClickListener(this);
    availableEntitiesFilter.setCaption(getString("lang.importer.text.filter"));
    availableEntitiesFilter.addValueChangeListener(this);
    availableEntitiesFilter.setEnabled(false);
    // Initialize entity selection grid
    availableEntities.setCaption(getString("lang.importer.selection.available"));
    availableEntities.setSelectionMode(SelectionMode.MULTI);
    availableEntities.addSelectionListener(event -> {
        addToBasketButton.setEnabled(event.getAllSelectedItems().size() > 0);
    });
    availableEntities.addColumn(EntityDetails::getName).setCaption(getString("lang.entities.column.name"));
    availableEntities.addColumn(EntityDetails::getDescription)
            .setCaption(getString("lang.entities.column.description")).setHidable(true);
    availableEntities.addColumn(entitydetail -> getAssessors(entitydetail))
            .setCaption(getString("lang.entities.column.assesors")).setHidable(true).setHidden(true);
    // Initialize entity basket grid
    basketEntities = new Grid<EntityDetails>();
    ((Grid<EntityDetails>) basketEntities).setCaption(getString("lang.importer.selection"));
    ((Grid<EntityDetails>) basketEntities).setItems(entitiesSelection);
    ((Grid<EntityDetails>) basketEntities).addColumn(EntityDetails::getName)
            .setCaption(getString("lang.entities.column.name"));
    ((Grid<EntityDetails>) basketEntities).addColumn(EntityDetails::getDescription)
            .setCaption(getString("lang.entities.column.description")).setHidable(true).setHidden(true);
    ((Grid<EntityDetails>) basketEntities).addColumn(entitydetail -> getAssessors(entitydetail))
            .setCaption(getString("lang.entities.column.assesors")).setHidable(true).setHidden(true);
    ((Grid<EntityDetails>) basketEntities).addColumn(entitiesSelection -> getString("lang.button.remove"),
            new ButtonRenderer(clickEvent -> {
                Notification.show(getString("lang.itemremoved"), Notification.Type.HUMANIZED_MESSAGE);
                entitiesSelection.remove(clickEvent.getItem());
                ((Grid<EntityDetails>) basketEntities).setItems(entitiesSelection);
                importButton.setEnabled(entitiesSelection.size() > 0);
                viewBasketButton.setVisible(entitiesSelection.size() > 0);
            }));

}

From source file:org.jpos.qi.QIEntityView.java

License:Open Source License

public Grid createGrid() {
    Grid g = new Grid();
    g.setSizeFull();/* w ww  .  j  a  v  a2  s . c om*/
    g.setSelectionMode(Grid.SelectionMode.SINGLE);
    g.setColumnReorderingAllowed(true);
    g.addItemClickListener(event -> {
        navigateToSpecificView(event);
    });
    return g;
}

From source file:org.jumpmind.metl.ui.views.design.ManageProjectsPanel.java

License:Open Source License

public ManageProjectsPanel(ApplicationContext context, DesignNavigator projectNavigator) {
    this.setSizeFull();
    this.context = context;
    this.projectNavigator = projectNavigator;

    ButtonBar buttonBar = new ButtonBar();
    addComponent(buttonBar);// w ww . j  a va2 s. co  m

    newProjectButton = buttonBar.addButton("New Project", Icons.PROJECT);
    newProjectButton.addClickListener(event -> newProject());

    editButton = buttonBar.addButton("Edit Project", FontAwesome.EDIT);
    editButton.addClickListener(event -> edit(projectGrid));

    removeButton = buttonBar.addButton("Remove Project", Icons.DELETE);
    removeButton.addClickListener(event -> removeProject());

    gridContainer = new BeanItemContainer<>(Project.class);
    projectGrid = new Grid();
    projectGrid.setSizeFull();
    projectGrid.setEditorEnabled(true);
    projectGrid.setSelectionMode(SelectionMode.MULTI);

    projectGrid.addColumn("name", String.class).setHeaderCaption("Name").setExpandRatio(2);
    projectGrid.addColumn("description", String.class).setHeaderCaption("Description").setExpandRatio(1);
    projectGrid.addColumn("createTime", Date.class).setHeaderCaption("Create Time").setWidth(185)
            .setMaximumWidth(200).setRenderer(new DateRenderer(UiConstants.DATETIME_FORMAT)).setEditable(false);

    projectGrid.setContainerDataSource(gridContainer);
    projectGrid.setEditorFieldFactory(new FieldFactory());
    projectGrid.addSortListener(event -> {
        lastSortOrder = event.getSortOrder();
    });
    projectGrid.addSelectionListener(event -> setButtonsEnabled());
    projectGrid.addItemClickListener(new GridClickListener(projectGrid));
    projectGrid.addSelectionListener((event) -> {
        Set<Object> removed = event.getRemoved();
        for (Object remove : removed) {
            projectGrid.setDetailsVisible(remove, false);
        }
        Set<Object> selected = event.getSelected();
        for (Object select : selected) {
            projectGrid.setDetailsVisible(select, true);
        }

    });

    projectGrid.getEditorFieldGroup().addCommitHandler(new FieldGroup.CommitHandler() {

        private static final long serialVersionUID = 1L;

        @Override
        public void preCommit(CommitEvent commitEvent) throws CommitException {
        }

        @Override
        public void postCommit(CommitEvent commitEvent) throws CommitException {
            Project item = (Project) projectGrid.getEditedItemId();
            IConfigurationService configurationService = context.getConfigurationService();
            configurationService.save(item);
            projectGrid.markAsDirty();
        }
    });

    HeaderRow filteringHeader = projectGrid.appendHeaderRow();
    HeaderCell logTextFilterCell = filteringHeader.getCell("name");
    TextField filterField = new TextField();
    filterField.setInputPrompt("Filter");
    filterField.addStyleName(ValoTheme.TEXTFIELD_TINY);
    filterField.setWidth("100%");

    filterField.addTextChangeListener(change -> {
        gridContainer.removeContainerFilters("name");
        if (!change.getText().isEmpty()) {
            gridContainer.addContainerFilter(new SimpleStringFilter("name", change.getText(), true, false));
        }
    });
    logTextFilterCell.setComponent(filterField);

    projectGrid.setDetailsGenerator((rowReference) -> buildVersionGrid((Project) rowReference.getItemId()));

    addComponent(projectGrid);
    setExpandRatio(projectGrid, 1);

    setButtonsEnabled();

}

From source file:org.jumpmind.metl.ui.views.design.ManageProjectsPanel.java

License:Open Source License

protected Component buildVersionGrid(Project project) {
    context.getConfigurationService().refresh(project);
    List<ProjectVersion> versions = project.getProjectVersions();
    BeanItemContainer<ProjectVersion> versionGridContainer = new BeanItemContainer<>(ProjectVersion.class);
    Grid versionGrid = new Grid();

    VerticalLayout layout = new VerticalLayout();
    layout.setWidth(100, Unit.PERCENTAGE);
    layout.setMargin(true);//from w  w w  . j  a va 2s. co m
    layout.setSpacing(true);
    HorizontalLayout buttons = new HorizontalLayout();
    buttons.setSpacing(true);
    Button openButton = new Button("Open", (event) -> {
        Collection<Object> selected = versionGrid.getSelectedRows();
        for (Object object : selected) {
            projectNavigator.addProjectVersion(((ProjectVersion) object));
        }
    });
    buttons.addComponent(openButton);
    Button newButton = new Button("New Version", (event) -> newVersion(versionGrid));
    buttons.addComponent(newButton);
    Button editButton = new Button("Edit Version", (event) -> edit(versionGrid));
    buttons.addComponent(editButton);
    Button removeButton = new Button("Remove Version", (event) -> removeVersion(versionGrid));
    buttons.addComponent(removeButton);

    openButton.setEnabled(false);
    newButton.setEnabled(false);
    removeButton.setEnabled(false);
    editButton.setEnabled(false);

    layout.addComponent(buttons);

    versionGrid.setWidth(100, Unit.PERCENTAGE);
    versionGrid.setHeight(3 + (versions.size() * ROW_EM), Unit.EM);
    versionGrid.setEditorEnabled(true);
    versionGrid.setSelectionMode(SelectionMode.MULTI);

    versionGrid.addColumn("versionLabel", String.class).setHeaderCaption("Version").setExpandRatio(2);
    versionGrid.addColumn("description", String.class).setHeaderCaption("Description").setExpandRatio(1);
    versionGrid.addColumn("readOnly", Boolean.class).setHeaderCaption("Read Only").setMaximumWidth(100)
            .setRenderer(new HtmlRenderer(), new StringToBooleanConverter() {
                private static final long serialVersionUID = 1L;

                protected String getTrueString() {
                    return FontAwesome.CHECK.getHtml();
                };

                protected String getFalseString() {
                    return "";
                };
            });
    versionGrid.addColumn("createTime", Date.class).setHeaderCaption("Create Time").setWidth(185)
            .setMaximumWidth(200).setRenderer(new DateRenderer(UiConstants.DATETIME_FORMAT)).setEditable(false);

    versionGrid.setContainerDataSource(versionGridContainer);
    versionGrid.setEditorFieldFactory(new FieldFactory());

    versionGrid.getEditorFieldGroup().addCommitHandler(new FieldGroup.CommitHandler() {

        private static final long serialVersionUID = 1L;

        @Override
        public void preCommit(CommitEvent commitEvent) throws CommitException {
        }

        @Override
        public void postCommit(CommitEvent commitEvent) throws CommitException {
            ProjectVersion item = (ProjectVersion) versionGrid.getEditedItemId();
            IConfigurationService configurationService = context.getConfigurationService();
            configurationService.save(item);
            projectGrid.markAsDirty();
        }
    });

    versionGrid.addSelectionListener((event) -> {
        int numberSelected = versionGrid.getSelectedRows().size();
        boolean currentlyEditing = projectGrid.getEditedItemId() != null;
        boolean selected = numberSelected > 0 && !currentlyEditing;
        openButton.setEnabled(selected);
        newButton.setEnabled(selected);
        removeButton.setEnabled(selected);
        editButton.setEnabled(selected);
    });
    versionGrid.addItemClickListener(new GridClickListener(versionGrid));
    layout.addComponent(versionGrid);
    layout.setExpandRatio(versionGrid, 1);
    layout.addComponent(new Label(" "));
    versionGridContainer.addAll(versions);
    versionGrid.sort("versionLabel", SortDirection.DESCENDING);

    return layout;
}

From source file:org.jumpmind.metl.ui.views.manage.ExecutionRunPanel.java

License:Open Source License

public ExecutionRunPanel(String executionId, ApplicationContext context, TabbedPanel parentTabSheet,
        IFlowRunnable flowRunnable) {//from   w ww .  j a v a  2s  .c o  m
    this.executionService = context.getExecutionService();
    this.executionId = executionId;
    this.context = context;
    this.parentTabSheet = parentTabSheet;
    this.flowRunnable = flowRunnable;

    Execution execution = executionService.findExecution(executionId);
    this.flow = context.getConfigurationService().findFlow(execution.getFlowId());

    HorizontalLayout topBar = new HorizontalLayout();
    topBar.setMargin(new MarginInfo(true, true, false, true));
    topBar.setWidth(100, Unit.PERCENTAGE);

    HorizontalLayout left = new HorizontalLayout();
    topBar.addComponent(left);

    HorizontalLayout right = new HorizontalLayout();
    right.setSpacing(true);
    topBar.addComponent(right);
    topBar.setComponentAlignment(right, Alignment.MIDDLE_RIGHT);

    Label limitLabel = new Label("Max Log Messages To Show :");
    right.addComponent(limitLabel);
    right.setComponentAlignment(limitLabel, Alignment.MIDDLE_RIGHT);
    limitField = new ImmediateUpdateTextField(null) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void save(String text) {
            Setting setting = context.getUser().findSetting(UserSetting.SETTING_MAX_LOG_MESSAGE_TO_SHOW);
            setting.setValue(Integer.toString(getMaxToShow(text)));
            context.getConfigurationService().save(setting);
        }
    };
    limitField.setWidth("5em");
    limitField.setValue(context.getUser().get(UserSetting.SETTING_MAX_LOG_MESSAGE_TO_SHOW, "1000"));
    right.addComponent(limitField);
    right.setComponentAlignment(limitField, Alignment.MIDDLE_RIGHT);

    showDiagramCheckbox = new CheckBox("Show Diagram");
    showDiagramCheckbox.addValueChangeListener((event) -> {
        if (showDiagramCheckbox.getValue()) {
            showDiagram();
        } else {
            showDetails();
        }
    });
    right.addComponent(showDiagramCheckbox);
    right.setComponentAlignment(showDiagramCheckbox, Alignment.MIDDLE_RIGHT);

    addComponent(topBar);

    ButtonBar buttonBar = new ButtonBar();

    rerunButton = buttonBar.addButton("Rerun", Icons.RUN, event -> rerun());
    rerunButton.setVisible(false);
    removeButton = buttonBar.addButton("Remove", Icons.DELETE, event -> remove());
    removeButton.setVisible(false);
    cancelButton = buttonBar.addButton("Cancel", Icons.CANCEL, event -> cancel());

    addComponent(buttonBar);

    HorizontalLayout header1 = new HorizontalLayout();
    header1.addComponent(new Label("<b>Flow:</b>", ContentMode.HTML));
    header1.addComponent(flowLabel);
    header1.addComponent(new Label("<b>Start:</b>", ContentMode.HTML));
    header1.addComponent(startLabel);
    header1.setSpacing(true);
    header1.setMargin(new MarginInfo(false, true, false, true));
    header1.setWidth("100%");
    addComponent(header1);

    HorizontalLayout header2 = new HorizontalLayout();
    header2.addComponent(new Label("<b>Status:</b>", ContentMode.HTML));
    header2.addComponent(statusLabel);
    header2.addComponent(new Label("<b>End:</b>", ContentMode.HTML));
    header2.addComponent(endLabel);
    header2.setSpacing(true);
    header2.setMargin(new MarginInfo(false, true, true, true));
    header2.setWidth("100%");
    addComponent(header2);

    stepContainer.setBeanIdProperty("id");

    diagramLayout = new VerticalLayout();
    diagramLayout.setWidth(10000, Unit.PIXELS);
    diagramLayout.setHeight(10000, Unit.PIXELS);

    flowPanel = new Panel();
    flowPanel.setSizeFull();
    flowPanel.addStyleName(ValoTheme.PANEL_WELL);

    flowPanel.setContent(diagramLayout);

    stepTable.setContainerDataSource(stepContainer);
    stepTable.setSelectable(true);
    stepTable.setMultiSelect(true);
    stepTable.setImmediate(true);
    stepTable.setSizeFull();
    stepTable.setVisibleColumns(
            new Object[] { "componentName", "threadNumber", "status", "payloadReceived", "messagesReceived",
                    "messagesProduced", "payloadProduced", "startTime", "endTime", "handleDurationString" });
    stepTable.setColumnHeaders(new String[] { "Component Name", "Thread", "Status", "Payload Recvd",
            "Msgs Recvd", "Msgs Sent", "Payload Sent", "Start", "End", "Run Duration" });
    stepTable.setColumnWidth("status", 100);
    stepTable.setColumnWidth("messagesReceived", 100);
    stepTable.setColumnWidth("messagesProduced", 100);
    stepTable.setColumnWidth("payloadReceived", 100);
    stepTable.setColumnWidth("payloadProduced", 100);
    stepTable.setColumnWidth("threadNumber", 100);
    stepTable.setColumnWidth("startTime", 170);
    stepTable.setColumnWidth("endTime", 170);
    stepTable.setColumnExpandRatio("handleDurationString", 1);
    stepTable.addValueChangeListener(event -> {
        @SuppressWarnings("unchecked")
        Set<String> executionStepIds = (Set<String>) event.getProperty().getValue();
        logContainer.removeAllItems();
        List<ExecutionStepLog> logs = executionService.findExecutionStepLogs(executionStepIds, getMaxToShow());
        logContainer.addAll(logs);
    });

    stepTable.addValueChangeListener(event -> {
        @SuppressWarnings("unchecked")
        Set<String> executionStepIds = (Set<String>) event.getProperty().getValue();
        logContainer.removeAllItems();
        List<ExecutionStepLog> logs = executionService.findExecutionStepLogs(executionStepIds, getMaxToShow());
        logContainer.addAll(logs);
    });

    logTable = new Grid();
    logTable.addColumn("level", String.class).setHeaderCaption("Level").setWidth(110).setMaximumWidth(200);
    logTable.addColumn("createTime", Date.class).setHeaderCaption("Time").setWidth(120).setMaximumWidth(200)
            .setRenderer(new DateRenderer(UiConstants.TIME_FORMAT));
    logTable.addColumn("logText", String.class).setHeaderCaption("Message").setExpandRatio(1);
    logTable.setContainerDataSource(logContainer);
    logTable.setSizeFull();
    logTable.addItemClickListener(event -> logTableCellClicked(logTable, event));
    logTable.addSortListener(event -> {
        lastSortOrder = event.getSortOrder();
    });

    HeaderRow filteringHeader = logTable.appendHeaderRow();
    HeaderCell logTextFilterCell = filteringHeader.getCell("logText");
    TextField filterField = new TextField();
    filterField.setInputPrompt("Filter");
    filterField.addStyleName(ValoTheme.TEXTFIELD_TINY);
    filterField.setWidth("100%");

    // Update filter When the filter input is changed
    filterField.addTextChangeListener(change -> {
        // Can't modify filters so need to replace
        logContainer.removeContainerFilters("logText");

        // (Re)create the filter if necessary
        if (!change.getText().isEmpty())
            logContainer.addContainerFilter(new SimpleStringFilter("logText", change.getText(), true, false));
    });
    logTextFilterCell.setComponent(filterField);

    HeaderCell levelFilterCell = filteringHeader.getCell("level");
    ComboBox levelFilter = new ComboBox();
    levelFilter.setWidth(8, Unit.EM);
    levelFilter.setNullSelectionAllowed(true);
    LogLevel[] levels = LogLevel.values();
    for (LogLevel logLevel : levels) {
        levelFilter.addItem(logLevel.name());
    }
    levelFilter.addValueChangeListener(change -> {
        logContainer.removeContainerFilters("level");
        String text = (String) levelFilter.getValue();
        if (isNotBlank(text)) {
            logContainer.addContainerFilter(new SimpleStringFilter("level", text, true, false));
        }
    });
    levelFilterCell.setComponent(levelFilter);

    levelFilter.addStyleName(ValoTheme.COMBOBOX_TINY);

    splitPanel = new VerticalSplitPanel();
    splitPanel.setFirstComponent(flowPanel);
    splitPanel.setSecondComponent(logTable);
    splitPanel.setSplitPosition(50f);
    splitPanel.setSizeFull();
    addComponent(splitPanel);
    setExpandRatio(splitPanel, 1.0f);

    showDiagramCheckbox.setValue(context.getUser().getBoolean(UserSetting.SETTING_SHOW_RUN_DIAGRAM, true));
    if (!showDiagramCheckbox.getValue()) {
        showDetails();
    }

    context.getBackgroundRefresherService().register(this);
}