/*******************************************************************************
* Copyright (c) 2006-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 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
package org.gluster.storage.management.console.dialogs;
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 org.gluster.storage.management.console.utils.GUIHelper;
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 InitDiskDialog(Shell parentShell, String deviceName, List<String> fsTypes) {
super(parentShell);
this.fsTypes = fsTypes;
this.deviceName = deviceName;
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("Gluster Management Console - Select File System Type");
addEscapeListener(newShell);
}
private void addEscapeListener(Shell shell) {
shell.addTraverseListener(new TraverseListener() {
@Override
public void keyTraversed(TraverseEvent e) {
if (e.keyCode == SWT.ESC) {
cancelPressed();
}
}
});
}
@Override
protected Control createDialogArea(Composite parent) {
// Makes sure that child composites inherit the same background
parent.setBackgroundMode(SWT.INHERIT_FORCE);
composite = (Composite) super.createDialogArea(parent);
configureDialogLayout(composite);
createComposite(composite);
return composite;
}
private void configureDialogLayout(Composite composite) {
GridLayout layout = (GridLayout) composite.getLayout();
layout.numColumns = 3;
layout.marginLeft = 20;
layout.marginRight = 20;
layout.marginTop = 20;
layout.horizontalSpacing = 20;
layout.verticalSpacing = 20;
}
private void createComposite(Composite composite) {
initializeDiskTypeComposite = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout(3, false);
initializeDiskTypeComposite.setLayout(layout);
createLabel(initializeDiskTypeComposite, "File system ");
createFormatTypeCombo(initializeDiskTypeComposite);
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.BEGINNING, GridData.CENTER, false, false));
}
private void createFormatTypeCombo(Composite composite) {
formatTypeCombo = new Combo(composite, SWT.READ_ONLY);
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().trim();
mountPoint = mountPointText.getText().trim();
if (validateForm()) {
super.okPressed();
} else {
MessageDialog.openError(getShell(), "Initialize Disk - Error", "Please enter a valid mount point");
}
}
@Override
public void cancelPressed() {
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
*/
@Override
protected void initializeBounds() {
super.initializeBounds();
guiHelper.centerShellInScreen(getShell());
}
public String getFSType() {
return fsType;
}
public String getMountPoint() {
return mountPoint;
}
}