diff options
| author | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-04-29 03:52:40 -0700 |
|---|---|---|
| committer | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-04-29 03:52:40 -0700 |
| commit | 9c566f1fa5efc95ab0c929d7f0615a3dad06bad0 (patch) | |
| tree | ba99499dd29446b5a8791ba4577ee6368a5e7c48 /src | |
| parent | 5929eb521817c7081ef3c824e00f7cc8d25ccc86 (diff) | |
| parent | 744018af797001e84340600bec3fcfc18328dabf (diff) | |
Merged pull request #21 from Dhandapani/master.
Story #13: Remove Disk UI changes, Bug 2848 - Create volume not working
Diffstat (limited to 'src')
9 files changed, 158 insertions, 20 deletions
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java index 8d1eb624..8fa247a1 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java @@ -71,6 +71,15 @@ public class Cluster extends Entity { this.discoveredServers = autoDiscoveredServers; children.add(new EntityGroup<Server>("Discovered Servers", Server.class, this, autoDiscoveredServers)); } + + public EntityGroup<Server> getAutoDiscoveredServersEntityGroup() { + for(Entity entity : getChildren()) { + if(entity instanceof EntityGroup && ((EntityGroup)entity).getEntityType() == Server.class) { + return (EntityGroup<Server>)entity; + } + } + return null; + } public List<Volume> getVolumes() { return volumes; diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml index 97a60ad1..2c9ea50d 100644 --- a/src/com.gluster.storage.management.gui/plugin.xml +++ b/src/com.gluster.storage.management.gui/plugin.xml @@ -251,6 +251,12 @@ id="com.gluster.storage.management.gui.commands.MigrateDisk" name="Migrate Disk"> </command> + <command + categoryId="com.gluster.storage.management.gui.category" + description="Remove Disk" + id="com.gluster.storage.management.gui.commands.RemoveDisk" + name="Remove Disk"> + </command> </extension> <extension point="org.eclipse.ui.bindings"> @@ -577,6 +583,22 @@ toolbarPath="Normal" tooltip="Start Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.RemoveDiskAction" + definitionId="com.gluster.storage.management.gui.commands.RemoveDisk" + icon="icons/disk.png" + id="com.gluster.storage.management.gui.actions.RemoveDiskAction" + label="Remove Disk" + menubarPath="com.gluster.storage.management.gui.menu.volume/volume" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + toolbarPath="Normal" + tooltip="Remove Disk"> + </action> <menu id="com.gluster.storage.management.gui.menu.volume" label="&Gluster" diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java index d7731364..9ddb976a 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java @@ -47,7 +47,7 @@ public class DeleteVolumeAction extends AbstractActionDelegate { Integer deleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage( IImageKeys.VOLUME), warningMessage, MessageDialog.QUESTION, new String[] { "Cancel", - "Delete volume and it's data", "Delete volume, keep back-up of data" }, 2).open(); + "Delete volume, keep back-up of data", "Delete volume and it's data" }, 2).open(); if (deleteOption == 0) { return; } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionSetIDs.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionConstants.java index 6c54bae8..2f696709 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionSetIDs.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionConstants.java @@ -18,7 +18,7 @@ *******************************************************************************/ package com.gluster.storage.management.gui.actions; -public interface IActionSetIDs { +public interface IActionConstants { public static final String ACTION_SET_CLUSTER = "com.gluster.storage.management.gui.actionsets.gluster"; public static final String ACTION_SET_VOLUMES = "com.gluster.storage.management.gui.actionsets.volumes"; public static final String ACTION_SET_VOLUME = "com.gluster.storage.management.gui.actionsets.volume"; @@ -30,4 +30,7 @@ public interface IActionSetIDs { public static final String ACTION_SET_DISCOVERED_SERVER = "com.gluster.storage.management.gui.actionsets.serverdiscovered"; public static final String ACTION_SET_EDIT = "com.gluster.storage.management.gui.actionsets.edit"; + + public static final String COMMAND_CREATE_VOLUME = "com.gluster.storage.management.gui.commands.CreateVolume"; + public static final String COMMAND_ADD_SERVER = "com.gluster.storage.management.gui.commands.AddServer"; } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java new file mode 100644 index 00000000..19cf84f7 --- /dev/null +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java @@ -0,0 +1,65 @@ +package com.gluster.storage.management.gui.actions; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IWorkbenchPart; + +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.client.VolumesClient; +import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.model.Entity; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.gui.utils.GUIHelper; +import com.gluster.storage.management.gui.views.VolumeDisksView; + +public class RemoveDiskAction extends AbstractActionDelegate { + private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + private GUIHelper guiHelper = GUIHelper.getInstance(); + private List<Disk> disks; + + @Override + protected void performAction(IAction action) { + VolumesClient client = new VolumesClient(modelManager.getSecurityToken()); + // final Status status = client.removeDisk(); + } + + @Override + public void dispose() { + } + + @Override + public void selectionChanged(IAction action, ISelection selection) { + super.selectionChanged(action, selection); + + action.setEnabled(false); + Volume selectedVolume = (Volume)guiHelper.getSelectedEntity(window, Volume.class); + if (selectedVolume != null) { + // a volume is selected on navigation tree. Let's check if the currently open view is volume disks view + IWorkbenchPart view = guiHelper.getActiveView(); + if(view instanceof VolumeDisksView) { + // volume disks view is open. check if any disk is selected + disks = getSelectedDisks(selection); + action.setEnabled(disks.size() > 0); + } + } + } + + private List<Disk> getSelectedDisks(ISelection selection) { + List<Disk> selectedDisks = new ArrayList<Disk>(); + if (selection instanceof IStructuredSelection) { + Iterator<Object> iter = ((IStructuredSelection) selection).iterator(); + while (iter.hasNext()) { + Object selectedObj = iter.next(); + if (selectedObj instanceof Disk) { + selectedDisks.add((Disk)selectedObj); + } + } + } + return selectedDisks; + } +}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/toolbar/GlusterToolbarManager.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/toolbar/GlusterToolbarManager.java index a98c7862..cef0bf5d 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/toolbar/GlusterToolbarManager.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/toolbar/GlusterToolbarManager.java @@ -30,7 +30,7 @@ import com.gluster.storage.management.core.model.EntityGroup; 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.actions.IActionSetIDs; +import com.gluster.storage.management.gui.actions.IActionConstants; public class GlusterToolbarManager implements ToolbarManager { private enum ENTITY_TYPE { @@ -53,13 +53,13 @@ public class GlusterToolbarManager implements ToolbarManager { private Map<ENTITY_TYPE, String> createActionSetMap() { Map<ENTITY_TYPE, String> actionSetMap = new HashMap<GlusterToolbarManager.ENTITY_TYPE, String>(); - actionSetMap.put(ENTITY_TYPE.CLUSTER, IActionSetIDs.ACTION_SET_CLUSTER); - actionSetMap.put(ENTITY_TYPE.VOLUMES, IActionSetIDs.ACTION_SET_VOLUMES); - actionSetMap.put(ENTITY_TYPE.VOLUME, IActionSetIDs.ACTION_SET_VOLUME); - actionSetMap.put(ENTITY_TYPE.GLUSTER_SERVERS, IActionSetIDs.ACTION_SET_GLUSTER_SERVERS); - actionSetMap.put(ENTITY_TYPE.GLUSTER_SERVER, IActionSetIDs.ACTION_SET_GLUSTER_SERVER); - actionSetMap.put(ENTITY_TYPE.DISCOVERED_SERVERS, IActionSetIDs.ACTION_SET_DISCOVERED_SERVERS); - actionSetMap.put(ENTITY_TYPE.DISCOVERED_SERVER, IActionSetIDs.ACTION_SET_DISCOVERED_SERVER); + actionSetMap.put(ENTITY_TYPE.CLUSTER, IActionConstants.ACTION_SET_CLUSTER); + actionSetMap.put(ENTITY_TYPE.VOLUMES, IActionConstants.ACTION_SET_VOLUMES); + actionSetMap.put(ENTITY_TYPE.VOLUME, IActionConstants.ACTION_SET_VOLUME); + actionSetMap.put(ENTITY_TYPE.GLUSTER_SERVERS, IActionConstants.ACTION_SET_GLUSTER_SERVERS); + actionSetMap.put(ENTITY_TYPE.GLUSTER_SERVER, IActionConstants.ACTION_SET_GLUSTER_SERVER); + actionSetMap.put(ENTITY_TYPE.DISCOVERED_SERVERS, IActionConstants.ACTION_SET_DISCOVERED_SERVERS); + actionSetMap.put(ENTITY_TYPE.DISCOVERED_SERVER, IActionConstants.ACTION_SET_DISCOVERED_SERVER); return actionSetMap; } 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 d153a27c..89c5a78e 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,7 +18,9 @@ *******************************************************************************/ package com.gluster.storage.management.gui.utils; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; @@ -55,7 +57,9 @@ import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; +import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchSite; +import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.ExpansionAdapter; @@ -67,6 +71,8 @@ import org.eclipse.ui.forms.widgets.Section; 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.model.Entity; import com.gluster.storage.management.gui.Application; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.views.NavigationView; @@ -251,6 +257,10 @@ public class GUIHelper { } return null; } + + public IWorkbenchPart getActiveView() { + return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart(); + } public ControlDecoration createErrorDecoration(Control control) { ControlDecoration passwordErrorDecoration = new ControlDecoration(control, SWT.LEFT | SWT.TOP); @@ -349,7 +359,11 @@ public class GUIHelper { * @return The selected object of given type if found, else null */ public Object getSelectedEntity(IWorkbenchSite site, Class expectedType) { - ISelection selection = site.getWorkbenchWindow().getSelectionService().getSelection(NavigationView.ID); + return getSelectedEntity(site.getWorkbenchWindow(), expectedType); + } + + public Object getSelectedEntity(IWorkbenchWindow window, Class expectedType) { + ISelection selection = window.getSelectionService().getSelection(NavigationView.ID); if (selection instanceof IStructuredSelection) { Iterator<Object> iter = ((IStructuredSelection) selection).iterator(); while (iter.hasNext()) { @@ -361,6 +375,7 @@ public class GUIHelper { } return null; } + public void showProgressView() { try { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java index b2d2b93a..079d6bcf 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java @@ -25,18 +25,24 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ImageHyperlink; import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Cluster; +import com.gluster.storage.management.core.model.EntityGroup; +import com.gluster.storage.management.core.model.GlusterDataModel; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; +import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; import com.gluster.storage.management.gui.IImageKeys; +import com.gluster.storage.management.gui.actions.IActionConstants; import com.gluster.storage.management.gui.utils.GUIHelper; import com.gluster.storage.management.gui.views.details.tabcreators.PieChartViewerComposite; @@ -50,6 +56,7 @@ public class ClusterSummaryView extends ViewPart { private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); private ScrolledForm form; private Cluster cluster; + private GlusterDataModel model = GlusterDataModelManager.getInstance().getModel(); /* * (non-Javadoc) @@ -59,10 +66,9 @@ public class ClusterSummaryView extends ViewPart { @Override public void createPartControl(Composite parent) { if (cluster == null) { - //cluster = (Cluster)guiHelper.getSelectedEntity(getSite(), Cluster.class); - cluster = (Cluster)GlusterDataModelManager.getInstance().getModel().getChildren().get(0); + cluster = model.getCluster(); } - + createSections(parent); } @@ -75,7 +81,7 @@ public class ClusterSummaryView extends ViewPart { } return count; } - + private int getServerCountByStatus(Cluster cluster, SERVER_STATUS status) { int count = 0; for (GlusterServer server : cluster.getServers()) { @@ -105,12 +111,13 @@ public class ClusterSummaryView extends ViewPart { private void createStatusChart(FormToolkit toolkit, Composite section, Double[] values) { String[] categories = new String[] { "Online", "Offline" }; - PieChartViewerComposite chartViewerComposite = new PieChartViewerComposite(section, SWT.NONE, categories, values); + PieChartViewerComposite chartViewerComposite = new PieChartViewerComposite(section, SWT.NONE, categories, + values); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.widthHint = 250; data.heightHint = 250; - chartViewerComposite.setLayoutData(data); + chartViewerComposite.setLayoutData(data); } private void createActionsSection() { @@ -120,14 +127,30 @@ public class ClusterSummaryView extends ViewPart { imageHyperlink.setText("Create Volume"); imageHyperlink.setImage(guiHelper.getImage(IImageKeys.CREATE_VOLUME_BIG)); imageHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - // TODO: Override appropriate method and handle hyperlink event + @Override + public void linkActivated(HyperlinkEvent e) { + IHandlerService hs = (IHandlerService) getSite().getService(IHandlerService.class); + try { + hs.executeCommand(IActionConstants.COMMAND_CREATE_VOLUME, null); + } catch (Exception e1) { + e1.printStackTrace(); + } + } }); imageHyperlink = toolkit.createImageHyperlink(section, SWT.NONE); imageHyperlink.setText("Add Server(s)"); imageHyperlink.setImage(guiHelper.getImage(IImageKeys.ADD_SERVER_BIG)); imageHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - // TODO: Override appropriate method and handle hyperlink event + @Override + public void linkActivated(HyperlinkEvent e) { + // Open the "discovered servers" view by selecting the corresponding entity in the navigation view + EntityGroup<Server> autoDiscoveredServersEntityGroup = GlusterDataModelManager.getInstance().getModel() + .getCluster().getAutoDiscoveredServersEntityGroup(); + + NavigationView navigationView = (NavigationView) guiHelper.getView(NavigationView.ID); + navigationView.selectEntity(autoDiscoveredServersEntityGroup); + } }); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/AbstractDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/AbstractDisksPage.java index 593f7ba1..6b516019 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/AbstractDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/AbstractDisksPage.java @@ -94,6 +94,7 @@ public abstract class AbstractDisksPage extends Composite implements IEntityList setupPageLayout(); Text filterText = guiHelper.createFilterText(toolkit, this); setupDiskTableViewer(createTableViewerComposite(), filterText); + site.setSelectionProvider(tableViewer); tableViewer.setInput(disks); setupStatusCellEditor(); // creates hyperlinks for "unitialized" disks @@ -231,7 +232,7 @@ public abstract class AbstractDisksPage extends Composite implements IEntityList } private TableViewer createDiskTableViewer(Composite parent) { - tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); + tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI ); tableViewer.setLabelProvider(getTableLabelProvider()); tableViewer.setContentProvider(new ArrayContentProvider()); |
