package com.softwaremill.common.util; import java.nio.charset.Charset; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.CharacterIterator; import java.text.StringCharacterIterator; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * @author Adam Warski (adam at warski dot org) */ public class RichString { private final String wrapped; public RichString(String wrapped) { this.wrapped = wrapped; } public static String generateRandom(int length) { StringBuffer sb = new StringBuffer(); Random r = new Random(); for (int i = 0; i < length; i++) { sb.append((char) (r.nextInt(25) + 65)); // A - Z } return sb.toString(); } public String encodeAsPassword() { if (wrapped == null) { return null; } try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(wrapped.getBytes(Charset.defaultCharset())); return new RichHexString(md.digest()).unwrap(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } public String escapeForXml() { final StringBuilder result = new StringBuilder(); final StringCharacterIterator iterator = new StringCharacterIterator(wrapped); char character = iterator.current(); while (character != CharacterIterator.DONE) { if (character == '<') { result.append("<"); } else if (character == '>') { result.append(">"); } else if (character == '\"') { result.append("""); } else if (character == '\'') { result.append("'"); } else if (character == '&') { result.append("&"); } else { //the char is not a special one //add it to the result as is result.append(character); } character = iterator.next(); } return result.toString(); } /** * @return Splits the wrapped string using the comma and returns a list of non-empty strings that are the * result of the split. */ public List<String> splitByCommaGetNonEmpty() { List<String> result = new ArrayList<String>(); for (String ignoredProperty : wrapped.split("[,]")) { if (!"".equals(ignoredProperty)) { result.add(ignoredProperty); } } return result; } public String replacePolishChars() { char[] in = wrapped.toCharArray(); char[] out = new char[in.length]; int i = 0; for (char c : in) { char replaced = in[i]; if (c >= '\u0080') { // optimization switch (c) { case 'ą': replaced = 'a'; break; case 'ć': replaced = 'c'; break; case 'ę': replaced = 'e'; break; case 'ł': replaced = 'l'; break; case 'ń': replaced = 'n'; break; case 'ó': replaced = 'o'; break; case 'ś': replaced = 's'; break; case 'ź': replaced = 'z'; break; case 'ż': replaced = 'z'; break; case 'Ą': replaced = 'A'; break; case 'Ć': replaced = 'C'; break; case 'Ę': replaced = 'E'; break; case 'Ł': replaced = 'L'; break; case 'Ń': replaced = 'N'; break; case 'Ó': replaced = 'O'; break; case 'Ś': replaced = 'S'; break; case 'Ż': replaced = 'Z'; break; case 'Ź': replaced = 'Z'; break; default: } } out[i++] = replaced; } return new String(out); } }