Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Current »

Overview

This feature provides a reusable, paginated StyledJTable UI designed to work with external data providers. Developers can plug in their own data sources by implementing a simple interface and configuring the desired table columns.

Functional Requirements

  • To have a similar UI for all the external data providers that are integrated as an IGB App.
  • Make the UI extendable for any type of provider with custom table columns, search functionality, and load action.

Technical Implementation

This feature is implemented in the igb-services-api module. Classes that are part of this feature:

  • GenomeDynamicSearchTable - a class that extends StyledJTable and defines how the columns should be displayed, especially the default columns, load, and info.
  • GenomeDynamicSearchTableModel - Custom AbstractTableModel that uses the data provider interface instance to dynamically populate the table and perform actions.
  • ExternalGenomeDataProvider - An interface that has all the methods that need to be implemented by any class that wants to extend this UI.
  • ExternalGenomeData - A general-purpose structure used to represent each row of the table. This is passed to/from the data provider.
  • GenomeDynamicSearchTableGUI - JPanel class that has all the UI components, including the custom JTable. It has below features:
    • Dynamic, paginated table UI with grouped page navigation (< 1 2 3 >)
    • Optional search functionality to filter table data based on user input
    • Column sorting support — click any column header to sort data
    • Results summary label (e.g., 1–10 of 250 results) for clarity
    • Has the GenomeDynamicSearchTable, which includes customizable columns and data using the ExternalGenomeDataProvider interface, and also includes built-in "Load" button and "Info" icon actions for each row
    • Responsive column sizing based on content and header length

How to Use/Extend in a Plugin App

Below are the steps that can be used to create a Plugin app and use this extendable UI to add an external data provider as an IGB app. You can use the ucsc-genark-data-provider plugin app as a reference at any point.

pom.xml
<dependency>
	<groupId>org.lorainelab.igb</groupId>
	<artifactId>igbSwingExt</artifactId>
	<version>${IGB_VERSION}</version>
</dependency>

<dependency>
	<groupId>org.lorainelab.igb</groupId>
	<artifactId>igb-services</artifactId>
	<version>${IGB_VERSION}</version>
</dependency>
  • Create a class, CustomDataProvider, and implement the ExternalGenomeDataProvider interface to provide implementation for all the methods.
  • Now, create a class to extend the IgbTabPanel like below to add the app as a tab:


CustomDataProviderTabPanel.java
package org.lorainelab.igb.custom.data.provider;

import org.lorainelab.igb.services.dynamic.search.GenomeDynamicSearchTableGUI;
import org.lorainelab.igb.services.window.tabs.IgbTabPanel;
import org.lorainelab.igb.services.window.tabs.IgbTabPanelI;
import org.osgi.service.component.annotations.Component;
import java.awt.BorderLayout;

@Component(service = {IgbTabPanelI.class}, immediate = true)
public class CustomDataProviderTabPanel extends IgbTabPanel {

    private final CustomDataProvider customDataProvider = new CustomDataProvider();

    private final GenomeDynamicSearchTableGUI dynamicSearchTableGUI = new GenomeDynamicSearchTableGUI(customDataProvider);

    public CustomDataProviderTabPanel() {
        super("Custom Data Provider", "Custom Data Provider", null, false, 8);
        init();
    }

    private void init() {
        this.setLayout(new BorderLayout());
        this.add(dynamicSearchTableGUI);
        this.pack();
    }

}
  • No labels