|
15 | 15 | */
|
16 | 16 | package org.springframework.data.r2dbc.repository.query;
|
17 | 17 |
|
| 18 | +import java.util.ArrayList; |
| 19 | +import java.util.Iterator; |
| 20 | +import java.util.List; |
| 21 | + |
18 | 22 | import org.springframework.data.relational.repository.query.RelationalParameterAccessor;
|
19 | 23 | import org.springframework.data.repository.query.Parameter;
|
20 | 24 | import org.springframework.data.repository.query.Parameters;
|
21 | 25 | import org.springframework.data.repository.query.parser.Part;
|
22 | 26 | import org.springframework.lang.Nullable;
|
23 | 27 | import org.springframework.util.Assert;
|
24 | 28 |
|
25 |
| -import java.util.ArrayList; |
26 |
| -import java.util.Iterator; |
27 |
| -import java.util.List; |
28 |
| - |
29 | 29 | /**
|
30 | 30 | * Helper class to allow easy creation of {@link ParameterMetadata}s.
|
31 | 31 | * <p>
|
|
35 | 35 | * @author Roman Chigvintsev
|
36 | 36 | */
|
37 | 37 | class ParameterMetadataProvider {
|
38 |
| - private static final Object VALUE_PLACEHOLDER = new Object(); |
| 38 | + private static final Object VALUE_PLACEHOLDER = new Object(); |
39 | 39 |
|
40 |
| - private final Iterator<? extends Parameter> bindableParameterIterator; |
41 |
| - @Nullable |
42 |
| - private final Iterator<Object> bindableParameterValueIterator; |
43 |
| - private final List<ParameterMetadata> parameterMetadata = new ArrayList<>(); |
44 |
| - private final LikeEscaper likeEscaper; |
| 40 | + private final Iterator<? extends Parameter> bindableParameterIterator; |
| 41 | + @Nullable private final Iterator<Object> bindableParameterValueIterator; |
| 42 | + private final List<ParameterMetadata> parameterMetadata = new ArrayList<>(); |
| 43 | + private final LikeEscaper likeEscaper; |
45 | 44 |
|
46 |
| - /** |
47 |
| - * Creates new instance of this class with the given {@link RelationalParameterAccessor} and {@link LikeEscaper}. |
48 |
| - * |
49 |
| - * @param accessor relational parameter accessor (must not be {@literal null}). |
50 |
| - * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null}) |
51 |
| - */ |
52 |
| - ParameterMetadataProvider(RelationalParameterAccessor accessor, LikeEscaper likeEscaper) { |
53 |
| - this(accessor.getBindableParameters(), accessor.iterator(), likeEscaper); |
54 |
| - } |
| 45 | + /** |
| 46 | + * Creates new instance of this class with the given {@link RelationalParameterAccessor} and {@link LikeEscaper}. |
| 47 | + * |
| 48 | + * @param accessor relational parameter accessor (must not be {@literal null}). |
| 49 | + * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null}) |
| 50 | + */ |
| 51 | + ParameterMetadataProvider(RelationalParameterAccessor accessor, LikeEscaper likeEscaper) { |
| 52 | + this(accessor.getBindableParameters(), accessor.iterator(), likeEscaper); |
| 53 | + } |
55 | 54 |
|
56 |
| - /** |
57 |
| - * Creates new instance of this class with the given {@link Parameters} and {@link LikeEscaper}. |
58 |
| - * |
59 |
| - * @param parameters method parameters (must not be {@literal null}) |
60 |
| - * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null}) |
61 |
| - */ |
62 |
| - ParameterMetadataProvider(Parameters<?, ?> parameters, LikeEscaper likeEscaper) { |
63 |
| - this(parameters, null, likeEscaper); |
64 |
| - } |
| 55 | + /** |
| 56 | + * Creates new instance of this class with the given {@link Parameters} and {@link LikeEscaper}. |
| 57 | + * |
| 58 | + * @param parameters method parameters (must not be {@literal null}) |
| 59 | + * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null}) |
| 60 | + */ |
| 61 | + ParameterMetadataProvider(Parameters<?, ?> parameters, LikeEscaper likeEscaper) { |
| 62 | + this(parameters, null, likeEscaper); |
| 63 | + } |
65 | 64 |
|
66 |
| - /** |
67 |
| - * Creates new instance of this class with the given {@link Parameters}, {@link Iterator} over all bindable |
| 65 | + /** |
| 66 | + * Creates new instance of this class with the given {@link Parameters}, {@link Iterator} over all bindable |
68 | 67 | * parameter values and {@link LikeEscaper}.
|
69 |
| - * |
70 |
| - * @param bindableParameterValueIterator iterator over bindable parameter values |
71 |
| - * @param parameters method parameters (must not be {@literal null}) |
72 |
| - * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null}) |
73 |
| - */ |
74 |
| - private ParameterMetadataProvider(Parameters<?, ?> parameters, |
75 |
| - @Nullable Iterator<Object> bindableParameterValueIterator, |
76 |
| - LikeEscaper likeEscaper) { |
77 |
| - Assert.notNull(parameters, "Parameters must not be null!"); |
78 |
| - Assert.notNull(likeEscaper, "Like escaper must not be null!"); |
| 68 | + * |
| 69 | + * @param bindableParameterValueIterator iterator over bindable parameter values |
| 70 | + * @param parameters method parameters (must not be {@literal null}) |
| 71 | + * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null}) |
| 72 | + */ |
| 73 | + private ParameterMetadataProvider(Parameters<?, ?> parameters, |
| 74 | + @Nullable Iterator<Object> bindableParameterValueIterator, LikeEscaper likeEscaper) { |
| 75 | + Assert.notNull(parameters, "Parameters must not be null!"); |
| 76 | + Assert.notNull(likeEscaper, "Like escaper must not be null!"); |
79 | 77 |
|
80 |
| - this.bindableParameterIterator = parameters.getBindableParameters().iterator(); |
81 |
| - this.bindableParameterValueIterator = bindableParameterValueIterator; |
82 |
| - this.likeEscaper = likeEscaper; |
83 |
| - } |
| 78 | + this.bindableParameterIterator = parameters.getBindableParameters().iterator(); |
| 79 | + this.bindableParameterValueIterator = bindableParameterValueIterator; |
| 80 | + this.likeEscaper = likeEscaper; |
| 81 | + } |
84 | 82 |
|
85 |
| - /** |
86 |
| - * Creates new instance of {@link ParameterMetadata} for the given {@link Part} and next {@link Parameter}. |
87 |
| - */ |
88 |
| - public ParameterMetadata next(Part part) { |
89 |
| - Assert.isTrue(bindableParameterIterator.hasNext(), |
90 |
| - () -> String.format("No parameter available for part %s.", part)); |
91 |
| - Parameter parameter = bindableParameterIterator.next(); |
92 |
| - ParameterMetadata metadata = ParameterMetadata.builder() |
93 |
| - .type(parameter.getType()) |
94 |
| - .partType(part.getType()) |
95 |
| - .name(getParameterName(parameter, part.getProperty().getSegment())) |
96 |
| - .isNullParameter(getParameterValue() == null && Part.Type.SIMPLE_PROPERTY.equals(part.getType())) |
97 |
| - .likeEscaper(likeEscaper) |
98 |
| - .build(); |
99 |
| - parameterMetadata.add(metadata); |
100 |
| - return metadata; |
101 |
| - } |
| 83 | + /** |
| 84 | + * Creates new instance of {@link ParameterMetadata} for the given {@link Part} and next {@link Parameter}. |
| 85 | + */ |
| 86 | + public ParameterMetadata next(Part part) { |
| 87 | + Assert.isTrue(bindableParameterIterator.hasNext(), |
| 88 | + () -> String.format("No parameter available for part %s.", part)); |
| 89 | + Parameter parameter = bindableParameterIterator.next(); |
| 90 | + ParameterMetadata metadata = ParameterMetadata.builder().type(parameter.getType()).partType(part.getType()) |
| 91 | + .name(getParameterName(parameter, part.getProperty().getSegment())) |
| 92 | + .isNullParameter(getParameterValue() == null && Part.Type.SIMPLE_PROPERTY.equals(part.getType())) |
| 93 | + .likeEscaper(likeEscaper).build(); |
| 94 | + parameterMetadata.add(metadata); |
| 95 | + return metadata; |
| 96 | + } |
102 | 97 |
|
103 |
| - public ParameterMetadata getParameterMetadata(int index) { |
104 |
| - return parameterMetadata.get(index); |
105 |
| - } |
| 98 | + public ParameterMetadata getParameterMetadata(int index) { |
| 99 | + return parameterMetadata.get(index); |
| 100 | + } |
106 | 101 |
|
107 |
| - @Nullable |
108 |
| - private String getParameterName(Parameter parameter, String defaultName) { |
109 |
| - if (parameter.isExplicitlyNamed()) { |
110 |
| - return parameter.getName().orElseThrow(() -> new IllegalArgumentException("Parameter needs to be named")); |
111 |
| - } |
112 |
| - return defaultName; |
113 |
| - } |
| 102 | + @Nullable |
| 103 | + private String getParameterName(Parameter parameter, String defaultName) { |
| 104 | + if (parameter.isExplicitlyNamed()) { |
| 105 | + return parameter.getName().orElseThrow(() -> new IllegalArgumentException("Parameter needs to be named")); |
| 106 | + } |
| 107 | + return defaultName; |
| 108 | + } |
114 | 109 |
|
115 |
| - @Nullable |
116 |
| - private Object getParameterValue() { |
117 |
| - return bindableParameterValueIterator == null ? VALUE_PLACEHOLDER : bindableParameterValueIterator.next(); |
118 |
| - } |
| 110 | + @Nullable |
| 111 | + private Object getParameterValue() { |
| 112 | + return bindableParameterValueIterator == null ? VALUE_PLACEHOLDER : bindableParameterValueIterator.next(); |
| 113 | + } |
119 | 114 | }
|
0 commit comments