From 804ffc3ea78f84f40355a28122320beb438c6909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 20 Mar 2016 10:49:31 +0200 Subject: [PATCH] Added lottery service interface --- .../hexagonal/domain/LotteryService.java | 35 ++++++ .../domain/LotteryTicketSubmitResult.java | 115 ++++++++++++++++++ .../domain/LotteryTicketSubmitResultTest.java | 51 ++++++++ 3 files changed, 201 insertions(+) create mode 100644 hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryService.java create mode 100644 hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResult.java create mode 100644 hexagonal/src/test/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResultTest.java diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryService.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryService.java new file mode 100644 index 000000000..93f446d2b --- /dev/null +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryService.java @@ -0,0 +1,35 @@ +/** + * 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; + +/** + * + * Interface for submitting and checking lottery tickets. + * + */ +public interface LotteryService { + + LotteryTicketSubmitResult submitTicket(LotteryTicket ticket); + + void checkTicketForPrize(LotteryTicket ticket); +} diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResult.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResult.java new file mode 100644 index 000000000..a7a6fc148 --- /dev/null +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResult.java @@ -0,0 +1,115 @@ +/** + * 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 java.util.EnumSet; + +/** + * + * Immutable value object for passing lottery ticket submit results. + * + */ +public class LotteryTicketSubmitResult { + + /** + * + * Indicates if the submit was successful + * + */ + public enum Result {OK, ERROR}; + + /** + * + * Indicates the fields in the lottery ticket that have errors. + * + */ + public enum Fields {EMAIL, BANK_ACCOUNT, PHONE, NUMBERS}; + + private final Result result; + + private final EnumSet fields; + + /** + * Constructor. + */ + public LotteryTicketSubmitResult(Result submitResult) { + result = submitResult; + fields = EnumSet.noneOf(Fields.class); + } + + /** + * Constructor. + */ + public LotteryTicketSubmitResult(Result submitResult, EnumSet errorFields) { + result = submitResult; + fields = EnumSet.copyOf(errorFields); + } + + /** + * @return submit result + */ + public Result getResult() { + return result; + } + + /** + * @return fields that have errors + */ + public EnumSet getErrorFields() { + return EnumSet.copyOf(fields); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((fields == null) ? 0 : fields.hashCode()); + result = prime * result + ((this.result == null) ? 0 : this.result.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + LotteryTicketSubmitResult other = (LotteryTicketSubmitResult) obj; + if (fields == null) { + if (other.fields != null) { + return false; + } + } else if (!fields.equals(other.fields)) { + return false; + } + if (result != other.result) { + return false; + } + return true; + } +} diff --git a/hexagonal/src/test/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResultTest.java b/hexagonal/src/test/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResultTest.java new file mode 100644 index 000000000..697e32f69 --- /dev/null +++ b/hexagonal/src/test/java/com/iluwatar/hexagonal/domain/LotteryTicketSubmitResultTest.java @@ -0,0 +1,51 @@ +/** + * 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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.util.EnumSet; + +import org.junit.Test; + +import com.iluwatar.hexagonal.domain.LotteryTicketSubmitResult.Fields; +import com.iluwatar.hexagonal.domain.LotteryTicketSubmitResult.Result; + +/** + * + * Unit tests for {@link LotteryTicketSubmitResult} + * + */ +public class LotteryTicketSubmitResultTest { + + @Test + public void testEquals() { + LotteryTicketSubmitResult submitResult1 = new LotteryTicketSubmitResult(Result.OK); + LotteryTicketSubmitResult submitResult2 = new LotteryTicketSubmitResult(Result.OK); + assertEquals(submitResult1, submitResult2); + LotteryTicketSubmitResult submitResult3 = new LotteryTicketSubmitResult( + Result.ERROR, EnumSet.of(Fields.EMAIL, Fields.BANK_ACCOUNT)); + assertFalse(submitResult1.equals(submitResult3)); + } +}