Eliraz Levi has uploaded a new change for review.

Change subject: webadmin: allowing netmask as mask staticIP conf
......................................................................

webadmin: allowing netmask as mask staticIP conf

allowing having netmask as mask of static IP
configuration field, using maskValidation utill

Change-Id: If909eda53a61bda5030c342156a01e53576e77cb
Bug-Url: https://bugzilla.redhat.com/1012881
Signed-off-by: Eliraz Levi <el...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java
A 
frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
3 files changed, 108 insertions(+), 62 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/45/35145/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java
index 3ee7181..ef31644 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java
@@ -1,80 +1,47 @@
 package org.ovirt.engine.ui.uicommonweb.validation;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.Arrays;
 
+import org.ovirt.engine.core.common.validation.MaskValidator;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
-public class SubnetMaskValidation extends RegexValidation
+public class SubnetMaskValidation implements IValidation
 {
-    private final static Set<Integer> CORRECT_RANGE = new HashSet<Integer>();
-    private final static List<String> reasons = new ArrayList<String>();
-
-    static {
-        CORRECT_RANGE.add(128);
-        CORRECT_RANGE.add(192);
-        CORRECT_RANGE.add(224);
-        CORRECT_RANGE.add(240);
-        CORRECT_RANGE.add(248);
-        CORRECT_RANGE.add(252);
-        CORRECT_RANGE.add(254);
-        CORRECT_RANGE.add(255);
-        CORRECT_RANGE.add(0);
-
-        
reasons.add(ConstantsManager.getInstance().getConstants().subnetMaskIsNotValid());
-    }
 
     public SubnetMaskValidation() {
-        setExpression("^" + IpAddressValidation.IP_ADDRESS_REGEX + "$"); 
//$NON-NLS-1$ $NON-NLS-2$
-        
setMessage(ConstantsManager.getInstance().getConstants().thisFieldMustContainSubnetInFormatMsg());
+
+    }
+
+    protected String getSubnetBadFormatMessage() {
+        return 
ConstantsManager.getInstance().getConstants().thisFieldMustContainSubnetFormatAsNetmaskOrPrefixMsg();
+
+    }
+
+    protected String getInvalidNetmaskMessage() {
+        return ConstantsManager.getInstance().getConstants().inValidNetmask();
     }
 
     @Override
     public ValidationResult validate(Object value) {
-        ValidationResult ipValidation = super.validate(value);
-        if (!ipValidation.getSuccess()) {
-            return ipValidation;
-        }
-
+        // This validation must be applied to a String
+        assert value == null || value instanceof String;
+        String mask = (String) value;
         ValidationResult result = new ValidationResult();
-        if (value instanceof String) {
-            result.setSuccess(validateNetMask((String) value));
-            result.setReasons(reasons);
+        if (!MaskValidator.getInstance().isMaskFormatValid(mask)) {
+            return failWith(result, getSubnetBadFormatMessage());
+        } else if (!MaskValidator.getInstance().isMaskValid(mask)) {
+            return failWith(result, getInvalidNetmaskMessage());
         }
 
         return result;
+
     }
 
-    private boolean validateNetMask(String mask) {
-        // values[0] can be 128, 192, 224, 240, 248, 252, 254, 255
-        // values[1] can be 128, 192, 224, 240, 248, 252, 254, 255 if 
values[0] is 255, else values[1] must be 0
-        // values[2] can be 128, 192, 224, 240, 248, 252, 254, 255 if 
values[1] is 255, else values[2] must be 0
-        // values[3] can be 128, 192, 224, 240, 248, 252, 254, 255 if 
values[2] is 255, else values[3] must be 0
-
-        String[] split = mask.split("\\."); //$NON-NLS-1$
-        assert split.length == 4;
-        int[] values = new int[split.length];
-
-        for (int i = 0; i < split.length; i++) {
-            int value;
-            try {
-                value = Integer.valueOf(split[i]);
-            } catch (NumberFormatException e) {
-                return false;
-            }
-
-            if (!(CORRECT_RANGE.contains(value))) {
-                return false;
-            }
-            values[i] = value;
-        }
-
-        if ((values[0] == 0) || (values[0] != 255 && values[1] != 0) || 
(values[1] != 255 && values[2] != 0)
-                || (values[2] != 255 && values[3] != 0)) {
-            return false;
-        }
-        return true;
+    // TODO elevi should i have abstract to share this function?
+    private ValidationResult failWith(ValidationResult result, String 
errorMessage) {
+        result.setSuccess(false);
+        result.setReasons(Arrays.asList(errorMessage));
+        return result;
     }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java
 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java
new file mode 100644
index 0000000..e928399
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java
@@ -0,0 +1,76 @@
+package org.ovirt.engine.ui.uicommonweb.validation;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class SubnetMaskValidationTest {
+
+    private SubnetMaskValidation validation;
+
+    private final String mask;
+    private final boolean isValidMask;
+
+    public SubnetMaskValidationTest(String netmask, boolean result) {
+        this.mask = netmask;
+        this.isValidMask = result;
+    }
+
+    @Before
+    public void setup() {
+        SubnetMaskValidation underTest = new SubnetMaskValidation();
+        validation = spy(underTest);
+        doReturn(null).when(validation).getInvalidNetmaskMessage();
+        doReturn(null).when(validation).getSubnetBadFormatMessage();
+    }
+
+    @Test
+    public void checkValidMask()
+    {
+        assertEquals("Failed to validate mask: " + mask, isValidMask, 
validation.validate(mask).getSuccess());//$NON-NLS-1$
+    }
+
+    @Parameterized.Parameters
+    public static Collection<Object[]> namesParams() {
+        return Arrays.asList(new Object[][] {
+
+                // Bad Format prefix format
+                { null, false }, //$NON-NLS-1$
+                { "a.a.a.a", false }, //$NON-NLS-1$
+                { "255.255.0", false }, //$NON-NLS-1$
+                { "255.255.0.0.0", false }, //$NON-NLS-1$
+                { "255.255.0.0.", false }, //$NON-NLS-1$
+
+                // Prefix not valid
+                { "255.255.0.1", false }, //$NON-NLS-1$
+                { "255.0.255.0", false }, //$NON-NLS-1$
+                { "255.0.0.255", false }, //$NON-NLS-1$
+                { "224.0.255.0", false }, //$NON-NLS-1$
+
+                // Valid prefix
+                { "255.255.0.0", true }, //$NON-NLS-1$
+                { "255.255.255.255", true }, //$NON-NLS-1$
+
+                // 0-32 bad format format
+                { "31 ", false }, //$NON-NLS-1$
+                { "33", false }, //$NON-NLS-1$
+                { "31/", false }, //$NON-NLS-1$
+                { "31*", false }, //$NON-NLS-1$
+                { "//31 ", false }, //$NON-NLS-1$
+
+                // 0-32 valid
+                { "31", true }, //$NON-NLS-1$
+
+        });
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 281c61a..acac34c 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -897,8 +897,11 @@
     @DefaultStringValue("This field can be empty or contain an IP address in 
format xxx.xxx.xxx.xxx")
     String emptyOrValidIPaddressInFormatMsg();
 
-    @DefaultStringValue("This field must contain a subnet in format 
xxx.xxx.xxx.xxx")
-    String thisFieldMustContainSubnetInFormatMsg();
+    @DefaultStringValue("This field must contain a subnet in the following 
format:\n\txxx.xxx.xxx.xxx\n\txx where xx between 0-32")
+    String thisFieldMustContainSubnetFormatAsNetmaskOrPrefixMsg();
+
+    @DefaultStringValue("Invalid mask value")
+    String inValidNetmask();
 
     @DefaultStringValue("This field must contain a CIDR in format 
xxx.xxx.xxx.xxx/yy, where xxx is between 0 and 255 and yy is between 0 and 32.")
     String thisFieldMustContainCidrInFormatMsg();


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

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

Reply via email to