summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-01 20:29:40 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-04 23:07:24 +0530
commit428b944c60244d4a7dd37fb69ae125272525d7ea (patch)
tree612207c63d8364d5613b17e28a733787d0d9906c /src
parente8f611c7d7f448e7a815c723f90b2f85d96ae300 (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.java173
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java2
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java30
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java2
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java40
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java29
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java11
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java49
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java52
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java19
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java69
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java111
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java28
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java55
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java5
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java9
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java17
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java6
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java2
21 files changed, 484 insertions, 233 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 a9c966c3..221651a3 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
@@ -20,6 +20,7 @@ package com.gluster.storage.management.client;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -29,7 +30,6 @@ import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.Disk.DISK_STATUS;
-import com.gluster.storage.management.core.model.Entity;
import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.Event.EVENT_TYPE;
import com.gluster.storage.management.core.model.GlusterDataModel;
@@ -111,44 +111,173 @@ public class GlusterDataModelManager {
private void updateModel(GlusterDataModel model) {
updateVolumes(model);
- updateServers(model);
- // TODO: Update other entities like discovered servers
+ updateGlusterServers(model);
+ updateDiscoveredServers(model);
}
- private void updateServers(GlusterDataModel newModel) {
+ private void updateDiscoveredServers(GlusterDataModel newModel) {
+ List<Server> oldServers = model.getCluster().getAutoDiscoveredServers();
+ List<Server> newServers = newModel.getCluster().getAutoDiscoveredServers();
+
+ Set<Server> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
+ for (Server addedServer : addedServers) {
+ addDiscoveredServer(addedServer);
+ }
+
+ Set<Server> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
+ for (Server removedServer : removedServers) {
+ removeDiscoveredServer(removedServer);
+ }
+
+ Map<Server, Server> modifiedServers = GlusterCoreUtil.getModifiedEntities(oldServers, newServers);
+ for(Entry<Server, Server> entry : modifiedServers.entrySet()) {
+ discoveredServerChanged(entry.getKey(), entry.getValue());
+ }
+ }
+
+ private void updateGlusterServers(GlusterDataModel newModel) {
List<GlusterServer> oldServers = model.getCluster().getServers();
List<GlusterServer> newServers = newModel.getCluster().getServers();
- List<GlusterServer> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
+ Set<GlusterServer> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
for (GlusterServer addedServer : addedServers) {
addGlusterServer(addedServer);
}
- List<GlusterServer> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
+ Set<GlusterServer> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
for (GlusterServer removedServer : removedServers) {
removeGlusterServer(removedServer);
}
- // TODO: Refresh "modified" servers
+ Map<GlusterServer, GlusterServer> modifiedServers = GlusterCoreUtil.getModifiedEntities(oldServers, newServers);
+ for(Entry<GlusterServer, GlusterServer> entry : modifiedServers.entrySet()) {
+ glusterServerChanged(entry.getKey(), entry.getValue());
+ }
+ }
+
+ public void glusterServerChanged(GlusterServer oldServer, GlusterServer newServer) {
+ oldServer.copyFrom(newServer);
+ for (ClusterListener listener : listeners) {
+ listener.serverChanged(oldServer, new Event(EVENT_TYPE.GLUSTER_SERVER_CHANGED, newServer));
+ }
+
+ updateDisks(oldServer, oldServer.getDisks(), newServer.getDisks());
+ }
+
+ private void updateDisks(Server server, List<Disk> oldDisks, List<Disk> newDisks) {
+ Set<Disk> addedDisks = GlusterCoreUtil.getAddedEntities(oldDisks, newDisks, false);
+ addDisks(server, addedDisks);
+
+ Set<Disk> removedDisks = GlusterCoreUtil.getAddedEntities(newDisks, oldDisks, false);
+ removeDisks(server, removedDisks);
+
+ Map<Disk, Disk> modifiedDisks = GlusterCoreUtil.getModifiedEntities(oldDisks, newDisks);
+ disksChanged(server, modifiedDisks);
+ }
+
+ private void disksChanged(Server server, Map<Disk, Disk> modifiedDisks) {
+ if(modifiedDisks.size() == 0) {
+ return;
+ }
+
+ for (Entry<Disk, Disk> entry : modifiedDisks.entrySet()) {
+ entry.getKey().copyFrom(entry.getValue());
+ }
+ for (ClusterListener listener : listeners) {
+ if (server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer) server, new Event(EVENT_TYPE.DISKS_CHANGED, modifiedDisks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_CHANGED, modifiedDisks));
+ }
+ }
+ }
+
+ public void addDisks(Server server, Set<Disk> disks) {
+ if(disks.size() == 0) {
+ return;
+ }
+
+ server.addDisks(disks);
+ for (ClusterListener listener : listeners) {
+ if(server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer)server, new Event(EVENT_TYPE.DISKS_ADDED, disks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_ADDED, disks));
+ }
+ }
+ }
+
+ public void removeDisks(Server server, Set<Disk> disks) {
+ if(disks.size() == 0) {
+ return;
+ }
+
+ for(Disk disk : disks) {
+ server.removeDisk(disk);
+ }
+
+ for (ClusterListener listener : listeners) {
+ if(server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer)server, new Event(EVENT_TYPE.DISKS_REMOVED, disks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_REMOVED, disks));
+ }
+ }
}
private void updateVolumes(GlusterDataModel newModel) {
List<Volume> oldVolumes = model.getCluster().getVolumes();
List<Volume> newVolumes = newModel.getCluster().getVolumes();
- List<Volume> addedVolumes = GlusterCoreUtil.getAddedEntities(oldVolumes, newVolumes, false);
+ Set<Volume> addedVolumes = GlusterCoreUtil.getAddedEntities(oldVolumes, newVolumes, false);
for (Volume addedVolume : addedVolumes) {
addVolume(addedVolume);
}
- List<Volume> removedVolumes = GlusterCoreUtil.getAddedEntities(newVolumes, oldVolumes, false);
+ Set<Volume> removedVolumes = GlusterCoreUtil.getAddedEntities(newVolumes, oldVolumes, false);
for (Volume removedVolume : removedVolumes) {
deleteVolume(removedVolume);
}
- // TODO: Refresh "modified" volumes
+ Map<Volume, Volume> modifiedVolumes = GlusterCoreUtil.getModifiedEntities(oldVolumes, newVolumes);
+ for(Entry<Volume, Volume> entry : modifiedVolumes.entrySet()) {
+ volumeChanged(entry.getKey(), entry.getValue());
+ }
}
+ private void volumeChanged(Volume oldVolume, Volume newVolume) {
+ oldVolume.copyFrom(newVolume);
+ for (ClusterListener listener : listeners) {
+ listener.volumeChanged(oldVolume, new Event(EVENT_TYPE.VOLUME_CHANGED, newVolume));
+ }
+ updateBricks(oldVolume, oldVolume.getBricks(), newVolume.getBricks());
+ }
+
+ private void updateBricks(Volume volume, List<Brick> oldBricks, List<Brick> newBricks) {
+ Set<Brick> addedBricks = GlusterCoreUtil.getAddedEntities(oldBricks, newBricks, false);
+ addBricks(volume, addedBricks);
+
+ Set<Brick> removedBricks = GlusterCoreUtil.getAddedEntities(newBricks, oldBricks, false);
+ removeBricks(volume, removedBricks);
+
+ Map<Brick, Brick> modifiedBricks = GlusterCoreUtil.getModifiedEntities(oldBricks, newBricks);
+ bricksChanged(volume, modifiedBricks);
+ }
+
+ public void bricksChanged(Volume volume, Map<Brick, Brick> modifiedBricks) {
+ if(modifiedBricks.size() == 0) {
+ return;
+ }
+
+ for(Entry<Brick, Brick> entry : modifiedBricks.entrySet()) {
+ entry.getKey().copyFrom(entry.getValue());
+ }
+
+ for (ClusterListener listener : listeners) {
+ listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_CHANGED, modifiedBricks));
+ }
+ }
+
private void initializeGlusterServers(Cluster cluster) {
cluster.setServers(new GlusterServersClient().getServers());
}
@@ -341,6 +470,14 @@ public class GlusterDataModelManager {
}
}
+ public void discoveredServerChanged(Server oldServer, Server newServer) {
+ oldServer.copyFrom(newServer);
+ for (ClusterListener listener : listeners) {
+ listener.discoveredServerChanged(oldServer, new Event(EVENT_TYPE.DISCOVERED_SERVER_CHANGED, newServer));
+ }
+ updateDisks(oldServer, oldServer.getDisks(), newServer.getDisks());
+ }
+
public void removeDiscoveredServer(String serverName) {
Cluster cluster = model.getCluster();
// TODO: Move auto-discovered servers outside the cluster
@@ -398,13 +535,27 @@ public class GlusterDataModelManager {
}
}
- public void addBricks(Volume volume, List<Brick> bricks) {
+ public void addBricks(Volume volume, Set<Brick> bricks) {
+ if(bricks.size() == 0) {
+ return;
+ }
+
+ volume.addBricks(bricks);
for (ClusterListener listener : listeners) {
listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_ADDED, bricks));
}
}
public void removeBricks(Volume volume, Set<Brick> bricks) {
+ if(bricks.size() == 0) {
+ return;
+ }
+
+ // Remove the bricks from the volume object
+ for (Brick brick : bricks) {
+ volume.removeBrick(brick);
+ }
+
for (ClusterListener listener : listeners) {
listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_REMOVED, bricks));
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
index 2866a8e1..7beb8433 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
@@ -139,7 +139,7 @@ public class VolumesClient extends AbstractClient {
VolumeOptionInfoListResponse.class)).getOptions();
}
- public void addBricks(String volumeName, List<String> brickList) {
+ public void addBricks(String volumeName, Set<String> brickList) {
String bricks = StringUtil.collectionToString(brickList, ",");
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_BRICKS, bricks);
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
index fef8f969..0b330514 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
@@ -19,6 +19,7 @@
package com.gluster.storage.management.core.model;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
import com.gluster.storage.management.core.utils.StringUtil;
@@ -35,6 +36,12 @@ public class Brick extends Entity {
public Brick() {
}
+ @Override
+ @XmlTransient
+ public String getName() {
+ return getQualifiedName();
+ }
+
public BRICK_STATUS getStatus() {
return status;
}
@@ -83,7 +90,7 @@ public class Brick extends Entity {
}
public boolean filter(String filterString, boolean caseSensitive) {
- return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName(), filterString,
+ return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName() + getStatusStr(), filterString,
caseSensitive);
}
@@ -91,4 +98,25 @@ public class Brick extends Entity {
public String toString() {
return getQualifiedName();
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Brick)) {
+ return false;
+ }
+
+ Brick brick = (Brick)obj;
+ if(getQualifiedName().equals(brick.getQualifiedName()) && getStatus() == brick.getStatus()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(Brick newBrick) {
+ setServerName(newBrick.getServerName());
+ setBrickDirectory(newBrick.getBrickDirectory());
+ setDiskName(newBrick.getDiskName());
+ setStatus(newBrick.getStatus());
+ }
}
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 71de5e23..350c9102 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
@@ -27,6 +27,8 @@ public interface ClusterListener {
public void discoveredServerRemoved(Server server);
+ public void discoveredServerChanged(Server server, Event event);
+
public void serverAdded(GlusterServer server);
public void serverRemoved(GlusterServer server);
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 d3b0e42e..c530fde4 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
@@ -26,79 +26,83 @@ public class DefaultClusterListener implements ClusterListener {
@Override
public void serverAdded(GlusterServer server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void serverRemoved(GlusterServer server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void serverChanged(GlusterServer server, Event event) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeAdded(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeRemoved(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeChanged(Volume volume, Event event) {
- clusterChanged();
+ modelChanged();
}
@Override
public void discoveredServerAdded(Server server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void discoveredServerRemoved(Server server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeCreated(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeDeleted(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskAdded(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskRemoved(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskUpdated(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
-
+
/**
* This method is called by every other event method. Thus, if a view/listener is interested in performing the same
- * task on any change happening in the cluster data model, it can simply override this method and implement the
- * logic. e.g. A view may simply refresh its tree/table viewer whenever the cluster data model changes.
+ * task on any change happening in the data model, it can simply override this method and implement the
+ * logic. e.g. A view may simply refresh its tree/table viewer whenever the data model changes.
*/
- public void clusterChanged() {
+ public void modelChanged() {
}
-
+
+ @Override
+ public void discoveredServerChanged(Server server, Event event) {
+ modelChanged();
+ }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
index a399a03a..ecc3a278 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
@@ -132,4 +132,31 @@ public class Disk extends Entity {
public String getQualifiedBrickName(String volumeName) {
return getServerName() + ":" + getMountPoint() + File.separator + volumeName;
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Disk)) {
+ return false;
+ }
+ Disk disk = (Disk)obj;
+
+ if (getName().equals(disk.getName()) && getServerName().equals(disk.getServerName())
+ && getMountPoint().equals(disk.getMountPoint()) && getDescription().equals(disk.getDescription())
+ && getStatus() == disk.getStatus() && getSpace() == disk.getSpace()
+ && getSpaceInUse() == disk.getSpaceInUse()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(Disk newDisk) {
+ setName(newDisk.getName());
+ setDescription(newDisk.getDescription());
+ setMountPoint(newDisk.getMountPoint());
+ setServerName(newDisk.getServerName());
+ setStatus(newDisk.getStatus());
+ setSpace(newDisk.getSpace());
+ setSpaceInUse(newDisk.getSpaceInUse());
+ }
+} \ No newline at end of file
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 1e172d1c..62f70040 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
@@ -22,12 +22,17 @@ public class Event {
public enum EVENT_TYPE {
BRICKS_ADDED,
BRICKS_REMOVED,
+ BRICKS_CHANGED,
BRICK_REPLACED,
- NETWORK_INTERFACE_ADDED,
- NETWORK_INTERFACE_REMOVED,
VOLUME_STATUS_CHANGED,
VOLUME_OPTIONS_RESET,
- VOLUME_OPTION_SET
+ VOLUME_OPTION_SET,
+ VOLUME_CHANGED,
+ GLUSTER_SERVER_CHANGED,
+ DISKS_ADDED,
+ DISKS_REMOVED,
+ DISKS_CHANGED,
+ DISCOVERED_SERVER_CHANGED
}
private EVENT_TYPE eventType;
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
index 8324b22d..f2ccc5db 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
@@ -88,7 +88,6 @@ public class GlusterDummyModel {
initializeAutoDiscoveredServers(cluster);
initializeDisks();
addDisksToServers();
- addDisksToVolumes();
addVolumeOptions();
createDummyLogMessages();
@@ -170,27 +169,6 @@ public class GlusterDummyModel {
server5.addDisk(s5db);
}
- private void addDisksToVolumes() {
- volume1.addDisk("server1:sda");
-
- volume2.addDisk("server2:sda");
- volume2.addDisk("server1:sdb");
- volume2.addDisk("server3:sda");
- volume2.addDisk("server4:sda");
-
- volume3.addDisk("server2:sdb");
- volume3.addDisk("server4:sda");
- volume3.addDisk("server5:sda");
-
- volume4.addDisk("server1:sda");
- volume4.addDisk("server3:sda");
- volume4.addDisk("server4:sda");
- volume4.addDisk("server5:sdb");
-
- volume5.addDisk("server2:sda");
- volume5.addDisk("server5:sdb");
- }
-
private void initializeGlusterServers(Cluster cluster) {
List<GlusterServer> servers = new ArrayList<GlusterServer>();
server1 = addGlusterServer(servers, cluster, "Server1", SERVER_STATUS.ONLINE, "eth0", 4, 56.3, 16, 8.4);
@@ -254,33 +232,6 @@ public class GlusterDummyModel {
return null;
}
- public List<Disk> getReadyDisksOfVolume(Volume volume) {
- // List<Disk> disks = new ArrayList<Disk>();
- // for (Disk disk : volume.getDisks()) {
- // if (disk.isReady()) {
- // disks.add(disk);
- // }
- // }
- // return disks;
- Disk disk = null;
- List<Disk> volumeDisks = new ArrayList<Disk>();
- for (String volumeDisk : volume.getDisks()) {
- disk = getVolumeDisk(volumeDisk);
- if (disk != null && disk.isReady()) {
- volumeDisks.add(disk);
- }
- }
- return volumeDisks;
- }
-
- public List<Disk> getReadyDisksOfAllVolumes() {
- List<Disk> disks = new ArrayList<Disk>();
- for (Volume volume : ((Cluster) model.getChildren().get(0)).getVolumes()) {
- disks.addAll(getReadyDisksOfVolume(volume));
- }
- return disks;
- }
-
public List<Disk> getReadyDisksOfAllServers() {
return getReadyDisksOfAllServersExcluding(new ArrayList<Disk>());
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
index a9455f48..d6105f23 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
@@ -33,7 +33,6 @@ public class GlusterServer extends Server {
private String uuid;
private SERVER_STATUS status;
- private Cluster cluster;
public GlusterServer() {
}
@@ -48,12 +47,6 @@ public class GlusterServer extends Server {
setStatus(status);
}
- public GlusterServer(String name, Entity parent, SERVER_STATUS status, int numOfCPUs, double cpuUsage,
- double totalMemory, double memoryInUse, Cluster cluster) {
- this(name, parent, status, numOfCPUs, cpuUsage, totalMemory, memoryInUse);
- setCluster(cluster);
- }
-
public Boolean isOnline() {
return getStatus() == SERVER_STATUS.ONLINE;
}
@@ -78,32 +71,31 @@ public class GlusterServer extends Server {
this.uuid = uuid;
}
-
-// public NetworkInterface getPreferredNetworkInterface() {
-// return preferredNetworkInterface;
-// }
-//
-// public void setPreferredNetworkInterface(NetworkInterface preferredNetworkInterface) {
-// this.preferredNetworkInterface = preferredNetworkInterface;
-// preferredNetworkInterface.setPreferred(true);
-// }
-
-
- @XmlTransient
- public Cluster getCluster() {
- return cluster;
- }
-
- public void setCluster(Cluster cluster) {
- this.cluster = cluster;
- }
-
/**
- * Filter matches if any of the properties name, status and primary/secondary/third
- * DNS contains the filter string
+ * Filter matches if any of the properties name and status contains the filter string
*/
@Override
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getStatusStr(), filterString, caseSensitive);
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof GlusterServer)) {
+ return false;
+ }
+ GlusterServer server = (GlusterServer)obj;
+
+ if(super.equals(server) && getUuid().equals(server.getUuid()) && getStatus() == server.getStatus()){
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(GlusterServer server) {
+ super.copyFrom(server);
+ setUuid(server.getUuid());
+ setStatus(server.getStatus());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
index c0521ef3..181b8e66 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
@@ -92,4 +92,21 @@ public class NetworkInterface extends Entity {
this.speed = speed;
}
-}
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof NetworkInterface)) {
+ return false;
+ }
+
+ NetworkInterface networkInterface = (NetworkInterface) obj;
+ if (getName().equals(networkInterface.getName()) && getHwAddr().equals(networkInterface.getHwAddr())
+ && getIpAddress().equals(networkInterface.getIpAddress())
+ && getDefaultGateway().equals(networkInterface.getDefaultGateway())
+ && getNetMask().equals(networkInterface.getNetMask()) && getSpeed().equals(networkInterface.getSpeed())
+ && getModel().equals(networkInterface.getModel())) {
+ return true;
+ }
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
index 487733c3..9e9212dc 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
@@ -19,17 +19,18 @@
package com.gluster.storage.management.core.model;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
+import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement(name = "server")
public class Server extends Entity {
- private List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();
private int numOfCPUs;
private double cpuUsage;
private double totalMemory;
@@ -37,6 +38,7 @@ public class Server extends Entity {
private double totalDiskSpace = 0;
private double diskSpaceInUse = 0;
private List<Disk> disks = new ArrayList<Disk>();
+ private List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();
public Server() {
@@ -143,7 +145,7 @@ public class Server extends Entity {
}
}
- public void addDisks(List<Disk> disks) {
+ public void addDisks(Collection<Disk> disks) {
for (Disk disk : disks) {
addDisk(disk);
}
@@ -184,19 +186,54 @@ public class Server extends Entity {
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getIpAddressesAsString(), filterString, caseSensitive);
}
-
+
+ /**
+ * Note: this method doesn't copy the disks. Clients should write separate code to identify added/removed/modified
+ * disks and update the server disks appropriately.
+ *
+ * @param server
+ */
@SuppressWarnings("unchecked")
public void copyFrom(Server server) {
- this.setName(server.getName());
- this.setParent(server.getParent());
- this.setChildren(( List<Entity>) server.getChildren());
- this.setNetworkInterfaces(server.getNetworkInterfaces());
- this.setNumOfCPUs(server.getNumOfCPUs());
- this.setCpuUsage(server.getCpuUsage());
- this.setTotalMemory(server.getTotalMemory());
- this.setMemoryInUse(server.getMemoryInUse());
- this.setTotalDiskSpace(server.getTotalDiskSpace());
- this.setDiskSpaceInUse(server.getDiskSpaceInUse());
- this.setDisks(server.getDisks());
- }
-}
+ setName(server.getName());
+ setParent(server.getParent());
+ setChildren((List<Entity>) server.getChildren());
+ setNetworkInterfaces(server.getNetworkInterfaces());
+ setNumOfCPUs(server.getNumOfCPUs());
+ setCpuUsage(server.getCpuUsage());
+ setTotalMemory(server.getTotalMemory());
+ setMemoryInUse(server.getMemoryInUse());
+ setTotalDiskSpace(server.getTotalDiskSpace());
+ setDiskSpaceInUse(server.getDiskSpaceInUse());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Server)) {
+ return false;
+ }
+ Server server = (Server)obj;
+
+ if (!(getName().equals(server.getName()) && getNumOfCPUs() == server.getNumOfCPUs()
+ && getCpuUsage() == server.getCpuUsage() && getTotalMemory() == server.getTotalMemory()
+ && getMemoryInUse() == server.getMemoryInUse() && getDisks().size() == server.getDisks().size() && getNetworkInterfaces()
+ .size() == server.getNetworkInterfaces().size())) {
+ return false;
+ }
+
+ for(Disk disk : getDisks()) {
+ if (!disk.equals(GlusterCoreUtil.getEntity(server.getDisks(), disk.getName(), false))) {
+ return false;
+ }
+ }
+
+ for (NetworkInterface networkInterface : getNetworkInterfaces()) {
+ if (!networkInterface.equals(GlusterCoreUtil.getEntity(server.getNetworkInterfaces(),
+ networkInterface.getName(), false))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+} \ No newline at end of file
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 1d5b2fec..006202fb 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
@@ -20,6 +20,7 @@ package com.gluster.storage.management.core.model;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -30,6 +31,7 @@ import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
+import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement
@@ -62,16 +64,12 @@ public class Volume extends Entity {
private static final String[] STATUS_STR = new String[] { "Online", "Offline" };
private static final String[] NAS_PROTOCOL_STR = new String[] { "Gluster", "NFS" };
- private Cluster cluster;
private VOLUME_TYPE volumeType;
private TRANSPORT_TYPE transportType;
private VOLUME_STATUS status;
private int replicaCount;
private int stripeCount;
private VolumeOptions options = new VolumeOptions();
-
- private double totalDiskSpace = 0;
- private List<String> disks = new ArrayList<String>();
private List<Brick> bricks = new ArrayList<Brick>();
public Volume() {
@@ -105,10 +103,6 @@ public class Volume extends Entity {
return STATUS_STR[getStatus().ordinal()];
}
- public int getNumOfDisks() {
- return disks.size();
- }
-
public int getNumOfBricks() {
return bricks.size();
}
@@ -164,15 +158,6 @@ public class Volume extends Entity {
this.status = status;
}
- @XmlTransient
- public Cluster getCluster() {
- return cluster;
- }
-
- public void setCluster(Cluster cluster) {
- this.cluster = cluster;
- }
-
@XmlElementWrapper(name = "nasProtocols")
@XmlElement(name = "nasProtocol", type=NAS_PROTOCOL.class)
public Set<NAS_PROTOCOL> getNASProtocols() {
@@ -214,38 +199,11 @@ public class Volume extends Entity {
this.options.setOptionsMap(options);
}
- public double getTotalDiskSpace() {
- return totalDiskSpace;
- }
-
- public List<String> getDisks() {
- return disks;
- }
-
- public void addDisk(String disk) {
- disks.add(disk);
- }
-
- public void addDisks(List<String> disks) {
- for (String disk : disks) {
- addDisk(disk);
- }
- }
-
- public void removeDisk(String disk) {
- disks.remove(disk);
- }
-
- public void removeAllDisks() {
- disks.clear();
- totalDiskSpace = 0;
- }
-
public void addBrick(Brick brick) {
bricks.add(brick);
}
- public void addBricks(List<Brick> bricks) {
+ public void addBricks(Collection<Brick> bricks) {
this.bricks.addAll(bricks);
}
@@ -264,11 +222,6 @@ public class Volume extends Entity {
return bricks;
}
- public void setDisks(List<String> disks) {
- removeAllDisks();
- addDisks(disks);
- }
-
public void enableNFS() {
nasProtocols.add(NAS_PROTOCOL.NFS);
}
@@ -284,13 +237,6 @@ public class Volume extends Entity {
setStatus(status);
}
- public Volume(String name, Entity parent, Cluster cluster, VOLUME_TYPE volumeType, TRANSPORT_TYPE transportType,
- VOLUME_STATUS status) {
- this(name, parent, volumeType, transportType, status);
-
- setCluster(cluster);
- }
-
/**
* Filter matches if any of the properties name, volume type, transport type, status and number of disks contains
* the filter string
@@ -298,7 +244,7 @@ public class Volume extends Entity {
@Override
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getVolumeTypeStr() + getTransportTypeStr() + getStatusStr()
- + getNumOfDisks(), filterString, caseSensitive);
+ + getNumOfBricks(), filterString, caseSensitive);
}
public List<String> getBrickDirectories() {
@@ -308,4 +254,51 @@ public class Volume extends Entity {
}
return brickDirectories;
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Volume)) {
+ return false;
+ }
+
+ Volume volume = (Volume)obj;
+
+ if (!(getName().equals(volume.getName()) && getVolumeType() == volume.getVolumeType()
+ && getTransportType() == volume.getTransportType() && getStatus() == volume.getStatus()
+ && getReplicaCount() == volume.getReplicaCount() && getStripeCount() == volume.getStripeCount())
+ && getOptions().equals(volume.getOptions())) {
+ return false;
+ }
+
+ for(NAS_PROTOCOL nasProtocol : getNASProtocols()) {
+ if(!(volume.getNASProtocols().contains(nasProtocol))) {
+ return false;
+ }
+ }
+
+ for (Brick brick : getBricks()) {
+ if (!(brick.equals(GlusterCoreUtil.getEntity(volume.getBricks(), brick.getName(), false)))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Note: this method doesn't copy the bricks. Clients should write separate code to identify added/removed/modified
+ * bricks and update the volume bricks appropriately.
+ *
+ * @param newVolume
+ */
+ public void copyFrom(Volume newVolume) {
+ setName(newVolume.getName());
+ setVolumeType(newVolume.getVolumeType());
+ setTransportType(newVolume.getTransportType());
+ setStatus(newVolume.getStatus());
+ setReplicaCount(newVolume.getReplicaCount());
+ setStripeCount(newVolume.getStripeCount());
+ setNASProtocols(newVolume.getNASProtocols());
+ getOptions().copyFrom(newVolume.getOptions());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
index f16dd809..f928c241 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
@@ -86,4 +86,30 @@ public class VolumeOptions {
public boolean containsKey(String key) {
return optionsMap.containsKey(key);
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof VolumeOptions)) {
+ return false;
+ }
+
+ VolumeOptions options = (VolumeOptions)obj;
+ if(getOptions().size() != options.size()) {
+ return false;
+ }
+
+ for(VolumeOption option : getOptions()) {
+ if(!(option.getValue().equals(options.get(option.getKey())))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public void copyFrom(VolumeOptions options) {
+ for(Entry<String, String> entry : options.entrySet()) {
+ optionsMap.put(entry.getKey(), entry.getValue());
+ }
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
index 76a7fbfc..838612be 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
@@ -21,7 +21,10 @@
package com.gluster.storage.management.core.utils;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import com.gluster.storage.management.core.model.Brick;
@@ -48,6 +51,25 @@ public class GlusterCoreUtil {
}
/**
+ * Compares the two entity lists and returns the list of entities from first list that have been modified in the second
+ *
+ * @param oldEntities
+ * @param newEntities
+ * @return List of entities that have been modified
+ */
+ public static <T extends Entity> Map<T, T> getModifiedEntities(List<T> oldEntities, List<T> newEntities) {
+ Map<T, T> modifiedEntities = new HashMap<T, T>();
+ for (T oldEntity : oldEntities) {
+ T newEntity = getEntity(newEntities, oldEntity.getName(), false);
+ if(newEntity != null && !oldEntity.equals(newEntity)) {
+ // old and new entities differ. mark it as modified.
+ modifiedEntities.put(oldEntity, newEntity);
+ }
+ }
+ return modifiedEntities;
+ }
+
+ /**
* Compares the two entity lists and returns the list of entities present only in the second argument
* <code>newEntities</code>
*
@@ -56,10 +78,11 @@ public class GlusterCoreUtil {
* @param caseInsensitive If true, the entity name comparison will be done in case insensitive manner
* @return List of entities that are present only in the second argument <code>newEntities</code>
*/
- public static <T extends Entity> List<T> getAddedEntities(List<T> oldEntities, List<T> newEntities, boolean caseInsensitive) {
- List<T> addedEntities = new ArrayList<T>();
- for(T newEntity : newEntities) {
- if(!containsEntity(oldEntities, newEntity, caseInsensitive)) {
+ public static <T extends Entity> Set<T> getAddedEntities(List<T> oldEntities, List<T> newEntities,
+ boolean caseInsensitive) {
+ Set<T> addedEntities = new HashSet<T>();
+ for (T newEntity : newEntities) {
+ if (!containsEntity(oldEntities, newEntity, caseInsensitive)) {
// old entity list doesn't contain this entity. mark it as new.
addedEntities.add(newEntity);
}
@@ -67,22 +90,26 @@ public class GlusterCoreUtil {
return addedEntities;
}
- public static <T extends Entity> boolean containsEntity(List<T> entityList, Entity searchEntity, boolean caseInsensitive) {
- String searchEntityName = searchEntity.getName();
- if(caseInsensitive) {
+ public static <T extends Entity> boolean containsEntity(List<T> entityList, Entity searchEntity,
+ boolean caseInsensitive) {
+ return getEntity(entityList, searchEntity.getName(), caseInsensitive) != null;
+ }
+
+ public static <T extends Entity> T getEntity(List<T> entityList, String searchEntityName, boolean caseInsensitive) {
+ if (caseInsensitive) {
searchEntityName = searchEntityName.toUpperCase();
}
-
- for(T entity : entityList) {
+
+ for (T entity : entityList) {
String nextEntityName = entity.getName();
- if(caseInsensitive) {
+ if (caseInsensitive) {
nextEntityName = nextEntityName.toUpperCase();
}
- if(nextEntityName.equals(searchEntityName)) {
- return true;
+ if (nextEntityName.equals(searchEntityName)) {
+ return entity;
}
}
-
- return false;
+
+ return null;
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java
index 007c7adb..cd85d22b 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java
@@ -20,19 +20,16 @@ package com.gluster.storage.management.gui;
import java.util.Map.Entry;
-import com.gluster.storage.management.gui.utils.GUIHelper;
import com.gluster.storage.management.gui.views.pages.VolumeOptionsPage.OPTIONS_TABLE_COLUMN_INDICES;
public class VolumeOptionsTableLabelProvider extends TableLabelProviderAdapter {
- private GUIHelper guiHelper = GUIHelper.getInstance();
-
@Override
public String getColumnText(Object element, int columnIndex) {
if (!(element instanceof Entry)) {
return null;
}
- Entry<String, String> entry = (Entry) element;
+ Entry<String, String> entry = (Entry<String, String>) element;
String key = entry.getKey();
String value = entry.getValue();
return (columnIndex == OPTIONS_TABLE_COLUMN_INDICES.OPTION_KEY.ordinal() ? key
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java
index 0f411a59..f7d1207c 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java
@@ -47,10 +47,6 @@ public class RemoveBrickAction extends AbstractActionDelegate {
VolumesClient client = new VolumesClient();
try {
client.removeBricks(volume.getName(), bricks, confirmDelete);
- // Remove the bricks from the volume object
- for (Brick brick : bricks) {
- volume.removeBrick(brick);
- }
// Update model with removed bricks in the volume
modelManager.removeBricks(volume, bricks);
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java
index 961dca88..bd36ff7c 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java
@@ -21,7 +21,9 @@
package com.gluster.storage.management.gui.dialogs;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
@@ -90,12 +92,11 @@ public class AddBrickPage extends WizardPage {
return availableDisks;
}
-
- public List<Disk> getChosenDisks( ) {
- return page.getChosenDisks();
+ public Set<Disk> getChosenDisks() {
+ return new HashSet<Disk>(page.getChosenDisks());
}
- public List<Brick> getChosenBricks( String volumeName ) {
+ public Set<Brick> getChosenBricks( String volumeName ) {
return page.getChosenBricks(volumeName);
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java
index bcb3ce3d..58255f8c 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java
@@ -20,8 +20,9 @@
*/
package com.gluster.storage.management.gui.dialogs;
-import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.Wizard;
@@ -29,10 +30,7 @@ import org.eclipse.jface.wizard.Wizard;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.Disk;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.StringUtil;
/**
@@ -60,15 +58,12 @@ public class AddBrickWizard extends Wizard {
*/
@Override
public boolean performFinish() {
- List<Brick> bricks = page.getChosenBricks(volume.getName());
+ Set<Brick> bricks = page.getChosenBricks(volume.getName());
VolumesClient volumeClient = new VolumesClient();
try {
- List<String> brickList = getBrickList(bricks);
+ Set<String> brickList = getBrickList(bricks);
volumeClient.addBricks(volume.getName(), brickList);
- List<Disk> disks = page.getChosenDisks();
- volume.addDisks(GlusterCoreUtil.getQualifiedDiskNames(disks));
- volume.addBricks(bricks);
// Update model with new bricks in the volume
GlusterDataModelManager.getInstance().addBricks(volume, bricks);
@@ -82,8 +77,8 @@ public class AddBrickWizard extends Wizard {
}
}
- private List<String> getBrickList(List<Brick> bricks) {
- List<String> brickList = new ArrayList<String>();
+ private Set<String> getBrickList(Set<Brick> bricks) {
+ Set<String> brickList = new HashSet<String>();
for(Brick brick : bricks) {
brickList.add(brick.getServerName() + ":" + brick.getBrickDirectory());
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java
index fbfb52d1..db963b18 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java
@@ -19,7 +19,9 @@
package com.gluster.storage.management.gui.dialogs;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.SWT;
@@ -314,11 +316,11 @@ public class BricksSelectionPage extends Composite {
return null;
}
- public List<Brick> getChosenBricks(String volumeName) {
+ public Set<Brick> getChosenBricks(String volumeName) {
Object[] bricksArr = (Object[]) chosenBricksContentProvider.getElements(dualTableViewer);
if (bricksArr != null) {
- List<Brick> bricks = new ArrayList<Brick>();
+ Set<Brick> bricks = new HashSet<Brick>();
for (Object disk : bricksArr) {
bricks.add(new Brick(((Disk) disk).getServerName(), BRICK_STATUS.ONLINE, ((Disk) disk).getName(),
((Disk) disk).getMountPoint() + "/" + volumeName)); // Assumption mount point is not having
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
index a4152899..e010ed5c 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
@@ -18,8 +18,8 @@
*******************************************************************************/
package com.gluster.storage.management.gui.dialogs;
-import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
@@ -112,7 +112,7 @@ public class SelectDisksDialog extends Dialog {
return disksPage.getChosenDisks();
}
- public List<Brick> getSelectedBricks(String volumeName) {
+ public Set<Brick> getSelectedBricks(String volumeName) {
return disksPage.getChosenBricks(volumeName);
}
}
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 458dcf61..8acb4a75 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
@@ -82,7 +82,7 @@ public class NavigationView extends ViewPart implements ISelectionListener {
// Refresh the navigation tree whenever there is a change to the data model
GlusterDataModelManager.getInstance().addClusterListener(new DefaultClusterListener() {
- public void clusterChanged() {
+ public void modelChanged() {
treeViewer.refresh();
}