Greg Padgett has uploaded a new change for review. Change subject: webadmin: disk search overridden by default upon tab reveal ......................................................................
webadmin: disk search overridden by default upon tab reveal If a search was done on disks and revealing the tab caused the radio button for the disk view to switch (from All or Luns to Images), the default search would run instead of the one entered. The view now considers these 3 entry points to displaying disks: 1) User navigates to Disks tab in UI. The search string will match DefaultSearchString, in which case the view type is set to Images and processed as if a user clicked one of the radio buttons. 2) Onclick of radio buttons for view type [All/Images/Luns]. The ClickHandler will set a flag so the view knows to associate the resulting search with the selected view type. Columns are chosen as soon as the view type is known. 3) Other searches (manual search bar entry, bookmarks, ...). This is detected by the absense of 1 or 2 above. The view type radio button is set to a special "Search Results" type, and the columns are chosen based on the disk type of the returned results. The 3 other view type buttons remain enabled, so that the user can click them to navigate to view the standard Disks>[All/Images/Luns] result set. Note that the VM disk list code had minor changes to allow the radio button widgit to use a new DiskViewType enum, which allows the "Search Results" radio button to appear in the main Disks tab. These changes should have resulted in no user-facing change to the VM disk list. Change-Id: Iebf63fc5e6343819062959cd85219b1a965daf95 Bug-Url: https://bugzilla.redhat.com/893259 Signed-off-by: Greg Padgett <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskViewType.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModelBase.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java 8 files changed, 149 insertions(+), 32 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/97/10897/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index ba4db51..0e708a7 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1061,6 +1061,9 @@ @DefaultStringValue("Direct LUN") String lunDisksLabel(); + @DefaultStringValue("Search Results") + String searchDisksLabel(); + @DefaultStringValue("Current") String currentQuota(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java index 5afcdfb..c8783e1 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java @@ -1,7 +1,7 @@ package org.ovirt.engine.ui.common.widget.uicommon.disks; -import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.uicommonweb.models.disks.DiskViewType; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; @@ -18,6 +18,7 @@ RadioButton allButton; RadioButton imagesButton; RadioButton lunsButton; + RadioButton searchButton; public DisksViewRadioGroup() { initWidget(getRadioGroupPanel()); @@ -27,10 +28,15 @@ allButton = new RadioButton("diskTypeView"); //$NON-NLS-1$ imagesButton = new RadioButton("diskTypeView"); //$NON-NLS-1$ lunsButton = new RadioButton("diskTypeView"); //$NON-NLS-1$ + searchButton = new RadioButton("diskTypeView"); //$NON-NLS-1$ allButton.getElement().getStyle().setMarginRight(20, Unit.PX); imagesButton.getElement().getStyle().setMarginRight(20, Unit.PX); lunsButton.getElement().getStyle().setMarginRight(20, Unit.PX); + searchButton.getElement().getStyle().setMarginRight(20, Unit.PX); + + searchButton.setEnabled(false); + searchButton.setVisible(false); FlowPanel buttonsPanel = new FlowPanel(); buttonsPanel.getElement().getStyle().setProperty("marginLeft", "auto"); //$NON-NLS-1$ //$NON-NLS-2$ @@ -38,8 +44,9 @@ buttonsPanel.add(allButton); buttonsPanel.add(imagesButton); buttonsPanel.add(lunsButton); + buttonsPanel.add(searchButton); - setDiskStorageType(DiskStorageType.IMAGE); + setDiskViewType(DiskViewType.IMAGE); localize(constants); return buttonsPanel; @@ -49,12 +56,14 @@ allButton.addClickHandler(clickHandler); imagesButton.addClickHandler(clickHandler); lunsButton.addClickHandler(clickHandler); + searchButton.addClickHandler(clickHandler); } void localize(CommonApplicationConstants constants) { allButton.setText(constants.allDisksLabel()); imagesButton.setText(constants.imageDisksLabel()); lunsButton.setText(constants.lunDisksLabel()); + searchButton.setText(constants.searchDisksLabel()); } public RadioButton getAllButton() { @@ -69,15 +78,22 @@ return lunsButton; } - public DiskStorageType getDiskStorageType() { - return imagesButton.getValue() ? DiskStorageType.IMAGE : - lunsButton.getValue() ? DiskStorageType.LUN : null; + public RadioButton getSearchButton() { + return searchButton; } - public void setDiskStorageType(DiskStorageType diskStorageType) { - allButton.setValue(diskStorageType == null); - imagesButton.setValue(diskStorageType == DiskStorageType.IMAGE); - lunsButton.setValue(diskStorageType == DiskStorageType.LUN); + public DiskViewType getDiskViewType() { + return imagesButton.getValue() ? DiskViewType.IMAGE : + lunsButton.getValue() ? DiskViewType.LUN : + searchButton.getValue() ? DiskViewType.SEARCH : null; } + public void setDiskViewType(DiskViewType diskViewType) { + allButton.setValue(diskViewType == null); + imagesButton.setValue(diskViewType == DiskViewType.IMAGE); + lunsButton.setValue(diskViewType == DiskViewType.LUN); + searchButton.setValue(diskViewType == DiskViewType.SEARCH); + + searchButton.setVisible(diskViewType == DiskViewType.SEARCH); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java index 8e986c0..3edbafe 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java @@ -1,7 +1,6 @@ package org.ovirt.engine.ui.common.widget.uicommon.vm; import org.ovirt.engine.core.common.businessentities.Disk; -import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.IEventListener; @@ -11,6 +10,7 @@ import org.ovirt.engine.ui.common.widget.uicommon.AbstractModelBoundTableWidget; import org.ovirt.engine.ui.common.widget.uicommon.disks.DisksViewColumns; import org.ovirt.engine.ui.common.widget.uicommon.disks.DisksViewRadioGroup; +import org.ovirt.engine.ui.uicommonweb.models.disks.DiskViewType; import org.ovirt.engine.ui.uicommonweb.models.vms.VmDiskListModelBase; import com.google.gwt.event.dom.client.ClickEvent; @@ -57,7 +57,7 @@ getModel().getItemsChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { - disksViewRadioGroup.setDiskStorageType((DiskStorageType) getModel().getDiskViewType().getEntity()); + disksViewRadioGroup.setDiskViewType((DiskViewType) getModel().getDiskViewType().getEntity()); } }); } @@ -68,7 +68,7 @@ boolean luns = disksViewRadioGroup.getLunsButton().getValue(); getTable().getSelectionModel().clear(); - getModel().getDiskViewType().setEntity(disksViewRadioGroup.getDiskStorageType()); + getModel().getDiskViewType().setEntity(disksViewRadioGroup.getDiskViewType()); getModel().setItems(null); getModel().Search(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java index 48f0548..0968cb5 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java @@ -58,6 +58,7 @@ import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult; import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; + @SuppressWarnings("unused") public class DiskListModel extends ListWithDetailsModel implements ISupportSystemTreeContext { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskViewType.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskViewType.java new file mode 100644 index 0000000..d184000 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskViewType.java @@ -0,0 +1,32 @@ +package org.ovirt.engine.ui.uicommonweb.models.disks; + +import org.ovirt.engine.core.common.businessentities.Identifiable; +import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; + +public enum DiskViewType implements Identifiable { + /** + * Enum of the disk's type, which corresponds to the storage details will be contained in the {@link Disk} + * object instance. This is used for filtering the display of various disk types in the UI. + */ + + // These names should correspond to DiskStorageType values in order for storageValue() to work properly + IMAGE, + LUN, + SEARCH; + + @Override + public int getValue() { + return this.ordinal(); + } + + public static DiskViewType forValue(int value) { + return values()[value]; + } + + public static DiskStorageType storageValue(DiskViewType value) { + if (value == null) { + return null; + } + return DiskStorageType.valueOf(value.name()); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModelBase.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModelBase.java index ffa0081..f4330bc 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModelBase.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModelBase.java @@ -7,6 +7,7 @@ import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; +import org.ovirt.engine.ui.uicommonweb.models.disks.DiskViewType; public class VmDiskListModelBase extends SearchableListModel { @@ -35,7 +36,7 @@ { ArrayList<Disk> disks = value != null ? Linq.<Disk> Cast(value) : new ArrayList<Disk>(); ArrayList<Disk> filteredDisks = new ArrayList<Disk>(); - DiskStorageType diskStorageType = (DiskStorageType) getDiskViewType().getEntity(); + DiskStorageType diskStorageType = DiskViewType.storageValue((DiskViewType) getDiskViewType().getEntity()); for (Disk disk : disks) { if (diskStorageType == null || diskStorageType == disk.getDiskStorageType()) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java index 9d793bee..204d065 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java @@ -1,7 +1,6 @@ package org.ovirt.engine.ui.webadmin.gin.uicommon; import org.ovirt.engine.core.common.businessentities.Disk; -import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.permissions; @@ -76,12 +75,6 @@ } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } - } - - @Override - public void onMainTabSelected() { - super.onMainTabSelected(); - getModel().getDiskViewType().setEntity(DiskStorageType.IMAGE); } }; } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java index 499c994..4057f66 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java @@ -5,6 +5,7 @@ import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.IEventListener; +import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.uicommon.model.CommonModelManager; import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider; @@ -14,6 +15,7 @@ import org.ovirt.engine.ui.uicommonweb.models.CommonModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.disks.DiskListModel; +import org.ovirt.engine.ui.uicommonweb.models.disks.DiskViewType; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabDiskPresenter; import org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView; @@ -38,10 +40,13 @@ private final ApplicationConstants constants; private final CommonModel commonModel; + private final DiskViewType defaultDiskViewType; private DisksViewRadioGroup disksViewRadioGroup; + private DiskStorageType searchResultDiskType; + private boolean radioButtonClick; @Inject - public MainTabDiskView(MainModelProvider<Disk, DiskListModel> modelProvider, ApplicationConstants constants) { + public MainTabDiskView(final MainModelProvider<Disk, DiskListModel> modelProvider, ApplicationConstants constants) { super(modelProvider); this.constants = constants; @@ -51,32 +56,98 @@ initTableButtons(); initTableOverhead(); initWidget(getTable()); + this.radioButtonClick = false; + this.defaultDiskViewType = DiskViewType.IMAGE; modelProvider.getModel().getDiskViewType().getEntityChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { EntityModel diskViewType = (EntityModel) sender; - disksViewRadioGroup.setDiskStorageType((DiskStorageType) diskViewType.getEntity()); - onDiskViewTypeChanged(); + disksViewRadioGroup.setDiskViewType((DiskViewType) diskViewType.getEntity()); } }); + + modelProvider.getModel().getItemsChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + if (getMainModel().getDiskViewType().getEntity() == DiskViewType.SEARCH + && getMainModel().getItems() != null) { + identifySearchResultDiskType(); + setColumnsForDiskViewType(); + } + } + }); + + modelProvider.getModel().getPropertyChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + if ("SearchString".equals(((PropertyChangedEventArgs) args).PropertyName)) { //$NON-NLS-1$ + onSearchStringChanged(); + } + } + }); + + // The model's search string may have changed before we were around to subscribe to the event + onSearchStringChanged(); } final ClickHandler clickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { - if (((RadioButton) event.getSource()).getValue()) { - getMainModel().getDiskViewType().setEntity(disksViewRadioGroup.getDiskStorageType()); + if (((RadioButton) event.getSource()).getValue() + && getMainModel().getDiskViewType().getEntity() != disksViewRadioGroup.getDiskViewType()) { + radioButtonClick = true; + getMainModel().getDiskViewType().setEntity(disksViewRadioGroup.getDiskViewType()); + searchByDiskViewType(disksViewRadioGroup.getDiskViewType()); } } }; - void onDiskViewTypeChanged() { - boolean all = disksViewRadioGroup.getAllButton().getValue(); - boolean images = disksViewRadioGroup.getImagesButton().getValue(); - boolean luns = disksViewRadioGroup.getLunsButton().getValue(); + private void onSearchStringChanged() { + if (!radioButtonClick) { + if (getMainModel().getDefaultSearchString().equals(getMainModel().getSearchString())) { + getMainModel().getDiskViewType().setEntity(defaultDiskViewType); + } else { + getMainModel().getDiskViewType().setEntity(DiskViewType.SEARCH); + } + } + if (getMainModel().getDiskViewType().getEntity() != DiskViewType.SEARCH) { + // If diskViewType is SEARCH, column selection occurs after the items arrive + searchResultDiskType = DiskViewType.storageValue((DiskViewType) getMainModel().getDiskViewType().getEntity()); + setColumnsForDiskViewType(); + } + radioButtonClick = false; + } - searchByDiskViewType(disksViewRadioGroup.getDiskStorageType()); + private void identifySearchResultDiskType() { + boolean foundImage = false; + boolean foundLun = false; + + for (Object item : getMainModel().getItems()) { + Disk disk = (Disk) item; + if (!foundImage && disk.getDiskStorageType() == DiskStorageType.IMAGE) { + foundImage = true; + } else if (!foundLun && disk.getDiskStorageType() == DiskStorageType.LUN) { + foundLun = true; + } + if (foundImage && foundLun) { + break; + } + } + + if (foundImage && !foundLun) { + searchResultDiskType = DiskStorageType.IMAGE; + } else if (!foundImage && foundLun) { + searchResultDiskType = DiskStorageType.LUN; + } else { + searchResultDiskType = null; + } + } + + void setColumnsForDiskViewType() { + boolean all = (searchResultDiskType == null); + boolean images = (searchResultDiskType == DiskStorageType.IMAGE); + boolean luns = (searchResultDiskType == DiskStorageType.LUN); getTable().ensureColumnPresent( DisksViewColumns.aliasColumn, constants.aliasDisk(), all || images || luns, @@ -195,7 +266,7 @@ }); } - void searchByDiskViewType(Object diskViewType) { + void searchByDiskViewType(DiskViewType diskViewType) { final String disksSearchPrefix = "Disks:"; //$NON-NLS-1$ final String diskTypeSearchPrefix = "disk_type = "; //$NON-NLS-1$ final String searchConjunctionAnd = " all "; //$NON-NLS-1$ @@ -204,7 +275,7 @@ final String empty = ""; //$NON-NLS-1$ String diskTypePostfix = diskViewType != null ? - ((DiskStorageType) diskViewType).name().toLowerCase() + space : null; + (DiskViewType.storageValue(diskViewType)).name().toLowerCase() + space : null; String diskType = diskTypePostfix != null ? diskTypeSearchPrefix + diskTypePostfix : empty; -- To view, visit http://gerrit.ovirt.org/10897 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iebf63fc5e6343819062959cd85219b1a965daf95 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Greg Padgett <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
