All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.feilong.lib.json.util.JavaIdentifierTransformer Maven / Gradle / Ivy

Go to download

feilong is a suite of core and expanded libraries that include utility classes, http, excel,cvs, io classes, and much much more.

There is a newer version: 4.3.0
Show newest version
/*
 * Copyright 2002-2009 the original author or authors.
 *
 * 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.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.feilong.lib.json.util;

import com.feilong.lib.json.JSONException;
import com.feilong.lib.lang3.StringUtils;

/**
 * Transforms a string into a valid Java identifier.
* There are five predefined strategies: *
    *
  • NOOP: does not perform transformation.
  • *
  • CAMEL_CASE: follows the camel case convention, deletes non * JavaIndentifierPart chars.
  • *
  • UNDERSCORE: transform whitespace and non JavaIdentifierPart chars to * '_'.
  • *
  • WHITESPACE: deletes whitespace and non JavaIdentifierPart chars.
  • *
  • STRICT: always throws a JSONException, does not perform transformation.
  • *
* * @author Andres Almiray */ public abstract class JavaIdentifierTransformer{ /** CamelCase transformer 'camel case' => 'camelCase' */ public static final JavaIdentifierTransformer CAMEL_CASE = new CamelCaseJavaIdentifierTransformer(); /** Noop transformer '@invalid' => '@invalid' */ public static final JavaIdentifierTransformer NOOP = new NoopJavaIdentifierTransformer(); /** Strict transformer '@invalid' => JSONException */ public static final JavaIdentifierTransformer STRICT = new StrictJavaIdentifierTransformer(); /** Underscore transformer 'under score' => 'under_score' */ public static final JavaIdentifierTransformer UNDERSCORE = new UnderscoreJavaIdentifierTransformer(); /** Whitespace transformer 'white space' => 'whitespace' */ public static final JavaIdentifierTransformer WHITESPACE = new WhiteSpaceJavaIdentifierTransformer(); //--------------------------------------------------------------- public abstract String transformToJavaIdentifier(String str); /** * Removes all non JavaIdentifier chars from the start of the string. * * @throws JSONException * if the resulting string has zero length. */ protected final static String shaveOffNonJavaIdentifierStartChars(String str){ String str2 = str; // shave off first char if not valid boolean ready = false; while (!ready){ if (!Character.isJavaIdentifierStart(str2.charAt(0))){ str2 = str2.substring(1); if (str2.length() == 0){ throw new JSONException("Can't convert '" + str + "' to a valid Java identifier"); } }else{ ready = true; } } return str2; } private static final class CamelCaseJavaIdentifierTransformer extends JavaIdentifierTransformer{ @Override public String transformToJavaIdentifier(String str){ if (str == null){ return null; } String str2 = shaveOffNonJavaIdentifierStartChars(str); char[] chars = str2.toCharArray(); int pos = 0; StringBuffer buf = new StringBuffer(); boolean toUpperCaseNextChar = false; while (pos < chars.length){ if (!Character.isJavaIdentifierPart(chars[pos]) || Character.isWhitespace(chars[pos])){ toUpperCaseNextChar = true; }else{ if (toUpperCaseNextChar){ buf.append(Character.toUpperCase(chars[pos])); toUpperCaseNextChar = false; }else{ buf.append(chars[pos]); } } pos++; } return buf.toString(); } } private static final class NoopJavaIdentifierTransformer extends JavaIdentifierTransformer{ @Override public String transformToJavaIdentifier(String str){ return str; } } private static final class StrictJavaIdentifierTransformer extends JavaIdentifierTransformer{ @Override public String transformToJavaIdentifier(String str){ throw new JSONException("'" + str + "' is not a valid Java identifier."); } } private static final class UnderscoreJavaIdentifierTransformer extends JavaIdentifierTransformer{ @Override public String transformToJavaIdentifier(String str){ if (str == null){ return null; } String str2 = shaveOffNonJavaIdentifierStartChars(str); char[] chars = str2.toCharArray(); int pos = 0; StringBuffer buf = new StringBuffer(); boolean toUnderScorePreviousChar = false; while (pos < chars.length){ if (!Character.isJavaIdentifierPart(chars[pos]) || Character.isWhitespace(chars[pos])){ toUnderScorePreviousChar = true; }else{ if (toUnderScorePreviousChar){ buf.append("_"); toUnderScorePreviousChar = false; } buf.append(chars[pos]); } pos++; } if (buf.charAt(buf.length() - 1) == '_'){ buf.deleteCharAt(buf.length() - 1); } return buf.toString(); } } private static final class WhiteSpaceJavaIdentifierTransformer extends JavaIdentifierTransformer{ @Override public String transformToJavaIdentifier(String str){ if (str == null){ return null; } String str2 = shaveOffNonJavaIdentifierStartChars(str); str2 = StringUtils.deleteWhitespace(str2); char[] chars = str2.toCharArray(); int pos = 0; StringBuffer buf = new StringBuffer(); while (pos < chars.length){ if (Character.isJavaIdentifierPart(chars[pos])){ buf.append(chars[pos]); } pos++; } return buf.toString(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy