From df9be7850490558e7e506961a24c4816765c37d4 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Fri, 11 Aug 2017 16:17:51 +0530 Subject: [PATCH] #348 - Data Tranfer Object : customer client request customer details to server at one shot. --- .../etc/data-transfer-object.urm.png | Bin 14193 -> 19132 bytes .../etc/data-transfer-object.urm.puml | 5 ++ .../datatransfer/CustomerClientApp.java | 78 ++++++++++++++++++ .../datatransfer/CustomerResourceTest.java | 14 ++-- 4 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java diff --git a/data-transfer-object/etc/data-transfer-object.urm.png b/data-transfer-object/etc/data-transfer-object.urm.png index 3c4377ee978dc37ff69d045d771583790062b8ea..46facff8dee4c45b2c6bbafb7ea6c3b6be80dfc3 100644 GIT binary patch literal 19132 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 R(&9dol~j_*6aUNm{{y~+`I`U$ literal 14193 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 {static} + } class CustomerDto { - firstName : String - id : String diff --git a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java new file mode 100644 index 000000000..3a9e8b88f --- /dev/null +++ b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java @@ -0,0 +1,78 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2017 Gopinath Langote + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package com.iluwatar.datatransfer; + +import java.util.ArrayList; +import java.util.List; + +/** + * The Data Transfer Object pattern is a design pattern in which an data transfer object is used to serve related + * information together to avoid multiple call for each piece of information. + *

+ * In this example, ({@link CustomerClientApp}) as as customer details consumer i.e. client to request for + * customer details to server. + *

+ * CustomerResource ({@link CustomerResource}) act as server to serve customer information. + * And The CustomerDto ({@link CustomerDto} is data transfer object to share customer information. + */ +public class CustomerClientApp { + /** + * Method as act client and request to server for details. + * + * @param args program argument. + */ + public static void main(String[] args) { + List customers = new ArrayList<>(); + CustomerDto customerOne = new CustomerDto("1", "Kelly", "Brown"); + CustomerDto customerTwo = new CustomerDto("2", "Alfonso", "Bass"); + customers.add(customerOne); + customers.add(customerTwo); + + CustomerResource customerResource = new CustomerResource(customers); + + System.out.println("All customers:-"); + List allCustomers = customerResource.getAllCustomers(); + printCustomerDetails(allCustomers); + + System.out.println("----------------------------------------------------------"); + + System.out.println("Deleting customer with id {1}"); + customerResource.delete(customerOne.getId()); + allCustomers = customerResource.getAllCustomers(); + printCustomerDetails(allCustomers); + + System.out.println("----------------------------------------------------------"); + + System.out.println("Adding customer three}"); + CustomerDto customerThree = new CustomerDto("3", "Lynda", "Blair"); + customerResource.save(customerThree); + allCustomers = customerResource.getAllCustomers(); + printCustomerDetails(allCustomers); + } + + private static void printCustomerDetails(List allCustomers) { + allCustomers.forEach(customer -> System.out.println(customer.getFirstName())); + } +} diff --git a/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java b/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java index 8d5c7b50f..adfe66b7d 100644 --- a/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java +++ b/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java @@ -37,7 +37,7 @@ import static org.junit.Assert.assertEquals; public class CustomerResourceTest { @Test public void shouldGetAllCustomers() { - CustomerDto customer = new CustomerDto("1", "David", "Roy"); + CustomerDto customer = new CustomerDto("1", "Melody", "Yates"); List customers = new ArrayList<>(); customers.add(customer); @@ -47,26 +47,26 @@ public class CustomerResourceTest { assertEquals(allCustomers.size(), 1); assertEquals(allCustomers.get(0).getId(), "1"); - assertEquals(allCustomers.get(0).getFirstName(), "David"); - assertEquals(allCustomers.get(0).getLastName(), "Roy"); + assertEquals(allCustomers.get(0).getFirstName(), "Melody"); + assertEquals(allCustomers.get(0).getLastName(), "Yates"); } @Test public void shouldSaveCustomer() { - CustomerDto customer = new CustomerDto("1", "David", "Roy"); + CustomerDto customer = new CustomerDto("1", "Rita", "Reynolds"); CustomerResource customerResource = new CustomerResource(new ArrayList<>()); customerResource.save(customer); List allCustomers = customerResource.getAllCustomers(); assertEquals(allCustomers.get(0).getId(), "1"); - assertEquals(allCustomers.get(0).getFirstName(), "David"); - assertEquals(allCustomers.get(0).getLastName(), "Roy"); + assertEquals(allCustomers.get(0).getFirstName(), "Rita"); + assertEquals(allCustomers.get(0).getLastName(), "Reynolds"); } @Test public void shouldDeleteCustomer() { - CustomerDto customer = new CustomerDto("1", "David", "Roy"); + CustomerDto customer = new CustomerDto("1", "Terry", "Nguyen"); List customers = new ArrayList<>(); customers.add(customer);