summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-04-29 03:52:40 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-04-29 03:52:40 -0700
commit9c566f1fa5efc95ab0c929d7f0615a3dad06bad0 (patch)
treeba99499dd29446b5a8791ba4577ee6368a5e7c48 /src
parent5929eb521817c7081ef3c824e00f7cc8d25ccc86 (diff)
parent744018af797001e84340600bec3fcfc18328dabf (diff)
Merged pull request #21 from Dhandapani/master.
Story #13: Remove Disk UI changes, Bug 2848 - Create volume not working
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java9
-rw-r--r--src/com.gluster.storage.management.gui/plugin.xml22
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionConstants.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionSetIDs.java)5
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java65
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/toolbar/GlusterToolbarManager.java16
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java17
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java39
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/AbstractDisksPage.java3
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="&amp;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());