diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-08-18 18:53:08 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-08-18 18:53:55 +0530 |
| commit | e141543f08978529e014b023d2949eaf0088d1cc (patch) | |
| tree | 2e0aaafa2d475b5ef8283ee20188023c4ec4dd01 /src | |
| parent | bf2b18a7a6a1812c6ce6e3cccfb1458d2954e158 (diff) | |
Modified to show progress dialog on performing add/remove servers and delete volumes.
Diffstat (limited to 'src')
6 files changed, 129 insertions, 166 deletions
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AbstractMonitoredActionDelegate.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AbstractMonitoredActionDelegate.java index bcbba8c8..1669d273 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AbstractMonitoredActionDelegate.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AbstractMonitoredActionDelegate.java @@ -26,15 +26,12 @@ import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import com.gluster.storage.management.console.ConsoleConstants; -import com.gluster.storage.management.console.utils.GlusterLogger; /** * Any action that can potentially run for a long time, and supports monitoring and progress dialog should extend from * this class */ public abstract class AbstractMonitoredActionDelegate extends AbstractActionDelegate { - private GlusterLogger logger = GlusterLogger.getInstance(); - /* (non-Javadoc) * @see com.gluster.storage.management.console.actions.AbstractActionDelegate#performAction(org.eclipse.jface.action.IAction) */ diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AddServerAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AddServerAction.java index 0c371f05..c3b24eba 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AddServerAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/AddServerAction.java @@ -22,9 +22,8 @@ import java.net.URI; import java.util.HashSet; import java.util.Set; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -33,65 +32,63 @@ import com.gluster.storage.management.console.utils.GUIHelper; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.model.Server; -public class AddServerAction extends AbstractActionDelegate { +public class AddServerAction extends AbstractMonitoredActionDelegate { private GUIHelper guiHelper = GUIHelper.getInstance(); @Override - protected void performAction(final IAction action) { - final Runnable addServerThread = new Runnable() { - @Override - public void run() { - GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); - GlusterServersClient glusterServersClient = new GlusterServersClient(); + protected void performAction(final IAction action, IProgressMonitor monitor) { + GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + GlusterServersClient glusterServersClient = new GlusterServersClient(); - Set<Server> selectedServers = GUIHelper.getInstance().getSelectedEntities(getWindow(), Server.class); - Set<Server> successServers = new HashSet<Server>(); - Set<Server> partSuccessServers = new HashSet<Server>(); - String errMsg = ""; - String partErrMsg = ""; - - if (selectedServers.isEmpty()) { - addServerManually(); - } else { - for (Server server : selectedServers) { - guiHelper.setStatusMessage("Adding server [" + server.getName() + "]..."); + Set<Server> selectedServers = GUIHelper.getInstance().getSelectedEntities(getWindow(), Server.class); + Set<Server> successServers = new HashSet<Server>(); + Set<Server> partSuccessServers = new HashSet<Server>(); + String errMsg = ""; + String partErrMsg = ""; - try { - URI newServerURI = glusterServersClient.addServer(server.getName()); - modelManager.addGlusterServer(glusterServersClient.getGlusterServer(newServerURI)); - successServers.add(server); - } catch (Exception e) { - if (!errMsg.isEmpty()) { - errMsg += CoreConstants.NEWLINE; - } - errMsg += "Server " + server.getName() + ". Error: [" + e.getMessage() + "]"; - } - } - - guiHelper.clearStatusMessage(); - showStatusMessage(action.getDescription(), selectedServers, successServers, partSuccessServers, - errMsg, partErrMsg); - } + if (selectedServers.isEmpty()) { + monitor.beginTask("Starting Manual Server Addition", 1); + addServerManually(); + monitor.worked(1); + monitor.done(); + return; + } + + monitor.beginTask("Adding Selected Servers...", selectedServers.size()); + for (Server server : selectedServers) { + if(monitor.isCanceled()) { + break; } + + monitor.setTaskName("Adding server [" + server.getName() + "]..."); - private void addServerManually() { - try { - // To open a dialog for server addition - ServerAdditionDialog dialog = new ServerAdditionDialog(getShell()); - dialog.open(); - } catch (Exception e) { - logger.error("Error in Manual server addition", e); - showErrorDialog("Add server", "Add server failed! [" + e.getMessage() + "]"); + try { + URI newServerURI = glusterServersClient.addServer(server.getName()); + modelManager.addGlusterServer(glusterServersClient.getGlusterServer(newServerURI)); + successServers.add(server); + } catch (Exception e) { + if (!errMsg.isEmpty()) { + errMsg += CoreConstants.NEWLINE; } + errMsg += "Server " + server.getName() + ". Error: [" + e.getMessage() + "]"; } - }; + monitor.worked(1); + } + monitor.done(); - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { - @Override - public void run() { - Display.getDefault().asyncExec(addServerThread); - } - }); + showStatusMessage(action.getDescription(), selectedServers, successServers, partSuccessServers, errMsg, + partErrMsg); + } + + private void addServerManually() { + try { + // To open a dialog for server addition + ServerAdditionDialog dialog = new ServerAdditionDialog(getShell()); + dialog.open(); + } catch (Exception e) { + logger.error("Error in Manual server addition", e); + showErrorDialog("Add server", "Add server failed! [" + e.getMessage() + "]"); + } } private void showStatusMessage(String dialogTitle, Set<Server> selectedServers, Set<Server> successServers, diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java index c9ef9281..869e37e3 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java @@ -22,11 +22,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -36,15 +35,14 @@ import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; -public class DeleteVolumeAction extends AbstractActionDelegate { +public class DeleteVolumeAction extends AbstractMonitoredActionDelegate { private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); private List<Volume> selectedVolumes = new ArrayList<Volume>(); private List<String> selectedVolumeNames = new ArrayList<String>(); private List<String> onlineVolumeNames = new ArrayList<String>(); - private GUIHelper guiHelper = GUIHelper.getInstance(); @Override - protected void performAction(final IAction action) { + protected void performAction(final IAction action, IProgressMonitor monitor) { final String actionDesc = action.getDescription(); collectVolumeNames(); @@ -63,55 +61,50 @@ public class DeleteVolumeAction extends AbstractActionDelegate { return; } - - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { - @Override - public void run() { - VolumesClient vc = new VolumesClient(); - boolean confirmDeleteDir = (directoryDeleteOption == 1) ? true : false; - List<String> deletedVolumeNames = new ArrayList<String>(); - List<String> failedVolumes = new ArrayList<String>(); - String errorMessage = ""; + VolumesClient vc = new VolumesClient(); + boolean confirmDeleteDir = (directoryDeleteOption == 1) ? true : false; + List<String> deletedVolumeNames = new ArrayList<String>(); + List<String> failedVolumes = new ArrayList<String>(); + String errorMessage = ""; - for (Volume volume : selectedVolumes.toArray(new Volume[0])) { - try { - guiHelper.setStatusMessage("Deleting volume [" + volume.getName() + "]"); - if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // stop if online volume - vc.stopVolume(volume.getName()); - } - vc.deleteVolume(volume.getName(), confirmDeleteDir); - modelManager.deleteVolume(volume); - deletedVolumeNames.add(volume.getName()); - } catch (Exception e) { - // Volume delete succeeded and post delete operation (directory cleanup, CIFS etc) may fail - if (vc.volumeExists(volume.getName())) { - errorMessage += CoreConstants.NEWLINE + "[" + volume.getName() + "] : [" + e.getMessage() - + "]"; - failedVolumes.add(volume.getName()); - } else { - errorMessage += CoreConstants.NEWLINE + "Volume deleted, but following error occured: [" - + e.getMessage() + "]"; - modelManager.deleteVolume(volume); - deletedVolumeNames.add(volume.getName()); - } - } + monitor.beginTask("Deleting Selected Volumes...", selectedVolumes.size()); + for (Volume volume : selectedVolumes.toArray(new Volume[0])) { + try { + monitor.setTaskName("Deleting volume [" + volume.getName() + "]"); + if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // stop if online volume + vc.stopVolume(volume.getName()); } - - // Display the success or failure info - if (deletedVolumeNames.size() == 0) { // No volume(s) deleted successfully - showErrorDialog(actionDesc, "volumes " + failedVolumes + " could not be delete! " - + CoreConstants.NEWLINE + "Error: [" + errorMessage + "]"); + vc.deleteVolume(volume.getName(), confirmDeleteDir); + modelManager.deleteVolume(volume); + deletedVolumeNames.add(volume.getName()); + } catch (Exception e) { + // Volume delete succeeded and post delete operation (directory cleanup, CIFS etc) may fail + if (vc.volumeExists(volume.getName())) { + errorMessage += CoreConstants.NEWLINE + "[" + volume.getName() + "] : [" + e.getMessage() + "]"; + failedVolumes.add(volume.getName()); } else { - String info = "Volumes " + deletedVolumeNames + " deleted successfully!"; - if (errorMessage != "") { - info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes - + " could not be deleted! [" + errorMessage + "]"; - } - showInfoDialog(actionDesc, info); + errorMessage += CoreConstants.NEWLINE + "Volume deleted, but following error occured: [" + + e.getMessage() + "]"; + modelManager.deleteVolume(volume); + deletedVolumeNames.add(volume.getName()); } } - }); - guiHelper.clearStatusMessage(); + monitor.worked(1); + } + monitor.done(); + + // Display the success or failure info + if (deletedVolumeNames.size() == 0) { // No volume(s) deleted successfully + showErrorDialog(actionDesc, "volumes " + failedVolumes + " could not be delete! " + CoreConstants.NEWLINE + + "Error: [" + errorMessage + "]"); + } else { + String info = "Volumes " + deletedVolumeNames + " deleted successfully!"; + if (errorMessage != "") { + info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes + + " could not be deleted! [" + errorMessage + "]"; + } + showInfoDialog(actionDesc, info); + } } private void collectVolumeNames() { diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RemoveServerAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RemoveServerAction.java index 41fa377e..936de599 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RemoveServerAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RemoveServerAction.java @@ -25,10 +25,9 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -36,63 +35,52 @@ import com.gluster.storage.management.console.utils.GUIHelper; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.model.GlusterServer; -public class RemoveServerAction extends AbstractActionDelegate { +public class RemoveServerAction extends AbstractMonitoredActionDelegate { private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); private GUIHelper guiHelper = GUIHelper.getInstance(); @Override - protected void performAction(final IAction action) { - final Runnable removeServerThread = new Runnable() { - @Override - public void run() { - final String actionDesc = action.getDescription(); + protected void performAction(final IAction action, IProgressMonitor monitor) { + final String actionDesc = action.getDescription(); - Set<GlusterServer> selectedServers = guiHelper.getSelectedEntities(getWindow(), - GlusterServer.class); + Set<GlusterServer> selectedServers = guiHelper.getSelectedEntities(getWindow(), GlusterServer.class); - if (!validate(action, selectedServers)) { - return; - } + if (!validate(action, selectedServers)) { + return; + } - boolean confirmed = showConfirmDialog(actionDesc, "Are you sure you want to remove the server(s) " - + selectedServers + " ?"); - if (!confirmed) { - return; - } + boolean confirmed = showConfirmDialog(actionDesc, "Are you sure you want to remove the server(s) " + + selectedServers + " ?"); + if (!confirmed) { + return; + } - Set<GlusterServer> successServers = new HashSet<GlusterServer>(); - String errMsg = ""; - for (GlusterServer server : selectedServers) { - guiHelper.setStatusMessage("Removing server [" + server.getName() + "]..."); + Set<GlusterServer> successServers = new HashSet<GlusterServer>(); + String errMsg = ""; + monitor.beginTask("Removing Selected Servers...", selectedServers.size()); + for (GlusterServer server : selectedServers) { + monitor.setTaskName("Removing server [" + server.getName() + "]..."); - GlusterServersClient client = new GlusterServersClient(); - try { - client.removeServer(server.getName()); - GlusterServer glusterServer = (GlusterServer) server; - modelManager.removeGlusterServer(glusterServer); - successServers.add(server); - } catch (Exception e) { - if (!isServerExist(server.getName())) { - modelManager.removeGlusterServer((GlusterServer) server); - successServers.add(server); - } - errMsg += "[" + server.getName() + "] : " + e.getMessage(); - } + GlusterServersClient client = new GlusterServersClient(); + try { + client.removeServer(server.getName()); + GlusterServer glusterServer = (GlusterServer) server; + modelManager.removeGlusterServer(glusterServer); + successServers.add(server); + } catch (Exception e) { + if (!serverExists(server.getName())) { + modelManager.removeGlusterServer((GlusterServer) server); + successServers.add(server); } - guiHelper.clearStatusMessage(); - showStatusMessage(action.getDescription(), selectedServers, successServers, errMsg); + errMsg += "[" + server.getName() + "] : " + e.getMessage() + CoreConstants.NEWLINE; } - }; - - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { - @Override - public void run() { - Display.getDefault().asyncExec(removeServerThread); - } - }); + monitor.worked(1); + } + monitor.done(); + showStatusMessage(action.getDescription(), selectedServers, successServers, errMsg); } - private Boolean isServerExist(String serverName) { + private Boolean serverExists(String serverName) { try { GlusterServersClient client = new GlusterServersClient(); GlusterServer server = client.getGlusterServer(serverName); diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java index b0c9a72c..8b2b3f09 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java @@ -25,8 +25,6 @@ import java.util.Set; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -41,7 +39,6 @@ public class StartVolumeAction extends AbstractMonitoredActionDelegate { private List<Volume> selectedVolumes = new ArrayList<Volume>(); private List<String> selectedVolumeNames = new ArrayList<String>(); private List<String> offlineVolumeNames = new ArrayList<String>(); - private GUIHelper guiHelper = GUIHelper.getInstance(); @Override protected void performAction(IAction action, IProgressMonitor monitor) { @@ -70,9 +67,7 @@ public class StartVolumeAction extends AbstractMonitoredActionDelegate { continue; // skip if already started } try { - String message = "Starting volume [" + volume.getName() + "]"; - guiHelper.setStatusMessage(message); - monitor.setTaskName(message); + monitor.setTaskName("Starting volume [" + volume.getName() + "]"); vc.startVolume(volume.getName()); startedVolumes.add(volume.getName()); } catch (Exception e) { @@ -81,7 +76,7 @@ public class StartVolumeAction extends AbstractMonitoredActionDelegate { if (vc.getVolume(volume.getName()).getStatus() == VOLUME_STATUS.ONLINE) { modelManager.updateVolumeStatus(volume, VOLUME_STATUS.ONLINE); } - errorMessage += e.getMessage(); + errorMessage += e.getMessage() + CoreConstants.NEWLINE; } // Update the model by fetching latest volume info (NOT JUST STATUS) try { @@ -96,7 +91,7 @@ public class StartVolumeAction extends AbstractMonitoredActionDelegate { // Display the success or failure info if (startedVolumes.size() == 0) { // No volume(s) started successfully - showErrorDialog(actionDesc, "Following volumes " + failedVolumes + " could not be start!" + showErrorDialog(actionDesc, "Following volumes " + failedVolumes + " could not be started!" + CoreConstants.NEWLINE + "Error: [" + errorMessage + "]"); } else { String info = "Volumes " + startedVolumes + " started successfully!"; @@ -106,7 +101,6 @@ public class StartVolumeAction extends AbstractMonitoredActionDelegate { } showInfoDialog(actionDesc, info); } - guiHelper.clearStatusMessage(); } private void collectVolumeNames() { diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java index a449b08a..bda0e661 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java @@ -26,8 +26,6 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -42,7 +40,6 @@ public class StopVolumeAction extends AbstractMonitoredActionDelegate { private List<Volume> selectedVolumes = new ArrayList<Volume>(); private List<String> selectedVolumeNames = new ArrayList<String>(); private List<String> onlineVolumeNames = new ArrayList<String>(); - private GUIHelper guiHelper = GUIHelper.getInstance(); @Override protected void performAction(final IAction action, IProgressMonitor monitor) { @@ -82,9 +79,7 @@ public class StopVolumeAction extends AbstractMonitoredActionDelegate { continue; // skip if already stopped } try { - String message = "Stopping volume [" + volume.getName() + "]"; - guiHelper.setStatusMessage(message); - monitor.setTaskName(message); + monitor.setTaskName("Stopping volume [" + volume.getName() + "]"); vc.stopVolume(volume.getName()); // modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); stoppedVolumes.add(volume.getName()); @@ -94,7 +89,7 @@ public class StopVolumeAction extends AbstractMonitoredActionDelegate { if (vc.getVolume(volume.getName()).getStatus() == VOLUME_STATUS.OFFLINE) { modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); } - errorMessage += e.getMessage(); + errorMessage += e.getMessage() + CoreConstants.NEWLINE; } // Update the model by fetching latest volume info (NOT JUST STATUS) @@ -120,7 +115,6 @@ public class StopVolumeAction extends AbstractMonitoredActionDelegate { } showInfoDialog(actionDesc, info); } - guiHelper.clearStatusMessage(); } private void collectVolumeNames() { |
