Alona Kaplan has uploaded a new change for review.

Change subject: webadmin: send vfs config update to the backend
......................................................................

webadmin: send vfs config update to the backend

When clicking 'ok' on the setup network window the are several commands
that should (and in some cases shouldn't) be sent to the backed.
SetupNetworks->CommitNetworkChanges->
Vfs config update:
UpdateVfsConfig->
Mulitple(AddVfsConfigNetwork)->Mulitple(RemoveVfsConfigNetwork)->
Mulitple(AddVfsConfigLabel)->Mulitple(RomoveVfsConfigLabel)

HostSetupNetworks.postOnSetupNetworks() was slightly changed to use fluent
command calls in order to make all this command calls more readable.

Change-Id: Ide1ff9edbc9d907cbb19034a5789a1c7c7963b3b
Signed-off-by: Alona Kaplan <alkap...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java
3 files changed, 184 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/36976/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java
index 9b756f7..4eec2b0 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java
@@ -29,6 +29,27 @@
 
     private Set<String> labels = new HashSet<>();
 
+    public HostNicVfsConfig() {
+    }
+
+    public HostNicVfsConfig(HostNicVfsConfig vfsConfig) {
+        setId(vfsConfig.getId());
+        setNicId(vfsConfig.getNicId());
+        setMaxNumOfVfs(vfsConfig.getMaxNumOfVfs());
+        setNumOfVfs(vfsConfig.getNumOfVfs());
+        setNumOfFreeVfs(vfsConfig.getNumOfFreeVfs());
+
+        setAllNetworksAllowed(vfsConfig.isAllNetworksAllowed());
+
+        Set<Guid> networks = new HashSet<>();
+        networks.addAll(vfsConfig.getNetworks());
+        setNetworks(networks);
+
+        Set<String> labels = new HashSet<>();
+        labels.addAll(vfsConfig.getLabels());
+        setLabels(labels);
+    }
+
     public Guid getNicId() {
         return nicId;
     }
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 30dcbe8..8460061 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
@@ -15,7 +15,7 @@
 
 import org.ovirt.engine.core.common.action.SetupNetworksParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
-import org.ovirt.engine.core.common.action.VdcReturnValueBase;
+import org.ovirt.engine.core.common.action.VdsActionParameters;
 import 
org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import 
org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator;
@@ -34,6 +34,8 @@
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.BaseCommandTarget;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.UiAction;
+import org.ovirt.engine.ui.uicommonweb.UiVdcAction;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
@@ -55,8 +57,6 @@
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.EventDefinition;
-import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
-import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
 import org.ovirt.engine.ui.uicompat.UIMessages;
 
 /**
@@ -129,6 +129,7 @@
     // The purpose of this map is to keep the network parameters while moving 
the network from one nic to another
     private final Map<String, NetworkParameters> networkToLastDetachParams;
 
+    private Set<HostNicVfsConfig> originalVfsConfigs = new HashSet<>();
     private Map<Guid, HostNicVfsConfig> nicToVfsConfig = new HashMap<>();
 
     private NetworkOperationFactory operationFactory;
@@ -949,7 +950,8 @@
                 List<HostNicVfsConfig> allHostVfs = (List<HostNicVfsConfig>) 
returnValue;
 
                 for (HostNicVfsConfig vfsConfig : allHostVfs) {
-                    nicToVfsConfig.put(vfsConfig.getNicId(), vfsConfig);
+                    originalVfsConfigs.add(vfsConfig);
+                    nicToVfsConfig.put(vfsConfig.getNicId(), new 
HostNicVfsConfig(vfsConfig));
                 }
 
                 // chain the free bonds query
@@ -1052,7 +1054,7 @@
     }
 
     public void postOnSetupNetworks() {
-        final HostSetupNetworksModel model = (HostSetupNetworksModel) 
sourceListModel.getWindow();
+        final HostSetupNetworksModel model = getSetupNetworksModel();
 
         SetupNetworksParameters params = new SetupNetworksParameters();
         params.setInterfaces(model.getAllNics());
@@ -1061,32 +1063,38 @@
         params.setVdsId(getEntity().getId());
         params.setNetworksToSync(model.getNetworksToSync());
 
-        model.startProgress(null);
-        Frontend.getInstance().runAction(VdcActionType.SetupNetworks, params, 
new IFrontendActionAsyncCallback() {
+        UiAction closeAction = getCloseAction();
+        UiAction setupNetworks = new UiVdcAction(VdcActionType.SetupNetworks, 
params, model, true);
 
+        
setupNetworks.then(getCommitNetworkChangesAction()).then(getVfsConfigAction()).onAllExecutionsFinish(closeAction);
+
+        setupNetworks.runAction();
+    }
+
+    public UiAction getCommitNetworkChangesAction() {
+        return new UiVdcAction(VdcActionType.CommitNetworkChanges,
+                new VdsActionParameters(getEntity().getId()),
+                getSetupNetworksModel(), true) {
             @Override
-            public void executed(FrontendActionAsyncResult result) {
-                VdcReturnValueBase returnValueBase = result.getReturnValue();
-                if (returnValueBase != null && returnValueBase.getSucceeded())
-                {
-                    EntityModel<Boolean> commitChanges = 
model.getCommitChanges();
-                    if (commitChanges.getEntity())
-                    {
-                        new SaveNetworkConfigAction(sourceListModel, model, 
getEntity()).execute();
-                    }
-                    else
-                    {
-                        model.stopProgress();
-                        sourceListModel.setWindow(null);
-                        sourceListModel.search();
-                    }
-                }
-                else
-                {
-                    model.stopProgress();
-                }
+            protected boolean shouldExecute() {
+                EntityModel<Boolean> commitChanges = 
getSetupNetworksModel().getCommitChanges();
+                return commitChanges.getEntity();
             }
-        });
+        };
+    }
+
+    public UiAction getVfsConfigAction() {
+        return new VfsConfigAction(getSetupNetworksModel(), 
originalVfsConfigs, nicToVfsConfig);
+    }
+
+    public UiAction getCloseAction() {
+        return new UiAction(getSetupNetworksModel(), 
"CloseSetupNetworksDialog") { //$NON-NLS-1$
+            @Override
+            protected void onActionExecuted() {
+                sourceListModel.setWindow(null);
+                sourceListModel.search();
+            }
+        };
     }
 
     @Override
@@ -1109,4 +1117,11 @@
 
     }
 
+    public SearchableListModel<?> getSourceListModel() {
+        return sourceListModel;
+    }
+
+    private HostSetupNetworksModel getSetupNetworksModel() {
+        return (HostSetupNetworksModel) sourceListModel.getWindow();
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java
new file mode 100644
index 0000000..6cbf17c
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java
@@ -0,0 +1,120 @@
+package org.ovirt.engine.ui.uicommonweb.models.hosts;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.ovirt.engine.core.common.action.UpdateHostNicVfsConfigParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VfsConfigLabelParameters;
+import org.ovirt.engine.core.common.action.VfsConfigNetworkParameters;
+import org.ovirt.engine.core.common.businessentities.network.HostNicVfsConfig;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.uicommonweb.UiAction;
+import org.ovirt.engine.ui.uicommonweb.UiVdcMultipleAction;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+
+public class VfsConfigAction extends UiAction {
+
+    private Collection<HostNicVfsConfig> originalVfsConfigs;
+    private Map<Guid, HostNicVfsConfig> updatedNicToVfsConfig;
+
+    private Set<UpdateHostNicVfsConfigParameters> updatedVfsConfigsParams = 
new HashSet<>();
+    private Set<VfsConfigNetworkParameters> addedNetworksParams = new 
HashSet<>();
+    private Set<VfsConfigNetworkParameters> removedNetworksParams = new 
HashSet<>();
+    private Set<VfsConfigLabelParameters> addedLabelsParams = new HashSet<>();
+    private Set<VfsConfigLabelParameters> removedLabelsParams = new 
HashSet<>();
+
+    public VfsConfigAction(Model model,
+            Collection<HostNicVfsConfig> originalVfsConfigs,
+            Map<Guid, HostNicVfsConfig> updatedNicToVfsConfig) {
+        super(model, "VfsConfigAction"); //$NON-NLS-1$
+        this.originalVfsConfigs = originalVfsConfigs;
+        this.updatedNicToVfsConfig = updatedNicToVfsConfig;
+    }
+
+    @Override
+    protected void onActionExecuted() {
+        for (HostNicVfsConfig originalVfsConfig : originalVfsConfigs) {
+            HostNicVfsConfig updatedVfsConfig = 
updatedNicToVfsConfig.get(originalVfsConfig.getNicId());
+
+            initUpdateVfsConfigParams(originalVfsConfig, updatedVfsConfig);
+
+            if (!updatedVfsConfig.isAllNetworksAllowed()) {
+                initAddedNetworksParams(originalVfsConfig, updatedVfsConfig);
+                initRemovedNetworksParams(originalVfsConfig, updatedVfsConfig);
+                initAddedLabelsParams(originalVfsConfig, updatedVfsConfig);
+                initRemovedLabelsParams(originalVfsConfig, updatedVfsConfig);
+            }
+        }
+
+        UiAction updateAction = new 
UiVdcMultipleAction(VdcActionType.UpdateHostNicVfsConfig,
+                updatedVfsConfigsParams,
+                getModel());
+
+        updateAction.
+                then(new UiVdcMultipleAction(VdcActionType.AddVfsConfigNetwork,
+                        addedNetworksParams,
+                        getModel())).
+                and(new 
UiVdcMultipleAction(VdcActionType.RemoveVfsConfigNetwork,
+                        removedNetworksParams,
+                        getModel())).
+                and(new UiVdcMultipleAction(VdcActionType.AddVfsConfigLabel,
+                        addedLabelsParams,
+                        getModel())).
+                and(new UiVdcMultipleAction(VdcActionType.RemoveVfsConfigLabel,
+                        removedLabelsParams,
+                        getModel()));
+
+        updateAction.runAction(getActionFlowMutex());
+    }
+
+    private void initUpdateVfsConfigParams(HostNicVfsConfig originalVfsConfig, 
HostNicVfsConfig updatedVfsConfig) {
+        if (shouldUpdateVfsConfig(originalVfsConfig, updatedVfsConfig)) {
+            UpdateHostNicVfsConfigParameters param =
+                    new 
UpdateHostNicVfsConfigParameters(updatedVfsConfig.getNicId(),
+                            updatedVfsConfig.getNumOfVfs(),
+                            updatedVfsConfig.isAllNetworksAllowed());
+            updatedVfsConfigsParams.add(param);
+        }
+    }
+
+    private boolean shouldUpdateVfsConfig(HostNicVfsConfig originalVfsConfig, 
HostNicVfsConfig updateVfsConfig) {
+        return updateVfsConfig.getNumOfVfs() != originalVfsConfig.getNumOfVfs()
+                || updateVfsConfig.isAllNetworksAllowed() != 
originalVfsConfig.isAllNetworksAllowed();
+    }
+
+    private void initAddedNetworksParams(HostNicVfsConfig originalVfsConfig, 
HostNicVfsConfig updateVfsConfig) {
+        for (Guid networkId : updateVfsConfig.getNetworks()) {
+            if (!originalVfsConfig.getNetworks().contains(networkId)) {
+                addedNetworksParams.add(new 
VfsConfigNetworkParameters(originalVfsConfig.getNicId(), networkId));
+            }
+        }
+    }
+
+    private void initRemovedNetworksParams(HostNicVfsConfig originalVfsConfig, 
HostNicVfsConfig updateVfsConfig) {
+        for (Guid networkId : originalVfsConfig.getNetworks()) {
+            if (!updateVfsConfig.getNetworks().contains(networkId)) {
+                removedNetworksParams.add(new 
VfsConfigNetworkParameters(originalVfsConfig.getNicId(), networkId));
+            }
+        }
+    }
+
+    private void initAddedLabelsParams(HostNicVfsConfig originalVfsConfig, 
HostNicVfsConfig updateVfsConfig) {
+        for (String label : updateVfsConfig.getLabels()) {
+            if (!originalVfsConfig.getLabels().contains(label)) {
+                addedLabelsParams.add(new 
VfsConfigLabelParameters(originalVfsConfig.getNicId(), label));
+            }
+        }
+    }
+
+    private void initRemovedLabelsParams(HostNicVfsConfig originalVfsConfig, 
HostNicVfsConfig updateVfsConfig) {
+        for (String label : originalVfsConfig.getLabels()) {
+            if (!updateVfsConfig.getLabels().contains(label)) {
+                removedLabelsParams.add(new 
VfsConfigLabelParameters(originalVfsConfig.getNicId(), label));
+            }
+        }
+    }
+
+}


-- 
To view, visit http://gerrit.ovirt.org/36976
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ide1ff9edbc9d907cbb19034a5789a1c7c7963b3b
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