/** * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.portal.pom.config; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> * @version $Revision$ */ public class Utils { public static final String USER_NAME_VALIDATOR_REGEX = "^[\\p{L}][\\p{L}._\\-\\d]+$"; public static final String FIRST_CHARACTER_NAME_VALIDATOR_REGEX = "^[\\p{L}][\\p{L}._'\\- \\d]+$"; /** * todo: move to common module * * @param separator * @param strings * @return */ public static String join(String separator, String... strings) { if (strings == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < strings.length; i++) { Object o = strings[i]; if (i > 0) { sb.append(separator); } sb.append(o); } return sb.toString(); } public static String join(String separator, List<String> strings) { if (strings == null) { return null; } String[] array = strings.toArray(new String[strings.size()]); return join(separator, array); } /** * todo: move to common module * * @param separator * @param s * @return */ public static String[] split(String separator, String s) { if (s == null) { return null; } return split(s, 0, 0, separator); } public static <E> List<E> safeImmutableList(E... list) { if (list == null || list.length == 0) { return Collections.emptyList(); } else if (list.length == 1) { E e = list[0]; return Collections.singletonList(e); } else { List<E> copy = Arrays.asList(list); return Collections.unmodifiableList(copy); } } public static <E> List<E> safeImmutableList(List<E> list) { if (list == null || list.size() == 0) { return Collections.emptyList(); } else if (list.size() == 1) { E e = list.get(0); return Collections.singletonList(e); } else { ArrayList<E> copy = new ArrayList<E>(list); return Collections.unmodifiableList(copy); } } public static <K, V> Map<K, V> safeImmutableMap(Map<K, V> map) { if (map == null || map.size() == 0) { return Collections.emptyMap(); } else if (map.size() == 1) { Map.Entry<K, V> entry = map.entrySet().iterator().next(); return Collections.singletonMap(entry.getKey(), entry.getValue()); } else { Map<K, V> copy = new HashMap<K, V>(map); return Collections.unmodifiableMap(copy); } } /** * Splits a string according to a string separator. * <p/> * The provided index defines the beginning of the splitted chunks in the returned array. The values from the beginning up * to the value index - 1 will be null values. * * @param separator the string separator * @param index the index to which the chunks begin * @param s the string to split * @return an array containing the splitted chunks plus extra leading pad */ public static String[] split(String separator, int index, String s) { return split(s, 0, index, separator); } private static String[] split(String s, int fromIndex, int index, String separator) { int toIndex = s.indexOf(separator, fromIndex); String[] chunks; if (toIndex == -1) { chunks = new String[index + 1]; toIndex = s.length(); } else { chunks = split(s, toIndex + separator.length(), index + 1, separator); } chunks[index] = s.substring(fromIndex, toIndex); return chunks; } /** * Escape the provided string for being usable as a query litteral. * * @param s the string to escpae * @return the escaped result */ public static String queryEscape(String s) { StringBuilder buffer = new StringBuilder(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); if (ch == '%' || ch == '"' || ch == '_' || ch == '\\') { buffer.append('\\').append(ch); } else if (ch == '\'') { buffer.append("''"); } else { buffer.append(ch); } } return buffer.toString(); } }