diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-07-11 18:50:35 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-11 19:02:00 +0530 |
| commit | 5451e77260d7bc91c686103b0878e18f6ebc9343 (patch) | |
| tree | f9a1f1b880b95dfa4b640d4c62520368a842a226 | |
| parent | f2b7db6ce2fd00a95552391e59785a7ea365f26d (diff) | |
Task#111 - Auto-refresh of data in views
3 files changed, 29 insertions, 12 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 ee3667d5..4585aca6 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 @@ -568,7 +568,12 @@ public class GlusterDataModelManager { Cluster cluster = model.getCluster(); cluster.removeServer(server); - for (ClusterListener listener : listeners) { + // can't use an iterator here. The method AbstractList.Itr#next checks for concurrent modification. + // Since listeners can end up creating new views, which add themselves as listeners, the listeners + // list can be concurrently modified which can result in an exception while using iterator. + // Hence we use List#get instead of the iterator + for(int i = 0; i < listeners.size(); i++) { + ClusterListener listener = listeners.get(i); listener.serverRemoved(server); } @@ -582,7 +587,12 @@ public class GlusterDataModelManager { Cluster cluster = model.getCluster(); cluster.deleteVolume(volume); - for (ClusterListener listener : listeners) { + // can't use an iterator here. The method AbstractList.Itr#next checks for concurrent modification. + // Since listeners can end up creating new views, which add themselves as listeners, the listeners + // list can be concurrently modified which can result in an exception while using iterator. + // Hence we use List#get instead of the iterator + for(int i = 0; i < listeners.size(); i++) { + ClusterListener listener = listeners.get(i); listener.volumeDeleted(volume); } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java index 0d61b21f..c3607463 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java @@ -18,6 +18,7 @@ *******************************************************************************/ package com.gluster.storage.management.gui.actions; +import org.apache.log4j.Logger; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; @@ -32,6 +33,7 @@ import com.gluster.storage.management.gui.utils.GUIHelper; public class DeleteVolumeAction extends AbstractActionDelegate { private Volume volume; private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + private static final Logger logger = Logger.getLogger(DeleteVolumeAction.class); @Override protected void performAction(final IAction action) { @@ -73,16 +75,12 @@ public class DeleteVolumeAction extends AbstractActionDelegate { showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] deleted successfully!"); modelManager.deleteVolume(volume); } catch (Exception e) { - showErrorDialog(actionDesc, e.getMessage()); - // there is a possibility that the error was in post-delete operation, which means - // volume was deleted, but some other error happened. check if this is the case, - // and if so, update the model manager + // volume was deleted, but some other error happened. check if this is the case. if (client.volumeExists(volume.getName())) { showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be deleted! Error: [" + e.getMessage() + "]"); } else { - modelManager.deleteVolume(volume); showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + e.getMessage()); } } 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 f684a0f7..b60bc37b 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 @@ -39,12 +39,12 @@ import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.core.model.Event; import com.gluster.storage.management.core.model.GlusterDataModel; +import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.gui.toolbar.GlusterToolbarManager; public class NavigationView extends ViewPart implements ISelectionListener { public static final String ID = NavigationView.class.getName(); - private GlusterDataModel model; private TreeViewer treeViewer; private IAdapterFactory adapterFactory = new ClusterAdapterFactory(); private GlusterToolbarManager toolbarManager; @@ -65,7 +65,7 @@ public class NavigationView extends ViewPart implements ISelectionListener { } private void createNavigationTree(Composite parent) { - model = GlusterDataModelManager.getInstance().getModel(); + GlusterDataModel model = GlusterDataModelManager.getInstance().getModel(); Platform.getAdapterManager().registerAdapters(adapterFactory, Entity.class); treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); @@ -95,12 +95,21 @@ public class NavigationView extends ViewPart implements ISelectionListener { } } + @Override public void volumeDeleted(Volume volume) { super.volumeDeleted(volume); if(volume == entity) { - // volume deleted was deleted. selected the root element in the tree. - treeViewer.setSelection(new StructuredSelection(GlusterDataModelManager.getInstance().getModel() - .getCluster())); + // volume selected was deleted. select the root element in the tree. + selectEntity(GlusterDataModelManager.getInstance().getModel().getCluster()); + } + } + + @Override + public void serverRemoved(GlusterServer server) { + super.serverRemoved(server); + if(server == entity) { + // server selected was removed. select the root element in the tree. + selectEntity(GlusterDataModelManager.getInstance().getModel().getCluster()); } }; }; |
