-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDatabaseAdapter.java
More file actions
89 lines (74 loc) · 3.39 KB
/
Copy pathDatabaseAdapter.java
File metadata and controls
89 lines (74 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package io.github.md5sha256.democracypost.database;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import io.github.md5sha256.democracypost.DatabaseSettings;
import io.github.md5sha256.democracypost.model.PostalPackage;
import javax.annotation.Nonnull;
import java.io.Closeable;
import java.sql.Connection;
import java.sql.SQLException;
import java.time.Duration;
import java.util.List;
import java.util.UUID;
import java.util.logging.Logger;
public class DatabaseAdapter implements Closeable {
private final DatabaseSettings databaseSettings;
private final DatabaseSchema schema;
private HikariDataSource dataSource;
public DatabaseAdapter(@Nonnull DatabaseSettings databaseSettings, @Nonnull Logger logger, boolean skipUndeserializableItems) {
this.databaseSettings = databaseSettings;
this.schema = new MariaSchema(logger, skipUndeserializableItems);
}
public void init() throws SQLException {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(this.schema.formatJdbcUrl(this.databaseSettings.url()));
config.setDriverClassName(this.schema.driverClassName());
if (this.databaseSettings.requireAuth()) {
config.setUsername(this.databaseSettings.username());
config.setPassword(this.databaseSettings.password());
}
config.addDataSourceProperty("prepStmtCacheSize", 250);
config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
config.addDataSourceProperty("cachePrepStmts", true);
config.addDataSourceProperty("useServerPrepStmts", true);
this.dataSource = new HikariDataSource(config);
if (this.databaseSettings.initializeSchema()) {
try (Connection connection = this.dataSource.getConnection()) {
this.schema.initializeSchema(connection);
}
}
}
public void close() {
this.dataSource.close();
}
public void transferExpiredPackages(@Nonnull Duration returnPackageExpiryDuration) throws SQLException {
try (Connection connection = this.dataSource.getConnection()) {
this.schema.cleanupExpiredPackages(connection, returnPackageExpiryDuration);
}
}
public boolean isParcelTooLarge(@Nonnull PostalPackage postalPackage) {
return this.schema.isParcelTooLarge(postalPackage);
}
@Nonnull
public List<PostalPackage> getPackagesForRecipient(@Nonnull UUID recipient) throws SQLException {
try (Connection connection = this.dataSource.getConnection()) {
return this.schema.getPackagesForReceiver(connection, recipient);
}
}
public void addPackage(@Nonnull PostalPackage postalPackage) throws SQLException {
try (Connection connection = this.dataSource.getConnection()) {
this.schema.insertPackage(connection, postalPackage);
}
}
public void removePackage(@Nonnull UUID packageId) throws SQLException {
try (Connection connection = this.dataSource.getConnection()) {
this.schema.removePackage(connection, packageId);
}
}
@Nonnull
public PackageExpiryData getPackageExpiryData(@Nonnull UUID receiver, @Nonnull Duration fromExpiry) throws SQLException {
try (Connection connection = this.dataSource.getConnection()) {
return this.schema.getPackageExpiryData(connection, receiver, fromExpiry);
}
}
}