summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-09 21:42:26 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-10 00:24:22 +0530
commitd387f34dd83ffc70a85c135237855316496a9717 (patch)
tree7a530ea7f96d6250e91e6e5438a8e449c49c14d1 /src
parentc787d8d0a5defd2f24dd64dac256ce514481bd58 (diff)
Task#111 - Auto-refresh of data in views
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java43
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java4
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java10
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Application.java23
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java32
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java42
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/DataSyncJob.java33
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java13
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java5
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java13
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/GlusterServersPage.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java20
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java40
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java22
16 files changed, 189 insertions, 129 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index 6db98ed4..8a684c57 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -25,6 +25,7 @@ import java.util.Map.Entry;
import java.util.Set;
import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IProgressMonitor;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Brick;
@@ -92,7 +93,7 @@ public class GlusterDataModelManager {
model = fetchData(clusterName);
}
- public GlusterDataModel fetchData(String clusterName) {
+ private GlusterDataModel fetchData(String clusterName) {
GlusterDataModel model = new GlusterDataModel("Gluster Data Model");
Cluster cluster = new Cluster(clusterName, model);
@@ -100,7 +101,6 @@ public class GlusterDataModelManager {
initializeVolumes(cluster);
initializeAutoDiscoveredServers(cluster);
- // initializeDisks();
initializeTasks(cluster);
initializeAlerts(cluster);
initializeVolumeOptionsDefaults();
@@ -109,27 +109,50 @@ public class GlusterDataModelManager {
return model;
}
- public void refreshModel() {
+ public GlusterDataModel fetchModel(IProgressMonitor monitor) {
synchronized (syncInProgress) {
if(syncInProgress) {
logger.info("Previous data sync is still running. Skipping this one.");
- return;
+ return null;
}
syncInProgress = true;
}
-
- logger.info("Starting data sync");
+
try {
- updateModel(fetchData(clusterName));
- } catch(Exception e) {
+ logger.info("Starting data sync");
+ GlusterDataModel model = new GlusterDataModel("Gluster Data Model");
+ Cluster cluster = new Cluster(clusterName, model);
+ model.addCluster(cluster);
+
+ monitor.beginTask("Data Sync", 4);
+
+ monitor.setTaskName("Syncing servers...");
+ initializeGlusterServers(cluster);
+ monitor.worked(1);
+
+ monitor.setTaskName("Syncing volumes...");
+ initializeVolumes(cluster);
+ monitor.worked(1);
+
+ monitor.setTaskName("Syncing discovered servers...");
+ initializeAutoDiscoveredServers(cluster);
+ monitor.worked(1);
+
+ monitor.setTaskName("Syncing tasks...");
+ initializeTasks(cluster);
+ monitor.worked(1);
+
+ monitor.done();
+ return model;
+ } catch(RuntimeException e) {
logger.error("Error in data sync!", e);
+ return null;
} finally {
syncInProgress = false;
}
}
-
- private void updateModel(GlusterDataModel model) {
+ public void updateModel(GlusterDataModel model) {
updateVolumes(model);
updateGlusterServers(model);
updateDiscoveredServers(model);
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
index 350c9102..b6c9db34 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
@@ -35,10 +35,6 @@ public interface ClusterListener {
public void serverChanged(GlusterServer server, Event event);
- public void volumeAdded(Volume volume);
-
- public void volumeRemoved(Volume volume);
-
public void volumeChanged(Volume volume, Event event);
public void volumeCreated(Volume volume);
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
index c530fde4..ce66a8f4 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
@@ -40,16 +40,6 @@ public class DefaultClusterListener implements ClusterListener {
}
@Override
- public void volumeAdded(Volume volume) {
- modelChanged();
- }
-
- @Override
- public void volumeRemoved(Volume volume) {
- modelChanged();
- }
-
- @Override
public void volumeChanged(Volume volume, Event event) {
modelChanged();
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Application.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Application.java
index 2c49a1e2..43287c62 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Application.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Application.java
@@ -23,6 +23,7 @@ import java.util.Collections;
import java.util.List;
import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
@@ -51,7 +52,6 @@ public class Application implements IApplication {
private static Application instance;
private List<IEntityListener> entityListeners = Collections.synchronizedList(new ArrayList<IEntityListener>());
private IStatusLineManager statusLineManager;
- private Job syncJob;
public Application() {
instance = this;
@@ -95,8 +95,6 @@ public class Application implements IApplication {
return IApplication.EXIT_OK;
}
try {
- setupBackgroundJobs();
-
int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IApplication.EXIT_RESTART;
@@ -108,24 +106,6 @@ public class Application implements IApplication {
}
}
- private void setupBackgroundJobs() {
- // 1 minute delay for first run
- final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
- final long JOB_INTERVAL = preferenceStore.getLong(PreferenceConstants.P_DATA_SYNC_INTERVAL) * 1000;
-
- syncJob = new DataSyncJob("Syncing cluster data in background");
- syncJob.setPriority(Job.DECORATE);
- syncJob.schedule(JOB_INTERVAL);
- syncJob.addJobChangeListener(new JobChangeAdapter() {
- @Override
- public void done(IJobChangeEvent event) {
- super.done(event);
- // job done. schedule again after the pre-defined interval
- syncJob.schedule(JOB_INTERVAL);
- }
- });
- }
-
private void setSystemProperties() {
// TODO: Trying this to avoid the webstart authentication dialog
// to be tested, and removed if this doesn't work.
@@ -144,7 +124,6 @@ public class Application implements IApplication {
final Display display = workbench.getDisplay();
display.syncExec(new Runnable() {
public void run() {
- syncJob.cancel();
if (!display.isDisposed())
workbench.close();
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java
index 07e20466..73a10b01 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java
@@ -18,16 +18,25 @@
*******************************************************************************/
package com.gluster.storage.management.gui;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.application.IWorkbenchConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+import com.gluster.storage.management.gui.jobs.DataSyncJob;
+import com.gluster.storage.management.gui.preferences.PreferenceConstants;
+
/**
* This workbench advisor creates the window advisor, and specifies
* the perspective id for the initial window.
*/
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
+ private Job syncJob;
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
return new ApplicationWorkbenchWindowAdvisor(configurer);
@@ -42,4 +51,27 @@ public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
super.initialize(configurer);
configurer.setSaveAndRestore(false); // we don't need save/restore as of now
}
+
+ @Override
+ public void postStartup() {
+ super.postStartup();
+ setupBackgroundJobs();
+ }
+
+ private void setupBackgroundJobs() {
+ final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
+ final long JOB_INTERVAL = preferenceStore.getLong(PreferenceConstants.P_DATA_SYNC_INTERVAL) * 1000;
+
+ syncJob = new DataSyncJob("Cluster Data Sync");
+ syncJob.schedule(JOB_INTERVAL);
+ syncJob.addJobChangeListener(new JobChangeAdapter() {
+ @Override
+ public void done(IJobChangeEvent event) {
+ super.done(event);
+
+ // job done. schedule again after the pre-defined interval
+ syncJob.schedule(JOB_INTERVAL);
+ }
+ });
+ }
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java
index 6498d902..0f8121e6 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java
@@ -18,14 +18,18 @@
*******************************************************************************/
package com.gluster.storage.management.gui.actions;
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.UIPlugin;
import com.gluster.storage.management.core.model.Entity;
@@ -38,20 +42,40 @@ import com.gluster.storage.management.core.model.Entity;
@SuppressWarnings("restriction")
public abstract class AbstractActionDelegate implements IWorkbenchWindowActionDelegate {
protected IWorkbenchWindow window;
+ protected Logger logger = Logger.getLogger(this.getClass());
// the latest selected entity
protected Entity selectedEntity;
@Override
public void run(final IAction action) {
- // Real action code must be executed using Display#asyncExec. Otherwise the system can hang when opening new
- // dialog boxes on linux platform
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- performAction(action);
- }
- });
+ // Real action code must be executed using Display#asyncExec.
+ // Otherwise the system can hang when opening new dialog boxes on linux platform
+ try {
+ PlatformUI.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() {
+ public void run(final IProgressMonitor monitor) {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ monitor.beginTask(action.getDescription(), 1);
+ performAction(action);
+ monitor.worked(1);
+ monitor.done();
+ }
+ });
+ }
+ });
+ } catch (final Exception e) {
+ final String actionDesc = action.getDescription();
+ logger.error("Exception while running action [" + actionDesc + "]", e);
+
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ showErrorDialog(actionDesc, e.getMessage());
+ }
+ });
+ }
}
abstract protected void performAction(final IAction action);
@@ -100,7 +124,7 @@ public abstract class AbstractActionDelegate implements IWorkbenchWindowActionDe
MessageDialog.openError(getShell(), title, message);
}
- protected synchronized boolean showConfirmDialog(final String title, final String message) {
+ protected boolean showConfirmDialog(final String title, final String message) {
return MessageDialog.openQuestion(getShell(), title, message);
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
index fe358caa..6bcbc066 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
@@ -20,20 +20,17 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
-import com.gluster.storage.management.client.GlusterDataModelManager;
+import com.gluster.storage.management.gui.jobs.DataSyncJob;
/**
*
*/
public class RefreshDataAction extends AbstractActionDelegate {
-
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
*/
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
}
/* (non-Javadoc)
@@ -41,6 +38,6 @@ public class RefreshDataAction extends AbstractActionDelegate {
*/
@Override
protected void performAction(IAction action) {
- GlusterDataModelManager.getInstance().refreshModel();
+ new DataSyncJob("Cluster Data Sync").schedule();
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/DataSyncJob.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/DataSyncJob.java
index f6fd1ba4..aff62a92 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/DataSyncJob.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/DataSyncJob.java
@@ -18,6 +18,7 @@
*******************************************************************************/
package com.gluster.storage.management.gui.jobs;
+import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -25,31 +26,43 @@ import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.GlusterDataModelManager;
-import com.gluster.storage.management.gui.utils.GUIHelper;
+import com.gluster.storage.management.core.model.GlusterDataModel;
/**
*
*/
public class DataSyncJob extends Job {
+ private static final Logger logger = Logger.getLogger(DataSyncJob.class);
+
public DataSyncJob(String name) {
- super(name);
+ super(name);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
- protected IStatus run(IProgressMonitor monitor) {
+ protected IStatus run(final IProgressMonitor monitor) {
+ final GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
+
+ // fetch the latest model
+ final GlusterDataModel model = modelManager.fetchModel(monitor);
+ if(model == null) {
+ return Status.CANCEL_STATUS;
+ }
+
+ monitor.beginTask("Notify views", 1);
Display.getDefault().asyncExec(new Runnable() {
-
@Override
public void run() {
- GUIHelper.getInstance().setStatusMessage("Data sync in progress...");
- GlusterDataModelManager.getInstance().refreshModel();
- GUIHelper.getInstance().setStatusMessage(null);
+ modelManager.updateModel(model);
}
});
-
+ monitor.worked(1);
+ monitor.done();
+
return Status.OK_STATUS;
}
-}
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
index f9526ef9..30072b97 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
@@ -92,8 +92,6 @@ public class GlusterServerSummaryView extends ViewPart {
}
private void updateServerDetails() {
- // TODO Auto-generated method stub
-
}
@Override
@@ -108,7 +106,7 @@ public class GlusterServerSummaryView extends ViewPart {
createServerSummarySection(server, toolkit, form);
if (server.getStatus() == SERVER_STATUS.ONLINE) {
- Composite section = createNetworkInterfacesSection(server, toolkit, form);
+ createNetworkInterfacesSection(server, toolkit, form);
}
parent.layout(); // IMP: lays out the form properly
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
index 8acb4a75..14f999e7 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
@@ -50,6 +50,7 @@ public class NavigationView extends ViewPart implements ISelectionListener {
private GlusterToolbarManager toolbarManager;
private Entity entity;
private GlusterViewsManager viewsManager;
+ private DefaultClusterListener clusterListener;
@Override
public void createPartControl(Composite parent) {
@@ -80,8 +81,7 @@ public class NavigationView extends ViewPart implements ISelectionListener {
// register as selection provider so that other views can listen to any selection events on the tree
getSite().setSelectionProvider(treeViewer);
- // Refresh the navigation tree whenever there is a change to the data model
- GlusterDataModelManager.getInstance().addClusterListener(new DefaultClusterListener() {
+ clusterListener = new DefaultClusterListener() {
public void modelChanged() {
treeViewer.refresh();
}
@@ -91,7 +91,8 @@ public class NavigationView extends ViewPart implements ISelectionListener {
super.volumeChanged(volume, event);
selectEntity(volume); // this makes sure that the toolbar buttons get updated according to new status
}
- });
+ };
+ GlusterDataModelManager.getInstance().addClusterListener(clusterListener);
}
private void setupContextMenu() {
@@ -129,4 +130,10 @@ public class NavigationView extends ViewPart implements ISelectionListener {
}
}
}
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ GlusterDataModelManager.getInstance().removeClusterListener(clusterListener);
+ }
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
index e0df170b..d3eb7f6c 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
@@ -93,11 +93,6 @@ public class VolumeSummaryView extends ViewPart {
GlusterDataModelManager.getInstance().addClusterListener(volumeChangedListener);
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.part.WorkbenchPart#dispose()
- */
@Override
public void dispose() {
super.dispose();
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java
index 5aaf7094..1e2c888d 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java
@@ -64,6 +64,7 @@ public abstract class AbstractTableViewerPage<T> extends Composite implements IS
protected IWorkbenchSite site;
private Hyperlink linkAll, linkNone;
+ private ClusterListener clusterListener;
public AbstractTableViewerPage(IWorkbenchSite site, final Composite parent, int style, boolean useChechboxes, boolean multiSelection, Object model) {
super(parent, style);
@@ -139,19 +140,19 @@ public abstract class AbstractTableViewerPage<T> extends Composite implements IS
}
});
- final ClusterListener clusterListener = createClusterListener();
+ clusterListener = createClusterListener();
+ GlusterDataModelManager.getInstance().addClusterListener(clusterListener);
- final GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
- modelManager.addClusterListener(clusterListener);
-
addDisposeListener(new DisposeListener() {
+
+ @Override
public void widgetDisposed(DisposeEvent e) {
toolkit.dispose();
- modelManager.removeClusterListener(clusterListener);
+ GlusterDataModelManager.getInstance().removeClusterListener(clusterListener);
}
});
}
-
+
protected abstract ClusterListener createClusterListener();
protected abstract String[] getColumnNames();
protected abstract void setColumnProperties(Table table);
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/GlusterServersPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/GlusterServersPage.java
index be4df7ad..8dc58ff1 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/GlusterServersPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/GlusterServersPage.java
@@ -59,17 +59,20 @@ public class GlusterServersPage extends AbstractTableViewerPage<GlusterServer> {
@Override
public void serverAdded(GlusterServer server) {
- tableViewer.refresh();
+ tableViewer.add(server);
+ parent.update();
}
@Override
public void serverRemoved(GlusterServer server) {
- tableViewer.refresh();
+ tableViewer.remove(server);
+ parent.update();
}
@Override
public void serverChanged(GlusterServer server, Event event) {
tableViewer.update(server, null);
+ parent.update();
}
};
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java
index f285dd9f..5c659268 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java
@@ -33,6 +33,7 @@ import org.eclipse.ui.IWorkbenchSite;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.EntityGroup;
+import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.gui.EntityGroupContentProvider;
import com.gluster.storage.management.gui.ServerTableLabelProvider;
@@ -46,14 +47,6 @@ public class ServersPage extends AbstractTableViewerPage<Server> {
private static final String[] SERVER_TABLE_COLUMN_NAMES = new String[] { "Name", "IP Address(es)", "Number of Disks", "Total Disk Space (GB)" };
- // public enum SERVER_DISK_TABLE_COLUMN_INDICES {
- // NAME, NUM_OF_CPUS, CPU_USAGE, TOTAL_MEMORY, MEMORY_IN_USE, TOTAL_DISK_SPACE, DISK_SPACE_IN_USE
- // };
- //
- // private static final String[] SERVER_TABLE_COLUMN_NAMES = new String[] { "Name",
- // "Number\nof CPUs", "CPU\nUsage (%)", "Total\nMemory (GB)", "Memory\nIn Use (GB)",
- // "Total Disk\n Space (GB)", "Disk Space\nin Use (GB)"};
-
public ServersPage(final Composite parent, IWorkbenchSite site, EntityGroup<Server> serversGroup) {
super(site, parent, SWT.NONE, true, true, serversGroup);
this.servers = serversGroup.getEntities();
@@ -64,16 +57,19 @@ public class ServersPage extends AbstractTableViewerPage<Server> {
return new DefaultClusterListener() {
@Override
public void discoveredServerRemoved(Server server) {
- refreshViewer();
+ tableViewer.remove(server);
+ parent.update();
}
@Override
public void discoveredServerAdded(Server server) {
- refreshViewer();
+ tableViewer.add(server);
+ parent.update();
}
- private void refreshViewer() {
- tableViewer.refresh();
+ @Override
+ public void discoveredServerChanged(Server server, Event event) {
+ tableViewer.update(server, null);
parent.update();
}
};
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java
index ff94d7e0..2d1e7e98 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java
@@ -117,21 +117,22 @@ public class VolumeOptionsPage extends Composite {
private Button createAddButton() {
return toolkit.createButton(this, "&Add", SWT.FLAT);
}
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ toolkit.dispose();
+
+ if (!(addTopButton.isEnabled() || addBottomButton.isEnabled())) {
+ // user has selected key, but not added value. Since this is not a valid entry,
+ // remove the last option (without value) from the volume
+ volume.getOptions().remove(keyEditingSupport.getEntryBeingAdded().getKey());
+ }
- private void registerListeners(final Composite parent) {
- addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- if (!(addTopButton.isEnabled() || addBottomButton.isEnabled())) {
- // user has selected key, but not added value. Since this is not a valid entry,
- // remove the last option (without value) from the volume
- volume.getOptions().remove(keyEditingSupport.getEntryBeingAdded().getKey());
- }
-
- GlusterDataModelManager.getInstance().removeClusterListener(clusterListener);
- toolkit.dispose();
- }
- });
+ GlusterDataModelManager.getInstance().removeClusterListener(clusterListener);
+ }
+ private void registerListeners(final Composite parent) {
/**
* Ideally not required. However the table viewer is not getting laid out properly on performing
* "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window
@@ -144,19 +145,6 @@ public class VolumeOptionsPage extends Composite {
}
});
- parent.addDisposeListener(new DisposeListener() {
-
- @Override
- public void widgetDisposed(DisposeEvent e) {
- if (!(addTopButton.isEnabled() || addBottomButton.isEnabled())) {
- // user has selected key, but not added value. Since this is not a valid entry,
- // remove the last option (without value) from the volume
- VolumeOption entryBeingAdded = keyEditingSupport.getEntryBeingAdded();
- volume.getOptions().remove(entryBeingAdded.getKey());
- }
- }
- });
-
clusterListener = new DefaultClusterListener() {
@Override
public void volumeChanged(Volume volume, Event event) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java
index 33eb6da7..f1e3a2ef 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java
@@ -33,6 +33,7 @@ import org.eclipse.ui.IWorkbenchSite;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.EntityGroup;
+import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.gui.EntityGroupContentProvider;
import com.gluster.storage.management.gui.VolumeTableLabelProvider;
@@ -75,8 +76,25 @@ public class VolumesPage extends AbstractTableViewerPage<Volume> {
@Override
protected ClusterListener createClusterListener() {
- // TODO: Override methods to handle volume related events
- return new DefaultClusterListener();
+ return new DefaultClusterListener() {
+ @Override
+ public void volumeCreated(Volume volume) {
+ tableViewer.add(volume);
+ parent.update();
+ }
+
+ @Override
+ public void volumeDeleted(Volume volume) {
+ tableViewer.remove(volume);
+ parent.update();
+ }
+
+ @Override
+ public void volumeChanged(Volume volume, Event event) {
+ tableViewer.update(volume, null);
+ parent.update();
+ }
+ };
}
/**