summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-11-04 05:11:38 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-11-04 05:11:38 -0700
commit8c12e81986ec073ae3edc66fd18ae9d5651623d2 (patch)
treeafc6844ca0dcaec4ea3be9dc3f7638760adb1506
parentf6c6e62f37058edaae7cb3e870c9e4c1b7cbfc8a (diff)
parent66646655d9157cd8eeadfa90f37e14a094d4b010 (diff)
Merge pull request #293 from anjalshireesh/master
Support for sorting in table viewers
-rw-r--r--src/com.gluster.storage.management.console/plugin.xml2
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/ChartViewerComposite.java12
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/GUIHelper.java21
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/TableViewerComparator.java73
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java17
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java29
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java6
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java7
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java7
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java7
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java7
11 files changed, 159 insertions, 29 deletions
diff --git a/src/com.gluster.storage.management.console/plugin.xml b/src/com.gluster.storage.management.console/plugin.xml
index 2b27f496..543b3571 100644
--- a/src/com.gluster.storage.management.console/plugin.xml
+++ b/src/com.gluster.storage.management.console/plugin.xml
@@ -419,7 +419,7 @@
</property>
<property
name="appName"
- value="about">
+ value="Gluster Management Console">
</property>
<property
name="preferenceCustomization"
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/ChartViewerComposite.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/ChartViewerComposite.java
index 8da32a60..9e67ed29 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/ChartViewerComposite.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/ChartViewerComposite.java
@@ -37,6 +37,8 @@ import org.eclipse.birt.chart.model.attribute.Bounds;
import org.eclipse.birt.chart.model.attribute.ChartDimension;
import org.eclipse.birt.chart.model.attribute.LineAttributes;
import org.eclipse.birt.chart.model.attribute.LineStyle;
+import org.eclipse.birt.chart.model.attribute.Position;
+import org.eclipse.birt.chart.model.attribute.Text;
import org.eclipse.birt.chart.model.attribute.TickStyle;
import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
@@ -307,6 +309,9 @@ public final class ChartViewerComposite extends Composite implements PaintListen
*/
public static final Chart createPieChart(String[] categories, Double[] values) {
ChartWithoutAxes pieChart = ChartWithoutAxesImpl.create();
+
+ // script hook to NOT show the label if value is zero
+ pieChart.setScript("function beforeDrawDataPointLabel( dph, label, icsc ){ if (dph.getOrthogonalValue() == 0){ label.setVisible(false); } } ");
// Plot
pieChart.setSeriesThickness(10);
@@ -350,8 +355,13 @@ public final class ChartViewerComposite extends Composite implements PaintListen
sePie.setDataSet(seriesOneValues);
sePie.setSeriesIdentifier("Chart");//$NON-NLS-1$
sePie.getTitle().setVisible(false); // no title
- sePie.getLabel().setVisible(false); // no label (values)
+ sePie.getLabel().setVisible(true); // show label (values)
sePie.setExplosion(0); // no gap between the pie slices
+ sePie.setLabelPosition(Position.INSIDE_LITERAL);
+ Text labelCaption = sePie.getLabel().getCaption();
+ labelCaption.setColor(ColorDefinitionImpl.CYAN());
+ labelCaption.getFont().setSize(8);
+ labelCaption.getFont().setBold(true);
SeriesDefinition seriesDefinition = SeriesDefinitionImpl.create();
seriesDefinition.getQuery().setDefinition("query.definition");//$NON-NLS-1$
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/GUIHelper.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/GUIHelper.java
index ab846e74..b8f8d83e 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/GUIHelper.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/GUIHelper.java
@@ -34,7 +34,6 @@ import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ICheckStateListener;
@@ -44,8 +43,6 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
@@ -348,24 +345,6 @@ public class GUIHelper {
}
/**
- * Sets properties for alignment and weight of given column of given table
- *
- * @param table
- * @param columnIndex
- * @param alignment
- * @param weight
- *
- * @return The table viewer column created
- */
- 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.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
*
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/TableViewerComparator.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/TableViewerComparator.java
new file mode 100644
index 00000000..7e11cc6f
--- /dev/null
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/utils/TableViewerComparator.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * 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.console.utils;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.swt.SWT;
+
+/**
+ * Comparator for sorting contents of a table viewer
+ */
+public class TableViewerComparator extends ViewerComparator {
+ private int column = -1;
+ private static final int ASCENDING = 0;
+ private static final int DESCENDING = 1;
+ private static final int NONE = -1;
+ private int direction = DESCENDING;
+
+ public TableViewerComparator() {
+ this(NONE);
+ }
+
+ public TableViewerComparator(int direction) {
+ this.direction = direction;
+ }
+
+ public int getDirection() {
+ return direction == DESCENDING ? SWT.DOWN : (direction == ASCENDING ? SWT.UP : SWT.NONE);
+ }
+
+ public void setColumn(int column) {
+ if (column == this.column) {
+ // Same column as last sort; toggle the direction
+ direction = 1 - direction;
+ } else {
+ // first column selection or new column; do an ascending sort
+ direction = ASCENDING;
+ this.column = column;
+ }
+ }
+
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if(direction == NONE) {
+ // no sorting
+ return 0;
+ }
+
+ int result = super.compare(viewer, e1, e2);
+ // If descending order, flip the direction
+ if (direction == DESCENDING) {
+ result = -result;
+ }
+
+ return result;
+ }
+}
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java
index b459c361..6be9f8d9 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java
@@ -22,6 +22,7 @@ package com.gluster.storage.management.console.views;
import java.util.List;
+import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
@@ -64,7 +65,6 @@ import com.gluster.storage.management.core.model.Server.SERVER_STATUS;
import com.gluster.storage.management.core.model.ServerStats;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.core.utils.NumberUtil;
/**
*
@@ -229,18 +229,17 @@ public class ClusterSummaryView extends ViewPart {
double totalDiskSpace = cluster.getTotalDiskSpace();
double diskSpaceInUse = cluster.getDiskSpaceInUse();
- Double[] values = new Double[] { diskSpaceInUse, totalDiskSpace - diskSpaceInUse };
+ Double[] values = new Double[] { diskSpaceInUse / 1024, (totalDiskSpace - diskSpaceInUse) / 1024 };
createDiskSpaceChart(section, values);
}
private void createDiskSpaceChart(Composite section, Double[] values) {
- String[] categories = new String[] { "Used Space: " + NumberUtil.formatNumber((values[0] / 1024)) + " GB",
- "Free Space: " + NumberUtil.formatNumber((values[1] / 1024)) + " GB" };
+ String[] categories = new String[] { "Used Space (GB)", "Free Space (GB)" };
ChartViewerComposite chartViewerComposite = new ChartViewerComposite(section, SWT.NONE, categories, values);
GridData data = new GridData(SWT.FILL, SWT.FILL, false, false);
data.widthHint = 400;
- data.heightHint = 170;
+ data.heightHint = 180;
data.verticalAlignment = SWT.CENTER;
chartViewerComposite.setLayoutData(data);
}
@@ -261,6 +260,11 @@ public class ClusterSummaryView extends ViewPart {
private void addAlertLabel(Composite section, Alert alert) {
CLabel lblAlert = new CLabel(section, SWT.FLAT);
+ GridData layoutData = new GridData();
+ layoutData.widthHint = 400;
+ layoutData.horizontalIndent = 20;
+ lblAlert.setLayoutData(layoutData);
+
Image alertImage = null;
switch (alert.getType()) {
case OFFLINE_VOLUME_BRICKS_ALERT:
@@ -282,8 +286,9 @@ public class ClusterSummaryView extends ViewPart {
alertImage = guiHelper.getImage(IImageKeys.VOLUME_OFFLINE_22x22);
break;
}
- lblAlert.setImage(alertImage);
lblAlert.setText(alert.getMessage());
+ ControlDecoration dec = new ControlDecoration(lblAlert, SWT.LEFT);
+ dec.setImage(alertImage);
lblAlert.redraw();
}
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java
index 06b9ed95..c80740f3 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java
@@ -28,17 +28,21 @@ import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
@@ -49,6 +53,7 @@ import org.eclipse.ui.forms.widgets.Hyperlink;
import com.gluster.storage.management.console.GlusterDataModelManager;
import com.gluster.storage.management.console.utils.GUIHelper;
+import com.gluster.storage.management.console.utils.TableViewerComparator;
import com.gluster.storage.management.core.model.ClusterListener;
public abstract class AbstractTableViewerPage<T> extends Composite implements ISelectionListener {
@@ -223,8 +228,32 @@ public abstract class AbstractTableViewerPage<T> extends Composite implements IS
// Create a case insensitive filter for the table viewer using the filter text field
guiHelper.createFilter(tableViewer, filterText, false);
+
+ tableViewer.setComparator(createViewerComparator());
+ for (int columnIndex = 0; columnIndex < tableViewer.getTable().getColumnCount(); columnIndex++) {
+ TableColumn column = tableViewer.getTable().getColumn(columnIndex);
+ column.addSelectionListener(getColumnSelectionAdapter(column, columnIndex));
+ }
+ }
+
+ private SelectionAdapter getColumnSelectionAdapter(final TableColumn column, final int columnIndex) {
+ return new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ViewerComparator viewerComparator = tableViewer.getComparator();
+ if(viewerComparator instanceof TableViewerComparator) {
+ TableViewerComparator comparator = (TableViewerComparator)viewerComparator;
+ comparator.setColumn(columnIndex);
+ tableViewer.getTable().setSortDirection(comparator.getDirection());
+ tableViewer.getTable().setSortColumn(column);
+ tableViewer.refresh();
+ }
+ }
+ };
}
+ protected abstract ViewerComparator createViewerComparator();
+
/* (non-Javadoc)
* @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
*/
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java
index 5d526c32..674074c3 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
@@ -114,4 +115,9 @@ public class BricksPage extends AbstractTableViewerPage<Brick> {
protected List<Brick> getAllEntities() {
return bricks;
}
+
+ @Override
+ protected ViewerComparator createViewerComparator() {
+ return null;
+ }
} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java
index 8be17b24..3ef05a2a 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java
@@ -24,6 +24,7 @@ import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
@@ -32,6 +33,7 @@ import org.eclipse.ui.IWorkbenchSite;
import com.gluster.storage.management.console.EntityGroupContentProvider;
import com.gluster.storage.management.console.GlusterServerTableLabelProvider;
+import com.gluster.storage.management.console.utils.TableViewerComparator;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.DefaultClusterListener;
@@ -54,6 +56,11 @@ public class GlusterServersPage extends AbstractTableViewerPage<GlusterServer> {
super(site, parent, style, true, true, servers);
this.glusterServers = servers.getEntities();
}
+
+ @Override
+ protected ViewerComparator createViewerComparator() {
+ return new TableViewerComparator();
+ }
@Override
protected ClusterListener createClusterListener() {
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java
index 99945b31..d97827c6 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java
@@ -24,6 +24,7 @@ import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
@@ -128,4 +129,10 @@ public class ServersPage extends AbstractTableViewerPage<Server> {
TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout();
tableColumnLayout.setColumnData(column, new ColumnWeightData(weight));
}
+
+ @Override
+ protected ViewerComparator createViewerComparator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java
index d54b501d..c166af0f 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java
@@ -27,6 +27,7 @@ import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
@@ -141,4 +142,10 @@ public class TasksPage extends AbstractTableViewerPage<TaskInfo> {
}
}
}
+
+ @Override
+ protected ViewerComparator createViewerComparator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java
index 01d3e7b0..484f91b0 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java
@@ -24,6 +24,7 @@ import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
@@ -125,4 +126,10 @@ public class VolumesPage extends AbstractTableViewerPage<Volume> {
protected List<Volume> getAllEntities() {
return volumes;
}
+
+ @Override
+ protected ViewerComparator createViewerComparator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}