[hibernate-commits] Hibernate SVN: r10315 - trunk/Hibernate3/src/org/hibernate/util

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Aug 23 09:23:10 EDT 2006


Author: steve.ebersole at jboss.com
Date: 2006-08-23 09:22:54 -0400 (Wed, 23 Aug 2006)
New Revision: 10315

Modified:
   trunk/Hibernate3/src/org/hibernate/util/StringHelper.java
Log:
HHH-2022 : property names with leading underscores

Modified: trunk/Hibernate3/src/org/hibernate/util/StringHelper.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/util/StringHelper.java	2006-08-23 13:21:47 UTC (rev 10314)
+++ trunk/Hibernate3/src/org/hibernate/util/StringHelper.java	2006-08-23 13:22:54 UTC (rev 10315)
@@ -305,6 +305,10 @@
 		}
 	}
 
+	public static String generateAlias(String description) {
+		return generateAliasRoot(description) + '_';
+	}
+
 	/**
 	 * Generate a nice alias for the given class name or collection role
 	 * name and unique integer. Subclasses of Loader do <em>not</em> have 
@@ -317,11 +321,20 @@
 			'_';
 	}
 
+	/**
+	 * Generates a root alias by truncating the "root name" defined by
+	 * the incoming decription and removing/modifying any non-valid
+	 * alias characters.
+	 *
+	 * @param description The root name from which to generate a root alias.
+	 * @return The generated root alias.
+	 */
 	private static String generateAliasRoot(String description) {
-		final String result = truncate( unqualifyEntityName(description), ALIAS_TRUNCATE_LENGTH )
+		String result = truncate( unqualifyEntityName(description), ALIAS_TRUNCATE_LENGTH )
 				.toLowerCase()
 		        .replace( '/', '_' ) // entityNames may now include slashes for the representations
 				.replace( '$', '_' ); //classname may be an inner class
+		result = cleanAlias( result );
 		if ( Character.isDigit( result.charAt(result.length()-1) ) ) {
 			return result + "x"; //ick!
 		}
@@ -330,6 +343,28 @@
 		}
 	}
 
+	/**
+	 * Clean the generated alias by removing any non-alpha characters from the
+	 * beginning.
+	 *
+	 * @param alias The generated alias to be cleaned.
+	 * @return The cleaned alias, stripped of any leading non-alpha characters.
+	 */
+	private static String cleanAlias(String alias) {
+		char[] chars = alias.toCharArray();
+		// short cut check...
+		if ( !Character.isLetter( chars[0] ) ) {
+			for ( int i = 1; i < chars.length; i++ ) {
+				// as soon as we encounter our first letter, return the substring
+				// from that position
+				if ( Character.isLetter( chars[i] ) ) {
+					return alias.substring( i );
+				}
+			}
+		}
+		return alias;
+	}
+
 	public static String unqualifyEntityName(String entityName) {
 		String result = unqualify(entityName);
 		int slashPos = result.indexOf( '/' );
@@ -338,10 +373,6 @@
 		}
 		return result;
 	}
-
-	public static String generateAlias(String description) {
-		return generateAliasRoot(description) + '_';
-	}
 	
 	public static String toUpperCase(String str) {
 		return str==null ? null : str.toUpperCase();




More information about the hibernate-commits mailing list