Skip to main content
summaryrefslogtreecommitdiffstats
blob: ce93f829e3dbff543698d0ce6f38fd47bd02b229 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package org.eclipse.jpt.gen.internal2;

import org.eclipse.jpt.db.Column;
import org.eclipse.jpt.db.ForeignKey;
import org.eclipse.jpt.db.Table;


/**
 * Provide a pluggable way to determine whether and how the entity generator
 * prints the names of various database objects.
 */
public interface DatabaseAnnotationNameBuilder {

	/**
	 * Given the name of an entity and the table to which it is mapped,
	 * build and return a string to be used as the value for the entity's
	 * Table annotation's 'name' element. Return null if the entity
	 * maps to the table by default.
	 */
	String buildTableAnnotationName(String entityName, Table table);

	/**
	 * Given the name of an attribute (field or property) and the column
	 * to which it is mapped,
	 * build and return a string to be used as the value for the attribute's
	 * Column annotation's 'name' element. Return null if the attribute
	 * maps to the column by default.
	 */
	String buildColumnAnnotationName(String attributeName, Column column);

	/**
	 * Given the name of an attribute (field or property) and the
	 * many-to-one or many-to-many foreign key to which it is mapped,
	 * build and return a string to be used as the value for the attribute's
	 * JoinColumn annotation's 'name' element. Return null if the attribute
	 * maps to the join column by default.
	 * The specified foreign key consists of a single column pair whose
	 * referenced column is the single-column primary key of the foreign
	 * key's referenced table.
	 */
	String buildJoinColumnAnnotationName(String attributeName, ForeignKey foreignKey);

	/**
	 * Build and return a string to be used as the value for a JoinColumn
	 * annotation's 'name' or 'referencedColumnName' element.
	 * This is called for many-to-one and many-to-many mappings when
	 * the default join column name and/or referenced column name are/is
	 * not applicable.
	 * @see buildJoinColumnAnnotationName(String, ForeignKey)
	 */
	String buildJoinColumnAnnotationName(Column column);

	/**
	 * Build and return a string to be used as the value for a JoinTable
	 * annotation's 'name' element.
	 * This is called for many-to-many mappings when the default
	 * join table name is not applicable.
	 */
	String buildJoinTableAnnotationName(Table table);


	/**
	 * The default implementation simple returns the database object's name,
	 * unaltered.
	 */
	final class Default implements DatabaseAnnotationNameBuilder {
		public static final DatabaseAnnotationNameBuilder INSTANCE = new Default();
		public static DatabaseAnnotationNameBuilder instance() {
			return INSTANCE;
		}
		// ensure single instance
		private Default() {
			super();
		}
		public String buildTableAnnotationName(String entityName, Table table) {
			return table.getName();
		}
		public String buildColumnAnnotationName(String attributeName, Column column) {
			return column.getName();
		}
		public String buildJoinColumnAnnotationName(String attributeName, ForeignKey foreignKey) {
			return foreignKey.getColumnPair().getBaseColumn().getName();
		}
		public String buildJoinColumnAnnotationName(Column column) {
			return column.getName();
		}
		public String buildJoinTableAnnotationName(Table table) {
			return table.getName();
		}
		@Override
		public String toString() {
			return "DatabaseAnnotationNameBuilder.Default";  //$NON-NLS-1$
		}
	}

}

Back to the top