/** * Copyright (C) 2004 Orbeon, Inc. * * This program 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 program 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. * * The full text of the license is available at http://www.gnu.org/copyleft/lesser.html */ package org.orbeon.oxf.xml; /** * Defines a mapping from JavaBean property names to XML element names. * * <p>If the capitalization changes from lowercase to uppercase, a dash is * inserted before the first uppercase character. If it changes from * uppercase to lower case, a dash is inserted before the last uppercase * character. * * <p><b>Examples:</b> * <pre> * Java Name XML Name SQL Name * --------- -------- -------- * SOLineNumber so-line-number SO_LINE_NUMBER * CHLPOAlertId chlpo-alert-id CHLPO_ALERT_ID * </pre> */ public class NamingConvention { public static String javaToXMLName(String javaName) { // Strip "package name". int lastDot = javaName.lastIndexOf('.'); if (lastDot != -1 && lastDot + 1 < javaName.length()) javaName = javaName.substring(lastDot + 1); // Strip "inner class prefix". int lastDollar = javaName.lastIndexOf('$'); if (lastDollar != -1) javaName = javaName.substring(lastDollar + 1); StringBuilder result = new StringBuilder(); for (int i = 0; i < javaName.length(); i++) { // ASTWhen switch from lower to upper, add a dash before upper. if (i > 0 && Character.isLowerCase(javaName.charAt(i - 1)) && Character.isUpperCase(javaName.charAt(i))) result.append('-'); // ASTWhen switch from upper to lower, add dash before upper. else if (i > 0 && i < javaName.length() - 1 && Character.isUpperCase(javaName.charAt(i)) && Character.isLowerCase(javaName.charAt(i + 1))) result.append('-'); result.append(Character.toLowerCase(javaName.charAt(i))); } return result.toString(); } }