summaryrefslogtreecommitdiffstats
path: root/com.gluster.storage.management.gui/src/com/gluster
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-03-18 12:23:38 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-03-18 12:23:38 +0530
commitc606dc633d93da1f22e759e3ad29e7b0291e7ce9 (patch)
tree9011d6bad19e695e63cf335023371f84f562e374 /com.gluster.storage.management.gui/src/com/gluster
parente7a0887c7e2f47a757fee4c9d15cc72714e7f8e1 (diff)
Create Volume functionality
Diffstat (limited to 'com.gluster.storage.management.gui/src/com/gluster')
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java50
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java42
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java23
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java14
4 files changed, 103 insertions, 26 deletions
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java
index 44d1d8c3..ce6df74c 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java
@@ -18,6 +18,7 @@
*******************************************************************************/
package com.gluster.storage.management.gui.dialogs;
+import java.util.Arrays;
import java.util.List;
import org.eclipse.jface.viewers.ITableLabelProvider;
@@ -38,6 +39,8 @@ import com.gluster.storage.management.gui.TableLabelProviderAdapter;
import com.gluster.storage.management.gui.utils.EntityViewerFilter;
import com.gluster.storage.management.gui.utils.GUIHelper;
import com.richclientgui.toolbox.duallists.CustomTableDualListComposite;
+import com.richclientgui.toolbox.duallists.DualListComposite.ListContentChangedListener;
+import com.richclientgui.toolbox.duallists.IRemovableContentProvider;
import com.richclientgui.toolbox.duallists.RemovableContentProvider;
import com.richclientgui.toolbox.duallists.TableColumnData;
@@ -51,12 +54,14 @@ public class CreateVolumeDisksPage extends Composite {
private GUIHelper guiHelper = GUIHelper.getInstance();
private CustomTableDualListComposite<Disk> dualTableViewer;
private Text filterText;
-
+
+ private IRemovableContentProvider<Disk> chosenDisksContentProvider;
+
public CreateVolumeDisksPage(final Composite parent, int style, List<Disk> disks) {
super(parent, style);
createPage(disks);
-
+
parent.layout();
}
@@ -72,39 +77,40 @@ public class CreateVolumeDisksPage extends Composite {
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.SPACE.ordinal() ? NumberUtil.formatNumber(disk.getSpace())
- : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE_USED.ordinal() ? NumberUtil.formatNumber(disk.getSpaceInUse())
- : "Invalid");
+ : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE.ordinal() ? NumberUtil
+ .formatNumber(disk.getSpace())
+ : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE_USED.ordinal() ? NumberUtil
+ .formatNumber(disk.getSpaceInUse()) : "Invalid");
}
};
}
private void createPage(List<Disk> disks) {
setupPageLayout();
-
+
filterText = guiHelper.createFilterText(this);
new Label(this, SWT.NONE);
-
- createDualTableViewer(disks);
+
+ createDualTableViewer(disks);
createFilter(filterText, false); // attach filter text to the dual table viewer for auto-filtering
-
+
Composite buttonContainer = new Composite(this, SWT.NONE);
buttonContainer.setLayout(new GridLayout(1, false));
GridData buttonContainerData = new GridData(SWT.FILL, SWT.CENTER, true, true);
buttonContainerData.minimumWidth = 40;
buttonContainer.setLayoutData(buttonContainerData);
-
+
Button btnUp = new Button(buttonContainer, SWT.TOGGLE);
GridData btnUpData = new GridData(SWT.LEFT, SWT.BOTTOM, true, false);
btnUpData.minimumWidth = 30;
btnUp.setLayoutData(btnUpData);
btnUp.setImage(guiHelper.getImage(IImageKeys.ARROW_UP));
-
+
Button btnDown = new Button(buttonContainer, SWT.TOGGLE);
btnDown.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false));
btnDown.setImage(guiHelper.getImage(IImageKeys.ARROW_DOWN));
}
-
+
private void createFilter(final Text filterText, boolean caseSensitive) {
final String initialFilterString = filterText.getText();
@@ -137,10 +143,9 @@ public class CreateVolumeDisksPage extends Composite {
private void createDualTableViewer(List<Disk> disks) {
TableColumnData[] columnData = createColumnData();
- ITableLabelProvider diskLabelProvider = getDiskLabelProvider();
+ ITableLabelProvider diskLabelProvider = getDiskLabelProvider();
- dualTableViewer = new CustomTableDualListComposite<Disk>(this, SWT.NONE,
- columnData, columnData);
+ dualTableViewer = new CustomTableDualListComposite<Disk>(this, SWT.NONE, columnData, columnData);
dualTableViewer.setViewerLabels("Available:", "Chosen:");
@@ -148,10 +153,12 @@ public class CreateVolumeDisksPage extends Composite {
dualTableViewer.setAvailableTableHeaderVisible(true);
dualTableViewer.setAvailableContentProvider(new RemovableContentProvider<Disk>());
dualTableViewer.setAvailableLabelProvider(diskLabelProvider);
-
+
dualTableViewer.setChosenTableLinesVisible(true);
dualTableViewer.setChosenTableHeaderVisible(true);
- dualTableViewer.setChosenContentProvider(new RemovableContentProvider<Disk>(disks));
+
+ chosenDisksContentProvider = new RemovableContentProvider<Disk>(disks);
+ dualTableViewer.setChosenContentProvider(chosenDisksContentProvider);
dualTableViewer.setChosenLabelProvider(diskLabelProvider);
}
@@ -174,4 +181,13 @@ public class CreateVolumeDisksPage extends Composite {
setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
}
+
+ public List<Disk> getSelectedDisks() {
+ // dualTableViewer.getChosenTable().getI
+ Disk[] disks = (Disk[])chosenDisksContentProvider.getElements(dualTableViewer);
+ if(disks != null) {
+ return Arrays.asList(disks);
+ }
+ return null;
+ }
}
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java
index 142d51d8..e47adcaf 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java
@@ -18,9 +18,15 @@
*******************************************************************************/
package com.gluster.storage.management.gui.dialogs;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
@@ -34,13 +40,20 @@ import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
+import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.Volume;
+import com.gluster.storage.management.core.model.Volume.NAS_PROTOCOL;
+import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
public class CreateVolumePage1 extends WizardPage {
- private static final String PAGE_NAME = "create.volume.page.1";
+ public static final String PAGE_NAME = "create.volume.page.1";
private Text txtName;
+ private ComboViewer typeComboViewer;
private Text txtAccessControl;
+ private Volume volume = new Volume();
+ private List<Disk> disks;
+ private Button btnNfs;
/**
* Create the wizard.
@@ -82,7 +95,7 @@ public class CreateVolumePage1 extends WizardPage {
lblType.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblType.setText("Type: ");
- ComboViewer typeComboViewer = new ComboViewer(container, SWT.READ_ONLY);
+ typeComboViewer = new ComboViewer(container, SWT.READ_ONLY);
Combo typeCombo = typeComboViewer.getCombo();
GridData typeComboData = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
typeCombo.setLayoutData(typeComboData);
@@ -113,7 +126,10 @@ public class CreateVolumePage1 extends WizardPage {
public void handleEvent(Event event) {
SelectDisksDialog dialog = new SelectDisksDialog(getShell());
dialog.create();
- dialog.open();
+ if(dialog.open() == Window.OK) {
+ // user has customized disks. get them from the dialog box.
+ volume.setDisks(dialog.getSelectedDisks());
+ }
}
});
@@ -127,7 +143,7 @@ public class CreateVolumePage1 extends WizardPage {
btnGluster.setText("Gluster");
new Label(container, SWT.NONE);
- Button btnNfs = new Button(container, SWT.CHECK);
+ btnNfs = new Button(container, SWT.CHECK);
btnNfs.setSelection(true);
btnNfs.setText("NFS");
@@ -146,4 +162,22 @@ public class CreateVolumePage1 extends WizardPage {
lblAccessControlInfo.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
lblAccessControlInfo.setText("(Comma separated list of IP addresses)");
}
+
+ public Volume getVolume() {
+ volume.setName(txtName.getText());
+
+ IStructuredSelection selection = (IStructuredSelection)typeComboViewer.getSelection();
+ volume.setVolumeType((VOLUME_TYPE)selection.getFirstElement());
+
+ volume.setTransportType(TRANSPORT_TYPE.ETHERNET);
+ Set<NAS_PROTOCOL> nasProtocols = new HashSet<Volume.NAS_PROTOCOL>();
+ nasProtocols.add(NAS_PROTOCOL.GLUSTERFS);
+ if(btnNfs.getSelection()) {
+ nasProtocols.add(NAS_PROTOCOL.NFS);
+ }
+
+ volume.setAccessControlList(txtAccessControl.getText());
+
+ return volume;
+ }
}
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
index 0a9508fc..e21286d2 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
@@ -18,8 +18,14 @@
*******************************************************************************/
package com.gluster.storage.management.gui.dialogs;
+import org.eclipse.jface.dialogs.MessageDialog;
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.Status;
+import com.gluster.storage.management.core.model.Volume;
+
public class CreateVolumeWizard extends Wizard {
public CreateVolumeWizard() {
@@ -34,8 +40,21 @@ public class CreateVolumeWizard extends Wizard {
@Override
public boolean performFinish() {
- System.out.println("Finishing volume creation!");
- // TODO: Add code to create volume
+ CreateVolumePage1 page = (CreateVolumePage1) getPage(CreateVolumePage1.PAGE_NAME);
+ Volume newVol = page.getVolume();
+
+ GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
+ VolumesClient volumesClient = new VolumesClient(modelManager.getServerName(), modelManager.getSecurityToken());
+ Status status = volumesClient.createVolume(newVol);
+ if (status.isSuccess()) {
+ new MessageDialog(getShell(), "Create Volume", null, "Volume created successfully!",
+ MessageDialog.INFORMATION, new String[] { "OK" }, 0);
+ // TODO: Update the model
+ } else {
+ new MessageDialog(getShell(), "Create Volume", null, "Volume creation failed! [" + status.getCode() + "]["
+ + status.getMessage() + "]", MessageDialog.INFORMATION, new String[] { "OK" }, 0);
+ }
+
return true;
}
}
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
index c312e34b..b6d0a227 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
@@ -18,6 +18,8 @@
*******************************************************************************/
package com.gluster.storage.management.gui.dialogs;
+import java.util.List;
+
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
@@ -29,9 +31,12 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import com.gluster.storage.management.client.GlusterDataModelManager;
+import com.gluster.storage.management.core.model.Disk;
public class SelectDisksDialog extends Dialog {
+ private CreateVolumeDisksPage disksPage;
+
/**
* Create the dialog.
*
@@ -56,7 +61,7 @@ public class SelectDisksDialog extends Dialog {
container.setLayoutData(containerLayoutData);
getShell().setText("Create Volume - Select Disks");
- CreateVolumeDisksPage disksPage = new CreateVolumeDisksPage(container, SWT.NONE, GlusterDataModelManager
+ disksPage = new CreateVolumeDisksPage(container, SWT.NONE, GlusterDataModelManager
.getInstance().getReadyDisksOfAllServers());
return container;
@@ -83,13 +88,16 @@ public class SelectDisksDialog extends Dialog {
@Override
protected void cancelPressed() {
- // TODO Auto-generated method stub
super.cancelPressed();
}
@Override
protected void okPressed() {
- // TODO Auto-generated method stub
+ // TODO Validations
super.okPressed();
}
+
+ public List<Disk> getSelectedDisks() {
+ return disksPage.getSelectedDisks();
+ }
}