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

Reply via email to