fix build
[yosql.git] / yosql-codegen / yosql-codegen-blocks / src / main / java / wtf / metio / yosql / codegen / blocks / DefaultFields.java
blob156c05ef58cb205c9bddeed41f21239a1a706c4b
1 /*
2 * This file is part of yosql. It is subject to the license terms in the LICENSE file found in the top-level
3 * directory of this distribution and at https://creativecommons.org/publicdomain/zero/1.0/. No part of yosql,
4 * including this file, may be copied, modified, propagated, or distributed except according to the terms contained
5 * in the LICENSE file.
6 */
8 package wtf.metio.yosql.codegen.blocks;
10 import com.squareup.javapoet.CodeBlock;
11 import com.squareup.javapoet.FieldSpec;
12 import com.squareup.javapoet.TypeName;
13 import wtf.metio.yosql.codegen.api.AnnotationGenerator;
14 import wtf.metio.yosql.codegen.api.Fields;
15 import wtf.metio.yosql.internals.jdk.Strings;
16 import wtf.metio.yosql.models.immutables.JavaConfiguration;
17 import wtf.metio.yosql.models.immutables.NamesConfiguration;
18 import wtf.metio.yosql.models.immutables.SqlConfiguration;
20 import javax.lang.model.element.Modifier;
21 import java.lang.reflect.Type;
23 public final class DefaultFields implements Fields {
25 private static final String NAME_REGEX = "([a-z])([A-Z])";
26 private static final String NAME_REPLACEMENT = "$1_$2";
28 private final AnnotationGenerator annotations;
29 private final JavaConfiguration java;
30 private final NamesConfiguration names;
32 public DefaultFields(
33 final AnnotationGenerator annotations,
34 final JavaConfiguration java,
35 final NamesConfiguration names) {
36 this.annotations = annotations;
37 this.java = java;
38 this.names = names;
41 @Override
42 public FieldSpec field(final Type type, final String name) {
43 return field(TypeName.get(type), name);
46 @Override
47 public FieldSpec field(final TypeName type, final String name) {
48 final var builder = builder(type, name).addModifiers(Modifier.PRIVATE);
49 if (java.useFinal()) {
50 builder.addModifiers(Modifier.FINAL);
52 return builder.build();
55 @Override
56 public FieldSpec.Builder prepareConstant(final Type type, final String name) {
57 return prepareConstant(TypeName.get(type), name);
60 @Override
61 public FieldSpec.Builder prepareConstant(final TypeName type, final String name) {
62 return builder(type, name).addModifiers(Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL);
65 @Override
66 public CodeBlock initialize(final String statement) {
67 if (java.useTextBlocks()) {
68 return CodeBlock.builder()
69 .add("\"\"\"")
70 .add("$>$>\n$L", statement)
71 .add("\"\"\"$<$<")
72 .build();
74 return CodeBlock.builder()
75 .add("$S", statement)
76 .build();
79 private FieldSpec.Builder builder(final TypeName type, final String name) {
80 return FieldSpec.builder(type, name)
81 .addAnnotations(annotations.generatedField());
84 @Override
85 public String constantSqlStatementFieldName(final SqlConfiguration configuration) {
86 return configuration.name()
87 .replaceAll(NAME_REGEX, NAME_REPLACEMENT)
88 .toUpperCase()
89 + getVendor(configuration);
92 @Override
93 public String constantRawSqlStatementFieldName(final SqlConfiguration configuration) {
94 return constantSqlStatementFieldName(configuration) + names.rawSuffix();
97 @Override
98 public String constantSqlStatementParameterIndexFieldName(final SqlConfiguration configuration) {
99 return constantSqlStatementFieldName(configuration) + names.indexSuffix();
102 private static String getVendor(final SqlConfiguration configuration) {
103 return Strings.isBlank(configuration.vendor())
104 ? ""
105 : "_" + configuration.vendor().replace(" ", "_").toUpperCase();