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 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="JAVA_MODULE" version="4"> - <component name="NewModuleRootManager" inherit-compiler-output="true"> - <exclude-output /> - <content url="file://$MODULE_DIR$"> - <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> - </content> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - </component> -</module> \ 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.example</groupId> + <artifactId>banking-client</artifactId> + <version>1.0-SNAPSHOT</version> + + <properties> + <maven.compiler.source>11</maven.compiler.source> + <maven.compiler.target>11</maven.compiler.target> + </properties> + <dependencies> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.18.24</version> + <scope>provided</scope> + </dependency> + </dependencies> +</project> \ 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 86% rename from banking-client/src/ufrn/imd/controller/Controller.java rename to banking-client/src/main/java/ufrn/imd/controller/Controller.java index ebdc052114a1ec006c253cdf5d043b3be3451176..580d6e5bd0706569fec236bf1337a7adbf06e7f8 100644 --- a/banking-client/src/ufrn/imd/controller/Controller.java +++ b/banking-client/src/main/java/ufrn/imd/controller/Controller.java @@ -1,6 +1,6 @@ package ufrn.imd.controller; -import ufrn.imd.message.Client; +import ufrn.imd.domain.Client; import java.rmi.Remote; import java.rmi.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..b7a227b0c320a833e457e69b08612342be8b1292 --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java @@ -0,0 +1,101 @@ +package ufrn.imd.utils; + +import lombok.Data; +import ufrn.imd.controller.Controller; +import ufrn.imd.domain.Client; + +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_DEPOSIT_SERVICE; + +@Data +public class MachineState { + + public static final String INITIAL= "INITIAL"; + public static final String RENDER = "RENDER"; + public static final String UPDATE_STATE = "UPDATE_STATE"; + public static final String READ = "READ"; + public static final String DEPOSIT = "DEPOSIT"; + public static final String BALANCE = "BALANCE"; + + public static final String HELP = "HELP"; + 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 = HELP; + } else if(state.equals(HELP)) { + state = READ; + } else if(state.equals(READ)) { + state = inputValue; + } else if(state.equals(INVALID_INPUT)) { + state = HELP; + } else if(state.equals(DEPOSIT)) { + state = HELP; + } + } + + public void processEvents() throws MalformedURLException, NotBoundException, RemoteException { + if(state.equals(READ)) { + inputValue = new String(); + inputValue = sc.nextLine().trim().toUpperCase(); + System.out.println(String.format(">>> input value: %s", inputValue)); + if(!inputValue.equals(DEPOSIT) && !inputValue.equals(DEPOSIT) && !inputValue.equals(BALANCE)){ + inputValue = INVALID_INPUT; + } + } else if(state.equals(DEPOSIT)) { + double v = sc.nextDouble(); + System.out.println(String.format(">>> input value: %.2f", v)); + Client client = new Client(1); + Controller server = (Controller) Naming.lookup(HOST_DEPOSIT_SERVICE); + server.registerClient(client); + } + } + + public void render() { + try { + if(state.equals(INITIAL)) { + System.out.println(">>> Initializing..."); + Thread.sleep(1000); + } else if(state.equals(HELP)) { + 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 88% rename from banking-client/src/ufrn/imd/nameSpace/NameSpace.java rename to banking-client/src/main/java/ufrn/imd/utils/NameSpace.java index b30b2d12181db58936cf1550185bf2e96c66bb2d..c3793547e6dee27aa654ce21634053dd6c23b448 100644 --- a/banking-client/src/ufrn/imd/nameSpace/NameSpace.java +++ b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java @@ -1,4 +1,4 @@ -package ufrn.imd.nameSpace; +package ufrn.imd.utils; public class NameSpace { public static final Integer PORT_DEPOSIT_SERVICE = 1907; 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<Client> 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<Account> 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> 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<Account> 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/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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="DBNavigator.Project.DataEditorManager"> + <record-view-column-sorting-type value="BY_INDEX" /> + <value-preview-text-wrapping value="true" /> + <value-preview-pinned value="false" /> + </component> + <component name="DBNavigator.Project.DataExportManager"> + <export-instructions> + <create-header value="true" /> + <friendly-headers value="false" /> + <quote-values-containing-separator value="true" /> + <quote-all-values value="false" /> + <value-separator value="" /> + <file-name value="" /> + <file-location value="" /> + <scope value="GLOBAL" /> + <destination value="FILE" /> + <format value="EXCEL" /> + <charset value="UTF-8" /> + </export-instructions> + </component> + <component name="DBNavigator.Project.DatabaseBrowserManager"> + <autoscroll-to-editor value="false" /> + <autoscroll-from-editor value="true" /> + <show-object-properties value="true" /> + <loaded-nodes /> + </component> + <component name="DBNavigator.Project.DatabaseFileManager"> + <open-files /> + </component> + <component name="DBNavigator.Project.EditorStateManager"> + <last-used-providers /> + </component> + <component name="DBNavigator.Project.ExecutionManager"> + <retain-sticky-names value="false" /> + </component> + <component name="DBNavigator.Project.MethodExecutionManager"> + <method-browser /> + <execution-history> + <group-entries value="true" /> + <execution-inputs /> + </execution-history> + <argument-values-cache /> + </component> + <component name="DBNavigator.Project.ObjectDependencyManager"> + <last-used-dependency-type value="INCOMING" /> + </component> + <component name="DBNavigator.Project.ObjectQuickFilterManager"> + <last-used-operator value="EQUAL" /> + <filters /> + </component> + <component name="DBNavigator.Project.ParserDiagnosticsManager"> + <diagnostics-history /> + </component> + <component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true"> + <recently-used-interfaces /> + </component> + <component name="DBNavigator.Project.Settings"> + <connections /> + <browser-settings> + <general> + <display-mode value="TABBED" /> + <navigation-history-size value="100" /> + <show-object-details value="false" /> + </general> + <filters> + <object-type-filter> + <object-type name="SCHEMA" enabled="true" /> + <object-type name="USER" enabled="true" /> + <object-type name="ROLE" enabled="true" /> + <object-type name="PRIVILEGE" enabled="true" /> + <object-type name="CHARSET" enabled="true" /> + <object-type name="TABLE" enabled="true" /> + <object-type name="VIEW" enabled="true" /> + <object-type name="MATERIALIZED_VIEW" enabled="true" /> + <object-type name="NESTED_TABLE" enabled="true" /> + <object-type name="COLUMN" enabled="true" /> + <object-type name="INDEX" enabled="true" /> + <object-type name="CONSTRAINT" enabled="true" /> + <object-type name="DATASET_TRIGGER" enabled="true" /> + <object-type name="DATABASE_TRIGGER" enabled="true" /> + <object-type name="SYNONYM" enabled="true" /> + <object-type name="SEQUENCE" enabled="true" /> + <object-type name="PROCEDURE" enabled="true" /> + <object-type name="FUNCTION" enabled="true" /> + <object-type name="PACKAGE" enabled="true" /> + <object-type name="TYPE" enabled="true" /> + <object-type name="TYPE_ATTRIBUTE" enabled="true" /> + <object-type name="ARGUMENT" enabled="true" /> + <object-type name="DIMENSION" enabled="true" /> + <object-type name="CLUSTER" enabled="true" /> + <object-type name="DBLINK" enabled="true" /> + </object-type-filter> + </filters> + <sorting> + <object-type name="COLUMN" sorting-type="NAME" /> + <object-type name="FUNCTION" sorting-type="NAME" /> + <object-type name="PROCEDURE" sorting-type="NAME" /> + <object-type name="ARGUMENT" sorting-type="POSITION" /> + </sorting> + <default-editors> + <object-type name="VIEW" editor-type="SELECTION" /> + <object-type name="PACKAGE" editor-type="SELECTION" /> + <object-type name="TYPE" editor-type="SELECTION" /> + </default-editors> + </browser-settings> + <navigation-settings> + <lookup-filters> + <lookup-objects> + <object-type name="SCHEMA" enabled="true" /> + <object-type name="USER" enabled="false" /> + <object-type name="ROLE" enabled="false" /> + <object-type name="PRIVILEGE" enabled="false" /> + <object-type name="CHARSET" enabled="false" /> + <object-type name="TABLE" enabled="true" /> + <object-type name="VIEW" enabled="true" /> + <object-type name="MATERIALIZED VIEW" enabled="true" /> + <object-type name="INDEX" enabled="true" /> + <object-type name="CONSTRAINT" enabled="true" /> + <object-type name="DATASET TRIGGER" enabled="true" /> + <object-type name="DATABASE TRIGGER" enabled="true" /> + <object-type name="SYNONYM" enabled="false" /> + <object-type name="SEQUENCE" enabled="true" /> + <object-type name="PROCEDURE" enabled="true" /> + <object-type name="FUNCTION" enabled="true" /> + <object-type name="PACKAGE" enabled="true" /> + <object-type name="TYPE" enabled="true" /> + <object-type name="DIMENSION" enabled="false" /> + <object-type name="CLUSTER" enabled="false" /> + <object-type name="DBLINK" enabled="true" /> + </lookup-objects> + <force-database-load value="false" /> + <prompt-connection-selection value="true" /> + <prompt-schema-selection value="true" /> + </lookup-filters> + </navigation-settings> + <dataset-grid-settings> + <general> + <enable-zooming value="true" /> + <enable-column-tooltip value="true" /> + </general> + <sorting> + <nulls-first value="true" /> + <max-sorting-columns value="4" /> + </sorting> + <tracking-columns> + <columnNames value="" /> + <visible value="true" /> + <editable value="false" /> + </tracking-columns> + </dataset-grid-settings> + <dataset-editor-settings> + <text-editor-popup> + <active value="false" /> + <active-if-empty value="false" /> + <data-length-threshold value="100" /> + <popup-delay value="1000" /> + </text-editor-popup> + <values-actions-popup> + <show-popup-button value="true" /> + <element-count-threshold value="1000" /> + <data-length-threshold value="250" /> + </values-actions-popup> + <general> + <fetch-block-size value="100" /> + <fetch-timeout value="30" /> + <trim-whitespaces value="true" /> + <convert-empty-strings-to-null value="true" /> + <select-content-on-cell-edit value="true" /> + <large-value-preview-active value="true" /> + </general> + <filters> + <prompt-filter-dialog value="true" /> + <default-filter-type value="BASIC" /> + </filters> + <qualified-text-editor text-length-threshold="300"> + <content-types> + <content-type name="Text" enabled="true" /> + <content-type name="Properties" enabled="true" /> + <content-type name="XML" enabled="true" /> + <content-type name="DTD" enabled="true" /> + <content-type name="HTML" enabled="true" /> + <content-type name="XHTML" enabled="true" /> + <content-type name="Java" enabled="true" /> + <content-type name="SQL" enabled="true" /> + <content-type name="PL/SQL" enabled="true" /> + <content-type name="JSON" enabled="true" /> + <content-type name="JSON5" enabled="true" /> + <content-type name="Groovy" enabled="true" /> + <content-type name="AIDL" enabled="true" /> + <content-type name="YAML" enabled="true" /> + <content-type name="Manifest" enabled="true" /> + </content-types> + </qualified-text-editor> + <record-navigation> + <navigation-target value="VIEWER" /> + </record-navigation> + </dataset-editor-settings> + <code-editor-settings> + <general> + <show-object-navigation-gutter value="false" /> + <show-spec-declaration-navigation-gutter value="true" /> + <enable-spellchecking value="true" /> + <enable-reference-spellchecking value="false" /> + </general> + <confirmations> + <save-changes value="false" /> + <revert-changes value="true" /> + </confirmations> + </code-editor-settings> + <code-completion-settings> + <filters> + <basic-filter> + <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> + <filter-element type="RESERVED_WORD" id="function" selected="true" /> + <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> + <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> + <filter-element type="RESERVED_WORD" id="exception" selected="true" /> + <filter-element type="OBJECT" id="schema" selected="true" /> + <filter-element type="OBJECT" id="role" selected="true" /> + <filter-element type="OBJECT" id="user" selected="true" /> + <filter-element type="OBJECT" id="privilege" selected="true" /> + <user-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="false" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </user-schema> + <public-schema> + <filter-element type="OBJECT" id="table" selected="false" /> + <filter-element type="OBJECT" id="view" selected="false" /> + <filter-element type="OBJECT" id="materialized view" selected="false" /> + <filter-element type="OBJECT" id="index" selected="false" /> + <filter-element type="OBJECT" id="constraint" selected="false" /> + <filter-element type="OBJECT" id="trigger" selected="false" /> + <filter-element type="OBJECT" id="synonym" selected="false" /> + <filter-element type="OBJECT" id="sequence" selected="false" /> + <filter-element type="OBJECT" id="procedure" selected="false" /> + <filter-element type="OBJECT" id="function" selected="false" /> + <filter-element type="OBJECT" id="package" selected="false" /> + <filter-element type="OBJECT" id="type" selected="false" /> + <filter-element type="OBJECT" id="dimension" selected="false" /> + <filter-element type="OBJECT" id="cluster" selected="false" /> + <filter-element type="OBJECT" id="dblink" selected="false" /> + </public-schema> + <any-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </any-schema> + </basic-filter> + <extended-filter> + <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> + <filter-element type="RESERVED_WORD" id="function" selected="true" /> + <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> + <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> + <filter-element type="RESERVED_WORD" id="exception" selected="true" /> + <filter-element type="OBJECT" id="schema" selected="true" /> + <filter-element type="OBJECT" id="user" selected="true" /> + <filter-element type="OBJECT" id="role" selected="true" /> + <filter-element type="OBJECT" id="privilege" selected="true" /> + <user-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </user-schema> + <public-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </public-schema> + <any-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </any-schema> + </extended-filter> + </filters> + <sorting enabled="true"> + <sorting-element type="RESERVED_WORD" id="keyword" /> + <sorting-element type="RESERVED_WORD" id="datatype" /> + <sorting-element type="OBJECT" id="column" /> + <sorting-element type="OBJECT" id="table" /> + <sorting-element type="OBJECT" id="view" /> + <sorting-element type="OBJECT" id="materialized view" /> + <sorting-element type="OBJECT" id="index" /> + <sorting-element type="OBJECT" id="constraint" /> + <sorting-element type="OBJECT" id="trigger" /> + <sorting-element type="OBJECT" id="synonym" /> + <sorting-element type="OBJECT" id="sequence" /> + <sorting-element type="OBJECT" id="procedure" /> + <sorting-element type="OBJECT" id="function" /> + <sorting-element type="OBJECT" id="package" /> + <sorting-element type="OBJECT" id="type" /> + <sorting-element type="OBJECT" id="dimension" /> + <sorting-element type="OBJECT" id="cluster" /> + <sorting-element type="OBJECT" id="dblink" /> + <sorting-element type="OBJECT" id="schema" /> + <sorting-element type="OBJECT" id="role" /> + <sorting-element type="OBJECT" id="user" /> + <sorting-element type="RESERVED_WORD" id="function" /> + <sorting-element type="RESERVED_WORD" id="parameter" /> + </sorting> + <format> + <enforce-code-style-case value="true" /> + </format> + </code-completion-settings> + <execution-engine-settings> + <statement-execution> + <fetch-block-size value="100" /> + <execution-timeout value="20" /> + <debug-execution-timeout value="600" /> + <focus-result value="false" /> + <prompt-execution value="false" /> + </statement-execution> + <script-execution> + <command-line-interfaces /> + <execution-timeout value="300" /> + </script-execution> + <method-execution> + <execution-timeout value="30" /> + <debug-execution-timeout value="600" /> + <parameter-history-size value="10" /> + </method-execution> + </execution-engine-settings> + <operation-settings> + <transactions> + <uncommitted-changes> + <on-project-close value="ASK" /> + <on-disconnect value="ASK" /> + <on-autocommit-toggle value="ASK" /> + </uncommitted-changes> + <multiple-uncommitted-changes> + <on-commit value="ASK" /> + <on-rollback value="ASK" /> + </multiple-uncommitted-changes> + </transactions> + <session-browser> + <disconnect-session value="ASK" /> + <kill-session value="ASK" /> + <reload-on-filter-change value="false" /> + </session-browser> + <compiler> + <compile-type value="KEEP" /> + <compile-dependencies value="ASK" /> + <always-show-controls value="false" /> + </compiler> + <debugger> + <debugger-type value="ASK" /> + <use-generic-runners value="true" /> + </debugger> + </operation-settings> + <ddl-file-settings> + <extensions> + <mapping file-type-id="VIEW" extensions="vw" /> + <mapping file-type-id="TRIGGER" extensions="trg" /> + <mapping file-type-id="PROCEDURE" extensions="prc" /> + <mapping file-type-id="FUNCTION" extensions="fnc" /> + <mapping file-type-id="PACKAGE" extensions="pkg" /> + <mapping file-type-id="PACKAGE_SPEC" extensions="pks" /> + <mapping file-type-id="PACKAGE_BODY" extensions="pkb" /> + <mapping file-type-id="TYPE" extensions="tpe" /> + <mapping file-type-id="TYPE_SPEC" extensions="tps" /> + <mapping file-type-id="TYPE_BODY" extensions="tpb" /> + </extensions> + <general> + <lookup-ddl-files value="true" /> + <create-ddl-files value="false" /> + <synchronize-ddl-files value="true" /> + <use-qualified-names value="false" /> + <make-scripts-rerunnable value="true" /> + </general> + </ddl-file-settings> + <general-settings> + <regional-settings> + <date-format value="MEDIUM" /> + <number-format value="UNGROUPED" /> + <locale value="SYSTEM_DEFAULT" /> + <use-custom-formats value="false" /> + </regional-settings> + <environment> + <environment-types> + <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" /> + <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" /> + <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" /> + <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" /> + </environment-types> + <visibility-settings> + <connection-tabs value="true" /> + <dialog-headers value="true" /> + <object-editor-tabs value="true" /> + <script-editor-tabs value="false" /> + <execution-result-tabs value="true" /> + </visibility-settings> + </environment> + </general-settings> + </component> + <component name="DBNavigator.Project.StatementExecutionManager"> + <execution-variables /> + </component> +</project> \ 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 @@ </list> </option> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> \ 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 @@ <version>1.0-SNAPSHOT</version> <properties> - <maven.compiler.source>17</maven.compiler.source> - <maven.compiler.target>17</maven.compiler.target> + <maven.compiler.source>11</maven.compiler.source> + <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> diff --git a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java index 4fed7390ea3b7b3ab9901b8f402f99065adf9142..7acd207f24982bf2667e354a6c1f35b77cf355af 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; @@ -15,8 +14,8 @@ 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(); + DepositServiceImpl depositService = new DepositServiceImpl(new ClientRepository()); + BalanceServiceImpl balanceService = new BalanceServiceImpl(new ClientRepository()); Controller depositController = new DepositControllerImpl(depositService); Controller balanceController = new BalanceControllerImpl(balanceService); 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..0c51991cd1d1c609e46d4192e603a6ab4b568b83 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,7 @@ 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 java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -10,9 +10,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,9 +18,9 @@ import static ufrn.imd.utils.NameSpace.PORT_BALANCE_SERVICE; @lombok.extern.java.Log public class BalanceControllerImpl extends UnicastRemoteObject implements Controller { - private volatile List<Client> clients = new ArrayList<>(); + private volatile Queue<Client> clients = new ArrayDeque<>(); - public BalanceControllerImpl(BalanceService service) throws RemoteException, MalformedURLException, AlreadyBoundException { + public BalanceControllerImpl(BalanceServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); LocateRegistry.createRegistry(PORT_BALANCE_SERVICE); @@ -46,9 +44,9 @@ public class BalanceControllerImpl extends UnicastRemoteObject implements Contro private class Notify extends Thread{ - private final BalanceService service; + private final BalanceServiceImpl service; - public Notify(BalanceService service) { + public Notify(BalanceServiceImpl service) { super(); this.service = service; } @@ -59,29 +57,24 @@ public class BalanceControllerImpl extends UnicastRemoteObject implements Contro log.info("notyfing the clients!"); int i = 0; - for (Client client : clients) { - + clients.stream().forEach(client -> { try { - this.service.balance(Optional.of(client.getAccount())); + log.info(String.format("Clients waiting %d", clients.size())); + this.service.balance(Optional.of(client)); + clients.remove(); + log.info(String.format("Clients waiting %d", clients.size())); } 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/controller/impl/DepositControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java index 958ac87bc7db216602387ecf2ca281dc5c147883..d9b3df5950323de0002ab2dd569206be9d510578 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,7 @@ 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 java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -11,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_DEPOSIT_SERVICE; import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; @@ -21,8 +19,8 @@ import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; @Log public class DepositControllerImpl extends UnicastRemoteObject implements Controller { - private volatile List<Client> clients = new ArrayList<>(); - public DepositControllerImpl(DepositService service) throws RemoteException, MalformedURLException, AlreadyBoundException { + private volatile Queue<Client> clients = new ArrayDeque<>(); + public DepositControllerImpl(DepositServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); log.info("Starting Deposit service!"); @@ -46,9 +44,9 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro private class Notify extends Thread{ - private final DepositService service; + private final DepositServiceImpl service; - public Notify(DepositService service) { + public Notify(DepositServiceImpl service) { super(); this.service = service; } @@ -60,31 +58,23 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro log.info("notyfing the clients!"); int i = 0; - for (Client client : clients) { - + clients.stream().forEach(client -> { try { - this.service.deposit(200.00, Optional.of(client.getAccount())); + log.info(String.format("Clients waiting %d", clients.size())); + this.service.deposit(200.00, Optional.of(client)); + clients.remove(); + log.info(String.format("Clients waiting %d", clients.size())); } 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 <T>{ - public T find(Integer id); + public Optional<T> find(Integer id); public List<T> 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<Client> { List<Client> 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<Client> 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> 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> 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<T> { + +} 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..469601d1bb75fb17afbd2fe1c3d9a98dcd3afb2e 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,19 +1,28 @@ 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 java.rmi.RemoteException; import java.util.Optional; @Log -public class BalanceServiceImpl implements BalanceService { +@RequiredArgsConstructor +public class BalanceServiceImpl implements Service { - @Override - public void balance(Optional<Account> accOP) throws RemoteException { - Account account = accOP.orElseThrow(() -> new RuntimeException("Invalid account")); + private final Repository<Client> clientRepository; + + public void balance(Optional<Client> 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())); } 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..e7a86534678ccca34c0e0082c9bb92b2bfff00b5 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,31 @@ 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 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<Account> 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<Client> repository; + + public void deposit(Double value, Optional<Client> 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())); } } diff --git a/banking-server/target/classes/ufrn/imd/BankingServerApp.class b/banking-server/target/classes/ufrn/imd/BankingServerApp.class index e981c23cd377d28abc4078145c4d6009f4c2c7e6..e7bc89caf443850f74b54ca56cfedf3e1bb21797 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..f430dd8e588b7787d3b1e57839844a0ca969b2ba 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 index 7f067992c8a00c6fd8c3203ad80e171f7a42fb6b..6f1fd296957eb44ef8553d3843aed5dde42adc51 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class and b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class 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..9f55bf8b7d1a386ab7716d59ba2a4476c94238ce 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 index 9697b9b922e597e1104c36d785b29568877a9002..b8477ef07534ba6cd062501ed1b04324a2d61879 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class and b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class 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..47a33bc2bcf84a94279a49f43193a5456f898b72 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..b4fa9209a9ee6e21b9c3435e2894b0809385ba08 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..cf644482cf2f5b0e07d532cd3dfeb33d543e52c6 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