package fr.opensagres.mongodb.ide.ui.editors.database; import java.util.List; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import fr.opensagres.mongodb.ide.core.model.Database; import fr.opensagres.mongodb.ide.core.model.stats.CollectionStats; import fr.opensagres.mongodb.ide.ui.dialogs.StackTraceErrorDialog; import fr.opensagres.mongodb.ide.ui.editors.AbstractToolbarFormPage; import fr.opensagres.mongodb.ide.ui.internal.ImageResources; import fr.opensagres.mongodb.ide.ui.internal.Messages; import fr.opensagres.mongodb.ide.ui.singlesourcing.SingleSourcingUtils; import fr.opensagres.mongodb.ide.ui.viewers.ViewerHelper; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsAvgObjColumnLabelProvider; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsContentProvider; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsCountColumnLabelProvider; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsIndexSizeColumnLabelProvider; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsNameColumnLabelProvider; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsPaddingColumnLabelProvider; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsSizeColumnLabelProvider; import fr.opensagres.mongodb.ide.ui.viewers.stats.StatsStorageColumnLabelProvider; public class StatsPage extends AbstractToolbarFormPage { public static final String ID = "stats"; private TreeViewer viewer; public StatsPage(DatabaseEditor editor) { super(editor, ID, Messages.StatsPage_title); } @Override protected Image getFormTitleImage() { return ImageResources.getImage(ImageResources.IMG_STATS_16); } @Override protected void fillBody(IManagedForm managedForm, FormToolkit toolkit) { Composite body = managedForm.getForm().getBody(); body.setLayout(new GridLayout()); Composite left = toolkit.createComposite(body); left.setLayout(new GridLayout()); left.setLayoutData(new GridData(GridData.FILL_BOTH)); createStatsSection(left, toolkit); initialize(); } private void createStatsSection(Composite parent, FormToolkit toolkit) { Section section = toolkit.createSection(parent, Section.DESCRIPTION | Section.TITLE_BAR); section.setDescription(Messages.DatabaseEditor_OverviewPage_Stats_desc); section.setText(Messages.DatabaseEditor_OverviewPage_Stats_title); section.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite sbody = toolkit.createComposite(section); section.setClient(sbody); GridLayout glayout = new GridLayout(); glayout.numColumns = 1; sbody.setLayout(glayout); sbody.setLayoutData(new GridData(GridData.FILL_BOTH)); // Create TreeView of stats final Tree treeStats = toolkit.createTree(sbody, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); treeStats.setLayoutData(new GridData(GridData.FILL_BOTH)); viewer = new TreeViewer(treeStats); viewer.setContentProvider(StatsContentProvider.getInstance()); treeStats.setHeaderVisible(true); treeStats.setLinesVisible(true); // 3) Create Tree columns with sort of paginated list. createColumns(viewer); SingleSourcingUtils.FormToolkit_paintBordersFor(toolkit, sbody); } private void initialize() { Database database = ((DatabaseEditor) getEditor()).getModelObject(); try { List<CollectionStats> collectionStats = database.createStats(); viewer.setInput(collectionStats); } catch (Exception e) { StackTraceErrorDialog.openError(getSite().getShell(), "dialogTitle", "title", e); } } private static void createColumns(final TreeViewer viewer) { // Name collection column ViewerHelper.createColumn(viewer, Messages.columnName, 150, StatsNameColumnLabelProvider.getInstance(), CollectionStats.NAME_PROPERTY); // Count column ViewerHelper.createColumn(viewer, Messages.columnCount, 50, StatsCountColumnLabelProvider.getInstance(), CollectionStats.COUNT_PROPERTY); // Size column ViewerHelper.createColumn(viewer, Messages.columnSize, 50, StatsSizeColumnLabelProvider.getInstance(), CollectionStats.SIZE_PROPERTY); // Storage column ViewerHelper.createColumn(viewer, Messages.columnStorage, 60, StatsStorageColumnLabelProvider.getInstance(), CollectionStats.STORAGE_PROPERTY); // Index Size column ViewerHelper.createColumn(viewer, Messages.columnIndexSize, 50, StatsIndexSizeColumnLabelProvider.getInstance(), CollectionStats.TOTAL_INDEX_SIZE_PROPERTY); // AvgObj column ViewerHelper.createColumn(viewer, Messages.columnAvgObj, 50, StatsAvgObjColumnLabelProvider.getInstance(), CollectionStats.AVGOBJ_PROPERTY); // Padding column ViewerHelper.createColumn(viewer, Messages.columnPadding, 60, StatsPaddingColumnLabelProvider.getInstance(), CollectionStats.PADDING_PROPERTY); } }