Muli Salem has uploaded a new change for review.

Change subject: engine: Network Command Validation
......................................................................

engine: Network Command Validation

This patch extracts repetitive code to the
NetworkCommon class, and cleans up canDoActions
in both AddNetwork and UpdateNetwork commands, to
use the Validation framework given by the
CommandBase.

Longer description using lines' length under 72 chars.

With multiple paragraphs if necessary.

Change-Id: I4bb5bafd2029b3a8729bcf78d359804c6f587ff7
Bug-Url: https://bugzilla.redhat.com/??????
Signed-off-by: Muli Salem <msa...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
3 files changed, 101 insertions(+), 61 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/42/10542/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java
index 736dd36..3945dac 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java
@@ -5,6 +5,7 @@
 
 import org.ovirt.engine.core.bll.MultiLevelAdministrationHandler;
 import org.ovirt.engine.core.bll.PredefinedRoles;
+import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -52,29 +53,13 @@
             return false;
         }
 
-        // check that network name not start with 'bond'
-        if (getNetworkName().toLowerCase().startsWith("bond")) {
-            
addCanDoActionMessage(VdcBllMessages.NETWORK_CANNOT_CONTAIN_BOND_NAME);
+        if (!validate(networkNameStartsWithoutBond())) {
             return false;
         }
 
-        // we return ok only if the network not exists
-        List<Network> all;
-        if (getNetwork().getstorage_pool_id() != null
-                && 
!getNetwork().getstorage_pool_id().getValue().equals(Guid.Empty)) {
-            all = 
getNetworkDAO().getAllForDataCenter(getNetwork().getstorage_pool_id().getValue());
-        } else {
-            all = getNetworkDAO().getAll();
-        }
-        boolean exists = null != LinqUtils.firstOrNull(all, new 
Predicate<Network>() {
-            @Override
-            public boolean eval(Network net) {
-                return net.getname().equals(getNetworkName());
-            }
-        });
-        if (exists) {
-            getReturnValue().getCanDoActionMessages()
-                    
.add(VdcBllMessages.NETWORK_NAME_ALREADY_EXISTS.toString());
+        List<Network> all = getNetworks();
+
+        if (!validate(networkDoesNotExist(all))) {
             return false;
         }
 
@@ -120,4 +105,28 @@
         perms.setrole_id(role.getId());
         MultiLevelAdministrationHandler.addPermission(perms);
     }
+
+    private List<Network> getNetworks() {
+        if (getNetwork().getstorage_pool_id() != null
+                && 
!getNetwork().getstorage_pool_id().getValue().equals(Guid.Empty)) {
+            return 
getNetworkDAO().getAllForDataCenter(getNetwork().getstorage_pool_id().getValue());
+        } else {
+            return getNetworkDAO().getAll();
+        }
+    }
+
+    private ValidationResult networkDoesNotExist(List<Network> networks) {
+        return getNetworkByName(networks) == null
+                ? ValidationResult.VALID
+                : new 
ValidationResult(VdcBllMessages.NETWORK_NAME_ALREADY_EXISTS);
+    }
+
+    private Network getNetworkByName(List<Network> networks) {
+        return LinqUtils.firstOrNull(networks, new Predicate<Network>() {
+            @Override
+            public boolean eval(Network network) {
+                return network.getname().equals(getNetworkName());
+            }
+        });
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java
index 3238fdc..ca43acf 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java
@@ -67,7 +67,6 @@
                 }
             }
         }
-
         return ValidationResult.VALID;
     }
 
@@ -77,6 +76,12 @@
                 : new 
ValidationResult(VdcBllMessages.NETWORK_CLUSTER_NETWORK_IN_USE);
     }
 
+    protected ValidationResult networkNameStartsWithoutBond() {
+        return getNetworkName().toLowerCase().startsWith("bond")
+                ? new 
ValidationResult(VdcBllMessages.NETWORK_CANNOT_CONTAIN_BOND_NAME)
+                : ValidationResult.VALID;
+    }
+
     @Override
     public List<PermissionSubject> getPermissionCheckSubjects() {
         Network network = getNetwork();
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
index d40f3da..8ee61bd 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.network.cluster.NetworkClusterHelper;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters;
@@ -41,10 +42,7 @@
 
     @Override
     protected boolean canDoAction() {
-        List<Network> networks = getNetworkDAO().getAll();
-
-        if (getStoragePool() == null) {
-            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST);
+        if (!validate(storagePoolExists())) {
             return false;
         }
 
@@ -60,58 +58,31 @@
             return false;
         }
 
-        // check that network name not start with 'bond'
-        if (getNetworkName().toLowerCase().startsWith("bond")) {
-            
addCanDoActionMessage(VdcBllMessages.NETWORK_CANNOT_CONTAIN_BOND_NAME);
+        if (!validate(networkNameStartsWithoutBond())) {
             return false;
         }
+
+        List<Network> networks = getNetworkDAO().getAll();
 
         if (!validate(vlanIsFree(networks))) {
             return false;
         }
 
-        // check that network not exsits
-        Network oldNetwork = LinqUtils.firstOrNull(networks, new 
Predicate<Network>() {
-            @Override
-            public boolean eval(Network n) {
-                return n.getId().equals(getNetwork().getId());
-            }
-        });
-        if (oldNetwork == null) {
-            addCanDoActionMessage(VdcBllMessages.NETWORK_NOT_EXISTS);
+        Network oldNetwork = getNetworkById(networks);
+        if (!validate(networkExists(oldNetwork))) {
             return false;
         }
 
-        // check defalut network name is not renamed
-        String defaultNetwork = Config.<String> 
GetValue(ConfigValues.ManagementNetwork);
-        if (oldNetwork.getname().equals(defaultNetwork) &&
-                !getNetworkName().equals(defaultNetwork)) {
-            
addCanDoActionMessage(VdcBllMessages.NETWORK_CAN_NOT_REMOVE_DEFAULT_NETWORK);
+        if (!validate(notDefaultNetwork(oldNetwork))) {
             return false;
         }
 
-        Network net = LinqUtils.firstOrNull(networks, new Predicate<Network>() 
{
-            @Override
-            public boolean eval(Network n) {
-                return n.getname().trim().toLowerCase()
-                        .equals(getNetworkName().trim().toLowerCase())
-                        && !n.getId().equals(getNetwork().getId())
-                        && 
getNetwork().getstorage_pool_id().equals(n.getstorage_pool_id());
-            }
-        });
-        if (net != null) {
-            addCanDoActionMessage(VdcBllMessages.NETWORK_IN_USE);
+        if (!validate(networkNameNotUsed(networks))) {
             return false;
         }
 
-        // check if the network in use with running vm
-        clusters = 
getVdsGroupDAO().getAllForStoragePool(getStoragePool().getId());
-        for (VDSGroup cluster : clusters) {
-            List<VmStatic> vms = 
getVmStaticDAO().getAllByGroupAndNetworkName(cluster.getId(), getNetworkName());
-            if (vms.size() > 0) {
-                
addCanDoActionMessage(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM);
-                return false;
-            }
+        if (!validate(networkNotUsedByRunningVm())) {
+            return false;
         }
 
         return validate(networkNotAttachedToCluster(oldNetwork));
@@ -127,4 +98,59 @@
         addValidationGroup(UpdateEntity.class);
         return super.getValidationGroups();
     }
+
+    private Network getNetworkById(List<Network> networks) {
+        return LinqUtils.firstOrNull(networks, new Predicate<Network>() {
+            @Override
+            public boolean eval(Network network) {
+                return network.getId().equals(getNetwork().getId());
+            }
+        });
+    }
+
+    private ValidationResult storagePoolExists() {
+        return getStoragePool() == null
+                ? new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST)
+                : ValidationResult.VALID;
+    }
+
+    private ValidationResult networkExists(Network oldNetwork) {
+        return oldNetwork == null
+            ? new ValidationResult(VdcBllMessages.NETWORK_NOT_EXISTS)
+                : ValidationResult.VALID;
+    }
+
+    private ValidationResult networkNameNotUsed(List<Network> networks) {
+        Network networkWithSameName = LinqUtils.firstOrNull(networks, new 
Predicate<Network>() {
+            @Override
+            public boolean eval(Network network) {
+                return network.getname().trim().toLowerCase()
+                        .equals(getNetworkName().trim().toLowerCase())
+                        && !network.getId().equals(getNetwork().getId())
+                        && 
getNetwork().getstorage_pool_id().equals(network.getstorage_pool_id());
+            }
+        });
+
+        return networkWithSameName != null
+                ? new ValidationResult(VdcBllMessages.NETWORK_IN_USE)
+                : ValidationResult.VALID;
+    }
+
+    private ValidationResult networkNotUsedByRunningVm() {
+        for (VDSGroup cluster : 
getVdsGroupDAO().getAllForStoragePool(getStoragePool().getId())) {
+            List<VmStatic> vms = 
getVmStaticDAO().getAllByGroupAndNetworkName(cluster.getId(), getNetworkName());
+            if (vms.size() > 0) {
+                return new 
ValidationResult(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM);
+            }
+        }
+        return ValidationResult.VALID;
+    }
+
+    private ValidationResult notDefaultNetwork(Network oldNetwork) {
+        String defaultNetwork = Config.<String> 
GetValue(ConfigValues.ManagementNetwork);
+        return oldNetwork.getname().equals(defaultNetwork) &&
+                !getNetworkName().equals(defaultNetwork)
+                ? new 
ValidationResult(VdcBllMessages.NETWORK_CAN_NOT_REMOVE_DEFAULT_NETWORK)
+                : ValidationResult.VALID;
+    }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4bb5bafd2029b3a8729bcf78d359804c6f587ff7
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Muli Salem <msa...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to