diff options
7 files changed, 107 insertions, 420 deletions
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractBricksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractBricksPage.java deleted file mode 100644 index baa6cbe9..00000000 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractBricksPage.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> - * This file is part of Gluster Management Console. - * - * Gluster Management Console is free software; you can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Gluster Management Console is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License - * for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see - * <http://www.gnu.org/licenses/>. - *******************************************************************************/ -package com.gluster.storage.management.gui.views.pages; - -import java.util.List; - -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.TableEditor; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableItem; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbenchSite; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ImageHyperlink; - -import com.gluster.storage.management.core.model.Brick; -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.Disk.DISK_STATUS; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.gui.Application; -import com.gluster.storage.management.gui.IEntityListener; -import com.gluster.storage.management.gui.jobs.InitializeDiskJob; -import com.gluster.storage.management.gui.utils.GUIHelper; - -public abstract class AbstractBricksPage extends Composite implements IEntityListener { - protected final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - protected CheckboxTableViewer tableViewer; - private IWorkbenchSite site; - protected static final GUIHelper guiHelper = GUIHelper.getInstance(); - - /** - * Setup properties of the table e.g. column headers, widths, etc. - * - * @param parent - * The parent composite. (TableColumnLayout has to be set on this) - * @param table - * The table to be set up - */ - protected abstract void setupDiskTable(Composite parent, Table table); - - /** - * @return The label provider to be used with the disk table viewer - */ - protected abstract ITableLabelProvider getTableLabelProvider(); - - /** - * @return Index of the "status" column in the table. Return -1 if status column is not displayed - */ - protected abstract int getStatusColumnIndex(); - - private void init(final Composite parent, IWorkbenchSite site, List<Brick> bricks) { - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - } - }); - - this.site = site; - - setupPageLayout(); - Text filterText = guiHelper.createFilterText(toolkit, this); - setupBrickTableViewer(createTableViewerComposite(), filterText); - site.setSelectionProvider(tableViewer); - - tableViewer.setInput(bricks); - - site.setSelectionProvider(tableViewer); - Application.getApplication().addEntityListener(this); - - parent.layout(); // Important - this actually paints the table - - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - /** - * Ideally not required. However the table viewer is not getting laid out properly on performing - * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window - */ - addPaintListener(new PaintListener() { - @Override - public void paintControl(PaintEvent e) { - parent.layout(); - } - }); - } - - public AbstractBricksPage(final Composite parent, int style, IWorkbenchSite site, List<Brick> bricks) { - super(parent, style); - init(parent, site, bricks); - } - - private void setupPageLayout() { - final GridLayout layout = new GridLayout(1, false); - layout.verticalSpacing = 10; - layout.marginTop = 10; - setLayout(layout); - } - - private Composite createTableViewerComposite() { - Composite tableViewerComposite = new Composite(this, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - return tableViewerComposite; - } - - private CheckboxTableViewer createBrickTableViewer(Composite parent) { - tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI ); - - tableViewer.setLabelProvider(getTableLabelProvider()); - tableViewer.setContentProvider(new ArrayContentProvider()); - - setupDiskTable(parent, tableViewer.getTable()); - - // make sure that table selection is driven by checkbox selection - guiHelper.configureCheckboxTableViewer(tableViewer); - - return tableViewer; - } - - private void setupBrickTableViewer(Composite parent, final Text filterText) { - tableViewer = createBrickTableViewer(parent); - // Create a case insensitive filter for the table viewer using the filter text field - guiHelper.createFilter(tableViewer, filterText, false); - } -} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java index 55283c7a..133aed38 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java @@ -21,8 +21,7 @@ package com.gluster.storage.management.gui.views.pages; import java.util.List; import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.TableEditor; @@ -30,102 +29,55 @@ import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; -import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ImageHyperlink; +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Disk.DISK_STATUS; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.gui.Application; import com.gluster.storage.management.gui.IEntityListener; import com.gluster.storage.management.gui.jobs.InitializeDiskJob; -import com.gluster.storage.management.gui.utils.GUIHelper; - -public abstract class AbstractDisksPage extends Composite implements IEntityListener { - protected final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - protected CheckboxTableViewer tableViewer; - private IWorkbenchSite site; - protected static final GUIHelper guiHelper = GUIHelper.getInstance(); - - /** - * Setup properties of the table e.g. column headers, widths, etc. - * - * @param parent - * The parent composite. (TableColumnLayout has to be set on this) - * @param table - * The table to be set up - */ - protected abstract void setupDiskTable(Composite parent, Table table); - - /** - * @return The label provider to be used with the disk table viewer - */ - protected abstract ITableLabelProvider getTableLabelProvider(); +public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> implements IEntityListener { + private List<Disk> disks; + /** * @return Index of the "status" column in the table. Return -1 if status column is not displayed */ protected abstract int getStatusColumnIndex(); - private void init(final Composite parent, IWorkbenchSite site, List<Disk> disks) { - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - } - }); - - this.site = site; - - setupPageLayout(); - Text filterText = guiHelper.createFilterText(toolkit, this); - setupDiskTableViewer(createTableViewerComposite(), filterText); - site.setSelectionProvider(tableViewer); - - tableViewer.setInput(disks); - setupStatusCellEditor(); // creates hyperlinks for "unitialized" disks - - site.setSelectionProvider(tableViewer); + public AbstractDisksPage(final Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { + super(site, parent, style, disks); + this.disks = disks; + + // creates hyperlinks for "unitialized" disks + setupStatusCellEditor(); + // Listen for disk status change events Application.getApplication().addEntityListener(this); - - parent.layout(); // Important - this actually paints the table - - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - /** - * Ideally not required. However the table viewer is not getting laid out properly on performing - * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window - */ - addPaintListener(new PaintListener() { - - @Override - public void paintControl(PaintEvent e) { - parent.layout(); - } - }); } - - public AbstractDisksPage(final Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { - super(parent, style); - init(parent, site, disks); + + @Override + protected IContentProvider getContentProvider() { + return new ArrayContentProvider(); } - - private void setupPageLayout() { - final GridLayout layout = new GridLayout(1, false); - layout.verticalSpacing = 10; - layout.marginTop = 10; - setLayout(layout); + + @Override + protected List<Disk> getAllEntities() { + return disks; + } + + @Override + protected ClusterListener createClusterListener() { + return new DefaultClusterListener(); } private void createInitializeLink(final TableItem item, final int rowNum, final Disk disk) { @@ -151,7 +103,7 @@ public abstract class AbstractDisksPage extends Composite implements IEntityList myLink = toolkit.createImageHyperlink(table, SWT.NONE); // link.setImage(guiHelper.getImage(IImageKeys.DISK_UNINITIALIZED)); myLink.setText("Initialize"); - myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, myItem, tableViewer, disk1, site)); + myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, myItem, tableViewer, disk1)); myEditor.setEditor(myLink, item1, getStatusColumnIndex()); @@ -220,47 +172,18 @@ public abstract class AbstractDisksPage extends Composite implements IEntityList } } - private Composite createTableViewerComposite() { - Composite tableViewerComposite = new Composite(this, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - return tableViewerComposite; - } - - private CheckboxTableViewer createDiskTableViewer(Composite parent) { - tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI ); - - tableViewer.setLabelProvider(getTableLabelProvider()); - tableViewer.setContentProvider(new ArrayContentProvider()); - - setupDiskTable(parent, tableViewer.getTable()); - - // make sure that table selection is driven by checkbox selection - guiHelper.configureCheckboxTableViewer(tableViewer); - - return tableViewer; - } - - private void setupDiskTableViewer(Composite parent, final Text filterText) { - tableViewer = createDiskTableViewer(parent); - // Create a case insensitive filter for the table viewer using the filter text field - guiHelper.createFilter(tableViewer, filterText, false); - } - private final class StatusLinkListener extends HyperlinkAdapter { private final Disk disk; private final TableEditor myEditor; private final ImageHyperlink myLink; private final TableViewer viewer; - private final IWorkbenchSite site; private StatusLinkListener(ImageHyperlink link, TableEditor editor, TableItem item, TableViewer viewer, - Disk disk, IWorkbenchSite site) { + Disk disk) { this.disk = disk; this.viewer = viewer; this.myEditor = editor; this.myLink = link; - this.site = site; } private void updateStatus(final DISK_STATUS status, final boolean disposeEditor) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java index a8a98bbd..b64e80d2 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java @@ -52,8 +52,9 @@ public abstract class AbstractTableViewerPage<T> extends Composite { protected final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); protected CheckboxTableViewer tableViewer; protected GUIHelper guiHelper = GUIHelper.getInstance(); - private Hyperlink linkAll, linkNone; protected Composite parent; + + private Hyperlink linkAll, linkNone; public AbstractTableViewerPage(IWorkbenchSite site, final Composite parent, int style, Object model) { super(parent, style); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java index a6bc6f94..b83914eb 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java @@ -20,27 +20,24 @@ package com.gluster.storage.management.gui.views.pages; import java.util.List; -import org.eclipse.jface.layout.TableColumnLayout; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.IWorkbenchSite; -import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.ClusterListener; import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Event.EVENT_TYPE; +import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.gui.BrickTableLabelProvider; -public class BricksPage extends AbstractBricksPage { - private Composite parent; +public class BricksPage extends AbstractTableViewerPage<Brick> { + private List<Brick> bricks; public enum BRICK_TABLE_COLUMN_INDICES { SERVER, BRICK, FREE_SPACE, TOTAL_SPACE, STATUS @@ -49,13 +46,14 @@ public class BricksPage extends AbstractBricksPage { private static final String[] DISK_TABLE_COLUMN_NAMES = new String[] { "Server", "Brick Directory", "Free Space (GB)", "Total Space (GB)", "Status" }; - public BricksPage(final Composite parent, int style, IWorkbenchSite site, final List<Brick> bricks) { - super(parent, style, site, bricks); - createListeners(); + public BricksPage(Composite parent, int style, IWorkbenchSite site, final List<Brick> bricks) { + super(site, parent, style, bricks); + this.bricks = bricks; } - private void createListeners() { - final ClusterListener clusterListener = new DefaultClusterListener() { + @Override + protected ClusterListener createClusterListener() { + return new DefaultClusterListener() { @Override public void volumeChanged(Volume volume, Event event) { if (event.getEventType() == EVENT_TYPE.BRICKS_ADDED || event.getEventType() == EVENT_TYPE.BRICKS_REMOVED) { @@ -65,43 +63,33 @@ public class BricksPage extends AbstractBricksPage { } }; - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - addDisposeListener(new DisposeListener() { - - @Override - public void widgetDisposed(DisposeEvent e) { - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } - }); } @Override - protected void setupDiskTable(Composite parent, Table table) { - this.parent = parent; - table.setHeaderVisible(true); - table.setLinesVisible(false); - - TableColumnLayout tableColumnLayout = guiHelper.createTableColumnLayout(table, DISK_TABLE_COLUMN_NAMES); - parent.setLayout(tableColumnLayout); - + protected String[] getColumnNames() { + return DISK_TABLE_COLUMN_NAMES; + } + + @Override + protected void setColumnProperties(Table table) { guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.SERVER.ordinal(), SWT.CENTER, 100); guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.BRICK.ordinal(), SWT.CENTER, 100); guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal(), SWT.CENTER, 90); guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal(), SWT.CENTER, 90); - } - + @Override - protected ITableLabelProvider getTableLabelProvider() { + protected ITableLabelProvider getLabelProvider() { return new BrickTableLabelProvider(); } - + @Override - protected int getStatusColumnIndex() { - return BRICK_TABLE_COLUMN_INDICES.STATUS.ordinal(); + protected IContentProvider getContentProvider() { + return new ArrayContentProvider(); } - + @Override - public void entityChanged(Entity entity, String[] paremeters) { + protected List<Brick> getAllEntities() { + return bricks; } }
\ No newline at end of file diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java index 1df74481..bd14607e 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java @@ -20,8 +20,7 @@ package com.gluster.storage.management.gui.views.pages; import java.util.List; -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; @@ -44,25 +43,24 @@ public class DisksPage extends AbstractDisksPage { } @Override - protected void setupDiskTable(Composite parent, Table table) { - table.setHeaderVisible(true); - table.setLinesVisible(false); - - TableColumnLayout tableColumnLayout = guiHelper.createTableColumnLayout(table, DISK_TABLE_COLUMN_NAMES); - parent.setLayout(tableColumnLayout); + protected String[] getColumnNames() { + return DISK_TABLE_COLUMN_NAMES; + } + @Override + protected void setColumnProperties(Table table) { guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.SERVER.ordinal(), SWT.CENTER, 100); guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.DISK.ordinal(), SWT.CENTER, 100); guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal(), SWT.CENTER, 90); guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal(), SWT.CENTER, 90); // guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal(), SWT.CENTER, 90); } - + @Override - protected ITableLabelProvider getTableLabelProvider() { + protected IBaseLabelProvider getLabelProvider() { return new DiskTableLabelProvider(); } - + @Override protected int getStatusColumnIndex() { return DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java index 3621afe1..c2f76a43 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java @@ -20,7 +20,7 @@ package com.gluster.storage.management.gui.views.pages; import java.util.List; -import org.eclipse.jface.layout.TableColumnLayout; +import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; @@ -28,7 +28,6 @@ import org.eclipse.ui.IWorkbenchSite; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.gui.ServerDiskTableLabelProvider; -import com.gluster.storage.management.gui.TableLabelProviderAdapter; public class ServerDisksPage extends AbstractDisksPage { public ServerDisksPage(Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { @@ -43,26 +42,25 @@ public class ServerDisksPage extends AbstractDisksPage { "Space in Use (GB)", "Status" }; @Override - protected void setupDiskTable(Composite parent, Table table) { - table.setHeaderVisible(true); - table.setLinesVisible(false); - - TableColumnLayout tableColumnLayout = guiHelper.createTableColumnLayout(table, SERVER_DISK_TABLE_COLUMN_NAMES); - parent.setLayout(tableColumnLayout); - + protected String[] getColumnNames() { + return SERVER_DISK_TABLE_COLUMN_NAMES; + } + + @Override + protected void setColumnProperties(Table table) { guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.DISK.ordinal(), SWT.CENTER, 100); guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.SPACE.ordinal(), SWT.CENTER, 90); guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal(), SWT.CENTER, 90); guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(), SWT.LEFT, 90); } - + @Override protected int getStatusColumnIndex() { return SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(); } @Override - protected TableLabelProviderAdapter getTableLabelProvider() { + protected IBaseLabelProvider getLabelProvider() { return new ServerDiskTableLabelProvider(); } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java index 38fa2d41..d0824888 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java @@ -18,39 +18,28 @@ *******************************************************************************/ package com.gluster.storage.management.gui.views.pages; +import java.util.List; + import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.IBaseLabelProvider; +import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchSite; -import org.eclipse.ui.forms.widgets.FormToolkit; +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.gui.EntityGroupContentProvider; import com.gluster.storage.management.gui.VolumeTableLabelProvider; -import com.gluster.storage.management.gui.utils.GUIHelper; - -public class VolumesPage extends Composite { - - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private TableViewer tableViewer; - private GUIHelper guiHelper = GUIHelper.getInstance(); +public class VolumesPage extends AbstractTableViewerPage<Volume> { + private List<Volume> volumes; + public enum VOLUME_TABLE_COLUMN_INDICES { NAME, VOLUME_TYPE, NUM_OF_DISKS, TRANSPORT_TYPE, VOLUME_STATUS }; @@ -59,91 +48,37 @@ public class VolumesPage extends Composite { "Number of\nBricks", "Transport Type", "Status" }; public VolumesPage(final Composite parent, IWorkbenchSite site, EntityGroup<Volume> volumes) { - super(parent, SWT.NONE); - - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - } - }); - - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - setupPageLayout(); - setupVolumeTableViewer(site, volumes); - - parent.layout(); // Important - this actually paints the table - - /** - * Ideally not required. However the table viewer is not getting laid out properly on performing - * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window - */ - addPaintListener(new PaintListener() { - - @Override - public void paintControl(PaintEvent e) { - parent.layout(); - } - }); + super(site, parent, SWT.NONE, volumes); } - public void addDoubleClickListener(IDoubleClickListener listener) { - tableViewer.addDoubleClickListener(listener); + @Override + protected String[] getColumnNames() { + return VOLUME_TABLE_COLUMN_NAMES; } - - private void setupPageLayout() { - final GridLayout layout = new GridLayout(1, false); - layout.verticalSpacing = 10; - layout.marginTop = 10; - setLayout(layout); - } - - private void setupVolumeTable(Composite parent, Table table) { - table.setHeaderVisible(true); - table.setLinesVisible(true); - - TableColumnLayout columnLayout = guiHelper.createTableColumnLayout(table, VOLUME_TABLE_COLUMN_NAMES); - parent.setLayout(columnLayout); - + + @Override + protected void setColumnProperties(Table table) { setColumnProperties(table, VOLUME_TABLE_COLUMN_INDICES.VOLUME_STATUS, SWT.CENTER, 50); setColumnProperties(table, VOLUME_TABLE_COLUMN_INDICES.NUM_OF_DISKS, SWT.CENTER, 50); setColumnProperties(table, VOLUME_TABLE_COLUMN_INDICES.TRANSPORT_TYPE, SWT.CENTER, 70); } - - private CheckboxTableViewer createVolumeTableViewer(Composite parent) { - CheckboxTableViewer tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.FLAT | SWT.FULL_SELECTION - | SWT.MULTI); - tableViewer.setLabelProvider(new VolumeTableLabelProvider()); - tableViewer.setContentProvider(new EntityGroupContentProvider<Volume>()); - - setupVolumeTable(parent, tableViewer.getTable()); - - // make sure that table selection is driven by checkbox selection - guiHelper.configureCheckboxTableViewer(tableViewer); - - return tableViewer; + + @Override + protected IBaseLabelProvider getLabelProvider() { + return new VolumeTableLabelProvider(); } - - private Composite createTableViewerComposite() { - Composite tableViewerComposite = new Composite(this, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - return tableViewerComposite; + + @Override + protected IContentProvider getContentProvider() { + return new EntityGroupContentProvider<Volume>(); } - - private void setupVolumeTableViewer(IWorkbenchSite site, EntityGroup<Volume> volumes) { - Text filterText = guiHelper.createFilterText(toolkit, this); - - Composite tableViewerComposite = createTableViewerComposite(); - tableViewer = createVolumeTableViewer(tableViewerComposite); - site.setSelectionProvider(tableViewer); - - // Create a case insensitive filter for the table viewer using the filter text field - guiHelper.createFilter(tableViewer, filterText, false); - tableViewer.setInput(volumes); + + @Override + protected ClusterListener createClusterListener() { + // TODO: Override methods to handle volume related events + return new DefaultClusterListener(); } - + /** * Sets properties for alignment and weight of given column of given table * @@ -159,9 +94,9 @@ public class VolumesPage extends Composite { TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); } - - public void setInput(EntityGroup<Volume> volumes) { - tableViewer.setInput(volumes); - tableViewer.refresh(); + + @Override + protected List<Volume> getAllEntities() { + return volumes; } } |
