Skip to content

Commit 18baf43

Browse files
authored
Merge pull request #424 from domaframework/generate-metamodel-effectively
Generate Metamodel classes effectively
2 parents 53d486a + abbba07 commit 18baf43

File tree

174 files changed

+1797
-2064
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

174 files changed

+1797
-2064
lines changed

doma-core/src/main/java/org/seasar/doma/Entity.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,13 @@
111111
* @return whether the entity class is immutable
112112
*/
113113
boolean immutable() default false;
114+
115+
/**
116+
* The metamodel information for the Criteria API.
117+
*
118+
* <p>If specified, the metamodel class is generated by the annotation processor.
119+
*
120+
* @return the metamodel
121+
*/
122+
Metamodel metamodel() default @Metamodel();
114123
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.seasar.doma;
2+
3+
import java.lang.annotation.Retention;
4+
import java.lang.annotation.RetentionPolicy;
5+
6+
/**
7+
* Indicates a metamodel class.
8+
*
9+
* <p>For example, the name of the metamodel is "MyEmployeeMetamodel" when you specify the prefix
10+
* and the suffix as follows:
11+
*
12+
* <pre>
13+
* &#064;Entity(metamodel = &#064;Metamodel(prefix = "My", suffix="Metamodel")
14+
* public class Employee {
15+
* ...
16+
* }
17+
* </pre>
18+
*
19+
* <p>If both the {@code prefix} and the {@code suffix} are empty, the values of the following
20+
* annotation processing options are used:
21+
*
22+
* <ul>
23+
* <li>doma.metamodel.prefix
24+
* <li>doma.metamodel.suffix
25+
* </ul>
26+
*/
27+
@Retention(RetentionPolicy.RUNTIME)
28+
public @interface Metamodel {
29+
/** @return the prefix for the metamodel class */
30+
String prefix() default "";
31+
32+
/** @return the suffix for the metamodel class */
33+
String suffix() default "";
34+
}

doma-core/src/main/java/org/seasar/doma/internal/ClassNames.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,10 @@ public static ClassName newExternalDomainTypeClassName(CharSequence externalDoma
4343
return new ExternalDomainClassNameBuilder(externalDomainClassName).build();
4444
}
4545

46-
public static ClassName newEntityDefClassNameBuilder(
47-
CharSequence entityClassName, String criteriaPrefix, String criteriaSuffix) {
48-
assertNotNull(entityClassName, criteriaPrefix, criteriaSuffix);
49-
return new DefClassNameBuilder(entityClassName, criteriaPrefix, criteriaSuffix).build();
50-
}
51-
52-
public static ClassName newEmbeddableDefClassNameBuilder(
53-
CharSequence entityClassName, String criteriaPrefix, String criteriaSuffix) {
54-
assertNotNull(entityClassName, criteriaPrefix, criteriaSuffix);
55-
return new DefClassNameBuilder(entityClassName, criteriaPrefix, criteriaSuffix).build();
46+
public static ClassName newEntityMetamodelClassNameBuilder(
47+
CharSequence entityClassName, String metamodelPrefix, String metamodelSuffix) {
48+
assertNotNull(entityClassName, metamodelPrefix, metamodelSuffix);
49+
return new MetamodelClassNameBuilder(entityClassName, metamodelPrefix, metamodelSuffix).build();
5650
}
5751

5852
private static class ClassNameBuilder {
@@ -101,11 +95,11 @@ protected String prefix() {
10195
}
10296
}
10397

104-
private static class DefClassNameBuilder extends ClassNameBuilder {
98+
private static class MetamodelClassNameBuilder extends ClassNameBuilder {
10599
private final String criteriaPrefix;
106100
private final String criteriaSuffix;
107101

108-
public DefClassNameBuilder(
102+
public MetamodelClassNameBuilder(
109103
CharSequence binaryName, String criteriaPrefix, String criteriaSuffix) {
110104
super(binaryName);
111105
this.criteriaPrefix = criteriaPrefix;

doma-core/src/main/java/org/seasar/doma/internal/EmbeddableDesc.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

doma-core/src/main/java/org/seasar/doma/internal/EntityDesc.java

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,35 @@
11
package org.seasar.doma.jdbc.criteria;
22

33
import org.seasar.doma.jdbc.criteria.declaration.AggregateFunction;
4-
import org.seasar.doma.jdbc.criteria.def.PropertyDef;
4+
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel;
55

66
public final class AggregateFunctions {
77

8-
public static <PROPERTY> AggregateFunction.Avg<PROPERTY> avg(PropertyDef<PROPERTY> propertyDef) {
9-
return new AggregateFunction.Avg<>(propertyDef);
8+
public static <PROPERTY> AggregateFunction.Avg<PROPERTY> avg(
9+
PropertyMetamodel<PROPERTY> propertyMetamodel) {
10+
return new AggregateFunction.Avg<>(propertyMetamodel);
1011
}
1112

1213
public static AggregateFunction.Count count() {
1314
return new AggregateFunction.Count(AggregateFunction.Asterisk);
1415
}
1516

16-
public static AggregateFunction.Count count(PropertyDef<?> propertyDef) {
17-
return new AggregateFunction.Count(propertyDef);
17+
public static AggregateFunction.Count count(PropertyMetamodel<?> propertyMetamodel) {
18+
return new AggregateFunction.Count(propertyMetamodel);
1819
}
1920

20-
public static <PROPERTY> AggregateFunction.Max<PROPERTY> max(PropertyDef<PROPERTY> propertyDef) {
21-
return new AggregateFunction.Max<>(propertyDef);
21+
public static <PROPERTY> AggregateFunction.Max<PROPERTY> max(
22+
PropertyMetamodel<PROPERTY> propertyMetamodel) {
23+
return new AggregateFunction.Max<>(propertyMetamodel);
2224
}
2325

24-
public static <PROPERTY> AggregateFunction.Min<PROPERTY> min(PropertyDef<PROPERTY> propertyDef) {
25-
return new AggregateFunction.Min<>(propertyDef);
26+
public static <PROPERTY> AggregateFunction.Min<PROPERTY> min(
27+
PropertyMetamodel<PROPERTY> propertyMetamodel) {
28+
return new AggregateFunction.Min<>(propertyMetamodel);
2629
}
2730

28-
public static <PROPERTY> AggregateFunction.Sum<PROPERTY> sum(PropertyDef<PROPERTY> propertyDef) {
29-
return new AggregateFunction.Sum<>(propertyDef);
31+
public static <PROPERTY> AggregateFunction.Sum<PROPERTY> sum(
32+
PropertyMetamodel<PROPERTY> propertyMetamodel) {
33+
return new AggregateFunction.Sum<>(propertyMetamodel);
3034
}
3135
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/Entityql.java

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.seasar.doma.jdbc.criteria.context.SelectSettings;
1111
import org.seasar.doma.jdbc.criteria.context.UpdateSettings;
1212
import org.seasar.doma.jdbc.criteria.declaration.SelectFromDeclaration;
13-
import org.seasar.doma.jdbc.criteria.def.EntityDef;
13+
import org.seasar.doma.jdbc.criteria.metamodel.EntityMetamodel;
1414
import org.seasar.doma.jdbc.criteria.statement.EntityqlBatchDeleteStatement;
1515
import org.seasar.doma.jdbc.criteria.statement.EntityqlBatchInsertStatement;
1616
import org.seasar.doma.jdbc.criteria.statement.EntityqlBatchUpdateStatement;
@@ -28,123 +28,129 @@ public Entityql(Config config) {
2828
this.config = Objects.requireNonNull(config);
2929
}
3030

31-
public <ENTITY> EntityqlSelectStatement<ENTITY> from(EntityDef<ENTITY> entityDef) {
32-
Objects.requireNonNull(entityDef);
33-
return from(entityDef, options -> {});
31+
public <ENTITY> EntityqlSelectStatement<ENTITY> from(EntityMetamodel<ENTITY> entityMetamodel) {
32+
Objects.requireNonNull(entityMetamodel);
33+
return from(entityMetamodel, options -> {});
3434
}
3535

3636
public <ENTITY> EntityqlSelectStatement<ENTITY> from(
37-
EntityDef<ENTITY> entityDef, Consumer<SelectSettings> settingsConsumer) {
38-
Objects.requireNonNull(entityDef);
37+
EntityMetamodel<ENTITY> entityMetamodel, Consumer<SelectSettings> settingsConsumer) {
38+
Objects.requireNonNull(entityMetamodel);
3939
Objects.requireNonNull(settingsConsumer);
40-
SelectContext context = new SelectContext(entityDef);
40+
SelectContext context = new SelectContext(entityMetamodel);
4141
settingsConsumer.accept(context.getSettings());
4242
SelectFromDeclaration declaration = new SelectFromDeclaration(context);
4343
return new EntityqlSelectStatement<>(config, declaration);
4444
}
4545

46-
public <ENTITY> Statement<ENTITY> update(EntityDef<ENTITY> entityDef, ENTITY entity) {
47-
Objects.requireNonNull(entityDef);
46+
public <ENTITY> Statement<ENTITY> update(EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
47+
Objects.requireNonNull(entityMetamodel);
4848
Objects.requireNonNull(entity);
49-
return update(entityDef, entity, options -> {});
49+
return update(entityMetamodel, entity, options -> {});
5050
}
5151

5252
public <ENTITY> Statement<ENTITY> update(
53-
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<UpdateSettings> settingsConsumer) {
54-
Objects.requireNonNull(entityDef);
53+
EntityMetamodel<ENTITY> entityMetamodel,
54+
ENTITY entity,
55+
Consumer<UpdateSettings> settingsConsumer) {
56+
Objects.requireNonNull(entityMetamodel);
5557
Objects.requireNonNull(entity);
5658
Objects.requireNonNull(settingsConsumer);
5759
UpdateSettings settings = new UpdateSettings();
5860
settingsConsumer.accept(settings);
59-
return new EntityqlUpdateStatement<>(config, entityDef, entity, settings);
61+
return new EntityqlUpdateStatement<>(config, entityMetamodel, entity, settings);
6062
}
6163

62-
public <ENTITY> Statement<ENTITY> delete(EntityDef<ENTITY> entityDef, ENTITY entity) {
63-
Objects.requireNonNull(entityDef);
64+
public <ENTITY> Statement<ENTITY> delete(EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
65+
Objects.requireNonNull(entityMetamodel);
6466
Objects.requireNonNull(entity);
65-
return delete(entityDef, entity, options -> {});
67+
return delete(entityMetamodel, entity, options -> {});
6668
}
6769

6870
public <ENTITY> Statement<ENTITY> delete(
69-
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<DeleteSettings> settingsConsumer) {
70-
Objects.requireNonNull(entityDef);
71+
EntityMetamodel<ENTITY> entityMetamodel,
72+
ENTITY entity,
73+
Consumer<DeleteSettings> settingsConsumer) {
74+
Objects.requireNonNull(entityMetamodel);
7175
Objects.requireNonNull(entity);
7276
Objects.requireNonNull(settingsConsumer);
7377
DeleteSettings settings = new DeleteSettings();
7478
settingsConsumer.accept(settings);
75-
return new EntityqlDeleteStatement<>(config, entityDef, entity, settings);
79+
return new EntityqlDeleteStatement<>(config, entityMetamodel, entity, settings);
7680
}
7781

78-
public <ENTITY> Statement<ENTITY> insert(EntityDef<ENTITY> entityDef, ENTITY entity) {
79-
Objects.requireNonNull(entityDef);
82+
public <ENTITY> Statement<ENTITY> insert(EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
83+
Objects.requireNonNull(entityMetamodel);
8084
Objects.requireNonNull(entity);
81-
return insert(entityDef, entity, options -> {});
85+
return insert(entityMetamodel, entity, options -> {});
8286
}
8387

8488
public <ENTITY> Statement<ENTITY> insert(
85-
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<InsertSettings> settingsConsumer) {
86-
Objects.requireNonNull(entityDef);
89+
EntityMetamodel<ENTITY> entityMetamodel,
90+
ENTITY entity,
91+
Consumer<InsertSettings> settingsConsumer) {
92+
Objects.requireNonNull(entityMetamodel);
8793
Objects.requireNonNull(entity);
8894
Objects.requireNonNull(settingsConsumer);
8995
InsertSettings settings = new InsertSettings();
9096
settingsConsumer.accept(settings);
91-
return new EntityqlInsertStatement<>(config, entityDef, entity, settings);
97+
return new EntityqlInsertStatement<>(config, entityMetamodel, entity, settings);
9298
}
9399

94100
public <ENTITY> Statement<List<ENTITY>> update(
95-
EntityDef<ENTITY> entityDef, List<ENTITY> entities) {
96-
Objects.requireNonNull(entityDef);
101+
EntityMetamodel<ENTITY> entityMetamodel, List<ENTITY> entities) {
102+
Objects.requireNonNull(entityMetamodel);
97103
Objects.requireNonNull(entities);
98-
return update(entityDef, entities, options -> {});
104+
return update(entityMetamodel, entities, options -> {});
99105
}
100106

101107
public <ENTITY> Statement<List<ENTITY>> update(
102-
EntityDef<ENTITY> entityDef,
108+
EntityMetamodel<ENTITY> entityMetamodel,
103109
List<ENTITY> entities,
104110
Consumer<UpdateSettings> settingsConsumer) {
105-
Objects.requireNonNull(entityDef);
111+
Objects.requireNonNull(entityMetamodel);
106112
Objects.requireNonNull(entities);
107113
Objects.requireNonNull(settingsConsumer);
108114
UpdateSettings settings = new UpdateSettings();
109115
settingsConsumer.accept(settings);
110-
return new EntityqlBatchUpdateStatement<>(config, entityDef, entities, settings);
116+
return new EntityqlBatchUpdateStatement<>(config, entityMetamodel, entities, settings);
111117
}
112118

113119
public <ENTITY> Statement<List<ENTITY>> delete(
114-
EntityDef<ENTITY> entityDef, List<ENTITY> entities) {
115-
Objects.requireNonNull(entityDef);
120+
EntityMetamodel<ENTITY> entityMetamodel, List<ENTITY> entities) {
121+
Objects.requireNonNull(entityMetamodel);
116122
Objects.requireNonNull(entities);
117-
return delete(entityDef, entities, options -> {});
123+
return delete(entityMetamodel, entities, options -> {});
118124
}
119125

120126
public <ENTITY> Statement<List<ENTITY>> delete(
121-
EntityDef<ENTITY> entityDef,
127+
EntityMetamodel<ENTITY> entityMetamodel,
122128
List<ENTITY> entities,
123129
Consumer<DeleteSettings> settingsConsumer) {
124-
Objects.requireNonNull(entityDef);
130+
Objects.requireNonNull(entityMetamodel);
125131
Objects.requireNonNull(entities);
126132
Objects.requireNonNull(settingsConsumer);
127133
DeleteSettings settings = new DeleteSettings();
128134
settingsConsumer.accept(settings);
129-
return new EntityqlBatchDeleteStatement<>(config, entityDef, entities, settings);
135+
return new EntityqlBatchDeleteStatement<>(config, entityMetamodel, entities, settings);
130136
}
131137

132138
public <ENTITY> Statement<List<ENTITY>> insert(
133-
EntityDef<ENTITY> entityDef, List<ENTITY> entities) {
134-
Objects.requireNonNull(entityDef);
139+
EntityMetamodel<ENTITY> entityMetamodel, List<ENTITY> entities) {
140+
Objects.requireNonNull(entityMetamodel);
135141
Objects.requireNonNull(entities);
136-
return insert(entityDef, entities, options -> {});
142+
return insert(entityMetamodel, entities, options -> {});
137143
}
138144

139145
public <ENTITY> Statement<List<ENTITY>> insert(
140-
EntityDef<ENTITY> entityDef,
146+
EntityMetamodel<ENTITY> entityMetamodel,
141147
List<ENTITY> entities,
142148
Consumer<InsertSettings> settingsConsumer) {
143-
Objects.requireNonNull(entityDef);
149+
Objects.requireNonNull(entityMetamodel);
144150
Objects.requireNonNull(entities);
145151
Objects.requireNonNull(settingsConsumer);
146152
InsertSettings settings = new InsertSettings();
147153
settingsConsumer.accept(settings);
148-
return new EntityqlBatchInsertStatement<>(config, entityDef, entities, settings);
154+
return new EntityqlBatchInsertStatement<>(config, entityMetamodel, entities, settings);
149155
}
150156
}

0 commit comments

Comments
 (0)