1 /*
2 * Copyright 2007 Joachim Grueneis
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.castor.xml;
17
18 import java.lang.reflect.Field;
19 import java.lang.reflect.Method;
20
21 /**
22 * JavaNaming is a service which collects all methods that are related to
23 * create (modify) Java names. E.g. convert from XML name to Java name,
24 * get a Java member name or such. These rules can be exchanged by a different
25 * implementation to get a different naming style for e.g. JAXB.
26 *
27 * @author <a href="mailto:jgrueneis_at_gmail_dot_com">Joachim Grueneis</a>
28 * @version $Id$
29 */
30 public interface JavaNaming {
31 /** Add methods start with: add. */
32 public static final String METHOD_PREFIX_ADD = "add";
33
34 /** Get methods start with: get. */
35 public static final String METHOD_PREFIX_GET = "get";
36
37 /** Is methods start with: is. */
38 public static final String METHOD_PREFIX_IS = "is";
39
40 /** Set methods start with: set. */
41 public static final String METHOD_PREFIX_SET = "set";
42
43 /** Create methods start with: create. */
44 public static final String METHOD_PREFIX_CREATE = "create";
45
46 /** The underscore field prefix. */
47 public static final char FIELD_UNDERSCORE_PREFIX = '_';
48
49 /**
50 * Returns true if the given String is a Java keyword which will cause a
51 * problem when used as a variable name.
52 *
53 * @param name The name to check.
54 * @return true if it is a keyword.
55 */
56 boolean isKeyword(String name);
57
58 /**
59 * Returns true if the given String matches the production of a valid Java
60 * identifier.
61 *
62 * @param string The String to check the production of.
63 * @return true if the given String matches the production of a valid Java
64 * name, otherwise false.
65 */
66 boolean isValidJavaIdentifier(String string);
67
68 /**
69 * Cuts away a leading namespace prefix (if there is one in place).
70 *
71 * @param name The XML name to convert to a Java name.
72 * @return A name which follows Java naming conventions.
73 */
74 String toJavaClassName(String name);
75
76 /**
77 * Appends a leading '_' and converts the given name to a java name.
78 *
79 * @param name the XML name to convert.
80 * @return A Java member name starting with a leading '_'.
81 */
82 String toJavaMemberName(String name);
83
84 /**
85 * Appends a leading '_' and converts the given name to a java name.
86 *
87 * @param name The XML name to convert.
88 * @param useKeywordSubstitutions Set to true to turn on keyword substitution.
89 * @return A Java member name starting with a leading '_'.
90 */
91 String toJavaMemberName(String name, boolean useKeywordSubstitutions);
92
93 /**
94 * Checks if the given package name is valid or not. Empty package names
95 * are considered valid!
96 *
97 * @param packageName Name of package as String with periods.
98 * @return true if package name is valid.
99 */
100 boolean isValidPackageName(String packageName);
101
102 /**
103 * Converts the given Package name to it's corresponding Path. The path will
104 * be a relative path.
105 *
106 * @param packageName The package name to convert.
107 * @return A String containing the resulting patch.
108 */
109 String packageToPath(String packageName);
110
111 /**
112 * Qualifies the given <code>fileName</code> with the given
113 * <code>packageName</code> and returns the resulting file path.<br>
114 * If <code>packageName</code> is <code>null</code> or a zero-length
115 * String, this method will return <code>fileName</code>.<br>
116 *
117 * @param fileName The file name to be qualified.
118 * @param packageName The package name to be used for qualifying.
119 * @return The qualified file path.
120 */
121 String getQualifiedFileName(String fileName, String packageName);
122
123 /**
124 * Gets the class name without package part.
125 *
126 * @param clazz The class to retrieve the name from
127 * @return the class name without package part or null
128 */
129 String getClassName(Class clazz);
130
131 /**
132 * Gets the package name of the given class name.
133 *
134 * @param className The class name to retrieve the package name from.
135 * @return The package name or the empty String if <code>className</code>
136 * is <code>null</code> or does not contain a package.
137 */
138 String getPackageName(String className);
139
140 /**
141 * Extracts the filed name part from the methods name. Mostly it cuts
142 * away the method prefix.
143 *
144 * @param method The Method to process.
145 * @return The extracted field name.
146 */
147 String extractFieldNameFromMethod(Method method);
148
149 /**
150 * Extracts the field name part from the Field. Mostly it cuts away
151 * prefixes like '_'.
152 *
153 * @param field the Field to process
154 * @return The extracted field name.
155 */
156 String extractFieldNameFromField(Field field);
157
158 /**
159 * Checks if the given method is a set method.
160 *
161 * @param method The Method to check
162 * @return true if it is a set method
163 */
164 boolean isSetMethod(Method method);
165 /**
166 * Checks if the given method is a create method.
167 *
168 * @param method The Method to check.
169 * @return true if it is a create method.
170 */
171 boolean isCreateMethod(Method method);
172
173 /**
174 * Checks if the given method is a get method.
175 *
176 * @param method The Method to check.
177 * @return true if it is a get method.
178 */
179 boolean isGetMethod(Method method);
180
181 /**
182 * Checks if the given method is an is method.
183 *
184 * @param method The Method to check.
185 * @return true if it is an is method.
186 */
187 boolean isIsMethod(Method method);
188
189 /**
190 * Checks if the given method is an add method.
191 *
192 * @param method The Method to check.
193 * @return true if it is an add method.
194 */
195 boolean isAddMethod(Method method);
196 /**
197 * Generates the name of an add method for the given field name.
198 *
199 * @param fieldName The field name to generate a method name for.
200 * @return The generated add method name.
201 */
202 String getAddMethodNameForField(String fieldName);
203
204 /**
205 * Generates the name of a set method for the given field name.
206 *
207 * @param fieldName The field name to generate a method name for.
208 * @return The generated set method name.
209 */
210 String getSetMethodNameForField(String fieldName);
211
212 /**
213 * Generates the name of a get method for the given field name.
214 *
215 * @param fieldName The field name to generate a method name for.
216 * @return The generated get method name.
217 */
218 String getGetMethodNameForField(String fieldName);
219
220 /**
221 * Generates the name of an is method for the given field name.
222 *
223 * @param fieldName The field name to generate a method name for.
224 * @return The generated is method name.
225 */
226 String getIsMethodNameForField(String fieldName);
227
228 /**
229 * Generates the name of a create method for the given field name.
230 *
231 * @param fieldName The field name to generate a method name for.
232 * @return The generated create method name.
233 */
234 String getCreateMethodNameForField(String fieldName);
235 }