fixing warnings from checkstyle in common-app-api
[sdc.git] / common-app-api / src / main / java / org / openecomp / sdc / common / util / ValidationUtils.java
index adfa457..6633148 100644 (file)
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -27,530 +27,529 @@ import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.commons.lang3.text.WordUtils;
 import org.apache.commons.validator.routines.UrlValidator;
 import org.jsoup.Jsoup;
-import org.jsoup.helper.StringUtil;
 import org.jsoup.safety.Whitelist;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
 import java.util.regex.Pattern;
 
 public class ValidationUtils {
-       public final static Integer COMPONENT_NAME_MAX_LENGTH = 1024;
-       public final static Pattern COMPONENT_NAME_PATTERN = Pattern
-                       .compile("^[\\w][\\w \\.\\-\\_\\:\\+]{0," + (COMPONENT_NAME_MAX_LENGTH-1) + "}$");
-       public final static Integer ADDITIONAL_INFORMATION_KEY_MAX_LENGTH = 50;
-       public final static Pattern ADDITIONAL_INFORMATION_KEY_PATTERN = Pattern
-                       .compile("^[\\w\\s\\.\\-\\_]{1," + COMPONENT_NAME_MAX_LENGTH + "}$");
-       public final static Integer RSI_NAME_MAX_LENGTH = 1024;
-       public final static Pattern RSI_NAME_PATTERN = Pattern
-                       .compile("^[\\w \\s\\.\\-\\_\\:\\+]{1," + RSI_NAME_MAX_LENGTH + "}$");
-       public final static Integer COMMENT_MAX_LENGTH = 256;
-
-       public final static Integer ICON_MAX_LENGTH = 25;
-       public final static Pattern ICON_PATTERN = Pattern.compile("^[\\w\\-]{1," + ICON_MAX_LENGTH + "}$");
-       public final static Integer PROJECT_CODE_MAX_LEGTH = 50;
-       public final static Pattern PROJECT_CODE_PATTERN = Pattern.compile("^[\\s\\w_.-]{5,50}$");
-
-       // USER_ID format : aannnX (where a=a-z or A-Z, n=0-9, and X=a-z,A-Z, or 0-9)
-       public final static Integer CONNTACT_ID_MAX_LENGTH = 50;
-//     public final static Pattern CONTACT_ID_PATTERN = Pattern
-//                     .compile("[mM]{1}[0-9]{5}|[a-zA-Z]{2}[0-9]{4}|[a-zA-Z]{2}[0-9]{3}[a-zA-Z]{1}");
-       public final static Pattern CONTACT_ID_PATTERN = Pattern.compile("^[\\s\\w_.-]{1,50}$");
-       public final static Pattern OCTET_PATTERN = Pattern.compile("%[a-fA-F0-9]{2}");
-       public final static Pattern NONE_UTF8_PATTERN = Pattern.compile("[^\\x00-\\x7F]+");
-       public final static Pattern URL_INVALIDE_PATTERN = Pattern.compile("[,#?&@$<>~^`\\\\\\[\\]{}|\")(*!+=;%]+");// ,#?&@$<>~^`\\[]{}|")(*!
-
-       public final static Pattern ENGLISH_PATTERN = Pattern.compile("^[\\p{Graph}\\x20]+$");
-       public final static Integer COMPONENT_DESCRIPTION_MAX_LENGTH = 1024;
-       public final static Integer SERVICE_TYPE_MAX_LENGTH = 400;
-       public final static Integer SERVICE_ROLE_MAX_LENGTH = 400;
-
-       public final static Integer TAG_MAX_LENGTH = 1024;
-       public final static Integer TAG_LIST_MAX_LENGTH = 1024;
-       public final static Integer VENDOR_NAME_MAX_LENGTH = 60;
-       public final static Pattern VENDOR_NAME_PATTERN = Pattern
-                       .compile("^[\\x20-\\x21\\x23-\\x29\\x2B-\\x2E\\x30-\\x39\\x3B\\x3D\\x40-\\x5B\\x5D-\\x7B\\x7D-\\xFF]+$");
-       public final static Integer VENDOR_RELEASE_MAX_LENGTH = 25;
-       public final static Pattern VENDOR_RELEASE_PATTERN = Pattern
-                       .compile("^[\\x20-\\x21\\x23-\\x29\\x2B-\\x2E\\x30-\\x39\\x3B\\x3D\\x40-\\x5B\\x5D-\\x7B\\x7D-\\xFF]+$");
-       public final static Integer RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH = 65;
-
-       public final static Pattern CLEAN_FILENAME_PATTERN = Pattern.compile("[\\x00-\\x1f\\x80-\\x9f\\x5c/<?>\\*:|\"/]+");
-
-       public final static Pattern DASH_PATTERN = Pattern.compile("[-]+");
-       public final static Pattern UNDERSCORE_PATTERN = Pattern.compile("[_]+");
-       public final static Pattern PLUS_PATTERN = Pattern.compile("[+]+");
-       public final static Pattern SPACE_PATTERN = Pattern.compile("[ ]+");
-       public final static Pattern AMP_PATTERN = Pattern.compile("[&]+");
-       public final static Pattern DOT_PATTERN = Pattern.compile("[\\.]+");
-       public final static Pattern APOST_PATTERN = Pattern.compile("[']+");
-       public final static Pattern HASHTAG_PATTERN = Pattern.compile("[#]+");
-       public final static Pattern EQUAL_PATTERN = Pattern.compile("[=]+");
-       public final static Pattern COLON_PATTERN = Pattern.compile("[:]+");
-       public final static Pattern AT_PATTERN = Pattern.compile("[@]+");
-       public final static Pattern AND_PATTERN = Pattern.compile(" [aA][Nn][Dd] ");
-       public final static Set<String> CATEGORY_CONJUNCTIONS = new HashSet<>(
+    public static final Integer COMPONENT_NAME_MAX_LENGTH = 1024;
+    public static final Pattern COMPONENT_NAME_PATTERN = Pattern
+            .compile("^[\\w][\\w \\.\\-\\_\\:\\+]{0," + (COMPONENT_NAME_MAX_LENGTH - 1) + "}$");
+    public static final Integer ADDITIONAL_INFORMATION_KEY_MAX_LENGTH = 50;
+    public static final Pattern ADDITIONAL_INFORMATION_KEY_PATTERN = Pattern
+            .compile("^[\\w\\s\\.\\-\\_]{1," + COMPONENT_NAME_MAX_LENGTH + "}$");
+    public static final Integer RSI_NAME_MAX_LENGTH = 1024;
+    public static final Pattern RSI_NAME_PATTERN = Pattern
+            .compile("^[\\w \\s\\.\\-\\_\\:\\+]{1," + RSI_NAME_MAX_LENGTH + "}$");
+    public static final Integer COMMENT_MAX_LENGTH = 256;
+
+    public static final Integer ICON_MAX_LENGTH = 25;
+    public static final Pattern ICON_PATTERN = Pattern.compile("^[\\w\\-]{1," + ICON_MAX_LENGTH + "}$");
+    public static final Integer PROJECT_CODE_MAX_LEGTH = 50;
+    public static final Pattern PROJECT_CODE_PATTERN = Pattern.compile("^[\\s\\w_.-]{5,50}$");
+
+    public static final Integer CONNTACT_ID_MAX_LENGTH = 50;
+    public static final Pattern CONTACT_ID_PATTERN = Pattern.compile("^[\\s\\w_.-]{1,50}$");
+    public static final Pattern OCTET_PATTERN = Pattern.compile("%[a-fA-F0-9]{2}");
+    public static final Pattern NONE_UTF8_PATTERN = Pattern.compile("[^\\x00-\\x7F]+");
+    public static final Pattern URL_INVALIDE_PATTERN = Pattern.compile("[,#?&@$<>~^`\\\\\\[\\]{}|\")(*!+=;%]+"); // ,#?&@$<>~^`\\[]{}|")(*!
+
+    public static final Pattern ENGLISH_PATTERN = Pattern.compile("^[\\p{Graph}\\x20]+$");
+    public static final Integer COMPONENT_DESCRIPTION_MAX_LENGTH = 1024;
+    public static final Integer SERVICE_TYPE_MAX_LENGTH = 400;
+    public static final Integer SERVICE_ROLE_MAX_LENGTH = 400;
+
+    public static final Integer TAG_MAX_LENGTH = 1024;
+    public static final Integer TAG_LIST_MAX_LENGTH = 1024;
+    public static final Integer VENDOR_NAME_MAX_LENGTH = 60;
+    public static final Pattern VENDOR_NAME_PATTERN = Pattern
+            .compile("^[\\x20-\\x21\\x23-\\x29\\x2B-\\x2E\\x30-\\x39\\x3B\\x3D\\x40-\\x5B\\x5D-\\x7B\\x7D-\\xFF]+$");
+    public static final Integer VENDOR_RELEASE_MAX_LENGTH = 25;
+    public static final Pattern VENDOR_RELEASE_PATTERN = Pattern
+            .compile("^[\\x20-\\x21\\x23-\\x29\\x2B-\\x2E\\x30-\\x39\\x3B\\x3D\\x40-\\x5B\\x5D-\\x7B\\x7D-\\xFF]+$");
+    public static final Integer RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH = 65;
+
+    public static final Pattern CLEAN_FILENAME_PATTERN = Pattern.compile("[\\x00-\\x1f\\x80-\\x9f\\x5c/<?>\\*:|\"/]+");
+
+    public static final Pattern DASH_PATTERN = Pattern.compile("[-]+");
+    public static final Pattern UNDERSCORE_PATTERN = Pattern.compile("[_]+");
+    public static final Pattern PLUS_PATTERN = Pattern.compile("[+]+");
+    public static final Pattern SPACE_PATTERN = Pattern.compile("[ ]+");
+    public static final Pattern AMP_PATTERN = Pattern.compile("[&]+");
+    public static final Pattern DOT_PATTERN = Pattern.compile("[\\.]+");
+    public static final Pattern APOST_PATTERN = Pattern.compile("[']+");
+    public static final Pattern HASHTAG_PATTERN = Pattern.compile("[#]+");
+    public static final Pattern EQUAL_PATTERN = Pattern.compile("[=]+");
+    public static final Pattern COLON_PATTERN = Pattern.compile("[:]+");
+    public static final Pattern AT_PATTERN = Pattern.compile("[@]+");
+    public static final Pattern AND_PATTERN = Pattern.compile(" [aA][Nn][Dd] ");
+    public static final Set<String> CATEGORY_CONJUNCTIONS = new HashSet<>(
             Arrays.asList("of", "to", "for", "as", "a", "an", "the"));
 
-       public final static Pattern COST_PATTERN = Pattern.compile("^[0-9]{1,5}\\.[0-9]{1,3}$");
-       public final static Pattern ARTIFACT_LABEL_PATTERN = Pattern.compile("^[a-zA-Z0-9 \\-+]+$");
-       public final static Integer ARTIFACT_LABEL_LENGTH = 255;
-       public final static Pattern ARTIFACT_DISPLAY_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9][a-zA-Z0-9 &\\.'#=:@_\\-+]+$");
-       public final static Pattern CATEGORY_LABEL_PATTERN = Pattern.compile("^[a-zA-Z0-9][a-zA-Z0-9 &\\.'#=:@_\\-+]+$");
-       public final static Integer CATEGORY_LABEL_MIN_LENGTH = 3;
-       public final static Integer CATEGORY_LABEL_MAX_LENGTH = 25;
-
-       public final static Pattern COMPONENT_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-\\_]+");
-       public final static Pattern COMPONENT_INCTANCE_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-]+");
-       public final static Pattern PRODUCT_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-\\_&=#@':\\[\\]\\+]+");
-       public final static Integer CONSUMER_NAME_MAX_LENGTH = 255;
-       // public final static Pattern CONSUMER_NAME_PATTERN =
-       // Pattern.compile("^[\\w]{1}?[\\w\\.\\-]{0," + CONSUMER_NAME_MAX_LENGTH +
-       // "}?$");
-       public final static Pattern CONSUMER_NAME_PATTERN = Pattern.compile("^[\\w]+[\\w\\.\\-]*$");
-       public final static Integer CONSUMER_SALT_LENGTH = 32;
-       public final static Integer CONSUMER_PASSWORD_LENGTH = 64;
-       public final static Pattern CONSUMER_PASS_SALT_PATTERN = Pattern.compile("^[a-z0-9]+$");
-       public final static Pattern FLOAT_PATTERN = Pattern.compile("^[\\d]+[\\.]{1}[\\d]+$");
-       public final static Pattern CERTIFIED_VERSION_PATTERN = Pattern.compile("^[1-9][0-9]*\\.0$");
-       public final static Pattern MINOR_VERSION_PATTERN = Pattern.compile("^0\\.[1-9][0-9]*$");
-       public final static Pattern TAGS_PATTERN = Pattern.compile("<[^><]*>");
-
-       public final static Integer ARTIFACT_NAME_LENGTH = 255;
-       public final static Integer API_URL_LENGTH = 100;
-       public final static Integer ARTIFACT_DESCRIPTION_MAX_LENGTH = 256;
-
-       public final static Integer PRODUCT_FULL_NAME_MIN_LENGTH = 4;
-       public final static Integer PRODUCT_FULL_NAME_MAX_LENGTH = 100;
-       public static final Integer FORWARDING_PATH_NAME_MAX_LENGTH = 100;
-       public final static Pattern FORWARDING_PATH_NAME_PATTERN = Pattern.compile("^[\\w][\\w \\.\\-\\_\\:\\+]{0," + (FORWARDING_PATH_NAME_MAX_LENGTH-1) + "}$");
-       
-       public final static Integer POLICY_MAX_LENGTH = 1024;
-       public final static Pattern POLICY_NAME_PATTERN = Pattern
-                       .compile("^[\\w][\\w \\.\\-\\_\\:\\+]{0," + (POLICY_MAX_LENGTH-1) + "}$");
-
-       public static boolean validateArtifactLabel(String label) {
-               return ARTIFACT_LABEL_PATTERN.matcher(label).matches();
-       }
-       
-       public static boolean validateArtifactDisplayName(String displayName) {
-               return ARTIFACT_DISPLAY_NAME_PATTERN.matcher(displayName).matches();
-       }
-
-       public static boolean validateCategoryDisplayNameFormat(String label) {
-               boolean res = true;
-               if (label != null) {
-                       label = label.trim();
-                       res = CATEGORY_LABEL_PATTERN.matcher(label).matches();
-               }
-               return res;
-       }
-
-       public static String normalizeCategoryName4Display(String str) {
-               if (str != null) {
-                       str = str.trim();
-                       str = DASH_PATTERN.matcher(str).replaceAll("-");
-                       str = UNDERSCORE_PATTERN.matcher(str).replaceAll("_");
-                       str = AMP_PATTERN.matcher(str).replaceAll("&");
-                       str = PLUS_PATTERN.matcher(str).replaceAll("+");
-                       str = DOT_PATTERN.matcher(str).replaceAll(".");
-                       str = APOST_PATTERN.matcher(str).replaceAll("'");
-                       str = HASHTAG_PATTERN.matcher(str).replaceAll("#");
-                       str = EQUAL_PATTERN.matcher(str).replaceAll("=");
-                       str = COLON_PATTERN.matcher(str).replaceAll(":");
-                       str = AT_PATTERN.matcher(str).replaceAll("@");
-                       str = normaliseWhitespace(str);
-                       str = AND_PATTERN.matcher(str).replaceAll(" & ");
-
-                       // Case normalizing
-                       StringBuilder sb = new StringBuilder();
-                       String[] split = str.split(" ");
-                       for (int i = 0; i < split.length; i++) {
-                               String splitted = split[i];
-                               String lowerCase = splitted.toLowerCase();
-                               // BANK OF AMERICA --> BANK of AMERICA ("of" is lowercased), but
-                               // OF BANK OF AMERICA --> OF BANK of AMERICA (first "OF" is not
-                               // lowercased because it's first word)
-                               // Agreed with Ella, 26/11/15
-                               if ((i > 0) && CATEGORY_CONJUNCTIONS.contains(lowerCase)) {
-                                       sb.append(lowerCase);
-                               } else {
-                                       sb.append(WordUtils.capitalize(splitted));
-                               }
-                               sb.append(" ");
-                       }
-                       str = sb.toString().trim();
-               }
-               return str;
-       }
-
-       public static String normalizeCategoryName4Uniqueness(String str) {
-               return str.toLowerCase();
-       }
-
-       public static boolean validateCategoryDisplayNameLength(String label) {
-               return (label != null && label.length() >= CATEGORY_LABEL_MIN_LENGTH
-                               && label.length() <= CATEGORY_LABEL_MAX_LENGTH);
-       }
-
-       public static boolean validateProductFullNameLength(String fullName) {
-               return (fullName != null && fullName.length() >= PRODUCT_FULL_NAME_MIN_LENGTH
-                               && fullName.length() <= PRODUCT_FULL_NAME_MAX_LENGTH);
-       }
-
-       public static boolean validateArtifactLabelLength(String label) {
-               return label.length() > 0 && label.length() <= ARTIFACT_LABEL_LENGTH;
-       }
-
-       public static boolean validateResourceInstanceNameLength(String resourceInstanceName) {
-               return resourceInstanceName.length() <= RSI_NAME_MAX_LENGTH;
-       }
-
-       public static boolean validateResourceInstanceName(String resourceInstanceName) {
-               return RSI_NAME_PATTERN.matcher(resourceInstanceName).matches();
-       }
-
-       public static boolean validateUrlLength(String url) {
-               return url.length() <= API_URL_LENGTH;
-       }
-
-       public static boolean validateArtifactNameLength(String artifactName) {
-               return (artifactName.length() <= ARTIFACT_NAME_LENGTH && artifactName.length() > 0);
-       }
-
-       public static boolean validateComponentNamePattern(String componentName) {
-               return COMPONENT_NAME_PATTERN.matcher(componentName).matches();
-       }
-
-       public static boolean validateComponentNameLength(String componentName) {
-               return componentName.length() <= COMPONENT_NAME_MAX_LENGTH;
-       }
-
-       public static boolean validateIcon(String icon) {
-               return ICON_PATTERN.matcher(icon).matches();
-       }
-
-       public static boolean validateIconLength(String icon) {
-               return icon.length() <= ICON_MAX_LENGTH;
-       }
-
-       public static boolean validateProjectCode(String projectCode) {
-               return PROJECT_CODE_PATTERN.matcher(projectCode).matches();
-       }
-
-       public static boolean validateProjectCodeLegth(String projectCode) {
-               return projectCode.length() <= PROJECT_CODE_MAX_LEGTH;
-       }
-
-       public static boolean validateContactId(String contactId) {
-               return CONTACT_ID_PATTERN.matcher(contactId).matches();
-       }
-
-       public static boolean validateCost(String cost) {
-               return COST_PATTERN.matcher(cost).matches();
-       }
-
-       public static String removeHtmlTags(String str) {
-               return Jsoup.clean(str, Whitelist.none());
-       }
-
-       public static String removeAllTags(String htmlText) {
+    public static final Pattern COST_PATTERN = Pattern.compile("^[0-9]{1,5}\\.[0-9]{1,3}$");
+    public static final Pattern ARTIFACT_LABEL_PATTERN = Pattern.compile("^[a-zA-Z0-9 \\-+]+$");
+    public static final Integer ARTIFACT_LABEL_LENGTH = 255;
+    public static final Pattern ARTIFACT_DISPLAY_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9][a-zA-Z0-9 &\\.'#=:@_\\-+]+$");
+    public static final Pattern CATEGORY_LABEL_PATTERN = Pattern.compile("^[a-zA-Z0-9][a-zA-Z0-9 &\\.'#=:@_\\-+]+$");
+    public static final Integer CATEGORY_LABEL_MIN_LENGTH = 3;
+    public static final Integer CATEGORY_LABEL_MAX_LENGTH = 25;
+
+    public static final Pattern COMPONENT_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-\\_]+");
+    public static final Pattern COMPONENT_INCTANCE_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-]+");
+    public static final Pattern PRODUCT_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-\\_&=#@':\\[\\]\\+]+");
+    public static final Integer CONSUMER_NAME_MAX_LENGTH = 255;
+    // public static final Pattern CONSUMER_NAME_PATTERN =
+    // Pattern.compile("^[\\w]{1}?[\\w\\.\\-]{0," + CONSUMER_NAME_MAX_LENGTH +
+    // "}?$");
+    public static final Pattern CONSUMER_NAME_PATTERN = Pattern.compile("^[\\w]+[\\w\\.\\-]*$");
+    public static final Integer CONSUMER_SALT_LENGTH = 32;
+    public static final Integer CONSUMER_PASSWORD_LENGTH = 64;
+    public static final Pattern CONSUMER_PASS_SALT_PATTERN = Pattern.compile("^[a-z0-9]+$");
+    public static final Pattern FLOAT_PATTERN = Pattern.compile("^[\\d]+[\\.]{1}[\\d]+$");
+    public static final Pattern CERTIFIED_VERSION_PATTERN = Pattern.compile("^[1-9][0-9]*\\.0$");
+    public static final Pattern MINOR_VERSION_PATTERN = Pattern.compile("^0\\.[1-9][0-9]*$");
+    public static final Pattern TAGS_PATTERN = Pattern.compile("<[^><]*>");
+
+    public static final Integer ARTIFACT_NAME_LENGTH = 255;
+    public static final Integer API_URL_LENGTH = 100;
+    public static final Integer ARTIFACT_DESCRIPTION_MAX_LENGTH = 256;
+
+    public static final Integer PRODUCT_FULL_NAME_MIN_LENGTH = 4;
+    public static final Integer PRODUCT_FULL_NAME_MAX_LENGTH = 100;
+    public static final Integer FORWARDING_PATH_NAME_MAX_LENGTH = 100;
+    public static final Pattern FORWARDING_PATH_NAME_PATTERN = Pattern.compile("^[\\w][\\w \\.\\-\\_\\:\\+]{0," + (FORWARDING_PATH_NAME_MAX_LENGTH - 1) + "}$");
+
+    public static final Integer POLICY_MAX_LENGTH = 1024;
+    public static final Pattern POLICY_NAME_PATTERN = Pattern
+            .compile("^[\\w][\\w \\.\\-\\_\\:\\+]{0," + (POLICY_MAX_LENGTH - 1) + "}$");
+
+    public static boolean validateArtifactLabel(String label) {
+        return ARTIFACT_LABEL_PATTERN.matcher(label).matches();
+    }
+
+    public static boolean validateArtifactDisplayName(String displayName) {
+        return ARTIFACT_DISPLAY_NAME_PATTERN.matcher(displayName).matches();
+    }
+
+    public static boolean validateCategoryDisplayNameFormat(String label) {
+        boolean res = true;
+        if (label != null) {
+            label = label.trim();
+            res = CATEGORY_LABEL_PATTERN.matcher(label).matches();
+        }
+        return res;
+    }
+
+    public static String normalizeCategoryName4Display(String str) {
+        if (str != null) {
+            str = str.trim();
+            str = DASH_PATTERN.matcher(str).replaceAll("-");
+            str = UNDERSCORE_PATTERN.matcher(str).replaceAll("_");
+            str = AMP_PATTERN.matcher(str).replaceAll("&");
+            str = PLUS_PATTERN.matcher(str).replaceAll("+");
+            str = DOT_PATTERN.matcher(str).replaceAll(".");
+            str = APOST_PATTERN.matcher(str).replaceAll("'");
+            str = HASHTAG_PATTERN.matcher(str).replaceAll("#");
+            str = EQUAL_PATTERN.matcher(str).replaceAll("=");
+            str = COLON_PATTERN.matcher(str).replaceAll(":");
+            str = AT_PATTERN.matcher(str).replaceAll("@");
+            str = normaliseWhitespace(str);
+            str = AND_PATTERN.matcher(str).replaceAll(" & ");
+
+            // Case normalizing
+            StringBuilder sb = new StringBuilder();
+            String[] split = str.split(" ");
+            for (int i = 0; i < split.length; i++) {
+                String splitted = split[i];
+                String lowerCase = splitted.toLowerCase();
+                // BANK OF AMERICA --> BANK of AMERICA ("of" is lowercased), but
+                // OF BANK OF AMERICA --> OF BANK of AMERICA (first "OF" is not
+                // lowercased because it's first word)
+                // Agreed with Ella, 26/11/15
+                if ((i > 0) && CATEGORY_CONJUNCTIONS.contains(lowerCase)) {
+                    sb.append(lowerCase);
+                } else {
+                    sb.append(WordUtils.capitalize(splitted));
+                }
+                sb.append(" ");
+            }
+            str = sb.toString().trim();
+        }
+        return str;
+    }
+
+    public static String normalizeCategoryName4Uniqueness(String str) {
+        return str.toLowerCase();
+    }
+
+    public static boolean validateCategoryDisplayNameLength(String label) {
+        return (label != null && label.length() >= CATEGORY_LABEL_MIN_LENGTH
+                && label.length() <= CATEGORY_LABEL_MAX_LENGTH);
+    }
+
+    public static boolean validateProductFullNameLength(String fullName) {
+        return (fullName != null && fullName.length() >= PRODUCT_FULL_NAME_MIN_LENGTH
+                && fullName.length() <= PRODUCT_FULL_NAME_MAX_LENGTH);
+    }
+
+    public static boolean validateArtifactLabelLength(String label) {
+        return label.length() > 0 && label.length() <= ARTIFACT_LABEL_LENGTH;
+    }
+
+    public static boolean validateResourceInstanceNameLength(String resourceInstanceName) {
+        return resourceInstanceName.length() <= RSI_NAME_MAX_LENGTH;
+    }
+
+    public static boolean validateResourceInstanceName(String resourceInstanceName) {
+        return RSI_NAME_PATTERN.matcher(resourceInstanceName).matches();
+    }
+
+    public static boolean validateUrlLength(String url) {
+        return url.length() <= API_URL_LENGTH;
+    }
+
+    public static boolean validateArtifactNameLength(String artifactName) {
+        return (artifactName.length() <= ARTIFACT_NAME_LENGTH && artifactName.length() > 0);
+    }
+
+    public static boolean validateComponentNamePattern(String componentName) {
+        return COMPONENT_NAME_PATTERN.matcher(componentName).matches();
+    }
+
+    public static boolean validateComponentNameLength(String componentName) {
+        return componentName.length() <= COMPONENT_NAME_MAX_LENGTH;
+    }
+
+    public static boolean validateIcon(String icon) {
+        return ICON_PATTERN.matcher(icon).matches();
+    }
+
+    public static boolean validateIconLength(String icon) {
+        return icon.length() <= ICON_MAX_LENGTH;
+    }
+
+    public static boolean validateProjectCode(String projectCode) {
+        return PROJECT_CODE_PATTERN.matcher(projectCode).matches();
+    }
+
+    public static boolean validateProjectCodeLegth(String projectCode) {
+        return projectCode.length() <= PROJECT_CODE_MAX_LEGTH;
+    }
+
+    public static boolean validateContactId(String contactId) {
+        return CONTACT_ID_PATTERN.matcher(contactId).matches();
+    }
+
+    public static boolean validateCost(String cost) {
+        return COST_PATTERN.matcher(cost).matches();
+    }
+
+    public static String removeHtmlTags(String str) {
+        return Jsoup.clean(str, Whitelist.none());
+    }
+
+    public static String removeAllTags(String htmlText) {
 
         return TAGS_PATTERN.matcher(htmlText).replaceAll("").trim();
-       }
-
-       public static String normaliseWhitespace(String str) {
-               StringBuilder sb = new StringBuilder(str.length());
-               appendNormalisedWhitespace(sb, str, false);
-               return sb.toString();
-       }
-
-       private static void appendNormalisedWhitespace(StringBuilder accum, String string, boolean stripLeading) {
-               boolean lastWasWhite = false;
-               boolean reachedNonWhite = false;
-
-               int len = string.length();
-               int c;
-               for (int i = 0; i < len; i+= Character.charCount(c)) {
-                       c = string.codePointAt(i);
-                       if (isWhitespace(c)) {
-                               if ((stripLeading && !reachedNonWhite) || lastWasWhite)
-                                       continue;
-                               accum.append(' ');
-                               lastWasWhite = true;
-                       }
-                       else {
-                               accum.appendCodePoint(c);
-                               lastWasWhite = false;
-                               reachedNonWhite = true;
-                       }
-               }
-       }
-
-       private static boolean isWhitespace(int c){
-               return c == ' ';
-       }
-
-       public static String stripOctets(String str) {
-               return OCTET_PATTERN.matcher(str).replaceAll("");
-       }
-
-       public static String removeNoneUtf8Chars(String input) {
-               return NONE_UTF8_PATTERN.matcher(input).replaceAll("");
-       }
-
-       public static boolean validateIsEnglish(String input) {
-               return ENGLISH_PATTERN.matcher(input).matches();
-       }
-
-       public static boolean validateIsAscii(String input) {
+    }
+
+    public static String normaliseWhitespace(String str) {
+        StringBuilder sb = new StringBuilder(str.length());
+        appendNormalisedWhitespace(sb, str, false);
+        return sb.toString();
+    }
+
+    private static void appendNormalisedWhitespace(StringBuilder accum, String string, boolean stripLeading) {
+        boolean lastWasWhite = false;
+        boolean reachedNonWhite = false;
+
+        int len = string.length();
+        int c;
+        for (int i = 0; i < len; i += Character.charCount(c)) {
+            c = string.codePointAt(i);
+            if (isWhitespace(c)) {
+                if ((stripLeading && !reachedNonWhite) || lastWasWhite) {
+                    continue;
+                }
+                accum.append(' ');
+                lastWasWhite = true;
+            } else {
+                accum.appendCodePoint(c);
+                lastWasWhite = false;
+                reachedNonWhite = true;
+            }
+        }
+    }
+
+    private static boolean isWhitespace(int c) {
+        return c == ' ';
+    }
+
+    public static String stripOctets(String str) {
+        return OCTET_PATTERN.matcher(str).replaceAll("");
+    }
+
+    public static String removeNoneUtf8Chars(String input) {
+        return NONE_UTF8_PATTERN.matcher(input).replaceAll("");
+    }
+
+    public static boolean validateIsEnglish(String input) {
+        return ENGLISH_PATTERN.matcher(input).matches();
+    }
+
+    public static boolean validateIsAscii(String input) {
 
         return CharMatcher.ASCII.matchesAllOf(input);
-       }
-
-       public static String convertHtmlTagsToEntities(String input) {
-               return StringEscapeUtils.escapeHtml4(input);
-       }
-
-       public static List<String> removeDuplicateFromList(List<String> list) {
-               Set<String> hs = new LinkedHashSet<>(list);
-               list.clear();
-               list.addAll(hs);
-               return list;
-
-       }
-
-       public static boolean validateTagLength(String tag) {
-               if (tag != null) {
-                       return tag.length() <= TAG_MAX_LENGTH;
-               }
-               return false;
-       }
-
-       public static boolean validateTagListLength(int tagListLength) {
-               return tagListLength <= TAG_LIST_MAX_LENGTH;
-       }
-
-       public static boolean validateDescriptionLength(String description) {
-               return description.length() <= COMPONENT_DESCRIPTION_MAX_LENGTH;
-       }
-
-       public static boolean validateStringNotEmpty(String value) {
-               if ((value == null) || (value.isEmpty())) {
-                       return false;
-               }
-               return true;
-       }
-
-       public static boolean validateListNotEmpty(List<?> list) {
-               if ((list == null) || (list.isEmpty())) {
-                       return false;
-               }
-               return true;
-       }
-
-       public static boolean validateVendorName(String vendorName) {
-               return VENDOR_NAME_PATTERN.matcher(vendorName).matches();
-       }
-
-       public static boolean validateVendorNameLength(String vendorName) {
-               return vendorName.length() <= VENDOR_NAME_MAX_LENGTH;
-       }
-
-       public static boolean validateResourceVendorModelNumberLength(String resourceVendorModelNumber) {
-               return resourceVendorModelNumber.length() <= RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH;
-       }
-       
-       public static boolean validateVendorRelease(String vendorRelease) {
-               return VENDOR_RELEASE_PATTERN.matcher(vendorRelease).matches();
-       }
-
-       public static boolean validateVendorReleaseLength(String vendorRelease) {
-               return vendorRelease.length() <= VENDOR_RELEASE_MAX_LENGTH;
-       }
-       
-       public static boolean validateServiceTypeLength(String serviceType) {
-               return serviceType.length() <= SERVICE_TYPE_MAX_LENGTH;
-       }
-       
-       public static boolean validateServiceRoleLength(String serviceRole) {
-               return serviceRole.length() <= SERVICE_ROLE_MAX_LENGTH;
-       }
-
-
-
-       public static boolean hasBeenCertified(String version) {
-               return NumberUtils.toDouble(version) >= 1;
-       }
-
-       public static String normaliseComponentName(String name) {
-               String[] split = splitComponentName(name);
-               StringBuffer sb = new StringBuffer();
-               for (String splitElement : split) {
-                       sb.append(splitElement);
-               }
-               return sb.toString();
-
-       }
-
-       public static String normalizeComponentInstanceName(String name) {
-               String[] split = splitComponentInstanceName(name);
-               StringBuffer sb = new StringBuffer();
-               for (String splitElement : split) {
-                       sb.append(splitElement);
-               }
-               return sb.toString();
-
-       }
-
-       private static String[] splitComponentName(String name) {
-               String normalizedName = name.toLowerCase();
-               normalizedName = COMPONENT_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" ");
+    }
+
+    public static String convertHtmlTagsToEntities(String input) {
+        return StringEscapeUtils.escapeHtml4(input);
+    }
+
+    public static List<String> removeDuplicateFromList(List<String> list) {
+        Set<String> hs = new LinkedHashSet<>(list);
+        list.clear();
+        list.addAll(hs);
+        return list;
+
+    }
+
+    public static boolean validateTagLength(String tag) {
+        if (tag != null) {
+            return tag.length() <= TAG_MAX_LENGTH;
+        }
+        return false;
+    }
+
+    public static boolean validateTagListLength(int tagListLength) {
+        return tagListLength <= TAG_LIST_MAX_LENGTH;
+    }
+
+    public static boolean validateDescriptionLength(String description) {
+        return description.length() <= COMPONENT_DESCRIPTION_MAX_LENGTH;
+    }
+
+    public static boolean validateStringNotEmpty(String value) {
+        if ((value == null) || (value.isEmpty())) {
+            return false;
+        }
+        return true;
+    }
+
+    public static boolean validateListNotEmpty(List<?> list) {
+        if ((list == null) || (list.isEmpty())) {
+            return false;
+        }
+        return true;
+    }
+
+    public static boolean validateVendorName(String vendorName) {
+        return VENDOR_NAME_PATTERN.matcher(vendorName).matches();
+    }
+
+    public static boolean validateVendorNameLength(String vendorName) {
+        return vendorName.length() <= VENDOR_NAME_MAX_LENGTH;
+    }
+
+    public static boolean validateResourceVendorModelNumberLength(String resourceVendorModelNumber) {
+        return resourceVendorModelNumber.length() <= RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH;
+    }
+
+    public static boolean validateVendorRelease(String vendorRelease) {
+        return VENDOR_RELEASE_PATTERN.matcher(vendorRelease).matches();
+    }
+
+    public static boolean validateVendorReleaseLength(String vendorRelease) {
+        return vendorRelease.length() <= VENDOR_RELEASE_MAX_LENGTH;
+    }
+
+    public static boolean validateServiceTypeLength(String serviceType) {
+        return serviceType.length() <= SERVICE_TYPE_MAX_LENGTH;
+    }
+
+    public static boolean validateServiceRoleLength(String serviceRole) {
+        return serviceRole.length() <= SERVICE_ROLE_MAX_LENGTH;
+    }
+
+
+    public static boolean hasBeenCertified(String version) {
+        return NumberUtils.toDouble(version) >= 1;
+    }
+
+    public static String normaliseComponentName(String name) {
+        String[] split = splitComponentName(name);
+        StringBuffer sb = new StringBuffer();
+        for (String splitElement : split) {
+            sb.append(splitElement);
+        }
+        return sb.toString();
+
+    }
+
+    public static String normalizeComponentInstanceName(String name) {
+        String[] split = splitComponentInstanceName(name);
+        StringBuffer sb = new StringBuffer();
+        for (String splitElement : split) {
+            sb.append(splitElement);
+        }
+        return sb.toString();
+
+    }
+
+    private static String[] splitComponentName(String name) {
+        String normalizedName = name.toLowerCase();
+        normalizedName = COMPONENT_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" ");
         return normalizedName.split(" ");
-       }
+    }
 
-       private static String[] splitComponentInstanceName(String name) {
-               String normalizedName = name.toLowerCase();
-               normalizedName = COMPONENT_INCTANCE_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" ");
+    private static String[] splitComponentInstanceName(String name) {
+        String normalizedName = name.toLowerCase();
+        normalizedName = COMPONENT_INCTANCE_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" ");
         return normalizedName.split(" ");
-       }
-
-       public static String convertToSystemName(String name) {
-               String[] split = splitComponentName(name);
-               StringBuffer sb = new StringBuffer();
-               for (String splitElement : split) {
-                       String capitalize = WordUtils.capitalize(splitElement);
-                       sb.append(capitalize);
-               }
-               return sb.toString();
-       }
-
-       public static String normalizeFileName(String filename) {
-               // String[] split = filename.split(Pattern.quote(File.separator));
-               // String name = "";
-               //
-               // name = split[split.length - 1];
-               return cleanFileName(filename);
-
-       }
-
-       private static String cleanFileName(String str) {
-               str = CLEAN_FILENAME_PATTERN.matcher(str).replaceAll("");
-               str = normaliseWhitespace(str);
-               str = SPACE_PATTERN.matcher(str).replaceAll("-");
-               str = DASH_PATTERN.matcher(str).replaceAll("-");
-               str = StringUtils.strip(str, "-_ .");
-
-               return str;
-       }
-
-       public static boolean validateUrl(String url) {
-
-               UrlValidator urlValidator = new UrlValidator();
-               if (!urlValidator.isValid(url)) {
-                       return false;
-               }
-               if (NONE_UTF8_PATTERN.matcher(url).find()) {
-                       return false;
-               }
-
-               if (URL_INVALIDE_PATTERN.matcher(url).find()) {
-                       return false;
-               }
-               return true;
-
-       }
-
-       public static String cleanArtifactDisplayName(String strIn) {
-               String str = DASH_PATTERN.matcher(strIn).replaceAll("-");
-               str = UNDERSCORE_PATTERN.matcher(str).replaceAll("_");
-               str = PLUS_PATTERN.matcher(str).replaceAll("+");
-               str = normaliseWhitespace(str);
-               str = str.trim();
-               // str = str.replaceAll(" ", "");
-
-               return str;
-       }
-
-       public static String normalizeArtifactLabel(String strIn) {
-
-               String str = DASH_PATTERN.matcher(strIn).replaceAll("");
-               str = UNDERSCORE_PATTERN.matcher(str).replaceAll("");
-               str = PLUS_PATTERN.matcher(str).replaceAll("");
-               str = SPACE_PATTERN.matcher(str).replaceAll("");
-               str = DOT_PATTERN.matcher(str).replaceAll("");
-               str = str.toLowerCase();
-
-               return str;
-       }
-
-       public static boolean validateAdditionalInformationKeyName(String str) {
-               return ADDITIONAL_INFORMATION_KEY_PATTERN.matcher(str).matches();
-       }
-
-       public static String normalizeAdditionalInformation(String str) {
-               if (str != null) {
-                       str = DASH_PATTERN.matcher(str).replaceAll("-");
-                       str = UNDERSCORE_PATTERN.matcher(str).replaceAll("_");
-                       str = normaliseWhitespace(str);
-               }
-               return str;
-       }
-
-       public static boolean validateLength(String str, int length) {
-               if (str == null) {
-                       return true;
-               }
-               return str.length() <= length;
-       }
-
-       public static boolean validateConsumerName(String consumerName) {
-               return CONSUMER_NAME_PATTERN.matcher(consumerName).matches();
-       }
-
-       public static boolean isUTF8Str(String str) {
-               if (NONE_UTF8_PATTERN.matcher(str).find()) {
-                       return false;
-               }
-               return true;
-       }
-
-       public static boolean validateConsumerPassSalt(String consumerSalt) {
-               return CONSUMER_PASS_SALT_PATTERN.matcher(consumerSalt).matches();
-       }
-
-       public static boolean isFloatNumber(String number) {
-               return FLOAT_PATTERN.matcher(number).matches();
-       }
-
-       public static boolean validateCertifiedVersion(String version) {
-               return (version != null && CERTIFIED_VERSION_PATTERN.matcher(version).matches());
-       }
-
-       public static boolean validateMinorVersion(String version) {
-               return (version != null && MINOR_VERSION_PATTERN.matcher(version).matches());
-       }
-
-       public static String normaliseProductName(String name) {
-               String[] split = splitComponentName(PRODUCT_NAME_DELIMETER_PATTERN, name);
-               StringBuffer sb = new StringBuffer();
-               for (String splitElement : split) {
-                       sb.append(splitElement);
-               }
-               return sb.toString();
-
-       }
-
-       private static String[] splitComponentName(Pattern pattern, String name) {
-               String normalizedName = name.toLowerCase();
-               normalizedName = pattern.matcher(normalizedName).replaceAll(" ");
+    }
+
+    public static String convertToSystemName(String name) {
+        String[] split = splitComponentName(name);
+        StringBuffer sb = new StringBuffer();
+        for (String splitElement : split) {
+            String capitalize = WordUtils.capitalize(splitElement);
+            sb.append(capitalize);
+        }
+        return sb.toString();
+    }
+
+    public static String normalizeFileName(String filename) {
+        // String[] split = filename.split(Pattern.quote(File.separator));
+        // String name = "";
+        //
+        // name = split[split.length - 1];
+        return cleanFileName(filename);
+
+    }
+
+    private static String cleanFileName(String str) {
+        str = CLEAN_FILENAME_PATTERN.matcher(str).replaceAll("");
+        str = normaliseWhitespace(str);
+        str = SPACE_PATTERN.matcher(str).replaceAll("-");
+        str = DASH_PATTERN.matcher(str).replaceAll("-");
+        str = StringUtils.strip(str, "-_ .");
+
+        return str;
+    }
+
+    public static boolean validateUrl(String url) {
+
+        UrlValidator urlValidator = new UrlValidator();
+        if (!urlValidator.isValid(url)) {
+            return false;
+        }
+        if (NONE_UTF8_PATTERN.matcher(url).find()) {
+            return false;
+        }
+
+        if (URL_INVALIDE_PATTERN.matcher(url).find()) {
+            return false;
+        }
+        return true;
+
+    }
+
+    public static String cleanArtifactDisplayName(String strIn) {
+        String str = DASH_PATTERN.matcher(strIn).replaceAll("-");
+        str = UNDERSCORE_PATTERN.matcher(str).replaceAll("_");
+        str = PLUS_PATTERN.matcher(str).replaceAll("+");
+        str = normaliseWhitespace(str);
+        str = str.trim();
+        // str = str.replaceAll(" ", "");
+
+        return str;
+    }
+
+    public static String normalizeArtifactLabel(String strIn) {
+
+        String str = DASH_PATTERN.matcher(strIn).replaceAll("");
+        str = UNDERSCORE_PATTERN.matcher(str).replaceAll("");
+        str = PLUS_PATTERN.matcher(str).replaceAll("");
+        str = SPACE_PATTERN.matcher(str).replaceAll("");
+        str = DOT_PATTERN.matcher(str).replaceAll("");
+        str = str.toLowerCase();
+
+        return str;
+    }
+
+    public static boolean validateAdditionalInformationKeyName(String str) {
+        return ADDITIONAL_INFORMATION_KEY_PATTERN.matcher(str).matches();
+    }
+
+    public static String normalizeAdditionalInformation(String str) {
+        if (str != null) {
+            str = DASH_PATTERN.matcher(str).replaceAll("-");
+            str = UNDERSCORE_PATTERN.matcher(str).replaceAll("_");
+            str = normaliseWhitespace(str);
+        }
+        return str;
+    }
+
+    public static boolean validateLength(String str, int length) {
+        if (str == null) {
+            return true;
+        }
+        return str.length() <= length;
+    }
+
+    public static boolean validateConsumerName(String consumerName) {
+        return CONSUMER_NAME_PATTERN.matcher(consumerName).matches();
+    }
+
+    public static boolean isUTF8Str(String str) {
+        if (NONE_UTF8_PATTERN.matcher(str).find()) {
+            return false;
+        }
+        return true;
+    }
+
+    public static boolean validateConsumerPassSalt(String consumerSalt) {
+        return CONSUMER_PASS_SALT_PATTERN.matcher(consumerSalt).matches();
+    }
+
+    public static boolean isFloatNumber(String number) {
+        return FLOAT_PATTERN.matcher(number).matches();
+    }
+
+    public static boolean validateCertifiedVersion(String version) {
+        return (version != null && CERTIFIED_VERSION_PATTERN.matcher(version).matches());
+    }
+
+    public static boolean validateMinorVersion(String version) {
+        return (version != null && MINOR_VERSION_PATTERN.matcher(version).matches());
+    }
+
+    public static String normaliseProductName(String name) {
+        String[] split = splitComponentName(PRODUCT_NAME_DELIMETER_PATTERN, name);
+        StringBuffer sb = new StringBuffer();
+        for (String splitElement : split) {
+            sb.append(splitElement);
+        }
+        return sb.toString();
+
+    }
+
+    private static String[] splitComponentName(Pattern pattern, String name) {
+        String normalizedName = name.toLowerCase();
+        normalizedName = pattern.matcher(normalizedName).replaceAll(" ");
         return normalizedName.split(" ");
-       }
+    }
 
-       public static String removeHtmlTagsOnly(String htmlText) {
+    public static String removeHtmlTagsOnly(String htmlText) {
         return HtmlCleaner.stripHtml(htmlText, false);
-       }
+    }
 
-       public static boolean validateForwardingPathNamePattern(String forwardingPathName) {
-               return FORWARDING_PATH_NAME_PATTERN.matcher(forwardingPathName).matches();
-       }
+    public static boolean validateForwardingPathNamePattern(String forwardingPathName) {
+        return FORWARDING_PATH_NAME_PATTERN.matcher(forwardingPathName).matches();
+    }
 }