diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-07-11 00:33:58 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-11 00:33:58 +0530 |
| commit | efe32527e41e28b30b0393f9963daad608ec5c2c (patch) | |
| tree | 0eaaf965c5dcd340d643d591e7e36b54a5d25e6c /src | |
| parent | 901d2fc3cfd69219e84de8845e7b8c2e61e35672 (diff) | |
Task#111 - Auto-refresh of data in views
Diffstat (limited to 'src')
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(); + } +} |
