summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-06-08 02:14:01 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-06-08 02:14:01 -0700
commit405cd5d55f511cc60d3682aea69192f0d6709030 (patch)
tree55ce6e35df141aed1df20afd7506ca6827d03e7f /src
parent55ab23c6d34435c264f1c756abf74c6f06e8566e (diff)
parent24136b4fa5f06e8e0f800838fcfcd90fcd7d58b6 (diff)
Merge pull request #60 from Dhandapani/master
Bug 2881 - "Add" button should get disabled once all the Volume options are selected
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java2
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeLogMessage.java16
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeOptionsPage.java115
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java5
4 files changed, 76 insertions, 62 deletions
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
index 40de70ec..8921287a 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
@@ -215,7 +215,7 @@ public class GlusterDummyModel {
private void addMessages(List<VolumeLogMessage> messages, Disk disk, String severity, int count) {
for (int i = 1; i <= count; i++) {
String message = severity + "message" + i;
- messages.add(new VolumeLogMessage(new Date(), disk.getQualifiedName(), disk.getMountPoint(), severity, message));
+ messages.add(new VolumeLogMessage(new Date(), disk.getMountPoint(), severity, message));
}
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeLogMessage.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeLogMessage.java
index ab88d917..a5ac1848 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeLogMessage.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeLogMessage.java
@@ -30,9 +30,7 @@ import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement
public class VolumeLogMessage implements Filterable {
private Date timestamp;
- // TODO: Replace disk with brick, rename class as VolumeLogMessage
private String brick;
- private String disk;
private String severity;
private String message;
@@ -53,14 +51,6 @@ public class VolumeLogMessage implements Filterable {
this.timestamp = timestamp;
}
- public String getDisk() {
- return disk;
- }
-
- public void setDisk(String disk) {
- this.disk = disk;
- }
-
public String getSeverity() {
return severity;
}
@@ -81,13 +71,13 @@ public class VolumeLogMessage implements Filterable {
this.brick = brickDirectory;
}
+
public String getBrickDirectory() {
return brick;
}
- public VolumeLogMessage(Date timestamp, String disk, String brickDirectory, String severity, String message) {
+ public VolumeLogMessage(Date timestamp, String brickDirectory, String severity, String message) {
setTimestamp(timestamp);
- setDisk(disk);
setBrickDirectory(brickDirectory);
setSeverity(severity);
setMessage(message);
@@ -95,7 +85,7 @@ public class VolumeLogMessage implements Filterable {
@Override
public boolean filter(String filterString, boolean caseSensitive) {
- return StringUtil.filterString(getSeverity() + getTimestamp() + getDisk() + getMessage(), filterString,
+ return StringUtil.filterString(getSeverity() + getTimestamp() + getBrickDirectory() + getMessage(), filterString,
caseSensitive);
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeOptionsPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeOptionsPage.java
index 3e8e8baa..1386b037 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeOptionsPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeOptionsPage.java
@@ -18,6 +18,7 @@
*******************************************************************************/
package com.gluster.storage.management.gui.views.details;
+import java.util.List;
import java.util.Map.Entry;
import org.apache.commons.lang.WordUtils;
@@ -68,19 +69,22 @@ public class VolumeOptionsPage extends Composite {
private Volume volume;
private DefaultClusterListener clusterListener;
private Text filterText;
+ private List<VolumeOptionInfo> defaultVolumeOptions = GlusterDataModelManager.getInstance()
+ .getVolumeOptionsDefaults();
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 addButton;
+ 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);
@@ -88,61 +92,76 @@ public class VolumeOptionsPage extends Composite {
setupPageLayout();
filterText = guiHelper.createFilterText(toolkit, this);
- createAddButton();
+
+ addTopButton = createAddButton();
setupOptionsTableViewer(filterText);
-
- createAddButton();
+
+ addBottomButton = createAddButton();
+
+ if (defaultVolumeOptions.size() == volume.getOptions().size()) {
+ setAddButtonsEnabled(false);
+ }
tableViewer.setInput(volume.getOptions().entrySet());
-
+
parent.layout(); // Important - this actually paints the table
registerListeners(parent);
}
- private void createAddButton() {
- addButton = toolkit.createButton(this, "&Add", SWT.FLAT);
- addButton.addSelectionListener(new SelectionAdapter() {
+ private void setAddButtonsEnabled(boolean enable) {
+ addTopButton.setEnabled(enable);
+ addBottomButton.setEnabled(enable);
+ }
+
+ private Button createAddButton() {
+ Button button = toolkit.createButton(this, "&Add", SWT.FLAT);
+ button.addSelectionListener(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
-
+ keyColumn.getViewer().editElement(getEntry(""), 0); // edit newly created entry
+
// disable the add button AND search filter textbox till user fills up the new option
- addButton.setEnabled(false);
+ setAddButtonsEnabled(false);
filterText.setEnabled(false);
}
private Entry<String, String> getEntry(String key) {
- for(Entry<String, String> entry : volume.getOptions().entrySet()) {
- if(entry.getKey().equals(key)) {
+ for (Entry<String, String> entry : volume.getOptions().entrySet()) {
+ if (entry.getKey().equals(key)) {
return entry;
}
}
return null;
}
});
-
+
// 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) {
- addButton.setEnabled(false);
+ if (filterText.getText().length() > 0) {
+ setAddButtonsEnabled(false);
} else {
- addButton.setEnabled(true);
+ if (defaultVolumeOptions.size() == volume.getOptions().size()) {
+ setAddButtonsEnabled(false);
+ } else {
+ setAddButtonsEnabled(true);
+ }
}
}
});
+ return button;
}
private void registerListeners(final Composite parent) {
addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
- if(!addButton.isEnabled()) {
+ 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());
@@ -164,12 +183,12 @@ public class VolumeOptionsPage extends Composite {
parent.layout();
}
});
-
+
parent.addDisposeListener(new DisposeListener() {
-
+
@Override
public void widgetDisposed(DisposeEvent e) {
- if(!addButton.isEnabled()) {
+ 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
Entry<String, String> entryBeingAdded = keyEditingSupport.getEntryBeingAdded();
@@ -178,27 +197,31 @@ public class VolumeOptionsPage extends Composite {
}
});
-
clusterListener = new DefaultClusterListener() {
@SuppressWarnings("unchecked")
@Override
public void volumeChanged(Volume volume, Event event) {
super.volumeChanged(volume, event);
- if(event.getEventType() == EVENT_TYPE.VOLUME_OPTIONS_RESET) {
- if(!tableViewer.getControl().isDisposed()) {
+ if (event.getEventType() == EVENT_TYPE.VOLUME_OPTIONS_RESET) {
+ if (!tableViewer.getControl().isDisposed()) {
tableViewer.refresh();
}
}
-
- if(event.getEventType() == EVENT_TYPE.VOLUME_OPTION_SET) {
- Entry<String, String> eventEntry = (Entry<String, String>)event.getEventData();
+
+ if (event.getEventType() == EVENT_TYPE.VOLUME_OPTION_SET) {
+ Entry<String, String> eventEntry = (Entry<String, String>) event.getEventData();
if (isNewOption(volume, eventEntry.getKey())) {
- // option has been set successfully by the user. re-enable the add button and search filter textbox
- addButton.setEnabled(true);
+ // option has been set successfully by the user. re-enable the add button and search filter
+ // textbox
+ setAddButtonsEnabled(true);
filterText.setEnabled(true);
}
-
- if(tableViewer.getTable().getItemCount() < volume.getOptions().size()) {
+
+ if (defaultVolumeOptions.size() == volume.getOptions().size()) {
+ setAddButtonsEnabled(false);
+ }
+
+ if (tableViewer.getTable().getItemCount() < volume.getOptions().size()) {
// new volume set from outside this page. refresh the viewer.
tableViewer.refresh();
} else {
@@ -209,14 +232,14 @@ public class VolumeOptionsPage extends Composite {
}
private boolean isNewOption(Volume volume, String optionKey) {
- if(filterText.getText().length() > 0) {
+ 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().keySet().toArray()[volume.getOptions().size()-1]);
+ return optionKey.equals(volume.getOptions().keySet().toArray()[volume.getOptions().size() - 1]);
}
};
GlusterDataModelManager.getInstance().addClusterListener(clusterListener);
@@ -240,7 +263,7 @@ public class VolumeOptionsPage extends Composite {
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);
@@ -250,7 +273,7 @@ public class VolumeOptionsPage extends Composite {
return tableColumnLayout;
}
-
+
private TableColumn createValueColumn() {
TableViewerColumn valueColumn = new TableViewerColumn(tableViewer, SWT.NONE);
valueColumn.getColumn()
@@ -262,10 +285,10 @@ public class VolumeOptionsPage extends Composite {
return ((Entry<String, String>) element).getValue();
}
});
-
+
// User can edit value of a volume option
valueColumn.setEditingSupport(new OptionValueEditingSupport(valueColumn.getViewer(), volume));
-
+
return valueColumn.getColumn();
}
@@ -278,26 +301,26 @@ public class VolumeOptionsPage extends Composite {
public String getText(Object element) {
return ((Entry<String, String>) element).getKey();
}
-
+
@SuppressWarnings("unchecked")
@Override
public String getToolTipText(Object element) {
String key = ((Entry<String, String>) element).getKey();
- if(key.isEmpty()) {
+ 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
+ // 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();
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
index 05ea58ce..d6c41475 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
@@ -31,6 +31,7 @@ import static com.gluster.storage.management.core.constants.RESTConstants.PATH_P
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_BRICKS;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_BRICK_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DELETE_OPTION;
+import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DOWNLOAD;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_FROM_TIMESTAMP;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_LINE_COUNT;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_LOG_SEVERITY;
@@ -414,7 +415,6 @@ public class VolumesResource {
// populate disk and trim other fields
List<VolumeLogMessage> logMessages = response.getLogMessages();
for (VolumeLogMessage logMessage : logMessages) {
- logMessage.setDisk(brick.getDiskName());
logMessage.setBrickDirectory(brick.getBrickDirectory());
logMessage.setMessage(logMessage.getMessage().trim());
logMessage.setSeverity(logMessage.getSeverity().trim());
@@ -484,7 +484,8 @@ public class VolumesResource {
@QueryParam(QUERY_PARAM_LOG_SEVERITY) String severity,
@QueryParam(QUERY_PARAM_FROM_TIMESTAMP) String fromTimestamp,
@QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp,
- @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount) {
+ @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount,
+ @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) {
List<VolumeLogMessage> logMessages = null;
ClusterInfo cluster = clusterService.getCluster(clusterName);