summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-11 00:33:58 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-11 00:33:58 +0530
commitefe32527e41e28b30b0393f9963daad608ec5c2c (patch)
tree0eaaf965c5dcd340d643d591e7e36b54a5d25e6c /src
parent901d2fc3cfd69219e84de8845e7b8c2e61e35672 (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.java7
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java1
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java18
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java14
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java20
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java26
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java48
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterExceptionMapper.java39
8 files changed, 118 insertions, 55 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 8a684c57..e6c08da7 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
@@ -643,13 +643,6 @@ public class GlusterDataModelManager {
}
}
- public void updateVolumeBricks(Volume volume, List<Brick> bricks) {
- model.getCluster().updateVolume( volume.getName(), bricks );
- for (ClusterListener listener : listeners) {
- listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICK_REPLACED , bricks));
- }
- }
-
public void addTask(TaskInfo taskInfo) {
Cluster cluster = model.getCluster();
cluster.addTaskInfo(taskInfo);
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
index 62f70040..7378116a 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
@@ -23,7 +23,6 @@ public class Event {
BRICKS_ADDED,
BRICKS_REMOVED,
BRICKS_CHANGED,
- BRICK_REPLACED,
VOLUME_STATUS_CHANGED,
VOLUME_OPTIONS_RESET,
VOLUME_OPTION_SET,
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
index 7a53b88f..250d05c3 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
@@ -24,6 +24,7 @@ import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -274,8 +275,8 @@ public class Volume extends Entity {
if (!(getName().equals(volume.getName()) && getVolumeType() == volume.getVolumeType()
&& getTransportType() == volume.getTransportType() && getStatus() == volume.getStatus()
- && getReplicaCount() == volume.getReplicaCount() && getStripeCount() == volume.getStripeCount())
- && getOptions().equals(volume.getOptions())) {
+ && getReplicaCount() == volume.getReplicaCount() && getStripeCount() == volume.getStripeCount()
+ && getOptions().equals(volume.getOptions()))) {
return false;
}
@@ -285,10 +286,15 @@ public class Volume extends Entity {
}
}
- for (Brick brick : getBricks()) {
- if (!(brick.equals(GlusterCoreUtil.getEntity(volume.getBricks(), brick.getName(), false)))) {
- return false;
- }
+ List<Brick> oldBricks = getBricks();
+ List<Brick> newBricks = volume.getBricks();
+ if(oldBricks.size() != newBricks.size()) {
+ return false;
+ }
+
+ Map<Brick, Brick> modifiedBricks = GlusterCoreUtil.getModifiedEntities(oldBricks, newBricks);
+ if(modifiedBricks.size() > 0) {
+ return false;
}
return true;
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 14f999e7..f684a0f7 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
@@ -89,8 +89,20 @@ public class NavigationView extends ViewPart implements ISelectionListener {
@Override
public void volumeChanged(Volume volume, Event event) {
super.volumeChanged(volume, event);
- selectEntity(volume); // this makes sure that the toolbar buttons get updated according to new status
+ if (volume == entity) {
+ // this makes sure that the toolbar buttons get updated according to new status
+ selectEntity(volume);
+ }
}
+
+ 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()));
+ }
+ };
};
GlusterDataModelManager.getInstance().addClusterListener(clusterListener);
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java
index 9805daec..c9e63889 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java
@@ -18,6 +18,7 @@
*******************************************************************************/
package com.gluster.storage.management.gui.views.pages;
+import java.util.Collection;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -54,13 +55,26 @@ public class BricksPage extends AbstractTableViewerPage<Brick> {
@Override
protected ClusterListener createClusterListener() {
return new DefaultClusterListener() {
+ @SuppressWarnings("unchecked")
@Override
public void volumeChanged(Volume volume, Event event) {
- if (event.getEventType() == EVENT_TYPE.BRICKS_ADDED || event.getEventType() == EVENT_TYPE.BRICKS_REMOVED) {
- tableViewer.refresh();
+ switch (event.getEventType()) {
+ case BRICKS_ADDED:
+ tableViewer.add(((Collection<Brick>) event.getEventData()).toArray());
parent.update();
+ break;
+
+ case BRICKS_REMOVED:
+ tableViewer.remove(((Collection<Brick>) event.getEventData()).toArray());
+ parent.update();
+ break;
+
+ case BRICKS_CHANGED:
+ tableViewer.update(((Collection<Brick>) event.getEventData()).toArray(), null);
+ parent.update();
+ default:
+ break;
}
-
}
};
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
index 8fbeb891..106984da 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
@@ -67,40 +67,26 @@ public class TasksPage extends AbstractTableViewerPage<TaskInfo> {
return new DefaultClusterListener() {
@Override
public void taskAdded(TaskInfo taskInfo) {
- refreshViewer();
+ tableViewer.add(taskInfo);
+ parent.update();
}
@Override
public void taskRemoved(TaskInfo taskInfo) {
- refreshViewer();
+ tableViewer.remove(taskInfo);
+ parent.update();
// hide the task related actionset as no task is selected
// site.getPage().hideActionSet(IActionConstants.ACTION_SET_TASK);
- tableViewer.setSelection(new StructuredSelection(taskInfo));
}
@Override
public void taskUpdated(TaskInfo taskInfo) {
- refreshViewer();
+ tableViewer.update(taskInfo, null);
+ parent.update();
// fire selection event so that toolbar gets updated
// (the action class listens to selection and enables/disables automatically)
tableViewer.setSelection(new StructuredSelection(taskInfo));
}
-
- private void refreshViewer() {
- tableViewer.refresh();
- parent.update();
- }
-
- @Override
- public void volumeChanged(Volume volume, Event event) {
- super.volumeChanged(volume, event);
- if (event.getEventType() == EVENT_TYPE.BRICK_REPLACED) {
- if (!tableViewer.getControl().isDisposed()) {
- tableViewer.refresh();
- }
- }
- }
-
};
}
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 2d1e7e98..34829fef 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
@@ -118,20 +118,6 @@ public class VolumeOptionsPage extends Composite {
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());
- }
-
- 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
@@ -149,14 +135,16 @@ public class VolumeOptionsPage extends Composite {
@Override
public void volumeChanged(Volume volume, Event event) {
super.volumeChanged(volume, event);
- if (event.getEventType() == EVENT_TYPE.VOLUME_OPTIONS_RESET) {
+
+ switch (event.getEventType()) {
+ case VOLUME_OPTIONS_RESET:
if (!tableViewer.getControl().isDisposed()) {
tableViewer.refresh();
setAddButtonsEnabled(true);
}
- }
+ break;
- if (event.getEventType() == EVENT_TYPE.VOLUME_OPTION_SET) {
+ case VOLUME_OPTION_SET:
String key = (String)event.getEventData();
if (isNewOption(volume, key)) {
// option has been set successfully by the user. re-enable the add button and search filter
@@ -176,6 +164,16 @@ public class VolumeOptionsPage extends Composite {
// existing volume option value changed. update that element.
tableViewer.update(volume.getOptions().get(key), null);
}
+ break;
+ case VOLUME_CHANGED:
+ tableViewer.refresh();
+ if(volume.getOptions().size() == defaultVolumeOptions.size()) {
+ setAddButtonsEnabled(false);
+ } else {
+ setAddButtonsEnabled(true);
+ }
+ default:
+ break;
}
}
@@ -235,6 +233,22 @@ public class VolumeOptionsPage extends Composite {
});
GlusterDataModelManager.getInstance().addClusterListener(clusterListener);
+
+ addDisposeListener(new DisposeListener() {
+
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ 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());
+ }
+
+ GlusterDataModelManager.getInstance().removeClusterListener(clusterListener);
+ }
+ });
}
private void setupPageLayout() {
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterExceptionMapper.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterExceptionMapper.java
new file mode 100644
index 00000000..99089eb7
--- /dev/null
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterExceptionMapper.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * 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.server.resources.v1_0;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
+
+@Provider
+public class GlusterExceptionMapper implements ExceptionMapper<GlusterRuntimeException> {
+
+ /* (non-Javadoc)
+ * @see javax.ws.rs.ext.ExceptionMapper#toResponse(java.lang.Throwable)
+ */
+ @Override
+ public Response toResponse(GlusterRuntimeException exception) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(exception.getMessage())
+ .type(MediaType.TEXT_PLAIN).build();
+ }
+}