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 <[email protected]>
---
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 <[email protected]>
Gerrit-Reviewer: Alona Kaplan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches