01: /**
02: * Copyright 2006 Webmedia Group Ltd.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
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: **/package org.araneaframework.backend.list.helper.naming;
16:
17: import java.util.HashMap;
18: import java.util.Map;
19:
20: /**
21: * Improved naming conventions between list fields and database columns
22: * which enables to defined custom prefixes for database column names.
23: * <p>
24: * If one is using multiple tables (with aliases) in one SELECT,
25: * {@link #addPrefix(String, String)} should be called to transform list field names
26: * correspondingly into database column names.
27: * </p>
28: * <p>
29: * Field names are transformed into database column names as following:<br/>
30: * <ul>
31: * <li>The full name is split into prefix and suffix (following to the last dot).
32: * <li>If {@link #addPrefix(String, String)} has been called with the current prefix
33: * it is replaced with the corresponding String (table alias).
34: * <li>Otherwise all dots in the prefix and suffix are converted into underscores.
35: * <li>Before each upper case letter followed by lower case an underscore is inserted.
36: * </ul>
37: * Field names are transformed into database column aliases as following:<br/><br/>
38: * <ul>
39: * <li>All dots are converted into underscores.
40: * <li>Before each upper case letter followed by lower case an underscore is inserted.
41: * </ul>
42: * </p>
43: *
44: * @see StandardNamingStrategy
45: *
46: * @author Rein Raudjärv
47: *
48: * @since 1.1
49: */
50: public class PrefixMapNamingStrategy extends StandardNamingStrategy {
51:
52: /** Field name prefix --> Database column name prefix */
53: private Map customPrefixes = new HashMap();
54:
55: /**
56: * Add a mapping between a prefix in <b>field name</b>
57: * and a prefix in <b>database column name</b> (usually a table alias).
58: * <p>
59: * E.g.
60: * addPrefix("location", "L")
61: * addPrefix("mother.mother", "MM")
62: *
63: * @param fieldNamePrefix prefix of the field name (can also be <code>null</code>).
64: * @param columnNamePrefix prefix of the database column name (can also be <code>null</code>).
65: */
66: public PrefixMapNamingStrategy addPrefix(String fieldNamePrefix,
67: String columnNamePrefix) {
68: customPrefixes.put(fieldNamePrefix, columnNamePrefix);
69: return this ;
70: }
71:
72: protected String resolvePrefix(String fieldNamePrefix) {
73: if (customPrefixes.containsKey(fieldNamePrefix)) {
74: return (String) customPrefixes.get(fieldNamePrefix);
75: }
76: return addUnderscores(fieldNamePrefix);
77: }
78:
79: }
|