summaryrefslogtreecommitdiffstats
path: root/com.gluster.storage.management.gui/src/com/gluster
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-03-17 22:44:18 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-03-17 22:44:18 +0530
commite7a0887c7e2f47a757fee4c9d15cc72714e7f8e1 (patch)
tree8504a0b5eb4d7b442404d9a9534a399f58a6e6ec /com.gluster.storage.management.gui/src/com/gluster
parentd7fc89bed7cb7997a31d19004d3e590cd2e9185a (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')
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Perspective.java2
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerTableLabelProvider.java2
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeTableLabelProvider.java2
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java41
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java155
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DetailsView.java (renamed from com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/DetailsView.java)6
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServerView.java90
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java25
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeView.java90
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java128
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesView.java109
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/SmartControlAdapter.java53
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupServerTabCreator.java4
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/EntityGroupVolumeTabCreator.java4
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java49
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java (renamed from com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java)25
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java (renamed from com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumesPage.java)28
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();
+ }
}