/* * Copyright (c) 2009-2015 * IT-Consulting Stephan Schloepke (http://www.schloepke.de/) * klemm software consulting Mirko Klemm (http://www.klemm-scs.com/) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package org.jbasics.utilities; import org.jbasics.exception.DelegatedException; import org.jbasics.pattern.transpose.Transposer; import org.jbasics.types.builders.SetBuilder; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Set; @SuppressWarnings("nls") public final class StringTransposers { public static final Set<String> JAVA_KEYWORD_LIST = new SetBuilder<String>() .addAll("abstract", "continue", "for", "new", "switch", "assert", "default", "goto", "package", "synchronized", "boolean", "do", "if", "private", "this", "break", "double", "implements", "protected", "throw", "byte", "else", "import", "public", "throws", "case", "enum", "instanceof", "return", "transient", "catch", "extends", "int", "short", "try", "char", "final", "interface", "static", "void", "class", "finally", "long", "strictfp", "volatile", "const", "float", "native", "super", "while").build(); public static final Transposer<String, String> TO_LOWERCASE_TRANSPOSER = new Transposer<String, String>() { @Override public String transpose(final String input) { if (input == null) { return null; } else { return input.toLowerCase(); } } }; public static final Transposer<String, String> TO_UPERCASE_TRANSPOSER = new Transposer<String, String>() { @Override public String transpose(final String input) { if (input == null) { return null; } else { return input.toUpperCase(); } } }; private static final String URL_CODEC_ENCODING = "UTF-8"; public static final Transposer<String, String> URL_ENCODE_TRANSPOSER = new Transposer<String, String>() { @Override public String transpose(final String input) { try { if (input == null) { return null; } else { return URLEncoder.encode(input, StringTransposers.URL_CODEC_ENCODING); } } catch (final UnsupportedEncodingException e) { throw DelegatedException.delegate(e); } } }; public static final Transposer<String, String> URL_DECODE_TRANSPOSER = new Transposer<String, String>() { @Override public String transpose(final String input) { try { if (input == null) { return null; } else { return URLDecoder.decode(input, StringTransposers.URL_CODEC_ENCODING); } } catch (final UnsupportedEncodingException e) { throw DelegatedException.delegate(e); } } }; private static final char UNDERSCORE = '_'; public static final Transposer<String, String> JAVA_IDENTIFIER_TRANSPOSER = new Transposer<String, String>() { @Override public String transpose(final String input) { if (input == null) { return null; } else { final StringBuilder temp = new StringBuilder(input.length()); for (int i = 0; i < input.length(); i++) { final char c = input.charAt(i); temp.append(Character.isJavaIdentifierPart(c) ? c : StringTransposers.UNDERSCORE); } if (!Character.isJavaIdentifierStart(temp.charAt(0))) { temp.insert(0, StringTransposers.UNDERSCORE); } return temp.toString(); } } }; public static final Transposer<String, String> JAVA_KEYWORD_FILTER_TRANSPOSER = new Transposer<String, String>() { @Override public String transpose(final String input) { if (StringTransposers.JAVA_KEYWORD_LIST.contains(input)) { return input + StringTransposers.UNDERSCORE; } else { return input; } } }; }