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
125
126
127
128 public String dbName2javaCteName(String dbName) {
129 return createJavaCteName(createJavaAttName(dbName));
130 }
131
132 public String class2attribute(String className) {
133
134
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 }