Hello Alona Kaplan, I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/15843 to review the following change. Change subject: webadmin: Discover Network ...................................................................... webadmin: Discover Network Added discover networks popup window, in which a provider's network may be discovered and then chosen to be imported into a data center. This will be triggered from a button in the Provider/Networks subtab. Change-Id: I438c806a341742bd97a9d0948764007061354204 Signed-off-by: Alona Kaplan <alkap...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.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/gin/PresenterModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java 12 files changed, 578 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/15843/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index 5ec56a0..f428e69 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -3006,4 +3006,21 @@ return ConstantsManager.getInstance().getConstants().vmUnknownPriority(); } } + + public static void GetExternalNetworkList(AsyncQuery aQuery, Guid providerId) { + aQuery.converterCallback = new IAsyncConverter() { + @Override + public Object Convert(Object source, AsyncQuery _asyncQuery) + { + if (source == null) + { + return new ArrayList<Network>(); + } + return source; + } + }; + Frontend.RunQuery(VdcQueryType.GetAllExternalNetworksOnProvider, + new IdQueryParameters(providerId), + aQuery); + } } 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 new file mode 100644 index 0000000..5441d5f --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java @@ -0,0 +1,147 @@ +package org.ovirt.engine.ui.uicommonweb.models.providers; + +import java.util.ArrayList; +import java.util.List; + +import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.Provider; +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.StringHelper; +import org.ovirt.engine.ui.frontend.AsyncQuery; +import org.ovirt.engine.ui.frontend.Frontend; +import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import org.ovirt.engine.ui.uicommonweb.Linq; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +@SuppressWarnings("deprecation") +public class DiscoverNetworksModel extends Model { + + private static final String CMD_DISCOVER = "OnDiscover"; //$NON-NLS-1$ + private static final String CMD_CANCEL = "Cancel"; //$NON-NLS-1$ + + private final ListModel sourceListModel; + private final Provider provider; + + private ListModel dataCenters; + private ListModel networkList; + + public ListModel getDataCenters() { + return dataCenters; + } + + private void setDataCenters(ListModel dc) { + this.dataCenters = dc; + } + + public ListModel getNetworkList() { + return networkList; + } + + private void setNetworkList(ListModel networkList) { + this.networkList = networkList; + } + + public DiscoverNetworksModel(ListModel sourceListModel, Provider provider) { + this.sourceListModel = sourceListModel; + this.provider = provider; + + setTitle(ConstantsManager.getInstance().getConstants().discoverNetworksTitle()); + setHashName("discover_networks"); //$NON-NLS-1$ + + setDataCenters(new ListModel()); + setNetworkList(new ListModel()); + + UICommand tempVar = new UICommand(CMD_DISCOVER, this); + tempVar.setTitle(ConstantsManager.getInstance().getConstants().importNetworksTitle()); + tempVar.setIsDefault(true); + getCommands().add(tempVar); + UICommand tempVar2 = new UICommand(CMD_CANCEL, this); + tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel()); + tempVar2.setIsCancel(true); + getCommands().add(tempVar2); + } + + public void initBackendData() { + final AsyncQuery networkQuery = new AsyncQuery(); + networkQuery.asyncCallback = new INewAsyncCallback() { + + @SuppressWarnings("unchecked") + @Override + public void onSuccess(Object model, Object returnValue) { + List<Network> networks = (ArrayList<Network>) returnValue; + List<ExternalNetwork> items = new ArrayList<ExternalNetwork>(); + for (Network network : networks) { + ExternalNetwork externalNetwork = new ExternalNetwork(); + externalNetwork.setNetwork(network); + externalNetwork.setAttached(false); + externalNetwork.setPublicUse(false); + items.add(externalNetwork); + } + getNetworkList().setItems(items); + + stopProgress(); + } + }; + + final AsyncQuery dcQuery = new AsyncQuery(); + dcQuery.asyncCallback = new INewAsyncCallback() { + + @SuppressWarnings("unchecked") + @Override + public void onSuccess(Object model, Object returnValue) { + ArrayList<StoragePool> dataCenters = (ArrayList<StoragePool>) returnValue; + getDataCenters().setItems(dataCenters); + getDataCenters().setSelectedItem(Linq.firstOrDefault(dataCenters)); + + AsyncDataProvider.GetExternalNetworkList(networkQuery, provider.getId()); + } + }; + + startProgress(null); + AsyncDataProvider.getDataCenterList(dcQuery); + } + + public void cancel() { + sourceListModel.setWindow(null); + } + + @SuppressWarnings("unchecked") + 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()) { + externalNetwork.getNetwork().setDataCenterId(dcId); + AddNetworkStoragePoolParameters params = + new AddNetworkStoragePoolParameters(dcId, externalNetwork.getNetwork()); + params.setPublicUse(externalNetwork.isPublicUse()); + mulipleActionParameters.add(params); + } + } + + Frontend.RunMultipleAction(VdcActionType.AddNetwork, mulipleActionParameters); + cancel(); + } + + @Override + public void executeCommand(UICommand command) { + super.executeCommand(command); + + if (StringHelper.stringsEqual(command.getName(), CMD_DISCOVER)) { + onDiscover(); + } else if (StringHelper.stringsEqual(command.getName(), CMD_CANCEL)) { + cancel(); + } + } + +} 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 new file mode 100644 index 0000000..d068a1d --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java @@ -0,0 +1,39 @@ +package org.ovirt.engine.ui.uicommonweb.models.providers; + +import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; + +public class ExternalNetwork extends EntityModel { + + Network network; + boolean attached; + private boolean publicUse; + + public ExternalNetwork() { + } + + public Network getNetwork() { + return network; + } + + public void setNetwork(Network network) { + this.network = network; + } + + public boolean isAttached() { + return attached; + } + + public void setAttached(boolean attached) { + this.attached = attached; + } + + public boolean isPublicUse() { + return publicUse; + } + + public void setPublicUse(boolean publicUse) { + this.publicUse = publicUse; + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java index 27dc96a..34774d7 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java @@ -3,14 +3,28 @@ import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; public class ProviderNetworkListModel extends SearchableListModel { + private static final String CMD_DISCOVER = "Discover"; //$NON-NLS-1$ + + private UICommand privateDiscoverCommand; + public ProviderNetworkListModel() { setTitle(ConstantsManager.getInstance().getConstants().providerNetworksTitle()); setHashName("provider_networks"); //$NON-NLS-1$ + setDiscoverCommand(new UICommand(CMD_DISCOVER, this)); + } + + public UICommand getDiscoverCommand() { + return privateDiscoverCommand; + } + + private void setDiscoverCommand(UICommand value) { + privateDiscoverCommand = value; } @Override @@ -42,4 +56,22 @@ super.syncSearch(VdcQueryType.GetAllNetworksForProvider, new IdQueryParameters(provider.getId())); } + private void discover() { + if (getWindow() != null) { + return; + } + DiscoverNetworksModel discoverModel = new DiscoverNetworksModel(this, getEntity()); + setWindow(discoverModel); + discoverModel.initBackendData(); + } + + @Override + public void executeCommand(UICommand command) { + super.executeCommand(command); + + if (command == getDiscoverCommand()) { + discover(); + } + } + } diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index b962b90..8efd335 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -1885,6 +1885,12 @@ @DefaultStringValue("Provider(s)") String providersMsg(); + @DefaultStringValue("Discover Networks") + String discoverNetworksTitle(); + + @DefaultStringValue("Import") + String importNetworksTitle(); + // Gluster Hook @DefaultStringValue("Please select a resolve action to continue") String noResolveActionSelectedGlusterHook(); 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 cdce6b3..ab14f52 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 @@ -2746,4 +2746,19 @@ // Provider Network @DefaultStringValue("External ID") String externalIdProviderNetwork(); + + @DefaultStringValue("Discover") + String discoverProviderNetwork(); + + @DefaultStringValue("Name") + String nameNetworkHeader(); + + @DefaultStringValue("ID") + String idNetworkHeader(); + + @DefaultStringValue("All Networks Public") + String publicAllNetworks(); + + @DefaultStringValue("Public Network") + String publicNetwork(); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java index bab4ab1..f6f0f38 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java @@ -57,6 +57,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolEditPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolNewPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.DiscoverNetworkPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.EditQuotaClusterPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.EditQuotaStoragePopupPresenterWidget; @@ -248,6 +249,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolEditPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolNewPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ProviderPopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.DiscoverNetworkPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.ChangeQuotaPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.EditQuotaClusterPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.EditQuotaStoragePopupView; @@ -1209,5 +1211,9 @@ bindPresenterWidget(ProviderPopupPresenterWidget.class, ProviderPopupPresenterWidget.ViewDef.class, ProviderPopupView.class); + + bindPresenterWidget(DiscoverNetworkPopupPresenterWidget.class, + DiscoverNetworkPopupPresenterWidget.ViewDef.class, + DiscoverNetworkPopupView.class); } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java index d2c6cc1..07b1ba0 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java @@ -18,6 +18,7 @@ import org.ovirt.engine.ui.uicommonweb.models.providers.ProviderNetworkListModel; import org.ovirt.engine.ui.webadmin.gin.ClientGinjector; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.DiscoverNetworkPopupPresenterWidget; import com.google.gwt.inject.client.AbstractGinModule; import com.google.inject.Provider; @@ -78,7 +79,8 @@ @Provides @Singleton - public SearchableDetailModelProvider<Network, ProviderListModel, ProviderNetworkListModel> getProviderNetworkListProvider(ClientGinjector ginjector) { + public SearchableDetailModelProvider<Network, ProviderListModel, ProviderNetworkListModel> getProviderNetworkListProvider(ClientGinjector ginjector, + final Provider<DiscoverNetworkPopupPresenterWidget> discoverNetworkPopupProvider) { return new SearchableDetailTabModelProvider<Network, ProviderListModel, ProviderNetworkListModel>(ginjector, ProviderListModel.class, ProviderNetworkListModel.class) { @@ -86,7 +88,11 @@ public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(ProviderNetworkListModel source, UICommand lastExecutedCommand, Model windowModel) { - return super.getModelPopup(source, lastExecutedCommand, windowModel); + if (lastExecutedCommand == getModel().getDiscoverCommand()) { + return discoverNetworkPopupProvider.get(); + } else { + return super.getModelPopup(source, lastExecutedCommand, windowModel); + } } @Override 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 new file mode 100644 index 0000000..9573fa1 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java @@ -0,0 +1,27 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider; + +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 com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class DiscoverNetworkPopupPresenterWidget extends AbstractModelBoundPopupPresenterWidget<DiscoverNetworksModel, DiscoverNetworkPopupPresenterWidget.ViewDef> { + + public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<DiscoverNetworksModel> { + void setNetworkList(ListModel networkList); + } + + @Inject + public DiscoverNetworkPopupPresenterWidget(EventBus eventBus, ViewDef view) { + super(eventBus, view); + } + + @Override + public void init(DiscoverNetworksModel model) { + super.init(model); + getView().setNetworkList(model.getNetworkList()); + } + +} 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 new file mode 100644 index 0000000..f5068c4 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java @@ -0,0 +1,239 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.provider; + +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.TextColumnWithTooltip; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicommonweb.models.providers.DiscoverNetworksModel; +import org.ovirt.engine.ui.uicommonweb.models.providers.ExternalNetwork; +import org.ovirt.engine.ui.webadmin.ApplicationConstants; +import org.ovirt.engine.ui.webadmin.ApplicationResources; +import org.ovirt.engine.ui.webadmin.ApplicationTemplates; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.DiscoverNetworkPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.widget.table.column.CheckboxHeader; + +import com.google.gwt.cell.client.Cell.Context; +import com.google.gwt.cell.client.FieldUpdater; +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; +import com.google.inject.Inject; + +public class DiscoverNetworkPopupView extends AbstractModelBoundPopupView<DiscoverNetworksModel> implements DiscoverNetworkPopupPresenterWidget.ViewDef { + + interface Driver extends SimpleBeanEditorDriver<DiscoverNetworksModel, DiscoverNetworkPopupView> { } + + private final Driver driver = GWT.create(Driver.class); + + interface ViewUiBinder extends UiBinder<SimpleDialogPanel, DiscoverNetworkPopupView> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + @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; + + @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") + Iterable<ExternalNetwork> getNetworksTableItems() { + ListModel tableModel = networksTable.flush(); + return tableModel != null && tableModel.getItems() != null ? tableModel.getItems() + : new ArrayList<ExternalNetwork>(); + } + + void refreshNetworksTable() { + networksTable.edit(networksTable.flush()); + } + + void initEntityModelCellTable(final ApplicationConstants constants, final ApplicationTemplates templates) { + CheckboxHeader assignAllHeader = new CheckboxHeader(templates.textForCheckBoxHeader("")) { //$NON-NLS-1$ + @Override + protected void selectionChanged(Boolean value) { + for (ExternalNetwork model : getNetworksTableItems()) { + model.setAttached(value); + } + refreshNetworksTable(); + } + + @Override + public Boolean getValue() { + for (ExternalNetwork model : getNetworksTableItems()) { + if (!model.isAttached()) { + return false; + } + } + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + }; + + networksTable.addColumn(new CheckboxColumn<EntityModel>(new FieldUpdater<EntityModel, Boolean>() { + @Override + public void update(int index, EntityModel model, Boolean value) { + ExternalNetwork externalNetwork = (ExternalNetwork) model; + externalNetwork.setAttached(value); + refreshNetworksTable(); + } + }) { + @Override + public Boolean getValue(EntityModel model) { + return ((ExternalNetwork) model).isAttached(); + } + + @Override + protected boolean canEdit(EntityModel model) { + return true; + } + + @Override + public void render(Context context, EntityModel object, SafeHtmlBuilder sb) { + super.render(context, object, sb); + sb.append(templates.textForCheckBox("")); //$NON-NLS-1$ + } + + }, assignAllHeader, "80px"); //$NON-NLS-1$ + + networksTable.addEntityModelColumn(new TextColumnWithTooltip<EntityModel>() { + @Override + public String getValue(EntityModel model) { + return ((ExternalNetwork) model).getNetwork().getName(); + } + }, constants.nameNetworkHeader()); + + networksTable.addEntityModelColumn(new TextColumnWithTooltip<EntityModel>() { + @Override + public String getValue(EntityModel model) { + return ((ExternalNetwork) model).getNetwork().getProvidedBy().getExternalId(); + } + }, constants.idNetworkHeader()); + + CheckboxHeader publicAllHeader = + new CheckboxHeader(templates.textForCheckBoxHeader(constants.publicAllNetworks())) { + @Override + protected void selectionChanged(Boolean value) { + for (ExternalNetwork model : getNetworksTableItems()) { + model.setPublicUse(value); + } + refreshNetworksTable(); + } + + @Override + public Boolean getValue() { + for (ExternalNetwork model : getNetworksTableItems()) { + if (!model.isPublicUse()) { + return false; + } + } + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + }; + + networksTable.addColumn(new CheckboxColumn<EntityModel>(new FieldUpdater<EntityModel, Boolean>() { + @Override + public void update(int index, EntityModel model, Boolean value) { + ExternalNetwork externalNetwork = (ExternalNetwork) model; + externalNetwork.setPublicUse(value); + refreshNetworksTable(); + } + }) { + @Override + public Boolean getValue(EntityModel model) { + return ((ExternalNetwork) model).isPublicUse(); + } + + @Override + protected boolean canEdit(EntityModel model) { + return true; + } + + @Override + public void render(Context context, EntityModel object, SafeHtmlBuilder sb) { + super.render(context, object, sb); + sb.append(templates.textForCheckBox(constants.publicNetwork())); + } + + }, publicAllHeader, "80px"); //$NON-NLS-1$ + } + + @Override + public void edit(DiscoverNetworksModel object) { + driver.edit(object); + } + + @Override + public DiscoverNetworksModel flush() { + return driver.flush(); + } + + @Override + public void setNetworkList(ListModel networkList) { + networksTable.edit(networkList); + } + + interface WidgetStyle extends CssResource { + String dcEditor(); + } + +} 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 new file mode 100644 index 0000000..f401cae --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" + xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" xmlns:we="urn:import:org.ovirt.engine.ui.webadmin.widget.editor"> + + <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: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> + </d:content> + </d:SimpleDialogPanel> + +</ui:UiBinder> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java index 7c899f9..8f6ba77 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java @@ -50,6 +50,13 @@ } }; getTable().addColumn(externalIdColumn, constants.externalIdProviderNetwork(), "300px"); //$NON-NLS-1$ + + getTable().addActionButton(new WebAdminButtonDefinition<Network>(constants.discoverProviderNetwork()) { + @Override + protected UICommand resolveCommand() { + return getDetailModel().getDiscoverCommand(); + } + }); } } -- To view, visit http://gerrit.ovirt.org/15843 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I438c806a341742bd97a9d0948764007061354204 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <lver...@redhat.com> Gerrit-Reviewer: Alona Kaplan <alkap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches