diff --git a/.gitignore b/.gitignore index 8bad5633addd63a1c0e8ae864622992d8892ea48..53677154cab7caa0a7f2978e9d550f2618be3e2b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/banking-server/target/ +banking-server/target/ +banking-client/target/ +banking-client/.idea/ diff --git a/banking-client/banking-client.iml b/banking-client/banking-client.iml deleted file mode 100644 index c90834f2d607afe55e6104d8aa2cdfffb713f688..0000000000000000000000000000000000000000 --- a/banking-client/banking-client.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/banking-client/pom.xml b/banking-client/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f45cf6384ce4c65e2ed9129d3c20e1497114acf --- /dev/null +++ b/banking-client/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + org.example + banking-client + 1.0-SNAPSHOT + + + 11 + 11 + + + + org.projectlombok + lombok + 1.18.24 + provided + + + \ No newline at end of file diff --git a/banking-client/src/main/java/ufrn/imd/BankingClientApp.java b/banking-client/src/main/java/ufrn/imd/BankingClientApp.java new file mode 100644 index 0000000000000000000000000000000000000000..bf72420c1c95a5e79e86df3ee5c5464009708735 --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/BankingClientApp.java @@ -0,0 +1,30 @@ +package ufrn.imd; + +import lombok.extern.java.Log; +import ufrn.imd.controller.Controller; +import ufrn.imd.domain.Account; +import ufrn.imd.domain.Client; +import ufrn.imd.utils.MachineState; + +import java.net.MalformedURLException; +import java.rmi.Naming; +import java.rmi.NotBoundException; +import java.rmi.RemoteException; + +import static ufrn.imd.utils.MachineState.*; +import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE; + +@Log +public class BankingClientApp { + public static void main(String[] args) throws MalformedURLException, NotBoundException, RemoteException { + + MachineState mS = new MachineState(); + + while(mS.quit()) { + mS.render(); + mS.processEvents(); + mS.update(); + } + + } +} diff --git a/banking-client/src/ufrn/imd/controller/Controller.java b/banking-client/src/main/java/ufrn/imd/controller/Controller.java similarity index 58% rename from banking-client/src/ufrn/imd/controller/Controller.java rename to banking-client/src/main/java/ufrn/imd/controller/Controller.java index ebdc052114a1ec006c253cdf5d043b3be3451176..b096e53ac2b72da6bd16bab300631399a7a479f8 100644 --- a/banking-client/src/ufrn/imd/controller/Controller.java +++ b/banking-client/src/main/java/ufrn/imd/controller/Controller.java @@ -1,10 +1,13 @@ package ufrn.imd.controller; -import ufrn.imd.message.Client; +import ufrn.imd.domain.Client; +import ufrn.imd.utils.ServerResponse; import java.rmi.Remote; import java.rmi.RemoteException; public interface Controller extends Remote { public void registerClient(Client client) throws RemoteException; + + public ServerResponse getResponse(Object client) throws RemoteException; } diff --git a/banking-client/src/ufrn/imd/domain/Account.java b/banking-client/src/main/java/ufrn/imd/domain/Account.java similarity index 100% rename from banking-client/src/ufrn/imd/domain/Account.java rename to banking-client/src/main/java/ufrn/imd/domain/Account.java diff --git a/banking-client/src/main/java/ufrn/imd/domain/Client.java b/banking-client/src/main/java/ufrn/imd/domain/Client.java new file mode 100644 index 0000000000000000000000000000000000000000..b5c241b26e361d8e637b36b6a02961fb9bc4ec1c --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/domain/Client.java @@ -0,0 +1,17 @@ +package ufrn.imd.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import ufrn.imd.domain.Account; + +import java.io.Serializable; +import java.util.Optional; + +@Data +@AllArgsConstructor +public class Client implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer id; + +} diff --git a/banking-client/src/main/java/ufrn/imd/utils/MachineState.java b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java new file mode 100644 index 0000000000000000000000000000000000000000..a955e56a2d02b24d76acdc477b54e93bdcea545f --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java @@ -0,0 +1,131 @@ +package ufrn.imd.utils; + +import lombok.Data; +import ufrn.imd.controller.Controller; +import ufrn.imd.domain.Account; +import ufrn.imd.domain.Client; +import ufrn.imd.utils.message.DepositMessage; + +import java.net.MalformedURLException; +import java.rmi.Naming; +import java.rmi.NotBoundException; +import java.rmi.RemoteException; +import java.util.Scanner; + +import static ufrn.imd.utils.NameSpace.HOST_BALANCE_SERVICE; +import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE; + +@Data +public class MachineState { + + public static final String INITIAL= "INITIAL"; + public static final String READ = "READ"; + public static final String DEPOSIT = "DEPOSIT"; + public static final String BALANCE = "BALANCE"; + + public static final String START = "START"; + public static final String INVALID_INPUT = "INVALID_INPUT"; + public static final String QUIT = "QUIT"; + + private String state; + private Scanner sc; + private String inputValue; + + public MachineState() { + state = INITIAL; + inputValue = new String(); + sc = new Scanner(System.in); + } + + public Boolean quit() { + return !state.equals(QUIT); + } + + public void update() { + if(state.equals(INITIAL)) { + state = START; + } else if(state.equals(START)) { + state = READ; + } else if(state.equals(READ)) { + state = inputValue; + } else if(state.equals(INVALID_INPUT)) { + state = START; + } else if(state.equals(DEPOSIT)) { + state = START; + } else if(state.equals(BALANCE)) { + state = START; + } + } + + public void processEvents() throws MalformedURLException, NotBoundException, RemoteException { + if(state.equals(READ)) { + inputValue = sc.nextLine().trim().toUpperCase(); + if(!inputValue.isEmpty() && + !inputValue.equals(QUIT) && + !inputValue.equals(DEPOSIT) && + !inputValue.equals(BALANCE)) { + inputValue = INVALID_INPUT; + } + } else if(state.equals(DEPOSIT)) { + String v = sc.nextLine(); + Client client = new Client(1); + DepositMessage depositMessage = new DepositMessage(client, Double.parseDouble(v)); + Controller server = (Controller) Naming.lookup(HOST_DEPOSIT_SERVICE); + ServerResponse response = server.getResponse(depositMessage); + if(response.getStatus() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance()) + ); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + } else if(state.equals(BALANCE)) { + Client client = new Client(1); + Controller server = (Controller) Naming.lookup(HOST_BALANCE_SERVICE); + ServerResponse response = server.getResponse(client); + if(response.getStatus() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance()) + ); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + } + } + + public void render() { + try { + if(state.equals(INITIAL)) { + System.out.println(">>> Initializing..."); + Thread.sleep(1000); + } else if(state.equals(START)) { + System.out.println("These are the avaliable operations"); + System.out.println("---------------------------------"); + System.out.println(" - deposit \t - balance"); + System.out.println(" - quit"); + + System.out.println("---------------------------------"); + Thread.sleep(1000); + } else if(state.equals(READ)) { + System.out.println(">>> Please enter with wich operation do you want"); + } else if(state.equals(INVALID_INPUT)) { + System.out.println(">>> Please enter with a VALID operation"); + Thread.sleep(3000); + } else if(state.equals(DEPOSIT)) { + System.out.println(">>> Starting deposit operation"); + System.out.println(">>> Please enter with the value that you want deposit"); + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/banking-client/src/ufrn/imd/nameSpace/NameSpace.java b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java similarity index 50% rename from banking-client/src/ufrn/imd/nameSpace/NameSpace.java rename to banking-client/src/main/java/ufrn/imd/utils/NameSpace.java index b30b2d12181db58936cf1550185bf2e96c66bb2d..4bc802f6489a95bc8c7e7d95101c782fdaf09d3d 100644 --- a/banking-client/src/ufrn/imd/nameSpace/NameSpace.java +++ b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java @@ -1,6 +1,9 @@ -package ufrn.imd.nameSpace; +package ufrn.imd.utils; public class NameSpace { public static final Integer PORT_DEPOSIT_SERVICE = 1907; + public static final Integer PORT_BALANCE_SERVICE = 1908; public static final String HOST_DEPOSIT_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit"); + public static final String HOST_BALANCE_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_BALANCE_SERVICE, "balance"); + } diff --git a/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..4c1115b4648ee5503d0ebdb68cc5982e97f96794 --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java @@ -0,0 +1,20 @@ +package ufrn.imd.utils; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class ServerResponse implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer status; + private String message; + private Object body; +} diff --git a/banking-client/src/main/java/ufrn/imd/utils/message/DepositMessage.java b/banking-client/src/main/java/ufrn/imd/utils/message/DepositMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..4b6e3da72f55566ba318c15e0595d2329171c904 --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/utils/message/DepositMessage.java @@ -0,0 +1,17 @@ +package ufrn.imd.utils.message; + +import lombok.AllArgsConstructor; +import lombok.Data; +import ufrn.imd.domain.Client; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +public class DepositMessage implements Serializable { + + private static final long serialVersionUID = 2L; + + private Client client; + private Double value; +} diff --git a/banking-client/src/ufrn/imd/BankingClientApp.java b/banking-client/src/ufrn/imd/BankingClientApp.java deleted file mode 100644 index 72fe8208bfae12ad54c1eebe2cd8e911f1956e53..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/BankingClientApp.java +++ /dev/null @@ -1,27 +0,0 @@ -package ufrn.imd; - -import ufrn.imd.controller.Controller; -import ufrn.imd.domain.Account; -import ufrn.imd.log.Log; -import ufrn.imd.message.Client; - -import java.net.MalformedURLException; -import java.rmi.Naming; -import java.rmi.NotBoundException; -import java.rmi.RemoteException; - -import static ufrn.imd.nameSpace.NameSpace.HOST_DEPOSIT_SERVICE; - -public class BankingClientApp { - public static void main(String[] args) throws MalformedURLException, NotBoundException, RemoteException { - final Integer PORT = 1097; - Log.info(BankingClientApp.class, - String.format("connecting with server in host %s", HOST_DEPOSIT_SERVICE) - ); - Controller server = (Controller) Naming.lookup(HOST_DEPOSIT_SERVICE); - - Client client = new Client(new Account(1, "222", 10.00)); - Log.info(BankingClientApp.class, "registring user in the server"); - server.registerClient(client); - } -} diff --git a/banking-client/src/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking-client/src/ufrn/imd/controller/impl/DepositControllerImpl.java deleted file mode 100644 index a70dcb0708851835d323fb55be20b5013e60a4f0..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/controller/impl/DepositControllerImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -package ufrn.imd.controller.impl; - -import ufrn.imd.controller.Controller; -import ufrn.imd.log.Log; -import ufrn.imd.message.Client; -import ufrn.imd.service.DepositService; - -import java.rmi.RemoteException; -import java.rmi.server.UnicastRemoteObject; -import java.util.ArrayList; -import java.util.List; - -public class DepositControllerImpl extends UnicastRemoteObject implements Controller { - - private volatile List clients = new ArrayList<>(); - - public DepositControllerImpl(DepositService service) throws RemoteException{ - super(); - Log.info(DepositControllerImpl.class, "Starting Deposit service!"); - new Notify(service).start(); - } - public void registerClient(Client client) throws RemoteException { - - clients.add(client); - System.out.println("Novo cliente registrado com sucesso! Total: "+clients.size()); - } - - - private class Notify extends Thread{ - - private final DepositService service; - - public Notify(DepositService service) { - super(); - this.service = service; - } - public void run() { - - for(;;) { - - if(clients.size() > 0) { - - System.out.println("Notificando clientes"); - - int i = 0; - for (Client client : clients) { - - try { - this.service.deposit(client.getBalance(), client.getAccount()); - } catch (RemoteException e) { - e.printStackTrace(); - } - } - - - try { - Thread.sleep(15 * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - } - - } - } -} diff --git a/banking-client/src/ufrn/imd/domain/Client.java b/banking-client/src/ufrn/imd/domain/Client.java deleted file mode 100644 index d1ca0707fd4e79bd9f7514b42f4047614a5b8fdf..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/domain/Client.java +++ /dev/null @@ -1,23 +0,0 @@ -package ufrn.imd.domain; - -import ufrn.imd.domain.Account; - -import java.io.Serializable; -import java.util.Optional; - -public class Client implements Serializable { - private static final long serialVersionUID = 1L; - - private Account account; - - public Client(Account account) { - this.account = account; - } - - public Double getBalance() { - return account.getBalance(); - } - public Optional getAccount() { - return Optional.of(account); - } -} diff --git a/banking-client/src/ufrn/imd/log/Log.java b/banking-client/src/ufrn/imd/log/Log.java deleted file mode 100644 index c193705cf9cac05da9853b6a039a58aa4576370d..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/log/Log.java +++ /dev/null @@ -1,10 +0,0 @@ -package ufrn.imd.log; - -public class Log { - - public static void info(Class path, String text) { - System.out.println( - String.format("[LOG] %s - %s", path , text) - ); - } -} diff --git a/banking-client/src/ufrn/imd/service/BalanceService.java b/banking-client/src/ufrn/imd/service/BalanceService.java deleted file mode 100644 index 2d9315cb86301d9188170ac76fcbceabdb37c1f6..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/service/BalanceService.java +++ /dev/null @@ -1,11 +0,0 @@ -package ufrn.imd.service; - -import ufrn.imd.domain.Account; - -import java.rmi.Remote; -import java.rmi.RemoteException; - -public interface BalanceService extends Remote { - - public void balance(Account account) throws RemoteException; -} diff --git a/banking-client/src/ufrn/imd/service/DepositService.java b/banking-client/src/ufrn/imd/service/DepositService.java deleted file mode 100644 index f85f98f67df1776750e48c57065b02823917b844..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/service/DepositService.java +++ /dev/null @@ -1,13 +0,0 @@ -package ufrn.imd.service; - -import ufrn.imd.domain.Account; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.Optional; - -public interface DepositService extends Remote { - - public void deposit(Double value, Optional account) throws RemoteException; - -} diff --git a/banking-client/src/ufrn/imd/service/WidthawService.java b/banking-client/src/ufrn/imd/service/WidthawService.java deleted file mode 100644 index 8a5ed3baa7ecd8367276729a144c1ff882a35bed..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/service/WidthawService.java +++ /dev/null @@ -1,12 +0,0 @@ -package ufrn.imd.service; - -import ufrn.imd.domain.Account; - -import java.rmi.Remote; -import java.rmi.RemoteException; - -public interface WidthawService extends Remote { - - public void widthaw(Double value, Account account) throws RemoteException; - -} diff --git a/banking-client/src/ufrn/imd/service/impl/DepositServiceImpl.java b/banking-client/src/ufrn/imd/service/impl/DepositServiceImpl.java deleted file mode 100644 index 7dfa731ebf41f795aa581b80f1e1d71395caca80..0000000000000000000000000000000000000000 --- a/banking-client/src/ufrn/imd/service/impl/DepositServiceImpl.java +++ /dev/null @@ -1,25 +0,0 @@ -package ufrn.imd.service.impl; - -import ufrn.imd.domain.Account; -import ufrn.imd.log.Log; -import ufrn.imd.service.DepositService; - -import java.rmi.RemoteException; -import java.util.Optional; - -public class DepositServiceImpl implements DepositService { - - public DepositServiceImpl() { - super(); - } - - public void deposit(Double value, Optional acOp) throws RemoteException, RuntimeException { - Account account = acOp.orElseThrow(() -> new RuntimeException("Null User!")); - if(account.getBalance() < value) - throw new RuntimeException("There's no money!"); - account.setBalance(account.getBalance() - value); - Log.info(DepositServiceImpl.class, "deposit"); - - } - -} diff --git a/banking-server/.idea/compiler.xml b/banking-server/.idea/compiler.xml index 1e78cc9ce0775fa751b7c9ccd7da8294958c203e..0830c9341634c6202b41204c2e6eb85fb959b090 100644 --- a/banking-server/.idea/compiler.xml +++ b/banking-server/.idea/compiler.xml @@ -2,6 +2,7 @@ + diff --git a/banking-server/.idea/dbnavigator.xml b/banking-server/.idea/dbnavigator.xml new file mode 100644 index 0000000000000000000000000000000000000000..4c97bdf6c06b538a591ef993a81bd28419b35808 --- /dev/null +++ b/banking-server/.idea/dbnavigator.xml @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/banking-server/.idea/misc.xml b/banking-server/.idea/misc.xml index 82dbec8ad28463aed32007a93ffc07865ae98968..accd6296789966b9f3392c7a4dc3a987a7532182 100644 --- a/banking-server/.idea/misc.xml +++ b/banking-server/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/banking-client/.idea/uiDesigner.xml b/banking-server/.idea/uiDesigner.xml similarity index 100% rename from banking-client/.idea/uiDesigner.xml rename to banking-server/.idea/uiDesigner.xml diff --git a/banking-server/pom.xml b/banking-server/pom.xml index 24fae7265aee1c22e3135dbfa626824d5ed60414..f428c68edd6c0427fd301bee34534b7c9fd1703c 100644 --- a/banking-server/pom.xml +++ b/banking-server/pom.xml @@ -9,8 +9,8 @@ 1.0-SNAPSHOT - 17 - 17 + 11 + 11 diff --git a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java index 4fed7390ea3b7b3ab9901b8f402f99065adf9142..39928e11f922805d6b10e203c631cd9b19c5364c 100644 --- a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java +++ b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java @@ -3,8 +3,7 @@ package ufrn.imd; import ufrn.imd.controller.Controller; import ufrn.imd.controller.impl.BalanceControllerImpl; import ufrn.imd.controller.impl.DepositControllerImpl; -import ufrn.imd.service.BalanceService; -import ufrn.imd.service.DepositService; +import ufrn.imd.repository.impl.ClientRepository; import ufrn.imd.service.impl.BalanceServiceImpl; import ufrn.imd.service.impl.DepositServiceImpl; @@ -14,9 +13,9 @@ import java.rmi.RemoteException; public class BankingServerApp { public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException { - - DepositService depositService = new DepositServiceImpl(); - BalanceService balanceService = new BalanceServiceImpl(); + ClientRepository clientRepository = new ClientRepository(); + DepositServiceImpl depositService = new DepositServiceImpl(clientRepository); + BalanceServiceImpl balanceService = new BalanceServiceImpl(clientRepository); Controller depositController = new DepositControllerImpl(depositService); Controller balanceController = new BalanceControllerImpl(balanceService); diff --git a/banking-server/src/main/java/ufrn/imd/controller/Controller.java b/banking-server/src/main/java/ufrn/imd/controller/Controller.java index 824205a78effedd521e934e17809e5bfcc593a71..d5be018d3c01b6e18b13aa9d9028f66bb795589d 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/Controller.java +++ b/banking-server/src/main/java/ufrn/imd/controller/Controller.java @@ -1,11 +1,12 @@ package ufrn.imd.controller; import ufrn.imd.domain.Client; +import ufrn.imd.utils.ServerResponse; import java.rmi.Remote; import java.rmi.RemoteException; public interface Controller extends Remote { - public void registerClient(Client client) throws RemoteException; + public ServerResponse getResponse(Object client) throws RemoteException; } diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java index a856ad8e51013ae78307ffd0165a009e9c5e4c5d..50d9cb87a9e624e039f790f7cad9bfdb09e97fb4 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java +++ b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java @@ -2,7 +2,8 @@ package ufrn.imd.controller.impl; import ufrn.imd.controller.Controller; import ufrn.imd.domain.Client; -import ufrn.imd.service.BalanceService; +import ufrn.imd.service.impl.BalanceServiceImpl; +import ufrn.imd.utils.ServerResponse; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -10,9 +11,7 @@ import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; import static ufrn.imd.utils.NameSpace.HOST_BALANCE_SERVICE; import static ufrn.imd.utils.NameSpace.PORT_BALANCE_SERVICE; @@ -20,70 +19,23 @@ import static ufrn.imd.utils.NameSpace.PORT_BALANCE_SERVICE; @lombok.extern.java.Log public class BalanceControllerImpl extends UnicastRemoteObject implements Controller { - private volatile List clients = new ArrayList<>(); + private volatile Queue clients = new ArrayDeque<>(); + private final BalanceServiceImpl service; - public BalanceControllerImpl(BalanceService service) throws RemoteException, MalformedURLException, AlreadyBoundException { + public BalanceControllerImpl(BalanceServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); LocateRegistry.createRegistry(PORT_BALANCE_SERVICE); Naming.bind(HOST_BALANCE_SERVICE, this); log.info("Starting Deposit service!"); - - new Notify(service).start(); + this.service = service; log.info(String.format("Initializing server in %s", HOST_BALANCE_SERVICE)); } @Override - public void registerClient(Client client) throws RemoteException { - clients.add(client); - log.info("new client registred"); - log.info(String.format("total users: %d", clients.size())); - } - - - - - private class Notify extends Thread{ - - private final BalanceService service; - - public Notify(BalanceService service) { - super(); - this.service = service; - } - public void run() { - - for(;;) { - if(clients.size() > 0) { - - log.info("notyfing the clients!"); - int i = 0; - for (Client client : clients) { - - try { - this.service.balance(Optional.of(client.getAccount())); - - } catch (RemoteException e) { - e.printStackTrace(); - } - } - try { - Thread.sleep(15 * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } else { - try { - Thread.sleep(15 * 1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - log.info("No there's clients!"); - } - - } - - } + public ServerResponse getResponse(Object obj) throws RemoteException { + Client client = (Client) obj; + return this.service.balance(Optional.of(client)); } } diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java index 958ac87bc7db216602387ecf2ca281dc5c147883..1e37f28ff725ffc585139f7bfe6f20e937c9c352 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java +++ b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java @@ -3,7 +3,9 @@ package ufrn.imd.controller.impl; import lombok.extern.java.Log; import ufrn.imd.controller.Controller; import ufrn.imd.domain.Client; -import ufrn.imd.service.DepositService; +import ufrn.imd.service.impl.DepositServiceImpl; +import ufrn.imd.utils.ServerResponse; +import ufrn.imd.utils.message.DepositMessage; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -11,9 +13,7 @@ import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE; import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; @@ -21,72 +21,23 @@ import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; @Log public class DepositControllerImpl extends UnicastRemoteObject implements Controller { - private volatile List clients = new ArrayList<>(); - public DepositControllerImpl(DepositService service) throws RemoteException, MalformedURLException, AlreadyBoundException { + private volatile Queue clients = new ArrayDeque<>(); + private final DepositServiceImpl service; + + private volatile Queue serverResponses = new ArrayDeque<>(); + public DepositControllerImpl(DepositServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); log.info("Starting Deposit service!"); - new Notify(service).start(); log.info(String.format("Initializing server in %s", HOST_DEPOSIT_SERVICE)); - + this.service = service; LocateRegistry.createRegistry(PORT_DEPOSIT_SERVICE); - Naming.bind(HOST_DEPOSIT_SERVICE, this); } - @Override - public void registerClient(Client client) throws RemoteException { - clients.add(client); - log.info("new client registred"); - log.info(String.format("total users: %d", clients.size())); + public ServerResponse getResponse(Object obj) throws RemoteException { + DepositMessage depositMessage = (DepositMessage)obj; + return this.service.deposit(depositMessage.getValue(), Optional.of(depositMessage.getClient())); } - - - - private class Notify extends Thread{ - - private final DepositService service; - - public Notify(DepositService service) { - super(); - this.service = service; - } - public void run() { - - for(;;) { - - if(clients.size() > 0) { - - log.info("notyfing the clients!"); - int i = 0; - for (Client client : clients) { - - try { - this.service.deposit(200.00, Optional.of(client.getAccount())); - - } catch (RemoteException e) { - e.printStackTrace(); - } - } - try { - Thread.sleep(15 * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } else { - try { - Thread.sleep(15 * 1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - log.info("No there's clients!"); - - - } - - } - - } - } } diff --git a/banking-server/src/main/java/ufrn/imd/repository/Repository.java b/banking-server/src/main/java/ufrn/imd/repository/Repository.java index 636bf2b106b30a65c27fda39b3f13dff1cdba66b..589bec3786e83670f744a2ae3ce35c8fb794796d 100644 --- a/banking-server/src/main/java/ufrn/imd/repository/Repository.java +++ b/banking-server/src/main/java/ufrn/imd/repository/Repository.java @@ -1,9 +1,10 @@ package ufrn.imd.repository; import java.util.List; +import java.util.Optional; public interface Repository { - public T find(Integer id); + public Optional find(Integer id); public List findAll(); } diff --git a/banking-server/src/main/java/ufrn/imd/repository/impl/ClientRepository.java b/banking-server/src/main/java/ufrn/imd/repository/impl/ClientRepository.java index bce53daec4d91cc27933567b4ebe37c7fd72483a..83963f78bcbb35365a86888a93c423271c0df4b3 100644 --- a/banking-server/src/main/java/ufrn/imd/repository/impl/ClientRepository.java +++ b/banking-server/src/main/java/ufrn/imd/repository/impl/ClientRepository.java @@ -1,20 +1,21 @@ package ufrn.imd.repository.impl; +import ufrn.imd.domain.Account; import ufrn.imd.domain.Client; import ufrn.imd.repository.Repository; import java.util.List; +import java.util.Optional; public class ClientRepository implements Repository { List clients = List.of( - new Client(), - new Client() - + new Client(1, "Fernando Feirreira", new Account(1, "321456789", 200.00)), + new Client(2, "Maria Eduarda", new Account(2, "987654321", 100.00)) ); @Override - public Client find(Integer id) { - return (Client) clients.stream().filter(c -> c.getId().equals(id)); + public Optional find(Integer id) { + return Optional.of(clients.get(id)); } @Override diff --git a/banking-server/src/main/java/ufrn/imd/service/BalanceService.java b/banking-server/src/main/java/ufrn/imd/service/BalanceService.java deleted file mode 100644 index b82470c15060014b18ce9c6323ca2a37a5268fee..0000000000000000000000000000000000000000 --- a/banking-server/src/main/java/ufrn/imd/service/BalanceService.java +++ /dev/null @@ -1,12 +0,0 @@ -package ufrn.imd.service; - -import ufrn.imd.domain.Account; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.Optional; - -public interface BalanceService extends Remote { - - public void balance(Optional account) throws RemoteException; -} diff --git a/banking-server/src/main/java/ufrn/imd/service/DepositService.java b/banking-server/src/main/java/ufrn/imd/service/DepositService.java deleted file mode 100644 index aab39ac63fd5da6827a9ee113ba692da9902459e..0000000000000000000000000000000000000000 --- a/banking-server/src/main/java/ufrn/imd/service/DepositService.java +++ /dev/null @@ -1,13 +0,0 @@ -package ufrn.imd.service; - -import ufrn.imd.domain.Account; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.Optional; - -public interface DepositService extends Remote { - - public void deposit(Double value, Optional account) throws RemoteException, RuntimeException; - -} diff --git a/banking-server/src/main/java/ufrn/imd/service/Service.java b/banking-server/src/main/java/ufrn/imd/service/Service.java new file mode 100644 index 0000000000000000000000000000000000000000..16fc5e127d33c7d4c69a42dec155fa4b7120946a --- /dev/null +++ b/banking-server/src/main/java/ufrn/imd/service/Service.java @@ -0,0 +1,5 @@ +package ufrn.imd.service; + +public interface Service { + +} diff --git a/banking-server/src/main/java/ufrn/imd/service/WidthawService.java b/banking-server/src/main/java/ufrn/imd/service/WidthawService.java deleted file mode 100644 index 8a5ed3baa7ecd8367276729a144c1ff882a35bed..0000000000000000000000000000000000000000 --- a/banking-server/src/main/java/ufrn/imd/service/WidthawService.java +++ /dev/null @@ -1,12 +0,0 @@ -package ufrn.imd.service; - -import ufrn.imd.domain.Account; - -import java.rmi.Remote; -import java.rmi.RemoteException; - -public interface WidthawService extends Remote { - - public void widthaw(Double value, Account account) throws RemoteException; - -} diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java index 8ae835eee3fced34f9c22d0d743c232bc76dafd8..95e9373b04f05a6a480bb1db696ea8dba9a12c6f 100644 --- a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java +++ b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java @@ -1,20 +1,35 @@ package ufrn.imd.service.impl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; import ufrn.imd.domain.Account; -import ufrn.imd.service.BalanceService; +import ufrn.imd.domain.Client; +import ufrn.imd.repository.Repository; +import ufrn.imd.service.Service; +import ufrn.imd.utils.ServerResponse; import java.rmi.RemoteException; import java.util.Optional; @Log -public class BalanceServiceImpl implements BalanceService { +@RequiredArgsConstructor +public class BalanceServiceImpl implements Service { - @Override - public void balance(Optional accOP) throws RemoteException { - Account account = accOP.orElseThrow(() -> new RuntimeException("Invalid account")); + private final Repository clientRepository; + + public ServerResponse balance(Optional clientOptional) throws RemoteException { + Client user = clientOptional + .orElseThrow(() -> new RuntimeException("NULL USER")); + Client client = clientRepository.find(user.getId()) + .orElseThrow(() -> new RuntimeException("Invalid user!")); + Account account = client.getAccount(); log.info(String.format("Account Balance: R$ %f", account.getBalance())); + return ServerResponse.builder() + .status(200) + .message("Operation sucessed!") + .body(account) + .build(); } } diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java index a371112b4b282f9c336c246db214be5ede5e01d8..83c894a8ff303a41d301feb7e19532417f07f66c 100644 --- a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java +++ b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java @@ -1,24 +1,37 @@ package ufrn.imd.service.impl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; import ufrn.imd.domain.Account; -import ufrn.imd.service.DepositService; +import ufrn.imd.domain.Client; +import ufrn.imd.repository.Repository; +import ufrn.imd.service.Service; +import ufrn.imd.utils.ServerResponse; import java.rmi.RemoteException; import java.util.Optional; @Log -public class DepositServiceImpl implements DepositService { +@RequiredArgsConstructor +public class DepositServiceImpl implements Service { - public DepositServiceImpl() { - super(); - } - public void deposit(Double value, Optional acOp) throws RemoteException, RuntimeException { - Account account = acOp.orElseThrow(() -> new RuntimeException("Null User!")); - if(account.getBalance() < value) throw new RuntimeException("There's no money!"); - account.setBalance(account.getBalance() - value); - log.info("deposit"); + private final Repository repository; + + public ServerResponse deposit(Double value, Optional clientOptional) throws RemoteException, RuntimeException { + Client user = clientOptional + .orElseThrow(() -> new RuntimeException("Null User!")); + Client client = repository.find(user.getId()) + .orElseThrow(() -> new RuntimeException("Invalid user!")); + Account account = client.getAccount(); + account.setBalance(account.getBalance() + value); + log.info(String.format("Deposit concluded!")); + log.info(String.format("Total: %.2f", account.getBalance())); + return ServerResponse.builder() + .status(200) + .message("Operaiton sucessed!") + .body(account) + .build(); } } diff --git a/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..4c1115b4648ee5503d0ebdb68cc5982e97f96794 --- /dev/null +++ b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java @@ -0,0 +1,20 @@ +package ufrn.imd.utils; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class ServerResponse implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer status; + private String message; + private Object body; +} diff --git a/banking-server/src/main/java/ufrn/imd/utils/message/DepositMessage.java b/banking-server/src/main/java/ufrn/imd/utils/message/DepositMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..2badcd3f628f1fceaf86549d8fe1b286b4738665 --- /dev/null +++ b/banking-server/src/main/java/ufrn/imd/utils/message/DepositMessage.java @@ -0,0 +1,16 @@ +package ufrn.imd.utils.message; + +import lombok.AllArgsConstructor; +import lombok.Data; +import ufrn.imd.domain.Client; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +public class DepositMessage implements Serializable { + private static final long serialVersionUID = 2L; + + private Client client; + private Double value; +} diff --git a/banking-server/target/classes/ufrn/imd/BankingServerApp.class b/banking-server/target/classes/ufrn/imd/BankingServerApp.class index e981c23cd377d28abc4078145c4d6009f4c2c7e6..9426e1eeb07564495580cebd9a9fb3d4826bfbdf 100644 Binary files a/banking-server/target/classes/ufrn/imd/BankingServerApp.class and b/banking-server/target/classes/ufrn/imd/BankingServerApp.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/Controller.class b/banking-server/target/classes/ufrn/imd/controller/Controller.class index 4707c271c661d159f8019f881ffc3f31e61a85d3..d963fb57c51b2717ad5df0b7a9c8b917478a9e46 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/Controller.class and b/banking-server/target/classes/ufrn/imd/controller/Controller.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class deleted file mode 100644 index 7f067992c8a00c6fd8c3203ad80e171f7a42fb6b..0000000000000000000000000000000000000000 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class and /dev/null differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class index d91152883436e27a0f69fc0c37cc6ebde16db26b..e990c821bbca67e3753e9d7b7726bf02f8827d69 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class and b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class deleted file mode 100644 index 9697b9b922e597e1104c36d785b29568877a9002..0000000000000000000000000000000000000000 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class and /dev/null differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class index c429275f5abb1141d6e6335ce6730b9f9c18c9d7..78b16605a3148faa5588123ef88a11f98ff3a3ce 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class and b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class differ diff --git a/banking-server/target/classes/ufrn/imd/domain/Account.class b/banking-server/target/classes/ufrn/imd/domain/Account.class index 2a7ef8cf0adf2d1042b8a7ee3f230660df58ffeb..06c1afe87e3de366a0157786e0a200a2309ba51b 100644 Binary files a/banking-server/target/classes/ufrn/imd/domain/Account.class and b/banking-server/target/classes/ufrn/imd/domain/Account.class differ diff --git a/banking-server/target/classes/ufrn/imd/domain/Client.class b/banking-server/target/classes/ufrn/imd/domain/Client.class index 38d7a3658a88a4078ee7e0545a2e76bfe87708c6..e09b310a54921733a8906a5ffc2612b07666c2b6 100644 Binary files a/banking-server/target/classes/ufrn/imd/domain/Client.class and b/banking-server/target/classes/ufrn/imd/domain/Client.class differ diff --git a/banking-server/target/classes/ufrn/imd/repository/Repository.class b/banking-server/target/classes/ufrn/imd/repository/Repository.class index edf96faf080b1cb13de2680e95de0075fff887fd..1a11f1ee8fe4d9f5937cf449985bd127fe02bb02 100644 Binary files a/banking-server/target/classes/ufrn/imd/repository/Repository.class and b/banking-server/target/classes/ufrn/imd/repository/Repository.class differ diff --git a/banking-server/target/classes/ufrn/imd/repository/impl/ClientRepository.class b/banking-server/target/classes/ufrn/imd/repository/impl/ClientRepository.class index d5200a1291f7edff2158f8e3b6c0276cee9f31ea..155a44b5c55392b0c43f96fcd159f827359a5777 100644 Binary files a/banking-server/target/classes/ufrn/imd/repository/impl/ClientRepository.class and b/banking-server/target/classes/ufrn/imd/repository/impl/ClientRepository.class differ diff --git a/banking-server/target/classes/ufrn/imd/service/BalanceService.class b/banking-server/target/classes/ufrn/imd/service/BalanceService.class deleted file mode 100644 index a3fa528b1ec10f571b2fa396f9a310eddca7e4cc..0000000000000000000000000000000000000000 Binary files a/banking-server/target/classes/ufrn/imd/service/BalanceService.class and /dev/null differ diff --git a/banking-server/target/classes/ufrn/imd/service/DepositService.class b/banking-server/target/classes/ufrn/imd/service/DepositService.class deleted file mode 100644 index e417806b1752cd381b3bce46f34ff2a4c8e3b3d3..0000000000000000000000000000000000000000 Binary files a/banking-server/target/classes/ufrn/imd/service/DepositService.class and /dev/null differ diff --git a/banking-server/target/classes/ufrn/imd/service/WidthawService.class b/banking-server/target/classes/ufrn/imd/service/WidthawService.class deleted file mode 100644 index 87f4370c406e13dec8e6ee9115f250d18054b342..0000000000000000000000000000000000000000 Binary files a/banking-server/target/classes/ufrn/imd/service/WidthawService.class and /dev/null differ diff --git a/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class index a5e1a4d127fd1ae794f2509bcd0e3fed486f2dbe..57779ee31278c81ffb0caab53459b83b0f814be4 100644 Binary files a/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class and b/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class differ diff --git a/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class index 8a7bee88adf7fc8e715e5f685cc3ca200269eec5..7663a247d03d86603195f6987564d6775fa06d0b 100644 Binary files a/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class and b/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class differ diff --git a/banking-server/target/classes/ufrn/imd/utils/NameSpace.class b/banking-server/target/classes/ufrn/imd/utils/NameSpace.class index 84c708c4860b4dc11f4b780a762e8ab3b3db8aa2..4352c7ac97153fc0ffa5de6fbc6076a0ad780fa8 100644 Binary files a/banking-server/target/classes/ufrn/imd/utils/NameSpace.class and b/banking-server/target/classes/ufrn/imd/utils/NameSpace.class differ