Skip to content

Commit 7b4cf34

Browse files
committed
Refactor the ReturningProperties interface and the implementations
1 parent 3a0ccb0 commit 7b4cf34

19 files changed

+253
-83
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private EntityqlDeleteStatement(
6161
}
6262

6363
public Statement<Result<ENTITY>> returning(PropertyMetamodel<?>... properties) {
64-
var returning = SpecificMetamodels.of(entityMetamodel, properties);
64+
var returning = ReturningPropertyMetamodels.of(entityMetamodel, properties);
6565
return new EntityqlDeleteStatement<>(config, entityMetamodel, entity, settings, returning);
6666
}
6767

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public EntityqlInsertTerminal<ENTITY> keys(PropertyMetamodel<?>... keys) {
6161
}
6262

6363
public Statement<Result<ENTITY>> returning(PropertyMetamodel<?>... properties) {
64-
var returning = SpecificMetamodels.of(entityMetamodel, properties);
64+
var returning = ReturningPropertyMetamodels.of(entityMetamodel, properties);
6565
return new EntityqlInsertTerminal<>(
6666
config, entityMetamodel, entity, settings, duplicateKeyType, List.of(), returning);
6767
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public EntityqlInsertTerminal(
7777
}
7878

7979
public Statement<Result<ENTITY>> returning(PropertyMetamodel<?>... properties) {
80-
var returning = SpecificMetamodels.of(entityMetamodel, properties);
80+
var returning = ReturningPropertyMetamodels.of(entityMetamodel, properties);
8181
return new EntityqlInsertTerminal<>(
8282
config, entityMetamodel, entity, settings, duplicateKeyType, keys, returning);
8383
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public EntityqlMultiInsertTerminal<ENTITY> keys(PropertyMetamodel<?>... keys) {
6969
}
7070

7171
public Statement<MultiResult<ENTITY>> returning(PropertyMetamodel<?>... properties) {
72-
var returning = SpecificMetamodels.of(entityMetamodel, properties);
72+
var returning = ReturningPropertyMetamodels.of(entityMetamodel, properties);
7373
return new EntityqlMultiInsertTerminal<>(
7474
config, entityMetamodel, entities, settings, duplicateKeyType, List.of(), returning);
7575
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public EntityqlMultiInsertTerminal(
8181
}
8282

8383
public Statement<MultiResult<ENTITY>> returning(PropertyMetamodel<?>... properties) {
84-
var returning = SpecificMetamodels.of(entityMetamodel, properties);
84+
var returning = ReturningPropertyMetamodels.of(entityMetamodel, properties);
8585
return new EntityqlMultiInsertTerminal<>(
8686
config, entityMetamodel, entities, settings, duplicateKeyType, keys, returning);
8787
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private EntityqlUpdateStatement(
6161
}
6262

6363
public Statement<Result<ENTITY>> returning(PropertyMetamodel<?>... properties) {
64-
var returning = SpecificMetamodels.of(entityMetamodel, properties);
64+
var returning = ReturningPropertyMetamodels.of(entityMetamodel, properties);
6565
return new EntityqlUpdateStatement<>(config, entityMetamodel, entity, settings, returning);
6666
}
6767

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/statement/SpecificMetamodels.java renamed to doma-core/src/main/java/org/seasar/doma/jdbc/criteria/statement/ReturningPropertyMetamodels.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,16 @@
2727
import org.seasar.doma.jdbc.query.ReturningProperties;
2828
import org.seasar.doma.message.Message;
2929

30-
record SpecificMetamodels(
31-
EntityMetamodel<?> entityMetamodel, List<PropertyMetamodel<?>> propertyMetamodels)
32-
implements ReturningProperties {
30+
class ReturningPropertyMetamodels implements ReturningProperties {
31+
32+
private final EntityMetamodel<?> entityMetamodel;
33+
private final List<? extends EntityPropertyType<?, ?>> propertyTypes;
34+
35+
private ReturningPropertyMetamodels(
36+
EntityMetamodel<?> entityMetamodel, List<? extends EntityPropertyType<?, ?>> propertyTypes) {
37+
this.entityMetamodel = Objects.requireNonNull(entityMetamodel);
38+
this.propertyTypes = Objects.requireNonNull(propertyTypes);
39+
}
3340

3441
@Override
3542
public List<? extends EntityPropertyType<?, ?>> resolve(EntityType<?> entityType) {
@@ -40,7 +47,7 @@ record SpecificMetamodels(
4047
entityMetamodel.asType().getEntityClass().getName(),
4148
entityType.getEntityClass().getName());
4249
}
43-
return propertyMetamodels.stream().map(PropertyMetamodel::asType).toList();
50+
return propertyTypes;
4451
}
4552

4653
static ReturningProperties of(
@@ -57,6 +64,7 @@ static ReturningProperties of(
5764
Message.DOMA6012, p.getName(), i, entityMetamodel.asType().getEntityClass().getName());
5865
}
5966
}
60-
return new SpecificMetamodels(entityMetamodel, Arrays.stream(propertyMetamodels).toList());
67+
return new ReturningPropertyMetamodels(
68+
entityMetamodel, Arrays.stream(propertyMetamodels).map(PropertyMetamodel::asType).toList());
6169
}
6270
}

doma-core/src/main/java/org/seasar/doma/jdbc/query/ReturningProperties.java

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,59 +15,48 @@
1515
*/
1616
package org.seasar.doma.jdbc.query;
1717

18+
import java.util.Collections;
1819
import java.util.List;
1920
import java.util.Objects;
2021
import org.seasar.doma.jdbc.entity.EntityPropertyType;
2122
import org.seasar.doma.jdbc.entity.EntityType;
2223

24+
/** Represents returning properties. */
2325
public interface ReturningProperties {
2426

25-
ReturningProperties NONE =
26-
entityType -> {
27-
throw new UnsupportedOperationException("unsupported");
28-
};
27+
/** A predefined instance of {@link ReturningProperties} that represents no properties. */
28+
ReturningProperties NONE = __ -> Collections.emptyList();
2929

30+
/** A predefined instance of {@link ReturningProperties} that represents all properties. */
3031
ReturningProperties ALL =
31-
entityType -> {
32-
Objects.requireNonNull(entityType);
33-
return entityType.getEntityPropertyTypes();
32+
it -> {
33+
Objects.requireNonNull(it);
34+
return it.getEntityPropertyTypes();
3435
};
3536

37+
/**
38+
* Checks if the current {@code ReturningProperties} instance represents no properties.
39+
*
40+
* @return {@code true} if this instance is equal to {@code NONE}, otherwise {@code false}
41+
*/
3642
default boolean isNone() {
3743
return this == NONE;
3844
}
3945

40-
List<? extends EntityPropertyType<?, ?>> resolve(EntityType<?> entityType);
41-
42-
class SpecificNames implements ReturningProperties {
43-
44-
private final List<String> includedNames;
45-
private final List<String> excludedNames;
46-
47-
public SpecificNames(List<String> includedNames, List<String> excludedNames) {
48-
this.includedNames = Objects.requireNonNull(includedNames);
49-
this.excludedNames = Objects.requireNonNull(excludedNames);
50-
}
51-
52-
@Override
53-
public List<? extends EntityPropertyType<?, ?>> resolve(EntityType<?> entityType) {
54-
Objects.requireNonNull(entityType);
55-
var includedPropertyTypes = extractIncludedPropertyTypes(entityType);
56-
var excludedPropertyTypes = extractExcludedPropertyTypes(entityType);
57-
return includedPropertyTypes.stream()
58-
.filter(it -> !excludedPropertyTypes.contains(it))
59-
.toList();
60-
}
61-
62-
private List<? extends EntityPropertyType<?, ?>> extractIncludedPropertyTypes(
63-
EntityType<?> entityType) {
64-
var list = includedNames.stream().map(entityType::getEntityPropertyType).toList();
65-
return list.isEmpty() ? entityType.getEntityPropertyTypes() : list;
66-
}
67-
68-
private List<? extends EntityPropertyType<?, ?>> extractExcludedPropertyTypes(
69-
EntityType<?> entityType) {
70-
return excludedNames.stream().map(entityType::getEntityPropertyType).toList();
71-
}
46+
/**
47+
* Checks if the current {@code ReturningProperties} instance represents all properties.
48+
*
49+
* @return {@code true} if this instance is equal to {@code ALL}, otherwise {@code false}
50+
*/
51+
default boolean isAll() {
52+
return this == ALL;
7253
}
54+
55+
/**
56+
* Resolves a list of entity property types for the given entity type.
57+
*
58+
* @param entityType the entity type for which to resolve property types
59+
* @return a list of entity property types associated with the given entity type
60+
*/
61+
List<? extends EntityPropertyType<?, ?>> resolve(EntityType<?> entityType);
7362
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Copyright Doma Authors
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+
* https://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.seasar.doma.jdbc.query;
17+
18+
import java.util.List;
19+
import java.util.Objects;
20+
import org.seasar.doma.jdbc.entity.EntityPropertyType;
21+
import org.seasar.doma.jdbc.entity.EntityType;
22+
23+
public class ReturningPropertyNames implements ReturningProperties {
24+
25+
private final List<String> includedNames;
26+
private final List<String> excludedNames;
27+
28+
private ReturningPropertyNames(List<String> includedNames, List<String> excludedNames) {
29+
this.includedNames = Objects.requireNonNull(includedNames);
30+
this.excludedNames = Objects.requireNonNull(excludedNames);
31+
}
32+
33+
@Override
34+
public List<? extends EntityPropertyType<?, ?>> resolve(EntityType<?> entityType) {
35+
Objects.requireNonNull(entityType);
36+
var includedPropertyTypes = extractIncludedPropertyTypes(entityType);
37+
var excludedPropertyTypes = extractExcludedPropertyTypes(entityType);
38+
return includedPropertyTypes.stream()
39+
.filter(it -> !excludedPropertyTypes.contains(it))
40+
.toList();
41+
}
42+
43+
private List<? extends EntityPropertyType<?, ?>> extractIncludedPropertyTypes(
44+
EntityType<?> entityType) {
45+
var list = includedNames.stream().map(entityType::getEntityPropertyType).toList();
46+
return list.isEmpty() ? entityType.getEntityPropertyTypes() : list;
47+
}
48+
49+
private List<? extends EntityPropertyType<?, ?>> extractExcludedPropertyTypes(
50+
EntityType<?> entityType) {
51+
return excludedNames.stream().map(entityType::getEntityPropertyType).toList();
52+
}
53+
54+
public static ReturningProperties of(List<String> includedNames, List<String> excludedNames) {
55+
if (includedNames.isEmpty() && excludedNames.isEmpty()) {
56+
return ALL;
57+
}
58+
return new ReturningPropertyNames(includedNames, excludedNames);
59+
}
60+
}

doma-core/src/test/java/org/seasar/doma/jdbc/criteria/statement/SpecificMetamodelsTest.java renamed to doma-core/src/test/java/org/seasar/doma/jdbc/criteria/statement/ReturningPropertyMetamodelsTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,27 @@
2323
import org.seasar.doma.jdbc.criteria.entity.Emp_;
2424
import org.seasar.doma.message.Message;
2525

26-
class SpecificMetamodelsTest {
26+
class ReturningPropertyMetamodelsTest {
2727

2828
@Test
2929
void of() {
3030
var e = new Emp_();
31-
assertNotNull(SpecificMetamodels.of(e, e.id));
31+
assertNotNull(ReturningPropertyMetamodels.of(e, e.id));
3232
}
3333

3434
@Test
3535
void of_error() {
3636
var e = new Emp_();
3737
var d = new Dept_();
38-
var ex = assertThrows(DomaException.class, () -> SpecificMetamodels.of(e, d.name));
38+
var ex = assertThrows(DomaException.class, () -> ReturningPropertyMetamodels.of(e, d.name));
3939
assertEquals(Message.DOMA6012, ex.getMessageResource());
4040
System.out.println(ex.getMessage());
4141
}
4242

4343
@Test
4444
void resolve() {
4545
var e = new Emp_();
46-
var returning = SpecificMetamodels.of(e, e.id);
46+
var returning = ReturningPropertyMetamodels.of(e, e.id);
4747
var list = returning.resolve(e.asType());
4848
assertEquals(1, list.size());
4949
assertEquals(e.id.asType(), list.get(0));
@@ -53,7 +53,7 @@ void resolve() {
5353
void resolve_error() {
5454
var e = new Emp_();
5555
var d = new Dept_();
56-
var returning = SpecificMetamodels.of(e, e.id);
56+
var returning = ReturningPropertyMetamodels.of(e, e.id);
5757
var ex = assertThrows(DomaException.class, () -> returning.resolve(d.asType()));
5858
assertEquals(Message.DOMA6013, ex.getMessageResource());
5959
System.out.println(ex.getMessage());

0 commit comments

Comments
 (0)