/*******************************************************************************
* 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.net.URI;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.fieldassist.ControlDecoration;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.gluster.storage.management.client.GlusterServersClient;
import org.gluster.storage.management.console.GlusterDataModelManager;
import org.gluster.storage.management.console.utils.GUIHelper;
import org.gluster.storage.management.core.model.GlusterServer;
public class ServerAdditionDialog extends Dialog {
public static final int RETURN_CODE_ERROR = 2;
private Text serverName;
private Button addButton;
private GUIHelper guiHelper = GUIHelper.getInstance();
private ControlDecoration errDecoration;
private Composite composite;
public ServerAdditionDialog(Shell shell) {
super(shell);
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("Gluster Management Console - Add Server");
addEscapeListener(newShell);
}
private void addEscapeListener(Shell shell) {
shell.addTraverseListener(new TraverseListener() {
@Override
public void keyTraversed(TraverseEvent e) {
if (e.keyCode == SWT.ESC) {
cancelPressed();
}
}
});
}
/**
* Overriding to make sure that the dialog is centered in screen
*/
@Override
protected void initializeBounds() {
super.initializeBounds();
guiHelper.centerShellInScreen(getShell());
}
private void configureDialogLayout(Composite composite) {
GridLayout layout = (GridLayout) composite.getLayout();
layout.numColumns = 2;
layout.marginLeft = 20;
layout.marginRight = 20;
layout.marginTop = 20;
layout.horizontalSpacing = 20;
layout.verticalSpacing = 20;
}
// ------------------------------------------
private void createLabel(Composite composite, String label) {
Label passwordLabel = new Label(composite, SWT.NONE);
passwordLabel.setText(label);
passwordLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false));
}
private Text createServerNameText(Composite composite) {
Text field = new Text(composite, SWT.BORDER );
GridData layoutData = new GridData(SWT.FILL, GridData.FILL, true, false);
layoutData.widthHint = convertWidthInCharsToPixels(32);
field.setLayoutData(layoutData);
return field;
}
@Override
protected Control createDialogArea(Composite parent) {
composite = (Composite) super.createDialogArea(parent);
configureDialogLayout(composite);
createLabel(composite, "Server Name:");
serverName = createServerNameText(composite);
errDecoration = guiHelper.createErrorDecoration(serverName);
createListeners();
return composite;
}
private void createListeners() {
ModifyListener listener = new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
updateButtonStatus();
}
};
serverName.addModifyListener(listener);
}
private void updateButtonStatus() {
addButton.setEnabled(true);
errDecoration.hide();
if(!serverExists(serverName.getText())) {
addButton.setEnabled(false);
errDecoration.setDescriptionText("Server name already exists.");
errDecoration.show();
}
if(serverName.getText().isEmpty()) {
addButton.setEnabled(false);
errDecoration.setDescriptionText("Please enter server name!");
errDecoration.show();
}
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
addButton = createButton(parent, IDialogConstants.OK_ID, "&Add Server", true);
addButton.setEnabled(false);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
public Boolean serverExists(String serverName) {
List<GlusterServer> servers = GlusterDataModelManager.getInstance().getModel().getCluster().getServers();
for (GlusterServer server : servers) {
if (server.getName().equalsIgnoreCase(serverName)) {
return false;
}
}
return true;
}
protected void okPressed() {
GlusterServersClient serversClient = new GlusterServersClient();
GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
try {
String serverNameText = serverName.getText();
URI newServerURI = serversClient.addServer(serverNameText);
modelManager.addGlusterServer(serversClient.getGlusterServer(newServerURI));
MessageDialog
.openInformation(getShell(), "Add Server", "Server " + serverNameText + " added successfully!");
} catch (Exception e) {
MessageDialog.openError(getShell(), "Server addition Failed", e.getMessage());
setReturnCode(RETURN_CODE_ERROR);
}
this.close();
}
}