diff options
author | Shireesh Anjal <shireesh@gluster.com> | 2011-11-25 20:13:35 +0530 |
---|---|---|
committer | Shireesh Anjal <shireesh@gluster.com> | 2011-11-25 20:13:35 +0530 |
commit | 1142b0e41de39010de7845cf70d71dbb001fc1dc (patch) | |
tree | 3513487f65c1a7df47996bd2852393aceaac1b8a /src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views | |
parent | 92c52d8edf285945d31e446503fc742fde9dcc49 (diff) |
Renamed projects / packages com.gluster.* to org.gluster.*
Diffstat (limited to 'src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views')
38 files changed, 0 insertions, 6710 deletions
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterAdapterFactory.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterAdapterFactory.java deleted file mode 100644 index d904c8f3..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterAdapterFactory.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * 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.console.views; - -import org.eclipse.core.runtime.IAdapterFactory; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.model.IWorkbenchAdapter; -import org.eclipse.ui.plugin.AbstractUIPlugin; - -import com.gluster.storage.management.console.Application; -import com.gluster.storage.management.console.IImageKeys; -import com.gluster.storage.management.core.model.Cluster; -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.Server; -import com.gluster.storage.management.core.model.Volume; - -public class ClusterAdapterFactory implements IAdapterFactory { - private IWorkbenchAdapter entityAdapter = new IWorkbenchAdapter() { - - @Override - public Object getParent(Object o) { - return ((Entity) o).getParent(); - } - - @Override - public String getLabel(Object o) { - return ((Entity)o).getName(); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public ImageDescriptor getImageDescriptor(Object object) { - String iconPath = null; - - if(object instanceof GlusterDataModel || object instanceof Cluster) { - iconPath = IImageKeys.CLUSTER_16x16; - } - - if(object instanceof EntityGroup) { - Class<? extends Entity> entityType = ((EntityGroup) object).getEntityType(); - if(entityType == Volume.class) { - iconPath = IImageKeys.VOLUMES_16x16; - } else { - iconPath = IImageKeys.SERVERS_16x16; - } - } - - if(object instanceof Volume) { - iconPath = IImageKeys.VOLUME_16x16; - } - - if(object instanceof Server || object instanceof GlusterServer) { - iconPath = IImageKeys.SERVER_16x16; - } - - return AbstractUIPlugin.imageDescriptorFromPlugin( - Application.PLUGIN_ID, iconPath); - } - - @Override - public Object[] getChildren(Object o) { - return ((Entity)o).getChildren().toArray(); - } - }; - - @SuppressWarnings("rawtypes") - @Override - public Object getAdapter(Object adaptableObject, Class adapterType) { - if (adapterType == IWorkbenchAdapter.class) { - if (adaptableObject instanceof Entity) { - return entityAdapter; - } - } - return null; - } - - @SuppressWarnings("rawtypes") - @Override - public Class[] getAdapterList() { - return new Class[] { IWorkbenchAdapter.class }; - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java deleted file mode 100644 index 6be9f8d9..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ClusterSummaryView.java +++ /dev/null @@ -1,469 +0,0 @@ -/** - * DiscoveredServerView.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.console.views; - -import java.util.List; - -import org.eclipse.jface.fieldassist.ControlDecoration; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -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.console.Activator; -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.IImageKeys; -import com.gluster.storage.management.console.actions.ActionConstants; -import com.gluster.storage.management.console.preferences.PreferenceConstants; -import com.gluster.storage.management.console.utils.ChartUtil; -import com.gluster.storage.management.console.utils.ChartUtil.ChartPeriodLinkListener; -import com.gluster.storage.management.console.utils.ChartViewerComposite; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.constants.GlusterConstants; -import com.gluster.storage.management.core.model.Alert; -import com.gluster.storage.management.core.model.Cluster; -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.GlusterDataModel; -import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.model.Server.SERVER_STATUS; -import com.gluster.storage.management.core.model.ServerStats; -import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.model.TaskInfo; - -/** - * - */ -public class ClusterSummaryView extends ViewPart { - public static final String ID = ClusterSummaryView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private ScrolledForm form; - private Cluster cluster; - private Composite cpuChartSection; - private Composite networkChartSection; - private GlusterDataModel model = GlusterDataModelManager.getInstance().getModel(); - private ClusterListener clusterListener; - private static final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); - private Composite alertsSection; - private Composite tasksSection; - private static final ChartUtil chartUtil = ChartUtil.getInstance(); - private IPropertyChangeListener propertyChangeListener; - private Label onlineServerCountLabel; - private Label offlineServerCountLabel; - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @Override - public void createPartControl(Composite parent) { - if (cluster == null) { - cluster = model.getCluster(); - } - setPartName("Summary"); - createSections(parent); - - createListeners(); - } - - private void createListeners() { - createClusterListener(); - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - - createPropertyChangeListener(); - preferenceStore.addPropertyChangeListener(propertyChangeListener ); - } - - private void createPropertyChangeListener() { - propertyChangeListener = new IPropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent event) { - String preferenceName = event.getProperty(); - GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); - if(preferenceName.equals(PreferenceConstants.P_CPU_AGGREGATED_CHART_PERIOD)) { - modelManager.initializeAggregatedCpuStats(cluster); - String cpuStatsPeriod = (String)event.getNewValue(); - refreshChartSection(cpuChartSection, cluster.getAggregatedCpuStats(), cpuStatsPeriod, "%", 100, 4, - chartUtil.new CpuChartPeriodLinkListener(null, cpuStatsPeriod, toolkit), 2); - } else if(preferenceName.equals(PreferenceConstants.P_NETWORK_AGGREGATED_CHART_PERIOD)) { - modelManager.initializeAggregatedNetworkStats(cluster); - String networkStatsPeriod = (String)event.getNewValue(); - refreshChartSection(networkChartSection, cluster.getAggregatedNetworkStats(), networkStatsPeriod, "KiB/s", -1, - 4, chartUtil.new NetworkChartPeriodLinkListener(null, networkStatsPeriod, toolkit), 2); - } - } - }; - } - - private void createClusterListener() { - clusterListener = new DefaultClusterListener() { - @Override - public void aggregatedStatsChanged() { - super.aggregatedStatsChanged(); - refreshCharts(); - populateOnlineOfflineServerCount(); - } - - @Override - public void alertsGenerated() { - super.alertsGenerated(); - guiHelper.clearSection(alertsSection); - populateAlerts(); - } - - @Override - public void taskAdded(TaskInfo taskInfo) { - super.taskAdded(taskInfo); - updateTaskSection(); - } - - @Override - public void taskRemoved(TaskInfo taskInfo) { - super.taskRemoved(taskInfo); - updateTaskSection(); - } - - @Override - public void taskUpdated(TaskInfo taskInfo) { - super.taskUpdated(taskInfo); - updateTaskSection(); - } - - private void updateTaskSection() { - guiHelper.clearSection(tasksSection); - populateTasksSection(); - } - }; - } - - @Override - public void dispose() { - super.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - preferenceStore.removePropertyChangeListener(propertyChangeListener); - } - - private void refreshCharts() { - String cpuStatsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_AGGREGATED_CHART_PERIOD); - String networkStatsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_AGGREGATED_CHART_PERIOD); - refreshChartSection(cpuChartSection, cluster.getAggregatedCpuStats(), cpuStatsPeriod, "%", 100, 4, - chartUtil.new CpuChartPeriodLinkListener(null, cpuStatsPeriod, toolkit), 2); - refreshChartSection(networkChartSection, cluster.getAggregatedNetworkStats(), networkStatsPeriod, "KiB/s", -1, - 4, chartUtil.new NetworkChartPeriodLinkListener(null, networkStatsPeriod, toolkit), 2); - } - - private int getServerCountByStatus(Cluster cluster, SERVER_STATUS status) { - int count = 0; - for (GlusterServer server : cluster.getServers()) { - if (server.getStatus() == status) { - count++; - } - } - return count; - } - - private void createServersSection() { - Composite section = guiHelper.createSection(form, toolkit, "Servers", null, 2, false); - toolkit.createLabel(section, "Online : "); - onlineServerCountLabel = toolkit.createLabel(section, ""); - - toolkit.createLabel(section, "Offline : "); - offlineServerCountLabel = toolkit.createLabel(section, ""); - populateOnlineOfflineServerCount(); - } - - private void populateOnlineOfflineServerCount() { - int onlineServerCount = getServerCountByStatus(cluster, SERVER_STATUS.ONLINE); - int offlineServerCount = getServerCountByStatus(cluster, SERVER_STATUS.OFFLINE); - onlineServerCountLabel.setText("" + onlineServerCount); - onlineServerCountLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN)); - offlineServerCountLabel.setText("" + offlineServerCount); - offlineServerCountLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); - } - - - private void createDiskSpaceSection() { - Composite section = guiHelper.createSection(form, toolkit, "Disk Space", null, 3, false); - if (cluster.getServers().size() == 0) { - toolkit.createLabel(section, "This section will be populated after at least" + CoreConstants.NEWLINE - + "one server is added to the storage cloud."); - return; - } - - double totalDiskSpace = cluster.getTotalDiskSpace(); - double diskSpaceInUse = cluster.getDiskSpaceInUse(); - Double[] values = new Double[] { diskSpaceInUse / 1024, (totalDiskSpace - diskSpaceInUse) / 1024 }; - createDiskSpaceChart(section, values); - } - - private void createDiskSpaceChart(Composite section, Double[] values) { - String[] categories = new String[] { "Used Space (GB)", "Free Space (GB)" }; - ChartViewerComposite chartViewerComposite = new ChartViewerComposite(section, SWT.NONE, categories, values); - - GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); - data.widthHint = 400; - data.heightHint = 180; - data.verticalAlignment = SWT.CENTER; - chartViewerComposite.setLayoutData(data); - } - - private void createAlertsSection() { - alertsSection = guiHelper.createSection(form, toolkit, "Alerts", null, 1, false); - populateAlerts(); - } - - private void populateAlerts() { - List<Alert> alerts = cluster.getAlerts(); - for (Alert alert : alerts) { - addAlertLabel(alertsSection, alert); - } - alertsSection.layout(); - form.reflow(true); - } - - private void addAlertLabel(Composite section, Alert alert) { - CLabel lblAlert = new CLabel(section, SWT.FLAT); - GridData layoutData = new GridData(); - layoutData.widthHint = 400; - layoutData.horizontalIndent = 20; - lblAlert.setLayoutData(layoutData); - - Image alertImage = null; - switch (alert.getType()) { - case OFFLINE_VOLUME_BRICKS_ALERT: - alertImage = guiHelper.getImage(IImageKeys.BRICK_OFFLINE_22x22); - break; - case DISK_USAGE_ALERT: - alertImage = guiHelper.getImage(IImageKeys.LOW_DISK_SPACE_22x22); - break; - case OFFLINE_SERVERS_ALERT: - alertImage = guiHelper.getImage(IImageKeys.SERVER_OFFLINE_22x22); - break; - case MEMORY_USAGE_ALERT: - alertImage = guiHelper.getImage(IImageKeys.MEMORY_USAGE_ALERT_22x22); - break; - case CPU_USAGE_ALERT: - alertImage = guiHelper.getImage(IImageKeys.SERVER_WARNING_22x22); - break; - case OFFLINE_VOLUME_ALERT: - alertImage = guiHelper.getImage(IImageKeys.VOLUME_OFFLINE_22x22); - break; - } - lblAlert.setText(alert.getMessage()); - ControlDecoration dec = new ControlDecoration(lblAlert, SWT.LEFT); - dec.setImage(alertImage); - lblAlert.redraw(); - } - - private void createActionsSection() { - Composite section = guiHelper.createSection(form, toolkit, "Actions", null, 1, false); - - ImageHyperlink imageHyperlink = toolkit.createImageHyperlink(section, SWT.NONE); - imageHyperlink.setText("Create Volume"); - imageHyperlink.setImage(guiHelper.getImage(IImageKeys.CREATE_VOLUME_48x48)); - imageHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - @Override - public void linkActivated(HyperlinkEvent e) { - IHandlerService hs = (IHandlerService) getSite().getService(IHandlerService.class); - try { - hs.executeCommand(ActionConstants.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_48x48)); - imageHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - @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().getEntityGroup(Server.class); - - NavigationView navigationView = (NavigationView) guiHelper.getView(NavigationView.ID); - navigationView.selectEntity(autoDiscoveredServersEntityGroup); - } - }); - } - - private void createSections(Composite parent) { - form = guiHelper.setupForm(parent, toolkit, "Cluster Summary"); - - if (cluster.getServers().size() > 0 - && (cluster.getAggregatedCpuStats().getRows() == null || cluster.getAggregatedNetworkStats().getRows() == null)) { - // cluster has servers, but stats are null. Happens when user logs in to a new cluster, ' - // and then adds the first server. - GlusterDataModelManager.getInstance().initializeAggregatedCpuStats(cluster); - GlusterDataModelManager.getInstance().initializeAggregatedNetworkStats(cluster); - } - - createServersSection(); - createDiskSpaceSection(); - createCPUUsageSection(); - createNetworkUsageSection(); - createActionsSection(); - createAlertsSection(); - createTasksSection(); - - parent.layout(); // IMP: lays out the form properly - } - - private Composite createAreaChartSection(ServerStats stats, String sectionTitle, int dataColumnIndex, String unit, String timestampFormat, ChartPeriodLinkListener listener, double maxValue, int chartLinkColumnCount) { - Composite section = guiHelper.createSection(form, toolkit, sectionTitle, null, 1, false); - if (cluster.getServers().size() == 0) { - toolkit.createLabel(section, "This section will be populated after at least" + CoreConstants.NEWLINE - + "one server is added to the storage cloud."); - return section; - } - - ChartUtil.getInstance().createAreaChart(toolkit, section, stats, dataColumnIndex, unit, timestampFormat, listener, maxValue, chartLinkColumnCount); - return section; - } - - private void createCPUUsageSection() { - IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); - String cpuStatsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_AGGREGATED_CHART_PERIOD); - - // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. - cpuChartSection = createAreaChartSection(cluster.getAggregatedCpuStats(), "CPU Usage (Aggregated)", 2, "%", - getTimestampFormatForPeriod(cpuStatsPeriod), chartUtil.new CpuChartPeriodLinkListener(null, - cpuStatsPeriod, toolkit), 100, 4); - } - - private String getTimestampFormatForPeriod(String statsPeriod) { - if(statsPeriod.equals(GlusterConstants.STATS_PERIOD_1DAY)) { - return "HH:mm"; - } else if (statsPeriod.equals(GlusterConstants.STATS_PERIOD_1WEEK)) { - return "dd-MMM HH:mm"; - } else { - return "dd-MMM"; - } - } - - private void createNetworkUsageSection() { - IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); - String networkStatsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_AGGREGATED_CHART_PERIOD); - - // in case of network usage, there are three elements in usage data: received, transmitted and total. we use total. - networkChartSection = createAreaChartSection(cluster.getAggregatedNetworkStats(), "Network Usage (Aggregated)", - 2, "KiB/s", getTimestampFormatForPeriod(networkStatsPeriod), - chartUtil.new NetworkChartPeriodLinkListener(null, networkStatsPeriod, toolkit), -1, 4); - } - - private void createTasksSection() { - tasksSection = guiHelper.createSection(form, toolkit, CoreConstants.RUNNING_TASKS, null, 1, false); - populateTasksSection(); - } - - private void populateTasksSection() { - for (TaskInfo taskInfo : cluster.getTaskInfoList()) { - if (taskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS) { - addTaskLabel(tasksSection, taskInfo); - } - } - tasksSection.layout(); - form.reflow(true); - } - - private void addTaskLabel(Composite section, TaskInfo taskInfo) { - //TODO: create link and open the task progress view - CLabel lblAlert = new CLabel(section, SWT.NONE); - - Image taskImage = null; - switch(taskInfo.getType()) { - case DISK_FORMAT: - taskImage = guiHelper.getImage(IImageKeys.DISK_INITIALIZING_22x22); - break; - case BRICK_MIGRATE: - taskImage = guiHelper.getImage(IImageKeys.BRICK_MIGRATE_22x22); - break; - case VOLUME_REBALANCE: - taskImage = guiHelper.getImage(IImageKeys.VOLUME_REBALANCE_22x22); - break; - } - - String description = taskInfo.getDescription(); - switch (taskInfo.getStatus().getCode()) { - case Status.STATUS_CODE_PAUSE: - description += " (paused)"; - break; - case Status.STATUS_CODE_COMMIT_PENDING: - description += " (commit pending)"; - break; - case Status.STATUS_CODE_FAILURE: - description += " (failed)"; - break; - } - lblAlert.setText(description); - lblAlert.setImage(taskImage); - lblAlert.redraw(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - if (form != null) { - form.setFocus(); - } - } - - private void refreshChartSection(Composite section, ServerStats stats, String statsPeriod, String unit, - double maxValue, int columnCount, ChartPeriodLinkListener linkListener, int dataColumnIndex) { - if(stats == null) { - return; - } - - for (Control control : section.getChildren()) { - if (!control.isDisposed()) { - control.dispose(); - } - } - chartUtil.createAreaChart(toolkit, section, stats, dataColumnIndex, unit, - getTimestampFormatForPeriod(statsPeriod), linkListener, maxValue, columnCount); - section.layout(); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DiscoveredServerView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DiscoveredServerView.java deleted file mode 100644 index abc9ec2f..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DiscoveredServerView.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * DiscoveredServerView.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.console.views; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.utils.NumberUtil; - -/** - * @author root - * - */ -public class DiscoveredServerView extends ViewPart { - public static final String ID = DiscoveredServerView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private ScrolledForm form; - private Server server; - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @Override - public void createPartControl(Composite parent) { - if (server == null) { - server = guiHelper.getSelectedEntity(getSite(), Server.class); - } - createSections(parent); - } - - private void createServerSummarySection() { - Composite section = guiHelper.createSection(form, toolkit, "Summary", null, 2, false); - - toolkit.createLabel(section, "Number of CPUs: ", SWT.NONE); - toolkit.createLabel(section, "" + server.getNumOfCPUs(), SWT.NONE); - - toolkit.createLabel(section, "Total Memory (GB): ", SWT.NONE); - toolkit.createLabel(section, "" + NumberUtil.formatNumber((server.getTotalMemory() / 1024)), SWT.NONE); - - toolkit.createLabel(section, "Total Disk Space (GB): ", SWT.NONE); - toolkit.createLabel(section, "" + NumberUtil.formatNumber((server.getTotalDiskSpace() / 1024)), SWT.NONE); - } - - private void createSections(Composite parent) { - String serverName = server.getName(); - form = guiHelper.setupForm(parent, toolkit, "Discovered Server Summary [" + serverName + "]"); - createServerSummarySection(); - - parent.layout(); // IMP: lays out the form properly - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - if (form != null) { - form.setFocus(); - } - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DiscoveredServersView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DiscoveredServersView.java deleted file mode 100644 index ab3cd556..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DiscoveredServersView.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * 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.console.views; - -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.ServersPage; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.core.model.EntityGroup; -import com.gluster.storage.management.core.model.Server; - -/** - * - */ -public class DiscoveredServersView extends ViewPart implements IDoubleClickListener { - public static final String ID = DiscoveredServersView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private EntityGroup<Server> servers; - private ServersPage page; - - public DiscoveredServersView() { - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void createPartControl(Composite parent) { - if (servers == null) { - Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); - if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Server.class) { - servers = (EntityGroup<Server>)selectedObj; - } - } - - page = new ServersPage(parent, getSite(), servers); - page.addDoubleClickListener(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()); - } - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DisksView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DisksView.java deleted file mode 100644 index 7ba1a88a..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/DisksView.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gluster.storage.management.console.views; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.DisksPage; -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.EntityGroup; -import com.gluster.storage.management.core.model.GlusterServer; - -public class DisksView extends ViewPart { - public static final String ID = DisksView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private EntityGroup<GlusterServer> servers; - private DisksPage page; - - @SuppressWarnings("unchecked") - @Override - public void createPartControl(Composite parent) { - if (servers == null) { - servers = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); - } - - page = new DisksPage(parent, SWT.NONE, getSite(), getAllDisks(servers)); - //page.layout(); // IMP: lays out the form properly - } - - private List<Disk> getAllDisks(EntityGroup<GlusterServer> servers) { - List<Disk> disks = new ArrayList<Disk>(); - for(GlusterServer server : servers.getEntities()) { - disks.addAll(server.getDisks()); - } - return disks; - } - - @Override - public void setFocus() { - page.setFocus(); - } -}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerDisksView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerDisksView.java deleted file mode 100644 index d3cd98e8..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerDisksView.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * GlusterServerDisksView.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.console.views; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.ServerDisksPage; -import com.gluster.storage.management.core.model.ClusterListener; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.Event.EVENT_TYPE; -import com.gluster.storage.management.core.model.GlusterServer; - -public class GlusterServerDisksView extends ViewPart { - public static final String ID = GlusterServerDisksView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private ClusterListener clusterListener; - private GlusterServer server; - private ServerDisksPage page; - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @Override - public void createPartControl(Composite parent) { - if (server == null) { - server = guiHelper.getSelectedEntity(getSite(), GlusterServer.class); - } - page = new ServerDisksPage(parent, SWT.NONE, getSite(), server.getDisks()); - - final ViewPart thisView = this; - clusterListener = new DefaultClusterListener() { - @Override - public void serverChanged(GlusterServer server, Event event) { - super.serverChanged(server, event); - if(event.getEventType() == EVENT_TYPE.GLUSTER_SERVER_CHANGED) { - if(!server.isOnline()) { - getViewSite().getPage().hideView(thisView); - } - } - } - }; - - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - - parent.layout(); // IMP: lays out the form properly - } - - @Override - public void dispose() { - super.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - page.setFocus(); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerLogsView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerLogsView.java deleted file mode 100644 index 33c85be2..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerLogsView.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * GlusterServerLogsView.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.console.views; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.ServerLogsPage; -import com.gluster.storage.management.core.model.GlusterServer; - -public class GlusterServerLogsView extends ViewPart { - public static final String ID = GlusterServerLogsView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private GlusterServer server; - private ServerLogsPage page; - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @Override - public void createPartControl(Composite parent) { - if (server == null) { - server = guiHelper.getSelectedEntity(getSite(), GlusterServer.class); - } - - page = new ServerLogsPage(parent, SWT.NONE, server); - - parent.layout(); // IMP: lays out the form properly - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - page.setFocus(); - } -} - diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerSummaryView.java deleted file mode 100644 index 08344f84..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServerSummaryView.java +++ /dev/null @@ -1,544 +0,0 @@ -/** - * GlusterServerSummaryView.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.console.views; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.birt.chart.util.CDateTime; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.ProgressBar; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.Hyperlink; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.client.GlusterServersClient; -import com.gluster.storage.management.console.Activator; -import com.gluster.storage.management.console.ConsoleConstants; -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.IImageKeys; -import com.gluster.storage.management.console.NetworkInterfaceTableLabelProvider; -import com.gluster.storage.management.console.preferences.PreferenceConstants; -import com.gluster.storage.management.console.toolbar.GlusterToolbarManager; -import com.gluster.storage.management.console.utils.ChartUtil; -import com.gluster.storage.management.console.utils.ChartUtil.ChartPeriodLinkListener; -import com.gluster.storage.management.console.utils.ChartViewerComposite; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.utils.GlusterLogger; -import com.gluster.storage.management.core.model.ClusterListener; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.Event.EVENT_TYPE; -import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.Server.SERVER_STATUS; -import com.gluster.storage.management.core.model.ServerStats; -import com.gluster.storage.management.core.model.ServerStatsRow; -import com.gluster.storage.management.core.utils.NumberUtil; -import com.ibm.icu.util.Calendar; -import com.richclientgui.toolbox.gauges.CoolGauge; - -public class GlusterServerSummaryView extends ViewPart { - public static final String ID = GlusterServerSummaryView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private ScrolledForm form; - private GlusterServer server; - private ClusterListener clusterListener; - private static final int CHART_WIDTH = 350; - private static final int CHART_HEIGHT = 250; - private static final GlusterLogger logger = GlusterLogger.getInstance(); - private static final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); - - public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES { - INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY - }; - - private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address", - "Netmask", "Gateway" }; - private CoolGauge cpuGauge; - private IPropertyChangeListener propertyChangeListener; - private Composite cpuUsageSection; - private Composite networkUsageSection; - private Composite memoryUsageSection; - private static final ChartUtil chartUtil = ChartUtil.getInstance(); - private Composite serverSummarySection; - private Label numCpus; - private ProgressBar memoryUsageBar; - private ProgressBar diskUsageBar; - private CLabel lblServerStatus; - - @Override - public void createPartControl(Composite parent) { - if (server == null) { - server = guiHelper.getSelectedEntity(getSite(), GlusterServer.class); - } - setPartName("Summary"); - createSections(parent); - - createListeners(); - } - - private void createListeners() { - // Refresh the server details whenever the server has changed - createClusterListener(); - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - - createPropertyChangeListener(); - preferenceStore.addPropertyChangeListener(propertyChangeListener); - } - - private void createPropertyChangeListener() { - propertyChangeListener = new IPropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent event) { - String propertyName = event.getProperty(); - if(propertyName.equals(PreferenceConstants.P_CPU_CHART_PERIOD)) { - refreshCpuChart(); - } else if(propertyName.equals(PreferenceConstants.P_MEM_CHART_PERIOD)) { - refreshMemoryChart(); - } else if (propertyName.equals(PreferenceConstants.P_NETWORK_CHART_PERIOD) - || propertyName.equals(PreferenceConstants.P_DEFAULT_NETWORK_INTERFACE_PFX + server.getName())) { - refreshNetworkChart(); - } - } - }; - } - - private void createClusterListener() { - final GlusterToolbarManager toolbarManager = new GlusterToolbarManager(getSite().getWorkbenchWindow()); - final GlusterServer thisServer = server; - clusterListener = new DefaultClusterListener() { - - @Override - public void serverChanged(GlusterServer server, Event event) { - if (event.getEventType() == EVENT_TYPE.GLUSTER_SERVER_CHANGED && server == thisServer) { - updateServerDetails(); - toolbarManager.updateToolbar(server); - refreshCharts(); - } - } - }; - } - - private void refreshCharts() { - refreshCpuChart(); - refreshMemoryChart(); - refreshNetworkChart(); - } - - private void refreshNetworkChart() { - guiHelper.clearSection(networkUsageSection); - String statsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_CHART_PERIOD); - String networkInterface = preferenceStore.getString(PreferenceConstants.P_DEFAULT_NETWORK_INTERFACE_PFX + server.getName()); - if(networkInterface == null || networkInterface.isEmpty()) { - networkInterface = server.getNetworkInterfaces().get(0).getName(); - } - ServerStats stats = new GlusterServersClient().getNetworkStats(server.getName(), networkInterface, statsPeriod); - chartUtil.refreshChartSection(toolkit, networkUsageSection, stats, statsPeriod, "KiB/s", -1, 5, chartUtil.new NetworkChartPeriodLinkListener(server, statsPeriod, toolkit), 2); - } - - private void refreshMemoryChart() { - guiHelper.clearSection(memoryUsageSection); - String statsPeriod = preferenceStore.getString(PreferenceConstants.P_MEM_CHART_PERIOD); - ServerStats stats = new GlusterServersClient().getMemoryStats(server.getName(), statsPeriod); - chartUtil.refreshChartSection(toolkit, memoryUsageSection, stats, statsPeriod, "%", 100, 4, chartUtil.new MemoryChartPeriodLinkListener(server.getName(), statsPeriod, toolkit), 0); - } - - private void refreshCpuChart() { - guiHelper.clearSection(cpuUsageSection); - String statsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_CHART_PERIOD); - ServerStats stats = new GlusterServersClient().getCpuStats(server.getName(), statsPeriod); - chartUtil.refreshChartSection(toolkit, cpuUsageSection, stats, statsPeriod, "%", 100, 4, - chartUtil.new CpuChartPeriodLinkListener(server.getName(), statsPeriod, toolkit), 2); - } - - private void updateServerDetails() { - // TODO: Update the server details (cpu usage, memory usage) - populateServerSummarySection(server); - - } - - @Override - public void dispose() { - super.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - preferenceStore.removePropertyChangeListener(propertyChangeListener); - } - - private void createAreaChart(Composite section, Calendar timestamps[], Double values[], String unit) { - ChartViewerComposite chartViewerComposite = new ChartViewerComposite(section, SWT.NONE, timestamps, values, unit, "HH:mm", 100); - GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); - data.widthHint = CHART_WIDTH; - data.heightHint = CHART_HEIGHT; - chartViewerComposite.setLayoutData(data); - } - - private void extractChartData(ServerStats stats, List<Calendar> timestamps, List<Double> data, int dataColumnIndex) { - for(ServerStatsRow row : stats.getRows()) { - Double cpuUsage = row.getUsageData().get(dataColumnIndex); - if(!cpuUsage.isNaN()) { - timestamps.add(new CDateTime(row.getTimestamp() * 1000)); - data.add(cpuUsage); - } - } - } - - private void createAreaChartSection(ServerStats stats, String sectionTitle, int dataColumnIndex, String unit) { - List<Calendar> timestamps = new ArrayList<Calendar>(); - List<Double> data = new ArrayList<Double>(); - extractChartData(stats, timestamps, data, dataColumnIndex); - - if(timestamps.size() == 0) { - // Log a message saying no CPU stats available - return; - } - - Composite section = guiHelper.createSection(form, toolkit, sectionTitle, null, 1, false); - createAreaChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0]), unit); - -// Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700), -// new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900), -// new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100), -// new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300), -// new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500), -// new CDateTime(1000l*1310473800) }; -// -// Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 89.31d, 57.39d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 21.43d, 16.45d, 14.86d, 15.27d }; -// createLineChart(section, timestamps, values, "%"); - createChartLinks(section, 4); - } - - private void createMemoryUsageSection() { - String memStatsPeriod = preferenceStore.getString(PreferenceConstants.P_MEM_CHART_PERIOD); - memoryUsageSection = guiHelper.createSection(form, toolkit, "Memory Usage", null, 1, false); - - ServerStats stats; - try { - stats = new GlusterServersClient().getMemoryStats(server.getName(), memStatsPeriod); - } catch(Exception e) { - logger.error("Couldn't fetch memory usage statistics for server [" + server.getName() + "]", e); - toolkit.createLabel(memoryUsageSection, "Couldn't fetch memory usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); - return; - } - - // in case of memory usage, there are four elements in usage data: user, free, cache, buffer and total. we use "user". - ChartUtil chartUtil = ChartUtil.getInstance(); - chartUtil.createAreaChart(toolkit, memoryUsageSection, stats, 0, "%", chartUtil - .getTimestampFormatForPeriod(memStatsPeriod), - chartUtil.new MemoryChartPeriodLinkListener(server.getName(), memStatsPeriod, toolkit), 100, 4); - } - - private void createCPUUsageSection() { - String cpuStatsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_CHART_PERIOD); - cpuUsageSection = guiHelper.createSection(form, toolkit, "CPU Usage", null, 1, false); - - ServerStats stats; - try { - stats = new GlusterServersClient().getCpuStats(server.getName(), cpuStatsPeriod); - } catch(Exception e) { - logger.error("Couldn't fetch CPU usage statistics for server [" + server.getName() + "]", e); - toolkit.createLabel(cpuUsageSection, "Couldn't fetch CPU usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); - return; - } - - // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. - chartUtil.createAreaChart(toolkit, cpuUsageSection, stats, 2, "%", chartUtil - .getTimestampFormatForPeriod(cpuStatsPeriod), - chartUtil.new CpuChartPeriodLinkListener(server.getName(), cpuStatsPeriod, toolkit), 100, 4); - } - - private void createNetworkUsageSection() { - final String networkStatsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_CHART_PERIOD); - networkUsageSection = guiHelper.createSection(form, toolkit, "Network Usage", null, 1, false); - - String networkInterface = server.getNetworkInterfaces().get(0).getName(); - ServerStats stats; - try { - stats = new GlusterServersClient().getNetworkStats(server.getName(), networkInterface, networkStatsPeriod); - } catch(Exception e) { - logger.error("Couldn't fetch Network usage statistics for server [" + server.getName() + "] network interface [" + networkInterface + "]", e); - toolkit.createLabel(networkUsageSection, "Couldn't fetch CPU usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); - return; - } - - // in case of network usage, there are three elements in usage data: received, transmitted and total. we use total. - final ChartUtil chartUtil = ChartUtil.getInstance(); - final ChartPeriodLinkListener networkChartPeriodLinkListener = chartUtil.new NetworkChartPeriodLinkListener(server, networkStatsPeriod, toolkit); - chartUtil.createAreaChart(toolkit, networkUsageSection, stats, 2, "KiB/s", chartUtil - .getTimestampFormatForPeriod(networkStatsPeriod), - networkChartPeriodLinkListener , -1, 5); - } - - private Composite createChartLinks(Composite section, int columnCount) { - GridLayout layout = new org.eclipse.swt.layout.GridLayout(columnCount, false); - layout.marginBottom = 0; - layout.marginTop = 0; - layout.marginLeft = (CHART_WIDTH - (50*columnCount)) / 2; - Composite graphComposite = toolkit.createComposite(section, SWT.NONE); - graphComposite.setLayout(layout); - GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); - data.widthHint = CHART_WIDTH; - graphComposite.setLayoutData(data); - - Label label1 = toolkit.createLabel(graphComposite, "1 day"); - Hyperlink link1 = toolkit.createHyperlink(graphComposite, "1 week", SWT.NONE); - Hyperlink link2 = toolkit.createHyperlink(graphComposite, "1 month", SWT.NONE); - Hyperlink link3 = toolkit.createHyperlink(graphComposite, "1 year", SWT.NONE); - - return graphComposite; - } - - private void createSections(Composite parent) { - String serverName = server.getName(); - form = guiHelper.setupForm(parent, toolkit, "Server Summary [" + serverName + "]"); - createServerSummarySection(server, toolkit, form); - - if (server.getStatus() == SERVER_STATUS.ONLINE) { - try { - new ProgressMonitorDialog(getSite().getShell()).run(false, false, new IRunnableWithProgress() { - - @Override - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - monitor.beginTask("Creating Server Summary View", 4); - monitor.setTaskName("Creating Memory Usage Section"); - createMemoryUsageSection(); - monitor.worked(1); - - monitor.setTaskName("Creating Network Usage Section"); - createNetworkUsageSection(); - monitor.worked(1); - - monitor.setTaskName("Creating CPU Usage Section"); - createCPUUsageSection(); - monitor.worked(1); - - monitor.setTaskName("Creating Network Interfaces Section"); - createNetworkInterfacesSection(server, toolkit, form); - monitor.worked(1); - monitor.done(); - } - }); - } catch (Exception e) { - String errMsg = "Exception while creating the Gluster Server Summary View : [" + e.getMessage() + "]"; - logger.error(errMsg, e); - MessageDialog.openError(getSite().getShell(), ConsoleConstants.CONSOLE_TITLE, errMsg); - } - } - - parent.layout(); // IMP: lays out the form properly - } - - private void createServerSummarySection(GlusterServer server, FormToolkit toolkit, final ScrolledForm form) { - serverSummarySection = guiHelper.createSection(form, toolkit, "Summary", null, 2, false); - // toolkit.createLabel(section, "Preferred Network: ", SWT.NONE); - // toolkit.createLabel(section, server.getPreferredNetworkInterface().getName(), SWT.NONE); - - if (server.isOnline()) { - toolkit.createLabel(serverSummarySection, "Number of CPUs: ", SWT.NONE); - numCpus = toolkit.createLabel(serverSummarySection, "" + server.getNumOfCPUs(), SWT.NONE); - - toolkit.createLabel(serverSummarySection, "% CPU Usage (avg): ", SWT.NONE); - cpuGauge = new CoolGauge(serverSummarySection, guiHelper.getImage(IImageKeys.GAUGE_SMALL)); - - toolkit.createLabel(serverSummarySection, "Memory Usage: ", SWT.NONE); - memoryUsageBar = new ProgressBar(serverSummarySection, SWT.SMOOTH); - - // toolkit.createLabel(section, "Memory Usage: ", SWT.NONE); - // final CoolProgressBar bar = new CoolProgressBar(section,SWT.HORIZONTAL, - // guiHelper.getImage(IImageKeys.PROGRESS_BAR_LEFT), - // guiHelper.getImage(IImageKeys.PROGRESS_BAR_FILLED), - // guiHelper.getImage(IImageKeys.PROGRESS_BAR_EMPTY), - // guiHelper.getImage(IImageKeys.PROGRESS_BAR_RIGHT)); - // bar.updateProgress(server.getMemoryInUse() / server.getTotalMemory()); - - // toolkit.createLabel(section, "Total Disk Space (GB): ", SWT.NONE); - // toolkit.createLabel(section, online ? "" + server.getTotalDiskSpace() : "NA", SWT.NONE); - // - // toolkit.createLabel(section, "Disk Space in Use (GB): ", SWT.NONE); - // toolkit.createLabel(section, online ? "" + server.getDiskSpaceInUse() : "NA", SWT.NONE); - - toolkit.createLabel(serverSummarySection, "Disk Usage: ", SWT.NONE); - diskUsageBar = new ProgressBar(serverSummarySection, SWT.SMOOTH); - } - - toolkit.createLabel(serverSummarySection, "Status: ", SWT.NONE); - lblServerStatus = new CLabel(serverSummarySection, SWT.NONE); - populateServerSummarySection(server); - } - - private void populateServerSummarySection(GlusterServer server) { - if (server.isOnline()) { - numCpus.setText("" + server.getNumOfCPUs()); - numCpus.redraw(); - - cpuGauge.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false)); - cpuGauge.setGaugeNeedleColour(Display.getDefault().getSystemColor(SWT.COLOR_RED)); - cpuGauge.setGaugeNeedleWidth(2); - cpuGauge.setGaugeNeedlePivot(new Point(66, 65)); - - cpuGauge.setPoints(getPnts()); - cpuGauge.setLevel(server.getCpuUsage() / 100); - cpuGauge.setToolTipText(server.getCpuUsage() + "%"); - cpuGauge.redraw(); - - memoryUsageBar.setMinimum(0); - memoryUsageBar.setMaximum((int) Math.round(server.getTotalMemory())); - memoryUsageBar.setSelection((int) Math.round(server.getMemoryInUse())); - memoryUsageBar.setToolTipText("Total: " + NumberUtil.formatNumber((server.getTotalMemory() / 1024)) - + "GB, In Use: " + NumberUtil.formatNumber((server.getMemoryInUse() / 1024)) + "GB"); - - diskUsageBar.setMinimum(0); - diskUsageBar.setMaximum((int) Math.round(server.getTotalDiskSpace())); - diskUsageBar.setSelection((int) Math.round(server.getDiskSpaceInUse())); - diskUsageBar.setToolTipText("Total: " + NumberUtil.formatNumber((server.getTotalDiskSpace() / 1024)) - + "GB, In Use: " + NumberUtil.formatNumber((server.getDiskSpaceInUse() / 1024)) + "GB"); - - } - lblServerStatus.setText(server.getStatusStr()); - lblServerStatus.setImage(server.getStatus() == GlusterServer.SERVER_STATUS.ONLINE ? guiHelper - .getImage(IImageKeys.STATUS_ONLINE_16x16) : guiHelper.getImage(IImageKeys.STATUS_OFFLINE_16x16)); - toolkit.adapt(lblServerStatus, true, true); - - serverSummarySection.layout(); - form.reflow(true); - } - - private List<Point> getPnts() { - final List<Point> pnts = new ArrayList<Point>(); - pnts.add(new Point(47, 98)); - pnts.add(new Point(34, 84)); - pnts.add(new Point(29, 65)); - pnts.add(new Point(33, 48)); - pnts.add(new Point(48, 33)); - pnts.add(new Point(66, 28)); - pnts.add(new Point(83, 32)); - pnts.add(new Point(98, 47)); - pnts.add(new Point(103, 65)); - pnts.add(new Point(98, 83)); - pnts.add(new Point(84, 98)); - return pnts; - } - - private Composite createNetworkInterfacesSection(GlusterServer server, FormToolkit toolkit, ScrolledForm form) { - final Composite section = guiHelper.createSection(form, toolkit, "Network Interfaces", null, 1, false); - createNetworkInterfacesTableViewer(createTableViewerComposite(section), server); - // Hyperlink changePreferredNetworkLink = toolkit.createHyperlink(section, "Change Preferred Network", - // SWT.NONE); - // changePreferredNetworkLink.addHyperlinkListener(new HyperlinkAdapter() { - // - // @Override - // public void linkActivated(HyperlinkEvent e) { - // new MessageDialog( - // section.getShell(), - // "Gluster Storage Platform", - // guiHelper.getImage(IImageKeys.SERVER), - // "This will show additional controls to help user choose a new network interface. TO BE IMPLEMENTED.", - // MessageDialog.INFORMATION, new String[] { "OK" }, 0).open(); - // } - // }); - return section; - } - - private TableViewer createNetworkInterfacesTableViewer(final Composite parent, GlusterServer server) { - TableViewer tableViewer = new TableViewer(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); - // TableViewer tableViewer = new TableViewer(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); - tableViewer.setLabelProvider(new NetworkInterfaceTableLabelProvider()); - tableViewer.setContentProvider(new ArrayContentProvider()); - - setupNetworkInterfaceTable(parent, tableViewer.getTable()); - tableViewer.setInput(server.getNetworkInterfaces().toArray()); - - return tableViewer; - } - - private void setupNetworkInterfaceTable(Composite parent, Table table) { - table.setHeaderVisible(true); - table.setLinesVisible(false); - - TableColumnLayout tableColumnLayout = guiHelper.createTableColumnLayout(table, - NETWORK_INTERFACE_TABLE_COLUMN_NAMES); - parent.setLayout(tableColumnLayout); - - setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE, SWT.CENTER, 70); - setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL, SWT.CENTER, 70); - setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED, SWT.CENTER, 70); - setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS, SWT.CENTER, 100); - setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK, SWT.CENTER, 70); - setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY, SWT.CENTER, 70); - } - - private Composite createTableViewerComposite(Composite parent) { - Composite tableViewerComposite = new Composite(parent, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false); - tableLayoutData.widthHint = 400; - tableLayoutData.minimumWidth = 400; - // tableLayoutData.grabExcessHorizontalSpace = true; - tableViewerComposite.setLayoutData(tableLayoutData); - return tableViewerComposite; - } - - /** - * Sets properties for alignment and weight of given column of given table - * - * @param table - * @param columnIndex - * @param alignment - * @param weight - */ - public void setColumnProperties(Table table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES columnIndex, int alignment, - int weight) { - TableColumn column = table.getColumn(columnIndex.ordinal()); - column.setAlignment(alignment); - - TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); - tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); - } - - @Override - public void setFocus() { - form.setFocus(); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServersSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServersSummaryView.java deleted file mode 100644 index afca5ad5..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServersSummaryView.java +++ /dev/null @@ -1,290 +0,0 @@ -/** - * GlusterServersSummaryView.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.console.views; - -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.IImageKeys; -import com.gluster.storage.management.console.utils.ChartViewerComposite; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.model.Alert; -import com.gluster.storage.management.core.model.Alert.ALERT_TYPES; -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.core.model.Server.SERVER_STATUS; -import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.model.TaskInfo; -import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE; - -/** - * - */ -public class GlusterServersSummaryView extends ViewPart { - public static final String ID = GlusterServersSummaryView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private ScrolledForm form; - private ClusterListener clusterListener; - private EntityGroup<GlusterServer> servers; - private Composite alertsSection; - private Composite serversAvailabilitySection; - private Composite tasksSection; - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @SuppressWarnings("unchecked") - @Override - public void createPartControl(Composite parent) { - if (servers == null) { - servers = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); - } - setPartName("Summary"); - createSections(parent); - - clusterListener = new DefaultClusterListener() { - @Override - public void serverAdded(GlusterServer server) { - super.serverAdded(server); - updateServerAvailabilitySection(); - } - - @Override - public void serverRemoved(GlusterServer server) { - super.serverRemoved(server); - updateServerAvailabilitySection(); - } - - @Override - public void serverChanged(GlusterServer server, Event event) { - super.serverChanged(server, event); - updateServerAvailabilitySection(); - } - - private void updateServerAvailabilitySection() { - guiHelper.clearSection(serversAvailabilitySection); - populateAvailabilitySection(); - } - - @Override - public void alertsGenerated() { - super.alertsGenerated(); - guiHelper.clearSection(alertsSection); - populateAlertSection(); - } - - @Override - public void taskAdded(TaskInfo taskInfo) { - super.taskAdded(taskInfo); - updateTasksSection(); - } - - @Override - public void taskRemoved(TaskInfo taskInfo) { - super.taskRemoved(taskInfo); - updateTasksSection(); - } - - @Override - public void taskUpdated(TaskInfo taskInfo) { - super.taskUpdated(taskInfo); - updateTasksSection(); - } - - private void updateTasksSection() { - guiHelper.clearSection(tasksSection); - populateTasksSection(); - } - }; - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - } - - @Override - public void dispose() { - super.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } - - /** - * @param parent - */ - private void createSections(Composite parent) { - form = guiHelper.setupForm(parent, toolkit, "Servers - Summary"); - - createSummarySection(); - createRunningTasksSection(); - createAlertsSection(); - - parent.layout(); // IMP: lays out the form properly - } - - private void createSummarySection() { - serversAvailabilitySection = guiHelper.createSection(form, toolkit, "Availability", null, 2, false); - populateAvailabilitySection(); - } - - private void populateAvailabilitySection() { - if (servers.getEntities().size() == 0) { - toolkit.createLabel(serversAvailabilitySection, "This section will be populated after at least" - + CoreConstants.NEWLINE + "one server is added to the storage cloud."); - return; - } - - Double[] values = new Double[] { Double.valueOf(getServerCountByStatus(servers, SERVER_STATUS.ONLINE)), - Double.valueOf(getServerCountByStatus(servers, SERVER_STATUS.OFFLINE)) }; - createStatusChart(serversAvailabilitySection, values); - } - - private int getServerCountByStatus(EntityGroup<GlusterServer> servers, SERVER_STATUS status) { - int count = 0; - for (GlusterServer server : servers.getEntities()) { - if (server.getStatus() == status) { - count++; - } - } - return count; - } - - private void createStatusChart(Composite section, Double[] values) { - String[] categories = new String[] { "Online", "Offline" }; - ChartViewerComposite chartViewerComposite = new ChartViewerComposite(section, SWT.NONE, categories, values); - - GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); - data.widthHint = 300; - data.heightHint = 150; - chartViewerComposite.setLayoutData(data); - } - - private void createAlertsSection() { - alertsSection = guiHelper.createSection(form, toolkit, "Alerts", null, 1, false); - populateAlertSection(); - } - - private void populateAlertSection() { - List<Alert> alerts = GlusterDataModelManager.getInstance().getModel().getCluster().getAlerts(); - - for (Alert alert : alerts) { - if (alert.getType() == ALERT_TYPES.DISK_USAGE_ALERT || alert.getType() != ALERT_TYPES.OFFLINE_SERVERS_ALERT - || alert.getType() == ALERT_TYPES.MEMORY_USAGE_ALERT - || alert.getType() == ALERT_TYPES.CPU_USAGE_ALERT) { - addAlertLabel(alertsSection, alert); - } - } - alertsSection.pack(true); - form.reflow(true); - } - - private void addAlertLabel(Composite section, Alert alert) { - CLabel lblAlert = new CLabel(section, SWT.FLAT); - Image alertImage = null; - switch (alert.getType()) { - case DISK_USAGE_ALERT: - alertImage = guiHelper.getImage(IImageKeys.LOW_DISK_SPACE_22x22); - break; - case OFFLINE_SERVERS_ALERT: - alertImage = guiHelper.getImage(IImageKeys.SERVER_OFFLINE_22x22); - break; - case MEMORY_USAGE_ALERT: - alertImage = guiHelper.getImage(IImageKeys.MEMORY_USAGE_ALERT_22x22); - break; - case CPU_USAGE_ALERT: - alertImage = guiHelper.getImage(IImageKeys.SERVER_WARNING_22x22); - break; - } - lblAlert.setImage(alertImage); - lblAlert.setText(alert.getMessage()); - lblAlert.redraw(); - } - - private void createRunningTasksSection() { - tasksSection = guiHelper.createSection(form, toolkit, CoreConstants.RUNNING_TASKS, null, 1, false); - populateTasksSection(); - } - - private void populateTasksSection() { - for (TaskInfo taskInfo : GlusterDataModelManager.getInstance().getModel().getCluster().getTaskInfoList()) { - // Exclude volume related tasks - if (taskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS - && taskInfo.getType() != TASK_TYPE.VOLUME_REBALANCE - && taskInfo.getType() != TASK_TYPE.BRICK_MIGRATE) { - addTaskLabel(tasksSection, taskInfo); - } - } - tasksSection.layout(); - form.reflow(true); - } - - private void addTaskLabel(Composite section, TaskInfo taskInfo) { - CLabel lblTask = new CLabel(section, SWT.NONE); - Image taskImage = null; - switch(taskInfo.getType()) { - case DISK_FORMAT: - taskImage = guiHelper.getImage(IImageKeys.DISK_INITIALIZING_22x22); - break; - case BRICK_MIGRATE: - taskImage = guiHelper.getImage(IImageKeys.BRICK_MIGRATE_22x22); - break; - case VOLUME_REBALANCE: - taskImage = guiHelper.getImage(IImageKeys.VOLUME_REBALANCE_22x22); - break; - } - - String description = taskInfo.getDescription(); - switch (taskInfo.getStatus().getCode()) { - case Status.STATUS_CODE_PAUSE: - description += " (paused)"; - break; - case Status.STATUS_CODE_COMMIT_PENDING: - description += " (commit pending)"; - break; - case Status.STATUS_CODE_FAILURE: - description += " (failed)"; - break; - } - - lblTask.setText(description); - lblTask.setImage(taskImage); - lblTask.redraw(); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - form.setFocus(); - } -}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServersView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServersView.java deleted file mode 100644 index 66017990..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterServersView.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * GlusterServersView.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.console.views; - -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.GlusterServersPage; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.core.model.EntityGroup; -import com.gluster.storage.management.core.model.GlusterServer; - -/** - * @author root - * - */ -public class GlusterServersView extends ViewPart implements IDoubleClickListener { - public static final String ID = GlusterServersView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private EntityGroup<GlusterServer> servers; - private GlusterServersPage page; - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @SuppressWarnings("unchecked") - @Override - public void createPartControl(Composite parent) { - if (servers == null) { - servers = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); - } - - page = new GlusterServersPage(getSite(), parent, SWT.NONE, servers); - page.addDoubleClickListener(this); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - page.setFocus(); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent) - */ - @Override - public void doubleClick(DoubleClickEvent event) { - NavigationView clusterView = (NavigationView) guiHelper.getView(NavigationView.ID); - if (clusterView != null) { - clusterView.selectEntity((Entity) ((StructuredSelection) event.getSelection()).getFirstElement()); - } - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterViewsManager.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterViewsManager.java deleted file mode 100644 index 05c30626..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/GlusterViewsManager.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * GlusterViewsManager.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.console.views; - -import org.eclipse.ui.IViewReference; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; - -import com.gluster.storage.management.console.ConsoleConstants; -import com.gluster.storage.management.core.model.Cluster; -import com.gluster.storage.management.core.model.Entity; -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; - -/** - * @see ViewsManager - */ -public class GlusterViewsManager implements ViewsManager { - private IWorkbenchPage page; - - public GlusterViewsManager(IWorkbenchPage page) { - this.page = page; - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.ViewsManager#updateViews(com.gluster.storage.management.core.model.Entity) - */ - @SuppressWarnings("rawtypes") - @Override - public void updateViews(Entity entity) { - closeAllViews(); - - try { - if (entity instanceof EntityGroup) { - showViewsForEntityGroup((EntityGroup)entity); - } else if (entity.getClass() == Server.class) { - showViewsForDiscoveredServer((Server)entity); - } else if (entity.getClass() == GlusterServer.class) { - showViewsForGlusterServer((GlusterServer)entity); - } else if (entity instanceof Volume) { - showViewsForVolume((Volume)entity); - } else if (entity instanceof Cluster) { - showViewsForCluster((Cluster)entity); - } - } catch (PartInitException e) { - e.printStackTrace(); - } - } - - private void closeAllViews() { - IViewReference[] viewReferences = page.getViewReferences(); - for (final IViewReference viewReference : viewReferences) { - if (!(viewReference.getId().equals(NavigationView.ID) || viewReference.getId().equals( - ConsoleConstants.TERMINAL_VIEW_ID))) { - page.hideView(viewReference); - } - } - } - - private void showViewsForCluster(Cluster cluster) throws PartInitException { - page.showView(ClusterSummaryView.ID); - page.showView(TasksView.ID, null, IWorkbenchPage.VIEW_CREATE); - } - - private void showViewsForVolume(Volume volume) throws PartInitException { - page.showView(VolumeSummaryView.ID); - page.showView(VolumeBricksView.ID, null, IWorkbenchPage.VIEW_CREATE); - page.showView(VolumeOptionsView.ID, null, IWorkbenchPage.VIEW_CREATE); - page.showView(VolumeLogsView.ID, null, IWorkbenchPage.VIEW_CREATE); - } - - private void showViewsForGlusterServer(GlusterServer server) throws PartInitException { - page.showView(GlusterServerSummaryView.ID); - if (server.getStatus() == GlusterServer.SERVER_STATUS.ONLINE) { - page.showView(GlusterServerDisksView.ID, null, IWorkbenchPage.VIEW_CREATE); - //page.showView(GlusterServerLogsView.ID, null, IWorkbenchPage.VIEW_CREATE); - } - } - - private void showViewsForDiscoveredServer(Server server) throws PartInitException { - page.showView(DiscoveredServerView.ID); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private void showViewsForEntityGroup(EntityGroup entityGroup) throws PartInitException { - Class entityType = entityGroup.getEntityType(); - if (entityType == Server.class) { - showViewForServers(entityGroup); - } else if (entityType == Volume.class) { - showViewsForVolumes(entityGroup); - } else if (entityType == GlusterServer.class) { - showViewsForGlusterServers(entityGroup); - } - } - - private void showViewsForGlusterServers(EntityGroup<GlusterServer> server) throws PartInitException { - page.showView(GlusterServersSummaryView.ID); - page.showView(GlusterServersView.ID, null, IWorkbenchPage.VIEW_CREATE); - page.showView(DisksView.ID, null, IWorkbenchPage.VIEW_CREATE); - } - - private void showViewsForVolumes(EntityGroup<Volume> volumes) throws PartInitException { - page.showView(VolumesSummaryView.ID); - page.showView(VolumesView.ID, null, IWorkbenchPage.VIEW_CREATE); - } - - private void showViewForServers(EntityGroup<Server> servers) throws PartInitException { - page.showView(DiscoveredServersView.ID); - } -}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/NavigationTreeLabelDecorator.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/NavigationTreeLabelDecorator.java deleted file mode 100644 index d7448e76..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/NavigationTreeLabelDecorator.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * 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.console.views; - -import org.eclipse.jface.viewers.IDecoration; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ILightweightLabelDecorator; -import org.eclipse.ui.plugin.AbstractUIPlugin; - -import com.gluster.storage.management.console.Application; -import com.gluster.storage.management.console.IImageKeys; -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; - -public class NavigationTreeLabelDecorator implements ILightweightLabelDecorator { - - @Override - public void addListener(ILabelProviderListener listener) { - } - - @Override - public void dispose() { - } - - @Override - public boolean isLabelProperty(Object element, String property) { - return false; - } - - @Override - public void removeListener(ILabelProviderListener listener) { - } - - @SuppressWarnings("rawtypes") - @Override - public void decorate(Object element, IDecoration decoration) { - if (element instanceof Volume) { - Volume volume = (Volume) element; - if (volume.getStatus() == Volume.VOLUME_STATUS.OFFLINE) { - decoration.addOverlay(AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, - IImageKeys.OVERLAY_OFFLINE_8x8)); - } else { - decoration.addOverlay(AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, - IImageKeys.OVERLAY_ONLINE_8x8)); - } - } - - if (element instanceof GlusterServer) { - GlusterServer server = (GlusterServer) element; - if (server.getStatus() == GlusterServer.SERVER_STATUS.OFFLINE) { - decoration.addOverlay(AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, - IImageKeys.OVERLAY_OFFLINE_8x8)); - } else { - decoration.addOverlay(AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, - IImageKeys.OVERLAY_ONLINE_8x8)); - } - } - - if (element instanceof Server) { - decoration.addOverlay(AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, - IImageKeys.OVERLAY_STAR_8x8)); - } - - if(element instanceof EntityGroup && ((EntityGroup)element).getEntityType() == Server.class) { - decoration.addOverlay(AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, - IImageKeys.OVERLAY_STAR_8x8)); - } - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/NavigationView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/NavigationView.java deleted file mode 100644 index 21fc4c7a..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/NavigationView.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * 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.console.views; - -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.IWorkbenchPart; -import org.eclipse.ui.model.BaseWorkbenchContentProvider; -import org.eclipse.ui.model.WorkbenchLabelProvider; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.toolbar.GlusterToolbarManager; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.GlusterDataModel; -import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.Volume; - -public class NavigationView extends ViewPart implements ISelectionListener { - public static final String ID = NavigationView.class.getName(); - private TreeViewer treeViewer; - private IAdapterFactory adapterFactory = new ClusterAdapterFactory(); - private GlusterToolbarManager toolbarManager; - private Entity entity; - private GlusterViewsManager viewsManager; - private DefaultClusterListener clusterListener; - - @Override - public void createPartControl(Composite parent) { - createNavigationTree(parent); - - // Create the views and toolbar managers - toolbarManager = new GlusterToolbarManager(getSite().getWorkbenchWindow()); - viewsManager = new GlusterViewsManager(getSite().getPage()); - - // listen to selection events to update views/toolbar accordingly - getSite().getPage().addSelectionListener(this); - } - - private void createNavigationTree(Composite parent) { - GlusterDataModel model = GlusterDataModelManager.getInstance().getModel(); - - Platform.getAdapterManager().registerAdapters(adapterFactory, Entity.class); - treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); - treeViewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider()); - treeViewer.setContentProvider(new BaseWorkbenchContentProvider()); - treeViewer.setInput(model); - treeViewer.expandAll(); - // select the first element by default - treeViewer.setSelection(new StructuredSelection(model.getChildren().get(0))); - - setupContextMenu(); - - // register as selection provider so that other views can listen to any selection events on the tree - getSite().setSelectionProvider(treeViewer); - - clusterListener = new DefaultClusterListener() { - public void modelChanged() { - treeViewer.refresh(true); - } - - @Override - public void volumeChanged(Volume volume, Event event) { - super.volumeChanged(volume, event); - treeViewer.update(volume, null); - if (volume == entity) { - // this makes sure that the toolbar buttons get updated according to new status - selectEntity(volume); - } - } - - @Override - public void volumeDeleted(Volume volume) { - super.volumeDeleted(volume); - if(volume == entity) { - // volume selected was deleted. select the root element in the tree. - selectEntity(GlusterDataModelManager.getInstance().getModel().getCluster()); - } - } - - @Override - public void serverRemoved(GlusterServer server) { - super.serverRemoved(server); - if(server == entity) { - // server selected was removed. select the root element in the tree. - selectEntity(GlusterDataModelManager.getInstance().getModel().getCluster()); - } - }; - }; - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - } - - private void setupContextMenu() { - MenuManager menuManager = new MenuManager("&Gluster", "gluster.context.menu"); - Menu contextMenu = menuManager.createContextMenu(treeViewer.getControl()); - treeViewer.getTree().setMenu(contextMenu); - getSite().registerContextMenu(menuManager, treeViewer); - } - - public void selectEntity(Entity entity) { - treeViewer.setSelection(new StructuredSelection(entity)); - treeViewer.reveal(entity); - setFocus(); // this ensures that the "selection changed" event gets fired - } - - @Override - public void setFocus() { - treeViewer.getControl().setFocus(); - } - - @Override - public void selectionChanged(IWorkbenchPart part, ISelection selection) { - if (part instanceof NavigationView && selection instanceof TreeSelection) { - Entity selectedEntity = (Entity) ((TreeSelection) selection).getFirstElement(); - - if (selectedEntity != null && selectedEntity != entity) { - entity = selectedEntity; - - // update views and toolbar buttons visibility based on selected entity - viewsManager.updateViews(entity); - toolbarManager.updateToolbar(entity); - - // Opening of other views may cause navigation tree to lose focus; get it back. - setFocus(); - } - } - } - - @Override - public void dispose() { - super.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/TasksView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/TasksView.java deleted file mode 100644 index e408e64e..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/TasksView.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gluster.storage.management.console.views; - -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.views.pages.TasksPage; -import com.gluster.storage.management.core.model.TaskInfo; - -public class TasksView extends ViewPart { - - public static final String ID = TasksView.class.getName(); - private TasksPage page; - - - public TasksView() { - // TODO Auto-generated constructor stub - } - - @Override - public void createPartControl(Composite parent) { - page = new TasksPage(getSite(), parent, SWT.NONE, getAllTasks()); - page.layout(); // IMP: lays out the form properly - } - - - private List<TaskInfo> getAllTasks() { - return GlusterDataModelManager.getInstance().getModel().getCluster().getTaskInfoList(); - } - - @Override - public void setFocus() { - page.setFocus(); - } - -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ViewsManager.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ViewsManager.java deleted file mode 100644 index 5b19ea98..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/ViewsManager.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * ViewsManager.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.console.views; - -import com.gluster.storage.management.core.model.Entity; - -/** - * Whenever the current selection/action demands opening different set of views, the views manager is used to open - * appropriate views. - */ -public interface ViewsManager { - /** - * Updates the views for given entity. This typically means that user is working with the given entity, and hence - * the views related to that entity should be made visible, and other un-related views should be hidden. - * - * @param entity - * The entity for which views are to be updated - */ - public void updateViews(Entity entity); -}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeBricksView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeBricksView.java deleted file mode 100644 index 33cd1f38..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeBricksView.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gluster.storage.management.console.views; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.BricksPage; -import com.gluster.storage.management.core.model.Volume; - -public class VolumeBricksView extends ViewPart { - public static final String ID = VolumeBricksView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private BricksPage page; - private Volume volume; - - @Override - public void createPartControl(Composite parent) { - if (volume == null) { - volume = guiHelper.getSelectedEntity(getSite(), Volume.class); - } - - createPage(parent); - } - - /** - * @param parent - */ - private void createPage(Composite parent) { - page = new BricksPage(parent, SWT.NONE, getSite(), volume.getBricks()); - parent.layout(); // IMP: lays out the form properly - } - - @Override - public void setFocus() { - page.setFocus(); - } -} - diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeLogsView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeLogsView.java deleted file mode 100644 index 74ef5616..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeLogsView.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.gluster.storage.management.console.views; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.VolumeLogsPage; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.VolumeLogMessage; -import com.gluster.storage.management.core.utils.DateUtil; - -public class VolumeLogsView extends ViewPart implements IDoubleClickListener { - VolumeLogsPage logsPage; - public static final String ID = VolumeLogsView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private Volume volume; - - @Override - public void createPartControl(Composite parent) { - if (volume == null) { - volume = guiHelper.getSelectedEntity(getSite(), Volume.class); - } - - createPage(parent); - } - - private void createPage(Composite parent) { - logsPage = new VolumeLogsPage(parent, SWT.NONE, volume); - logsPage.addDoubleClickListener(this); - - parent.layout(); // IMP: lays out the form properly - } - - @Override - public void setFocus() { - logsPage.setFocus(); - } - - @Override - public void doubleClick(DoubleClickEvent event) { - VolumeLogMessage volumeLogMessage = (VolumeLogMessage) ((StructuredSelection) event.getSelection()) - .getFirstElement(); - String message = DateUtil.formatDate(volumeLogMessage.getTimestamp()) + " " - + DateUtil.formatTime(volumeLogMessage.getTimestamp()) + " [" + volumeLogMessage.getSeverity() + "]" - + CoreConstants.NEWLINE + CoreConstants.NEWLINE + volumeLogMessage.getMessage(); - - new MessageDialog(getSite().getShell(), "Log message from " + volumeLogMessage.getBrick(), null, message, - MessageDialog.NONE, new String[] { "Close" }, 0).open(); - - } -}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeOptionsView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeOptionsView.java deleted file mode 100644 index 7129df5d..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeOptionsView.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.gluster.storage.management.console.views; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.VolumeOptionsPage; -import com.gluster.storage.management.core.model.Volume; - -public class VolumeOptionsView extends ViewPart { - public static final String ID = VolumeOptionsView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private VolumeOptionsPage page; - private Volume volume; - - @Override - public void createPartControl(Composite parent) { - if (volume == null) { - volume = guiHelper.getSelectedEntity(getSite(), Volume.class); - } - - createPage(parent); - } - - private void createPage(Composite parent) { - page = new VolumeOptionsPage(parent, SWT.NONE, volume); - parent.layout(); // IMP: lays out the form properly - } - - @Override - public void setFocus() { - page.setFocus(); - } -} - diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java deleted file mode 100644 index 78c7caf2..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java +++ /dev/null @@ -1,859 +0,0 @@ -package com.gluster.storage.management.console.views; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.fieldassist.ControlDecoration; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.swt.events.KeyAdapter; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.FormText; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.Hyperlink; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.client.VolumesClient; -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.IImageKeys; -import com.gluster.storage.management.console.toolbar.GlusterToolbarManager; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.constants.GlusterConstants; -import com.gluster.storage.management.core.model.Alert; -import com.gluster.storage.management.core.model.Brick; -import com.gluster.storage.management.core.model.Cluster; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Device; -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.Partition; -import com.gluster.storage.management.core.model.Server.SERVER_STATUS; -import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; -import com.gluster.storage.management.core.utils.NumberUtil; -import com.gluster.storage.management.core.utils.StringUtil; -import com.gluster.storage.management.core.utils.ValidationUtil; - -public class VolumeSummaryView extends ViewPart { - public static final String ID = VolumeSummaryView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private ScrolledForm form; - private Volume volume; - private Label volumeType; - private CLabel lblStatusValue; - private DefaultClusterListener volumeChangedListener; - private Hyperlink changeLink; - private Hyperlink cifsChangeLink; - private Text accessControlText; - private Text cifsUsersText; - private ControlDecoration errDecoration; - private ControlDecoration errCifsDecoration; - private Composite parent; - private static final String COURIER_FONT = "Courier"; - private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); - private Cluster cluster = modelManager.getModel().getCluster(); - private Button nfsCheckBox; - private FormText glusterNfsMountText; - private String nfsMountInfo; - private Label nfsLabel; - private String nfs; - - private Label numberOfBricks; - private Label totalDiskSpace; - private Composite alertsSection; - private Button cifsCheckbox; - private Label cifsLabel; - private Composite cifsUpdateLinkComposite; - - @Override - public void createPartControl(Composite parent) { - if (volume == null) { - volume = guiHelper.getSelectedEntity(getSite(), Volume.class); - } - - this.parent = parent; - setPartName("Summary"); - createSections(); - - final GlusterToolbarManager toolbarManager = new GlusterToolbarManager(getSite().getWorkbenchWindow()); - // Refresh the navigation tree whenever there is a change to the data model - volumeChangedListener = new DefaultClusterListener() { - @Override - public void volumeChanged(Volume volume, Event event) { - updateVolumeStatusLabel(); - populateAccessControlText(); - changeNFSStatus(volume.isNfsEnabled()); - updateBrickChanges(volume); - toolbarManager.updateToolbar(volume); - cifsCheckbox.setSelection(volume.isCifsEnable()); - populateCifsUsersText(); - renderVolumeTypeField(); - } - - @Override - public void alertsGenerated() { - super.alertsGenerated(); - guiHelper.clearSection(alertsSection); - populateAlertSection(); - alertsSection.layout(); - } - }; - modelManager.addClusterListener(volumeChangedListener); - } - - @Override - public void dispose() { - super.dispose(); - modelManager.removeClusterListener(volumeChangedListener); - } - - private void createSections() { - form = guiHelper.setupForm(parent, toolkit, "Volume Properties [" + volume.getName() + "]"); - - createVolumePropertiesSection(); - createVolumeMountingInfoSection(); - createVolumeAlertsSection(); - - parent.layout(); // IMP: lays out the form properly - } - - private void createVolumeAlertsSection() { - alertsSection = guiHelper.createSection(form, toolkit, "Alerts", null, 1, false); - populateAlertSection(); - } - - private void populateAlertSection() { - List<Alert> alerts = cluster.getAlerts(); - - for (int i = 0; i < alerts.size(); i++) { - if (alerts.get(i).getType() == Alert.ALERT_TYPES.OFFLINE_VOLUME_BRICKS_ALERT - && alerts.get(i).getReference().split(":")[0].trim().equals(volume.getName())) { - addAlertLabel(alertsSection, alerts.get(i)); - } - } - } - - private void addAlertLabel(Composite section, Alert alert) { - CLabel lblAlert = new CLabel(section, SWT.NONE); - lblAlert.setImage(guiHelper.getImage(IImageKeys.BRICK_OFFLINE_22x22)); - lblAlert.setText(alert.getMessage()); - lblAlert.redraw(); - } - - private FormText setFormTextStyle(FormText formText, String fontName, int size, int style) { - Font font = new Font(Display.getCurrent(), new FontData(fontName, size, style)); - formText.setFont(font); - return formText; - } - - private void createVolumeMountingInfoSection() { - String glusterFs = "Gluster:"; - nfs = "NFS:"; - String onlineServers = getOnlineServers(10); // Limited to 10 servers - String firstOnlineServer = onlineServers.split(",")[0].trim(); - String glusterFsMountInfo = "mount -t glusterfs " + firstOnlineServer + ":/" + volume.getName() - + " <mount-point>"; - nfsMountInfo = "mount -t nfs " + firstOnlineServer + ":/" + volume.getName() + " <mount-point>"; - // TODO: if more than 10 servers... - String info = "Server can be any server name in the storage cloud eg. <" + onlineServers + ">"; - - Composite section = guiHelper.createSection(form, toolkit, "Mounting Information", null, 3, false); - - toolkit.createLabel(section, glusterFs, SWT.NORMAL); - FormText glusterfsMountText = setFormTextStyle(toolkit.createFormText(section, true), COURIER_FONT, 10, - SWT.NONE); - glusterfsMountText.setText(glusterFsMountInfo, false, false); - glusterfsMountText.setLayoutData(new GridData(GridData.BEGINNING, GridData.VERTICAL_ALIGN_CENTER, false, false, - 2, 0)); // Label spanned two column - - nfsLabel = toolkit.createLabel(section, nfs, SWT.NONE); - GridData data = new GridData(); - data.horizontalAlignment = SWT.FILL; - nfsLabel.setLayoutData(data); - - glusterNfsMountText = setFormTextStyle(toolkit.createFormText(section, true), COURIER_FONT, 10, SWT.NONE); - glusterNfsMountText.setText(nfsMountInfo, false, false); - glusterNfsMountText.setLayoutData(new GridData(GridData.BEGINNING, GridData.VERTICAL_ALIGN_CENTER, false, - false, 2, 0)); - - changeNFSStatus(nfsCheckBox.getSelection()); - - toolkit.createLabel(section, ""); - Label infoLabel = toolkit.createLabel(section, info, SWT.NONE); - infoLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.VERTICAL_ALIGN_CENTER, false, false, 2, 0)); - - // TODO: implement a logic to identify the corresponding glusterfs client download link - String message = "You can download GlusterFS client from"; - String glusterFSDownloadlinkText = "here."; - final String glusterFSDownloadlink = "http://download.gluster.com/pub/gluster/glusterfs/"; - - toolkit.createLabel(section, ""); - toolkit.createLabel(section, message); - Hyperlink link = toolkit.createHyperlink(section, glusterFSDownloadlinkText, SWT.NORMAL); - link.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - try { - System.out.println(e.getLabel() + " [" + e.getHref() + "]"); - PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser() - .openURL(new URL(glusterFSDownloadlink)); - } catch (PartInitException e1) { - e1.printStackTrace(); - } catch (MalformedURLException e1) { - e1.printStackTrace(); - } - } - }); - } - - private String getOnlineServers(int maxServers) { - List<String> OnlineServers = new ArrayList<String>(); - for (GlusterServer server : cluster.getServers()) { - if (server.getStatus() == SERVER_STATUS.ONLINE) { - OnlineServers.add(server.getName()); - if (OnlineServers.size() >= maxServers) { - break; - } - } - } - return StringUtil.collectionToString(OnlineServers, ", ") + ((OnlineServers.size() > maxServers) ? "..." : ""); - } - - /** - * - */ - private void createVolumePropertiesSection() { - Composite section = guiHelper.createSection(form, toolkit, "Properties", null, 3, false); - - createVolumeTypeField(section); - - VOLUME_TYPE volumeType = volume.getVolumeType(); - if (volumeType == VOLUME_TYPE.DISTRIBUTED_REPLICATE) { - createReplicaCountField(section); - } - - if (volumeType == VOLUME_TYPE.DISTRIBUTED_STRIPE) { - createStripeCountField(section); - } - - createNumOfBricksField(section); - createDiskSpaceField(section); - // createTransportTypeField(section); - createNASProtocolField(section); - createCifsField(section); - createAccessControlField(section); - createStatusField(section); - } - - private GridData createDefaultLayoutData() { - GridData layoutData = new GridData(); - layoutData.minimumWidth = 300; - layoutData.widthHint = 300; - return layoutData; - } - - private void createCifsField(Composite section) { - cifsLabel = toolkit.createLabel(section, "CIFS: ", SWT.NONE); - cifsUsersText = toolkit.createText(section, volume.getAccessControlList(), SWT.BORDER); - populateCifsUsersText(); - addKeyListenerForCifsUser(); - - cifsUpdateLinkComposite = toolkit.createComposite(section, SWT.NONE); - cifsUpdateLinkComposite.setLayout(new FillLayout()); - cifsUpdateLinkComposite.setVisible(volume.isCifsEnable()); - - createChangeLinkForCifs(cifsUpdateLinkComposite); - renderCifsUsers(cifsCheckbox.getSelection()); - errCifsDecoration = guiHelper.createErrorDecoration(cifsUsersText); - errCifsDecoration.hide(); - } - - private void createAccessControlField(Composite section) { - toolkit.createLabel(section, "Allow Access From: ", SWT.NONE); - accessControlText = toolkit.createText(section, volume.getAccessControlList(), SWT.BORDER); - - populateAccessControlText(); - addKeyListenerForAccessControl(); - accessControlText.setLayoutData(createDefaultLayoutData()); - accessControlText.setEnabled(false); - createChangeLinkForAccessControl(section); - - // error decoration used while validating the access control text - errDecoration = guiHelper.createErrorDecoration(accessControlText); - errDecoration.hide(); - createAccessControlInfoLabel(section); // info text - } - - private void createAccessControlInfoLabel(Composite section) { - toolkit.createLabel(section, "", SWT.NONE); - Label accessControlInfoLabel = toolkit.createLabel(section, "(Comma separated list of IP addresses/hostnames)"); - GridData data = new GridData(SWT.LEFT, SWT.CENTER, true, false); - data.horizontalSpan = 2; - accessControlInfoLabel.setLayoutData(data); - } - - private void createChangeLinkForAccessControl(Composite section) { - changeLink = toolkit.createHyperlink(section, "change", SWT.NONE); - changeLink.addHyperlinkListener(new HyperlinkAdapter() { - - private void finishEdit() { - saveAccessControlList(); - } - - private void startEdit() { - accessControlText.setEnabled(true); - accessControlText.setFocus(); - accessControlText.selectAll(); - changeLink.setText("update"); - } - - @Override - public void linkActivated(HyperlinkEvent e) { - if (accessControlText.isEnabled()) { - // we were already in edit mode. - finishEdit(); - } else { - // Get in to edit mode - startEdit(); - } - } - }); - } - - private void saveAccessControlList() { - final String newACL = accessControlText.getText(); - - guiHelper.setStatusMessage("Setting access control list to [" + newACL + "]..."); - parent.update(); - - if (newACL.equals(volume.getAccessControlList())) { - accessControlText.setEnabled(false); - changeLink.setText("change"); - } else if (ValidationUtil.isValidAccessControl(newACL)) { - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { - @Override - public void run() { - try { - new VolumesClient().setVolumeOption(volume.getName(), Volume.OPTION_AUTH_ALLOW, newACL); - accessControlText.setEnabled(false); - changeLink.setText("change"); - - modelManager.setAccessControlList(volume, newACL); - } catch (Exception e) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Access control", e.getMessage()); - } - } - }); - } else { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Access control", "Invalid IP / Host name "); - } - guiHelper.clearStatusMessage(); - parent.update(); - } - - private void createChangeLinkForCifs(Composite section) { - cifsChangeLink = toolkit.createHyperlink(section, "change", SWT.NONE); - cifsChangeLink.addHyperlinkListener(new HyperlinkAdapter() { - - private void finishEdit() { - saveCifsConfiguration(); - } - - private void startEdit() { - if (cifsCheckbox.getSelection()) { - enableCifsUsersControls(true); - cifsUsersText.selectAll(); - } - } - - @Override - public void linkActivated(HyperlinkEvent e) { - if (cifsUsersText.isEnabled()) { - // we were already in edit mode. - finishEdit(); - } else { - // Get in to edit mode - startEdit(); - } - } - }); - } - - private void saveCifsConfiguration() { - guiHelper.setStatusMessage("Setting Cifs Configuration..."); - parent.update(); - - // To check if no changes in the users list - if (!isvalidCifsUser()) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Cifs Configuration", - "Please enter cifs users name"); - enableCifsUsersControls(true); - validateCifsUsers(); - // } else if (cifsUsers.equals(configuredUsers)) { // Nothing to do. - // enableCifsUsersControls(false); - } else { - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { - @Override - public void run() { - VolumesClient vc = new VolumesClient(); - Volume newVolume = new Volume(); - Integer userAction = 1; - String cifsUsers = cifsUsersText.getText().trim(); - List<String> servers = GlusterDataModelManager.getInstance().getOfflineServers(); - // One or more servers are offline, Show warning if cifs is enabled - if (servers != null && servers.size() > 0) { - userAction = new MessageDialog(parent.getShell(), "CIFS configuration", GUIHelper - .getInstance().getImage(IImageKeys.VOLUME_16x16), - "Performing CIFS updates when one or more servers are offline can trigger " - + "inconsistent behavior for CIFS accesses in the cluster." - + CoreConstants.NEWLINE + CoreConstants.NEWLINE - + "Are you sure you want to continue?", MessageDialog.QUESTION, new String[] { - "No", "Yes" }, -1).open(); - } - - // If no cifs users and removing cifs config, nothing to do - if (!(!cifsCheckbox.getSelection() && volume.getCifsUsers().toString().equals("[]") && (cifsUsers - .isEmpty() || cifsUsers.equals(""))) && userAction == 1) { - try { - vc.setCifsConfig(volume.getName(), cifsCheckbox.getSelection(), cifsUsers); - enableCifsUsersControls(false); - newVolume = vc.getVolume(volume.getName()); - modelManager.volumeChanged(volume, newVolume); - showCifsUsersControls(volume.isCifsEnable()); - } catch (Exception e) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Cifs Configuration", - e.getMessage()); - cifsCheckbox.setSelection(volume.isCifsEnable()); - enableCifsUsersControls(cifsCheckbox.getSelection()); - populateCifsUsersText(); - } - } else { - newVolume = vc.getVolume(volume.getName()); - modelManager.volumeChanged(volume, newVolume); - showCifsUsersControls(volume.isCifsEnable()); - } - } - }); - } - guiHelper.clearStatusMessage(); - parent.update(); - } - - private void saveNFSOption() { - guiHelper.setStatusMessage("Setting NFS option..."); - parent.update(); - - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { - @Override - public void run() { - try { - boolean enableNfs = nfsCheckBox.getSelection(); - new VolumesClient().setVolumeOption(volume.getName(), Volume.OPTION_NFS_DISABLE, - (enableNfs) ? GlusterConstants.OFF : GlusterConstants.ON); - modelManager.setNfsEnabled(volume, enableNfs); - } catch (Exception e) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "NFS Option", e.getMessage()); - } - } - }); - guiHelper.clearStatusMessage(); - parent.update(); - } - - private void addKeyListenerForAccessControl() { - accessControlText.addKeyListener(new KeyAdapter() { - public void keyReleased(KeyEvent key) { - switch (key.keyCode) { - case SWT.ESC: - // Reset to default - populateAccessControlText(); - changeLink.setText("change"); - accessControlText.setEnabled(false); - break; - case 13: - // User has pressed enter. Save the new value - saveAccessControlList(); - break; - } - - validateAccessControlList(); - } - }); - } - - private void populateAccessControlText() { - String accessControlList = volume.getAccessControlList(); - if (accessControlList == null) { - // if not set, show default value - accessControlList = modelManager.getVolumeOptionDefaultValue(Volume.OPTION_AUTH_ALLOW); - } - accessControlText.setText(accessControlList); - } - - private void addKeyListenerForCifsUser() { - cifsUsersText.addKeyListener(new KeyAdapter() { - public void keyReleased(KeyEvent key) { - switch (key.keyCode) { - case SWT.ESC: - // Reset to default - populateCifsUsersText(); - enableCifsUsersControls(false); - if (cifsUsersText.getText().trim().length() == 0) { // Disable CIFS as well - cifsCheckbox.setSelection(false); - } - form.reflow(true); - break; - case 13: - // User has pressed enter. Save the new value - saveCifsConfiguration(); - break; - } - validateCifsUsers(); - } - }); - } - - private void populateCifsUsersText() { - List<String> userList = volume.getCifsUsers(); - if (volume.isCifsEnable() && userList != null) { - cifsUsersText.setText(StringUtil.collectionToString(userList, ",")); - } else { - cifsUsersText.setText(""); - } - } - - private void createNASProtocolField(final Composite section) { - toolkit.createLabel(section, "Access Protocols: ", SWT.NONE); - - Composite nasProtocolsComposite = toolkit.createComposite(section); - nasProtocolsComposite.setLayout(new FillLayout()); - - createCheckbox(nasProtocolsComposite, "Gluster", true, false); - - nfsCheckBox = createCheckbox(nasProtocolsComposite, "NFS", volume.isNfsEnabled(), true); - - nfsCheckBox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (!nfsCheckBox.getSelection()) { - Integer userAction = new MessageDialog(parent.getShell(), "NFS Re-export", GUIHelper.getInstance() - .getImage(IImageKeys.VOLUME_16x16), - "Are you sure you want to stop the NFS Re-export for volume [" + volume.getName() + "]?", - MessageDialog.QUESTION, new String[] { "No", "Yes" }, -1).open(); - if (userAction <= 0) { // user select cancel or pressed escape key - nfsCheckBox.setSelection(true); - return; - } - } - saveNFSOption(); - } - }); - - // CIFS checkbox - cifsCheckbox = createCheckbox(nasProtocolsComposite, "CIFS", volume.isCifsEnable(), true); - createCifsCheckboxListner(cifsCheckbox); - - toolkit.createLabel(section, "", SWT.NONE); // dummy - } - - private void createCifsCheckboxListner(final Button cifsCheckbox) { - cifsCheckbox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (cifsCheckbox.getSelection()) { - // need to enable cifs - // TODO: Open the text box (empty and enabled), - // the hyperlink next to the textbox should have label "update" - // when user clicks on that hyperlink, - // saveCifsConfiguration should be called - // Also, if user presses the "ESC" key, - // return to the previous state of checkbox and hide the textbox + hyperlink - showCifsUsersControls(true); - enableCifsUsersControls(true); - // saveCifsConfiguration(); - } else { - // need to disable cifs - // TODO: hide the textbox and the link AFTER disabling cifs - if ((volume.getCifsUsers() == null || volume.getCifsUsers().toString().equals("[]")) - && cifsUsersText.getText().trim().equals("")) { - showCifsUsersControls(false); - enableCifsUsersControls(false); - } else { - - Integer userAction = new MessageDialog(parent.getShell(), "CIFS Re-export", GUIHelper - .getInstance().getImage(IImageKeys.VOLUME_16x16), - "Are you sure you want to stop the CIFS re-export for volume [" + volume.getName() - + "]?", MessageDialog.QUESTION, new String[] { "No", "Yes" }, -1).open(); - if (userAction <= 0) { // user select cancel or pressed escape key - cifsCheckbox.setSelection(true); // back to previous state. - } else { - showCifsUsersControls(false); - enableCifsUsersControls(false); - saveCifsConfiguration(); - } - } - } - populateCifsUsersText(); - form.reflow(true); - } - }); - } - - private void renderCifsUsers(Boolean cifsSelection) { - if (cifsSelection) { - enableCifsUsersControls(false); - showCifsUsersControls(true); - } else { - showCifsUsersControls(false); - } - } - - private void showCifsUsersControls(Boolean visible) { - if (visible) { - GridData data = new GridData(); - data.heightHint = 20; - data.widthHint = 100; - cifsLabel.setLayoutData(data); - - GridData data1 = new GridData(); - data1.heightHint = 20; - data1.widthHint = 300; - - cifsUsersText.setLayoutData(data1); - - GridData data2 = new GridData(); - data2.heightHint = 25; - data2.widthHint = 75; - cifsUpdateLinkComposite.setLayoutData(data2); - } else { - GridData data = new GridData(); - data.heightHint = 0; - - cifsLabel.setLayoutData(data); - cifsUsersText.setLayoutData(data); - cifsUpdateLinkComposite.setLayoutData(data); - } - - cifsLabel.setVisible(visible); - cifsUsersText.setVisible(visible); - cifsUpdateLinkComposite.setVisible(visible); - form.reflow(true); - } - - private void enableCifsUsersControls(Boolean enable) { - cifsUsersText.setEnabled(enable); - cifsChangeLink.setText((enable) ? "update" : "change"); - if (enable) { - cifsUsersText.setFocus(); - validateCifsUsers(); - } else { - if (errCifsDecoration != null) { - errCifsDecoration.hide(); - } - } - } - - private Button createCheckbox(Composite parent, String label, boolean checked, boolean enabled) { - final Button checkBox = toolkit.createButton(parent, label, SWT.CHECK); - checkBox.setSelection(checked); - checkBox.setEnabled(enabled); - return checkBox; - } - - private void changeNFSStatus(Boolean isNFSExported) { - glusterNfsMountText.setVisible(isNFSExported); - nfsLabel.setVisible(isNFSExported); - nfsCheckBox.setSelection(isNFSExported); - } - - private void updateBrickChanges(Volume volume) { - numberOfBricks.setText("" + volume.getNumOfBricks()); - totalDiskSpace.setText("" + NumberUtil.formatNumber(getTotalDiskSpace() / 1024)); - } - - private double getDiskSize(String serverName, String deviceName) { - double diskSize = 0; - GlusterServer server = cluster.getServer(serverName); - if (server.getStatus() == SERVER_STATUS.ONLINE) { - for (Disk disk : server.getDisks()) { - if (disk.getName().equals(deviceName)) { - diskSize = disk.getSpace(); - break; - } - - if (disk.hasPartitions()) { - for (Partition partition : disk.getPartitions()) { - if (partition.getName().equals(deviceName)) { - diskSize = partition.getSpace(); - break; - } - } - } - } - } - return diskSize; - } - - private double getTotalDiskSpace() { - List<Double> diskSizes = getVolumeDiskSizes(); - VOLUME_TYPE volumeType = volume.getVolumeType(); - double diskSize = 0d; - if (volumeType == VOLUME_TYPE.DISTRIBUTE || volumeType == VOLUME_TYPE.STRIPE - || volumeType == VOLUME_TYPE.DISTRIBUTED_STRIPE) { - for (Double size : diskSizes) { - diskSize += size; - } - } else { // Replicate or distributed replicate - int replicaCount = volume.getReplicaCount(); - if (replicaCount == 0) { - replicaCount = Volume.DEFAULT_REPLICA_COUNT; - } - int startIndex = 0; - for (int i = 0; i < (diskSizes.size() / replicaCount); i++) { - startIndex = i * replicaCount; - diskSize += Collections.min(diskSizes.subList(startIndex, startIndex + replicaCount)); - } - } - return diskSize; - } - - private List<Double> getVolumeDiskSizes() { - List<Double> diskSizes = new ArrayList<Double>(); - Device device; - for (Brick brick : volume.getBricks()) { - device = modelManager.getDeviceForBrickDir(brick); - diskSizes.add( (device == null) ? 0d : getDiskSize(brick.getServerName(), device.getName()) ); - } - return diskSizes; - } - - - - private void createDiskSpaceField(Composite section) { - Label diskSpaceLabel = toolkit.createLabel(section, "Total Disk Space (GB): ", SWT.NONE); - diskSpaceLabel.setToolTipText("<b>bold</b>normal"); - totalDiskSpace = toolkit.createLabel(section, - "" + NumberUtil.formatNumber(getTotalDiskSpace() / 1024), SWT.NONE); - toolkit.createLabel(section, "", SWT.NONE); // dummy - } - - private void createStatusField(Composite section) { - toolkit.createLabel(section, "Status: ", SWT.NONE); - - lblStatusValue = new CLabel(section, SWT.NONE); - updateVolumeStatusLabel(); - - toolkit.createLabel(section, "", SWT.NONE); // dummy - } - - private void updateVolumeStatusLabel() { - lblStatusValue.setText(volume.getStatusStr()); - lblStatusValue.setImage((volume.getStatus() == Volume.VOLUME_STATUS.ONLINE) ? guiHelper - .getImage(IImageKeys.STATUS_ONLINE_16x16) : guiHelper.getImage(IImageKeys.STATUS_OFFLINE_16x16)); - GridData data = new GridData(); - data.horizontalAlignment = SWT.FILL; - lblStatusValue.setLayoutData(data); - lblStatusValue.redraw(); - } - - private void createTransportTypeField(Composite section) { - toolkit.createLabel(section, "Transport Type: ", SWT.NONE); - toolkit.createLabel(section, "" + volume.getTransportTypeStr(), SWT.NONE); - toolkit.createLabel(section, "", SWT.NONE); // dummy - } - - private void createNumOfBricksField(Composite section) { - toolkit.createLabel(section, "Number of Bricks: ", SWT.NONE); - numberOfBricks = toolkit.createLabel(section, "" + volume.getNumOfBricks(), SWT.NONE); - toolkit.createLabel(section, "", SWT.NONE); // dummy - } - - private void createStripeCountField(Composite section) { - toolkit.createLabel(section, "Stripe Count: ", SWT.NONE); - toolkit.createLabel(section, "" + volume.getStripeCount(), SWT.NONE); - toolkit.createLabel(section, "", SWT.NONE); // dummy - } - - private void createReplicaCountField(Composite section) { - toolkit.createLabel(section, "Replica Count: ", SWT.NONE); - toolkit.createLabel(section, "" + volume.getReplicaCount(), SWT.NONE); - toolkit.createLabel(section, "", SWT.NONE); // dummy - } - - private void createVolumeTypeField(Composite section) { - toolkit.createLabel(section, "Volume Type: ", SWT.NONE); - volumeType = toolkit.createLabel(section, volume.getVolumeTypeStr(), SWT.NONE); - toolkit.createLabel(section, "", SWT.NONE); - } - - private void renderVolumeTypeField() { - volumeType.setText(volume.getVolumeTypeStr()); - } - - @Override - public void setFocus() { - form.setFocus(); - } - - private void validateAccessControlList() { - errDecoration.hide(); - - if (accessControlText.getText().length() == 0) { - errDecoration.setDescriptionText("Access control list cannot be empty!"); - errDecoration.show(); - return; - } - - if (!ValidationUtil.isValidAccessControl(accessControlText.getText())) { - errDecoration.setDescriptionText("Invalid IP address/Host name [" - + ValidationUtil.getInvalidIpOrHostname(accessControlText.getText()) - + "]. Please enter a valid value!"); - errDecoration.show(); - } - } - - private void validateCifsUsers() { - errCifsDecoration.hide(); - if (cifsCheckbox.getSelection()) { - String cifsUserList = cifsUsersText.getText().trim(); - if (cifsUserList.length() == 0) { - errCifsDecoration.setDescriptionText("Please enter cifs user name"); - errCifsDecoration.show(); - } - } - } - - private boolean isvalidCifsUser() { - if (cifsCheckbox.getSelection()) { - String cifsUserList = cifsUsersText.getText().trim(); - return (cifsUserList.length() != 0); - } - validateCifsUsers(); - return true; - } - -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeView.java deleted file mode 100644 index ced9335b..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeView.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * DiscoveredServerView.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.console.views; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.utils.NumberUtil; - -/** - * @author root - * - */ -public class VolumeView extends ViewPart { - public static final String ID = VolumeView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private ScrolledForm form; - private Server server; - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @Override - public void createPartControl(Composite parent) { - if (server == null) { - server = guiHelper.getSelectedEntity(getSite(), Server.class); - } - createSections(parent, server, toolkit); - } - - private void createServerSummarySection(Server server, FormToolkit toolkit, final ScrolledForm form) { - Composite section = guiHelper.createSection(form, toolkit, "Summary", null, 2, false); - - toolkit.createLabel(section, "Number of CPUs: ", SWT.NONE); - toolkit.createLabel(section, "" + server.getNumOfCPUs(), SWT.NONE); - - toolkit.createLabel(section, "Total Memory (GB): ", SWT.NONE); - toolkit.createLabel(section, "" + server.getTotalMemory(), SWT.NONE); - - toolkit.createLabel(section, "Total Disk Space (GB): ", SWT.NONE); - toolkit.createLabel(section, "" + NumberUtil.formatNumber(server.getTotalDiskSpace()), SWT.NONE); - } - - private void createSections(Composite parent, Server server, FormToolkit toolkit) { - String serverName = server.getName(); - form = guiHelper.setupForm(parent, toolkit, "Discovered Server Summary [" + serverName + "]"); - createServerSummarySection(server, toolkit, form); - - parent.layout(); // IMP: lays out the form properly - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - if (form != null) { - form.setFocus(); - } - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumesSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumesSummaryView.java deleted file mode 100644 index cd937215..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumesSummaryView.java +++ /dev/null @@ -1,301 +0,0 @@ -/** - * VolumesSummaryView.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.console.views; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.IImageKeys; -import com.gluster.storage.management.console.utils.ChartViewerComposite; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.model.Alert; -import com.gluster.storage.management.core.model.Cluster; -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.Status; -import com.gluster.storage.management.core.model.TaskInfo; -import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE; -import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; - -/** - * - */ -public class VolumesSummaryView extends ViewPart { - public static final String ID = VolumesSummaryView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private ScrolledForm form; - private EntityGroup<Volume> volumes; - private Cluster cluster = GlusterDataModelManager.getInstance().getModel().getCluster(); - private ClusterListener clusterListener; - - private static final String ALERTS = "Alerts"; - private static final String VOLUMES_SUMMARY = "Volumes - Summary"; - private static final String AVAILABILITY = "Availability"; - private Composite alertsSection; - private Composite tasksSection; - private Composite summarySection; - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets - * .Composite) - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void createPartControl(Composite parent) { - if (volumes == null) { - Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); - if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Volume.class) { - volumes = (EntityGroup<Volume>) selectedObj; - } - } - - setPartName("Summary"); - createSections(parent); - - clusterListener = new DefaultClusterListener() { - @Override - public void volumeCreated(Volume volume) { - super.volumeCreated(volume); - updateSummarySection(); - } - - @Override - public void volumeDeleted(Volume volume) { - super.volumeDeleted(volume); - updateSummarySection(); - } - - @Override - public void volumeChanged(Volume volume, Event event) { - super.volumeChanged(volume, event); - updateSummarySection(); - } - - private void updateAlertSection() { - guiHelper.clearSection(alertsSection); - populateAlertSection(); - } - - private void updateSummarySection() { - guiHelper.clearSection(summarySection); - populateSummarySection(); - summarySection.layout(); - form.reflow(true); - } - - @Override - public void alertsGenerated() { - super.alertsGenerated(); - guiHelper.clearSection(alertsSection); - populateAlertSection(); - } - - @Override - public void alertRemoved(Alert alert) { - super.alertRemoved(alert); - updateAlertSection(); - } - - @Override - public void alertCreated(Alert alert) { - super.alertCreated(alert); - updateAlertSection(); - } - - @Override - public void taskAdded(TaskInfo taskInfo) { - super.taskAdded(taskInfo); - updateTasksSection(); - } - - @Override - public void taskRemoved(TaskInfo taskInfo) { - super.taskRemoved(taskInfo); - updateTasksSection(); - } - - @Override - public void taskUpdated(TaskInfo taskInfo) { - super.taskUpdated(taskInfo); - updateTasksSection(); - } - - private void updateTasksSection() { - guiHelper.clearSection(tasksSection); - populateTasks(); - } - }; - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - } - - @Override - public void dispose() { - super.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } - - private void createSections(Composite parent) { - form = guiHelper.setupForm(parent, toolkit, VOLUMES_SUMMARY); - createSummarySection(); - createTasksSection(); - createAlertsSection(); - - parent.layout(); // IMP: lays out the form properly - } - - private void createAlertsSection() { - alertsSection = guiHelper.createSection(form, toolkit, ALERTS, null, 1, false); - populateAlertSection(); - } - - private void populateAlertSection() { - for (Alert alert : cluster.getAlerts()) { - if (alert.getType() == Alert.ALERT_TYPES.OFFLINE_VOLUME_BRICKS_ALERT - || alert.getType() == Alert.ALERT_TYPES.OFFLINE_VOLUME_ALERT) { - addAlertLabel(alertsSection, alert); - } - } - alertsSection.pack(true); - form.reflow(true); - } - - private void addAlertLabel(Composite section, Alert alert) { - CLabel lblAlert = new CLabel(section, SWT.NONE); - - Image alertImage = null; - switch (alert.getType()) { - case OFFLINE_VOLUME_BRICKS_ALERT: - alertImage = guiHelper.getImage(IImageKeys.BRICK_OFFLINE_22x22); - break; - case OFFLINE_VOLUME_ALERT: - alertImage = guiHelper.getImage(IImageKeys.VOLUME_OFFLINE_22x22); - break; - } - lblAlert.setImage(alertImage); - lblAlert.setText(alert.getMessage()); - lblAlert.redraw(); - } - - private void createTasksSection() { - tasksSection = guiHelper.createSection(form, toolkit, CoreConstants.RUNNING_TASKS, null, 1, false); - populateTasks(); - } - - private void populateTasks() { - for (TaskInfo taskInfo : cluster.getTaskInfoList()) { - if ((taskInfo.getType() == TASK_TYPE.BRICK_MIGRATE || taskInfo.getType() == TASK_TYPE.VOLUME_REBALANCE) - && taskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS) - addTaskLabel(tasksSection, taskInfo); - } - tasksSection.pack(true); - form.reflow(true); - } - - private void addTaskLabel(Composite section, TaskInfo taskInfo) { - // Task related to Volumes context - if (taskInfo.getStatus().isPercentageSupported()) { - // TODO Progress bar or link to progress view - } - - CLabel lblTask = new CLabel(section, SWT.NONE); - String description = taskInfo.getDescription(); - switch (taskInfo.getStatus().getCode()) { - case Status.STATUS_CODE_PAUSE: - description += " (paused)"; - break; - case Status.STATUS_CODE_COMMIT_PENDING: - description += " (commit pending)"; - break; - case Status.STATUS_CODE_FAILURE: - description += " (failed)"; - break; - } - lblTask.setText(description); - lblTask.setImage((taskInfo.getType() == TASK_TYPE.BRICK_MIGRATE) ? guiHelper - .getImage(IImageKeys.BRICK_MIGRATE_32x32) : guiHelper.getImage(IImageKeys.VOLUME_REBALANCE_32x32)); - lblTask.redraw(); - } - - private void createSummarySection() { - summarySection = guiHelper.createSection(form, toolkit, AVAILABILITY, null, 2, false); - populateSummarySection(); - } - - private void populateSummarySection() { - if(volumes.getEntities().size() == 0) { - toolkit.createLabel(summarySection, - "This section will be populated after at least" + CoreConstants.NEWLINE +"one volume is created the storage cloud."); - return; - } - - Double[] values = new Double[] { Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.ONLINE)), - Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.OFFLINE)) }; - createStatusChart(toolkit, summarySection, values); - } - - private int getVolumeCountByStatus(EntityGroup<Volume> volumes, VOLUME_STATUS status) { - int count = 0; - for (Volume volume : volumes.getEntities()) { - if (volume.getStatus() == status) { - count++; - } - } - return count; - } - - private void createStatusChart(FormToolkit toolkit, Composite section, Double[] values) { - String[] categories = new String[] { "Online", "Offline" }; - ChartViewerComposite chartViewerComposite = new ChartViewerComposite(section, SWT.NONE, categories, values); - - GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); - data.widthHint = 300; - data.heightHint = 150; - chartViewerComposite.setLayoutData(data); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - if (form != null) { - form.setFocus(); - } - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumesView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumesView.java deleted file mode 100644 index 4deeace2..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumesView.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * 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.console.views; - -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.views.pages.VolumesPage; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.core.model.EntityGroup; -import com.gluster.storage.management.core.model.Volume; - -/** - * - */ -public class VolumesView extends ViewPart implements IDoubleClickListener { - public static final String ID = VolumesView.class.getName(); - private static final GUIHelper guiHelper = GUIHelper.getInstance(); - private EntityGroup<Volume> volumes; - private VolumesPage page; - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void createPartControl(Composite parent) { - if (volumes == null) { - Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); - if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Volume.class) { - volumes = (EntityGroup<Volume>)selectedObj; - } - } - - page = new VolumesPage(parent, getSite(), volumes); - page.addDoubleClickListener(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()); - } - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java deleted file mode 100644 index 43a7e61a..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java +++ /dev/null @@ -1,335 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.window.Window; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.TreeEditor; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.IWorkbenchSite; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.ImageHyperlink; - -import com.gluster.storage.management.client.GlusterServersClient; -import com.gluster.storage.management.client.TasksClient; -import com.gluster.storage.management.console.Application; -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.IEntityListener; -import com.gluster.storage.management.console.dialogs.InitDiskDialog; -import com.gluster.storage.management.console.utils.GlusterLogger; -import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; -import com.gluster.storage.management.core.model.ClusterListener; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Device; -import com.gluster.storage.management.core.model.Device.DEVICE_STATUS; -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.Event.EVENT_TYPE; -import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.model.TaskInfo; - -public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk> implements IEntityListener { - protected List<Disk> disks; - protected static final GlusterLogger logger = GlusterLogger.getInstance(); - - /** - * @return Index of the "status" column in the table. Return -1 if status column is not displayed - */ - protected abstract int getStatusColumnIndex(); - - public AbstractDisksPage(final Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { - super(site, parent, style, false, true, disks); - this.disks = disks; - - // creates hyperlinks for "uninitialized" disks - setupStatusCellEditor(); - // Listen for disk status change events - Application.getApplication().addEntityListener(this); - } - - protected ClusterListener createClusterListener() { - return new DefaultClusterListener() { - @Override - public void serverChanged(GlusterServer server, Event event) { - super.serverChanged(server, event); - EVENT_TYPE eventType = event.getEventType(); - switch (eventType) { - case DEVICES_REMOVED: - case DEVICES_ADDED: - case DEVICES_CHANGED: - case GLUSTER_SERVER_CHANGED: - treeViewer.refresh(true); - default: - break; - } - } - }; - } - - private void createInitializeLink(final TreeItem item, final int rowNum, final Device uninitializedDevice) { - final Tree tree = treeViewer.getTree(); - final TreeEditor editor = new TreeEditor(tree); - editor.grabHorizontal = true; - editor.horizontalAlignment = SWT.RIGHT; - - tree.addPaintListener(new PaintListener() { - private TreeItem myItem = item; - private int myRowNum = rowNum; - private ImageHyperlink myLink = null; - private TreeEditor myEditor = null; - - private void createLinkFor(Device uninitializedDevice, TreeItem item1, int rowNum1) { - myItem = item1; - myRowNum = rowNum1; - - myEditor = new TreeEditor(tree); - myEditor.grabHorizontal = true; - myEditor.horizontalAlignment = SWT.RIGHT; - - myLink = toolkit.createImageHyperlink(tree, SWT.NONE); - // link.setImage(guiHelper.getImage(IImageKeys.DISK_UNINITIALIZED)); - myLink.setText("Initialize"); - myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, treeViewer, uninitializedDevice)); - - myEditor.setEditor(myLink, item1, getStatusColumnIndex()); - - myItem.addDisposeListener(new DisposeListener() { - @Override - public void widgetDisposed(DisposeEvent e) { - myLink.dispose(); - myEditor.dispose(); - } - }); - } - - @Override - public void paintControl(PaintEvent e) { - int itemCount = tree.getItemCount(); - - // Find the table item corresponding to our disk - - Device device = null; - int rowNum1 = -1; - TreeItem item1 = null; - - mainloop: - for (int i = 0; i < itemCount; i++) { - item1 = tree.getItem(i); - - device = (Device) item1.getData(); - if (device != null && device == uninitializedDevice) { - // this is an uninitialized "disk" - rowNum1 = i; - break; - } - - int partitionCount = item1.getItemCount(); - for(int j = 0; j < partitionCount; j++) { - TreeItem partitionItem = item1.getItem(j); - // check each partition - Device partition = (Device)partitionItem.getData(); - if(partition != null && partition == uninitializedDevice) { - // this is an uninitialized "partition" - rowNum1 = i + j; - item1 = partitionItem; - device = partition; - // found the uninitialized device. break out. - break mainloop; - } - } - } - - if (rowNum1 == -1) { - // item disposed and disk not visible. nothing to do. - return; - } - - if (myEditor == null || myItem.isDisposed()) { - // item visible, and - // either editor never created, OR - // old item disposed. create the link for it - createLinkFor(device, item1, rowNum1); - } - - if (rowNum1 != myRowNum) { - // disk visible, but at a different row num. re-create the link - myLink.dispose(); - myEditor.dispose(); - createLinkFor(device, item1, rowNum1); - } - - myEditor.layout(); // IMPORTANT. Without this, the link location goes for a toss on maximize + restore - } - }); - } - - private void setupStatusCellEditor() { - final TreeViewer viewer = treeViewer; - final Tree tree = viewer.getTree(); - int rowNum = 0; - for (int i = 0; i < tree.getItemCount(); i++, rowNum++) { - final TreeItem item = tree.getItem(i); - if (item.isDisposed() || item.getData() == null) { - continue; - } - final Disk disk = (Disk) item.getData(); - if (disk.isUninitialized()) { - createInitializeLink(item, rowNum, disk); - } - - if (disk.hasPartitions()) { - for(int j = 0; j < disk.getPartitions().size(); j++, rowNum++) { - TreeItem partitionItem = item.getItem(j); - // check each partition - Device partition = (Device)partitionItem.getData(); - if (partition.isUninitialized()) { - createInitializeLink(partitionItem, rowNum, partition); - } - } - } - } - } - - private final class StatusLinkListener extends HyperlinkAdapter { - private final Device device; - private final TreeEditor myEditor; - private final ImageHyperlink myLink; - private final TreeViewer viewer; - - private StatusLinkListener(ImageHyperlink link, TreeEditor editor, TreeViewer viewer, Device device) { - this.device = device; - this.viewer = viewer; - this.myEditor = editor; - this.myLink = link; - } - - private void updateStatus(final DEVICE_STATUS status, final boolean disposeEditor) { - if (disposeEditor) { - myLink.dispose(); - myEditor.dispose(); - } - device.setStatus(status); - viewer.update(device, new String[] { "status" }); - Application.getApplication().entityChanged(device, new String[] { "status" }); - } - - @Override - public void linkActivated(HyperlinkEvent e) { - GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); - - // If the same task is already running return - String reference = device.getServerName() + ":" + device.getName(); - TaskInfo existingTaskInfo = modelManager.getTaskByReference(reference); - if (existingTaskInfo != null && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS - && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_FAILURE) { - MessageDialog.openInformation(getShell(), "Initialize disk - Error", "Initializing disk [" + reference - + "] is already in progress! Try later."); - return; - } - - // To collect the available fsType - GlusterServersClient serversClient = new GlusterServersClient(); - List<String> fsTypes = new ArrayList<String>(); - try { - fsTypes = serversClient.getFSTypes(device.getServerName()); - } catch (GlusterRuntimeException e1) { - MessageDialog.openError(getShell(), "Initialize disk - Error", e1.getMessage()); - return; - } - - InitDiskDialog formatDialog = new InitDiskDialog(getShell(), device.getName(), fsTypes); - int userAction = formatDialog.open(); - if (userAction == Window.CANCEL) { - // formatDialog.cancelPressed(); - return; - } - - try { - - URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType(), formatDialog.getMountPoint()); - - TasksClient taskClient = new TasksClient(); - TaskInfo taskInfo = taskClient.getTaskInfo(uri); - - if (taskInfo != null) { - modelManager.addTask(taskInfo); - } - - if (taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING) { - updateStatus(DEVICE_STATUS.INITIALIZING, true); - } else if (taskInfo.getStatus().getCode() == Status.STATUS_CODE_SUCCESS) { - // If format completed (instantly), get the server details and update the server in the model - GlusterServer oldServer = modelManager.getModel().getCluster().getServer(device.getServerName()); - GlusterServer newServer = serversClient.getGlusterServer(device.getServerName()); - modelManager.glusterServerChanged(oldServer, newServer); - // updateStatus(DEVICE_STATUS.INITIALIZED, true); - // GlusterDataModelManager.getInstance().updateDeviceStatus(device.getServerName(), device.getName(), - // DEVICE_STATUS.INITIALIZED); - } else { - MessageDialog.openError(getShell(), "Initialize disk - Error", taskInfo.getStatus().getMessage()); - } - guiHelper.showTaskView(); - } catch (Exception e1) { - logger.error("Exception while initialize disk", e1); - MessageDialog.openError(getShell(), "Initialize disk - Error", e1.getMessage()); - } - } - } - - @Override - public void entityChanged(final Entity entity, final String[] paremeters) { - if (!(entity instanceof Device)) { - return; - } - final Device device = (Device) entity; - - Display.getDefault().syncExec(new Runnable() { - public void run() { - treeViewer.update(device, paremeters); - - if (device.isUninitialized()) { - Tree tree = treeViewer.getTree(); - - for (int rowNum = 0; rowNum < tree.getItemCount(); rowNum++) { - TreeItem item = tree.getItem(rowNum); - if (item.getData() == device) { - createInitializeLink(item, rowNum, device); - } - } - } - } - }); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableTreeViewerPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableTreeViewerPage.java deleted file mode 100644 index 7414bbc3..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableTreeViewerPage.java +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.layout.TreeColumnLayout; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.TreeColumn; -import org.eclipse.ui.ISelectionListener; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.IWorkbenchSite; -import org.eclipse.ui.forms.widgets.FormToolkit; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.model.ClusterListener; -import com.gluster.storage.management.core.model.Disk; - -public abstract class AbstractTableTreeViewerPage<T> extends Composite implements ISelectionListener { - - protected final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - protected TreeViewer treeViewer; - protected GUIHelper guiHelper = GUIHelper.getInstance(); - protected Composite parent; - protected IWorkbenchSite site; - private ClusterListener clusterListener; - - private Text filterText; - - private void setupPageLayout() { - final GridLayout layout = new GridLayout(1, false); - layout.verticalSpacing = 10; - layout.marginTop = 10; - setLayout(layout); - } - - private Composite createTreeViewerComposite() { - Composite tableViewerComposite = new Composite(this, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - GridData layoutData = new GridData(); - layoutData.horizontalSpan=5; - layoutData.grabExcessHorizontalSpace = true; - layoutData.horizontalAlignment = SWT.FILL; - layoutData.verticalAlignment = SWT.FILL; - layoutData.grabExcessVerticalSpace = true; - tableViewerComposite.setLayoutData(layoutData); - - return tableViewerComposite; - } - - - public AbstractTableTreeViewerPage(IWorkbenchSite site, final Composite parent, int style, boolean useChechboxes, - boolean multiSelection, List<Disk> allDisks) { - super(parent, style); - - setupPageLayout(); - //new FormToolkit(Display.getCurrent()).createButton(this, "test1", SWT.PUSH); - - this.parent = parent; - this.site = site; - - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); - parent.setLayoutData(data); - - filterText = guiHelper.createFilterText(toolkit, this); - - Composite tableViewerComposite = createTreeViewerComposite(); - createTreeViewer(allDisks, tableViewerComposite); - 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 - */ - addPaintListener(new PaintListener() { - - @Override - public void paintControl(PaintEvent e) { - parent.layout(); - } - }); - - clusterListener = createClusterListener(); - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - - addDisposeListener(new DisposeListener() { - - @Override - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } - }); - } - - protected abstract ClusterListener createClusterListener(); - protected abstract IBaseLabelProvider getLabelProvider(); - protected abstract IContentProvider getContentProvider(); - - private void createTreeViewer(List<Disk> allDisks, Composite tableViewerComposite) { - treeViewer = new TreeViewer(tableViewerComposite); - treeViewer.getTree().setHeaderVisible(true); - treeViewer.getTree().setLinesVisible(true); - - TreeColumnLayout ad = new TreeColumnLayout(); - tableViewerComposite.setLayout(ad); - - TreeColumn column = new TreeColumn(treeViewer.getTree(),SWT.NONE); - column.setWidth(100); - column.setText("Disk"); - ad.setColumnData(column, new ColumnWeightData(50, 100)); - - column = new TreeColumn(treeViewer.getTree(),SWT.NONE); - column.setWidth(100); - column.setText("Partition"); - ad.setColumnData(column,new ColumnWeightData(50, 100)); - - column = new TreeColumn(treeViewer.getTree(),SWT.NONE); - column.setWidth(100); - column.setText("Free Space (GB)"); - ad.setColumnData(column, new ColumnWeightData(50, 100)); - - column = new TreeColumn(treeViewer.getTree(),SWT.NONE); - column.setWidth(100); - column.setText("Total Space (GB)"); - ad.setColumnData(column,new ColumnWeightData(50, 100)); - - column = new TreeColumn(treeViewer.getTree(),SWT.NONE); - column.setWidth(100); - column.setText("Status"); - ad.setColumnData(column,new ColumnWeightData(50, 100)); - - treeViewer.setLabelProvider(getLabelProvider()); - treeViewer.setContentProvider(getContentProvider()); - treeViewer.setInput(allDisks); - - // Create a case insensitive filter for the table viewer using the filter text field - guiHelper.createFilter(treeViewer, filterText, false); - - treeViewer.expandAll(); - } - - - /* (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) { - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java deleted file mode 100644 index c80740f3..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java +++ /dev/null @@ -1,263 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -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.ISelectionListener; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.IWorkbenchSite; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.Hyperlink; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.console.utils.TableViewerComparator; -import com.gluster.storage.management.core.model.ClusterListener; - -public abstract class AbstractTableViewerPage<T> extends Composite implements ISelectionListener { - - private boolean useCheckboxes; - private boolean multiSelection; - - protected final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - protected TableViewer tableViewer; - protected GUIHelper guiHelper = GUIHelper.getInstance(); - protected Composite parent; - protected IWorkbenchSite site; - - private Hyperlink linkAll, linkNone; - private ClusterListener clusterListener; - - public AbstractTableViewerPage(IWorkbenchSite site, final Composite parent, int style, boolean useChechboxes, boolean multiSelection, Object model) { - super(parent, style); - this.parent = parent; - this.site = site; - - this.useCheckboxes = useChechboxes; - this.multiSelection = multiSelection; - - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - setupPageLayout(); - - createCheckboxSelectionLinks(); - - Text filterText = guiHelper.createFilterText(toolkit, this); - - setupTableViewer(site, filterText); - tableViewer.setInput(model); - // register as selection provider so that other views can listen to any selection events on the tree - site.setSelectionProvider(tableViewer); - site.getPage().addSelectionListener(this); - - - parent.layout(); // Important - this actually paints the table - - createListeners(parent); - } - - public void createCheckboxSelectionLinks() { - if (useCheckboxes) { - // create the "select all/none" links - toolkit.createLabel(this, "Select"); - linkAll = toolkit.createHyperlink(this, "all", SWT.NONE); - linkAll.addHyperlinkListener(new HyperlinkAdapter() { - @Override - public void linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent e) { - ((CheckboxTableViewer) tableViewer).setAllChecked(true); - tableViewer.setSelection(new StructuredSelection(getAllEntities())); - } - }); - - toolkit.createLabel(this, " / "); - - linkNone = toolkit.createHyperlink(this, "none", SWT.NONE); - linkNone.addHyperlinkListener(new HyperlinkAdapter() { - @Override - public void linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent e) { - ((CheckboxTableViewer) tableViewer).setAllChecked(false); - tableViewer.setSelection(StructuredSelection.EMPTY); - } - }); - } else { - // create dummy labels to maintain layout - toolkit.createLabel(this, ""); - toolkit.createLabel(this, ""); - toolkit.createLabel(this, ""); - toolkit.createLabel(this, ""); - } - } - - 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 - */ - addPaintListener(new PaintListener() { - - @Override - public void paintControl(PaintEvent e) { - parent.layout(); - } - }); - - clusterListener = createClusterListener(); - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - - addDisposeListener(new DisposeListener() { - - @Override - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } - }); - } - - protected abstract ClusterListener createClusterListener(); - protected abstract String[] getColumnNames(); - protected abstract void setColumnProperties(Table table); - protected abstract IBaseLabelProvider getLabelProvider(); - protected abstract IContentProvider getContentProvider(); - protected abstract List<T> getAllEntities(); - - public void addDoubleClickListener(IDoubleClickListener listener) { - tableViewer.addDoubleClickListener(listener); - } - - private void setupPageLayout() { - final GridLayout layout = new GridLayout(5, false); - layout.verticalSpacing = 10; - layout.marginTop = 10; - setLayout(layout); - } - - protected void setupTable(Composite parent, Table table) { - table.setHeaderVisible(true); - table.setLinesVisible(false); - - TableColumnLayout tableColumnLayout = guiHelper.createTableColumnLayout(table, getColumnNames()); - parent.setLayout(tableColumnLayout); - - setColumnProperties(table); - } - - private void createTableViewer(Composite parent) { - int style = SWT.FLAT | SWT.FULL_SELECTION; - style |= (multiSelection ? SWT.MULTI : SWT.SINGLE); - - if(useCheckboxes) { - tableViewer = CheckboxTableViewer.newCheckList(parent, style); - } else { - tableViewer = new TableViewer(parent, style); - } - - tableViewer.setLabelProvider(getLabelProvider()); - tableViewer.setContentProvider(getContentProvider()); - setupTable(parent, tableViewer.getTable()); - } - - private Composite createTableViewerComposite() { - Composite tableViewerComposite = new Composite(this, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - GridData layoutData = new GridData(); - layoutData.horizontalSpan=5; - layoutData.grabExcessHorizontalSpace = true; - layoutData.horizontalAlignment = SWT.FILL; - layoutData.verticalAlignment = SWT.FILL; - layoutData.grabExcessVerticalSpace = true; - tableViewerComposite.setLayoutData(layoutData); - - return tableViewerComposite; - } - - private void setupTableViewer(IWorkbenchSite site, final Text filterText) { - Composite tableViewerComposite = createTableViewerComposite(); - createTableViewer(tableViewerComposite); - site.setSelectionProvider(tableViewer); - - if(useCheckboxes) { - // make sure that table selection is driven by checkbox selection - guiHelper.configureCheckboxTableViewer((CheckboxTableViewer)tableViewer); - } - - // Create a case insensitive filter for the table viewer using the filter text field - guiHelper.createFilter(tableViewer, filterText, false); - - tableViewer.setComparator(createViewerComparator()); - for (int columnIndex = 0; columnIndex < tableViewer.getTable().getColumnCount(); columnIndex++) { - TableColumn column = tableViewer.getTable().getColumn(columnIndex); - column.addSelectionListener(getColumnSelectionAdapter(column, columnIndex)); - } - } - - private SelectionAdapter getColumnSelectionAdapter(final TableColumn column, final int columnIndex) { - return new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - ViewerComparator viewerComparator = tableViewer.getComparator(); - if(viewerComparator instanceof TableViewerComparator) { - TableViewerComparator comparator = (TableViewerComparator)viewerComparator; - comparator.setColumn(columnIndex); - tableViewer.getTable().setSortDirection(comparator.getDirection()); - tableViewer.getTable().setSortColumn(column); - tableViewer.refresh(); - } - } - }; - } - - protected abstract ViewerComparator createViewerComparator(); - - /* (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) { - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java deleted file mode 100644 index 674074c3..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/BricksPage.java +++ /dev/null @@ -1,123 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.ui.IWorkbenchSite; - -import com.gluster.storage.management.console.BrickTableLabelProvider; -import com.gluster.storage.management.core.model.Brick; -import com.gluster.storage.management.core.model.ClusterListener; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.Volume; - -public class BricksPage extends AbstractTableViewerPage<Brick> { - private List<Brick> bricks; - - public enum BRICK_TABLE_COLUMN_INDICES { - SERVER, BRICK, FREE_SPACE, TOTAL_SPACE, STATUS - }; - - private static final String[] DISK_TABLE_COLUMN_NAMES = new String[] { "Server", "Brick Directory", "Free Space (GB)", - "Total Space (GB)", "Status" }; - - public BricksPage(Composite parent, int style, IWorkbenchSite site, final List<Brick> bricks) { - super(site, parent, style, true, true, bricks); - this.bricks = bricks; - } - - @Override - protected ClusterListener createClusterListener() { - return new DefaultClusterListener() { - @SuppressWarnings("unchecked") - @Override - public void volumeChanged(Volume volume, Event event) { - switch (event.getEventType()) { - case BRICKS_ADDED: - tableViewer.add(((Collection<Brick>) event.getEventData()).toArray()); - parent.update(); - break; - - case BRICKS_REMOVED: - tableViewer.remove(((Collection<Brick>) event.getEventData()).toArray()); - parent.update(); - break; - - case BRICKS_CHANGED: - Object eventData = event.getEventData(); - Brick[] updatedBricks; - if(eventData instanceof Map) { - updatedBricks = ((Map<Brick, Brick>) eventData).keySet().toArray(new Brick[0]); - } else { - updatedBricks = ((Collection<Brick>)eventData).toArray(new Brick[0]); - } - tableViewer.update(updatedBricks, null); - parent.update(); - tableViewer.refresh(true); - default: - break; - } - } - }; - } - - @Override - protected String[] getColumnNames() { - return DISK_TABLE_COLUMN_NAMES; - } - - @Override - protected void setColumnProperties(Table table) { - guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.SERVER.ordinal(), SWT.CENTER, 100); - guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.BRICK.ordinal(), SWT.CENTER, 100); - guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal(), SWT.CENTER, 90); - guiHelper.setColumnProperties(table, BRICK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal(), SWT.CENTER, 90); - } - - @Override - protected ITableLabelProvider getLabelProvider() { - return new BrickTableLabelProvider(); - } - - @Override - protected IContentProvider getContentProvider() { - return new ArrayContentProvider(); - } - - @Override - protected List<Brick> getAllEntities() { - return bricks; - } - - @Override - protected ViewerComparator createViewerComparator() { - return null; - } -}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/DiskTreeContentProvider.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/DiskTreeContentProvider.java deleted file mode 100644 index 79b54aa1..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/DiskTreeContentProvider.java +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; - -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.Partition; - -public class DiskTreeContentProvider implements ITreeContentProvider { - - private List<Disk> disks = new ArrayList<Disk>(); - - public DiskTreeContentProvider(List<Disk> disks) { - this.disks = disks; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return ((List<Disk>) inputElement).toArray(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.viewers.IContentProvider#dispose() - */ - public void dispose() { - - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) - */ - public Object[] getChildren(Object parentElement) { - if(parentElement instanceof Disk) { - return ((Disk)parentElement).getPartitions().toArray(); - } else { - return null; - } - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) - */ - public Object getParent(Object element) { - if (element == null) { - return null; - } - - if(element instanceof Partition) { - // find the disk of this partition and return - return getDiskForPartition((Partition)element); - } else { - return null; - } - } - - private Disk getDiskForPartition(Partition partition) { - for(Disk disk : disks) { - for(Partition diskPartition : disk.getPartitions()) { - if(partition.getName().equals(diskPartition.getName())) { - return disk; - } - } - } - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) - */ - public boolean hasChildren(Object element) { - return (element instanceof Disk && ((Disk)element).getPartitions().size() > 0); - } - - - -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/DisksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/DisksPage.java deleted file mode 100644 index 8501bef3..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/DisksPage.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IWorkbenchSite; - -import com.gluster.storage.management.console.DeviceTableLabelProvider; -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.Entity; - -public class DisksPage extends AbstractDisksPage { - - public enum DISK_TABLE_COLUMN_INDICES { - DISK, PARTITION, FREE_SPACE, TOTAL_SPACE, STATUS - }; - - private static final String[] DISK_TABLE_COLUMN_NAMES = new String[] { "Disk", "Partition", "Free Space (GB)", - "Total Space (GB)", "Status" }; - - public DisksPage(final Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { - super(parent, style, site, disks); - } - - private String getDiskTableColumnDesc(DISK_TABLE_COLUMN_INDICES idx) { - return DISK_TABLE_COLUMN_NAMES[idx.ordinal()]; - } - - @Override - protected DeviceTableLabelProvider getLabelProvider() { - return new DeviceTableLabelProvider(); - } - - - @Override - protected IContentProvider getContentProvider() { - return new DiskTreeContentProvider(disks); - } - - @Override - protected int getStatusColumnIndex() { - return DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(); - } - - @Override - public void entityChanged(Entity entity, String[] paremeters) { - // TODO Auto-generated method stub - - } - -}
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java deleted file mode 100644 index 3ef05a2a..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/GlusterServersPage.java +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.IWorkbenchSite; - -import com.gluster.storage.management.console.EntityGroupContentProvider; -import com.gluster.storage.management.console.GlusterServerTableLabelProvider; -import com.gluster.storage.management.console.utils.TableViewerComparator; -import com.gluster.storage.management.core.constants.CoreConstants; -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; - -public class GlusterServersPage extends AbstractTableViewerPage<GlusterServer> { - private List<GlusterServer> glusterServers; - - public enum GLUSTER_SERVER_TABLE_COLUMN_INDICES { - NAME, IP_ADDRESSES, NUM_OF_CPUS, TOTAL_MEMORY, TOTAL_FREE_SPACE, TOTAL_DISK_SPACE, STATUS // Removed PREFERRED_NETWORK - }; - - private static final String[] GLUSTER_SERVER_TABLE_COLUMN_NAMES = new String[] { "Name", "IP Address(es)", - "Number" + CoreConstants.NEWLINE + "of CPUs", "Total" + CoreConstants.NEWLINE + "Memory (GB)", - "Free Space (GB)", "Total " + CoreConstants.NEWLINE + " Space (GB)", "Status" }; // Removed "Preferred\nNetwork", - - public GlusterServersPage(IWorkbenchSite site, final Composite parent, int style, final EntityGroup<GlusterServer> servers) { - super(site, parent, style, true, true, servers); - this.glusterServers = servers.getEntities(); - } - - @Override - protected ViewerComparator createViewerComparator() { - return new TableViewerComparator(); - } - - @Override - protected ClusterListener createClusterListener() { - return new DefaultClusterListener() { - - @Override - public void serverAdded(GlusterServer server) { - tableViewer.add(server); - parent.update(); - } - - @Override - public void serverRemoved(GlusterServer server) { - tableViewer.remove(server); - parent.update(); - } - - @Override - public void serverChanged(GlusterServer server, Event event) { - tableViewer.update(server, null); - parent.update(); - } - }; - } - - @Override - protected void setColumnProperties(Table table) { - setColumnProperties(table, GLUSTER_SERVER_TABLE_COLUMN_INDICES.NAME, SWT.CENTER, 100); - setColumnProperties(table, GLUSTER_SERVER_TABLE_COLUMN_INDICES.STATUS, SWT.CENTER, 70); - // setColumnProperties(table, GLUSTER_SERVER_TABLE_COLUMN_INDICES.PREFERRED_NETWORK, SWT.CENTER, 90); - setColumnProperties(table, GLUSTER_SERVER_TABLE_COLUMN_INDICES.NUM_OF_CPUS, SWT.CENTER, 90); - //setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.CPU_USAGE, SWT.CENTER, 90); - setColumnProperties(table, GLUSTER_SERVER_TABLE_COLUMN_INDICES.TOTAL_MEMORY, SWT.CENTER, 90); - //setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.MEMORY_IN_USE, SWT.CENTER, 90); - setColumnProperties(table, GLUSTER_SERVER_TABLE_COLUMN_INDICES.TOTAL_FREE_SPACE, SWT.CENTER, 90); - setColumnProperties(table, GLUSTER_SERVER_TABLE_COLUMN_INDICES.TOTAL_DISK_SPACE, SWT.CENTER, 90); - //setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.DISK_SPACE_IN_USE, SWT.CENTER, 90); - } - - @Override - protected IBaseLabelProvider getLabelProvider() { - return new GlusterServerTableLabelProvider(); - } - - @Override - protected IContentProvider getContentProvider() { - return new EntityGroupContentProvider<GlusterServer>(); - } - - @Override - protected String[] getColumnNames() { - return GLUSTER_SERVER_TABLE_COLUMN_NAMES; - } - - @Override - protected List<GlusterServer> getAllEntities() { - return glusterServers; - } - - /** - * Sets properties for alignment and weight of given column of given table - * - * @param table - * @param columnIndex - * @param alignment - * @param weight - */ - public void setColumnProperties(Table table, GLUSTER_SERVER_TABLE_COLUMN_INDICES columnIndex, int alignment, int weight) { - TableColumn column = table.getColumn(columnIndex.ordinal()); - column.setAlignment(alignment); - - TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); - tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/OptionKeyEditingSupport.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/OptionKeyEditingSupport.java deleted file mode 100644 index ed6aea64..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/OptionKeyEditingSupport.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * - */ -package com.gluster.storage.management.console.views.pages; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.ColumnViewer; -import org.eclipse.jface.viewers.ComboBoxCellEditor; -import org.eclipse.jface.viewers.EditingSupport; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.VolumeOption; -import com.gluster.storage.management.core.model.VolumeOptionInfo; -import com.gluster.storage.management.core.model.VolumeOptions; - -/** - * Editing support for the "value" column in volume options table viewer. - */ -public class OptionKeyEditingSupport extends EditingSupport { - private CellEditor cellEditor; - private Volume volume; - private List<VolumeOptionInfo> defaults = GlusterDataModelManager.getInstance().getVolumeOptionsInfo(); - private String[] allowedKeys; - private ColumnViewer viewer; - - public OptionKeyEditingSupport(ColumnViewer viewer, Volume volume) { - super(viewer); - this.volume = volume; - this.viewer = viewer; - } - - /** - * @return array of option keys that are not already set on the volume - */ - private String[] getAllowedKeys() { - ArrayList<String> keys = new ArrayList<String>(); - VolumeOptions volumeOptions = volume.getOptions(); - for(VolumeOptionInfo optionInfo : defaults) { - String optionName = optionInfo.getName(); - if(!volumeOptions.containsKey(optionName) || volumeOptions.get(optionName).isEmpty()) { - // key not set => available for setting - // value not set => this is the row being edited - keys.add(optionName); - } - } - return keys.toArray(new String[0]); - } - - @Override - protected void setValue(final Object element, final Object value) { - VolumeOption oldEntry = (VolumeOption)element; - Integer newValue = (Integer)value; - String newKey = allowedKeys[newValue]; - - if (((VolumeOption)element).getKey().equals(newKey)) { - // selected value is same as old one. - return; - } - - // value has changed. set new value and refresh the viewer. - volume.getOptions().remove(oldEntry.getKey()); - volume.setOption(newKey, ""); - getViewer().refresh(); - } - - @Override - protected Object getValue(Object element) { - VolumeOption entryBeingAdded = getEntryBeingAdded(); - if(entryBeingAdded == null) { - return cellEditor.getValue(); - } - - if(entryBeingAdded.getKey().isEmpty()) { - // editing just about to start. set first element as default. - return 0; - } - - return getIndexOfEntry(entryBeingAdded); - } - - @Override - protected CellEditor getCellEditor(Object element) { - allowedKeys = getAllowedKeys(); - cellEditor = new ComboBoxCellEditor((Composite) viewer.getControl(), allowedKeys, SWT.READ_ONLY); - return cellEditor; - } - - private int getIndexOfEntry(VolumeOption entryBeingAdded) { - for(int index = 0; index < allowedKeys.length; index++) { - if(allowedKeys[index].equals(entryBeingAdded.getKey())) { - return index; - } - } - return -1; - } - - protected VolumeOption getEntryBeingAdded() { - List<VolumeOption> options = volume.getOptions().getOptions(); - int size = options.size(); - String lastValue = options.get(size - 1).getValue(); - if(lastValue == null || lastValue.isEmpty()) { - // it's the LAST entry, and it's value is empty. - // means this is a new row being added in the table viewer. - return options.get(size - 1); - } - return null; - } - - @Override - protected boolean canEdit(Object element) { - VolumeOption entry = (VolumeOption)element; - return (entry.getKey().isEmpty() || entry.getValue().isEmpty()); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/OptionValueEditingSupport.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/OptionValueEditingSupport.java deleted file mode 100644 index faf4fbe6..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/OptionValueEditingSupport.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * - */ -package com.gluster.storage.management.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.ColumnViewer; -import org.eclipse.jface.viewers.EditingSupport; -import org.eclipse.jface.viewers.TextCellEditor; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; - -import com.gluster.storage.management.client.VolumesClient; -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.VolumeOption; -import com.gluster.storage.management.core.model.VolumeOptionInfo; - -/** - * Editing support for the "value" column in volume options table viewer. - */ -public class OptionValueEditingSupport extends EditingSupport { - private CellEditor cellEditor; - private Volume volume; - private List<VolumeOptionInfo> defaults = GlusterDataModelManager.getInstance().getVolumeOptionsInfo(); - private GUIHelper guiHelper = GUIHelper.getInstance(); - - public OptionValueEditingSupport(ColumnViewer viewer, Volume volume) { - super(viewer); - this.volume = volume; - this.cellEditor = new TextCellEditor((Composite) viewer.getControl()); - } - - @Override - protected void setValue(final Object element, final Object value) { - final VolumeOption entry = (VolumeOption)element; - final String optionKey = entry.getKey(); - final String optionValue = (String)value; - final String oldValue = entry.getValue(); - - // It is not allowed to change value to empty string - if(optionValue.isEmpty()) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Set Volume Option", - "Option value can't be empty! Please enter a valid value."); - cellEditor.setFocus(); - return; - } - - if (oldValue.equals(optionValue)) { - // value is same as that present in the model. return without doing anything. - return; - } - - // value has changed. set volume option at back-end and update model accordingly - guiHelper.setStatusMessage("Setting option [" + optionKey + " = " + optionValue + "]..."); - getViewer().getControl().update(); - - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { - - @Override - public void run() { - VolumesClient client = new VolumesClient(); - try { - client.setVolumeOption(volume.getName(), optionKey, optionValue); - GlusterDataModelManager.getInstance().setVolumeOption(volume, optionKey, optionValue); - } catch(Exception e) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Set Volume Option", e.getMessage()); - } - getViewer().update(entry, null); - } - }); - - guiHelper.clearStatusMessage(); - getViewer().getControl().update(); - } - - /** - * @param key Key whose default value is to be fetched - * @return Default value of the volume option with given key - */ - private String getDefaultValue(String key) { - for(VolumeOptionInfo optionInfo : defaults) { - if(optionInfo.getName().equals(key)) { - return optionInfo.getDefaultValue(); - } - } - return ""; - } - - @Override - protected Object getValue(Object element) { - VolumeOption entry = (VolumeOption) element; - return entry.getValue().isEmpty() ? getDefaultValue(entry.getKey()) : entry.getValue(); - } - - @Override - protected CellEditor getCellEditor(Object element) { - return cellEditor; - } - - @Override - protected boolean canEdit(Object element) { - return true; - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServerDisksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServerDisksPage.java deleted file mode 100644 index a2982590..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServerDisksPage.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IWorkbenchSite; - -import com.gluster.storage.management.console.ServerDiskTableLabelProvider; -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.Entity; - -public class ServerDisksPage extends AbstractDisksPage { - - public ServerDisksPage(Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { - super(parent, style, site, disks); - } - - public enum SERVER_DISK_TABLE_COLUMN_INDICES { - DISK, PARTITION, FREE_SPACE, TOTAL_SPACE, STATUS - }; - - private static final String[] SERVER_DISK_TABLE_COLUMN_NAMES = new String[] { "Disk", "Partition", "Free Space (GB)", - "Total Space (GB)", "Status" }; - - @Override - protected int getStatusColumnIndex() { - return SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(); - } - - @Override - protected ServerDiskTableLabelProvider getLabelProvider() { - // return new DeviceTableLabelProvider(); - return new ServerDiskTableLabelProvider(); - } - - - @Override - protected IContentProvider getContentProvider() { - return new DiskTreeContentProvider(disks); - } - - @Override - public void entityChanged(Entity entity, String[] paremeters) { - // TODO Auto-generated method stub - - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServerLogsPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServerLogsPage.java deleted file mode 100644 index 7b3f3946..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServerLogsPage.java +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ListViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.VerifyEvent; -import org.eclipse.swt.events.VerifyListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.widgets.FormToolkit; - -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.model.GlusterServer; - -public class ServerLogsPage extends Composite { - - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private final GUIHelper guiHelper = GUIHelper.getInstance(); - private Text text; - private Table table; - - public enum LOG_TABLE_COLUMN_INDICES { - DATE, TIME, DISK, SEVERITY, MESSAGE - }; - - private static final String[] LOG_TABLE_COLUMN_NAMES = new String[] { "Date", "Time", "Disk", "Severity", "Message" }; - - /** - * Create the composite. - * - * @param parent - * @param style - */ - public ServerLogsPage(Composite parent, int style, GlusterServer server) { - super(parent, style); - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - } - }); - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - setLayout(new GridLayout(1, false)); - GridData layoutData = new GridData(); - layoutData.grabExcessHorizontalSpace = true; - layoutData.grabExcessVerticalSpace = true; - setLayoutData(layoutData); - - Composite composite = toolkit.createComposite(this, SWT.NONE); - toolkit.paintBordersFor(composite); - - Label lblScanLast = toolkit.createLabel(composite, "Scan last", SWT.NONE); - lblScanLast.setBounds(0, 15, 80, 20); - - text = toolkit.createText(composite, "100", SWT.NONE); - text.setBounds(85, 15, 60, 20); - text.setTextLimit(4); - text.addVerifyListener(new VerifyListener() { - - @Override - public void verifyText(VerifyEvent event) { - // Assume we allow it - event.doit = true; - - String text = event.text; - char[] chars = text.toCharArray(); - - // Don't allow if text contains non-digit characters - for (int i = 0; i < chars.length; i++) { - if (!Character.isDigit(chars[i])) { - event.doit = false; - break; - } - } - - } - }); - - Label lblMessagesAndFilter = toolkit.createLabel(composite, " messages from ", SWT.CENTER); - lblMessagesAndFilter.setBounds(160, 15, 110, 20); - - Combo combo = new Combo(composite, SWT.CENTER); - combo.setBounds(295, 15, 100, 20); - combo.setItems(new String[] { "syslog", "dmesg" }); - toolkit.adapt(combo); - toolkit.paintBordersFor(combo); - combo.select(0); - - Button btngo = toolkit.createButton(composite, "&Go", SWT.NONE); - btngo.setBounds(410, 13, 50, 30); - - Label separator = toolkit.createLabel(composite, "", SWT.SEPARATOR | SWT.HORIZONTAL | SWT.FILL); - separator.setBounds(0, 50, 500, 2); - - Label lblFilterString = toolkit.createLabel(composite, "Filter String", SWT.LEFT); - lblFilterString.setBounds(0, 65, 100, 20); - - text = guiHelper.createFilterText(toolkit, composite); - text.setBounds(105, 65, 250, 20); - - Composite logContentsComposite = createLogContentsComposite(toolkit); - // Text logContentsText = toolkit.createText(logContentsComposite, "", SWT.MULTI | SWT.FLAT | SWT.BORDER); - // logContentsText.setEditable(false); - // populateDummyLogContent(logContentsText); - - ListViewer logViewer = new ListViewer(logContentsComposite, SWT.BORDER | SWT.V_SCROLL | SWT.NO); - logViewer.setContentProvider(new ArrayContentProvider()); - guiHelper.createFilter(logViewer, text, false); - logViewer.setInput(getDummyLogContents()); - - // TODO: Link the filter string with the contents text - } - - private Composite createLogContentsComposite(FormToolkit toolkit) { - Composite tableViewerComposite = toolkit.createComposite(this, SWT.NONE); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); - layoutData.verticalIndent = 10; - tableViewerComposite.setLayoutData(layoutData); - return tableViewerComposite; - } - - private String[] getDummyLogContents() { - - String[] logMessages = { - "Jan 19 13:43:08 shireesh-laptop dhclient: last message repeated 6 times", - "Jan 19 13:44:08 shireesh-laptop dhclient: last message repeated 5 times", - "Jan 19 13:44:47 shireesh-laptop dhclient: last message repeated 2 times", - "Jan 19 13:44:47 shireesh-laptop dhclient: DHCPREQUEST of 192.168.1.174 on eth1 to 255.255.255.255 port 67", - "Jan 19 13:45:49 shireesh-laptop dhclient: last message repeated 6 times", - "Jan 19 13:46:59 shireesh-laptop dhclient: last message repeated 6 times", - "Jan 19 13:48:01 shireesh-laptop dhclient: last message repeated 4 times", - "Jan 19 13:49:02 shireesh-laptop dhclient: last message repeated 5 times", - "Jan 19 13:50:08 shireesh-laptop dhclient: last message repeated 4 times", - "Jan 19 13:51:08 shireesh-laptop dhclient: last message repeated 6 times", - "Jan 19 13:52:08 shireesh-laptop dhclient: last message repeated 4 times", - "Jan 19 13:53:08 shireesh-laptop dhclient: last message repeated 6 times", - "Jan 19 13:54:08 shireesh-laptop dhclient: last message repeated 5 times", - "Jan 19 13:55:08 shireesh-laptop dhclient: last message repeated 4 times", - "Jan 19 13:56:08 shireesh-laptop dhclient: last message repeated 4 times", - "Jan 19 13:57:08 shireesh-laptop dhclient: last message repeated 3 times", - "Jan 19 13:58:08 shireesh-laptop dhclient: last message repeated 6 times", - "Jan 19 13:59:08 shireesh-laptop dhclient: last message repeated 4 times", - "Jan 19 13:59:40 shireesh-laptop dhclient: last message repeated 3 times", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> DHCP: device eth1 state changed bound -> expire", - "Jan 19 13:59:40 shireesh-laptop dhclient: DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 8", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> DHCP: device eth1 state changed expire -> preinit", - "Jan 19 13:59:40 shireesh-laptop dhclient: DHCPOFFER of 192.168.1.174 from 192.168.1.1", - "Jan 19 13:59:40 shireesh-laptop dhclient: DHCPREQUEST of 192.168.1.174 on eth1 to 255.255.255.255 port 67", - "Jan 19 13:59:40 shireesh-laptop dhclient: DHCPACK of 192.168.1.174 from 192.168.1.1", - "Jan 19 13:59:40 shireesh-laptop dhclient: bound to 192.168.1.174 -- renewal in 3205 seconds.", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> DHCP: device eth1 state changed preinit -> bound", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> address 192.168.1.174", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> prefix 24 (255.255.255.0)", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> gateway 192.168.1.1", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> nameserver '192.168.1.1'", - "Jan 19 13:59:40 shireesh-laptop NetworkManager: <info> domain name 'in.gluster.com'", - "Jan 19 14:03:53 shireesh-laptop avahi-daemon[1098]: Invalid legacy unicast query packet.", - "Jan 19 14:03:53 shireesh-laptop avahi-daemon[1098]: Received response from host 192.168.1.155 with invalid source port 37219 on interface 'eth0.0'", - "Jan 19 14:03:54 shireesh-laptop avahi-daemon[1098]: Invalid legacy unicast query packet.", - "Jan 19 14:03:54 shireesh-laptop avahi-daemon[1098]: Invalid legacy unicast query packet.", - "Jan 19 14:03:54 shireesh-laptop avahi-daemon[1098]: Received response from host 192.168.1.155 with invalid source port 37219 on interface 'eth0.0'", - "Jan 19 14:05:09 shireesh-laptop avahi-daemon[1098]: last message repeated 8 times", - "Jan 19 14:12:48 shireesh-laptop NetworkManager: <debug> [1295426568.002642] periodic_update(): Roamed from BSSID E0:CB:4E:C0:0B:7F (glfs) to (none) ((none))", - "Jan 19 14:12:54 shireesh-laptop NetworkManager: <debug> [1295426574.002448] periodic_update(): Roamed from BSSID (none) ((none)) to E0:CB:4E:C0:0B:7F (glfs)", - "Jan 19 14:17:01 shireesh-laptop CRON[5321]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)" }; - - return logMessages; - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java deleted file mode 100644 index d97827c6..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/ServersPage.java +++ /dev/null @@ -1,138 +0,0 @@ - /******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.IWorkbenchSite; - -import com.gluster.storage.management.console.EntityGroupContentProvider; -import com.gluster.storage.management.console.ServerTableLabelProvider; -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.Server; - -public class ServersPage extends AbstractTableViewerPage<Server> { - private List<Server> servers; - - public enum SERVER_TABLE_COLUMN_INDICES { - NAME, IP_ADDRESSES, NUM_OF_DISKS, TOTAL_DISK_SPACE - }; - - private static final String[] SERVER_TABLE_COLUMN_NAMES = new String[] { "Name", "IP Address(es)", "Number of Disks", "Total Disk Space (GB)" }; - - public ServersPage(final Composite parent, IWorkbenchSite site, EntityGroup<Server> serversGroup) { - super(site, parent, SWT.NONE, true, true, serversGroup); - this.servers = serversGroup.getEntities(); - } - - @Override - protected ClusterListener createClusterListener() { - return new DefaultClusterListener() { - @Override - public void discoveredServerRemoved(Server server) { - tableViewer.remove(server); - parent.update(); - } - - @Override - public void discoveredServerAdded(Server server) { - tableViewer.add(server); - parent.update(); - } - - @Override - public void discoveredServerChanged(Server server, Event event) { - tableViewer.update(server, null); - parent.update(); - } - }; - } - - public void setInput(EntityGroup<Server> servers) { - tableViewer.setInput(servers); - tableViewer.refresh(); - } - - @Override - protected void setColumnProperties(Table table) { - setColumnProperties(table, SERVER_TABLE_COLUMN_INDICES.NAME, SWT.CENTER, 70); - setColumnProperties(table, SERVER_TABLE_COLUMN_INDICES.IP_ADDRESSES, SWT.CENTER, 100); - setColumnProperties(table, SERVER_TABLE_COLUMN_INDICES.NUM_OF_DISKS, SWT.CENTER, 70); - setColumnProperties(table, SERVER_TABLE_COLUMN_INDICES.TOTAL_DISK_SPACE, SWT.CENTER, 70); - // setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.NUM_OF_CPUS, SWT.CENTER, 90); - // setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.CPU_USAGE, SWT.CENTER, 90); - // setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.TOTAL_MEMORY, SWT.CENTER, 90); - // setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.MEMORY_IN_USE, SWT.CENTER, 90); - // setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.DISK_SPACE_IN_USE, SWT.CENTER, 90); - } - - @Override - protected String[] getColumnNames() { - return SERVER_TABLE_COLUMN_NAMES; - } - - @Override - protected IBaseLabelProvider getLabelProvider() { - return new ServerTableLabelProvider(); - } - - @Override - protected IContentProvider getContentProvider() { - return new EntityGroupContentProvider<Server>(); - } - - @Override - protected List<Server> getAllEntities() { - return servers; - } - - /** - * Sets properties for alignment and weight of given column of given table - * - * @param table - * @param columnIndex - * @param alignment - * @param weight - */ - private void setColumnProperties(Table table, SERVER_TABLE_COLUMN_INDICES columnIndex, int alignment, int weight) { - TableColumn column = table.getColumn(columnIndex.ordinal()); - column.setAlignment(alignment); - - TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); - tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); - } - - @Override - protected ViewerComparator createViewerComparator() { - // TODO Auto-generated method stub - return null; - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java deleted file mode 100644 index c166af0f..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/TasksPage.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * TasksPage.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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.IWorkbenchSite; - -import com.gluster.storage.management.console.TasksTableLabelProvider; -import com.gluster.storage.management.console.toolbar.GlusterToolbarManager; -import com.gluster.storage.management.core.model.ClusterListener; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Entity; -import com.gluster.storage.management.core.model.TaskInfo; - -public class TasksPage extends AbstractTableViewerPage<TaskInfo> { - private List<TaskInfo> taskInfoList; - private TaskInfo selectedTask; - - public enum TASK_TABLE_COLUMN_INDICES { - TASK, STATUS - }; - - private static final String[] TASK_TABLE_COLUMN_NAMES = new String[] { "Task", "Status"}; - - - public TasksPage(IWorkbenchSite site, Composite parent, int style, List<TaskInfo> taskInfo) { - super(site, parent, style, false, false, taskInfo); - this.taskInfoList = taskInfo; - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.pages.AbstractTableViewerPage#createClusterListener() - */ - @Override - protected ClusterListener createClusterListener() { - return new DefaultClusterListener() { - @Override - public void taskAdded(TaskInfo taskInfo) { - tableViewer.add(taskInfo); - parent.update(); - } - - @Override - public void taskRemoved(TaskInfo taskInfo) { - tableViewer.remove(taskInfo); - parent.update(); - // hide the task related actionset as no task is selected - // site.getPage().hideActionSet(ActionConstants.ACTION_SET_TASK); - } - - @Override - public void taskUpdated(TaskInfo taskInfo) { - tableViewer.update(taskInfo, null); - parent.update(); - // fire selection event so that toolbar gets updated - // (the action class listens to selection and enables/disables automatically) - tableViewer.setSelection(new StructuredSelection(taskInfo)); - } - }; - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.pages.AbstractTableViewerPage#getColumnNames() - */ - @Override - protected String[] getColumnNames() { - return TASK_TABLE_COLUMN_NAMES; - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.pages.AbstractTableViewerPage#setColumnProperties(org.eclipse.swt.widgets.Table) - */ - @Override - protected void setColumnProperties(Table table) { - guiHelper.setColumnProperties(table, TASK_TABLE_COLUMN_INDICES.TASK.ordinal(), SWT.LEFT, 50); - guiHelper.setColumnProperties(table, TASK_TABLE_COLUMN_INDICES.STATUS.ordinal(), SWT.LEFT, 50); - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.pages.AbstractTableViewerPage#getLabelProvider() - */ - @Override - protected IBaseLabelProvider getLabelProvider() { - return new TasksTableLabelProvider(); - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.pages.AbstractTableViewerPage#getContentProvider() - */ - @Override - protected IContentProvider getContentProvider() { - return new ArrayContentProvider(); - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.pages.AbstractTableViewerPage#getAllEntities() - */ - @Override - protected List<TaskInfo> getAllEntities() { - return taskInfoList; - } - - /* (non-Javadoc) - * @see com.gluster.storage.management.console.views.pages.AbstractTableViewerPage#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) - */ - @Override - public void selectionChanged(IWorkbenchPart part, ISelection selection) { - if (selection instanceof StructuredSelection) { - Entity selectedEntity = (Entity) ((StructuredSelection) selection).getFirstElement(); - if (selectedEntity != null && selectedEntity instanceof TaskInfo && selectedEntity != selectedTask) { - selectedTask = (TaskInfo)selectedEntity; - new GlusterToolbarManager(part.getSite().getWorkbenchWindow()).updateToolbar(selectedTask); - } - } - } - - @Override - protected ViewerComparator createViewerComparator() { - // TODO Auto-generated method stub - return null; - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumeLogsPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumeLogsPage.java deleted file mode 100644 index 162160f8..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumeLogsPage.java +++ /dev/null @@ -1,431 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.VerifyEvent; -import org.eclipse.swt.events.VerifyListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.DateTime; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.widgets.FormToolkit; - -import com.gluster.storage.management.client.VolumesClient; -import com.gluster.storage.management.console.VolumeLogTableLabelProvider; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.constants.GlusterConstants; -import com.gluster.storage.management.core.constants.GlusterConstants.VOLUME_LOG_LEVELS; -import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.VolumeLogMessage; - -public class VolumeLogsPage extends Composite { - - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private final GUIHelper guiHelper = GUIHelper.getInstance(); - private Text filterText; - private Text lineCountText; - private Volume volume; - - public enum LOG_TABLE_COLUMN_INDICES { - DATE, TIME, BRICK, SEVERITY, MESSAGE - }; - - private static final String[] LOG_TABLE_COLUMN_NAMES = new String[] { "Date", "Time", "Brick", "Severity", "Message" }; - private TableViewer tableViewer; - private Combo bricksCombo; - private Combo severityCombo; - private DateTime fromDate; - private DateTime fromTime; - private DateTime toDate; - private DateTime toTime; - private Button fromCheckbox; - private Button toCheckbox; - - /** - * Create the volume logs page - * - * @param parent - * @param style - * @param volume - * Volume for which the logs page is to be created - */ - public VolumeLogsPage(Composite parent, int style, Volume volume) { - super(parent, style); - this.volume = volume; - - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - } - }); - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - configureLayout(); - - Composite composite = toolkit.createComposite(this, SWT.NONE); - toolkit.paintBordersFor(composite); - - createLineCountLabel(composite); - createLineCountText(composite); - - createBricksLabel(composite); - createBricksCombo(composite); - - createSeverityLabel(composite); - createSeverityCombo(composite); - - createFromDateLabel(composite); - createFromDateField(composite); - createFromTimeField(composite); - createFromCheckbox(composite); - - createToDateLabel(composite); - createToDateField(composite); - createToTimeField(composite); - createToCheckbox(composite); - - createSearchButton(composite); - - createSeparator(composite); - - createFilterLabel(composite); - createFilterText(composite); - - createLogTableViewer(); - } - - private void createLogTableViewer() { - Composite tableViewerComposite = createTableViewerComposite(); - - tableViewer = new TableViewer(tableViewerComposite, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); - tableViewer.setLabelProvider(new VolumeLogTableLabelProvider()); - tableViewer.setContentProvider(new ArrayContentProvider()); - - setupLogsTable(tableViewerComposite, tableViewer.getTable()); - guiHelper.createFilter(tableViewer, filterText, false); - } - - private void createFilterText(Composite composite) { - filterText = guiHelper.createFilterText(toolkit, composite); - filterText.setBounds(90, 105, 250, 20); - } - - private void createFilterLabel(Composite composite) { - Label lblFilterString = toolkit.createLabel(composite, "Filter String", SWT.LEFT); - lblFilterString.setBounds(0, 105, 85, 20); - } - - private void createSeparator(Composite composite) { - Label separator = toolkit.createLabel(composite, "", SWT.SEPARATOR | SWT.HORIZONTAL | SWT.FILL); - separator.setBounds(0, 95, 680, 2); - } - - private void createSearchButton(Composite composite) { - Button btnGo = toolkit.createButton(composite, "&Fetch Logs", SWT.NONE); - btnGo.setBounds (615, 55, 75, 30); - btnGo.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - VolumesClient client = new VolumesClient(); - - Date fromTimestamp = null; - Date toTimestamp = null; - - if (fromCheckbox.getSelection()) { - fromTimestamp = extractTimestamp(fromDate, fromTime); - } - - if (toCheckbox.getSelection()) { - toTimestamp = extractTimestamp(toDate, toTime); - } - - if (!validateTimeRange(fromTimestamp, toTimestamp)) { - return; - } - - try { - List<VolumeLogMessage> logMessages = client.getLogs(volume.getName(), bricksCombo.getText(), - severityCombo.getText(), fromTimestamp, toTimestamp, - Integer.parseInt(lineCountText.getText())); - tableViewer.setInput(logMessages.toArray(new VolumeLogMessage[0])); - tableViewer.refresh(); - } catch (Exception ex) { - MessageDialog.openError(getShell(), "Volume Logs", - "Error while fetching volume logs: [" + ex.getMessage() + "]"); - } - } - }); - } - - protected boolean validateTimeRange(Date fromTimestamp, Date toTimestamp) { - if (fromTimestamp == null && toTimestamp == null) { - // no time range selected. nothing to validate. - return true; - } - - Calendar calendar = Calendar.getInstance(); - Date now = calendar.getTime(); - if (fromTimestamp != null && fromTimestamp.after(now)) { - MessageDialog.openError(getShell(), "Volume Logs", "From time can't be greater than current time!"); - return false; - } - - if (toTimestamp != null) { - if (toTimestamp.after(now)) { - MessageDialog.openError(getShell(), "Volume Logs", "To time can't be greater than current time!"); - return false; - } - - if (fromTimestamp.after(toTimestamp)) { - MessageDialog.openError(getShell(), "Volume Logs", "From time can't be greater than To time!"); - return false; - } - } - - return true; - } - - private void createToCheckbox(Composite composite) { - toCheckbox = toolkit.createButton(composite, null, SWT.CHECK); - toCheckbox.setBounds(320, 60, 15, 20); - toCheckbox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (toCheckbox.getSelection()) { - toDate.setEnabled(true); - toTime.setEnabled(true); - } else { - toDate.setEnabled(false); - toTime.setEnabled(false); - } - } - }); - } - - private void createToTimeField(Composite composite) { - toTime = new DateTime(composite, SWT.BORDER | SWT.TIME); - toTime.setBounds(490, 60, 120, 20); - toTime.setEnabled(false); - toolkit.adapt(toTime); - toolkit.paintBordersFor(toTime); - } - - private void createToDateField(Composite composite) { - toDate = new DateTime(composite, SWT.BORDER | SWT.DROP_DOWN); - toDate.setBounds(365, 60, 120, 20); - toDate.setEnabled(false); - toolkit.adapt(toDate); - toolkit.paintBordersFor(toDate); - } - - private void createToDateLabel(Composite composite) { - Label lblTo = toolkit.createLabel(composite, "To", SWT.NONE); - lblTo.setBounds(340, 60, 25, 20); - } - - private void createFromCheckbox(Composite composite) { - fromCheckbox = toolkit.createButton(composite, null, SWT.CHECK); - fromCheckbox.setBounds(0, 60, 15, 20); - fromCheckbox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (fromCheckbox.getSelection()) { - fromDate.setEnabled(true); - fromTime.setEnabled(true); - } else { - fromDate.setEnabled(false); - fromTime.setEnabled(false); - } - } - }); - } - - private void createFromTimeField(Composite composite) { - fromTime = new DateTime(composite, SWT.BORDER | SWT.TIME); - fromTime.setBounds(190, 60, 120, 20); - fromTime.setEnabled(false); - toolkit.adapt(fromTime); - toolkit.paintBordersFor(fromTime); - } - - private void createFromDateField(Composite composite) { - fromDate = new DateTime(composite, SWT.BORDER | SWT.DROP_DOWN); - fromDate.setBounds(60, 60, 120, 20); - fromDate.setEnabled(false); - toolkit.adapt(fromDate); - toolkit.paintBordersFor(fromDate); - } - - private void createFromDateLabel(Composite composite) { - Label lblFrom = toolkit.createLabel(composite, "from", SWT.NONE); - lblFrom.setBounds(20, 60, 40, 20); - } - - private void createSeverityCombo(Composite composite) { - severityCombo = new Combo(composite, SWT.READ_ONLY); - severityCombo.setBounds(555, 15, 110, 20); - - severityCombo.setItems(GlusterConstants.VOLUME_LOG_LEVELS_ARR.toArray(new String[0])); - severityCombo.select(VOLUME_LOG_LEVELS.ERROR.ordinal()); - severityCombo.add(CoreConstants.ALL, 0); - - toolkit.adapt(severityCombo); - toolkit.paintBordersFor(severityCombo); - } - - private void createSeverityLabel(Composite composite) { - Label lblSeverity = toolkit.createLabel(composite, "Severity", SWT.NONE); - lblSeverity.setBounds(480, 15, 70, 20); - } - - private void createBricksCombo(Composite composite) { - bricksCombo = new Combo(composite, SWT.READ_ONLY); - bricksCombo.setBounds(365, 15, 100, 20); - bricksCombo.setItems( volume.getBrickDirectories().toArray(new String[0])); - bricksCombo.add(CoreConstants.ALL, 0); - toolkit.adapt(bricksCombo); - toolkit.paintBordersFor(bricksCombo); - bricksCombo.select(0); - } - - private void createBricksLabel(Composite composite) { - Label lblMessagesAndFilter = toolkit.createLabel(composite, "messages, and filter on bricks", SWT.NONE); - lblMessagesAndFilter.setBounds(160, 15, 200, 20); - } - - private void createLineCountText(Composite composite) { - lineCountText = toolkit.createText(composite, "100", SWT.NONE); - lineCountText.setBounds(85, 15, 60, 20); - lineCountText.setTextLimit(4); - lineCountText.addVerifyListener(new VerifyListener() { - - @Override - public void verifyText(VerifyEvent event) { - // Assume we allow it - event.doit = true; - - String text = event.text; - char[] chars = text.toCharArray(); - - // Don't allow if text contains non-digit characters - for (int i = 0; i < chars.length; i++) { - if (!Character.isDigit(chars[i])) { - event.doit = false; - break; - } - } - } - }); - } - - private void createLineCountLabel(Composite composite) { - Label lblScanLast = toolkit.createLabel(composite, "Scan last", SWT.NONE); - lblScanLast.setBounds(0, 15, 80, 20); - } - - private void configureLayout() { - setLayout(new GridLayout(1, false)); - GridData layoutData = new GridData(); - layoutData.grabExcessHorizontalSpace = true; - layoutData.grabExcessVerticalSpace = true; - // layoutData.verticalIndent = 10; - setLayoutData(layoutData); - } - - private Composite createTableViewerComposite() { - Composite tableViewerComposite = new Composite(this, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); - layoutData.verticalIndent = 10; - tableViewerComposite.setLayoutData(layoutData); - return tableViewerComposite; - } - - private void setupLogsTable(Composite parent, Table table) { - table.setHeaderVisible(true); - table.setLinesVisible(false); - - TableColumnLayout tableColumnLayout = guiHelper.createTableColumnLayout(table, LOG_TABLE_COLUMN_NAMES); - parent.setLayout(tableColumnLayout); - - setColumnProperties(table, LOG_TABLE_COLUMN_INDICES.DATE, SWT.CENTER, 50); - setColumnProperties(table, LOG_TABLE_COLUMN_INDICES.TIME, SWT.CENTER, 50); - setColumnProperties(table, LOG_TABLE_COLUMN_INDICES.BRICK, SWT.CENTER, 50); - setColumnProperties(table, LOG_TABLE_COLUMN_INDICES.SEVERITY, SWT.CENTER, 50); - setColumnProperties(table, LOG_TABLE_COLUMN_INDICES.MESSAGE, SWT.LEFT, 100); - } - - /** - * Sets properties for alignment and weight of given column of given table - * - * @param table - * @param columnIndex - * @param alignment - * @param weight - */ - private void setColumnProperties(Table table, LOG_TABLE_COLUMN_INDICES columnIndex, int alignment, int weight) { - TableColumn column = table.getColumn(columnIndex.ordinal()); - column.setAlignment(alignment); - - TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); - tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); - } - - private Date extractTimestamp(DateTime date, DateTime time) { - Calendar calendar = Calendar.getInstance(); - calendar.setLenient(false); - calendar.set(Calendar.DAY_OF_MONTH, date.getDay()); - // in Calendar class, month starts with zero i.e. Jan = 0 - calendar.set(Calendar.MONTH, date.getMonth()); - calendar.set(Calendar.YEAR, date.getYear()); - calendar.set(Calendar.HOUR_OF_DAY, time.getHours()); - calendar.set(Calendar.MINUTE, time.getMinutes()); - calendar.set(Calendar.SECOND, time.getSeconds()); - return calendar.getTime(); - } - - public void addDoubleClickListener(IDoubleClickListener listener) { - tableViewer.addDoubleClickListener(listener); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumeOptionsPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumeOptionsPage.java deleted file mode 100644 index dd02a672..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumeOptionsPage.java +++ /dev/null @@ -1,360 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.apache.commons.lang.WordUtils; -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.ColumnLabelProvider; -import org.eclipse.jface.viewers.ColumnLayoutData; -import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TableViewerColumn; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -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.forms.widgets.FormToolkit; - -import com.gluster.storage.management.console.GlusterDataModelManager; -import com.gluster.storage.management.console.VolumeOptionsContentProvider; -import com.gluster.storage.management.console.VolumeOptionsTableLabelProvider; -import com.gluster.storage.management.console.utils.GUIHelper; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.model.DefaultClusterListener; -import com.gluster.storage.management.core.model.Event; -import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.VolumeOption; -import com.gluster.storage.management.core.model.VolumeOptionInfo; - -public class VolumeOptionsPage extends Composite { - - private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private TableViewer tableViewer; - private GUIHelper guiHelper = GUIHelper.getInstance(); - private Volume volume; - private DefaultClusterListener clusterListener; - private Text filterText; - private List<VolumeOptionInfo> defaultVolumeOptions = GlusterDataModelManager.getInstance() - .getVolumeOptionsInfo(); - - public enum OPTIONS_TABLE_COLUMN_INDICES { - OPTION_KEY, OPTION_VALUE - }; - - private static final String[] OPTIONS_TABLE_COLUMN_NAMES = new String[] { "Option Key", "Option Value" }; - private Button addTopButton; - private Button addBottomButton; - private TableViewerColumn keyColumn; - private OptionKeyEditingSupport keyEditingSupport; - - public VolumeOptionsPage(final Composite parent, int style, Volume volume) { - super(parent, style); - - this.volume = volume; - - toolkit.adapt(this); - toolkit.paintBordersFor(this); - - setupPageLayout(); - addTopButton = createAddButton(); - filterText = guiHelper.createFilterText(toolkit, this); - - setupOptionsTableViewer(filterText); - - addBottomButton = createAddButton(); - - if (defaultVolumeOptions.size() == volume.getOptions().size()) { - setAddButtonsEnabled(false); - } - - tableViewer.setInput(volume.getOptions()); - - parent.layout(); // Important - this actually paints the table - registerListeners(parent); - } - - private void setAddButtonsEnabled(boolean enable) { - addTopButton.setEnabled(enable); - addBottomButton.setEnabled(enable); - } - - private Button createAddButton() { - return toolkit.createButton(this, "&Add", SWT.FLAT); - } - - private void registerListeners(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 - */ - addPaintListener(new PaintListener() { - - @Override - public void paintControl(PaintEvent e) { - parent.layout(); - } - }); - - clusterListener = new DefaultClusterListener() { - @Override - public void volumeChanged(Volume volume, Event event) { - super.volumeChanged(volume, event); - - switch (event.getEventType()) { - case VOLUME_OPTIONS_RESET: - if (!tableViewer.getControl().isDisposed()) { - //While reseting the options, clear the filter text before refreshing the tree - filterText.setText(""); - tableViewer.refresh(); - setAddButtonsEnabled(true); - } - break; - - case VOLUME_OPTION_SET: - String key = (String)event.getEventData(); - if (isNewOption(volume, key)) { - // option has been set successfully by the user. re-enable the add button and search filter - // textbox - setAddButtonsEnabled(true); - filterText.setEnabled(true); - } - - if (defaultVolumeOptions.size() == volume.getOptions().size()) { - setAddButtonsEnabled(false); - } - - tableViewer.refresh(); - break; - case VOLUME_CHANGED: - tableViewer.refresh(); - if(volume.getOptions().size() == defaultVolumeOptions.size()) { - setAddButtonsEnabled(false); - } else { - setAddButtonsEnabled(true); - } - default: - break; - } - } - - private boolean isNewOption(Volume volume, String optionKey) { - if (filterText.getText().length() > 0) { - // user has been filtering the contents. adding new option is allowed only when contents are NOT - // filtered. Thus it's impossible that this is a newly added option - return false; - } - - // if this is the last option in the volume options, it must be the new option - return optionKey.equals(volume.getOptions().getOptions().get(volume.getOptions().size() - 1).getKey()); - } - }; - - SelectionListener addButtonSelectionListener = new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - // add an empty option to be filled up by user - volume.setOption("", ""); - - tableViewer.refresh(); - tableViewer.setSelection(new StructuredSelection(getEntry(""))); - keyColumn.getViewer().editElement(getEntry(""), 0); // edit newly created entry - - // disable the add button AND search filter textbox till user fills up the new option - setAddButtonsEnabled(false); - filterText.setEnabled(false); - } - - private VolumeOption getEntry(String key) { - for (VolumeOption entry : volume.getOptions().getOptions()) { - if (entry.getKey().equals(key)) { - return entry; - } - } - return null; - } - }; - addTopButton.addSelectionListener(addButtonSelectionListener); - addBottomButton.addSelectionListener(addButtonSelectionListener); - - // Make sure that add button is enabled only when search filter textbox is empty - filterText.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent e) { - if (filterText.getText().length() > 0) { - setAddButtonsEnabled(false); - } else { - if (defaultVolumeOptions.size() == volume.getOptions().size()) { - setAddButtonsEnabled(false); - } else { - setAddButtonsEnabled(true); - } - } - } - }); - - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); - - addDisposeListener(new DisposeListener() { - - @Override - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - - if (!(addTopButton.isEnabled() || addBottomButton.isEnabled())) { - // user has selected key, but not added value. Since this is not a valid entry, - // remove the last option (without value) from the volume - volume.getOptions().remove(keyEditingSupport.getEntryBeingAdded().getKey()); - } - - GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); - } - }); - } - - private void setupPageLayout() { - final GridLayout layout = new GridLayout(2, false); - layout.verticalSpacing = 10; - layout.marginTop = 10; - setLayout(layout); - } - - private void setupOptionsTable(Composite parent) { - Table table = tableViewer.getTable(); - table.setHeaderVisible(true); - table.setLinesVisible(true); - - TableColumnLayout tableColumnLayout = createTableColumnLayout(); - parent.setLayout(tableColumnLayout); - - setColumnProperties(table, OPTIONS_TABLE_COLUMN_INDICES.OPTION_KEY, SWT.CENTER, 100); - setColumnProperties(table, OPTIONS_TABLE_COLUMN_INDICES.OPTION_VALUE, SWT.CENTER, 100); - } - - private TableColumnLayout createTableColumnLayout() { - TableColumnLayout tableColumnLayout = new TableColumnLayout(); - ColumnLayoutData defaultColumnLayoutData = new ColumnWeightData(100); - - tableColumnLayout.setColumnData(createKeyColumn(), defaultColumnLayoutData); - tableColumnLayout.setColumnData(createValueColumn(), defaultColumnLayoutData); - - return tableColumnLayout; - } - - private TableColumn createValueColumn() { - TableViewerColumn valueColumn = new TableViewerColumn(tableViewer, SWT.NONE); - valueColumn.getColumn() - .setText(OPTIONS_TABLE_COLUMN_NAMES[OPTIONS_TABLE_COLUMN_INDICES.OPTION_VALUE.ordinal()]); - valueColumn.setLabelProvider(new ColumnLabelProvider() { - @Override - public String getText(Object element) { - return ((VolumeOption) element).getValue(); - } - }); - - // User can edit value of a volume option - valueColumn.setEditingSupport(new OptionValueEditingSupport(valueColumn.getViewer(), volume)); - - return valueColumn.getColumn(); - } - - private TableColumn createKeyColumn() { - keyColumn = new TableViewerColumn(tableViewer, SWT.NONE); - keyColumn.getColumn().setText(OPTIONS_TABLE_COLUMN_NAMES[OPTIONS_TABLE_COLUMN_INDICES.OPTION_KEY.ordinal()]); - keyColumn.setLabelProvider(new ColumnLabelProvider() { - @Override - public String getText(Object element) { - return ((VolumeOption) element).getKey(); - } - - @Override - public String getToolTipText(Object element) { - String key = ((VolumeOption) element).getKey(); - if (key.isEmpty()) { - return "Click to select a volume option key"; - } - - VolumeOptionInfo optionInfo = GlusterDataModelManager.getInstance().getVolumeOptionInfo(key); - // Wrap the description before adding to tooltip so that long descriptions are displayed properly - return WordUtils.wrap(optionInfo.getDescription(), 60) + CoreConstants.NEWLINE + "Default value: " - + optionInfo.getDefaultValue(); - } - }); - - // Editing support required when adding new key - keyEditingSupport = new OptionKeyEditingSupport(keyColumn.getViewer(), volume); - keyColumn.setEditingSupport(keyEditingSupport); - - return keyColumn.getColumn(); - } - - private void createOptionsTableViewer(Composite parent) { - tableViewer = new TableViewer(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.SINGLE); - tableViewer.setLabelProvider(new VolumeOptionsTableLabelProvider()); - tableViewer.setContentProvider(new VolumeOptionsContentProvider()); - tableViewer.getTable().setLinesVisible(true); - - setupOptionsTable(parent); - } - - private Composite createTableViewerComposite() { - Composite tableViewerComposite = new Composite(this, SWT.NO); - tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); - - GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); - layoutData.horizontalSpan = 2; - tableViewerComposite.setLayoutData(layoutData); - - return tableViewerComposite; - } - - private void setupOptionsTableViewer(final Text filterText) { - Composite tableViewerComposite = createTableViewerComposite(); - createOptionsTableViewer(tableViewerComposite); - ColumnViewerToolTipSupport.enableFor(tableViewer); - // Create a case insensitive filter for the table viewer using the filter text field - guiHelper.createFilter(tableViewer, filterText, false); - } - - private void setColumnProperties(Table table, OPTIONS_TABLE_COLUMN_INDICES columnIndex, int alignment, int weight) { - TableColumn column = table.getColumn(columnIndex.ordinal()); - column.setAlignment(alignment); - - TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); - tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); - } -} diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java deleted file mode 100644 index 484f91b0..00000000 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************************* - * 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.console.views.pages; - -import java.util.List; - -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.IWorkbenchSite; - -import com.gluster.storage.management.console.EntityGroupContentProvider; -import com.gluster.storage.management.console.VolumeTableLabelProvider; -import com.gluster.storage.management.console.toolbar.GlusterToolbarManager; -import com.gluster.storage.management.core.constants.CoreConstants; -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.Volume; - -public class VolumesPage extends AbstractTableViewerPage<Volume> { - private List<Volume> volumes; - - final GlusterToolbarManager toolbarManager = new GlusterToolbarManager( site.getWorkbenchWindow()); - - public enum VOLUME_TABLE_COLUMN_INDICES { - NAME, VOLUME_TYPE, NUM_OF_BRICKS, TRANSPORT_TYPE, VOLUME_STATUS - }; - - private static final String[] VOLUME_TABLE_COLUMN_NAMES = new String[] { "Name", "Volume Type", - "Number of" + CoreConstants.NEWLINE + "Bricks", "Transport Type", "Status" }; - - public VolumesPage(final Composite parent, IWorkbenchSite site, EntityGroup<Volume> volumes) { - super(site, parent, SWT.NONE, true, true, volumes); - this.volumes = volumes.getEntities(); - } - - @Override - protected String[] getColumnNames() { - return VOLUME_TABLE_COLUMN_NAMES; - } - - @Override - protected void setColumnProperties(Table table) { - setColumnProperties(table, VOLUME_TABLE_COLUMN_INDICES.VOLUME_STATUS, SWT.CENTER, 50); - setColumnProperties(table, VOLUME_TABLE_COLUMN_INDICES.NUM_OF_BRICKS, SWT.CENTER, 50); - setColumnProperties(table, VOLUME_TABLE_COLUMN_INDICES.TRANSPORT_TYPE, SWT.CENTER, 70); - } - - @Override - protected IBaseLabelProvider getLabelProvider() { - return new VolumeTableLabelProvider(); - } - - @Override - protected IContentProvider getContentProvider() { - return new EntityGroupContentProvider<Volume>(); - } - - @Override - protected ClusterListener createClusterListener() { - return new DefaultClusterListener() { - @Override - public void volumeCreated(Volume volume) { - tableViewer.add(volume); - parent.update(); - toolbarManager.updateToolbar(volume); - } - - @Override - public void volumeDeleted(Volume volume) { - tableViewer.remove(volume); - parent.update(); - toolbarManager.updateToolbar(volume); - } - - @Override - public void volumeChanged(Volume volume, Event event) { - tableViewer.update(volume, null); - parent.update(); - toolbarManager.updateToolbar(volume); - } - }; - } - - /** - * Sets properties for alignment and weight of given column of given table - * - * @param table - * @param columnIndex - * @param alignment - * @param weight - */ - public void setColumnProperties(Table table, VOLUME_TABLE_COLUMN_INDICES columnIndex, int alignment, int weight) { - TableColumn column = table.getColumn(columnIndex.ordinal()); - column.setAlignment(alignment); - - TableColumnLayout tableColumnLayout = (TableColumnLayout) table.getParent().getLayout(); - tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); - } - - @Override - protected List<Volume> getAllEntities() { - return volumes; - } - - @Override - protected ViewerComparator createViewerComparator() { - // TODO Auto-generated method stub - return null; - } -} |