diff options
| author | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-06-08 02:14:01 -0700 |
|---|---|---|
| committer | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-06-08 02:14:01 -0700 |
| commit | 405cd5d55f511cc60d3682aea69192f0d6709030 (patch) | |
| tree | 55ce6e35df141aed1df20afd7506ca6827d03e7f /src | |
| parent | 55ab23c6d34435c264f1c756abf74c6f06e8566e (diff) | |
| parent | 24136b4fa5f06e8e0f800838fcfcd90fcd7d58b6 (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')
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); |
