From 01a08c0c3aeba21df5451de8243ced32a6b5b694 Mon Sep 17 00:00:00 2001 From: Dhandapani Date: Mon, 18 Jul 2011 10:55:24 +0530 Subject: Manual Server Addition Feature --- .../management/client/GlusterServersClient.java | 4 +- src/com.gluster.storage.management.gui/plugin.xml | 98 ++++++++++ .../management/gui/actions/AddServerAction.java | 2 +- .../gui/actions/ServerAdditionAction.java | 34 ++++ .../gui/dialogs/InitializeDiskTypeSelection.java | 2 +- .../gui/dialogs/ServerAdditionDialog.java | 208 +++++++++++++++++++++ 6 files changed, 344 insertions(+), 4 deletions(-) create mode 100644 src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java create mode 100644 src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java (limited to 'src') diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java index 0ee933f0..8be5beac 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java @@ -69,9 +69,9 @@ public class GlusterServersClient extends AbstractClient { return server; } - public void addServer(Server discoveredServer) { + public void addServer(String serverName) { Form form = new Form(); - form.add(RESTConstants.FORM_PARAM_SERVER_NAME, discoveredServer.getName()); + form.add(RESTConstants.FORM_PARAM_SERVER_NAME, serverName); postRequest(form); } diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml index 1850c93e..3c87ffe1 100644 --- a/src/com.gluster.storage.management.gui/plugin.xml +++ b/src/com.gluster.storage.management.gui/plugin.xml @@ -462,6 +462,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> + + + + + + + + + + + + + + + * 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 + * . + */ +package com.gluster.storage.management.gui.dialogs; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.core.databinding.DataBindingContext; +import org.eclipse.core.databinding.UpdateValueStrategy; +import org.eclipse.core.databinding.beans.PojoProperties; +import org.eclipse.jface.databinding.swt.SWTObservables; +import org.eclipse.jface.databinding.swt.WidgetProperties; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.ErrorDialog; +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.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.client.GlusterServersClient; +import com.gluster.storage.management.core.model.GlusterServer; +import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.gui.utils.GUIHelper; +import com.gluster.storage.management.gui.validators.StringRequiredValidator; + +public class ServerAdditionDialog extends Dialog { + public static final int RETURN_CODE_ERROR = 2; + private Text serverName; + private Button addButton; + + private final 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 servers = GlusterDataModelManager.getInstance().getModel().getCluster().getServers(); + for (GlusterServer server : servers) { + if (server.getName().equals(serverName)) { + return false; + } + } + return true; + } + + protected void okPressed() { + GlusterServersClient serversClient = new GlusterServersClient(); + GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + + try { + String serverNameText = serverName.getText(); + serversClient.addServer(serverNameText); + + modelManager.addGlusterServer(serversClient.getGlusterServer(serverNameText)); + + 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(); + } +} -- cgit