View Javadoc

1   package salto.tool.jdo.util;
2   
3   /***
4    * Interface permettant de créer les noms des attributs des composants Plusieurs
5    * algorithmes sont définies à partir des règles de nommage les plus courantes
6    * des bases de données Date de création : (20/10/01 05:17:16)
7    * 
8    * @author : E. Loiez
9    */
10  public class DoNameCreator implements IDoNameCreator {
11  
12  	private static final String DEFAULT_PREFIX = "Do";
13  
14  	private static final int DEFAULT_NAME_OFFSET = 0;
15  
16  	private String prefix = DEFAULT_PREFIX;
17  
18  	private int defaultNameOffset = DEFAULT_NAME_OFFSET;
19  
20  	public int getDefaultNameOffset() {
21  		return defaultNameOffset;
22  	}
23  
24  	public void setDefaultNameOffset(int defaultNameOffset) {
25  		this.defaultNameOffset = defaultNameOffset;
26  	}
27  
28  	public DoNameCreator() {
29  	}
30  
31  	public String getPrefix() {
32  		return prefix;
33  	}
34  
35  	public void setPrefix(String prefix) {
36  		this.prefix = prefix;
37  	}
38  
39  	/***
40  	 * Cr�ation du nom d'une constance � partir du nom d'un attribut
41  	 * L'algorithme est bas� sur les r�gles de nommage java: Les constantes
42  	 * sont en majuscules Les diff�rents mots sont s�par�s par des '_'
43  	 * Date de cr�ation : (7/02/01 17:55:57)
44  	 * 
45  	 * @param javaName
46  	 *            java.lang.String nom de l'attribut java
47  	 */
48  
49  	public String createJavaCteName(String javaName) {
50  		int len = javaName.length();
51  		char[] cteName = new char[len * 2];
52  		int offset = 0;
53  		char c;
54  		for (int i = 0; i < len; i++) {
55  			c = javaName.charAt(i);
56  			if (Character.isUpperCase(c)) {
57  				cteName[i + offset] = '_';
58  				cteName[i + 1 + offset] = c;
59  				offset++;
60  			} else {
61  				cteName[i + offset] = Character.toUpperCase(c);
62  			}
63  		}
64  		return new String(cteName, 0, len + offset);
65  	}
66  
67  	public String createJavaAttName(String sqlName) {
68  
69  		if (sqlName.indexOf("_") > 0 || sqlName.toUpperCase().equals(sqlName) || sqlName.toLowerCase().equals(sqlName)) {
70  
71  			int len = sqlName.length();
72  			int offset = 0;
73  			char c;
74  			char[] javaName = new char[len];
75  			for (int i = (len - 1); i >= 0; i--) {
76  				c = sqlName.charAt(i);
77  				if (c == '_' && i + 1 + offset < len) {
78  					javaName[i + 1 + offset] = Character.toUpperCase(javaName[i + 1 + offset]);
79  					offset++;
80  				} else {
81  					javaName[i + offset] = Character.toLowerCase(c);
82  				}
83  			}
84  			return new String(javaName, offset, len - offset);
85  		}
86  		return class2attribute(sqlName);
87  	}
88  
89  	/***
90  	 * Retourne le nom d'un do en fonction du nom d'une table
91  	 * 
92  	 * @return String
93  	 */
94  	public String createDoName(String tableName) {
95  
96  		return createDoName(tableName, prefix, defaultNameOffset);
97  	}
98  
99  	public String createDoName(String tableName, String prefix, int nameOffset) {
100 
101 		if (tableName.length() > nameOffset)
102 			tableName = tableName.substring(nameOffset);
103 
104 		int len = tableName.length();
105 		int offset = 0;
106 		char c;
107 		char[] javaName = new char[len];
108 
109 		for (int i = (len - 1); i >= 0; i--) {
110 			c = tableName.charAt(i);
111 			if (c == '_') {
112 				javaName[i + 1 + offset] = Character.toUpperCase(javaName[i + 1 + offset]);
113 				offset++;
114 			} else {
115 				javaName[i + offset] = Character.toLowerCase(c);
116 			}
117 		}
118 		javaName[offset] = Character.toUpperCase(javaName[offset]);
119 
120 		return prefix + new String(javaName, offset, len - offset);
121 	}
122 
123 	/*
124 	 * (non-Javadoc)
125 	 * 
126 	 * @see salto.tool.jdo.util.IDoNameCreator#dbName2javaCteName(java.lang.String)
127 	 */
128 	public String dbName2javaCteName(String dbName) {
129 		return createJavaCteName(createJavaAttName(dbName));
130 	}
131 
132 	public String class2attribute(String className) {
133 		/*
134 		 * if (className == null) return null;
135 		 */
136 		if (className.length() > 1) {
137 			return className.substring(0, 1).toLowerCase() + className.substring(1);
138 		} else
139 			return className.toLowerCase();
140 	}
141 
142 	public String attribute2class(String attributeName) {
143 		if (attributeName == null)
144 			return null;
145 		return attributeName.substring(0, 1).toUpperCase() + attributeName.substring(1);
146 	}
147 }