diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java index 3da65e156..2a18d8986 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java @@ -22,6 +22,7 @@ */ package com.iluwatar.hexagonal.banking; +import com.iluwatar.hexagonal.mongo.MongoConnectionProperties; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; @@ -35,8 +36,6 @@ import java.util.ArrayList; */ public class MongoBank implements WireTransfers { - private static final String DEFAULT_HOST = "localhost"; - private static final int DEFAULT_PORT = 27017; private static final String DEFAULT_DB = "lotteryDB"; private static final String DEFAULT_ACCOUNTS_COLLECTION = "accounts"; @@ -54,25 +53,26 @@ public class MongoBank implements WireTransfers { /** * Constructor accepting parameters */ - public MongoBank(String host, int port, String dbName, String accountsCollectionName) { - connect(host, port, dbName, accountsCollectionName); + public MongoBank(String dbName, String accountsCollectionName) { + connect(dbName, accountsCollectionName); } /** * Connect to database with default parameters */ public void connect() { - connect(DEFAULT_HOST, DEFAULT_PORT, DEFAULT_DB, DEFAULT_ACCOUNTS_COLLECTION); + connect(DEFAULT_DB, DEFAULT_ACCOUNTS_COLLECTION); } /** * Connect to database with given parameters */ - public void connect(String host, int port, String dbName, String accountsCollectionName) { + public void connect(String dbName, String accountsCollectionName) { if (mongoClient != null) { mongoClient.close(); } - mongoClient = new MongoClient(host , port); + MongoConnectionProperties properties = new MongoConnectionProperties().load(); + mongoClient = new MongoClient(properties.getHost(), properties.getPort()); database = mongoClient.getDatabase(dbName); accountsCollection = database.getCollection(accountsCollectionName); } diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java index ff0439af8..73ff40b78 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java @@ -26,6 +26,7 @@ import com.iluwatar.hexagonal.domain.LotteryNumbers; import com.iluwatar.hexagonal.domain.LotteryTicket; import com.iluwatar.hexagonal.domain.LotteryTicketId; import com.iluwatar.hexagonal.domain.PlayerDetails; +import com.iluwatar.hexagonal.mongo.MongoConnectionProperties; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; @@ -43,8 +44,6 @@ import java.util.Optional; */ public class MongoTicketRepository implements LotteryTicketRepository { - private static final String DEFAULT_HOST = "localhost"; - private static final int DEFAULT_PORT = 27017; private static final String DEFAULT_DB = "lotteryDB"; private static final String DEFAULT_TICKETS_COLLECTION = "lotteryTickets"; private static final String DEFAULT_COUNTERS_COLLECTION = "counters"; @@ -64,27 +63,28 @@ public class MongoTicketRepository implements LotteryTicketRepository { /** * Constructor accepting parameters */ - public MongoTicketRepository(String host, int port, String dbName, String ticketsCollectionName, + public MongoTicketRepository(String dbName, String ticketsCollectionName, String countersCollectionName) { - connect(host, port, dbName, ticketsCollectionName, countersCollectionName); + connect(dbName, ticketsCollectionName, countersCollectionName); } /** * Connect to database with default parameters */ public void connect() { - connect(DEFAULT_HOST, DEFAULT_PORT, DEFAULT_DB, DEFAULT_TICKETS_COLLECTION, DEFAULT_COUNTERS_COLLECTION); + connect(DEFAULT_DB, DEFAULT_TICKETS_COLLECTION, DEFAULT_COUNTERS_COLLECTION); } /** * Connect to database with given parameters */ - public void connect(String host, int port, String dbName, String ticketsCollectionName, + public void connect(String dbName, String ticketsCollectionName, String countersCollectionName) { if (mongoClient != null) { mongoClient.close(); } - mongoClient = new MongoClient(host , port); + MongoConnectionProperties properties = new MongoConnectionProperties().load(); + mongoClient = new MongoClient(properties.getHost(), properties.getPort()); database = mongoClient.getDatabase(dbName); ticketsCollection = database.getCollection(ticketsCollectionName); countersCollection = database.getCollection(countersCollectionName); diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionProperties.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionProperties.java new file mode 100644 index 000000000..20b1876f6 --- /dev/null +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionProperties.java @@ -0,0 +1,80 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.hexagonal.mongo; + +import java.io.FileInputStream; +import java.util.Properties; + +/** + * Mongo connection properties + */ +public class MongoConnectionProperties { + + private static final String DEFAULT_HOST = "localhost"; + private static final int DEFAULT_PORT = 27017; + + private String host; + private int port; + + /** + * Constructor + */ + public MongoConnectionProperties() { + this.host = DEFAULT_HOST; + this.port = DEFAULT_PORT; + } + + /** + * @return host name + */ + public String getHost() { + return host; + } + + /** + * @return port number + */ + public int getPort() { + return port; + } + + /** + * Try to load connection properties from file. + * Fall back to default connection properties. + */ + public MongoConnectionProperties load() { + String path = System.getProperty("hexagonal.properties.path"); + Properties properties = new Properties(); + if (path != null) { + try (FileInputStream fin = new FileInputStream(path)) { + properties.load(fin); + this.host = properties.getProperty("host"); + this.port = Integer.parseInt(properties.getProperty("port")); + } catch (Exception e) { + // error occurred, use default properties + e.printStackTrace(); + } + } + return this; + } +} diff --git a/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java b/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java index ad142f028..26041b174 100644 --- a/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java +++ b/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java @@ -22,6 +22,7 @@ */ package com.iluwatar.hexagonal.banking; +import com.iluwatar.hexagonal.mongo.MongoConnectionProperties; import com.mongodb.MongoClient; import org.junit.Before; import org.junit.Ignore; @@ -35,8 +36,6 @@ import static org.junit.Assert.assertEquals; @Ignore public class MongoBankTest { - private static final String TEST_HOST = "localhost"; - private static final int TEST_PORT = 27017; private static final String TEST_DB = "lotteryDBTest"; private static final String TEST_ACCOUNTS_COLLECTION = "testAccounts"; @@ -44,10 +43,11 @@ public class MongoBankTest { @Before public void init() { - MongoClient mongoClient = new MongoClient(TEST_HOST, TEST_PORT); + MongoConnectionProperties properties = new MongoConnectionProperties().load(); + MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort()); mongoClient.dropDatabase(TEST_DB); mongoClient.close(); - mongoBank = new MongoBank(TEST_HOST, TEST_PORT, TEST_DB, TEST_ACCOUNTS_COLLECTION); + mongoBank = new MongoBank(TEST_DB, TEST_ACCOUNTS_COLLECTION); } @Test diff --git a/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java b/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java index 45fa1cc67..a29b535f6 100644 --- a/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java +++ b/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java @@ -26,6 +26,7 @@ import com.iluwatar.hexagonal.domain.LotteryNumbers; import com.iluwatar.hexagonal.domain.LotteryTicket; import com.iluwatar.hexagonal.domain.LotteryTicketId; import com.iluwatar.hexagonal.domain.PlayerDetails; +import com.iluwatar.hexagonal.mongo.MongoConnectionProperties; import com.mongodb.MongoClient; import org.junit.Before; import org.junit.Ignore; @@ -42,8 +43,6 @@ import static org.junit.Assert.assertTrue; @Ignore public class MongoTicketRepositoryTest { - private static final String TEST_HOST = "localhost"; - private static final int TEST_PORT = 27017; private static final String TEST_DB = "lotteryTestDB"; private static final String TEST_TICKETS_COLLECTION = "lotteryTestTickets"; private static final String TEST_COUNTERS_COLLECTION = "testCounters"; @@ -52,10 +51,11 @@ public class MongoTicketRepositoryTest { @Before public void init() { - MongoClient mongoClient = new MongoClient(TEST_HOST, TEST_PORT); + MongoConnectionProperties properties = new MongoConnectionProperties().load(); + MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort()); mongoClient.dropDatabase(TEST_DB); mongoClient.close(); - repository = new MongoTicketRepository(TEST_HOST, TEST_PORT, TEST_DB, TEST_TICKETS_COLLECTION, + repository = new MongoTicketRepository(TEST_DB, TEST_TICKETS_COLLECTION, TEST_COUNTERS_COLLECTION); }