diff options
| author | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-11-25 05:56:36 -0800 |
|---|---|---|
| committer | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-11-25 05:56:36 -0800 |
| commit | 92c52d8edf285945d31e446503fc742fde9dcc49 (patch) | |
| tree | 5789d783a07bfaf883d7e589f42c27987dc0432f /src/com.gluster.storage.management.console | |
| parent | 45e68b0cae66c4e67098bfab5877c172ed8c584e (diff) | |
| parent | 229ef07aa2235d92e41c3880099b1257ce0f30fd (diff) | |
Merge pull request #7 from Selvasundaram/master
Disk Initialization enhanced with user selectable file system and mount point
Diffstat (limited to 'src/com.gluster.storage.management.console')
| -rw-r--r-- | src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitDiskDialog.java (renamed from src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java) | 98 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java | 32 |
2 files changed, 104 insertions, 26 deletions
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitDiskDialog.java index 4b64ea96..870de286 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitDiskDialog.java @@ -21,35 +21,48 @@ *******************************************************************************/ package com.gluster.storage.management.console.dialogs; -import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.TraverseEvent; import org.eclipse.swt.events.TraverseListener; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.events.HyperlinkEvent; +import org.eclipse.ui.forms.widgets.Hyperlink; import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.constants.GlusterConstants; -public class InitializeDiskTypeSelection extends Dialog { +public class InitDiskDialog extends Dialog { private Combo formatTypeCombo = null; private final GUIHelper guiHelper = GUIHelper.getInstance(); private Composite initializeDiskTypeComposite; private Composite composite; private String fsType; + private String mountPoint; + private Text mountPointText; + private String deviceName; + private List<String> fsTypes; + private static final String DEFAULT_MOUNT_POINT = "/export/"; - public InitializeDiskTypeSelection(Shell parentShell) { + public InitDiskDialog(Shell parentShell, String deviceName, List<String> fsTypes) { super(parentShell); - // TODO Auto-generated constructor stub + this.fsTypes = fsTypes; + this.deviceName = deviceName; } @Override @@ -98,32 +111,68 @@ public class InitializeDiskTypeSelection extends Dialog { GridLayout layout = new GridLayout(3, false); initializeDiskTypeComposite.setLayout(layout); - createLabel(initializeDiskTypeComposite, "Format disk using "); + createLabel(initializeDiskTypeComposite, "File system "); createFormatTypeCombo(initializeDiskTypeComposite); - createLabel(initializeDiskTypeComposite, " file system"); + createLabel(initializeDiskTypeComposite, "Mount point "); + createMountPointText(initializeDiskTypeComposite); + createChangeLink(initializeDiskTypeComposite); } private void createLabel(Composite composite, String labelText) { Label formatTypeLabel = new Label(composite, SWT.NONE); formatTypeLabel.setText(labelText); - formatTypeLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); + formatTypeLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false)); } private void createFormatTypeCombo(Composite composite) { - List<String> fsType = new ArrayList<String>(); - fsType.add(GlusterConstants.FSTYPE_DEFAULT); - fsType.add(GlusterConstants.FSTYPE_EXT_3); - fsType.add(GlusterConstants.FSTYPE_EXT_4); - fsType.add(GlusterConstants.FSTYPE_XFS); formatTypeCombo = new Combo(composite, SWT.READ_ONLY); - formatTypeCombo.setItems(fsType.toArray(new String[0])); + formatTypeCombo.setItems(fsTypes.toArray(new String[0])); formatTypeCombo.select(0); + new Label(composite, SWT.NONE); } + private void createMountPointText(Composite container) { + mountPointText = new Text(container, SWT.BORDER); + GridData txtNameData = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1); + txtNameData.widthHint = 400; + mountPointText.setTextLimit(100); + mountPointText.setLayoutData(txtNameData); + mountPointText.setText(DEFAULT_MOUNT_POINT + deviceName); + mountPointText.setEnabled(false); + mountPointText.addModifyListener(new ModifyListener() { + @Override + public void modifyText(ModifyEvent e) { + validateMountPoint(); + } + }); + } + + private void createChangeLink(Composite container) { + final Hyperlink changeLink = new Hyperlink(container, SWT.UNDERLINE_SINGLE); + changeLink.setText("change"); + changeLink.setUnderlined(true); + changeLink.setForeground(new Color(Display.getDefault(), 0, 0, 255)); + + changeLink.addHyperlinkListener(new HyperlinkAdapter() { + @Override + public void linkActivated(HyperlinkEvent e) { + if (!mountPointText.isEnabled()) { + changeLink.setVisible(false); + mountPointText.setEnabled(true); + } + } + }); + } + @Override protected void okPressed() { - fsType = formatTypeCombo.getText(); - super.okPressed(); + fsType = formatTypeCombo.getText().trim(); + mountPoint = mountPointText.getText().trim(); + if (validateForm()) { + super.okPressed(); + } else { + MessageDialog.openError(getShell(), "Initialize Disk - Error", "Please enter a valid mount point"); + } } @Override @@ -131,6 +180,18 @@ public class InitializeDiskTypeSelection extends Dialog { super.cancelPressed(); } + private boolean validateMountPoint() { + String mountPoint = mountPointText.getText().trim(); + if (mountPoint.isEmpty()) { + return false; + } + return mountPoint.matches("^/.+"); + } + + private boolean validateForm() { + return (!formatTypeCombo.getText().trim().isEmpty() && validateMountPoint()); + } + /** * Overriding to make sure that the dialog is centered in screen */ @@ -142,7 +203,10 @@ public class InitializeDiskTypeSelection extends Dialog { } public String getFSType() { - return fsType.trim(); + return fsType; } + public String getMountPoint() { + return mountPoint; + } } diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java index 417e67ea..43a7e61a 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java @@ -19,6 +19,7 @@ package com.gluster.storage.management.console.views.pages; import java.net.URI; +import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; @@ -44,7 +45,9 @@ import com.gluster.storage.management.client.TasksClient; import com.gluster.storage.management.console.Application; import com.gluster.storage.management.console.GlusterDataModelManager; import com.gluster.storage.management.console.IEntityListener; -import com.gluster.storage.management.console.dialogs.InitializeDiskTypeSelection; +import com.gluster.storage.management.console.dialogs.InitDiskDialog; +import com.gluster.storage.management.console.utils.GlusterLogger; +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.ClusterListener; import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.Device; @@ -59,6 +62,7 @@ import com.gluster.storage.management.core.model.TaskInfo; public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk> implements IEntityListener { protected List<Disk> disks; + protected static final GlusterLogger logger = GlusterLogger.getInstance(); /** * @return Index of the "status" column in the table. Return -1 if status column is not displayed @@ -69,7 +73,7 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk super(site, parent, style, false, true, disks); this.disks = disks; - // creates hyperlinks for "unitialized" disks + // creates hyperlinks for "uninitialized" disks setupStatusCellEditor(); // Listen for disk status change events Application.getApplication().addEntityListener(this); @@ -250,22 +254,31 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk TaskInfo existingTaskInfo = modelManager.getTaskByReference(reference); if (existingTaskInfo != null && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_FAILURE) { - MessageDialog.openInformation(getShell(), "Error: Initialize disk", "Initializing disk [" + reference + MessageDialog.openInformation(getShell(), "Initialize disk - Error", "Initializing disk [" + reference + "] is already in progress! Try later."); return; } - InitializeDiskTypeSelection formatDialog = new InitializeDiskTypeSelection(getShell()); + // To collect the available fsType + GlusterServersClient serversClient = new GlusterServersClient(); + List<String> fsTypes = new ArrayList<String>(); + try { + fsTypes = serversClient.getFSTypes(device.getServerName()); + } catch (GlusterRuntimeException e1) { + MessageDialog.openError(getShell(), "Initialize disk - Error", e1.getMessage()); + return; + } + + InitDiskDialog formatDialog = new InitDiskDialog(getShell(), device.getName(), fsTypes); int userAction = formatDialog.open(); if (userAction == Window.CANCEL) { - formatDialog.cancelPressed(); + // formatDialog.cancelPressed(); return; } - GlusterServersClient serversClient = new GlusterServersClient(); try { - URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType()); + URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType(), formatDialog.getMountPoint()); TasksClient taskClient = new TasksClient(); TaskInfo taskInfo = taskClient.getTaskInfo(uri); @@ -285,11 +298,12 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk // GlusterDataModelManager.getInstance().updateDeviceStatus(device.getServerName(), device.getName(), // DEVICE_STATUS.INITIALIZED); } else { - MessageDialog.openError(getShell(), "Error: Initialize disk", taskInfo.getStatus().getMessage()); + MessageDialog.openError(getShell(), "Initialize disk - Error", taskInfo.getStatus().getMessage()); } guiHelper.showTaskView(); } catch (Exception e1) { - MessageDialog.openError(getShell(), "Error: Initialize disk", e1.getMessage()); + logger.error("Exception while initialize disk", e1); + MessageDialog.openError(getShell(), "Initialize disk - Error", e1.getMessage()); } } } |
