Alona Kaplan has uploaded a new change for review. Change subject: webadmin: edit vfsConfig- networks table ......................................................................
webadmin: edit vfsConfig- networks table Change-Id: I2fe3404bd458fee0a4105fa41aa35e945a6d95c9 Signed-off-by: Alona Kaplan <alkap...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigNetwork.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.ui.xml 5 files changed, 221 insertions(+), 22 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/55/36355/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigModel.java index 25af317..4ec2d68 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigModel.java @@ -2,10 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; import org.ovirt.engine.core.common.businessentities.network.HostNicVfsConfig; @@ -19,7 +16,7 @@ private EntityModel<Integer> maxNumOfVfs = new EntityModel<>(); private EntityModel<Integer> numOfVfs = new EntityModel<>(); private ListModel<AllNetworksSelector> allNetworksAllowed = new ListModel<>(); - private ListModel<Network> networks = new ListModel<>(); + private ListModel<VfsConfigNetwork> networks = new ListModel<>(); private ListModel<String> labels = new ListModel<>(); public VfsConfigModel() { @@ -53,11 +50,11 @@ this.allNetworksAllowed = allNetworksAllowed; } - public ListModel<Network> getNetworks() { + public ListModel<VfsConfigNetwork> getNetworks() { return networks; } - public void setNetworks(ListModel<Network> networks) { + public void setNetworks(ListModel<VfsConfigNetwork> networks) { this.networks = networks; } @@ -74,27 +71,25 @@ } private void initNetworks(List<Network> allClusterNetworks) { - Map<Guid, Network> clusterNetworksMap = createClusterNetworksMap(allClusterNetworks); - Set<Network> vfsConfigNetworks = new HashSet<>(); + List<VfsConfigNetwork> vfsConfigNetworks = new ArrayList<>(); - for (Guid networkGuid : getEntity().getNetworks()) { - vfsConfigNetworks.add(clusterNetworksMap.get(networkGuid)); + Set<Guid> attachedNetworks = getEntity().getNetworks(); + for (Network network : allClusterNetworks) { + boolean isAttached = attachedNetworks.contains(network.getId()); + VfsConfigNetwork vfsConfigNetwork = + new VfsConfigNetwork(isAttached, isAttached ? getAttachedViaLabel(network) : null, network); + vfsConfigNetworks.add(vfsConfigNetwork); } networks.setItems(vfsConfigNetworks); } - private Map<Guid, Network> createClusterNetworksMap(List<Network> allClusterNetworks) { - Map<Guid, Network> clusterNetworksMap = new HashMap<>(); - - for (Network network : allClusterNetworks) { - clusterNetworksMap.put(network.getId(), network); - } - - return clusterNetworksMap; + private String getAttachedViaLabel(Network network) { + // TODO return the label just if the network is really attached via the label + return network.getLabel(); } - public enum AllNetworksSelector { + public static enum AllNetworksSelector { allNetworkAllowed(ConstantsManager.getInstance().getConstants().allNetworksAllowed()), specificNetworks(ConstantsManager.getInstance().getConstants().specificNetworksAllowed()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigNetwork.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigNetwork.java new file mode 100644 index 0000000..a65a0ef --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigNetwork.java @@ -0,0 +1,39 @@ +package org.ovirt.engine.ui.uicommonweb.models.hosts; + +import org.ovirt.engine.core.common.businessentities.network.Network; + +public class VfsConfigNetwork { + boolean isAttached; + String labelViaAttached; + Network network; + + public VfsConfigNetwork(boolean isAttached, String labelViaAttached, Network network) { + this.isAttached = isAttached; + this.labelViaAttached = labelViaAttached; + this.network = network; + } + + public boolean isAttached() { + return isAttached; + } + + public void setAttached(boolean isAttached) { + this.isAttached = isAttached; + } + + public String getLabelViaAttached() { + return labelViaAttached; + } + + public void setLabelViaAttached(String labelViaAttached) { + this.labelViaAttached = labelViaAttached; + } + + public Network getNetwork() { + return network; + } + + public void setNetwork(Network network) { + this.network = network; + } +} 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 5741e1d..4d57d38 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 @@ -3988,4 +3988,10 @@ @DefaultStringValue("Allowed Networks") String allowedNetworks(); + + @DefaultStringValue("Network") + String vfsConfigNetworkName(); + + @DefaultStringValue("Vial Label") + String vfsConfigViaLabel(); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.java index b470850..cdc27a8 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.java @@ -1,24 +1,38 @@ package org.ovirt.engine.ui.webadmin.section.main.view.popup.host; +import java.util.ArrayList; + import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.widget.dialog.AdvancedParametersExpander; +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.ListModelRadioGroupEditor; import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor; +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.common.widget.table.header.CheckboxHeader; import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.VfsConfigModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.VfsConfigModel.AllNetworksSelector; +import org.ovirt.engine.ui.uicommonweb.models.hosts.VfsConfigNetwork; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationMessages; +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.resources.client.CssResource; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.text.shared.AbstractRenderer; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.ValueLabel; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.ValueLabel; import com.google.inject.Inject; public class VfsConfigWidget extends AbstractModelBoundPopupWidget<VfsConfigModel> { @@ -67,8 +81,19 @@ @Path(value = "allNetworksAllowed.selectedItem") ListModelRadioGroupEditor<AllNetworksSelector> allNetworksSelectorEditor; + @UiField(provided = true) + @Ignore + EntityModelCellTable<ListModel<VfsConfigNetwork>> networks; + + @UiField + FlowPanel allowedNetworksPanel; + + ApplicationConstants constants; + @Inject public VfsConfigWidget(ApplicationConstants constants, final ApplicationMessages messages) { + this.constants = constants; + maxVfsLabel = new ValueLabel<>(new AbstractRenderer<Integer>() { @Override @@ -76,6 +101,9 @@ return messages.maxVfs(object); } }); + + networks = new EntityModelCellTable<ListModel<VfsConfigNetwork>>(SelectionMode.NONE, true); + initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); WidgetIdHandler.idHandler.generateAndSetIds(this); @@ -105,12 +133,129 @@ } @Override - public void edit(VfsConfigModel model) { + public void edit(final VfsConfigModel model) { driver.edit(model); + networks.asEditor().edit(model.getNetworks()); + initNetworksTable(); + + updateAllowedNetworksPanelVisibility(model); + model.getAllNetworksAllowed().getSelectedItemChangedEvent().addListener(new IEventListener<EventArgs>() { + + @Override + public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { + updateAllowedNetworksPanelVisibility(model); + } + }); + } + + private void updateAllowedNetworksPanelVisibility(final VfsConfigModel model) { + allowedNetworksPanel.setVisible(AllNetworksSelector.specificNetworks == model.getAllNetworksAllowed() + .getSelectedItem()); } @Override public VfsConfigModel flush() { - return driver.flush(); + VfsConfigModel vfsConfigModel = driver.flush(); + vfsConfigModel.setNetworks(networks.asEditor().flush()); + return vfsConfigModel; + } + + void initNetworksTable() { + networks.enableColumnResizing(); + + networks.addColumn( + new AttachedIndicatorCheckboxColumn(new AttachedIndicatorFieldUpdater()), + new AttachedIndicatorCheckboxHeader(), "90px"); //$NON-NLS-1$ + + networks.addColumn(new TextColumnWithTooltip<VfsConfigNetwork>() { + @Override + public String getValue(VfsConfigNetwork object) { + return object.getNetwork().getName(); + } + }, constants.vfsConfigNetworkName(), "85px"); //$NON-NLS-1$ + + networks.addColumn(new TextColumnWithTooltip<VfsConfigNetwork>() { + @Override + public String getValue(VfsConfigNetwork object) { + return object.getLabelViaAttached(); + } + }, constants.vfsConfigViaLabel(), "85px"); //$NON-NLS-1$ + + } + + private final class AttachedIndicatorCheckboxColumn extends CheckboxColumn<VfsConfigNetwork> { + private AttachedIndicatorCheckboxColumn(AttachedIndicatorFieldUpdater attachedIndicatorFieldUpdater) { + super(attachedIndicatorFieldUpdater); + } + + @Override + public Boolean getValue(VfsConfigNetwork vfsConfigNetwork) { + return vfsConfigNetwork.isAttached(); + } + + @Override + protected boolean canEdit(VfsConfigNetwork vfsConfigNetwork) { + return canEditAssign(vfsConfigNetwork); + } + } + + private final class AttachedIndicatorFieldUpdater implements FieldUpdater<VfsConfigNetwork, Boolean> { + @Override + public void update(int index, VfsConfigNetwork vfsConfigNetwork, Boolean value) { + vfsConfigNetwork.setAttached(value); + refreshNetworksTable(); + } + } + + private final class AttachedIndicatorCheckboxHeader extends CheckboxHeader { + private AttachedIndicatorCheckboxHeader() { + super(SafeHtmlUtils.EMPTY_SAFE_HTML); + } + + @Override + protected void selectionChanged(Boolean value) { + for (VfsConfigNetwork vfsConfigNetwork : getNetworksTableItems()) { + if (canEditAssign(vfsConfigNetwork)) { + vfsConfigNetwork.setAttached(value); + } + } + refreshNetworksTable(); + } + + @Override + public Boolean getValue() { + boolean allEntriesDisabled = !isEnabled(); + for (VfsConfigNetwork vfsConfigNetwork : getNetworksTableItems()) { + if (allEntriesDisabled || canEditAssign(vfsConfigNetwork)) { + if (!vfsConfigNetwork.isAttached()) { + return false; + } + } + } + return true; + } + + @Override + public boolean isEnabled() { + for (VfsConfigNetwork vfsConfigNetwork : getNetworksTableItems()) { + if (canEditAssign(vfsConfigNetwork)) { + return true; + } + } + return false; + } + } + + private boolean canEditAssign(VfsConfigNetwork vfsConfigNetwork) { + return vfsConfigNetwork.getLabelViaAttached() != null; + } + + private void refreshNetworksTable() { + networks.asEditor().edit(networks.asEditor().flush()); + } + + private Iterable<VfsConfigNetwork> getNetworksTableItems() { + ListModel<VfsConfigNetwork> tableModel = networks.asEditor().flush(); + return tableModel != null ? tableModel.getItems() : new ArrayList<VfsConfigNetwork>(); } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.ui.xml index 27b0286..b012157 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/VfsConfigWidget.ui.xml @@ -38,6 +38,14 @@ .allAllowedSelector { float: left; } + + .dock { + height: 50%; + } + + .clear { + clear: both; + } </ui:style> <g:FlowPanel> @@ -48,6 +56,12 @@ </g:FlowPanel> <g:Label ui:field="allowedNetworksLabel" addStyleNames="{style.allAllowedLabel}" /> <e:ListModelRadioGroupEditor ui:field="allNetworksSelectorEditor" addStyleNames="{style.allAllowedSelector}" /> + <g:SimplePanel addStyleNames="{style.clear}" /> + <g:FlowPanel ui:field="allowedNetworksPanel"> + <g:ScrollPanel addStyleNames="{style.dock}"> + <e:EntityModelCellTable ui:field="networks" /> + </g:ScrollPanel> + </g:FlowPanel> </g:FlowPanel> </ui:UiBinder> \ No newline at end of file -- To view, visit http://gerrit.ovirt.org/36355 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2fe3404bd458fee0a4105fa41aa35e945a6d95c9 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alona Kaplan <alkap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches