diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-07-15 14:06:58 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-17 22:17:10 +0530 |
| commit | 194d5787da03f843a4eb81f304d6f30057bb5be2 (patch) | |
| tree | 5ca99137760b57c38587243a4f8e807d39d4fea7 /src | |
| parent | 665b45744d06bd9c0a53263ec87630cdc2734c90 (diff) | |
Disk and Partition feature added
Diffstat (limited to 'src')
22 files changed, 677 insertions, 371 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 ba5ce336..e6089360 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 @@ -31,12 +31,14 @@ import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Cluster; import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Device.DEVICE_STATUS; import com.gluster.storage.management.core.model.Disk; 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; import com.gluster.storage.management.core.model.GlusterServer; +import com.gluster.storage.management.core.model.Partition; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.TaskInfo; @@ -417,17 +419,11 @@ public class GlusterDataModelManager { return volume; } - /** - * @param serverPartition - * Qualified name of the disk to be returned (serverName:diskName) - * @return The disk object for given qualified name - */ - public Disk getDisk(String serverPartition) { - List<Disk> allDisks = getReadyDisksOfAllServers(); - String diskInfo[] = serverPartition.split(":"); - for (Disk disk : allDisks) { - if (disk.getServerName().equals(diskInfo[0]) && disk.getName().equals(diskInfo[1])) { - return disk; + private Device getDevice(String serverName, String deviceName) { + List<Device> allDevices = getReadyDevicesOfAllServers(); + for (Device device : allDevices) { + if (device.getServerName().equals(serverName) && device.getName().equals(deviceName)) { + return device; } } return null; @@ -436,85 +432,51 @@ public class GlusterDataModelManager { /* * @param diskName (sda) * - * @return The disk object for given disk name + * @return The device object for given device name */ - public Disk getDiskDetails(String diskName) { - List<Disk> allDisks = getReadyDisksOfAllServers(); - for (Disk disk : allDisks) { - if (disk.getName().equals(diskName)) { - return disk; + public Device getDeviceDetails(String deviceName) { + List<Device> allDevices = getReadyDevicesOfAllServers(); + for (Device device : allDevices) { + if (device.getName().equals(deviceName)) { + return device; } } return null; } - public List<Disk> getReadyDisksOfVolume(Volume volume) { - /* - * TODO: review the logic - * - * List<Disk> disks = new ArrayList<Disk>(); for (Disk disk : volume.getDisks()) { if (disk.isReady()) { - * disks.add(disk); } } - */ - Disk disk = null; - List<Disk> volumeDisks = new ArrayList<Disk>(); - for (Brick brick : volume.getBricks()) { - disk = getDisk(brick.getServerName() + ":" + brick.getDiskName()); - // disk = new Disk(); - // disk.setServerName(brick.getServerName()); - // disk.setName(brick.getDiskName()); - // disk.setStatus(DISK_STATUS.READY); - // disk.setMountPoint("/export/" + disk.getName()); - // disk.setSpace(250d); - // disk.setSpaceInUse(186.39); - if (disk != null && disk.isReady()) { - volumeDisks.add(disk); - } - } - return volumeDisks; - } - - public List<Brick> getOnlineBricks(Volume volume) { - List<Brick> onlineBricks = new ArrayList<Brick>(); + public List<Device> getReadyDevicesOfVolume(Volume volume) { + Device device = null; + List<Device> volumeDevices = new ArrayList<Device>(); for (Brick brick : volume.getBricks()) { - if (isOnlineDisk(brick.getDiskName())) { - onlineBricks.add(brick); + device = getDevice(brick.getServerName(), brick.getDeviceName()); + if (device != null && device.isReady()) { + volumeDevices.add(device); } } - return onlineBricks; - } - - public boolean isOnlineDisk(String diskName) { - for (Disk disk : getReadyDisksOfAllServers()) { - if (disk.getName().equals(diskName) && disk.isReady()) { - return true; - } - } - return false; - } - - public List<Disk> getReadyDisksOfAllVolumes() { - List<Disk> disks = new ArrayList<Disk>(); - for (Volume volume : model.getCluster().getVolumes()) { - disks.addAll(getReadyDisksOfVolume(volume)); - } - return disks; + return volumeDevices; } - public List<Disk> getReadyDisksOfAllServers() { - return getReadyDisksOfAllServersExcluding(new ArrayList<Disk>()); + public List<Device> getReadyDevicesOfAllServers() { + return getReadyDevicesOfAllServersExcluding(new ArrayList<Device>()); } - public List<Disk> getReadyDisksOfAllServersExcluding(List<Disk> excludeDisks) { - List<Disk> disks = new ArrayList<Disk>(); + public List<Device> getReadyDevicesOfAllServersExcluding(List<Device> excludeDevices) { + List<Device> devices = new ArrayList<Device>(); for (Server server : model.getCluster().getServers()) { for (Disk disk : server.getDisks()) { - if (disk.isReady() && !excludeDisks.contains(disk)) { - disks.add(disk); + if(disk.hasPartitions()) { + for(Partition partition : disk.getPartitions()) { + if(partition.isReady() && !excludeDevices.contains(partition)) { + devices.add(partition); + } + } + } else if (disk.isReady() && !excludeDevices.contains(disk)) { + devices.add(disk); } } } - return disks; + return devices; } public void addClusterListener(ClusterListener listener) { @@ -721,7 +683,7 @@ public class GlusterDataModelManager { private Boolean isDiskUsed(Volume volume, Disk disk) { for (Brick brick : volume.getBricks()) { - if (disk.getName().equals(brick.getDiskName()) && disk.getServerName().equals(brick.getServerName())) { + if (disk.getName().equals(brick.getDeviceName()) && disk.getServerName().equals(brick.getServerName())) { return true; } } 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 0b330514..52978f2a 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 @@ -29,7 +29,7 @@ public class Brick extends Entity { private String[] BRICK_STATUS_STR = {"Online", "Offline"}; private String serverName; - private String diskName; + private String deviceName; private String brickDirectory; private BRICK_STATUS status; @@ -54,10 +54,10 @@ public class Brick extends Entity { this.status = status; } - public Brick(String serverName, BRICK_STATUS brickStatus, String diskName, String brickDirectory) { + public Brick(String serverName, BRICK_STATUS brickStatus, String deviceName, String brickDirectory) { setServerName(serverName); setStatus(brickStatus); - setDiskName(diskName); + setDeviceName(deviceName); setBrickDirectory(brickDirectory); } @@ -77,12 +77,12 @@ public class Brick extends Entity { return brickDirectory; } - public void setDiskName(String diskName) { - this.diskName = diskName; + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; } - public String getDiskName() { - return diskName; + public String getDeviceName() { + return deviceName; } public String getQualifiedName() { @@ -90,7 +90,7 @@ public class Brick extends Entity { } public boolean filter(String filterString, boolean caseSensitive) { - return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName() + getStatusStr(), filterString, + return StringUtil.filterString(getServerName() + getBrickDirectory() + getDeviceName() + getStatusStr(), filterString, caseSensitive); } @@ -116,7 +116,7 @@ public class Brick extends Entity { public void copyFrom(Brick newBrick) { setServerName(newBrick.getServerName()); setBrickDirectory(newBrick.getBrickDirectory()); - setDiskName(newBrick.getDiskName()); + setDeviceName(newBrick.getDeviceName()); setStatus(newBrick.getStatus()); } } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java index ebb095f1..7c1d3d54 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java @@ -51,8 +51,8 @@ public class Device extends Entity { private String serverName; private String mountPoint; - private Double space; - private Double spaceInUse; + private Double space = 0.0; + private Double spaceInUse = 0.0; private DEVICE_STATUS status; public Device() { @@ -73,7 +73,7 @@ public class Device extends Entity { } public Double getFreeSpace() { - return getSpace() - getSpaceInUse(); + return (getSpace() - getSpaceInUse()); } public void setSpace(Double space) { 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 f09f20ba..d6d3f7af 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 @@ -18,9 +18,11 @@ *******************************************************************************/ package com.gluster.storage.management.core.model; +import java.util.ArrayList; import java.util.Collection; 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; @@ -33,7 +35,7 @@ public class Disk extends Device { // interface = pci, raid0, raid3, etc private String diskInterface; - private Collection<Partition> partitions; + private Collection<Partition> partitions = new ArrayList<Partition>(); // In case of a software raid, the disk will contain an array of other disks private Collection<Disk> raidDisks; @@ -58,6 +60,8 @@ public class Disk extends Device { this.diskInterface = diskInterface; } + @XmlElementWrapper(name="raidDisks") + @XmlElement(name="disk", type=Disk.class) public Collection<Disk> getRaidDisks() { return raidDisks; } @@ -70,9 +74,15 @@ public class Disk extends Device { this.partitions = partitions; } + @XmlElementWrapper(name="partitions") + @XmlElement(name="partition", type=Partition.class) public Collection<Partition> getPartitions() { return partitions; } + + public boolean hasPartitions() { + return (partitions != null && partitions.size() > 0); + } public Disk(Server server, String name, String mountPoint, Double space, Double spaceInUse, DEVICE_STATUS status) { super(server, name, mountPoint, space, spaceInUse, status); @@ -80,8 +90,19 @@ public class Disk extends Device { @Override public boolean filter(String filterString, boolean caseSensitive) { - return StringUtil.filterString(getServerName() + getName() + getStatusStr() + getSpace() + getFreeSpace() - + getType() + getDescription(), filterString, caseSensitive); + if (StringUtil.filterString(getServerName() + getName() + getStatusStr() + getSpace() + getFreeSpace() + + getType() + getDescription(), filterString, caseSensitive)) { + return true; + } + + // disk doesn't match. check if any of the partitions of this disk match the filter + for(Partition partition : getPartitions()) { + if(partition.filter(filterString, caseSensitive)) { + return true; + } + } + + return false; } @Override diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Partition.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Partition.java index a06b1e1c..ecf4035b 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Partition.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Partition.java @@ -18,9 +18,18 @@ *******************************************************************************/ package com.gluster.storage.management.core.model; -/** - * - */ +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name="partition") public class Partition extends Device { + public Partition() { + super(); + } + + public Partition(Server server, String name, String mountPoint, Double space, Double spaceInUse, + DEVICE_STATUS status) { + super(server, name, mountPoint, space, spaceInUse, status); + } + } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java index 71e6e802..4ac1db41 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java @@ -23,8 +23,8 @@ import org.eclipse.swt.graphics.Image; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Brick; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Device.DEVICE_STATUS; -import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.utils.GUIHelper; import com.gluster.storage.management.gui.views.pages.BricksPage.BRICK_TABLE_COLUMN_INDICES; @@ -41,10 +41,10 @@ public class BrickTableLabelProvider extends TableLabelProviderAdapter { } Brick brick = (Brick) element; - Disk disk = GlusterDataModelManager.getInstance().getDiskDetails(brick.getDiskName()); + Device device = GlusterDataModelManager.getInstance().getDeviceDetails(brick.getDeviceName()); if (columnIndex == DISK_TABLE_COLUMN_INDICES.STATUS.ordinal()) { - DEVICE_STATUS status = disk.getStatus(); + DEVICE_STATUS status = device.getStatus(); // TODO: Use different images for all four statuses switch (status) { case INITIALIZED: @@ -63,17 +63,17 @@ public class BrickTableLabelProvider extends TableLabelProviderAdapter { return null; } - private String getDiskFreeSpace(Disk disk) { - if (disk != null && disk.isReady() && disk.getFreeSpace() != null) { - return NumberUtil.formatNumber((disk.getFreeSpace() / 1024)); + private String getDeviceFreeSpace(Device device) { + if (device != null && device.isReady() && device.getFreeSpace() != null) { + return NumberUtil.formatNumber((device.getFreeSpace() / 1024)); } else { return "NA"; } } - private String getDiskSpace(Disk disk) { - if (disk.isReady() && disk.getSpace() != null && disk.getSpace() != 0.0) { - return NumberUtil.formatNumber((disk.getSpace() / 1024)); + private String getDeviceCapacity(Device device) { + if (device.isReady() && device.getSpace() != null && device.getSpace() != 0.0) { + return NumberUtil.formatNumber((device.getSpace() / 1024)); } else { return "NA"; } @@ -86,11 +86,11 @@ public class BrickTableLabelProvider extends TableLabelProviderAdapter { } Brick brick = (Brick) element; - Disk disk = GlusterDataModelManager.getInstance().getDiskDetails(brick.getDiskName()); + Device device = GlusterDataModelManager.getInstance().getDeviceDetails(brick.getDeviceName()); return (columnIndex == BRICK_TABLE_COLUMN_INDICES.SERVER.ordinal() ? brick.getServerName() : columnIndex == BRICK_TABLE_COLUMN_INDICES.BRICK.ordinal() ? brick.getBrickDirectory() - : columnIndex == BRICK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal() ? getDiskFreeSpace(disk) - : columnIndex == BRICK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal() ? getDiskSpace(disk) + : columnIndex == BRICK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal() ? getDeviceFreeSpace(device) + : columnIndex == BRICK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal() ? getDeviceCapacity(device) : columnIndex == BRICK_TABLE_COLUMN_INDICES.STATUS.ordinal() ? brick .getStatusStr() : "Invalid"); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DeviceTableLabelProvider.java index 28d7c353..cdc2f9a8 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DeviceTableLabelProvider.java @@ -18,34 +18,53 @@ *******************************************************************************/ package com.gluster.storage.management.gui; +import org.eclipse.jface.resource.FontRegistry; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; -import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Device.DEVICE_STATUS; import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.utils.NumberUtil; +import com.gluster.storage.management.core.model.Partition; import com.gluster.storage.management.gui.utils.GUIHelper; -import com.gluster.storage.management.gui.views.pages.DisksPage.DISK_TABLE_COLUMN_INDICES; -public class DiskTableLabelProvider extends TableLabelProviderAdapter { +public class DeviceTableLabelProvider extends LabelProvider implements ITableLabelProvider { + private GUIHelper guiHelper = GUIHelper.getInstance(); - private GlusterDataModelManager glusterDataModelManager = GlusterDataModelManager.getInstance(); + public enum DEVICE_COLUMN_INDICES { + DISK, PARTITION, FREE_SPACE, SPACE_IN_USE, STATUS + }; + + FontRegistry registry = new FontRegistry(); + + public DeviceTableLabelProvider() { + } @Override public Image getColumnImage(Object element, int columnIndex) { - - if (!(element instanceof Disk)) { + if (!(element instanceof Device)) { return null; } - // Brick brick = (Brick) element; - // Disk disk = GlusterDataModelManager.getInstance().getDisk(brick.getDiskName()); - Disk disk = (Disk) element; + Device device = (Device) element; + if (columnIndex == DEVICE_COLUMN_INDICES.STATUS.ordinal()) { + DEVICE_STATUS status = device.getStatus(); + + if (status == null) { + if (element instanceof Partition) { + if (columnIndex == DEVICE_COLUMN_INDICES.STATUS.ordinal()) { + status = device.getStatus(); + } + } + } - if (columnIndex == DISK_TABLE_COLUMN_INDICES.STATUS.ordinal()) { - DEVICE_STATUS status = disk.getStatus(); - // TODO: Use different images for different statuses + if (status == null) { + return null; + } + + // TODO: Use different images for all four statuses switch (status) { case INITIALIZED: return guiHelper.getImage(IImageKeys.STATUS_ONLINE); @@ -63,33 +82,38 @@ public class DiskTableLabelProvider extends TableLabelProviderAdapter { return null; } - private String getDiskFreeSpace(Disk disk) { - if (disk.hasErrors() || disk.isUninitialized()) { - return "NA"; - } else { - return NumberUtil.formatNumber((disk.getFreeSpace() / 1024)); - } - } - - private String getTotalDiskSpace(Disk disk) { - if (disk.hasErrors() || disk.isUninitialized()) { - return "NA"; - } else { - return NumberUtil.formatNumber((disk.getSpace() / 1024)); - } + @Override + public String getText(Object element) { + return super.getText(element); } - @Override public String getColumnText(Object element, int columnIndex) { - if (!(element instanceof Disk)) { - return null; + + if (element == null) { + return ""; + } + + Device device = (Device) element; + if (columnIndex == DEVICE_COLUMN_INDICES.DISK.ordinal()) { + if (device instanceof Disk) { + return device.getQualifiedName(); + } else { + return ""; + } + } else if (columnIndex == DEVICE_COLUMN_INDICES.FREE_SPACE.ordinal()) { + return "" + device.getFreeSpace(); + } else if (columnIndex == DEVICE_COLUMN_INDICES.SPACE_IN_USE.ordinal()) { + return "" + device.getSpaceInUse(); + } else if (columnIndex == DEVICE_COLUMN_INDICES.PARTITION.ordinal()) { + if (device instanceof Partition) { + return device.getQualifiedName(); + } else { + return ""; + } + } else if (columnIndex == DEVICE_COLUMN_INDICES.STATUS.ordinal()) { + return device.getStatusStr(); + } else { + return ""; } - - Disk disk = (Disk) element; - return (columnIndex == DISK_TABLE_COLUMN_INDICES.SERVER.ordinal() ? disk.getServerName() - : columnIndex == DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getName() - : columnIndex == DISK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal() ? getDiskFreeSpace(disk) - : columnIndex == DISK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal() ? getTotalDiskSpace(disk) - : columnIndex == DISK_TABLE_COLUMN_INDICES.STATUS.ordinal() ? glusterDataModelManager.getDiskStatus(disk) : "Invalid"); } -} +}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java index 210436cb..732787d0 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java @@ -24,9 +24,13 @@ import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Device.DEVICE_STATUS; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.model.Partition; import com.gluster.storage.management.core.utils.NumberUtil; +import com.gluster.storage.management.gui.DeviceTableLabelProvider.DEVICE_COLUMN_INDICES; import com.gluster.storage.management.gui.utils.GUIHelper; +//import com.gluster.storage.management.gui.views.pages.ServerDisksPage.SERVER_DISK_TABLE_COLUMN_INDICES; import com.gluster.storage.management.gui.views.pages.ServerDisksPage.SERVER_DISK_TABLE_COLUMN_INDICES; public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter { @@ -81,19 +85,29 @@ public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter { } } - @Override public String getColumnText(Object element, int columnIndex) { - if (!(element instanceof Disk)) { - return null; + Device device = (Device) element; + if (columnIndex == DEVICE_COLUMN_INDICES.DISK.ordinal()) { + if (device instanceof Disk) { + return device.getName(); + } else { + return ""; + } + } else if (columnIndex == DEVICE_COLUMN_INDICES.FREE_SPACE.ordinal()) { + return "" + device.getFreeSpace(); + } else if (columnIndex == DEVICE_COLUMN_INDICES.SPACE_IN_USE.ordinal()) { + return "" + device.getSpace(); + } else if (columnIndex == DEVICE_COLUMN_INDICES.PARTITION.ordinal()) { + if (device instanceof Partition) { + return device.getName(); + } else { + return ""; + } + } else if (columnIndex == DEVICE_COLUMN_INDICES.STATUS.ordinal()) { + return device.getStatusStr(); + } else { + return ""; } - - Disk disk = (Disk) element; - String columnText = (columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getName() - : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal() ? getDiskFreeSpace(disk) - : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal() ? getTotalDiskSpace(disk) - : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal() ? glusterDataModelManager - .getDiskStatus(disk) // disk.getStatusStr() - : "Invalid"); - return ((columnText == null || columnText.trim().equals("")) ? CoreConstants.NA : columnText); - } + } + } 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 bd36ff7c..2856ea02 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 @@ -31,6 +31,7 @@ import org.eclipse.swt.widgets.Composite; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Brick; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; @@ -42,8 +43,8 @@ import com.richclientgui.toolbox.duallists.IRemovableContentProvider; * */ public class AddBrickPage extends WizardPage { - private List<Disk> availableDisks = new ArrayList<Disk>(); - private List<Disk> selectedDisks = new ArrayList<Disk>(); + private List<Device> availableDevices = new ArrayList<Device>(); + private List<Device> selectedDevices = new ArrayList<Device>(); private Volume volume = null; private BricksSelectionPage page = null; @@ -66,34 +67,34 @@ public class AddBrickPage extends WizardPage { } setDescription(description); - availableDisks = getAvailableDisks(volume); + availableDevices = getAvailableDevices(volume); setPageComplete(false); setErrorMessage("Please select bricks to be added to the volume [" + volume.getName() +"]"); } - private boolean isDiskUsed(Volume volume, Disk disk){ - for (Brick volumeBrick : volume.getBricks()) { // expected form of volumeBrick is "server:/export/diskName/volumeName" - if ( disk.getQualifiedBrickName(volume.getName()).equals(volumeBrick.getQualifiedName())) { + private boolean isDeviceUsed(Volume volume, Device device){ + for (Brick volumeBrick : volume.getBricks()) { + if ( device.getQualifiedBrickName(volume.getName()).equals(volumeBrick.getQualifiedName())) { return true; } } return false; } - protected List<Disk> getAvailableDisks(Volume volume) { - List<Disk> availableDisks = new ArrayList<Disk>(); - for (Disk disk : GlusterDataModelManager.getInstance().getReadyDisksOfAllServers()) { - if ( ! isDiskUsed(volume, disk) ) { - availableDisks.add(disk); + protected List<Device> getAvailableDevices(Volume volume) { + List<Device> availableDevices = new ArrayList<Device>(); + for (Device device : GlusterDataModelManager.getInstance().getReadyDevicesOfAllServers()) { + if ( ! isDeviceUsed(volume, device) ) { + availableDevices.add(device); } } - return availableDisks; + return availableDevices; } - public Set<Disk> getChosenDisks() { - return new HashSet<Disk>(page.getChosenDisks()); + public Set<Device> getChosenDevices() { + return new HashSet<Device>(page.getChosenDevices()); } public Set<Brick> getChosenBricks( String volumeName ) { @@ -122,16 +123,16 @@ public class AddBrickPage extends WizardPage { @Override public void createControl(Composite parent) { getShell().setText("Add Brick"); - List<Disk> chosenDisks = new ArrayList<Disk>(); // or volume.getDisks(); + List<Device> chosenDevices = new ArrayList<Device>(); // or volume.getDisks(); - page = new BricksSelectionPage(parent, SWT.NONE, availableDisks, chosenDisks, volume.getName()); - page.addDiskSelectionListener(new ListContentChangedListener<Disk>() { + page = new BricksSelectionPage(parent, SWT.NONE, availableDevices, chosenDevices, volume.getName()); + page.addDiskSelectionListener(new ListContentChangedListener<Device>() { @Override - public void listContentChanged(IRemovableContentProvider<Disk> contentProvider) { - List<Disk> newChosenDisks = page.getChosenDisks(); + public void listContentChanged(IRemovableContentProvider<Device> contentProvider) { + List<Device> newChosenDevices = page.getChosenDevices(); // validate chosen disks - if(isValidDiskSelection(newChosenDisks.size())) { + if(isValidDiskSelection(newChosenDevices.size())) { clearError(); } else { setError(); 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 db963b18..4ac01d14 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 @@ -39,6 +39,7 @@ import org.eclipse.swt.widgets.Text; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Brick.BRICK_STATUS; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.IImageKeys; @@ -60,27 +61,27 @@ public class BricksSelectionPage extends Composite { "Total Space (GB)" }; private GUIHelper guiHelper = GUIHelper.getInstance(); - private CustomTableDualListComposite<Disk> dualTableViewer; + private CustomTableDualListComposite<Device> dualTableViewer; private Text filterText; // This list keeps track of the order of the disks as user changes the same by clicking on up/down arrow buttons - private List<Disk> chosenDisks = new ArrayList<Disk>(); + private List<Device> chosenDevices = new ArrayList<Device>(); - private IRemovableContentProvider<Disk> chosenBricksContentProvider; + private IRemovableContentProvider<Device> chosenBricksContentProvider; private Button btnUp; private Button btnDown; - public BricksSelectionPage(final Composite parent, int style, List<Disk> allDisks, List<Disk> selectedDisks, + public BricksSelectionPage(final Composite parent, int style, List<Device> allDevices, List<Device> selectedDevices, String volumeName) { super(parent, style); - createPage(allDisks, selectedDisks, volumeName); + createPage(allDevices, selectedDevices, volumeName); parent.layout(); } - public void addDiskSelectionListener(ListContentChangedListener<Disk> listener) { + public void addDiskSelectionListener(ListContentChangedListener<Device> listener) { dualTableViewer.addChosenListChangedSelectionListener(listener); } @@ -114,13 +115,13 @@ public class BricksSelectionPage extends Composite { return -1; } - private void createPage(List<Disk> allDisks, List<Disk> selectedDisks, String volumeName) { + private void createPage(List<Device> allDevice, List<Device> selectedDevice, String volumeName) { setupPageLayout(); filterText = guiHelper.createFilterText(this); new Label(this, SWT.NONE); - createDualTableViewer(allDisks, selectedDisks, volumeName); + createDualTableViewer(allDevice, selectedDevice, volumeName); createFilter(filterText, false); // attach filter text to the dual table viewer for auto-filtering Composite buttonContainer = new Composite(this, SWT.NONE); @@ -138,17 +139,17 @@ public class BricksSelectionPage extends Composite { @Override public void widgetSelected(SelectionEvent e) { - chosenDisks = getChosenDisks(); - List<Disk> selectedDisks = getSelectedChosenDisks(); - - chosenBricksContentProvider.removeElements(chosenDisks); - for (Disk disk : selectedDisks) { - int index = chosenDisks.indexOf(disk); - Disk diskAbove = chosenDisks.get(index - 1); - chosenDisks.set(index - 1, disk); - chosenDisks.set(index, diskAbove); + chosenDevices = getChosenDevices(); + List<Device> selectedDevices = getSelectedChosenDevices(); + + chosenBricksContentProvider.removeElements(chosenDevices); + for (Device device : selectedDevices) { + int index = chosenDevices.indexOf(device); + Device deviceAbove = chosenDevices.get(index - 1); + chosenDevices.set(index - 1, device); + chosenDevices.set(index, deviceAbove); } - chosenBricksContentProvider.addElements(chosenDisks); + chosenBricksContentProvider.addElements(chosenDevices); dualTableViewer.refreshChosenViewer(); updateButtons(); } @@ -162,17 +163,17 @@ public class BricksSelectionPage extends Composite { @Override public void widgetSelected(SelectionEvent e) { - chosenDisks = getChosenDisks(); - List<Disk> selectedDisks = getSelectedChosenDisks(); + chosenDevices = getChosenDevices(); + List<Device> selectedDevices = getSelectedChosenDevices(); - chosenBricksContentProvider.removeElements(chosenDisks); - for (Disk disk : selectedDisks) { - int index = chosenDisks.indexOf(disk); - Disk diskBelow = chosenDisks.get(index + 1); - chosenDisks.set(index + 1, disk); - chosenDisks.set(index, diskBelow); + chosenBricksContentProvider.removeElements(chosenDevices); + for (Device disk : selectedDevices) { + int index = chosenDevices.indexOf(disk); + Device deviceBelow = chosenDevices.get(index + 1); + chosenDevices.set(index + 1, disk); + chosenDevices.set(index, deviceBelow); } - chosenBricksContentProvider.addElements(chosenDisks); + chosenBricksContentProvider.addElements(chosenDevices); dualTableViewer.refreshChosenViewer(); updateButtons(); @@ -180,13 +181,13 @@ public class BricksSelectionPage extends Composite { }); } - private List<Disk> getSelectedChosenDisks() { + private List<Device> getSelectedChosenDevices() { TableItem[] selectedItems = dualTableViewer.getChosenTable().getSelection(); - List<Disk> selectedDisks = new ArrayList<Disk>(); + List<Device> selectedDevices = new ArrayList<Device>(); for (TableItem item : selectedItems) { - selectedDisks.add((Disk) item.getData()); + selectedDevices.add((Device) item.getData()); } - return selectedDisks; + return selectedDevices; } private void createFilter(final Text filterText, boolean caseSensitive) { @@ -219,24 +220,24 @@ public class BricksSelectionPage extends Composite { dualTableViewer.setChosenViewerFilter(filter); } - private void createDualTableViewer(List<Disk> allDisks, List<Disk> selectedDisks, String volumeName) { + private void createDualTableViewer(List<Device> allDevices, List<Device> selectedDevices, String volumeName) { TableColumnData[] columnData = createColumnData(); ITableLabelProvider diskLabelProvider = getDiskLabelProvider(volumeName); - dualTableViewer = new CustomTableDualListComposite<Disk>(this, SWT.NONE, columnData, columnData); + dualTableViewer = new CustomTableDualListComposite<Device>(this, SWT.NONE, columnData, columnData); dualTableViewer.setViewerLabels("Available:", "Selected:"); dualTableViewer.setAvailableTableLinesVisible(false); dualTableViewer.setAvailableTableHeaderVisible(true); - dualTableViewer.setAvailableContentProvider(new RemovableContentProvider<Disk>(getAvailableDisks(allDisks, - selectedDisks))); + dualTableViewer.setAvailableContentProvider(new RemovableContentProvider<Device>(getAvailableDevice(allDevices, + selectedDevices))); dualTableViewer.setAvailableLabelProvider(diskLabelProvider); dualTableViewer.setChosenTableLinesVisible(true); dualTableViewer.setChosenTableHeaderVisible(true); - chosenBricksContentProvider = new RemovableContentProvider<Disk>(selectedDisks); + chosenBricksContentProvider = new RemovableContentProvider<Device>(selectedDevices); dualTableViewer.setChosenContentProvider(chosenBricksContentProvider); dualTableViewer.setChosenLabelProvider(diskLabelProvider); @@ -256,32 +257,32 @@ public class BricksSelectionPage extends Composite { private void updateButtons() { btnUp.setEnabled(true); btnDown.setEnabled(true); - List<Disk> selectedChosenDisks = getSelectedChosenDisks(); - List<Disk> chosenDisks = getChosenDisks(); - for (Disk disk : selectedChosenDisks) { - int index = chosenDisks.indexOf(disk); + List<Device> selectedChosenDevices = getSelectedChosenDevices(); + List<Device> chosenDevices = getChosenDevices(); + for (Device device : selectedChosenDevices) { + int index = chosenDevices.indexOf(device); if (index == 0) { btnUp.setEnabled(false); } - if (index == chosenDisks.size() - 1) { + if (index == chosenDevices.size() - 1) { btnDown.setEnabled(false); } } } /** - * @param allDisks - * @param selectedDisks + * @param allDevices + * @param selectedDevices * @return */ - private List<Disk> getAvailableDisks(List<Disk> allDisks, List<Disk> selectedDisks) { - List<Disk> availableDisks = new ArrayList<Disk>(); - for (Disk disk : allDisks) { - if (!selectedDisks.contains(disk)) { - availableDisks.add(disk); + private List<Device> getAvailableDevice(List<Device> allDevices, List<Device> selectedDevices) { + List<Device> availableDevices = new ArrayList<Device>(); + for (Device device : allDevices) { + if (!selectedDevices.contains(device)) { + availableDevices.add(device); } } - return availableDisks; + return availableDevices; } private TableColumnData[] createColumnData() { @@ -304,14 +305,14 @@ public class BricksSelectionPage extends Composite { setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); } - public List<Disk> getChosenDisks() { - Object[] disksArr = (Object[]) chosenBricksContentProvider.getElements(dualTableViewer); - if (disksArr != null) { - List<Disk> disks = new ArrayList<Disk>(); - for (Object disk : disksArr) { - disks.add((Disk) disk); + public List<Device> getChosenDevices() { + Object[] devicesArr = (Object[]) chosenBricksContentProvider.getElements(dualTableViewer); + if (devicesArr != null) { + List<Device> devices = new ArrayList<Device>(); + for (Object device : devicesArr) { + devices.add((Device) device); } - return disks; + return devices; } return null; } @@ -321,9 +322,9 @@ public class BricksSelectionPage extends Composite { if (bricksArr != null) { 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 + for (Object device : bricksArr) { + bricks.add(new Brick(((Device) device).getServerName(), BRICK_STATUS.ONLINE, ((Device) device).getName(), + ((Device) device).getMountPoint() + "/" + volumeName)); // Assumption mount point is not having // trailing "/" } return bricks; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java index e7f46a66..cd2de837 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java @@ -49,6 +49,7 @@ import org.eclipse.swt.widgets.Text; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Brick; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Brick.BRICK_STATUS; @@ -63,11 +64,11 @@ public class CreateVolumePage1 extends WizardPage { private ComboViewer typeComboViewer; private Text txtAccessControl; private Volume volume = new Volume(); - private List<Disk> allDisks; private Button btnNfs; private Button btnStartVolume; private Link linkCustomize; - private List<Disk> selectedDisks; + private List<Device> allDevices; + private List<Device> selectedDevices; /** * Create the wizard. @@ -78,8 +79,8 @@ public class CreateVolumePage1 extends WizardPage { setDescription("Create a new Volume by choosing bricks from the cluster servers and configuring the volume properties."); // by default, we create volume with all available disks - allDisks = GlusterDataModelManager.getInstance().getReadyDisksOfAllServers(); - selectedDisks = allDisks; // volume.setDisks(allDisks); + allDevices = GlusterDataModelManager.getInstance().getReadyDevicesOfAllServers(); + selectedDevices = allDevices; // volume.setDisks(allDisks); } private List<String> getBricks(List<Disk> allDisks) { @@ -195,13 +196,13 @@ public class CreateVolumePage1 extends WizardPage { @Override public void run() { - SelectDisksDialog dialog = new SelectDisksDialog(getShell(), allDisks, selectedDisks, txtName.getText().trim()); + SelectDisksDialog dialog = new SelectDisksDialog(getShell(), allDevices, selectedDevices, txtName.getText().trim()); dialog.create(); if(dialog.open() == Window.OK) { // user has customized disks. get them from the dialog box. - selectedDisks = dialog.getSelectedDisks(); - linkCustomize.setText("" + selectedDisks.size() + " Brick(s) (<a>customize</a>)"); + selectedDevices = dialog.getSelectedDevices(); + linkCustomize.setText("" + selectedDevices.size() + " Brick(s) (<a>customize</a>)"); validateForm(); } } @@ -306,8 +307,8 @@ public class CreateVolumePage1 extends WizardPage { volume.setAccessControlList(txtAccessControl.getText()); - for(Disk disk : selectedDisks) { - Brick brick = new Brick(disk.getServerName(), BRICK_STATUS.ONLINE, disk.getName(), disk.getMountPoint() + File.separator + volume.getName()); + for(Device device : selectedDevices) { + Brick brick = new Brick(device.getServerName(), BRICK_STATUS.ONLINE, device.getName(), device.getMountPoint() + File.separator + volume.getName()); volume.addBrick(brick); } @@ -337,7 +338,7 @@ public class CreateVolumePage1 extends WizardPage { } private void validateDisks() { - int diskCount = selectedDisks.size(); + int diskCount = selectedDevices.size(); if(diskCount < 1) { setError("At least one brick must be selected!"); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java index f7ce744f..f8fce5e4 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java @@ -45,6 +45,7 @@ import org.eclipse.swt.widgets.Text; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Brick; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.utils.NumberUtil; @@ -209,15 +210,15 @@ public class MigrateBrickPage1 extends WizardPage { ITableLabelProvider diskLabelProvider = getDiskLabelProvider(volume.getName()); GlusterDataModelManager glusterDataModelManager = GlusterDataModelManager.getInstance(); - List<Disk> fromBricks = glusterDataModelManager.getReadyDisksOfVolume(volume); - List<Disk> toDisks = glusterDataModelManager.getReadyDisksOfAllServersExcluding( fromBricks ); + List<Device> fromBricks = glusterDataModelManager.getReadyDevicesOfVolume(volume); + List<Device> toDevices = glusterDataModelManager.getReadyDevicesOfAllServersExcluding( fromBricks ); tableViewerFrom = createTableViewer(container, diskLabelProvider, fromBricks, txtFilterFrom); if(fromBrick != null) { setFromDisk(tableViewerFrom, fromBrick); } - tableViewerTo = createTableViewer(container, diskLabelProvider, toDisks, txtFilterTo); + tableViewerTo = createTableViewer(container, diskLabelProvider, toDevices, txtFilterTo); // Auto commit selection field Composite autoCommitContainer = new Composite(container, SWT.NONE); @@ -251,7 +252,7 @@ public class MigrateBrickPage1 extends WizardPage { } private TableViewer createTableViewer(Composite container, ITableLabelProvider diskLabelProvider, - List<Disk> bricks, Text txtFilterText) { + List<Device> bricks, Text txtFilterText) { Composite tableViewerComposite = createTableViewerComposite(container); TableViewer tableViewer = new TableViewer(tableViewerComposite, SWT.SINGLE); 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 e010ed5c..f939e12d 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 @@ -33,13 +33,13 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import com.gluster.storage.management.core.model.Brick; -import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.model.Device; public class SelectDisksDialog extends Dialog { private BricksSelectionPage disksPage; - private List<Disk> allDisks; - private List<Disk> selectedDisks; + private List<Device> allDevices; + private List<Device> selectedDevices; private String volumeName; /** @@ -47,11 +47,11 @@ public class SelectDisksDialog extends Dialog { * * @param parentShell */ - public SelectDisksDialog(Shell parentShell, List<Disk> allDisks, List<Disk> selectedDisks, String volumeName) { + public SelectDisksDialog(Shell parentShell, List<Device> allDevices, List<Device> selectedDevices, String volumeName) { super(parentShell); setShellStyle(getShellStyle() | SWT.RESIZE); - this.allDisks = allDisks; - this.selectedDisks = selectedDisks; + this.allDevices = allDevices; + this.selectedDevices = selectedDevices; this.volumeName = volumeName; } @@ -70,7 +70,7 @@ public class SelectDisksDialog extends Dialog { getShell().setText("Create Volume - Select Bricks"); - disksPage = new BricksSelectionPage(container, SWT.NONE, allDisks, selectedDisks, volumeName); + disksPage = new BricksSelectionPage(container, SWT.NONE, allDevices, selectedDevices, volumeName); return container; } @@ -101,15 +101,15 @@ public class SelectDisksDialog extends Dialog { @Override protected void okPressed() { - if (this.getSelectedDisks().size() == 0) { + if (this.getSelectedDevices().size() == 0) { MessageDialog.openError(getShell(), "Select Brick(s)", "Please select atlease one brick"); } else { super.okPressed(); } } - public List<Disk> getSelectedDisks() { - return disksPage.getChosenDisks(); + public List<Device> getSelectedDevices() { + return disksPage.getChosenDevices(); } public Set<Brick> getSelectedBricks(String volumeName) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java index d6fd5d03..c4ddc31b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java @@ -46,6 +46,7 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; @@ -249,6 +250,9 @@ public class GUIHelper { // Refresh viewer with newly filtered content viewer.refresh(true); + if(viewer instanceof TreeViewer) { + ((TreeViewer)viewer).expandAll(); + } } }); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java index 0910c080..2d4a3036 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java @@ -19,6 +19,7 @@ public class DisksView extends ViewPart { private EntityGroup<GlusterServer> servers; private DisksPage page; + @SuppressWarnings("unchecked") @Override public void createPartControl(Composite parent) { if (servers == null) { 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 d3eb7f6c..8c4d2572 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 @@ -419,7 +419,7 @@ public class VolumeSummaryView extends ViewPart { private double getTotalDiskSpace() { double diskSize = 0; for (Brick brick : volume.getBricks()) { - diskSize += getDiskSize(brick.getServerName(), brick.getDiskName()); + diskSize += getDiskSize(brick.getServerName(), brick.getDeviceName()); } return diskSize; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java index d58394e2..966f8921 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java @@ -22,20 +22,18 @@ import java.net.URI; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.TableEditor; +import org.eclipse.swt.custom.TreeEditor; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; @@ -44,8 +42,7 @@ import org.eclipse.ui.forms.widgets.ImageHyperlink; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.client.TasksClient; -import com.gluster.storage.management.core.model.ClusterListener; -import com.gluster.storage.management.core.model.DefaultClusterListener; +import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Device.DEVICE_STATUS; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Entity; @@ -54,8 +51,8 @@ import com.gluster.storage.management.gui.Application; import com.gluster.storage.management.gui.IEntityListener; import com.gluster.storage.management.gui.dialogs.InitializeDiskTypeSelection; -public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> implements IEntityListener { - private List<Disk> disks; +public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk> implements IEntityListener { + protected List<Disk> disks; /** * @return Index of the "status" column in the table. Return -1 if status column is not displayed @@ -63,7 +60,7 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im protected abstract int getStatusColumnIndex(); public AbstractDisksPage(final Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { - super(site, parent, style, true, true, disks); + super(site, parent, style, false, true, disks); this.disks = disks; // creates hyperlinks for "unitialized" disks @@ -72,45 +69,30 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im Application.getApplication().addEntityListener(this); } - @Override - protected IContentProvider getContentProvider() { - return new ArrayContentProvider(); - } - - @Override - protected List<Disk> getAllEntities() { - return disks; - } - - @Override - protected ClusterListener createClusterListener() { - return new DefaultClusterListener(); - } - - private void createInitializeLink(final TableItem item, final int rowNum, final Disk disk) { - final Table table = tableViewer.getTable(); - final TableEditor editor = new TableEditor(table); + private void createInitializeLink(final TreeItem item, final int rowNum, final Device device) { + final Tree tree = treeViewer.getTree(); // .getTableTree(); + final TreeEditor editor = new TreeEditor(tree); editor.grabHorizontal = true; editor.horizontalAlignment = SWT.RIGHT; - table.addPaintListener(new PaintListener() { - private TableItem myItem = item; + tree.addPaintListener(new PaintListener() { + private TreeItem myItem = item; private int myRowNum = rowNum; private ImageHyperlink myLink = null; - private TableEditor myEditor = null; + private TreeEditor myEditor = null; - private void createLinkFor(Disk disk1, TableItem item1, int rowNum1) { + private void createLinkFor(Device device, TreeItem item1, int rowNum1) { myItem = item1; myRowNum = rowNum1; - myEditor = new TableEditor(table); + myEditor = new TreeEditor(tree); myEditor.grabHorizontal = true; myEditor.horizontalAlignment = SWT.RIGHT; - myLink = toolkit.createImageHyperlink(table, SWT.NONE); + myLink = toolkit.createImageHyperlink(tree, SWT.NONE); // link.setImage(guiHelper.getImage(IImageKeys.DISK_UNINITIALIZED)); myLink.setText("Initialize"); - myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, myItem, tableViewer, disk1)); + myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, treeViewer, device)); myEditor.setEditor(myLink, item1, getStatusColumnIndex()); @@ -125,16 +107,16 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im @Override public void paintControl(PaintEvent e) { - int itemCount = table.getItemCount(); + int itemCount = tree.getItemCount(); // Find the table item corresponding to our disk - Disk disk1 = null; + Device device1 = null; int rowNum1 = -1; - TableItem item1 = null; + TreeItem item1 = null; for (int i = 0; i < itemCount; i++) { - item1 = table.getItem(i); - disk1 = (Disk) item1.getData(); - if (disk1 != null && disk1 == disk) { + item1 = tree.getItem(i); + device1 = (Device) item1.getData(); + if (device1 != null && device1 == device) { rowNum1 = i; break; } @@ -149,14 +131,14 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im // item visible, and // either editor never created, OR // old item disposed. create the link for it - createLinkFor(disk1, item1, rowNum1); + createLinkFor(device1, item1, rowNum1); } if (rowNum1 != myRowNum) { // disk visible, but at a different row num. re-create the link myLink.dispose(); myEditor.dispose(); - createLinkFor(disk1, item1, rowNum1); + createLinkFor(device1, item1, rowNum1); } myEditor.layout(); // IMPORTANT. Without this, the link location goes for a toss on maximize + restore @@ -165,29 +147,28 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im } private void setupStatusCellEditor() { - final TableViewer viewer = tableViewer; - final Table table = viewer.getTable(); - for (int i = 0; i < table.getItemCount(); i++) { - final TableItem item = table.getItem(i); + final TreeViewer viewer = treeViewer; + final Tree tree = viewer.getTree(); + for (int i = 0; i < tree.getItemCount(); i++) { + final TreeItem item = tree.getItem(i); if (item.isDisposed() || item.getData() == null) { continue; } - final Disk disk = (Disk) item.getData(); - if (disk.isUninitialized()) { - createInitializeLink(item, i, disk); + final Device device = (Device) item.getData(); + if (device.isUninitialized()) { + createInitializeLink(item, i, device); } } } private final class StatusLinkListener extends HyperlinkAdapter { - private final Disk disk; - private final TableEditor myEditor; + private final Device device; + private final TreeEditor myEditor; private final ImageHyperlink myLink; - private final TableViewer viewer; + private final TreeViewer viewer; - private StatusLinkListener(ImageHyperlink link, TableEditor editor, TableItem item, TableViewer viewer, - Disk disk) { - this.disk = disk; + private StatusLinkListener(ImageHyperlink link, TreeEditor editor, TreeViewer viewer, Device device) { + this.device = device; this.viewer = viewer; this.myEditor = editor; this.myLink = link; @@ -198,9 +179,9 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im myLink.dispose(); myEditor.dispose(); } - disk.setStatus(status); - viewer.update(disk, new String[] { "status" }); - Application.getApplication().entityChanged(disk, new String[] { "status" }); + device.setStatus(status); + viewer.update(device, new String[] { "status" }); + Application.getApplication().entityChanged(device, new String[] { "status" }); } @Override @@ -214,7 +195,7 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im GlusterServersClient serversClient = new GlusterServersClient(); try { - URI uri = serversClient.initializeDisk(disk.getServerName(), disk.getName(), formatDialog.getFSType()); + URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType()); TasksClient taskClient = new TasksClient(); TaskInfo taskInfo = taskClient.getTaskInfo(uri); @@ -230,22 +211,22 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im @Override public void entityChanged(final Entity entity, final String[] paremeters) { - if (!(entity instanceof Disk)) { + if (!(entity instanceof Device)) { return; } - final Disk disk = (Disk) entity; + final Device device = (Device) entity; Display.getDefault().syncExec(new Runnable() { public void run() { - tableViewer.update(disk, paremeters); - - if (disk.isUninitialized()) { - Table table = tableViewer.getTable(); - - for (int rowNum = 0; rowNum < table.getItemCount(); rowNum++) { - TableItem item = table.getItem(rowNum); - if (item.getData() == disk) { - createInitializeLink(item, rowNum, disk); + treeViewer.update(device, paremeters); + + if (device.isUninitialized()) { + Tree tree = treeViewer.getTree(); + + for (int rowNum = 0; rowNum < tree.getItemCount(); rowNum++) { + TreeItem item = tree.getItem(rowNum); + if (item.getData() == device) { + createInitializeLink(item, rowNum, device); } } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableTreeViewerPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableTreeViewerPage.java new file mode 100644 index 00000000..05a74b03 --- /dev/null +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableTreeViewerPage.java @@ -0,0 +1,163 @@ +/******************************************************************************* + * 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.gui.views.pages; + +import java.util.List; + +import org.eclipse.jface.layout.TreeColumnLayout; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.IBaseLabelProvider; +import org.eclipse.jface.viewers.IContentProvider; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.TreeColumn; +import org.eclipse.ui.ISelectionListener; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchSite; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Hyperlink; + +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.gui.utils.GUIHelper; + +public abstract class AbstractTableTreeViewerPage<T> extends Composite implements ISelectionListener { + + + protected final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); + protected TreeViewer treeViewer; + protected GUIHelper guiHelper = GUIHelper.getInstance(); + protected Composite parent; + protected IWorkbenchSite site; + + private Text filterText; + + private void setupPageLayout() { + final GridLayout layout = new GridLayout(1, false); + layout.verticalSpacing = 10; + layout.marginTop = 10; + setLayout(layout); + } + + private Composite createTreeViewerComposite() { + Composite tableViewerComposite = new Composite(this, SWT.NO); + tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); + tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + GridData layoutData = new GridData(); + layoutData.horizontalSpan=5; + layoutData.grabExcessHorizontalSpace = true; + layoutData.horizontalAlignment = SWT.FILL; + layoutData.verticalAlignment = SWT.FILL; + layoutData.grabExcessVerticalSpace = true; + tableViewerComposite.setLayoutData(layoutData); + + return tableViewerComposite; + } + + + public AbstractTableTreeViewerPage(IWorkbenchSite site, final Composite parent, int style, boolean useChechboxes, + boolean multiSelection, List<Disk> allDisks) { + super(parent, style); + + setupPageLayout(); + //new FormToolkit(Display.getCurrent()).createButton(this, "test1", SWT.PUSH); + + this.parent = parent; + this.site = site; + + toolkit.adapt(this); + toolkit.paintBordersFor(this); + + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + parent.setLayoutData(data); + + filterText = guiHelper.createFilterText(toolkit, this); + + Composite tableViewerComposite = createTreeViewerComposite(); + createTreeViewer(allDisks, tableViewerComposite); + parent.layout(); + } + + protected abstract IBaseLabelProvider getLabelProvider(); + protected abstract IContentProvider getContentProvider(); + + private void createTreeViewer(List<Disk> allDisks, Composite tableViewerComposite) { + treeViewer = new TreeViewer(tableViewerComposite); + treeViewer.getTree().setHeaderVisible(true); + treeViewer.getTree().setLinesVisible(true); + + TreeColumnLayout ad = new TreeColumnLayout(); + tableViewerComposite.setLayout(ad); + + TreeColumn column = new TreeColumn(treeViewer.getTree(),SWT.NONE); + column.setWidth(100); + column.setText("Disk"); + ad.setColumnData(column, new ColumnWeightData(50, 100)); + + column = new TreeColumn(treeViewer.getTree(),SWT.NONE); + column.setWidth(100); + column.setText("Partition"); + ad.setColumnData(column,new ColumnWeightData(50, 100)); + + column = new TreeColumn(treeViewer.getTree(),SWT.NONE); + column.setWidth(100); + column.setText("Free Space (GB)"); + ad.setColumnData(column, new ColumnWeightData(50, 100)); + + column = new TreeColumn(treeViewer.getTree(),SWT.NONE); + column.setWidth(100); + column.setText("Total Space (GB)"); + ad.setColumnData(column,new ColumnWeightData(50, 100)); + + column = new TreeColumn(treeViewer.getTree(),SWT.NONE); + column.setWidth(100); + column.setText("Status"); + ad.setColumnData(column,new ColumnWeightData(50, 100)); + + treeViewer.setLabelProvider(getLabelProvider()); + treeViewer.setContentProvider(getContentProvider()); + treeViewer.setInput(allDisks); + + // Create a case insensitive filter for the table viewer using the filter text field + guiHelper.createFilter(treeViewer, filterText, false); + + treeViewer.expandAll(); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) + */ + @Override + public void selectionChanged(IWorkbenchPart part, ISelection selection) { + } + + protected ClusterListener createClusterListener() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DiskTreeContentProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DiskTreeContentProvider.java new file mode 100644 index 00000000..c5158087 --- /dev/null +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DiskTreeContentProvider.java @@ -0,0 +1,123 @@ +/******************************************************************************* + * 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.gui.views.pages; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.Viewer; + +import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.model.Partition; + +public class DiskTreeContentProvider implements ITreeContentProvider { + + private List<Disk> disks = new ArrayList<Disk>(); + + public DiskTreeContentProvider(List<Disk> disks) { + this.disks = disks; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return ((List<Disk>) inputElement).toArray(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, + * java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) + */ + public Object[] getChildren(Object parentElement) { + if(parentElement instanceof Disk) { + return ((Disk)parentElement).getPartitions().toArray(); + } else { + return null; + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) + */ + public Object getParent(Object element) { + if (element == null) { + return null; + } + + if(element instanceof Partition) { + // find the disk of this partition and return + return getDiskForPartition((Partition)element); + } else { + return null; + } + } + + private Disk getDiskForPartition(Partition partition) { + for(Disk disk : disks) { + for(Partition diskPartition : disk.getPartitions()) { + if(partition.getName().equals(diskPartition.getName())) { + return disk; + } + } + } + return null; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) + */ + public boolean hasChildren(Object element) { + if(element instanceof Disk && ((Disk)element).getPartitions().size() > 0) { + return true; + } else { + return false; + } + } + + + +} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java index bd14607e..c8cf8028 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java @@ -20,49 +20,51 @@ package com.gluster.storage.management.gui.views.pages; import java.util.List; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.swt.SWT; +import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; import org.eclipse.ui.IWorkbenchSite; import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.gui.DiskTableLabelProvider; +import com.gluster.storage.management.core.model.Entity; +import com.gluster.storage.management.gui.DeviceTableLabelProvider; public class DisksPage extends AbstractDisksPage { public enum DISK_TABLE_COLUMN_INDICES { - SERVER, DISK, FREE_SPACE, TOTAL_SPACE, STATUS + DISK, PARTITION, FREE_SPACE, TOTAL_SPACE, STATUS }; - private static final String[] DISK_TABLE_COLUMN_NAMES = new String[] { "Server", "Disk", "Free Space (GB)", + private static final String[] DISK_TABLE_COLUMN_NAMES = new String[] { "Disk", "Partition", "Free Space (GB)", "Total Space (GB)", "Status" }; public DisksPage(final Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { super(parent, style, site, disks); } - @Override - protected String[] getColumnNames() { - return DISK_TABLE_COLUMN_NAMES; + private String getDiskTableColumnDesc(DISK_TABLE_COLUMN_INDICES idx) { + return DISK_TABLE_COLUMN_NAMES[idx.ordinal()]; } - + @Override - protected void setColumnProperties(Table table) { - guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.SERVER.ordinal(), SWT.CENTER, 100); - guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.DISK.ordinal(), SWT.CENTER, 100); - guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal(), SWT.CENTER, 90); - guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal(), SWT.CENTER, 90); - // guiHelper.setColumnProperties(table, DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal(), SWT.CENTER, 90); + protected DeviceTableLabelProvider getLabelProvider() { + return new DeviceTableLabelProvider(); } + @Override - protected IBaseLabelProvider getLabelProvider() { - return new DiskTableLabelProvider(); + protected IContentProvider getContentProvider() { + return new DiskTreeContentProvider(disks); } @Override protected int getStatusColumnIndex() { return DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(); } + + @Override + public void entityChanged(Entity entity, String[] paremeters) { + // TODO Auto-generated method stub + + } + }
\ No newline at end of file diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java index b993f73e..2428a1a0 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java @@ -20,47 +20,47 @@ package com.gluster.storage.management.gui.views.pages; import java.util.List; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.swt.SWT; +import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; import org.eclipse.ui.IWorkbenchSite; import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.gui.ServerDiskTableLabelProvider; -public class ServerDisksPage extends AbstractDisksPage { +public class ServerDisksPage extends AbstractDisksPage { + public ServerDisksPage(Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { super(parent, style, site, disks); } public enum SERVER_DISK_TABLE_COLUMN_INDICES { - DISK, FREE_SPACE, TOTAL_SPACE, STATUS + DISK, PARTITION, FREE_SPACE, TOTAL_SPACE, STATUS }; - private static final String[] SERVER_DISK_TABLE_COLUMN_NAMES = new String[] { "Disk", "Free Space (GB)", + private static final String[] SERVER_DISK_TABLE_COLUMN_NAMES = new String[] { "Disk", "Partition", "Free Space (GB)", "Total Space (GB)", "Status" }; @Override - protected String[] getColumnNames() { - return SERVER_DISK_TABLE_COLUMN_NAMES; + protected int getStatusColumnIndex() { + return SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(); } - + @Override - protected void setColumnProperties(Table table) { - guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.DISK.ordinal(), SWT.CENTER, 100); - guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal(), SWT.CENTER, 90); - guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal(), SWT.CENTER, 90); - guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(), SWT.LEFT, 90); + protected ServerDiskTableLabelProvider getLabelProvider() { + // return new DeviceTableLabelProvider(); + return new ServerDiskTableLabelProvider(); } + @Override - protected int getStatusColumnIndex() { - return SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(); + protected IContentProvider getContentProvider() { + return new DiskTreeContentProvider(disks); } @Override - protected IBaseLabelProvider getLabelProvider() { - return new ServerDiskTableLabelProvider(); + public void entityChanged(Entity entity, String[] paremeters) { + // TODO Auto-generated method stub + } } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java index 43708239..a5f366a2 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java @@ -152,12 +152,10 @@ public class GlusterServersResource extends AbstractServersResource { String errMsg = ""; for (GlusterServer server : glusterServers) { - if (server.getStatus() == SERVER_STATUS.ONLINE && !server.getName().equals(onlineServer.getName())) { - try { - fetchServerDetails(server); - } catch (Exception e) { - errMsg += CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]"; - } + try { + fetchServerDetails(server); + } catch (Exception e) { + errMsg += CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]"; } } return errMsg; |
