diff options
10 files changed, 202 insertions, 85 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java index 25ba6b10..3d2310ac 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java @@ -58,6 +58,9 @@ public class UsersClient extends AbstractClient { throw e; } } catch (Exception e) { + // authentication failed. clear security token. + setSecurityToken(null); + Throwable cause = e.getCause(); if(cause != null && cause instanceof ConnectException) { return new Status(Status.STATUS_CODE_FAILURE, "Couldn't connect to Gluster Management Gateway!"); diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java new file mode 100644 index 00000000..fe2fc860 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 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 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 + * <http://www.gnu.org/licenses/>. + *******************************************************************************/ +package com.gluster.storage.management.core.utils; + +import java.util.List; + +/** + * + */ +public class JavaUtil { + @SuppressWarnings("rawtypes") + public static boolean listsDiffer(List list1, List list2) { + if(list1.size() != list2.size()) { + return true; + } + + for(Object obj : list1) { + if(!list2.contains(obj)) { + return true; + } + } + + return false; + } +} diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml index 82b7f3e0..89b2460b 100644 --- a/src/com.gluster.storage.management.gui/plugin.xml +++ b/src/com.gluster.storage.management.gui/plugin.xml @@ -666,22 +666,6 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> - <action - allowLabelUpdate="false" - class="com.gluster.storage.management.gui.actions.AddServerAction" - definitionId="com.gluster.storage.management.gui.commands.AddServer" - icon="icons/server-add.png" - id="com.gluster.storage.management.gui.actions.AddServerAction" - label="Add &Server(s)" - menubarPath="com.gluster.storage.management.gui.menu.cluster/cluster" - mode="FORCE_TEXT" - pulldown="false" - retarget="false" - state="false" - style="push" - toolbarPath="Normal" - tooltip="Add Server(s) to Cluster"> - </action> <menu id="com.gluster.storage.management.gui.menu.cluster" label="&Gluster"> @@ -711,22 +695,6 @@ toolbarPath="Normal" tooltip="Remove Server(s)"> </action> - <action - allowLabelUpdate="false" - class="com.gluster.storage.management.gui.actions.AddServerAction" - definitionId="com.gluster.storage.management.gui.commands.AddServer" - icon="icons/server-add.png" - id="com.gluster.storage.management.gui.actions.AddServerAction" - label="&Add Server(s)" - menubarPath="com.gluster.storage.management.gui.menu.servers/servers" - mode="FORCE_TEXT" - pulldown="false" - retarget="false" - state="false" - style="push" - toolbarPath="Normal" - tooltip="Add Server(s) to Cluster"> - </action> <menu id="com.gluster.storage.management.gui.menu.servers" label="&Gluster" @@ -747,7 +715,7 @@ definitionId="com.gluster.storage.management.gui.commands.RemoveServer" icon="icons/server-remove.png" id="com.gluster.storage.management.gui.actions.RemoveServerAction" - label="&Remove Server" + label="&Remove Server(s)" menubarPath="com.gluster.storage.management.gui.menu.glusterserver/glusterserver" mode="FORCE_TEXT" pulldown="false" @@ -807,7 +775,7 @@ definitionId="com.gluster.storage.management.gui.commands.AddServer" icon="icons/server-add.png" id="com.gluster.storage.management.gui.actions.AddServerAction" - label="&Add Server" + label="&Add Server(s)" menubarPath="com.gluster.storage.management.gui.menu.discoveredserver/discoveredserver" mode="FORCE_TEXT" pulldown="false" @@ -1101,7 +1069,7 @@ <action class="com.gluster.storage.management.gui.actions.RemoveServerAction" definitionId="com.gluster.storage.management.gui.commands.RemoveServer" - enablesFor="1" + enablesFor="+" icon="icons/server-remove.png" id="com.gluster.storage.management.gui.actions.RemoveServerAction" label="&Remove Server" @@ -1115,6 +1083,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.MigrateDiskAction" definitionId="com.gluster.storage.management.gui.commands.MigrateDisk" + enablesFor="1" icon="icons/disk-migrate.png" id="com.gluster.storage.management.gui.actions.MigrateDiskAction" label="&Migrate Disk" @@ -1131,6 +1100,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.DeleteVolumeAction" definitionId="com.gluster.storage.management.gui.commands.DeleteVolume" + enablesFor="1" icon="icons/volume-delete.png" id="com.gluster.storage.management.gui.actions.DeleteVolumeAction" label="&Delete Volume" @@ -1147,6 +1117,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.RebalanceVolumeAction" definitionId="com.gluster.storage.management.gui.commands.RebalanceVolume" + enablesFor="1" icon="icons/volume-rebalance.png" id="com.gluster.storage.management.gui.actions.RebalanceVolumeAction" label="&Rebalance Volume" @@ -1163,6 +1134,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.StopVolumeAction" definitionId="com.gluster.storage.management.gui.commands.StopVolume" + enablesFor="+" icon="icons/volume-stop.png" id="com.gluster.storage.management.gui.actions.StopVolumeAction" label="S&top Volume" @@ -1179,6 +1151,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.StartVolumeAction" definitionId="com.gluster.storage.management.gui.commands.StartVolume" + enablesFor="+" icon="icons/volume-start.png" id="com.gluster.storage.management.gui.actions.StartVolumeAction" label="&Start Volume" diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java index 8be1c672..230bff6a 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java @@ -28,11 +28,8 @@ import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.response.GlusterServerResponse; import com.gluster.storage.management.gui.utils.GUIHelper; @@ -106,16 +103,13 @@ public class AddServerAction extends AbstractActionDelegate { System.out.println("Disposing [" + this.getClass().getSimpleName() + "]"); } - @SuppressWarnings("rawtypes") @Override public void selectionChanged(IAction action, ISelection selection) { - super.selectionChanged(action, selection); - - if (selectedEntity != null && selectedEntity instanceof Entity) { + Set<Server> selectedServers = GUIHelper.getInstance().getSelectedEntities(getWindow(), Server.class); + if (selectedServers == null || selectedServers.isEmpty()) { + action.setEnabled(false); + } else { action.setEnabled(true); - if (selectedEntity instanceof EntityGroup && ((EntityGroup) selectedEntity).getEntityType() == Volume.class) { - action.setEnabled(false); - } } } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java index c7e437e8..0ca5627c 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java @@ -27,6 +27,7 @@ import java.util.Map.Entry; import java.util.Set; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.GlusterDataModelManager; @@ -147,4 +148,15 @@ public class RemoveServerAction extends AbstractActionDelegate { public void dispose() { } + + @Override + public void selectionChanged(IAction action, ISelection selection) { + Set<GlusterServer> selectedServers = GUIHelper.getInstance().getSelectedEntities(getWindow(), + GlusterServer.class); + if(selectedServers == null || selectedServers.isEmpty()) { + action.setEnabled(false); + } else { + action.setEnabled(true); + } + } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java index 56a6c94b..a38c6b38 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java @@ -18,8 +18,10 @@ *******************************************************************************/ package com.gluster.storage.management.gui.utils; +import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import org.eclipse.jface.action.Action; @@ -30,11 +32,17 @@ import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.CheckStateChangedEvent; +import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; @@ -72,6 +80,7 @@ import org.eclipse.ui.progress.IProgressConstants; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.utils.JavaUtil; import com.gluster.storage.management.gui.Application; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.views.NavigationView; @@ -406,7 +415,30 @@ public class GUIHelper { } return selectedEntities; } - + + public void configureCheckboxTableViewer(final CheckboxTableViewer tableViewer) { + tableViewer.addCheckStateListener(new ICheckStateListener() { + + @Override + public void checkStateChanged(CheckStateChangedEvent event) { + tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); + } + }); + + tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + + @SuppressWarnings("unchecked") + @Override + public void selectionChanged(SelectionChangedEvent event) { + List<Object> checkedElements = Arrays.asList(tableViewer.getCheckedElements()); + List<Object> selectedElements = ((IStructuredSelection)event.getSelection()).toList(); + + if (JavaUtil.listsDiffer(checkedElements, selectedElements)) { + tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); + } + } + }); + } public void showProgressView() { try { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java index 06b1e282..fa9c2e7f 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java @@ -52,7 +52,7 @@ public class GlusterServersView extends ViewPart implements IDoubleClickListener servers = (EntityGroup<GlusterServer>)guiHelper.getSelectedEntity(getSite(), EntityGroup.class); } - page = new GlusterServersPage(parent, SWT.NONE, servers); + page = new GlusterServersPage(getSite(), parent, SWT.NONE, servers); page.addDoubleClickListener(this); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java index c9fab9e0..36f60998 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java @@ -19,13 +19,9 @@ package com.gluster.storage.management.gui.views.details; import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; @@ -39,9 +35,14 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.forms.widgets.FormToolkit; +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.EntityGroup; +import com.gluster.storage.management.core.model.Event; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.gui.EntityGroupContentProvider; import com.gluster.storage.management.gui.GlusterServerTableLabelProvider; @@ -60,28 +61,23 @@ public class GlusterServersPage extends Composite { private static final String[] GLUSTER_SERVER_TABLE_COLUMN_NAMES = new String[] { "Name", "IP Address(es)", "Number\nof CPUs", "Total\nMemory (GB)", "Space (GB)", "Space\nAvailable (GB)", "Status" }; // Removed "Preferred\nNetwork", - public GlusterServersPage(Composite parent, int style) { + public GlusterServersPage(IWorkbenchSite site, final Composite parent, int style, EntityGroup<GlusterServer> servers) { super(parent, style); - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - } - }); toolkit.adapt(this); toolkit.paintBordersFor(this); setupPageLayout(); Text filterText = guiHelper.createFilterText(toolkit, this); - setupServerTableViewer(filterText); - } - - public GlusterServersPage(final Composite parent, int style, EntityGroup<GlusterServer> servers) { - this(parent, style); + setupServerTableViewer(site, filterText); tableViewer.setInput(servers); parent.layout(); // Important - this actually paints the table + createListeners(parent); + } + + private void createListeners(final Composite parent) { /** * Ideally not required. However the table viewer is not getting laid out properly on performing * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window @@ -94,11 +90,31 @@ public class GlusterServersPage extends Composite { } }); - tableViewer.addCheckStateListener(new ICheckStateListener() { + final ClusterListener clusterListener = new DefaultClusterListener() { + + @Override + public void serverAdded(GlusterServer server) { + tableViewer.refresh(); + } @Override - public void checkStateChanged(CheckStateChangedEvent event) { - tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); + public void serverRemoved(GlusterServer server) { + tableViewer.refresh(); + } + + @Override + public void serverChanged(GlusterServer server, Event event) { + tableViewer.update(server, null); + } + }; + + final GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + modelManager.addClusterListener(clusterListener); + + addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + toolkit.dispose(); + modelManager.removeClusterListener(clusterListener); } }); } @@ -151,9 +167,14 @@ public class GlusterServersPage extends Composite { return tableViewerComposite; } - private void setupServerTableViewer(final Text filterText) { + private void setupServerTableViewer(IWorkbenchSite site, final Text filterText) { Composite tableViewerComposite = createTableViewerComposite(); tableViewer = createServerTableViewer(tableViewerComposite); + site.setSelectionProvider(tableViewer); + + // make sure that table selection is driven by checkbox selection + guiHelper.configureCheckboxTableViewer(tableViewer); + // Create a case insensitive filter for the table viewer using the filter text field guiHelper.createFilter(tableViewer, filterText, false); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java index 5a6a9d40..20c3cbd4 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java @@ -1,4 +1,4 @@ -/******************************************************************************* + /******************************************************************************* * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> * This file is part of Gluster Management Console. * @@ -18,17 +18,10 @@ *******************************************************************************/ package com.gluster.storage.management.gui.views.pages; -import java.util.ArrayList; -import java.util.List; - import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; @@ -45,7 +38,9 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.forms.widgets.FormToolkit; -import com.gluster.storage.management.core.model.Entity; +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.gui.EntityGroupContentProvider; @@ -55,7 +50,7 @@ import com.gluster.storage.management.gui.utils.GUIHelper; public class ServersPage extends Composite { private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private TableViewer tableViewer; + private CheckboxTableViewer tableViewer; private GUIHelper guiHelper = GUIHelper.getInstance(); public enum SERVER_TABLE_COLUMN_INDICES { @@ -88,6 +83,10 @@ public class ServersPage extends Composite { setupPage(site, servers); parent.layout(); // Important - this actually paints the table + createListeners(parent); + } + + private void createListeners(final Composite parent) { /** * Ideally not required. However the table viewer is not getting laid out properly on performing * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window @@ -99,6 +98,33 @@ public class ServersPage extends Composite { parent.layout(); } }); + + final ClusterListener clusterListener = new DefaultClusterListener() { + @Override + public void discoveredServerRemoved(Server server) { + refreshViewer(); + } + + @Override + public void discoveredServerAdded(Server server) { + refreshViewer(); + } + + private void refreshViewer() { + tableViewer.refresh(); + parent.update(); + } + }; + + final GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + modelManager.addClusterListener(clusterListener); + addDisposeListener(new DisposeListener() { + @Override + public void widgetDisposed(DisposeEvent e) { + toolkit.dispose(); + modelManager.removeClusterListener(clusterListener); + } + }); } public void setInput(EntityGroup<Server> servers) { @@ -135,21 +161,17 @@ public class ServersPage extends Composite { // setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.DISK_SPACE_IN_USE, SWT.CENTER, 90); } - private TableViewer createServerTableViewer(Composite parent) { + private CheckboxTableViewer createServerTableViewer(Composite parent) { final CheckboxTableViewer tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); // TableViewer tableViewer = new TableViewer(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); tableViewer.setLabelProvider(new ServerTableLabelProvider()); tableViewer.setContentProvider(new EntityGroupContentProvider<Server>()); setupServerTable(parent, tableViewer.getTable()); - - tableViewer.addCheckStateListener(new ICheckStateListener() { - - @Override - public void checkStateChanged(CheckStateChangedEvent event) { - tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); - } - }); + + // make sure that table selection is driven by checkbox selection + guiHelper.configureCheckboxTableViewer(tableViewer); + return tableViewer; } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java index 728da2dc..27f0829b 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java @@ -227,6 +227,16 @@ public class GlusterServersResource extends AbstractServersResource { @Produces(MediaType.TEXT_XML) public GlusterServerResponse addServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @FormParam(FORM_PARAM_SERVER_NAME) String serverName) { + if(clusterName.isEmpty()) { + return new GlusterServerResponse( + new Status(Status.STATUS_CODE_FAILURE, "Cluster name should not be empty!"), null); + } + + if(serverName == null || serverName.isEmpty()) { + return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Form parameter [" + + FORM_PARAM_SERVER_NAME + "] is mandatory!"), null); + } + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName @@ -287,6 +297,15 @@ public class GlusterServersResource extends AbstractServersResource { @Path("{" + PATH_PARAM_SERVER_NAME + "}") public Status removeServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_SERVER_NAME) String serverName) { + if (clusterName.isEmpty()) { + return new Status(Status.STATUS_CODE_FAILURE, "Cluster name should not be empty!"); + } + + if(serverName == null || serverName.isEmpty()) { + return new Status(Status.STATUS_CODE_FAILURE, "Form parameter [" + FORM_PARAM_SERVER_NAME + + "] is mandatory!"); + } + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!"); |
