package net.sourceforge.sqlexplorer.dbdetail.tab; import net.sourceforge.sqlexplorer.Messages; import net.sourceforge.sqlexplorer.dataset.DataSet; import net.sourceforge.sqlexplorer.dataset.DataSetTable; import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; public abstract class AbstractDataSetTab extends AbstractTab { private DataSet _dataSet; protected static final Log _logger = LogFactory.getLog(AbstractDataSetTab.class); private Composite _composite; public final void fillDetailComposite(Composite composite) { try { _composite = composite; DataSet dataSet = getCachedDataSet(); if (dataSet == null) { Label label = new Label(composite, SWT.FILL); label.setText(Messages.getString("DatabaseDetailView.NoInformation")); label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); return; } // store for later use in dataset table composite.setData("IDetailTab", this);//$NON-NLS-1$ new DataSetTable(composite, dataSet, getStatusMessage()); } catch (Exception e) { // couldn't get results.. clean mess up Control[] controls = composite.getChildren(); for (int i = 0; i < controls.length; i++) { controls[i].dispose(); } // and show error message Label label = new Label(composite, SWT.FILL); label.setText(Messages.getString("DatabaseDetailView.Tab.Unavailable") + " " + e.getMessage());//$NON-NLS-2$ label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); SQLExplorerPlugin.error(Messages.getString("AbstractDataSetTab.error"), e); } } /** * Returns dataset. if it doesn't exist yet, it is initialized first. */ public final DataSet getCachedDataSet() throws Exception { _logger.debug("getting cached data for " + this.getClass().getName());//$NON-NLS-1$ if (_dataSet != null) { return _dataSet; } _dataSet = getDataSet(); return _dataSet; } /** * Implement this method to initialzie the dataset; */ public abstract DataSet getDataSet() throws Exception; /** * Refresh the contents of the dataset. */ public final void refresh() { _dataSet = null; Control[] controls = _composite.getChildren(); for (int i = 0; i < controls.length; i++) { controls[i].dispose(); } fillComposite(_composite); _composite.layout(); _composite.redraw(); } /** * Implement this method to add a status message on the bottom of the dataset tab. */ public abstract String getStatusMessage(); }