Hexagonal pattern: Added console interfaces for players and administration.
This commit is contained in:
parent
121ed3cca8
commit
e17d72bca8
@ -22,19 +22,12 @@
|
||||
*/
|
||||
package com.iluwatar.hexagonal;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.iluwatar.hexagonal.domain.LotteryAdministration;
|
||||
import com.iluwatar.hexagonal.banking.InMemoryBank;
|
||||
import com.iluwatar.hexagonal.domain.LotteryConstants;
|
||||
import com.iluwatar.hexagonal.domain.LotteryNumbers;
|
||||
import com.iluwatar.hexagonal.domain.LotteryTicket;
|
||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||
import com.iluwatar.hexagonal.domain.LotteryService;
|
||||
import com.iluwatar.hexagonal.module.LotteryTestingModule;
|
||||
import com.iluwatar.hexagonal.sampledata.SampleData;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -68,64 +61,13 @@ import com.iluwatar.hexagonal.domain.LotteryService;
|
||||
*
|
||||
*/
|
||||
public class App {
|
||||
|
||||
private static final List<PlayerDetails> PLAYERS;
|
||||
|
||||
static {
|
||||
PLAYERS = new ArrayList<>();
|
||||
PLAYERS.add(PlayerDetails.create("john@google.com", "312-342", "+3242434242"));
|
||||
PLAYERS.add(PlayerDetails.create("mary@google.com", "234-987", "+23452346"));
|
||||
PLAYERS.add(PlayerDetails.create("steve@google.com", "833-836", "+63457543"));
|
||||
PLAYERS.add(PlayerDetails.create("wayne@google.com", "319-826", "+24626"));
|
||||
PLAYERS.add(PlayerDetails.create("johnie@google.com", "983-322", "+3635635"));
|
||||
PLAYERS.add(PlayerDetails.create("andy@google.com", "934-734", "+0898245"));
|
||||
PLAYERS.add(PlayerDetails.create("richard@google.com", "536-738", "+09845325"));
|
||||
PLAYERS.add(PlayerDetails.create("kevin@google.com", "453-936", "+2423532"));
|
||||
PLAYERS.add(PlayerDetails.create("arnold@google.com", "114-988", "+5646346524"));
|
||||
PLAYERS.add(PlayerDetails.create("ian@google.com", "663-765", "+928394235"));
|
||||
PLAYERS.add(PlayerDetails.create("robin@google.com", "334-763", "+35448"));
|
||||
PLAYERS.add(PlayerDetails.create("ted@google.com", "735-964", "+98752345"));
|
||||
PLAYERS.add(PlayerDetails.create("larry@google.com", "734-853", "+043842423"));
|
||||
PLAYERS.add(PlayerDetails.create("calvin@google.com", "334-746", "+73294135"));
|
||||
PLAYERS.add(PlayerDetails.create("jacob@google.com", "444-766", "+358042354"));
|
||||
PLAYERS.add(PlayerDetails.create("edwin@google.com", "895-345", "+9752435"));
|
||||
PLAYERS.add(PlayerDetails.create("mary@google.com", "760-009", "+34203542"));
|
||||
PLAYERS.add(PlayerDetails.create("lolita@google.com", "425-907", "+9872342"));
|
||||
PLAYERS.add(PlayerDetails.create("bruno@google.com", "023-638", "+673824122"));
|
||||
PLAYERS.add(PlayerDetails.create("peter@google.com", "335-886", "+5432503945"));
|
||||
PLAYERS.add(PlayerDetails.create("warren@google.com", "225-946", "+9872341324"));
|
||||
PLAYERS.add(PlayerDetails.create("monica@google.com", "265-748", "+134124"));
|
||||
PLAYERS.add(PlayerDetails.create("ollie@google.com", "190-045", "+34453452"));
|
||||
PLAYERS.add(PlayerDetails.create("yngwie@google.com", "241-465", "+9897641231"));
|
||||
PLAYERS.add(PlayerDetails.create("lars@google.com", "746-936", "+42345298345"));
|
||||
PLAYERS.add(PlayerDetails.create("bobbie@google.com", "946-384", "+79831742"));
|
||||
PLAYERS.add(PlayerDetails.create("tyron@google.com", "310-992", "+0498837412"));
|
||||
PLAYERS.add(PlayerDetails.create("tyrell@google.com", "032-045", "+67834134"));
|
||||
PLAYERS.add(PlayerDetails.create("nadja@google.com", "000-346", "+498723"));
|
||||
PLAYERS.add(PlayerDetails.create("wendy@google.com", "994-989", "+987324454"));
|
||||
PLAYERS.add(PlayerDetails.create("luke@google.com", "546-634", "+987642435"));
|
||||
PLAYERS.add(PlayerDetails.create("bjorn@google.com", "342-874", "+7834325"));
|
||||
PLAYERS.add(PlayerDetails.create("lisa@google.com", "024-653", "+980742154"));
|
||||
PLAYERS.add(PlayerDetails.create("anton@google.com", "834-935", "+876423145"));
|
||||
PLAYERS.add(PlayerDetails.create("bruce@google.com", "284-936", "+09843212345"));
|
||||
PLAYERS.add(PlayerDetails.create("ray@google.com", "843-073", "+678324123"));
|
||||
PLAYERS.add(PlayerDetails.create("ron@google.com", "637-738", "+09842354"));
|
||||
PLAYERS.add(PlayerDetails.create("xavier@google.com", "143-947", "+375245"));
|
||||
PLAYERS.add(PlayerDetails.create("harriet@google.com", "842-404", "+131243252"));
|
||||
InMemoryBank wireTransfers = new InMemoryBank();
|
||||
Random random = new Random();
|
||||
for (int i = 0; i < PLAYERS.size(); i++) {
|
||||
wireTransfers.setFunds(PLAYERS.get(i).getBankAccount(),
|
||||
random.nextInt(LotteryConstants.PLAYER_MAX_SALDO));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Program entry point
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
|
||||
Injector injector = Guice.createInjector(new LotteryModule());
|
||||
Injector injector = Guice.createInjector(new LotteryTestingModule());
|
||||
|
||||
// start new lottery round
|
||||
LotteryAdministration administartion = injector.getInstance(LotteryAdministration.class);
|
||||
@ -133,22 +75,9 @@ public class App {
|
||||
|
||||
// submit some lottery tickets
|
||||
LotteryService service = injector.getInstance(LotteryService.class);
|
||||
submitTickets(service, 20);
|
||||
SampleData.submitTickets(service, 20);
|
||||
|
||||
// perform lottery
|
||||
administartion.performLottery();
|
||||
}
|
||||
|
||||
private static void submitTickets(LotteryService lotteryService, int numTickets) {
|
||||
for (int i = 0; i < numTickets; i++) {
|
||||
LotteryTicket ticket = LotteryTicket.create(getRandomPlayerDetails(), LotteryNumbers.createRandom());
|
||||
lotteryService.submitTicket(ticket);
|
||||
}
|
||||
}
|
||||
|
||||
private static PlayerDetails getRandomPlayerDetails() {
|
||||
Random random = new Random();
|
||||
int idx = random.nextInt(PLAYERS.size());
|
||||
return PLAYERS.get(idx);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,84 @@
|
||||
/**
|
||||
* 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.administration;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.iluwatar.hexagonal.domain.LotteryAdministration;
|
||||
import com.iluwatar.hexagonal.domain.LotteryNumbers;
|
||||
import com.iluwatar.hexagonal.domain.LotteryService;
|
||||
import com.iluwatar.hexagonal.module.LotteryModule;
|
||||
import com.iluwatar.hexagonal.sampledata.SampleData;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* Console interface for lottery administration
|
||||
*/
|
||||
public class ConsoleAdministration {
|
||||
|
||||
/**
|
||||
* Program entry point
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
Injector injector = Guice.createInjector(new LotteryModule());
|
||||
LotteryAdministration administartion = injector.getInstance(LotteryAdministration.class);
|
||||
LotteryService service = injector.getInstance(LotteryService.class);
|
||||
SampleData.submitTickets(service, 20);
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
boolean exit = false;
|
||||
while (!exit) {
|
||||
printMainMenu();
|
||||
String cmd = readString(scanner);
|
||||
if (cmd.equals("1")) {
|
||||
administartion.getAllSubmittedTickets().forEach((k,v)->System.out.println("Key: " + k + " Value: " + v));
|
||||
} else if (cmd.equals("2")) {
|
||||
LotteryNumbers numbers = administartion.performLottery();
|
||||
System.out.println("The winning numbers: " + numbers);
|
||||
System.out.println("Time to reset the database for next round, eh?");
|
||||
} else if (cmd.equals("3")) {
|
||||
administartion.resetLottery();
|
||||
System.out.println("The lottery ticket database was cleared.");
|
||||
} else if (cmd.equals("4")) {
|
||||
exit = true;
|
||||
} else {
|
||||
System.out.println("Unknown command: " + cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void printMainMenu() {
|
||||
System.out.println("");
|
||||
System.out.println("### Lottery Administration Console ###");
|
||||
System.out.println("(1) Show all submitted tickets");
|
||||
System.out.println("(2) Perform lottery draw");
|
||||
System.out.println("(3) Reset lottery ticket database");
|
||||
System.out.println("(4) Exit");
|
||||
}
|
||||
|
||||
private static String readString(Scanner scanner) {
|
||||
System.out.print("> ");
|
||||
String cmd = scanner.next();
|
||||
return cmd;
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,9 @@ public class LotteryAdministration {
|
||||
private final WireTransfers wireTransfers;
|
||||
private final LotteryTicketChecker checker;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@Inject
|
||||
public LotteryAdministration(LotteryTicketRepository repository, LotteryNotifications notifications,
|
||||
WireTransfers wireTransfers) {
|
||||
|
@ -92,7 +92,12 @@ public class LotteryNumbers {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LotteryNumbers{" + "numbers=" + numbers + '}';
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Helper class for generating random numbers.
|
||||
|
@ -61,6 +61,11 @@ public class LotteryTicket {
|
||||
return lotteryNumbers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return playerDetails.toString() + " " + lotteryNumbers.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
|
@ -1,3 +1,25 @@
|
||||
/**
|
||||
* 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.domain;
|
||||
|
||||
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
||||
|
@ -34,8 +34,17 @@ public class LotteryTicketId {
|
||||
public LotteryTicketId() {
|
||||
id = UUID.randomUUID();
|
||||
}
|
||||
|
||||
public LotteryTicketId(String str) {
|
||||
id = UUID.fromString(str);
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return id.toString();
|
||||
}
|
||||
}
|
||||
|
@ -70,6 +70,13 @@ public class PlayerDetails {
|
||||
return phoneNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PlayerDetails{" + "emailAddress='" + emailAddress + '\''
|
||||
+ ", bankAccountNumber='" + bankAccountNumber + '\''
|
||||
+ ", phoneNumber='" + phoneNumber + '\'' + '}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
|
@ -20,7 +20,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
package com.iluwatar.hexagonal;
|
||||
package com.iluwatar.hexagonal.module;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.iluwatar.hexagonal.banking.InMemoryBank;
|
@ -20,7 +20,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
package com.iluwatar.hexagonal;
|
||||
package com.iluwatar.hexagonal.module;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.iluwatar.hexagonal.banking.InMemoryBank;
|
@ -0,0 +1,107 @@
|
||||
/**
|
||||
* 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.sampledata;
|
||||
|
||||
import com.iluwatar.hexagonal.banking.InMemoryBank;
|
||||
import com.iluwatar.hexagonal.domain.LotteryConstants;
|
||||
import com.iluwatar.hexagonal.domain.LotteryNumbers;
|
||||
import com.iluwatar.hexagonal.domain.LotteryService;
|
||||
import com.iluwatar.hexagonal.domain.LotteryTicket;
|
||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Utilities for creating sample lottery tickets
|
||||
*/
|
||||
public class SampleData {
|
||||
|
||||
private static final List<PlayerDetails> PLAYERS;
|
||||
|
||||
static {
|
||||
PLAYERS = new ArrayList<>();
|
||||
PLAYERS.add(PlayerDetails.create("john@google.com", "312-342", "+3242434242"));
|
||||
PLAYERS.add(PlayerDetails.create("mary@google.com", "234-987", "+23452346"));
|
||||
PLAYERS.add(PlayerDetails.create("steve@google.com", "833-836", "+63457543"));
|
||||
PLAYERS.add(PlayerDetails.create("wayne@google.com", "319-826", "+24626"));
|
||||
PLAYERS.add(PlayerDetails.create("johnie@google.com", "983-322", "+3635635"));
|
||||
PLAYERS.add(PlayerDetails.create("andy@google.com", "934-734", "+0898245"));
|
||||
PLAYERS.add(PlayerDetails.create("richard@google.com", "536-738", "+09845325"));
|
||||
PLAYERS.add(PlayerDetails.create("kevin@google.com", "453-936", "+2423532"));
|
||||
PLAYERS.add(PlayerDetails.create("arnold@google.com", "114-988", "+5646346524"));
|
||||
PLAYERS.add(PlayerDetails.create("ian@google.com", "663-765", "+928394235"));
|
||||
PLAYERS.add(PlayerDetails.create("robin@google.com", "334-763", "+35448"));
|
||||
PLAYERS.add(PlayerDetails.create("ted@google.com", "735-964", "+98752345"));
|
||||
PLAYERS.add(PlayerDetails.create("larry@google.com", "734-853", "+043842423"));
|
||||
PLAYERS.add(PlayerDetails.create("calvin@google.com", "334-746", "+73294135"));
|
||||
PLAYERS.add(PlayerDetails.create("jacob@google.com", "444-766", "+358042354"));
|
||||
PLAYERS.add(PlayerDetails.create("edwin@google.com", "895-345", "+9752435"));
|
||||
PLAYERS.add(PlayerDetails.create("mary@google.com", "760-009", "+34203542"));
|
||||
PLAYERS.add(PlayerDetails.create("lolita@google.com", "425-907", "+9872342"));
|
||||
PLAYERS.add(PlayerDetails.create("bruno@google.com", "023-638", "+673824122"));
|
||||
PLAYERS.add(PlayerDetails.create("peter@google.com", "335-886", "+5432503945"));
|
||||
PLAYERS.add(PlayerDetails.create("warren@google.com", "225-946", "+9872341324"));
|
||||
PLAYERS.add(PlayerDetails.create("monica@google.com", "265-748", "+134124"));
|
||||
PLAYERS.add(PlayerDetails.create("ollie@google.com", "190-045", "+34453452"));
|
||||
PLAYERS.add(PlayerDetails.create("yngwie@google.com", "241-465", "+9897641231"));
|
||||
PLAYERS.add(PlayerDetails.create("lars@google.com", "746-936", "+42345298345"));
|
||||
PLAYERS.add(PlayerDetails.create("bobbie@google.com", "946-384", "+79831742"));
|
||||
PLAYERS.add(PlayerDetails.create("tyron@google.com", "310-992", "+0498837412"));
|
||||
PLAYERS.add(PlayerDetails.create("tyrell@google.com", "032-045", "+67834134"));
|
||||
PLAYERS.add(PlayerDetails.create("nadja@google.com", "000-346", "+498723"));
|
||||
PLAYERS.add(PlayerDetails.create("wendy@google.com", "994-989", "+987324454"));
|
||||
PLAYERS.add(PlayerDetails.create("luke@google.com", "546-634", "+987642435"));
|
||||
PLAYERS.add(PlayerDetails.create("bjorn@google.com", "342-874", "+7834325"));
|
||||
PLAYERS.add(PlayerDetails.create("lisa@google.com", "024-653", "+980742154"));
|
||||
PLAYERS.add(PlayerDetails.create("anton@google.com", "834-935", "+876423145"));
|
||||
PLAYERS.add(PlayerDetails.create("bruce@google.com", "284-936", "+09843212345"));
|
||||
PLAYERS.add(PlayerDetails.create("ray@google.com", "843-073", "+678324123"));
|
||||
PLAYERS.add(PlayerDetails.create("ron@google.com", "637-738", "+09842354"));
|
||||
PLAYERS.add(PlayerDetails.create("xavier@google.com", "143-947", "+375245"));
|
||||
PLAYERS.add(PlayerDetails.create("harriet@google.com", "842-404", "+131243252"));
|
||||
InMemoryBank wireTransfers = new InMemoryBank();
|
||||
Random random = new Random();
|
||||
for (int i = 0; i < PLAYERS.size(); i++) {
|
||||
wireTransfers.setFunds(PLAYERS.get(i).getBankAccount(),
|
||||
random.nextInt(LotteryConstants.PLAYER_MAX_SALDO));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts lottery tickets into the database based on the sample data
|
||||
*/
|
||||
public static void submitTickets(LotteryService lotteryService, int numTickets) {
|
||||
for (int i = 0; i < numTickets; i++) {
|
||||
LotteryTicket ticket = LotteryTicket.create(getRandomPlayerDetails(), LotteryNumbers.createRandom());
|
||||
lotteryService.submitTicket(ticket);
|
||||
}
|
||||
}
|
||||
|
||||
private static PlayerDetails getRandomPlayerDetails() {
|
||||
Random random = new Random();
|
||||
int idx = random.nextInt(PLAYERS.size());
|
||||
return PLAYERS.get(idx);
|
||||
}
|
||||
}
|
@ -1,7 +1,137 @@
|
||||
/**
|
||||
* 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.service;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.iluwatar.hexagonal.banking.WireTransfers;
|
||||
import com.iluwatar.hexagonal.domain.LotteryNumbers;
|
||||
import com.iluwatar.hexagonal.domain.LotteryService;
|
||||
import com.iluwatar.hexagonal.domain.LotteryTicket;
|
||||
import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult;
|
||||
import com.iluwatar.hexagonal.domain.LotteryTicketId;
|
||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||
import com.iluwatar.hexagonal.module.LotteryModule;
|
||||
import com.iluwatar.hexagonal.sampledata.SampleData;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Optional;
|
||||
import java.util.Scanner;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Console interface for lottery players
|
||||
*/
|
||||
public class ConsoleLottery {
|
||||
|
||||
|
||||
/**
|
||||
* Program entry point
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
Injector injector = Guice.createInjector(new LotteryModule());
|
||||
LotteryService service = injector.getInstance(LotteryService.class);
|
||||
WireTransfers bank = injector.getInstance(WireTransfers.class);
|
||||
SampleData.submitTickets(service, 20);
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
boolean exit = false;
|
||||
while (!exit) {
|
||||
printMainMenu();
|
||||
String cmd = readString(scanner);
|
||||
if (cmd.equals("1")) {
|
||||
System.out.println("What is the account number?");
|
||||
String account = readString(scanner);
|
||||
System.out.println(String.format("The account %s has %d credits.", account, bank.getFunds(account)));
|
||||
} else if (cmd.equals("2")) {
|
||||
System.out.println("What is the account number?");
|
||||
String account = readString(scanner);
|
||||
System.out.println("How many credits do you want to deposit?");
|
||||
String amount = readString(scanner);
|
||||
bank.setFunds(account, Integer.parseInt(amount));
|
||||
System.out.println(String.format("The account %s now has %d credits.", account, bank.getFunds(account)));
|
||||
} else if (cmd.equals("3")) {
|
||||
System.out.println("What is your email address?");
|
||||
String email = readString(scanner);
|
||||
System.out.println("What is your bank account number?");
|
||||
String account = readString(scanner);
|
||||
System.out.println("What is your phone number?");
|
||||
String phone = readString(scanner);
|
||||
PlayerDetails details = PlayerDetails.create(email, account, phone);
|
||||
System.out.println("Give 4 comma separated lottery numbers?");
|
||||
String numbers = readString(scanner);
|
||||
String[] parts = numbers.split(",");
|
||||
Set<Integer> chosen = new HashSet<>();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
chosen.add(Integer.parseInt(parts[i]));
|
||||
}
|
||||
LotteryNumbers lotteryNumbers = LotteryNumbers.create(chosen);
|
||||
LotteryTicket lotteryTicket = LotteryTicket.create(details, lotteryNumbers);
|
||||
Optional<LotteryTicketId> id = service.submitTicket(lotteryTicket);
|
||||
if (id.isPresent()) {
|
||||
System.out.println("Submitted lottery ticket with id: " + id.get());
|
||||
} else {
|
||||
System.out.println("Failed submitting lottery ticket - please try again.");
|
||||
}
|
||||
} else if (cmd.equals("4")) {
|
||||
System.out.println("What is the ID of the lottery ticket?");
|
||||
String id = readString(scanner);
|
||||
System.out.println("Give the 4 comma separated winning numbers?");
|
||||
String numbers = readString(scanner);
|
||||
String[] parts = numbers.split(",");
|
||||
Set<Integer> winningNumbers = new HashSet<>();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
winningNumbers.add(Integer.parseInt(parts[i]));
|
||||
}
|
||||
LotteryTicketCheckResult result = service.checkTicketForPrize(
|
||||
new LotteryTicketId(id), LotteryNumbers.create(winningNumbers));
|
||||
if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.WIN_PRIZE)) {
|
||||
System.out.println("Congratulations! The lottery ticket has won!");
|
||||
} else if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.NO_PRIZE)) {
|
||||
System.out.println("Unfortunately the lottery ticket did not win.");
|
||||
} else {
|
||||
System.out.println("Such lottery ticket has not been submitted.");
|
||||
}
|
||||
} else if (cmd.equals("5")) {
|
||||
exit = true;
|
||||
} else {
|
||||
System.out.println("Unknown command");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void printMainMenu() {
|
||||
System.out.println("");
|
||||
System.out.println("### Lottery Service Console ###");
|
||||
System.out.println("(1) Query lottery account funds");
|
||||
System.out.println("(2) Add funds to lottery account");
|
||||
System.out.println("(3) Submit ticket");
|
||||
System.out.println("(4) Check ticket");
|
||||
System.out.println("(5) Exit");
|
||||
}
|
||||
|
||||
private static String readString(Scanner scanner) {
|
||||
System.out.print("> ");
|
||||
String cmd = scanner.next();
|
||||
return cmd;
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ import java.util.Optional;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
import com.iluwatar.hexagonal.LotteryTestingModule;
|
||||
import com.iluwatar.hexagonal.module.LotteryTestingModule;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user