Vered Volansky has uploaded a new change for review. Change subject: webadmin: Storage popup view Changes (1) ......................................................................
webadmin: Storage popup view Changes (1) Change-Id: Id8ed6d6818976ef76267b5fd8a3ca19c83fcda06 Signed-off-by: Vered Volansky <vvola...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.ui.xml 6 files changed, 168 insertions(+), 120 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/42432/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java index b2e86a6..f0c5e31 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java @@ -344,6 +344,8 @@ model.getWipeAfterDelete().setIsChangeable(isStoragePropertiesEditable); //set the field domain type to non editable model.getAvailableStorageItems().setIsChangeable(false); + model.getAvailableStorageTypeItems().setIsChangeable(false); + model.getAvailableStorageDomainTypeItems().setIsChangeable(false); model.setIsChangeable(isStorageNameEditable || isStoragePropertiesEditable); model.getWarningLowSpaceIndicator().setEntity(storage.getWarningLowSpaceIndicator()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java index c6da8a9..ad1b333 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java @@ -168,6 +168,30 @@ privateAvailableStorageItems = value; } + private ListModel<StorageType> availableStorageTypeItems; + + public ListModel<StorageType> getAvailableStorageTypeItems() + { + return availableStorageTypeItems; + } + + private void setAvailableStorageTypeItems(ListModel<StorageType> value) + { + availableStorageTypeItems = value; + } + + private ListModel<StorageDomainType> availableStorageDomainTypeItems; + + public ListModel<StorageDomainType> getAvailableStorageDomainTypeItems() + { + return availableStorageDomainTypeItems; + } + + private void setAvailableStorageDomainTypeItems(ListModel<StorageDomainType> value) + { + availableStorageDomainTypeItems = value; + } + private EntityModel<Integer> warningLowSpaceIndicator; public EntityModel<Integer> getWarningLowSpaceIndicator() { @@ -234,7 +258,10 @@ setFormat(new ListModel<StorageFormatType>()); setAvailableStorageItems(new ListModel<IStorageModel>()); getAvailableStorageItems().getSelectedItemChangedEvent().addListener(this); - + setAvailableStorageTypeItems(new ListModel<StorageType>()); + getAvailableStorageTypeItems().getSelectedItemChangedEvent().addListener(this); + setAvailableStorageDomainTypeItems(new ListModel<StorageDomainType>()); + getAvailableStorageDomainTypeItems().getSelectedItemChangedEvent().addListener(this); setWarningLowSpaceIndicator(new EntityModel<Integer>()); getWarningLowSpaceIndicator().setEntity(getWarningLowSpaceIndicatorValue()); setWarningLowSpaceSize(new EntityModel<String>()); @@ -273,14 +300,11 @@ { host_SelectedItemChanged(); } - else if (sender == getAvailableStorageItems()) + else if (sender == getAvailableStorageTypeItems()) { - if (getAvailableStorageItems().getSelectedItem() instanceof IStorageModel) - { - setSelectedItem(null); - setSelectedItem(getAvailableStorageItems().getSelectedItem()); - updateWipeAfterDelete(); - } + setSelectedItem(null); + setSelectedItem(getAvailableStorageItems().getSelectedItem()); + updateWipeAfterDelete(); } } else if (ev.matchesDefinition(NfsStorageModel.pathChangedEventDefinition)) @@ -288,6 +312,8 @@ nfsStorageModel_PathChanged(sender, args); } } + + private void nfsStorageModel_PathChanged(Object sender, EventArgs args) { @@ -668,7 +694,7 @@ } private void updateWipeAfterDelete() { - StorageType storageType = getAvailableStorageItems().getSelectedItem().getType(); + StorageType storageType = getAvailableStorageTypeItems().getSelectedItem(); if (isNewStorage()) { AsyncDataProvider.getInstance().getStorageDomainDefaultWipeAfterDelete(new AsyncQuery(this, new INewAsyncCallback() { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java index ca5be09..4c439b5 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java @@ -1,8 +1,11 @@ package org.ovirt.engine.ui.uicommonweb.models.storage; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.VDS; @@ -37,15 +40,20 @@ // Filter UnSelectable models from AvailableStorageItems list ArrayList<IStorageModel> filterredItems = new ArrayList<IStorageModel>(); ArrayList<IStorageModel> items = Linq.<IStorageModel> cast(getModel().getItems()); + Set<StorageDomainType> storageDomainTypeItems = new HashSet<StorageDomainType>(); + Set<StorageType> storageTypeItems = new HashSet<StorageType>(); for (IStorageModel model : items) { if (((Model) model).getIsSelectable()) { filterredItems.add(model); + storageDomainTypeItems.add(model.getRole()); + storageTypeItems.add(model.getType()); } } - getModel().getAvailableStorageItems().setItems(filterredItems); + getModel().getAvailableStorageDomainTypeItems().setItems(storageDomainTypeItems); + getModel().getAvailableStorageTypeItems().setItems(storageTypeItems); } public void onStorageModelUpdated(IStorageModel model) diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index 77906cf..71ca221 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -389,9 +389,12 @@ @DefaultStringValue("Data Center") String storagePopupDataCenterLabel(); - @DefaultStringValue("Domain Function / Storage Type") + @DefaultStringValue("Storage Type") String storagePopupStorageTypeLabel(); + @DefaultStringValue("Domain Function") + String storagePopupDomainFunctionLabel(); + @DefaultStringValue("Format") String storagePopupFormatTypeLabel(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java index 5585230..3ac66f9 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java @@ -48,6 +48,9 @@ import com.google.gwt.user.client.ui.VerticalPanel; import com.google.inject.Inject; +import java.util.HashSet; +import java.util.Set; + public class StoragePopupView extends AbstractModelBoundPopupView<StorageModel> implements StoragePopupPresenterWidget.ViewDef { @@ -86,9 +89,14 @@ ListModelListBoxEditor<StoragePool> datacenterListEditor; @UiField(provided = true) - @Path(value = "availableStorageItems.selectedItem") - @WithElementId("availableStorageItems") - ListModelListBoxEditor<IStorageModel> storageTypeListEditor; + @Path(value = "availableStorageDomainTypeItems.selectedItem") + @WithElementId("availableStorageDomainTypeItems") + ListModelListBoxEditor<StorageDomainType> domainFunctionListEditor; + + @UiField(provided = true) + @Path(value = "availableStorageTypeItems.selectedItem") + @WithElementId("availableStorageTypeItems") + ListModelListBoxEditor<StorageType> storageTypeListEditor; @UiField(provided = true) @Path(value = "format.selectedItem") @@ -200,36 +208,19 @@ hostListEditor = new ListModelListBoxEditor<>(new NameRenderer<VDS>()); - storageTypeListEditor = new ListModelListBoxEditor<IStorageModel>(new AbstractRenderer<IStorageModel>() { - @Override - public String render(IStorageModel object) { - String formattedString = ""; //$NON-NLS-1$ + domainFunctionListEditor = new ListModelListBoxEditor<StorageDomainType>(new EnumRenderer<StorageDomainType>()); - if (object != null) { - EnumRenderer<StorageType> storageEnumRenderer = new EnumRenderer<StorageType>(); - EnumRenderer<StorageDomainType> storageDomainEnumRenderer = new EnumRenderer<StorageDomainType>(); - - String storageDomainType = storageDomainEnumRenderer.render(object.getRole()); - String storageType = storageEnumRenderer.render(object.getType()); - - formattedString = storageDomainType + " / " + storageType; //$NON-NLS-1$ - } - return formattedString; - } - }); + storageTypeListEditor = new ListModelListBoxEditor<StorageType>(new EnumRenderer<StorageType>()); activateDomainEditor = new EntityModelCheckBoxEditor(Align.RIGHT); } void addStyles() { - storageTypeListEditor.setLabelStyleName(style.label()); - storageTypeListEditor.addContentWidgetContainerStyleName(style.storageContentWidget()); - formatListEditor.setLabelStyleName(style.label()); - formatListEditor.addContentWidgetContainerStyleName(style.formatContentWidget()); activateDomainEditor.addContentWidgetContainerStyleName(style.activateDomainEditor()); advancedParametersExpanderContent.setStyleName(style.advancedParametersExpanderContent()); warningLowSpaceIndicatorEditor.addContentWidgetContainerStyleName(style.warningTextBoxEditor()); criticalSpaceActionBlockerEditor.addContentWidgetStyleName(style.blockerTextBoxEditor()); + formatListEditor.addContentWidgetContainerStyleName(style.formatListEditor()); } void localize() { @@ -237,6 +228,7 @@ descriptionEditor.setLabel(constants.storagePopupDescriptionLabel()); commentEditor.setLabel(constants.commentLabel()); datacenterListEditor.setLabel(constants.storagePopupDataCenterLabel()); + domainFunctionListEditor.setLabel(constants.storagePopupDomainFunctionLabel()); storageTypeListEditor.setLabel(constants.storagePopupStorageTypeLabel()); formatListEditor.setLabel(constants.storagePopupFormatTypeLabel()); hostListEditor.setLabel(constants.storagePopupHostLabel()); @@ -252,7 +244,16 @@ driver.edit(object); final StorageModel storageModel = object; - storageModel.getSelectedItemChangedEvent().addListener(new IEventListener<EventArgs>() { + + storageModel.getAvailableStorageDomainTypeItems().getSelectedItemChangedEvent().addListener(new IEventListener<EventArgs>() { + @Override + public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { + // Display the StorageTypes according to the selected StorageDomainFunction. + updateStorageTypesByDomainType(storageModel); + } + }); + + storageModel.getAvailableStorageTypeItems().getSelectedItemChangedEvent().addListener(new IEventListener<EventArgs>() { @Override public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { // Reveal the appropriate storage view according to the selected storage type @@ -291,34 +292,46 @@ @SuppressWarnings("unchecked") private void revealStorageView(StorageModel object) { - IStorageModel model = object.getSelectedItem(); + StorageType storageType = storageTypeListEditor.asEditor().getActualEditor().getValue(); + StorageDomainType storageDomainType = domainFunctionListEditor.asEditor().getActualEditor().getValue(); - if (model != null) { + if (storageType == null || storageDomainType == null) { + return; + } - if (model.getType() == StorageType.NFS) { + switch (storageType) { + case NFS: storageView = new NfsStorageView(); - } else if (model.getType() == StorageType.LOCALFS) { + break; + case LOCALFS: storageView = new LocalStorageView(); - } else if (model.getType() == StorageType.POSIXFS) { + break; + case POSIXFS: storageView = new PosixStorageView(); - } else if (model.getType() == StorageType.GLUSTERFS) { + break; + case GLUSTERFS: storageView = new GlusterStorageView(); - } else if (model.getType() == StorageType.FCP) { + break; + case FCP: if (!object.getBehavior().isImport()) { storageView = new FcpStorageView(true); - } - else { + } else { storageView = new ImportFcpStorageView(); } - } else if (model.getType() == StorageType.ISCSI) { + break; + case ISCSI: if (!object.getBehavior().isImport()) { storageView = new IscsiStorageView(true); - } - else { + } else { storageView = new ImportIscsiStorageView(); } - } + break; + default: + break; } + + updateStorageSelectedItem(object, storageType, storageDomainType); + IStorageModel model = object.getSelectedItem(); // Re-apply element IDs on 'storageView' change ViewIdHandler.idHandler.generateAndSetIds(this); @@ -335,6 +348,26 @@ storageView.focus(); } } + } + + private void updateStorageSelectedItem(StorageModel storageModel, StorageType storageType, StorageDomainType domainType) { + for (IStorageModel model : storageModel.getItems()) { + if (model.getType() == storageType && model.getRole() == domainType) { + storageModel.setSelectedItem(model); + break; + } + } + } + + private void updateStorageTypesByDomainType(StorageModel storageModel) { + StorageDomainType storageDomainType = domainFunctionListEditor.asEditor().getActualEditor().getValue(); + Set<StorageType> filteredStorageTypes = new HashSet<>(); + for (IStorageModel currModel : storageModel.getItems()) { + if (currModel.getRole() == storageDomainType) { + filteredStorageTypes.add(currModel.getType()); + } + } + storageModel.getAvailableStorageTypeItems().setItems(filteredStorageTypes); } @Override @@ -359,23 +392,17 @@ } interface WidgetStyle extends CssResource { - String formatContentWidget(); - - String storageContentWidget(); - String activateDomainEditor(); String label(); - - String storageTypeLabel(); - - String storageDomainTypeLabel(); String advancedParametersExpanderContent(); String warningTextBoxEditor(); String blockerTextBoxEditor(); + + String formatListEditor(); } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.ui.xml index 8c38521..57c0d4d 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.ui.xml @@ -6,19 +6,21 @@ <ui:with field='resources' type='org.ovirt.engine.ui.webadmin.ApplicationResources' /> <ui:style type="org.ovirt.engine.ui.webadmin.section.main.view.popup.storage.StoragePopupView.WidgetStyle"> + .generalTabTopDecorator { + background-color: #D3D3D3; + margin-bottom: 8px; + margin-top: 0px; + margin-right: 3px; + padding-top: 6px; + padding-bottom: 6px; + width: 100%; + } + .content { overflow-x: hidden; } - .formatContentWidget { - width: 80px; - } - - .storageContentWidget { - width: 240px; - } - - .activateDomainEditor { + .activateDomainEditor { width: 370px; } @@ -49,46 +51,23 @@ line-height: 26px !important; } - .nameEditor, .datacenterListEditor, - .hostListEditor { + .domainFunctionListEditor, + .storageTypeListEditor, + .hostListEditor { width: 375px; } - .descriptionEditor { + .formatListEditor { + width: 20%; + } + + .descriptionEditor, + .commentEditor, + .nameEditor { position: absolute; right: 2px; width: 350px; - } - - .commentEditor { - position: absolute; - right: 2px; - width: 350px; - } - - .formatListEditor { - width: 140px; - float: right; - padding-top: 5px; - } - - .storageTypeListEditor { - width: 510px; - padding-left: 5px; - padding-top: 5px; - } - - .storageTypeLabel { - color: black; - font-size: 12px; - padding-left: 40px; - } - - .storageDomainTypeLabel { - color: black; - font-size: 12px; - font-weight: bold; } .advancedParametersExpanderContent { @@ -115,25 +94,27 @@ </ui:style> - <d:SimpleDialogPanel width="760px" height="665px"> - <d:content> - <g:FlowPanel addStyleNames="{style.content}"> - <g:HorizontalPanel> - <ge:StringEntityModelTextBoxEditor ui:field="nameEditor" addStyleNames="{style.nameEditor}"/> - <ge:StringEntityModelTextBoxEditor ui:field="descriptionEditor" addStyleNames="{style.descriptionEditor}"/> - </g:HorizontalPanel> - <g:HorizontalPanel> - <e:ListModelListBoxEditor ui:field="datacenterListEditor" addStyleNames="{style.datacenterListEditor}"/> - <g:Image ui:field="datacenterAlertIcon" resource='{resources.alertImage}' visible="false" addStyleNames="{style.dataCenterAlertIcon}"/> - <ge:StringEntityModelTextBoxEditor ui:field="commentEditor" addStyleNames="{style.commentEditor}"/> - <ge:EntityModelCheckBoxEditor ui:field="activateDomainEditor" /> - </g:HorizontalPanel> - <g:HorizontalPanel addStyleNames="{style.obrand_storageTypePanel}"> - <e:ListModelListBoxEditor ui:field="storageTypeListEditor" addStyleNames="{style.storageTypeListEditor}"/> - <e:ListModelListBoxEditor ui:field="formatListEditor" addStyleNames="{style.formatListEditor}"/> - </g:HorizontalPanel> - <e:ListModelListBoxEditor ui:field="hostListEditor" addStyleNames="{style.hostListEditor}"/> - <g:FlowPanel ui:field="specificStorageTypePanel" addStyleNames="{style.specificStorageTypePanel}"></g:FlowPanel> + <d:SimpleDialogPanel width="760px" height="665px"> + <d:content> + <g:FlowPanel addStyleNames="{style.content}"> + <g:VerticalPanel addStyleNames="{style.generalTabTopDecorator}"> + <g:HorizontalPanel> + <e:ListModelListBoxEditor ui:field="datacenterListEditor" addStyleNames="{style.datacenterListEditor}"/> + <g:Image ui:field="datacenterAlertIcon" resource='{resources.alertImage}' visible="false" addStyleNames="{style.dataCenterAlertIcon}"/> + <ge:StringEntityModelTextBoxEditor ui:field="nameEditor" addStyleNames="{style.nameEditor}"/> + </g:HorizontalPanel> + <g:HorizontalPanel> + <e:ListModelListBoxEditor ui:field="domainFunctionListEditor" addStyleNames="{style.domainFunctionListEditor}"/> + <ge:StringEntityModelTextBoxEditor ui:field="descriptionEditor" addStyleNames="{style.descriptionEditor}"/> + </g:HorizontalPanel> + <g:HorizontalPanel> + <e:ListModelListBoxEditor ui:field="storageTypeListEditor" addStyleNames="{style.storageTypeListEditor}"/> + <ge:StringEntityModelTextBoxEditor ui:field="commentEditor" addStyleNames="{style.commentEditor}"/> + <ge:EntityModelCheckBoxEditor ui:field="activateDomainEditor" /> + </g:HorizontalPanel> + <e:ListModelListBoxEditor ui:field="hostListEditor" addStyleNames="{style.hostListEditor}"/> + </g:VerticalPanel> + <g:FlowPanel ui:field="specificStorageTypePanel" addStyleNames="{style.specificStorageTypePanel}"></g:FlowPanel> <d:AdvancedParametersExpander ui:field="advancedParametersExpander"/> <g:VerticalPanel ui:field="advancedParametersExpanderContent"> <g:HorizontalPanel> @@ -141,10 +122,11 @@ <g:Label ui:field="warningLowSpaceSizeLabel" addStyleNames="{style.warningLowSpaceSizeLabel}"/> </g:HorizontalPanel> <ge:IntegerEntityModelTextBoxEditor ui:field="criticalSpaceActionBlockerEditor"/> + <e:ListModelListBoxEditor ui:field="formatListEditor" /> <ge:EntityModelCheckBoxEditor ui:field="wipeAfterDeleteEditor" addStyleNames="{style.wipeAfterDeleteEditor}"/> </g:VerticalPanel> - </g:FlowPanel> - </d:content> - </d:SimpleDialogPanel> + </g:FlowPanel> + </d:content> + </d:SimpleDialogPanel> </ui:UiBinder> -- To view, visit https://gerrit.ovirt.org/42432 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id8ed6d6818976ef76267b5fd8a3ca19c83fcda06 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Vered Volansky <vvola...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches