Skip to content

Commit da37a51

Browse files
author
Heliumdioxid
committed
Initial Commit
0 parents  commit da37a51

File tree

21 files changed

+753
-0
lines changed

21 files changed

+753
-0
lines changed

.gitignore

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Created by .ignore support plugin (hsz.mobi)
2+
##############################
3+
## Java
4+
##############################
5+
.mtj.tmp/
6+
*.class
7+
*.war
8+
*.ear
9+
*.nar
10+
hs_err_pid*
11+
12+
##############################
13+
## Maven
14+
##############################
15+
target/
16+
pom.xml.tag
17+
pom.xml.releaseBackup
18+
pom.xml.versionsBackup
19+
pom.xml.next
20+
pom.xml.bak
21+
release.properties
22+
dependency-reduced-pom.xml
23+
buildNumber.properties
24+
.mvn/timing.properties
25+
.mvn/wrapper/maven-wrapper.jar
26+
27+
##############################
28+
## IntelliJ
29+
##############################
30+
out/
31+
.idea/
32+
.idea_modules/
33+
*.iml
34+
*.ipr
35+
*.iws

README.md

Whitespace-only changes.

api/pom.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>database-api</artifactId>
7+
<groupId>de.heliumdioxid</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>api</artifactId>
13+
14+
<properties>
15+
<maven.compiler.source>8</maven.compiler.source>
16+
<maven.compiler.target>8</maven.compiler.target>
17+
</properties>
18+
19+
</project>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package de.heliumdioxid.databaseapi.api;
2+
3+
public abstract class ConnectionHandler<T extends DatabaseConnection> {
4+
5+
protected final T databaseConnection;
6+
7+
protected ConnectionHandler(final T databaseConnection) {
8+
this.databaseConnection = databaseConnection;
9+
}
10+
11+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package de.heliumdioxid.databaseapi.api;
2+
3+
import java.util.Optional;
4+
import java.util.concurrent.CompletableFuture;
5+
6+
/** Represents a connection to a database */
7+
public interface DatabaseConnection {
8+
9+
/**
10+
* Connects to a database
11+
* @return optional of {@link ConnectionHandler} of the database-connection
12+
*/
13+
CompletableFuture<Optional<ConnectionHandler>> connect() ;
14+
15+
/**
16+
* Disconnects from a database
17+
* @return boolean that shows whether the database-connection could be closed
18+
*/
19+
CompletableFuture<Boolean> disconnect();
20+
21+
/**
22+
* Checks if there is an active mysql-database-connection
23+
* @return boolean that shows whether an active database-connection exists
24+
*/
25+
CompletableFuture<Boolean> isConnected();
26+
27+
/**
28+
* Gets the {@link ConnectionHandler} of an active database-connection
29+
* @return {@link ConnectionHandler} of an active database-connection
30+
*/
31+
Optional<ConnectionHandler> getConnectionHandler();
32+
33+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package de.heliumdioxid.databaseapi.api.data;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@Getter
7+
@RequiredArgsConstructor
8+
public class ConnectionData {
9+
10+
private final String host, username, password, database;
11+
private final int port;
12+
13+
}

mongo/pom.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>database-api</artifactId>
7+
<groupId>de.heliumdioxid</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>mongo</artifactId>
13+
14+
<properties>
15+
<maven.compiler.source>8</maven.compiler.source>
16+
<maven.compiler.target>8</maven.compiler.target>
17+
</properties>
18+
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.mongodb</groupId>
22+
<artifactId>mongo-java-driver</artifactId>
23+
<version>3.12.10</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>de.heliumdioxid</groupId>
27+
<artifactId>api</artifactId>
28+
<version>1.0-SNAPSHOT</version>
29+
<scope>compile</scope>
30+
</dependency>
31+
</dependencies>
32+
33+
</project>
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package de.heliumdioxid.databaseapi.mongo;
2+
3+
import com.mongodb.BasicDBObject;
4+
import com.mongodb.client.MongoCollection;
5+
import com.mongodb.client.MongoCursor;
6+
import com.mongodb.client.MongoDatabase;
7+
import com.mongodb.client.model.Filters;
8+
import com.mongodb.client.result.DeleteResult;
9+
import com.mongodb.client.result.UpdateResult;
10+
import de.heliumdioxid.databaseapi.api.ConnectionHandler;
11+
import lombok.Getter;
12+
import org.bson.Document;
13+
import org.bson.conversions.Bson;
14+
15+
import java.util.Arrays;
16+
import java.util.List;
17+
import java.util.Optional;
18+
import java.util.concurrent.CompletableFuture;
19+
20+
@Getter
21+
public class MongoConnectionHandler extends ConnectionHandler<MongoDatabaseConnection> {
22+
23+
private final MongoDatabase mongoDatabase;
24+
25+
protected MongoConnectionHandler(MongoDatabaseConnection databaseConnection) {
26+
super(databaseConnection);
27+
this.mongoDatabase = databaseConnection.getMongoDatabase();
28+
}
29+
30+
public CompletableFuture<Optional<MongoCollection<Document>>> getCollection(final String collection) {
31+
return CompletableFuture.supplyAsync(() -> Optional.of(this.mongoDatabase.getCollection(collection))).exceptionally(throwable -> {
32+
throwable.printStackTrace();
33+
return Optional.empty();
34+
});
35+
}
36+
37+
public CompletableFuture<Void> insertDocument(final String collection, final Document document) {
38+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> {
39+
optionalMongoCollection.ifPresent(mongoCollection -> mongoCollection.insertOne(document));
40+
return null;
41+
});
42+
}
43+
44+
public CompletableFuture<Void> insertDocuments(final String collection, final Document... documents) {
45+
return insertDocuments(collection, Arrays.asList(documents));
46+
}
47+
48+
public CompletableFuture<Void> insertDocuments(final String collection, final List<Document> documents) {
49+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> {
50+
optionalMongoCollection.ifPresent(mongoCollection -> mongoCollection.insertMany(documents));
51+
return null;
52+
});
53+
}
54+
55+
public CompletableFuture<Optional<UpdateResult>> updateDocument(final String collection, final String fieldName, final Object value, final Bson operation) {
56+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> optionalMongoCollection.map(mongoCollection -> mongoCollection.updateOne(Filters.eq(fieldName, value), operation)));
57+
}
58+
59+
public CompletableFuture<Optional<UpdateResult>> updateDocuments(final String collection, final String fieldName, final Object value, final Bson operation) {
60+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> optionalMongoCollection.map(mongoCollection -> mongoCollection.updateMany(Filters.eq(fieldName, value), operation)));
61+
}
62+
63+
public CompletableFuture<Optional<DeleteResult>> deleteDocument(final String collection, final String fieldName, final Object value) {
64+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> optionalMongoCollection.map(mongoCollection -> mongoCollection.deleteOne(Filters.eq(fieldName, value))));
65+
}
66+
67+
public CompletableFuture<Optional<DeleteResult>> deleteDocuments(final String collection, final String fieldName, final Object value) {
68+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> optionalMongoCollection.map(mongoCollection -> mongoCollection.deleteMany(Filters.eq(fieldName, value))));
69+
}
70+
71+
public CompletableFuture<Optional<Document>> getDocument(final String collection, final String fieldName, final Object value) {
72+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> optionalMongoCollection.map(mongoCollection -> mongoCollection.find(Filters.eq(fieldName, value)).first()));
73+
}
74+
75+
public CompletableFuture<Optional<MongoCursor<Document>>> iterator(final String collection, final String fieldName, final Object value) {
76+
return getCollection(collection).thenApplyAsync(optionalMongoCollection -> optionalMongoCollection.map(mongoCollection -> mongoCollection.find(Filters.eq(fieldName, value)).iterator()));
77+
}
78+
79+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package de.heliumdioxid.databaseapi.mongo;
2+
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoClients;
5+
import com.mongodb.client.MongoDatabase;
6+
import de.heliumdioxid.databaseapi.api.ConnectionHandler;
7+
import de.heliumdioxid.databaseapi.api.DatabaseConnection;
8+
import de.heliumdioxid.databaseapi.mongo.config.MongoConnectionConfig;
9+
import lombok.Getter;
10+
import lombok.RequiredArgsConstructor;
11+
12+
import java.util.Optional;
13+
import java.util.concurrent.CompletableFuture;
14+
15+
@Getter
16+
@RequiredArgsConstructor
17+
public class MongoDatabaseConnection implements DatabaseConnection {
18+
19+
private MongoClient mongoClient;
20+
private MongoDatabase mongoDatabase;
21+
private MongoConnectionHandler mongoConnectionHandler;
22+
23+
private final MongoConnectionConfig mongoConnectionConfig;
24+
25+
/** {@inheritDoc} */
26+
@Override
27+
public CompletableFuture<Optional<ConnectionHandler>> connect() {
28+
return isConnected().thenApplyAsync(connected -> {
29+
if (connected) {
30+
if (this.mongoConnectionHandler == null)
31+
return Optional.empty();
32+
33+
return Optional.of(this.mongoConnectionHandler);
34+
}
35+
36+
this.mongoClient = MongoClients.create(this.mongoConnectionConfig.getMongoClientSettings());
37+
this.mongoDatabase = mongoClient.getDatabase(this.mongoConnectionConfig.getConnectionData().getDatabase());
38+
39+
this.mongoConnectionHandler = new MongoConnectionHandler(this);
40+
return Optional.of(this.mongoConnectionHandler);
41+
});
42+
}
43+
44+
/** {@inheritDoc} */
45+
@Override
46+
public CompletableFuture<Boolean> disconnect() {
47+
return isConnected().thenApplyAsync(connected -> {
48+
if (!connected)
49+
return true;
50+
51+
this.mongoClient.close();
52+
this.mongoClient = null;
53+
return true;
54+
});
55+
}
56+
57+
/** {@inheritDoc} */
58+
@Override
59+
public CompletableFuture<Boolean> isConnected() {
60+
return CompletableFuture.supplyAsync(() -> this.mongoClient != null && this.mongoDatabase != null);
61+
}
62+
63+
/** {@inheritDoc} */
64+
@Override
65+
public Optional<ConnectionHandler> getConnectionHandler() {
66+
if (this.mongoConnectionHandler == null)
67+
return Optional.empty();
68+
69+
return Optional.of(this.mongoConnectionHandler);
70+
}
71+
72+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package de.heliumdioxid.databaseapi.mongo.config;
2+
3+
import com.mongodb.ConnectionString;
4+
import com.mongodb.MongoClientSettings;
5+
import de.heliumdioxid.databaseapi.api.data.ConnectionData;
6+
import lombok.Getter;
7+
import lombok.RequiredArgsConstructor;
8+
import lombok.Setter;
9+
10+
@Getter
11+
@Setter
12+
@RequiredArgsConstructor
13+
public class MongoConnectionConfig {
14+
15+
private MongoClientSettings mongoClientSettings;
16+
private final ConnectionData connectionData;
17+
18+
/**
19+
* Gets new {@link MongoClientSettings} based on given {@link ConnectionData} with active ssh values
20+
* @return {@link MongoClientSettings} containing recommended properties and connection-information
21+
*/
22+
public MongoClientSettings applyDefaultMongoClientSettings() {
23+
this.mongoClientSettings = MongoClientSettings.builder().applyConnectionString(new ConnectionString("mongodb://" + this.connectionData.getUsername() + ":" + this.connectionData.getPassword() + "@" +
24+
this.connectionData.getHost() + ":" + this.connectionData.getPort() + "/" + this.connectionData.getDatabase() + "?ssl=true&sslInvalidHostNameAllowed=true")).build();
25+
return this.mongoClientSettings;
26+
}
27+
28+
}

mysql/pom.xml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>database-api</artifactId>
7+
<groupId>de.heliumdioxid</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>mysql</artifactId>
13+
14+
<properties>
15+
<maven.compiler.source>8</maven.compiler.source>
16+
<maven.compiler.target>8</maven.compiler.target>
17+
</properties>
18+
19+
<dependencies>
20+
<dependency>
21+
<groupId>com.zaxxer</groupId>
22+
<artifactId>HikariCP</artifactId>
23+
<version>4.0.3</version>
24+
<scope>compile</scope>
25+
</dependency>
26+
<dependency>
27+
<groupId>de.heliumdioxid</groupId>
28+
<artifactId>api</artifactId>
29+
<version>1.0-SNAPSHOT</version>
30+
<scope>compile</scope>
31+
</dependency>
32+
</dependencies>
33+
34+
</project>

0 commit comments

Comments
 (0)