summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--com.gluster.storage.management.gui/plugin.xml40
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java15
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java117
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java5
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java71
5 files changed, 235 insertions, 13 deletions
diff --git a/com.gluster.storage.management.gui/plugin.xml b/com.gluster.storage.management.gui/plugin.xml
index 2381d5f7..6e4d3459 100644
--- a/com.gluster.storage.management.gui/plugin.xml
+++ b/com.gluster.storage.management.gui/plugin.xml
@@ -44,6 +44,14 @@
name="Tasks in Progress"
restorable="true">
</view>
+ <view
+ allowMultiple="false"
+ class="com.gluster.storage.management.gui.views.DiscoveredServersView"
+ icon="icons/servers.png"
+ id="com.gluster.storage.management.gui.views.DiscoveredServersView"
+ name="Discovered Servers"
+ restorable="true">
+ </view>
</extension>
<extension
point="org.eclipse.ui.commands">
@@ -241,6 +249,22 @@
name="edit">
</groupMarker>
</menu>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.StartVolumeAction"
+ definitionId="com.gluster.storage.management.gui.commands.StartVolume"
+ icon="icons/volume-start.png"
+ id="com.gluster.storage.management.gui.actions.StartVolumeAction"
+ label="&amp;Start Volume(s)"
+ menubarPath="com.gluster.storage.management.gui.menu.volumes/volumes"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ toolbarPath="Normal"
+ tooltip="Start Volume(s)">
+ </action>
</actionSet>
<actionSet
description="Set of actions that can be performed on multiple Volumes"
@@ -626,8 +650,8 @@
relationship="right"
relative="org.eclipse.ui.editorss"
showTitle="false"
- standalone="true"
- visible="true">
+ standalone="false"
+ visible="false">
</view>
<view
closeable="true"
@@ -641,6 +665,18 @@
standalone="true"
visible="false">
</view>
+ <view
+ closeable="false"
+ id="com.gluster.storage.management.gui.views.DiscoveredServersView"
+ minimized="false"
+ moveable="false"
+ ratio="0.30f"
+ relationship="right"
+ relative="com.gluster.storage.management.gui.views.navigator"
+ showTitle="true"
+ standalone="false"
+ visible="false">
+ </view>
</perspectiveExtension>
</extension>
<extension
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
index 3206635d..dc8ee77b 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
@@ -19,14 +19,21 @@
package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PlatformUI;
+
+import com.gluster.storage.management.gui.views.DiscoveredServersView;
public class StartVolumeAction extends AbstractActionDelegate {
@Override
public void run(IAction action) {
- System.out.println("Running [" + this.getClass().getSimpleName() + "]");
+ PlatformUI
+ .getWorkbench()
+ .getActiveWorkbenchWindow()
+ .getActivePage()
+ .hideView(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
+ .findViewReference(DiscoveredServersView.ID));
+ System.out.println("After closing the view!");
}
@Override
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java
new file mode 100644
index 00000000..2969df29
--- /dev/null
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java
@@ -0,0 +1,117 @@
+/**
+ * DiscoveredServersView.java
+ *
+ * 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.gui.views;
+
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+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.gui.utils.GUIHelper;
+import com.gluster.storage.management.gui.views.details.ServersPage;
+import com.gluster.storage.management.gui.views.navigator.NavigationView;
+
+/**
+ *
+ */
+public class DiscoveredServersView extends ViewPart implements IDoubleClickListener, ISelectionListener {
+ public static final String ID = DiscoveredServersView.class.getName();
+ private static final GUIHelper guiHelper = GUIHelper.getInstance();
+ private EntityGroup<Server> servers;
+ private ServersPage page;
+
+ public DiscoveredServersView() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ if (servers == null) {
+ ISelection selection = getSite().getPage().getSelection();
+ if (selection instanceof TreeSelection) {
+ Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement();
+ if (selectedEntity instanceof EntityGroup) {
+ EntityGroup group = (EntityGroup) selectedEntity;
+ if (group.getEntityType() == Server.class) {
+ servers = group;
+ }
+ }
+ }
+ }
+ page = new ServersPage(parent, SWT.NONE, servers);
+
+ page.addDoubleClickListener(this);
+ getSite().getPage().addSelectionListener(this);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ page.setFocus();
+ }
+
+ @Override
+ public void doubleClick(DoubleClickEvent event) {
+ NavigationView clusterView = (NavigationView) guiHelper.getView(NavigationView.ID);
+ if (clusterView != null) {
+ clusterView.selectEntity((Entity) ((StructuredSelection) event.getSelection()).getFirstElement());
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+ * org.eclipse.jface.viewers.ISelection)
+ */
+ @Override
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ if (part instanceof NavigationView && selection instanceof TreeSelection) {
+ Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement();
+
+ if (servers == selectedEntity || selectedEntity == null || !(selectedEntity instanceof EntityGroup) || ((EntityGroup) selectedEntity).getEntityType() != Server.class) {
+ // entity selection has not changed. do nothing.
+ return;
+ }
+
+ servers = (EntityGroup<Server>) selectedEntity;
+ page.setInput(servers);
+ }
+ }
+}
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java
index eb2053dd..b736aa8e 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/ServersPage.java
@@ -98,6 +98,11 @@ public class ServersPage extends Composite {
}
});
}
+
+ public void setInput(EntityGroup<Server> servers) {
+ tableViewer.setInput(servers);
+ tableViewer.refresh();
+ }
public void addDoubleClickListener(IDoubleClickListener listener) {
tableViewer.addDoubleClickListener(listener);
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java
index 84fb9e99..704ea120 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/navigator/NavigationView.java
@@ -18,14 +18,24 @@
*******************************************************************************/
package com.gluster.storage.management.gui.views.navigator;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.model.BaseWorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.ViewPart;
@@ -33,15 +43,18 @@ import org.eclipse.ui.part.ViewPart;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.Entity;
+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.IClusterListener;
+import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.gui.views.DiscoveredServersView;
-public class NavigationView extends ViewPart {
+public class NavigationView extends ViewPart implements ISelectionListener {
public static final String ID = "com.gluster.storage.management.gui.views.navigator";
private GlusterDataModel model;
private TreeViewer treeViewer;
private IAdapterFactory adapterFactory = new ClusterAdapterFactory();
+ private Entity entity;
public NavigationView() {
super();
@@ -50,7 +63,7 @@ public class NavigationView extends ViewPart {
@Override
public void createPartControl(Composite parent) {
model = GlusterDataModelManager.getInstance().getModel();
-
+
treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
getSite().setSelectionProvider(treeViewer);
Platform.getAdapterManager().registerAdapters(adapterFactory, Entity.class);
@@ -60,19 +73,21 @@ public class NavigationView extends ViewPart {
treeViewer.expandAll();
// select the first element by default
treeViewer.setSelection(new StructuredSelection(model.getChildren().get(0)));
-
+
MenuManager menuManager = new MenuManager("&Gluster", "gluster.context.menu");
Menu contextMenu = menuManager.createContextMenu(treeViewer.getControl());
treeViewer.getTree().setMenu(contextMenu);
-
+
getSite().registerContextMenu(menuManager, treeViewer);
-
+
GlusterDataModelManager.getInstance().addClusterListener(new DefaultClusterListener() {
@Override
public void serverAdded(GlusterServer server) {
treeViewer.refresh();
}
});
+
+ getSite().getPage().addSelectionListener(this);
}
public void selectEntity(Entity entity) {
@@ -81,9 +96,51 @@ public class NavigationView extends ViewPart {
setFocus(); // this ensures that the "selection changed" event gets fired
}
-
@Override
public void setFocus() {
treeViewer.getControl().setFocus();
}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+ * org.eclipse.jface.viewers.ISelection)
+ */
+ @Override
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ if (part instanceof NavigationView && selection instanceof TreeSelection) {
+ Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement();
+
+ if (entity == selectedEntity || selectedEntity == null) {
+ // entity selection has not changed. do nothing.
+ return;
+ }
+
+ IViewReference[] viewReferences = getSite().getPage().getViewReferences();
+ for (final IViewReference viewReference : viewReferences) {
+ if (!viewReference.getId().equals(ID)) {
+ PlatformUI
+ .getWorkbench()
+ .getActiveWorkbenchWindow()
+ .getActivePage()
+ .hideView(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
+ .findViewReference(DiscoveredServersView.ID));
+ }
+ }
+
+ entity = selectedEntity;
+ if (entity instanceof EntityGroup) {
+ Class type = ((EntityGroup) entity).getEntityType();
+ if (type == Server.class) {
+ try {
+ getSite().getPage().showView(DiscoveredServersView.ID);
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
}