Lior Vernia has uploaded a new change for review. Change subject: webadmin: Added DC-per-network choice in Discovery popup ......................................................................
webadmin: Added DC-per-network choice in Discovery popup A different DC may be picked for each imported network. Change-Id: If217cbd8938a81ab0c6c8fed2a12f96b41ad99b8 Signed-off-by: Lior Vernia <[email protected]> --- A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml 7 files changed, 164 insertions(+), 58 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/25/15525/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java new file mode 100644 index 0000000..00049ad --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java @@ -0,0 +1,88 @@ +package org.ovirt.engine.ui.common.widget.table.column; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.ui.uicommonweb.models.ListModel; + +import com.google.gwt.cell.client.AbstractInputCell; +import com.google.gwt.cell.client.SelectionCell; +import com.google.gwt.cell.client.ValueUpdater; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.text.shared.Renderer; + +/** + * This class may be used to display a ListBox, backed by a ListModel, in cell widgets. It mimics the behaviour of a + * SelectionCell by passing on rendering requests and browser events to a member delegate. The SelectionCell options are + * set by rendering the items of a ListModel using the renderer passed to the constructor. Additional functionality + * includes enabling/disabling the ListBox according to the IsChangeable state of the ListModel. + * + * @param <T> + * the ListModel item type. + */ +public class ListModelListBoxCell<T> extends AbstractInputCell<ListModel, String> { + + private static final String PATTERN_SELECT = "<select"; //$NON-NLS-1$ + private static final String REPLACEMENT_SELECT = "<select disabled"; //$NON-NLS-1$ + + private SelectionCell delegate; + private Map<String, T> entityByName; + private final Renderer<T> renderer; + + public ListModelListBoxCell(final Renderer<T> renderer) { + super("change"); //$NON-NLS-1$ + this.renderer = renderer; + } + + @SuppressWarnings("unchecked") + public void setOptions(ListModel model) { + entityByName = new HashMap<String, T>(); + List<String> options = new ArrayList<String>(); + for (T entity : (Iterable<T>) model.getItems()) { + String entityName = renderer.render(entity); + entityByName.put(entityName, entity); + options.add(entityName); + } + delegate = new SelectionCell(options); + } + + @SuppressWarnings("unchecked") + @Override + public void render(Context context, ListModel value, SafeHtmlBuilder sb) { + SafeHtmlBuilder sbDelegate = new SafeHtmlBuilder(); + delegate.render(context, renderer.render((T) value.getSelectedItem()), sbDelegate); + if (value.getIsChangable()) { + sb.append(sbDelegate.toSafeHtml()); + } else { + sb.appendHtmlConstant(sbDelegate.toSafeHtml().asString().replaceFirst(PATTERN_SELECT, REPLACEMENT_SELECT)); + } + } + + @SuppressWarnings("unchecked") + @Override + public void onBrowserEvent(Context context, + Element parent, + final ListModel model, + NativeEvent event, + ValueUpdater<ListModel> valueUpdater) { + + delegate.onBrowserEvent(context, + parent, + renderer.render((T) model.getSelectedItem()), + event, + new ValueUpdater<String>() { + + @Override + public void update(String value) { + if (value != null) { + model.setSelectedItem(entityByName.get(value)); + } + } + }); + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java new file mode 100644 index 0000000..6b23a6d --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java @@ -0,0 +1,27 @@ +package org.ovirt.engine.ui.common.widget.table.column; + +import org.ovirt.engine.ui.uicommonweb.models.ListModel; + +import com.google.gwt.text.shared.Renderer; +import com.google.gwt.user.cellview.client.Column; + +/** + * Column for displaying a ListBox backed by ListModel using {@link ListModelListBoxCell}. + * + * @param <T> + * the row type. + * @param <S> + * the ListModel item type. + */ +public abstract class ListModelListBoxColumn<T, S> extends Column<T, ListModel> { + + public ListModelListBoxColumn(Renderer<S> renderer) { + super(new ListModelListBoxCell<S>(renderer)); + } + + @SuppressWarnings("unchecked") + public void setOptions(ListModel model) { + ((ListModelListBoxCell<S>) getCell()).setOptions(model); + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java index 5441d5f..1913fb7 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java @@ -82,6 +82,10 @@ ExternalNetwork externalNetwork = new ExternalNetwork(); externalNetwork.setNetwork(network); externalNetwork.setAttached(false); + externalNetwork.getDataCenters().setIsChangable(false); + Iterable<Object> dcList = getDataCenters().getItems(); + externalNetwork.getDataCenters().setItems(dcList); + externalNetwork.getDataCenters().setSelectedItem(Linq.firstOrDefault(dcList)); externalNetwork.setPublicUse(false); items.add(externalNetwork); } @@ -117,10 +121,10 @@ public void onDiscover() { ArrayList<VdcActionParametersBase> mulipleActionParameters = new ArrayList<VdcActionParametersBase>(); - Guid dcId = ((StoragePool) (getDataCenters().getSelectedItem())).getId(); for (ExternalNetwork externalNetwork : (List<ExternalNetwork>) getNetworkList().getItems()) { if (externalNetwork.isAttached()) { + Guid dcId = ((StoragePool) externalNetwork.getDataCenters().getSelectedItem()).getId(); externalNetwork.getNetwork().setDataCenterId(dcId); AddNetworkStoragePoolParameters params = new AddNetworkStoragePoolParameters(dcId, externalNetwork.getNetwork()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java index d068a1d..0ecf79c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java @@ -2,14 +2,17 @@ import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; public class ExternalNetwork extends EntityModel { Network network; + ListModel dcList; boolean attached; private boolean publicUse; public ExternalNetwork() { + dcList = new ListModel(); } public Network getNetwork() { @@ -20,6 +23,10 @@ this.network = network; } + public ListModel getDataCenters() { + return dcList; + } + public boolean isAttached() { return attached; } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java index 9573fa1..064d54c 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java @@ -3,6 +3,9 @@ import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.providers.DiscoverNetworksModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; @@ -11,6 +14,7 @@ public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<DiscoverNetworksModel> { void setNetworkList(ListModel networkList); + void setDataCenterList(ListModel dcList); } @Inject @@ -19,9 +23,16 @@ } @Override - public void init(DiscoverNetworksModel model) { + public void init(final DiscoverNetworksModel model) { super.init(model); getView().setNetworkList(model.getNetworkList()); - } + model.getDataCenters().getItemsChangedEvent().addListener(new IEventListener() { + + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + getView().setDataCenterList(model.getDataCenters()); + } + }); + } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java index 168a426..71e4ebc 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java @@ -3,14 +3,13 @@ import java.util.ArrayList; import org.ovirt.engine.core.common.businessentities.StoragePool; -import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView; import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel; import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable; import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable.SelectionMode; -import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer; import org.ovirt.engine.ui.common.widget.table.column.CheckboxColumn; +import org.ovirt.engine.ui.common.widget.table.column.ListModelListBoxColumn; import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; @@ -27,7 +26,6 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.event.shared.EventBus; -import com.google.gwt.resources.client.CssResource; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -44,47 +42,20 @@ } @UiField(provided = true) - @Path(value = "dataCenters.selectedItem") - @WithElementId("dataCenter") - public ListModelListBoxEditor<Object> dataCenterEditor; - - @UiField(provided = true) @Ignore public final EntityModelCellTable<ListModel> networksTable; - @UiField - public WidgetStyle style; + private ListModelListBoxColumn<EntityModel, StoragePool> dcColumn; @Inject public DiscoverNetworkPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants, ApplicationTemplates templates) { super(eventBus, resources); // Initialize Editors - dataCenterEditor = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() { - @Override - public String renderNullSafe(Object object) { - return ((StoragePool) object).getname(); - } - }); this.networksTable = new EntityModelCellTable<ListModel>(SelectionMode.NONE, true); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); initEntityModelCellTable(constants, templates); - localize(constants); - addStyles(); driver.initialize(this); - } - - private void addStyles() { - dataCenterEditor.addWrapperStyleName(style.dcEditor()); - } - - protected void localize(ApplicationConstants constants) { - dataCenterEditor.setLabel(constants.networkPopupDataCenterLabel()); - } - - @Override - public void focusInput() { - dataCenterEditor.setFocus(true); } @SuppressWarnings("unchecked") @@ -129,6 +100,7 @@ public void update(int index, EntityModel model, Boolean value) { ExternalNetwork externalNetwork = (ExternalNetwork) model; externalNetwork.setAttached(value); + externalNetwork.getDataCenters().setIsChangable(value); refreshNetworksTable(); } }) { @@ -149,6 +121,20 @@ } }, assignAllHeader, "80px"); //$NON-NLS-1$ + + dcColumn = new ListModelListBoxColumn<EntityModel, StoragePool>(new NullSafeRenderer<StoragePool>() { + @Override + public String renderNullSafe(StoragePool dc) { + return dc.getname(); + } + }) + { + @Override + public ListModel getValue(EntityModel network) { + return ((ExternalNetwork) network).getDataCenters(); + } + }; + networksTable.addColumn(dcColumn); networksTable.addEntityModelColumn(new TextColumnWithTooltip<EntityModel>() { @Override @@ -232,8 +218,9 @@ networksTable.edit(networkList); } - interface WidgetStyle extends CssResource { - String dcEditor(); + @Override + public void setDataCenterList(ListModel dcList) { + dcColumn.setOptions(dcList); } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml index f401cae..a952459 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml @@ -6,29 +6,11 @@ <ui:with field='constants' type='org.ovirt.engine.ui.webadmin.ApplicationConstants' /> - <ui:style type="org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.DiscoverNetworkPopupView.WidgetStyle"> - .indent { - padding-left: 8px; - width: 100%; - } - - .dcEditor { - width: 340px; - } - </ui:style> - - <d:SimpleDialogPanel ui:field="mainPanel" width="570px" height="520px"> + <d:SimpleDialogPanel ui:field="mainPanel" width="620px" height="520px"> <d:content> - <g:VerticalPanel> - <e:ListModelListBoxEditor ui:field="dataCenterEditor"/> - <g:VerticalPanel> - <g:HTMLPanel addStyleNames="{style.indent}"> - <g:ScrollPanel height="160px" width="100%"> - <e:EntityModelCellTable ui:field="networksTable" /> - </g:ScrollPanel> - </g:HTMLPanel> - </g:VerticalPanel> - </g:VerticalPanel> + <g:ScrollPanel> + <e:EntityModelCellTable ui:field="networksTable" /> + </g:ScrollPanel> </d:content> </d:SimpleDialogPanel> -- To view, visit http://gerrit.ovirt.org/15525 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If217cbd8938a81ab0c6c8fed2a12f96b41ad99b8 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
