From 49ddd20a8cf986463d28d5f7b258a1d79593f6d5 Mon Sep 17 00:00:00 2001 From: Liu-rj <11911808@mail.sustech.edu.cn> Date: Sat, 21 May 2022 20:55:20 +0800 Subject: [PATCH 1/3] update service to worker --- .../java/com/iluwatar/monitor/BankTest.java | 71 +++++++++++ .../java/com/iluwatar/monitor/MainTest.java | 42 +++++++ service-to-worker/README.md | 117 ++++++++++++++++++ service-to-worker/etc/service-to-worker.png | Bin 0 -> 90227 bytes service-to-worker/etc/service-to-worker.puml | 86 +++++++++++++ service-to-worker/pom.xml | 46 +++++++ .../com/iluwatar/servicetoworker/Action.java | 61 +++++++++ .../com/iluwatar/servicetoworker/App.java | 47 +++++++ .../com/iluwatar/servicetoworker/Command.java | 32 +++++ .../iluwatar/servicetoworker/Dispatcher.java | 55 ++++++++ .../servicetoworker/GiantController.java | 41 ++++++ .../iluwatar/servicetoworker/GiantModel.java | 86 +++++++++++++ .../iluwatar/servicetoworker/GiantView.java | 19 +++ .../iluwatar/servicetoworker/ActionTest.java | 87 +++++++++++++ .../com/iluwatar/servicetoworker/AppTest.java | 16 +++ .../servicetoworker/DispatcherTest.java | 52 ++++++++ .../servicetoworker/GiantControllerTest.java | 49 ++++++++ .../servicetoworker/GiantModelTest.java | 62 ++++++++++ .../servicetoworker/GiantViewTest.java | 25 ++++ 19 files changed, 994 insertions(+) create mode 100644 monitor/src/test/java/com/iluwatar/monitor/BankTest.java create mode 100644 monitor/src/test/java/com/iluwatar/monitor/MainTest.java create mode 100644 service-to-worker/README.md create mode 100644 service-to-worker/etc/service-to-worker.png create mode 100644 service-to-worker/etc/service-to-worker.puml create mode 100644 service-to-worker/pom.xml create mode 100644 service-to-worker/src/main/java/com/iluwatar/servicetoworker/Action.java create mode 100644 service-to-worker/src/main/java/com/iluwatar/servicetoworker/App.java create mode 100644 service-to-worker/src/main/java/com/iluwatar/servicetoworker/Command.java create mode 100644 service-to-worker/src/main/java/com/iluwatar/servicetoworker/Dispatcher.java create mode 100644 service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantController.java create mode 100644 service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantModel.java create mode 100644 service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantView.java create mode 100644 service-to-worker/src/test/java/com/iluwatar/servicetoworker/ActionTest.java create mode 100644 service-to-worker/src/test/java/com/iluwatar/servicetoworker/AppTest.java create mode 100644 service-to-worker/src/test/java/com/iluwatar/servicetoworker/DispatcherTest.java create mode 100644 service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantControllerTest.java create mode 100644 service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantModelTest.java create mode 100644 service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantViewTest.java diff --git a/monitor/src/test/java/com/iluwatar/monitor/BankTest.java b/monitor/src/test/java/com/iluwatar/monitor/BankTest.java new file mode 100644 index 000000000000..a961ec091ef6 --- /dev/null +++ b/monitor/src/test/java/com/iluwatar/monitor/BankTest.java @@ -0,0 +1,71 @@ +/* + *The MIT License + *Copyright © 2014-2021 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.monitor; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +public class BankTest { + + private static final int ACCOUNT_NUM = 4; + private static final int BASE_AMOUNT = 1000; + private static Bank bank; + + @BeforeAll + public static void Setup() { + bank = new Bank(ACCOUNT_NUM, BASE_AMOUNT); + } + + @AfterAll + public static void TearDown() { + bank = null; + } + + @Test + void GetAccountHaveNotBeNull() { + assertNotNull(bank.getAccounts()); + } + + @Test + void LengthOfAccountsHaveToEqualsToAccountNumConstant() { + assumeTrue(bank.getAccounts() != null); + assertEquals(ACCOUNT_NUM, bank.getAccounts().length); + } + + @Test + void TransferMethodHaveToTransferAmountFromAnAccountToOtherAccount() { + bank.transfer(0, 1, 1000); + int[] accounts = bank.getAccounts(); + assertEquals(0, accounts[0]); + assertEquals(2000, accounts[1]); + } + + @Test + void BalanceHaveToBeOK() { + assertEquals(4000, bank.getBalance()); + } +} diff --git a/monitor/src/test/java/com/iluwatar/monitor/MainTest.java b/monitor/src/test/java/com/iluwatar/monitor/MainTest.java new file mode 100644 index 000000000000..75a313519fdc --- /dev/null +++ b/monitor/src/test/java/com/iluwatar/monitor/MainTest.java @@ -0,0 +1,42 @@ +/* + *The MIT License + *Copyright © 2014-2021 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.monitor; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +/** Test if the application starts without throwing an exception. */ +class MainTest { + + @Test + void shouldExecuteApplicationWithoutException() { + assertDoesNotThrow(() -> Main.main(new String[] {})); + } + + @Test + void RunnerExecuteWithoutException() { + var bank = new Bank(4, 1000); + assertDoesNotThrow(() -> Main.runner(bank)); + } +} diff --git a/service-to-worker/README.md b/service-to-worker/README.md new file mode 100644 index 000000000000..db25ac69f56a --- /dev/null +++ b/service-to-worker/README.md @@ -0,0 +1,117 @@ +--- +layout: pattern +title: Service to Worker +folder: service-to-worker +permalink: /patterns/service-to-worker/ +categories: Architectural +tags: +- Decoupling +--- + +## Intent + +Combine a controller and dispatcher with views and helpers to handle client requests and prepare a dynamic presentation as the response. Controllers delegate content retrieval to helpers, which manage the population of the intermediate model for the view. A dispatcher is responsible for view management and navigation and can be encapsulated either within a controller or a separate component. + +## Explanation + +Real world example + +> In the classic MVC pattern, M refers to the business model, V refers to the user interface, and C is the controller. The purpose of using MVC is to separate the implementation code of M and V, so that the same program can use different forms of expression. In the Service to Worker pattern, the C directly controls the display of the V and can receive commands to control the dispatcher indirectly. The dispatcher stores different commands that can be used to modify the `model` with `action`s or to modify the display in the `view`s. + +In plain words + +> Service to Worker Pattern uses Dispatcher to combine the controller and the view to handle client requests and prepare a dynamic presentation as the response. + +**Programmatic Example** + +We modified this pattern based on a classic design patterns [Model View Controller Pattern](https://github.com/iluwatar/java-design-patterns/tree/master/model-view-controller) as the Class Diagram and two main classes `Dispatcher` and `Action` have been added. + +The Dispatcher, which encapsulates worker and view selection based on request information and/or an internal navigation model. + +```java +public class Dispatcher { + + private final GiantView giantView; + private final List actions; + + /** + * Instantiates a new Dispatcher. + * + * @param giantView the giant view + */ + public Dispatcher(GiantView giantView) { + this.giantView = giantView; + this.actions = new ArrayList<>(); + } + + /** + * Add an action. + * + * @param action the action + */ + void addAction(Action action) { + actions.add(action); + } + + /** + * Perform an action. + * + * @param s the s + * @param actionIndex the action index + */ + public void performAction(Command s, int actionIndex) { + actions.get(actionIndex).updateModel(s); + } + + /** + * Update view. + * + * @param giantModel the giant model + */ + public void updateView(GiantModel giantModel) { + giantView.displayGiant(giantModel); + } +} +``` + +The Action (Worker), which can process user input and perform a specific update on the model. + +```java +public class Action { + + private final GiantModel giant; + + /** + * Instantiates a new Action. + * + * @param giant the giant + */ + public Action(GiantModel giant) { + this.giant = giant; + } + + /** + * Update model based on command. + * + * @param command the command + */ + public void updateModel(Command command) { + setFatigue(command.getFatigue()); + setHealth(command.getHealth()); + setNourishment(command.getNourishment()); + } +} +``` + +Therefore, this example leverages the Service to Worker pattern to increase functionality cohesion and improve the business logic. + + +## Class diagram +![alt text](./etc/service-to-worker.png "Service to Worker") + +## Applicability +- For the business logic of web development, the responsibility of a dispatcher component may be to translate the logical name login into the resource name of an appropriate view, such as login.jsp, and dispatch to that view. To accomplish this translation, the dispatcher may access resources such as an XML configuration file that specifies the appropriate view to display. + +## Credits +* [J2EE Design Patterns](https://www.oreilly.com/library/view/j2ee-design-patterns/0596004273/re05.html) +* [Core J2EE Patterns](http://corej2eepatterns.com/Patterns/ServiceToWorker.htm) diff --git a/service-to-worker/etc/service-to-worker.png b/service-to-worker/etc/service-to-worker.png new file mode 100644 index 0000000000000000000000000000000000000000..864af5b389681e0b008a104efe948c2595cd08c4 GIT binary patch literal 90227 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 literal 0 HcmV?d00001 diff --git a/service-to-worker/etc/service-to-worker.puml b/service-to-worker/etc/service-to-worker.puml new file mode 100644 index 000000000000..c96c337a8bd8 --- /dev/null +++ b/service-to-worker/etc/service-to-worker.puml @@ -0,0 +1,86 @@ +@startuml +package com.iluwatar.servicetoworker { + class App { + + App() + + main(args : String[]) {static} + } + enum Health { + + DEAD {static} + + HEALTHY {static} + + WOUNDED {static} + - title : String + + toString() : String + } + enum Nourishment { + + HUNGRY {static} + + SATURATED {static} + + STARVING {static} + - title : String + + toString() : String + } + enum Fatigue { + + ALERT {static} + + SLEEPING {static} + + TIRED {static} + - title : String + + toString() : String + } + + class GiantController { + - dispatcher : Dispatcher + + GiantController(dispatcher : Dispatcher) + + setCommand(s : Command, index : int) + + updateView(giantModel : GiantModel) + } + + class GiantModel { + - fatigue : Fatigue + - health : Health + - nourishment : Nourishment + # GiantModel(health : Health, fatigue : Fatigue, nourishment : Nourishment) + + getFatigue() : Fatigue + + getHealth() : Health + + getNourishment() : Nourishment + + setFatigue(fatigue : Fatigue) + + setHealth(health : Health) + + setNourishment(nourishment : Nourishment) + + toString() : String + } + class GiantView { + - LOGGER : Logger {static} + + GiantView() + + displayGiant(giant : GiantModel) + } + + class Action{ + - giant : GiantModel + + Action(giant: GiantModel) + + updateModel(command: Command) + + setHealth(health : Health) + + setFatigue(fatigue : Fatigue) + + setNourishment(nourishment : Nourishment) + } + + class Dispatcher{ + - giantView : GiantView + - actions : ArrayList + + Dispatcher(giantView : GiantView) + + addAction(action: Action) + + performAction(s: Command, actionIndex: int) + + updateView(giant : GiantModel) + } +} +GiantModel --> Nourishment +GiantModel --> Fatigue +GiantModel --> Health + +GiantView ..> GiantModel +Dispatcher o-up- Action +GiantController -up-> Dispatcher + +GiantController .up.> GiantModel +Action --> GiantModel +Dispatcher -up-> GiantView +Dispatcher .left.> GiantModel + +@enduml \ No newline at end of file diff --git a/service-to-worker/pom.xml b/service-to-worker/pom.xml new file mode 100644 index 000000000000..29f7fe81f1f4 --- /dev/null +++ b/service-to-worker/pom.xml @@ -0,0 +1,46 @@ + + + + java-design-patterns + com.iluwatar + 1.26.0-SNAPSHOT + + 4.0.0 + + service-to-worker + + + + org.junit.jupiter + junit-jupiter-engine + test + + + com.iluwatar + model-view-controller + 1.26.0-SNAPSHOT + compile + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + + com.iluwatar.servicetoworker.App + + + + + + + + + \ No newline at end of file diff --git a/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Action.java b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Action.java new file mode 100644 index 000000000000..9f885757a851 --- /dev/null +++ b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Action.java @@ -0,0 +1,61 @@ +package com.iluwatar.servicetoworker; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; + +/** + * The type Action (Worker), which can process user input and perform a specific update on the + * model. + */ +public class Action { + + public GiantModel giant; + + /** + * Instantiates a new Action. + * + * @param giant the giant + */ + public Action(GiantModel giant) { + this.giant = giant; + } + + /** + * Update model based on command. + * + * @param command the command + */ + public void updateModel(Command command) { + setFatigue(command.getFatigue()); + setHealth(command.getHealth()); + setNourishment(command.getNourishment()); + } + + /** + * Sets health. + * + * @param health the health + */ + public void setHealth(Health health) { + giant.setHealth(health); + } + + /** + * Sets fatigue. + * + * @param fatigue the fatigue + */ + public void setFatigue(Fatigue fatigue) { + giant.setFatigue(fatigue); + } + + /** + * Sets nourishment. + * + * @param nourishment the nourishment + */ + public void setNourishment(Nourishment nourishment) { + giant.setNourishment(nourishment); + } +} diff --git a/service-to-worker/src/main/java/com/iluwatar/servicetoworker/App.java b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/App.java new file mode 100644 index 000000000000..2d41dba87196 --- /dev/null +++ b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/App.java @@ -0,0 +1,47 @@ +package com.iluwatar.servicetoworker; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; + +/** + * The front controller intercepts all requests and performs common functions using decorators. The + * front controller passes request information to the dispatcher, which uses the request and an + * internal model to chooses and execute appropriate actions. The actions process user input, + * translating it into appropriate updates to the model. The model applies business rules and stores + * the data persistently. Based on the user input and results of the actions, the dispatcher chooses + * a view. The view transforms the updated model data into a form suitable for the user. + */ +public class App { + + /** + * Program entry point. + * + * @param args command line args + */ + public static void main(String[] args) { + // create model, view and controller + var giant1 = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, Nourishment.SATURATED); + var giant2 = new GiantModel("giant2", Health.DEAD, Fatigue.SLEEPING, Nourishment.STARVING); + var action1 = new Action(giant1); + var action2 = new Action(giant2); + var view = new GiantView(); + var dispatcher = new Dispatcher(view); + dispatcher.addAction(action1); + dispatcher.addAction(action2); + var controller = new GiantController(dispatcher); + + // initial display + controller.updateView(giant1); + controller.updateView(giant2); + + // controller receives some interactions that affect the giant + controller.setCommand(new Command(Fatigue.SLEEPING, Health.HEALTHY, Nourishment.STARVING), 0); + controller.setCommand(new Command(Fatigue.ALERT, Health.HEALTHY, Nourishment.HUNGRY), 1); + + // redisplay + controller.updateView(giant1); + controller.updateView(giant2); + // controller receives some interactions that affect the giant + } +} diff --git a/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Command.java b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Command.java new file mode 100644 index 000000000000..e58cf85cb331 --- /dev/null +++ b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Command.java @@ -0,0 +1,32 @@ +package com.iluwatar.servicetoworker; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; +import lombok.Getter; + +/** + * The type Command. + */ +public class Command { + + @Getter + private final Fatigue fatigue; + @Getter + private final Health health; + @Getter + private final Nourishment nourishment; + + /** + * Instantiates a new Command. + * + * @param fatigue the fatigue + * @param health the health + * @param nourishment the nourishment + */ + public Command(Fatigue fatigue, Health health, Nourishment nourishment) { + this.fatigue = fatigue; + this.health = health; + this.nourishment = nourishment; + } +} diff --git a/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Dispatcher.java b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Dispatcher.java new file mode 100644 index 000000000000..511e08b11301 --- /dev/null +++ b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/Dispatcher.java @@ -0,0 +1,55 @@ +package com.iluwatar.servicetoworker; + +import java.util.ArrayList; +import java.util.List; +import lombok.Getter; + +/** + * The type Dispatcher, which encapsulates worker and view selection based on request information + * and/or an internal navigation model. + */ +public class Dispatcher { + + @Getter + private final GiantView giantView; + private final List actions; + + /** + * Instantiates a new Dispatcher. + * + * @param giantView the giant view + */ + public Dispatcher(GiantView giantView) { + this.giantView = giantView; + this.actions = new ArrayList<>(); + } + + /** + * Add an action. + * + * @param action the action + */ + void addAction(Action action) { + actions.add(action); + } + + /** + * Perform an action. + * + * @param s the s + * @param actionIndex the action index + */ + public void performAction(Command s, int actionIndex) { + actions.get(actionIndex).updateModel(s); + } + + /** + * Update view. + * + * @param giantModel the giant model + */ + public void updateView(GiantModel giantModel) { + giantView.displayGiant(giantModel); + } + +} diff --git a/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantController.java b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantController.java new file mode 100644 index 000000000000..6db186004c1f --- /dev/null +++ b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantController.java @@ -0,0 +1,41 @@ +package com.iluwatar.servicetoworker; + +import lombok.Getter; + +/** + * GiantController can update the giant data and redraw it using the view. Singleton object that + * intercepts all requests and performs common functions. + */ +public class GiantController { + + public Dispatcher dispatcher; + + /** + * Instantiates a new Giant controller. + * + * @param dispatcher the dispatcher + */ + public GiantController(Dispatcher dispatcher) { + this.dispatcher = dispatcher; + } + + /** + * Sets command to control the dispatcher. + * + * @param s the s + * @param index the index + */ + public void setCommand(Command s, int index) { + dispatcher.performAction(s, index); + } + + /** + * Update view. This is a simple implementation, in fact, View can be implemented in a concrete + * way + * + * @param giantModel the giant model + */ + public void updateView(GiantModel giantModel) { + dispatcher.updateView(giantModel); + } +} diff --git a/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantModel.java b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantModel.java new file mode 100644 index 000000000000..e0e67997588c --- /dev/null +++ b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantModel.java @@ -0,0 +1,86 @@ +package com.iluwatar.servicetoworker; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; +import lombok.Getter; + +/** + * GiantModel contains the giant data. + */ +public class GiantModel { + + private final com.iluwatar.model.view.controller.GiantModel model; + @Getter + private final String name; + + /** + * Instantiates a new Giant model. + * + * @param name the name + * @param health the health + * @param fatigue the fatigue + * @param nourishment the nourishment + */ + GiantModel(String name, Health health, Fatigue fatigue, Nourishment nourishment) { + this.name = name; + this.model = new com.iluwatar.model.view.controller.GiantModel(health, fatigue, + nourishment); + } + + /** + * Gets health. + * + * @return the health + */ + Health getHealth() { + return model.getHealth(); + } + + /** + * Sets health. + * + * @param health the health + */ + void setHealth(Health health) { + model.setHealth(health); + } + + /** + * Gets fatigue. + * + * @return the fatigue + */ + Fatigue getFatigue() { + return model.getFatigue(); + } + + void setFatigue(Fatigue fatigue) { + model.setFatigue(fatigue); + } + + /** + * Gets nourishment. + * + * @return the nourishment + */ + Nourishment getNourishment() { + return model.getNourishment(); + } + + /** + * Sets nourishment. + * + * @param nourishment the nourishment + */ + void setNourishment(Nourishment nourishment) { + model.setNourishment(nourishment); + } + + @Override + public String toString() { + return String + .format("Giant %s, The giant looks %s, %s and %s.", name, + model.getHealth(), model.getFatigue(), model.getNourishment()); + } +} diff --git a/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantView.java b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantView.java new file mode 100644 index 000000000000..cebe03a94ce5 --- /dev/null +++ b/service-to-worker/src/main/java/com/iluwatar/servicetoworker/GiantView.java @@ -0,0 +1,19 @@ +package com.iluwatar.servicetoworker; + +import lombok.extern.slf4j.Slf4j; + +/** + * GiantView displays the giant. + */ +@Slf4j +public class GiantView { + + /** + * Display the GiantModel simply. + * + * @param giant the giant + */ + public void displayGiant(GiantModel giant) { + LOGGER.info(giant.toString()); + } +} diff --git a/service-to-worker/src/test/java/com/iluwatar/servicetoworker/ActionTest.java b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/ActionTest.java new file mode 100644 index 000000000000..7c332f522426 --- /dev/null +++ b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/ActionTest.java @@ -0,0 +1,87 @@ +package com.iluwatar.servicetoworker; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; +import org.junit.jupiter.api.Test; + +/** + * The type Action test. + */ +class ActionTest { + + /** + * Verify if the health value is set properly though the constructor and setter + */ + @Test + void testSetHealth() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + Action action = new Action(model); + assertEquals(Health.HEALTHY, model.getHealth()); + var messageFormat = "Giant giant1, The giant looks %s, alert and saturated."; + for (final var health : Health.values()) { + action.setHealth(health); + assertEquals(health, model.getHealth()); + assertEquals(String.format(messageFormat, health), model.toString()); + } + } + + /** + * Verify if the fatigue level is set properly though the constructor and setter + */ + @Test + void testSetFatigue() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + Action action = new Action(model); + assertEquals(Fatigue.ALERT, model.getFatigue()); + var messageFormat = "Giant giant1, The giant looks healthy, %s and saturated."; + for (final var fatigue : Fatigue.values()) { + action.setFatigue(fatigue); + assertEquals(fatigue, model.getFatigue()); + assertEquals(String.format(messageFormat, fatigue), model.toString()); + } + } + + /** + * Verify if the nourishment level is set properly though the constructor and setter + */ + @Test + void testSetNourishment() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + Action action = new Action(model); + assertEquals(Nourishment.SATURATED, model.getNourishment()); + var messageFormat = "Giant giant1, The giant looks healthy, alert and %s."; + for (final var nourishment : Nourishment.values()) { + action.setNourishment(nourishment); + assertEquals(nourishment, model.getNourishment()); + assertEquals(String.format(messageFormat, nourishment), model.toString()); + } + } + + /** + * Test update model. + */ + @Test + void testUpdateModel() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + Action action = new Action(model); + assertEquals(Nourishment.SATURATED, model.getNourishment()); + for (final var nourishment : Nourishment.values()) { + for (final var fatigue : Fatigue.values()) { + for (final var health : Health.values()) { + Command cmd = new Command(fatigue, health, nourishment); + action.updateModel(cmd); + assertEquals(nourishment, model.getNourishment()); + assertEquals(fatigue, model.getFatigue()); + assertEquals(health, model.getHealth()); + } + } + } + } +} diff --git a/service-to-worker/src/test/java/com/iluwatar/servicetoworker/AppTest.java b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/AppTest.java new file mode 100644 index 000000000000..6611b0ab388d --- /dev/null +++ b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/AppTest.java @@ -0,0 +1,16 @@ +package com.iluwatar.servicetoworker; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +/** + * Application test + */ +class AppTest { + + @Test + void shouldExecuteApplicationWithoutException() { + assertDoesNotThrow(() -> App.main(new String[]{})); + } +} diff --git a/service-to-worker/src/test/java/com/iluwatar/servicetoworker/DispatcherTest.java b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/DispatcherTest.java new file mode 100644 index 000000000000..d8f6063db24e --- /dev/null +++ b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/DispatcherTest.java @@ -0,0 +1,52 @@ +package com.iluwatar.servicetoworker; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; +import org.junit.jupiter.api.Test; + +/** + * The type Dispatcher test. + */ +class DispatcherTest { + + /** + * Test perform action. + */ + @Test + void testPerformAction() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + Action action = new Action(model); + GiantView giantView = new GiantView(); + Dispatcher dispatcher = new Dispatcher(giantView); + assertEquals(Nourishment.SATURATED, model.getNourishment()); + dispatcher.addAction(action); + for (final var nourishment : Nourishment.values()) { + for (final var fatigue : Fatigue.values()) { + for (final var health : Health.values()) { + Command cmd = new Command(fatigue, health, nourishment); + dispatcher.performAction(cmd, 0); + assertEquals(nourishment, model.getNourishment()); + assertEquals(fatigue, model.getFatigue()); + assertEquals(health, model.getHealth()); + } + } + } + } + + @Test + void testUpdateView() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + GiantView giantView = new GiantView(); + Dispatcher dispatcher = new Dispatcher(giantView); + assertDoesNotThrow(() -> dispatcher.updateView(model)); + } +} + + + diff --git a/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantControllerTest.java b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantControllerTest.java new file mode 100644 index 000000000000..e9a982ce9454 --- /dev/null +++ b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantControllerTest.java @@ -0,0 +1,49 @@ +package com.iluwatar.servicetoworker; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; +import org.junit.jupiter.api.Test; + + +/** + * The type Giant controller test. + */ +class GiantControllerTest { + + /** + * Test set command. + */ + @Test + void testSetCommand() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + Action action = new Action(model); + GiantView giantView = new GiantView(); + Dispatcher dispatcher = new Dispatcher(giantView); + assertEquals(Nourishment.SATURATED, model.getNourishment()); + dispatcher.addAction(action); + GiantController controller = new GiantController(dispatcher); + controller.setCommand(new Command(Fatigue.ALERT, Health.HEALTHY, Nourishment.HUNGRY), 0); + assertEquals(Fatigue.ALERT, model.getFatigue()); + assertEquals(Health.HEALTHY, model.getHealth()); + assertEquals(Nourishment.HUNGRY, model.getNourishment()); + } + + /** + * Test update view. + */ + @Test + void testUpdateView() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + GiantView giantView = new GiantView(); + Dispatcher dispatcher = new Dispatcher(giantView); + GiantController giantController = new GiantController(dispatcher); + assertDoesNotThrow(() -> giantController.updateView(model)); + } + +} \ No newline at end of file diff --git a/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantModelTest.java b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantModelTest.java new file mode 100644 index 000000000000..d2416701dd54 --- /dev/null +++ b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantModelTest.java @@ -0,0 +1,62 @@ +package com.iluwatar.servicetoworker; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; +import org.junit.jupiter.api.Test; + +/** + * The type Giant model test. + */ +class GiantModelTest { + + /** + * Verify if the health value is set properly though the constructor and setter + */ + @Test + void testSetHealth() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + assertEquals(Health.HEALTHY, model.getHealth()); + var messageFormat = "Giant giant1, The giant looks %s, alert and saturated."; + for (final var health : Health.values()) { + model.setHealth(health); + assertEquals(health, model.getHealth()); + assertEquals(String.format(messageFormat, health), model.toString()); + } + } + + /** + * Verify if the fatigue level is set properly though the constructor and setter + */ + @Test + void testSetFatigue() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + assertEquals(Fatigue.ALERT, model.getFatigue()); + var messageFormat = "Giant giant1, The giant looks healthy, %s and saturated."; + for (final var fatigue : Fatigue.values()) { + model.setFatigue(fatigue); + assertEquals(fatigue, model.getFatigue()); + assertEquals(String.format(messageFormat, fatigue), model.toString()); + } + } + + /** + * Verify if the nourishment level is set properly though the constructor and setter + */ + @Test + void testSetNourishment() { + final var model = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + assertEquals(Nourishment.SATURATED, model.getNourishment()); + var messageFormat = "Giant giant1, The giant looks healthy, alert and %s."; + for (final var nourishment : Nourishment.values()) { + model.setNourishment(nourishment); + assertEquals(nourishment, model.getNourishment()); + assertEquals(String.format(messageFormat, nourishment), model.toString()); + } + } +} diff --git a/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantViewTest.java b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantViewTest.java new file mode 100644 index 000000000000..a33adf6198c6 --- /dev/null +++ b/service-to-worker/src/test/java/com/iluwatar/servicetoworker/GiantViewTest.java @@ -0,0 +1,25 @@ +package com.iluwatar.servicetoworker; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +import com.iluwatar.model.view.controller.Fatigue; +import com.iluwatar.model.view.controller.Health; +import com.iluwatar.model.view.controller.Nourishment; +import org.junit.jupiter.api.Test; + +/** + * The type Giant view test. + */ +class GiantViewTest { + + /** + * Test dispaly giant. + */ + @Test + void testDispalyGiant() { + GiantModel giantModel = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, + Nourishment.SATURATED); + GiantView giantView = new GiantView(); + assertDoesNotThrow(() -> giantView.displayGiant(giantModel)); + } +} From 3a7fe3893c027cbb3f7f91d2655470999f0f892e Mon Sep 17 00:00:00 2001 From: Liu-rj <11911808@mail.sustech.edu.cn> Date: Sat, 21 May 2022 23:05:45 +0800 Subject: [PATCH 2/3] update pom.xml and make GiantModel public --- .../java/com/iluwatar/model/view/controller/GiantModel.java | 2 +- pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java index d61c2abf68b7..6057a1ee7c7d 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java @@ -32,7 +32,7 @@ public class GiantModel { private Fatigue fatigue; private Nourishment nourishment; - GiantModel(Health health, Fatigue fatigue, Nourishment nourishment) { + public GiantModel(Health health, Fatigue fatigue, Nourishment nourishment) { this.health = health; this.fatigue = fatigue; this.nourishment = nourishment; diff --git a/pom.xml b/pom.xml index 064e7c1a7eff..e74701d56132 100644 --- a/pom.xml +++ b/pom.xml @@ -231,6 +231,7 @@ domain-model composite-view metadata-mapping + service-to-worker From b32053f269b318e42c821e7c802ba06ed5f7da94 Mon Sep 17 00:00:00 2001 From: Liu-rj <11911808@mail.sustech.edu.cn> Date: Sat, 21 May 2022 23:52:46 +0800 Subject: [PATCH 3/3] add javadoc for GaintModel --- .../java/com/iluwatar/model/view/controller/GiantModel.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java index 6057a1ee7c7d..a7c27398f0fb 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java @@ -32,6 +32,9 @@ public class GiantModel { private Fatigue fatigue; private Nourishment nourishment; + /** + * Instantiates a new GiantModel. + */ public GiantModel(Health health, Fatigue fatigue, Nourishment nourishment) { this.health = health; this.fatigue = fatigue;