diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-03-17 22:44:18 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-03-17 22:44:18 +0530 |
| commit | e7a0887c7e2f47a757fee4c9d15cc72714e7f8e1 (patch) | |
| tree | 8504a0b5eb4d7b442404d9a9534a399f58a6e6ec /com.gluster.storage.management.gui/src/com/gluster | |
| parent | d7fc89bed7cb7997a31d19004d3e590cd2e9185a (diff) | |
Started moving from tabs to views for the right hand side area of the GUI
Diffstat (limited to 'com.gluster.storage.management.gui/src/com/gluster')
17 files changed, 687 insertions, 126 deletions
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Perspective.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Perspective.java index 80331a4e..a8eb836b 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Perspective.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Perspective.java @@ -21,7 +21,7 @@ package com.gluster.storage.management.gui; import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPerspectiveFactory; -import com.gluster.storage.management.gui.views.details.DetailsView; +import com.gluster.storage.management.gui.views.DetailsView; import com.gluster.storage.management.gui.views.navigator.NavigationView; public class Perspective implements IPerspectiveFactory { diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerTableLabelProvider.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerTableLabelProvider.java index 91c6d7b6..6ec446cc 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerTableLabelProvider.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerTableLabelProvider.java @@ -22,7 +22,7 @@ package com.gluster.storage.management.gui; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.utils.GUIHelper; -import com.gluster.storage.management.gui.views.details.ServersPage.SERVER_TABLE_COLUMN_INDICES; +import com.gluster.storage.management.gui.views.pages.ServersPage.SERVER_TABLE_COLUMN_INDICES; public class ServerTableLabelProvider extends TableLabelProviderAdapter { private GUIHelper guiHelper = GUIHelper.getInstance(); diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeTableLabelProvider.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeTableLabelProvider.java index 044322f2..b0f0c8d0 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeTableLabelProvider.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeTableLabelProvider.java @@ -25,7 +25,7 @@ import org.eclipse.swt.graphics.Image; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; import com.gluster.storage.management.gui.utils.GUIHelper; -import com.gluster.storage.management.gui.views.details.VolumesPage.VOLUME_TABLE_COLUMN_INDICES; +import com.gluster.storage.management.gui.views.pages.VolumesPage.VOLUME_TABLE_COLUMN_INDICES; public class VolumeTableLabelProvider implements ITableLabelProvider { private GUIHelper guiHelper = GUIHelper.getInstance(); diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java index 8957f0e6..e77e3a65 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java @@ -18,6 +18,8 @@ *******************************************************************************/ package com.gluster.storage.management.gui.utils; +import java.util.Iterator; + import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuCreator; @@ -29,9 +31,12 @@ import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; @@ -51,6 +56,7 @@ import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; +import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; @@ -58,10 +64,11 @@ import org.eclipse.ui.forms.widgets.ColumnLayout; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import com.gluster.storage.management.gui.Application; +import com.gluster.storage.management.core.model.Entity; +import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.gui.IImageKeys; +import com.gluster.storage.management.gui.views.navigator.NavigationView; public class GUIHelper { private static final GUIHelper instance = new GUIHelper(); @@ -295,7 +302,7 @@ public class GUIHelper { filterText.setToolTipText(tooltipMessage); return filterText; } - + /** * Sets properties for alignment and weight of given column of given table * @@ -311,7 +318,7 @@ public class GUIHelper { TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); } - + /** * Sets properties for alignment and weight of given column of given table * @@ -324,9 +331,33 @@ public class GUIHelper { */ public TableViewerColumn setColumnProperties(TableViewer tableViewer, int columnIndex, int style, int weight) { TableViewerColumn column = new TableViewerColumn(tableViewer, style, columnIndex); - TableColumnLayout tableColumnLayout = (TableColumnLayout)tableViewer.getTable().getParent().getLayout(); + TableColumnLayout tableColumnLayout = (TableColumnLayout) tableViewer.getTable().getParent().getLayout(); tableColumnLayout.setColumnData(column.getColumn(), new ColumnWeightData(weight)); column.setLabelProvider(new ColumnLabelProvider()); return column; } + + /** + * Fetches the currently selected objects from the workbench site and returns the one of given type. If none of the + * selected objects are of given type, returns null + * + * @param site + * The workbench site + * @param expectedType + * Type of the selected object to look for + * @return The selected object of given type if found, else null + */ + public Object getSelectedEntity(IWorkbenchSite site, Class expectedType) { + ISelection selection = site.getWorkbenchWindow().getSelectionService().getSelection(NavigationView.ID); + if (selection instanceof IStructuredSelection) { + Iterator<Object> iter = ((IStructuredSelection) selection).iterator(); + while (iter.hasNext()) { + Object selectedObj = iter.next(); + if (selectedObj.getClass() == expectedType) { + return selectedObj; + } + } + } + return null; + } } diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java new file mode 100644 index 00000000..b2d2b93a --- /dev/null +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java @@ -0,0 +1,155 @@ +/** + * DiscoveredServerView.java + * + * 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; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ImageHyperlink; +import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.part.ViewPart; + +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.Cluster; +import com.gluster.storage.management.core.model.GlusterServer; +import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; +import com.gluster.storage.management.gui.IImageKeys; +import com.gluster.storage.management.gui.utils.GUIHelper; +import com.gluster.storage.management.gui.views.details.tabcreators.PieChartViewerComposite; + +/** + * @author root + * + */ +public class ClusterSummaryView extends ViewPart { + public static final String ID = ClusterSummaryView.class.getName(); + private static final GUIHelper guiHelper = GUIHelper.getInstance(); + private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); + private ScrolledForm form; + private Cluster cluster; + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + @Override + public void createPartControl(Composite parent) { + if (cluster == null) { + //cluster = (Cluster)guiHelper.getSelectedEntity(getSite(), Cluster.class); + cluster = (Cluster)GlusterDataModelManager.getInstance().getModel().getChildren().get(0); + } + + createSections(parent); + } + + private int getVolumeCountByStatus(Cluster cluster, VOLUME_STATUS status) { + int count = 0; + for (Volume volume : cluster.getVolumes()) { + if (volume.getStatus() == status) { + count++; + } + } + return count; + } + + private int getServerCountByStatus(Cluster cluster, SERVER_STATUS status) { + int count = 0; + for (GlusterServer server : cluster.getServers()) { + if (server.getStatus() == status) { + count++; + } + } + return count; + } + + private void createVolumesSection() { + Composite section = guiHelper.createSection(form, toolkit, "Volumes", null, 1, false); + + Double[] values = new Double[] { Double.valueOf(getVolumeCountByStatus(cluster, VOLUME_STATUS.ONLINE)), + Double.valueOf(getVolumeCountByStatus(cluster, VOLUME_STATUS.OFFLINE)) }; + createStatusChart(toolkit, section, values); + } + + private void createServersSection() { + Composite section = guiHelper.createSection(form, toolkit, "Servers", null, 1, false); + + Double[] values = new Double[] { Double.valueOf(getServerCountByStatus(cluster, SERVER_STATUS.ONLINE)), + Double.valueOf(getServerCountByStatus(cluster, SERVER_STATUS.OFFLINE)) }; + + createStatusChart(toolkit, section, values); + } + + private void createStatusChart(FormToolkit toolkit, Composite section, Double[] values) { + String[] categories = new String[] { "Online", "Offline" }; + PieChartViewerComposite chartViewerComposite = new PieChartViewerComposite(section, SWT.NONE, categories, values); + + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + data.widthHint = 250; + data.heightHint = 250; + chartViewerComposite.setLayoutData(data); + } + + private void createActionsSection() { + Composite section = guiHelper.createSection(form, toolkit, "Actions", null, 1, false); + + ImageHyperlink imageHyperlink = toolkit.createImageHyperlink(section, SWT.NONE); + imageHyperlink.setText("Create Volume"); + imageHyperlink.setImage(guiHelper.getImage(IImageKeys.CREATE_VOLUME_BIG)); + imageHyperlink.addHyperlinkListener(new HyperlinkAdapter() { + // TODO: Override appropriate method and handle hyperlink event + }); + + imageHyperlink = toolkit.createImageHyperlink(section, SWT.NONE); + imageHyperlink.setText("Add Server(s)"); + imageHyperlink.setImage(guiHelper.getImage(IImageKeys.ADD_SERVER_BIG)); + imageHyperlink.addHyperlinkListener(new HyperlinkAdapter() { + // TODO: Override appropriate method and handle hyperlink event + }); + } + + private void createSections(Composite parent) { + form = guiHelper.setupForm(parent, toolkit, "Cluster Summary"); + + createVolumesSection(); + createServersSection(); + createActionsSection(); + + parent.layout(); // IMP: lays out the form properly + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#setFocus() + */ + @Override + public void setFocus() { + if (form != null) { + form.setFocus(); + } + } +} diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/DetailsView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DetailsView.java index 5dbdb853..a19621dd 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/DetailsView.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DetailsView.java @@ -16,7 +16,7 @@ * along with this program. If not, see * <http://www.gnu.org/licenses/>. *******************************************************************************/ -package com.gluster.storage.management.gui.views.details; +package com.gluster.storage.management.gui.views; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeSelection; @@ -36,6 +36,8 @@ import org.eclipse.ui.part.ViewPart; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.gui.toolbar.ToolbarManager; +import com.gluster.storage.management.gui.views.details.TabCreatorFactory; +import com.gluster.storage.management.gui.views.details.TabCreatorFactoryImpl; import com.gluster.storage.management.gui.views.navigator.NavigationView; /** @@ -43,7 +45,7 @@ import com.gluster.storage.management.gui.views.navigator.NavigationView; * whenever selection changes on the navigation view (cluster tree) on the left hand side of the UI. */ public class DetailsView extends ViewPart implements ISelectionListener { - public static final String ID = "com.gluster.storage.management.gui.views.details"; + public static final String ID = DetailsView.class.getName(); private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); private TabFolder tabFolder; private Entity entity; diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServerView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServerView.java new file mode 100644 index 00000000..b63d5b84 --- /dev/null +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServerView.java @@ -0,0 +1,90 @@ +/** + * DiscoveredServerView.java + * + * 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; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.part.ViewPart; + +import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.core.utils.NumberUtil; +import com.gluster.storage.management.gui.utils.GUIHelper; + +/** + * @author root + * + */ +public class DiscoveredServerView extends ViewPart { + public static final String ID = DiscoveredServerView.class.getName(); + private static final GUIHelper guiHelper = GUIHelper.getInstance(); + private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); + private ScrolledForm form; + private Server server; + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + @Override + public void createPartControl(Composite parent) { + if (server == null) { + server = (Server) guiHelper.getSelectedEntity(getSite(), Server.class); + } + createSections(parent, server, toolkit); + } + + private void createServerSummarySection(Server server, FormToolkit toolkit, final ScrolledForm form) { + Composite section = guiHelper.createSection(form, toolkit, "Summary", null, 2, false); + + toolkit.createLabel(section, "Number of CPUs: ", SWT.NONE); + toolkit.createLabel(section, "" + server.getNumOfCPUs(), SWT.NONE); + + toolkit.createLabel(section, "Total Memory (GB): ", SWT.NONE); + toolkit.createLabel(section, "" + server.getTotalMemory(), SWT.NONE); + + toolkit.createLabel(section, "Total Disk Space (GB): ", SWT.NONE); + toolkit.createLabel(section, "" + NumberUtil.formatNumber(server.getTotalDiskSpace()), SWT.NONE); + } + + private void createSections(Composite parent, Server server, FormToolkit toolkit) { + String serverName = server.getName(); + form = guiHelper.setupForm(parent, toolkit, "Discovered Server Summary [" + serverName + "]"); + createServerSummarySection(server, toolkit, form); + + parent.layout(); // IMP: lays out the form properly + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#setFocus() + */ + @Override + public void setFocus() { + if (form != null) { + form.setFocus(); + } + } +} diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java index 2969df29..5fa6771b 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java @@ -25,7 +25,6 @@ import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeSelection; -import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPart; @@ -35,8 +34,8 @@ import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.gui.utils.GUIHelper; -import com.gluster.storage.management.gui.views.details.ServersPage; import com.gluster.storage.management.gui.views.navigator.NavigationView; +import com.gluster.storage.management.gui.views.pages.ServersPage; /** * @@ -48,7 +47,6 @@ public class DiscoveredServersView extends ViewPart implements IDoubleClickListe private ServersPage page; public DiscoveredServersView() { - // TODO Auto-generated constructor stub } /* @@ -59,21 +57,15 @@ public class DiscoveredServersView extends ViewPart implements IDoubleClickListe @Override public void createPartControl(Composite parent) { if (servers == null) { - ISelection selection = getSite().getPage().getSelection(); - if (selection instanceof TreeSelection) { - Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement(); - if (selectedEntity instanceof EntityGroup) { - EntityGroup group = (EntityGroup) selectedEntity; - if (group.getEntityType() == Server.class) { - servers = group; - } - } + Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); + if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Server.class) { + servers = (EntityGroup<Server>)selectedObj; } } - page = new ServersPage(parent, SWT.NONE, servers); - + + page = new ServersPage(parent, getSite(), servers); page.addDoubleClickListener(this); - getSite().getPage().addSelectionListener(this); + getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(NavigationView.ID, this); } /* @@ -105,7 +97,8 @@ public class DiscoveredServersView extends ViewPart implements IDoubleClickListe if (part instanceof NavigationView && selection instanceof TreeSelection) { Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement(); - if (servers == selectedEntity || selectedEntity == null || !(selectedEntity instanceof EntityGroup) || ((EntityGroup) selectedEntity).getEntityType() != Server.class) { + if (servers == selectedEntity || selectedEntity == null || !(selectedEntity instanceof EntityGroup) + || ((EntityGroup) selectedEntity).getEntityType() != Server.class) { // entity selection has not changed. do nothing. return; } diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeView.java new file mode 100644 index 00000000..1983f6e4 --- /dev/null +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeView.java @@ -0,0 +1,90 @@ +/** + * DiscoveredServerView.java + * + * 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; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.part.ViewPart; + +import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.core.utils.NumberUtil; +import com.gluster.storage.management.gui.utils.GUIHelper; + +/** + * @author root + * + */ +public class VolumeView extends ViewPart { + public static final String ID = VolumeView.class.getName(); + private static final GUIHelper guiHelper = GUIHelper.getInstance(); + private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); + private ScrolledForm form; + private Server server; + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + @Override + public void createPartControl(Composite parent) { + if (server == null) { + server = (Server) guiHelper.getSelectedEntity(getSite(), Server.class); + } + createSections(parent, server, toolkit); + } + + private void createServerSummarySection(Server server, FormToolkit toolkit, final ScrolledForm form) { + Composite section = guiHelper.createSection(form, toolkit, "Summary", null, 2, false); + + toolkit.createLabel(section, "Number of CPUs: ", SWT.NONE); + toolkit.createLabel(section, "" + server.getNumOfCPUs(), SWT.NONE); + + toolkit.createLabel(section, "Total Memory (GB): ", SWT.NONE); + toolkit.createLabel(section, "" + server.getTotalMemory(), SWT.NONE); + + toolkit.createLabel(section, "Total Disk Space (GB): ", SWT.NONE); + toolkit.createLabel(section, "" + NumberUtil.formatNumber(server.getTotalDiskSpace()), SWT.NONE); + } + + private void createSections(Composite parent, Server server, FormToolkit toolkit) { + String serverName = server.getName(); + form = guiHelper.setupForm(parent, toolkit, "Discovered Server Summary [" + serverName + "]"); + createServerSummarySection(server, toolkit, form); + + parent.layout(); // IMP: lays out the form properly + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#setFocus() + */ + @Override + public void setFocus() { + if (form != null) { + form.setFocus(); + } + } +} diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java new file mode 100644 index 00000000..7686ed38 --- /dev/null +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java @@ -0,0 +1,128 @@ +/** + * DiscoveredServerView.java + * + * 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; + +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.part.ViewPart; + +import com.gluster.storage.management.core.model.EntityGroup; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; +import com.gluster.storage.management.gui.utils.GUIHelper; +import com.gluster.storage.management.gui.views.details.tabcreators.PieChartViewerComposite; + +/** + * @author root + * + */ +public class VolumesSummaryView extends ViewPart { + public static final String ID = VolumesSummaryView.class.getName(); + private static final GUIHelper guiHelper = GUIHelper.getInstance(); + private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); + private ScrolledForm form; + private EntityGroup<Volume> volumes; + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + @Override + public void createPartControl(Composite parent) { + if (volumes == null) { + Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); + if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Volume.class) { + volumes = (EntityGroup<Volume>)selectedObj; + } + } + + createSections(parent, volumes, toolkit); + } + + private void createSections(Composite parent, final EntityGroup<Volume> volumes, FormToolkit toolkit) { + final ScrolledForm form = guiHelper.setupForm(parent, toolkit, "Volumes - Summary"); + createSummarySection(volumes, toolkit, form); + createRunningTasksSection(volumes, toolkit, form); + createAlertsSection(volumes, toolkit, form); + + parent.layout(); // IMP: lays out the form properly + } + + private void createAlertsSection(final EntityGroup<Volume> volumes, FormToolkit toolkit, final ScrolledForm form) { + Composite section = guiHelper.createSection(form, toolkit, "Alerts", null, 2, false); + + toolkit.createLabel(section, "Any alerts related to volumes\nwill be displayed here."); + } + + private void createRunningTasksSection(final EntityGroup<Volume> volumes, FormToolkit toolkit, final ScrolledForm form) { + Composite section = guiHelper.createSection(form, toolkit, "Running Tasks", null, 2, false); + + toolkit.createLabel(section, "List of running tasks related to\nvolumes will be displayed here."); + } + + private void createSummarySection(final EntityGroup<Volume> volumes, FormToolkit toolkit, final ScrolledForm form) { + Composite section = guiHelper.createSection(form, toolkit, "Availability", null, 2, false); + + Double[] values = new Double[] { Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.ONLINE)), + Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.OFFLINE)) }; + createStatusChart(toolkit, section, values); + } + + private int getVolumeCountByStatus(EntityGroup<Volume> volumes, VOLUME_STATUS status) { + int count = 0; + for (Volume volume : (List<Volume>) volumes.getEntities()) { + if (volume.getStatus() == status) { + count++; + } + } + return count; + } + + private void createStatusChart(FormToolkit toolkit, Composite section, Double[] values) { + String[] categories = new String[] { "Online", "Offline" }; + PieChartViewerComposite chartViewerComposite = new PieChartViewerComposite(section, SWT.NONE, categories, + values); + + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + data.widthHint = 250; + data.heightHint = 250; + chartViewerComposite.setLayoutData(data); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#setFocus() + */ + @Override + public void setFocus() { + if (form != null) { + form.setFocus(); + } + } +} diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesView.java new file mode 100644 index 00000000..4768d2de --- /dev/null +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesView.java @@ -0,0 +1,109 @@ +/** + * DiscoveredServersView.java + * + * 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; + +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.ISelectionListener; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.part.ViewPart; + +import com.gluster.storage.management.core.model.Entity; +import com.gluster.storage.management.core.model.EntityGroup; +import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.gui.utils.GUIHelper; +import com.gluster.storage.management.gui.views.navigator.NavigationView; +import com.gluster.storage.management.gui.views.pages.ServersPage; +import com.gluster.storage.management.gui.views.pages.VolumesPage; + +/** + * + */ +public class VolumesView extends ViewPart implements IDoubleClickListener, ISelectionListener { + public static final String ID = VolumesView.class.getName(); + private static final GUIHelper guiHelper = GUIHelper.getInstance(); + private EntityGroup<Volume> volumes; + private VolumesPage page; + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + @Override + public void createPartControl(Composite parent) { + if (volumes == null) { + Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); + if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Volume.class) { + volumes = (EntityGroup<Volume>)selectedObj; + } + } + + page = new VolumesPage(parent, getSite(), volumes); + page.addDoubleClickListener(this); + getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(NavigationView.ID, this); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#setFocus() + */ + @Override + public void setFocus() { + page.setFocus(); + } + + @Override + public void doubleClick(DoubleClickEvent event) { + NavigationView clusterView = (NavigationView) guiHelper.getView(NavigationView.ID); + if (clusterView != null) { + clusterView.selectEntity((Entity) ((StructuredSelection) event.getSelection()).getFirstElement()); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, + * org.eclipse.jface.viewers.ISelection) + */ + @Override + public void selectionChanged(IWorkbenchPart part, ISelection selection) { + if (part instanceof NavigationView && selection instanceof TreeSelection) { + Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement(); + + if (volumes == selectedEntity || selectedEntity == null || !(selectedEntity instanceof EntityGroup) + || ((EntityGroup) selectedEntity).getEntityType() != Volume.class) { + // entity selection has not changed. do nothing. + return; + } + + volumes = (EntityGroup<Volume>) selectedEntity; + page.setInput(volumes); + } + } +} diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/SmartControlAdapter.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/SmartControlAdapter.java deleted file mode 100644 index bd5bed46..00000000 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/SmartControlAdapter.java +++ /dev/null @@ -1,53 +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.details; - -import org.eclipse.swt.events.ControlAdapter; -import org.eclipse.swt.events.ControlEvent; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -/** - * This is an extended version of the regular ControlAdapter. - * It is used to get only the real resize events and excludes all resize - * events of the text size determination. - * - */ -public abstract class SmartControlAdapter extends ControlAdapter { - - public void controlResized( ControlEvent e ) { - Shell shell = ( ( Control )e.widget ).getShell(); - Point shellSize = shell.getSize(); - Point previousSize = ( Point )e.widget.getData( "previousShellSize" - + this.hashCode() ); - e.widget.setData( "previousShellSize" + this.hashCode(), shellSize ); - if( previousSize != null ) { - int dx = Math.abs( Math.abs( shellSize.x - previousSize.x ) - 1000 ); - int dy = Math.abs( Math.abs( shellSize.y - previousSize.y ) - 1000 ); - if( ( dx <= 2 || dy <= 2 ) ) { - // This came from the TextSizeDetermination - return; - } - } - handleControlResized( e ); - } - - protected abstract void handleControlResized( ControlEvent e ); -}
\ No newline at end of file diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupServerTabCreator.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupServerTabCreator.java index c6932253..d7b78198 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupServerTabCreator.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupServerTabCreator.java @@ -32,9 +32,9 @@ import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.utils.GUIHelper; -import com.gluster.storage.management.gui.views.details.ServersPage; import com.gluster.storage.management.gui.views.details.TabCreator; import com.gluster.storage.management.gui.views.navigator.NavigationView; +import com.gluster.storage.management.gui.views.pages.ServersPage; public class EntityGroupServerTabCreator implements TabCreator, IDoubleClickListener { private static final GUIHelper guiHelper = GUIHelper.getInstance(); @@ -46,7 +46,7 @@ public class EntityGroupServerTabCreator implements TabCreator, IDoubleClickList private void createServersTab(EntityGroup<Server> servers, TabFolder tabFolder) { Composite serversTab = guiHelper.createTab(tabFolder, "Discovered Servers", IImageKeys.SERVERS); - ServersPage page = new ServersPage(serversTab, SWT.NONE, servers); + ServersPage page = new ServersPage(serversTab, null, servers); page.addDoubleClickListener(this); } diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupVolumeTabCreator.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupVolumeTabCreator.java index cc570ff6..9ffea7af 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupVolumeTabCreator.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupVolumeTabCreator.java @@ -38,8 +38,8 @@ import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.utils.GUIHelper; import com.gluster.storage.management.gui.views.details.TabCreator; -import com.gluster.storage.management.gui.views.details.VolumesPage; import com.gluster.storage.management.gui.views.navigator.NavigationView; +import com.gluster.storage.management.gui.views.pages.VolumesPage; public class EntityGroupVolumeTabCreator implements TabCreator, IDoubleClickListener { private static final GUIHelper guiHelper = GUIHelper.getInstance(); @@ -103,7 +103,7 @@ public class EntityGroupVolumeTabCreator implements TabCreator, IDoubleClickList private void createVolumesTab(EntityGroup<Volume> volumes, TabFolder tabFolder, FormToolkit toolkit) { Composite volumesTab = guiHelper.createTab(tabFolder, "Volumes", IImageKeys.VOLUMES); - VolumesPage page = new VolumesPage(volumesTab, SWT.NONE, volumes); + VolumesPage page = new VolumesPage(volumesTab, null, volumes); page.addDoubleClickListener(this); } diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java index 704ea120..2fc7d0de 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java @@ -18,8 +18,6 @@ *******************************************************************************/ package com.gluster.storage.management.gui.views.navigator; -import org.eclipse.core.commands.Command; -import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.action.MenuManager; @@ -31,26 +29,31 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.ISelectionListener; +import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.commands.ICommandService; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.part.ViewPart; import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.Cluster; import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.core.model.GlusterDataModel; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.gui.views.ClusterSummaryView; +import com.gluster.storage.management.gui.views.DiscoveredServerView; import com.gluster.storage.management.gui.views.DiscoveredServersView; +import com.gluster.storage.management.gui.views.VolumesSummaryView; +import com.gluster.storage.management.gui.views.VolumesView; public class NavigationView extends ViewPart implements ISelectionListener { - public static final String ID = "com.gluster.storage.management.gui.views.navigator"; + public static final String ID = NavigationView.class.getName(); private GlusterDataModel model; private TreeViewer treeViewer; private IAdapterFactory adapterFactory = new ClusterAdapterFactory(); @@ -65,7 +68,6 @@ public class NavigationView extends ViewPart implements ISelectionListener { model = GlusterDataModelManager.getInstance().getModel(); treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); - getSite().setSelectionProvider(treeViewer); Platform.getAdapterManager().registerAdapters(adapterFactory, Entity.class); treeViewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider()); treeViewer.setContentProvider(new BaseWorkbenchContentProvider()); @@ -87,6 +89,7 @@ public class NavigationView extends ViewPart implements ISelectionListener { } }); + getSite().setSelectionProvider(treeViewer); getSite().getPage().addSelectionListener(this); } @@ -109,6 +112,7 @@ public class NavigationView extends ViewPart implements ISelectionListener { */ @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { + if (part instanceof NavigationView && selection instanceof TreeSelection) { Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement(); @@ -119,27 +123,32 @@ public class NavigationView extends ViewPart implements ISelectionListener { IViewReference[] viewReferences = getSite().getPage().getViewReferences(); for (final IViewReference viewReference : viewReferences) { - if (!viewReference.getId().equals(ID)) { - PlatformUI - .getWorkbench() - .getActiveWorkbenchWindow() - .getActivePage() - .hideView( - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() - .findViewReference(DiscoveredServersView.ID)); + if (!viewReference.getId().equals(ID)) { + getSite().getPage().hideView(viewReference); } } entity = selectedEntity; - if (entity instanceof EntityGroup) { - Class type = ((EntityGroup) entity).getEntityType(); - if (type == Server.class) { + try { + if (entity instanceof EntityGroup) { + if ((((EntityGroup) entity).getEntityType()) == Server.class) { + getSite().getPage().showView(DiscoveredServersView.ID); + } else if ((((EntityGroup) entity).getEntityType()) == Volume.class) { + IViewPart summaryView = getSite().getPage().showView(VolumesSummaryView.ID); + getSite().getPage().showView(VolumesView.ID); + getSite().getPage().bringToTop(summaryView); + } + } else if (entity.getClass() == Server.class) { + getSite().getPage().showView(DiscoveredServerView.ID); + } else if (entity instanceof Cluster) { try { - getSite().getPage().showView(DiscoveredServersView.ID); - } catch (PartInitException e) { - e.printStackTrace(); + getSite().getPage().showView(ClusterSummaryView.ID); + } catch (RuntimeException e) { + // happens when navigation view is opening for the first time. just ignore it! } } + } catch (PartInitException e) { + e.printStackTrace(); } } } diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java index b736aa8e..6be3e78c 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java @@ -16,7 +16,7 @@ * along with this program. If not, see * <http://www.gnu.org/licenses/>. *******************************************************************************/ -package com.gluster.storage.management.gui.views.details; +package com.gluster.storage.management.gui.views.pages; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.CheckboxTableViewer; @@ -36,6 +36,7 @@ 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.EntityGroup; @@ -64,8 +65,9 @@ public class ServersPage extends Composite { // "Number\nof CPUs", "CPU\nUsage (%)", "Total\nMemory (GB)", "Memory\nIn Use (GB)", // "Total Disk\n Space (GB)", "Disk Space\nin Use (GB)"}; - public ServersPage(Composite parent, int style) { - super(parent, style); + public ServersPage(final Composite parent, IWorkbenchSite site, EntityGroup<Server> servers) { + super(parent, SWT.NONE); + addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { toolkit.dispose(); @@ -76,14 +78,7 @@ public class ServersPage extends Composite { toolkit.paintBordersFor(this); setupPageLayout(); - Text filterText = guiHelper.createFilterText(toolkit, this); - setupServerTableViewer(filterText); - } - - public ServersPage(final Composite parent, int style, EntityGroup<Server> servers) { - this(parent, style); - - tableViewer.setInput(servers); + setupPage(site, servers); parent.layout(); // Important - this actually paints the table /** @@ -151,11 +146,17 @@ public class ServersPage extends Composite { return tableViewerComposite; } - private void setupServerTableViewer(final Text filterText) { + private void setupPage(IWorkbenchSite site, EntityGroup<Server> servers) { + Text filterText = guiHelper.createFilterText(toolkit, this); + Composite tableViewerComposite = createTableViewerComposite(); tableViewer = createServerTableViewer(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(servers); } /** diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumesPage.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java index 61f9b1a0..9e25a018 100644 --- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumesPage.java +++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java @@ -16,7 +16,7 @@ * along with this program. If not, see * <http://www.gnu.org/licenses/>. *******************************************************************************/ -package com.gluster.storage.management.gui.views.details; +package com.gluster.storage.management.gui.views.pages; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.CheckboxTableViewer; @@ -36,6 +36,7 @@ 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.EntityGroup; @@ -57,8 +58,9 @@ public class VolumesPage extends Composite { private static final String[] VOLUME_TABLE_COLUMN_NAMES = new String[] { "Name", "Volume Type", "Number of\nDisks", "Transport Type", "Status" }; - public VolumesPage(Composite parent, int style) { - super(parent, style); + public VolumesPage(final Composite parent, IWorkbenchSite site, EntityGroup<Volume> volumes) { + super(parent, SWT.NONE); + addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { toolkit.dispose(); @@ -69,14 +71,8 @@ public class VolumesPage extends Composite { toolkit.paintBordersFor(this); setupPageLayout(); - Text filterText = guiHelper.createFilterText(toolkit, this); - setupVolumeTableViewer(filterText); - } + setupVolumeTableViewer(site, volumes); - public VolumesPage(final Composite parent, int style, EntityGroup<Volume> volumes) { - this(parent, style); - - tableViewer.setInput(volumes); parent.layout(); // Important - this actually paints the table /** @@ -132,11 +128,16 @@ public class VolumesPage extends Composite { return tableViewerComposite; } - private void setupVolumeTableViewer(final Text filterText) { + 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); } /** @@ -154,4 +155,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(); + } } |
