Lior Vernia has uploaded a new change for review. Change subject: webadmin: Acknowledge labels in Setup Networks dialog ......................................................................
webadmin: Acknowledge labels in Setup Networks dialog Modified the Setup Networks initiation to also take into account network labels, i.e. to create corresponding panels and populate them with their related networks. Change-Id: I4e7d712fcae59b4e03ff365408161f5472dc235d Signed-off-by: Lior Vernia <lver...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java 7 files changed, 197 insertions(+), 17 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/22971/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java index 36ee175..1280044 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeSet; import org.ovirt.engine.core.common.action.SetupNetworksParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -36,6 +37,7 @@ import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkCommand; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkInterfaceModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkItemModel; +import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkLabelModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperation; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperationFactory; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperationFactory.OperationMap; @@ -117,6 +119,8 @@ private Map<String, LogicalNetworkModel> networkMap; + private Map<String, NetworkLabelModel> labelMap; + private final List<String> networksToSync = new ArrayList<String>(); // The purpose of this map is to keep the network parameters while moving the network from one nic to another @@ -128,6 +132,7 @@ private final Map<String, NetworkParameters> netToBeforeSyncParams; private final SearchableListModel sourceListModel; private List<VdsNetworkInterface> allBonds; + private Collection<String> dcLabels; private NetworkOperation currentCandidate; private NetworkItemModel<?> currentOp1; private NetworkItemModel<?> currentOp2; @@ -136,6 +141,7 @@ private final UICommand okCommand; public static final String NIC = "nic"; //$NON-NLS-1$ public static final String NETWORK = "network"; //$NON-NLS-1$ + public static final String LABEL = "label"; //$NON-NLS-1$ public HostSetupNetworksModel(SearchableListModel listModel) { this.sourceListModel = listModel; @@ -515,8 +521,17 @@ private void initNetworkModels() { Map<String, LogicalNetworkModel> networkModels = new HashMap<String, LogicalNetworkModel>(); + labelMap = new HashMap<String, NetworkLabelModel>(); for (Network network : allNetworks) { - networkModels.put(network.getName(), new LogicalNetworkModel(network, this)); + LogicalNetworkModel networkModel = new LogicalNetworkModel(network, this); + networkModels.put(network.getName(), networkModel); + + NetworkLabelModel labelModel = labelMap.get(network.getLabel()); + if (labelModel == null) { + labelModel = new NetworkLabelModel(network.getLabel(), this); + labelMap.put(network.getLabel(), labelModel); + } + labelModel.getNetworks().add(networkModel); } setNetworks(networkModels); } @@ -548,6 +563,20 @@ if (isPhysicalInterface) { physicalNics.add(nic); + for (String label : nic.getLabels()) { + NetworkLabelModel labelModel = labelMap.get(label); + if (labelModel != null) { + List<LogicalNetworkModel> nicNetworks = nicToNetwork.get(nicName); + if (nicNetworks == null) { + nicNetworks = new ArrayList<LogicalNetworkModel>(); + nicToNetwork.put(nicName, nicNetworks); + } + nicNetworks.add(labelModel); + for (LogicalNetworkModel networkModel : labelModel.getNetworks()) { + networkModel.attachViaLabel(); + } + } + } } // is the nic bonded? @@ -588,19 +617,20 @@ } else { ifName = nicName; } - Collection<LogicalNetworkModel> nicNetworks = new ArrayList<LogicalNetworkModel>(); - nicNetworks.add(networkModel); + Collection<LogicalNetworkModel> bridgeNetworks = new ArrayList<LogicalNetworkModel>(); + bridgeNetworks.add(networkModel); // set iface bridge to network NetworkInterfaceModel existingEridge = networkModel.getVlanNic(); assert existingEridge == null : "should have only one bridge, but found " + existingEridge; //$NON-NLS-1$ - networkModel.setBridge(new NetworkInterfaceModel(nic, nicNetworks, this)); + networkModel.setBridge(new NetworkInterfaceModel(nic, bridgeNetworks, this)); - if (nicToNetwork.containsKey(ifName)) { - nicToNetwork.get(ifName).add(networkModel); - } else { - List<LogicalNetworkModel> bridgedNetworks = new ArrayList<LogicalNetworkModel>(); - bridgedNetworks.add(networkModel); - nicToNetwork.put(ifName, bridgedNetworks); + if (!nicMap.get(ifName).getLabels().contains(networkModel.getEntity().getLabel())) { + List<LogicalNetworkModel> nicNetworks = nicToNetwork.get(ifName); + if (nicNetworks == null) { + nicNetworks = new ArrayList<LogicalNetworkModel>(); + nicToNetwork.put(ifName, nicNetworks); + } + nicNetworks.add(networkModel); } if (!networkModel.isInSync() && networkModel.isManaged()) { @@ -648,6 +678,18 @@ setNics(nicModels); } + private void queryLabels() { + AsyncDataProvider.getNetworkLabelsByDataCenterId(getEntity().getStoragePoolId(), new AsyncQuery(new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + dcLabels = (Collection<String>) returnValue; + + initNicModels(); + stopProgress(); + } + })); + } + private void queryFreeBonds() { // query for all unused, existing bonds on the host AsyncQuery asyncQuery = new AsyncQuery(); @@ -660,8 +702,8 @@ (List<VdsNetworkInterface>) ((VdcQueryReturnValue) returnValue).getReturnValue(); allBonds = bonds; - initNicModels(); - stopProgress(); + // chain the DC labels query + queryLabels(); } }; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java index 8b6600b..843c8c3 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java @@ -19,6 +19,7 @@ private boolean selected; private boolean management; + private boolean attachedViaLabel; private NetworkInterfaceModel attachedToNic; private NetworkInterfaceModel vlanNic; @@ -32,6 +33,10 @@ if (HostInterfaceListModel.ENGINE_NETWORK_NAME.equals(network.getName())) { setManagement(true); } + } + + public void attachViaLabel() { + attachedViaLabel = true; } /** @@ -201,7 +206,7 @@ } public boolean isAttached() { - return attachedToNic != null; + return attachedToNic != null || attachedViaLabel; } public boolean isManagement() { @@ -235,7 +240,7 @@ } public NetworkImplementationDetails getNetworkImplementationDetails() { - if (!isAttached()) { + if (attachedToNic == null) { return null; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java index 2c29881..64ff065 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java @@ -25,9 +25,17 @@ this.setupModel = setupModel; } + protected int getMajorSortKey() { + return 1; + } + @Override public int compareTo(NetworkItemModel<T> o) { - return LexoNumericComparator.comp(getName(), o.getName()); + if (getMajorSortKey() == o.getMajorSortKey()) { + return LexoNumericComparator.comp(getName(), o.getName()); + } else { + return getMajorSortKey() < o.getMajorSortKey() ? -1 : 1; + } } public String getError() { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java new file mode 100644 index 0000000..e8fd413 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.ui.uicommonweb.models.hosts.network; + +import java.util.ArrayList; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.network.NetworkStatus; +import org.ovirt.engine.ui.uicommonweb.models.hosts.HostSetupNetworksModel; + +public class NetworkLabelModel extends LogicalNetworkModel { + + private final String label; + private final List<LogicalNetworkModel> labelNetworks; + + public NetworkLabelModel(String label, HostSetupNetworksModel setupModel) { + super(setupModel); + this.label = label; + labelNetworks = new ArrayList<LogicalNetworkModel>(); + } + + @Override + public String getName() { + return label; + } + + @Override + public NetworkStatus getStatus() { + return null; + } + + @Override + public String getType() { + return HostSetupNetworksModel.LABEL; + } + + @Override + protected int getMajorSortKey() { + return 0; + } + + public List<LogicalNetworkModel> getNetworks() { + return labelNetworks; + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java index a52fe45..ab0fe4f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java @@ -41,7 +41,12 @@ * @return */ public static NetworkOperation operationFor(NetworkItemModel<?> op1, NetworkItemModel<?> op2, boolean isDrag) { - // first of all, if the network is external then there's no valid operation for it + // no valid operation for network labels + if (op1 instanceof NetworkLabelModel) { + return NetworkOperation.NULL_OPERATION; + } + + // no valid operation for external networks if (op1 instanceof LogicalNetworkModel) { LogicalNetworkModel network = (LogicalNetworkModel) op1; if (network.getEntity().isExternal()) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java index 083806e..8a3a479 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java @@ -7,6 +7,7 @@ import org.ovirt.engine.ui.uicommonweb.models.hosts.network.BondNetworkInterfaceModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.LogicalNetworkModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkInterfaceModel; +import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkLabelModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider; @@ -77,7 +78,11 @@ flexCellFormatter.setRowSpan(0, 0, networkSize); FlexTable networkTable = new FlexTable(); for (int i = 0; i < networkSize; i++) { - networkTable.setWidget(i, 0, new InternalNetworkPanel(networks.get(i), style)); + if (networks.get(i) instanceof NetworkLabelModel) { + networkTable.setWidget(i, 0, new NetworkLabelPanel((NetworkLabelModel) networks.get(i), style)); + } else { + networkTable.setWidget(i, 0, new InternalNetworkPanel(networks.get(i), style)); + } } networkTable.setWidth("100%"); //$NON-NLS-1$ table.setWidget(0, 2, networkTable); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java new file mode 100644 index 0000000..080a5f0 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java @@ -0,0 +1,71 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels; + +import java.util.Collections; +import java.util.List; + +import org.ovirt.engine.ui.uicommonweb.models.hosts.network.LogicalNetworkModel; +import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkLabelModel; + +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.user.client.ui.Grid; +import com.google.gwt.user.client.ui.HTMLTable.ColumnFormatter; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + +public class NetworkLabelPanel extends NetworkPanel { + + public NetworkLabelPanel(NetworkLabelModel item, NetworkPanelsStyle style) { + super(item, style, false); + } + + @Override + protected Widget getContents() { + VerticalPanel vPanel = new VerticalPanel(); + vPanel.setSpacing(5); + vPanel.setWidth("100%"); //$NON-NLS-1$ + + Grid titleRow = new Grid(1, 2); + titleRow.setCellSpacing(3); + + ColumnFormatter columnFormatter = titleRow.getColumnFormatter(); + columnFormatter.setWidth(0, "30px"); //$NON-NLS-1$ + columnFormatter.setWidth(1, "100%"); //$NON-NLS-1$ + titleRow.setWidth("100%"); //$NON-NLS-1$ + titleRow.setHeight("27px"); //$NON-NLS-1$ + + Label titleLabel = new Label(item.getName()); + titleLabel.setHeight("100%"); //$NON-NLS-1$ + Image labelImage = new Image(resources.bond()); + + titleRow.setWidget(0, 0, labelImage); + titleRow.setWidget(0, 1, titleLabel); + titleRow.setCellSpacing(3); + titleRow.setCellPadding(3); + vPanel.add(titleRow); + + getElement().addClassName(style.bondPanel()); + List<LogicalNetworkModel> networks = ((NetworkLabelModel) item).getNetworks(); + Collections.sort(networks); + + for (LogicalNetworkModel network : networks) { + InternalNetworkPanel networkPanel = new InternalNetworkPanel(network, style); + networkPanel.parentPanel = this; + vPanel.add(networkPanel); + } + + return vPanel; + } + + @Override + protected void onAction() { + // Do nothing + } + + @Override + protected ImageResource getStatusImage() { + return null; + } + +} -- To view, visit http://gerrit.ovirt.org/22971 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4e7d712fcae59b4e03ff365408161f5472dc235d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <lver...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches