Skip to content
This repository was archived by the owner on Oct 24, 2020. It is now read-only.

Commit 2bdf268

Browse files
committed
Introduce the DomaSettings class to simplify the architecture
1 parent 7947cde commit 2bdf268

File tree

14 files changed

+306
-241
lines changed

14 files changed

+306
-241
lines changed

runtime/src/main/java/org/seasar/doma/quarkus/runtime/DomaConfiguration.java renamed to deployment/src/main/java/org/seasar/doma/quarkus/deployment/DomaBuildTimeConfig.java

Lines changed: 36 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,42 @@
1-
package org.seasar.doma.quarkus.runtime;
1+
package org.seasar.doma.quarkus.deployment;
22

3+
import io.quarkus.runtime.annotations.ConfigGroup;
34
import io.quarkus.runtime.annotations.ConfigItem;
45
import io.quarkus.runtime.annotations.ConfigRoot;
56
import java.util.Optional;
6-
import java.util.function.Supplier;
77
import org.seasar.doma.jdbc.Config;
8-
import org.seasar.doma.jdbc.GreedyCacheSqlFileRepository;
9-
import org.seasar.doma.jdbc.Naming;
10-
import org.seasar.doma.jdbc.NoCacheSqlFileRepository;
11-
import org.seasar.doma.jdbc.SqlFileRepository;
128
import org.seasar.doma.jdbc.SqlLogType;
13-
import org.seasar.doma.jdbc.dialect.Dialect;
14-
import org.seasar.doma.jdbc.dialect.H2Dialect;
15-
import org.seasar.doma.jdbc.dialect.MssqlDialect;
16-
import org.seasar.doma.jdbc.dialect.MysqlDialect;
17-
import org.seasar.doma.jdbc.dialect.PostgresDialect;
18-
import org.seasar.doma.jdbc.dialect.StandardDialect;
9+
import org.seasar.doma.quarkus.runtime.DomaSettings;
1910

2011
@ConfigRoot
21-
public class DomaConfiguration {
12+
public class DomaBuildTimeConfig {
13+
14+
public static final String SQL_LOAD_SCRIPT_DEFAULT = "import.sql";
15+
public static final String SQL_LOAD_SCRIPT_NO_FILE = "no-file";
2216

2317
/**
2418
* The SQL dialect.
2519
*
2620
* @see Config#getDialect()
2721
*/
2822
@ConfigItem(defaultValueDocumentation = "depends on 'quarkus.datasource.db-kind'")
29-
public Optional<DialectType> dialect;
23+
public Optional<DomaSettings.DialectType> dialect;
3024

3125
/**
3226
* The SQL file repository.
3327
*
3428
* @see Config#getSqlFileRepository()
3529
*/
3630
@ConfigItem(defaultValue = "greedy-cache")
37-
public SqlFileRepositoryType sqlFileRepository;
31+
public DomaSettings.SqlFileRepositoryType sqlFileRepository;
3832

3933
/**
4034
* The naming convention controller.
4135
*
4236
* @see Config#getNaming()
4337
*/
4438
@ConfigItem(defaultValue = "none")
45-
public NamingType naming;
39+
public DomaSettings.NamingType naming;
4640

4741
/**
4842
* The SQL log type that determines the SQL log format in exceptions.
@@ -107,7 +101,32 @@ public class DomaConfiguration {
107101
public Optional<String> sqlLoadScript;
108102

109103
/** The log configuration. */
110-
@ConfigItem public LogConfiguration log;
104+
@ConfigItem public LogBuildTimeConfig log;
105+
106+
@ConfigGroup
107+
public static class LogBuildTimeConfig {
108+
109+
/** Shows SQL logs. */
110+
@ConfigItem public boolean sql;
111+
112+
/** Shows DAO logs. */
113+
@ConfigItem public boolean dao;
114+
115+
/** Shows the logs of the failure to close JDBC resource. */
116+
@ConfigItem public boolean closingFailure;
117+
118+
@Override
119+
public String toString() {
120+
return "DomaConfigurationLog{"
121+
+ "sql="
122+
+ sql
123+
+ ", dao="
124+
+ dao
125+
+ ", closingFailure="
126+
+ closingFailure
127+
+ '}';
128+
}
129+
}
111130

112131
@Override
113132
public String toString() {
@@ -134,55 +153,4 @@ public String toString() {
134153
+ log
135154
+ '}';
136155
}
137-
138-
public enum DialectType {
139-
STANDARD(StandardDialect::new),
140-
MSSQL(MssqlDialect::new),
141-
MYSQL(MysqlDialect::new),
142-
POSTGRES(PostgresDialect::new),
143-
H2(H2Dialect::new);
144-
145-
private final Supplier<Dialect> constructor;
146-
147-
DialectType(Supplier<Dialect> constructor) {
148-
this.constructor = constructor;
149-
}
150-
151-
public Dialect create() {
152-
return this.constructor.get();
153-
}
154-
}
155-
156-
public enum SqlFileRepositoryType {
157-
NO_CACHE(NoCacheSqlFileRepository::new),
158-
GREEDY_CACHE(GreedyCacheSqlFileRepository::new);
159-
160-
private final Supplier<SqlFileRepository> constructor;
161-
162-
SqlFileRepositoryType(Supplier<SqlFileRepository> constructor) {
163-
this.constructor = constructor;
164-
}
165-
166-
public SqlFileRepository create() {
167-
return this.constructor.get();
168-
}
169-
}
170-
171-
public enum NamingType {
172-
NONE(Naming.NONE),
173-
LOWER_CASE(Naming.LOWER_CASE),
174-
UPPER_CASE(Naming.UPPER_CASE),
175-
SNAKE_LOWER_CASE(Naming.SNAKE_LOWER_CASE),
176-
SNAKE_UPPER_CASE(Naming.SNAKE_UPPER_CASE);
177-
178-
private final Naming naming;
179-
180-
NamingType(Naming naming) {
181-
this.naming = naming;
182-
}
183-
184-
public Naming naming() {
185-
return this.naming;
186-
}
187-
}
188156
}

deployment/src/main/java/org/seasar/doma/quarkus/deployment/DomaProcessor.java

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@
1515
import io.quarkus.deployment.builditem.LaunchModeBuildItem;
1616
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
1717
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
18-
import io.quarkus.runtime.LaunchMode;
1918
import java.util.ArrayList;
2019
import java.util.List;
2120
import java.util.Optional;
2221
import org.jboss.jandex.DotName;
2322
import org.jboss.jandex.IndexView;
2423
import org.seasar.doma.DaoImplementation;
25-
import org.seasar.doma.quarkus.runtime.DomaConfiguration;
2624
import org.seasar.doma.quarkus.runtime.DomaProducer;
2725
import org.seasar.doma.quarkus.runtime.DomaRecorder;
2826
import org.seasar.doma.quarkus.runtime.InitialScriptLoader;
@@ -48,39 +46,41 @@ BeanDefiningAnnotationBuildItem beanDefiningAnnotation() {
4846
}
4947

5048
@BuildStep
51-
MergedConfigurationBuildItem mergedConfiguration(
52-
DomaConfiguration configuration,
49+
DomaSettingsBuildItem domaSettings(
50+
DomaBuildTimeConfig buildTimeConfig,
5351
List<JdbcDataSourceBuildItem> dataSources,
5452
ApplicationArchivesBuildItem applicationArchives,
5553
LaunchModeBuildItem launchMode) {
56-
DomaConfigurationMerger merger =
57-
new DomaConfigurationMerger(configuration, dataSources, applicationArchives, launchMode);
58-
merger.merge();
59-
return new MergedConfigurationBuildItem(configuration);
54+
DomaSettingsFactory factory =
55+
new DomaSettingsFactory(buildTimeConfig, dataSources, applicationArchives, launchMode);
56+
return new DomaSettingsBuildItem(factory.create());
6057
}
6158

6259
@BuildStep
6360
Optional<HotDeploymentWatchedFileBuildItem> hotDeploymentWatchedFile(
64-
MergedConfigurationBuildItem mergedConfiguration) {
65-
DomaConfiguration configuration = mergedConfiguration.getConfiguration();
66-
Optional<String> sqlLoadScript = configuration.sqlLoadScript;
67-
return sqlLoadScript.map(HotDeploymentWatchedFileBuildItem::new);
61+
DomaSettingsBuildItem settings) {
62+
String sqlLoadScript = settings.getSettings().sqlLoadScript;
63+
if (sqlLoadScript == null) {
64+
return Optional.empty();
65+
}
66+
return Optional.of(new HotDeploymentWatchedFileBuildItem(sqlLoadScript));
6867
}
6968

7069
@BuildStep
71-
NativeImageResourceBuildItem resources(MergedConfigurationBuildItem mergedConfiguration) {
70+
NativeImageResourceBuildItem nativeImageResources(DomaSettingsBuildItem settings) {
7271
List<String> resources = new ArrayList<>();
73-
DomaConfiguration configuration = mergedConfiguration.getConfiguration();
74-
Optional<String> sqlLoadScript = configuration.sqlLoadScript;
75-
sqlLoadScript.ifPresent(resources::add);
72+
String sqlLoadScript = settings.getSettings().sqlLoadScript;
73+
if (sqlLoadScript != null) {
74+
resources.add(sqlLoadScript);
75+
}
7676
DomaResourceScanner scanner = new DomaResourceScanner();
7777
List<String> scannedResources = scanner.scan();
7878
resources.addAll(scannedResources);
7979
return new NativeImageResourceBuildItem(resources);
8080
}
8181

8282
@BuildStep
83-
ReflectiveClassBuildItem classes(BeanArchiveIndexBuildItem beanArchiveIndex) {
83+
ReflectiveClassBuildItem reflectiveClasses(BeanArchiveIndexBuildItem beanArchiveIndex) {
8484
List<String> classes = new ArrayList<>();
8585
classes.add(InitialScriptLoader.class.getName());
8686
IndexView indexView = beanArchiveIndex.getIndex();
@@ -93,11 +93,8 @@ ReflectiveClassBuildItem classes(BeanArchiveIndexBuildItem beanArchiveIndex) {
9393
@BuildStep
9494
@Record(STATIC_INIT)
9595
BeanContainerListenerBuildItem beanContainerListener(
96-
DomaRecorder recorder,
97-
MergedConfigurationBuildItem mergedConfiguration,
98-
LaunchModeBuildItem launchMode) {
99-
DomaConfiguration configuration = mergedConfiguration.getConfiguration();
100-
boolean isDevMode = launchMode.getLaunchMode() == LaunchMode.DEVELOPMENT;
101-
return new BeanContainerListenerBuildItem(recorder.configure(configuration, isDevMode));
96+
DomaRecorder recorder, DomaSettingsBuildItem settings, LaunchModeBuildItem launchMode) {
97+
return new BeanContainerListenerBuildItem(
98+
recorder.configure(settings.getSettings(), launchMode.getLaunchMode()));
10299
}
103100
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.seasar.doma.quarkus.deployment;
2+
3+
import io.quarkus.builder.item.SimpleBuildItem;
4+
import java.util.Objects;
5+
import org.seasar.doma.quarkus.runtime.DomaSettings;
6+
7+
public final class DomaSettingsBuildItem extends SimpleBuildItem {
8+
9+
private final DomaSettings settings;
10+
11+
public DomaSettingsBuildItem(DomaSettings settings) {
12+
this.settings = Objects.requireNonNull(settings);
13+
}
14+
15+
public DomaSettings getSettings() {
16+
return settings;
17+
}
18+
}

0 commit comments

Comments
 (0)