1 package com.pentila.entSavoie.utils;
3 import java.text.Normalizer;
4 import java.util.regex.Pattern;
6 import com.liferay.portal.kernel.util.CharPool;
7 import com.liferay.portal.kernel.util.Validator;
9 public class FileNameUtil {
11 // Validator for name/title
12 static char[] INVALID_CHARACTERS = new char[] {
13 CharPool.AMPERSAND, CharPool.APOSTROPHE, CharPool.AT,
14 CharPool.BACK_SLASH, CharPool.CLOSE_BRACKET, CharPool.CLOSE_CURLY_BRACE,
15 CharPool.COLON, CharPool.COMMA, CharPool.EQUAL, CharPool.GREATER_THAN,
16 CharPool.FORWARD_SLASH, CharPool.LESS_THAN, CharPool.NEW_LINE,
17 CharPool.OPEN_BRACKET, CharPool.OPEN_CURLY_BRACE, CharPool.PERCENT,
18 CharPool.PIPE, CharPool.PLUS, CharPool.POUND, CharPool.QUESTION,
19 CharPool.QUOTE, CharPool.RETURN, CharPool.SEMICOLON, CharPool.SLASH,
20 CharPool.STAR, CharPool.TILDE, '\u00b0' // This last one is the degree sign
23 public static String replaceAccent(String str) {
24 String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD);
25 Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
26 return pattern.matcher(nfdNormalizedString).replaceAll("");
29 public static String getValidName(String str) {
30 // valid le nom et remplace les caractere interdits par des '_' au cas ou
32 if (Validator.isNull(str)) {
36 char[] wordCharArray = str.toCharArray();
38 boolean invalidFlag = false;
39 boolean firstChar = true;
40 for (char c : wordCharArray) {
42 for (char invalidChar : INVALID_CHARACTERS) {
43 if (c == invalidChar) {
49 result += (firstChar && invalidFlag ? "" : (invalidFlag?"_" : c));
50 firstChar = firstChar && invalidFlag;
61 public static String getValidName(String str, boolean replaceSpaces, boolean replaceAccent){
62 str = getValidName(str);
64 str = replaceAccent(str.trim().replaceAll("\\s+", "_"));
67 str = replaceAccent(str);
69 // Check that the file name does not end with '_' characters
70 while (str.endsWith("_")) {
71 str = str.substring(0, str.length() - 1);