diff --git a/hexagonal/pom.xml b/hexagonal/pom.xml new file mode 100644 index 000000000000..2cb27a626676 --- /dev/null +++ b/hexagonal/pom.xml @@ -0,0 +1,8 @@ + + 4.0.0 + com.baeldung + hexagonal + 0.0.1-SNAPSHOT + Hexagonal + Hexagonal Architecture + \ No newline at end of file diff --git a/hexagonal/src/main/java/com/baeldung/hexagonal/Hexagonal.java b/hexagonal/src/main/java/com/baeldung/hexagonal/Hexagonal.java new file mode 100644 index 000000000000..5cd19cac2dcd --- /dev/null +++ b/hexagonal/src/main/java/com/baeldung/hexagonal/Hexagonal.java @@ -0,0 +1,11 @@ +package com.baeldung.hexagonal; + +import com.baeldung.hexagonal.bo.BusinessLogic; + +public class Hexagonal { + + public static void main(String[] args) { + BusinessLogic logic = new BusinessLogic(); + logic.processUsers(); + } +} diff --git a/hexagonal/src/main/java/com/baeldung/hexagonal/bo/BusinessLogic.java b/hexagonal/src/main/java/com/baeldung/hexagonal/bo/BusinessLogic.java new file mode 100644 index 000000000000..c5d57f271dce --- /dev/null +++ b/hexagonal/src/main/java/com/baeldung/hexagonal/bo/BusinessLogic.java @@ -0,0 +1,20 @@ +package com.baeldung.hexagonal.bo; + +import java.util.List; + +import com.baeldung.hexagonal.dto.User; +import com.baeldung.hexagonal.factory.RepositoryFactory; +import com.baeldung.hexagonal.repository.UserRepository; + +public class BusinessLogic { + public void processUsers() { + // Use factory to get an adapter for reading users + UserRepository repo = RepositoryFactory.getUserRepository(); + // Get Users + List userList = repo.getUsers(); + // Perform business logic + userList.forEach(user -> { + System.out.println(user.getLastName()+", "+user.getFirstName()); + }); + } +} diff --git a/hexagonal/src/main/java/com/baeldung/hexagonal/dto/User.java b/hexagonal/src/main/java/com/baeldung/hexagonal/dto/User.java new file mode 100644 index 000000000000..d73b42b661d4 --- /dev/null +++ b/hexagonal/src/main/java/com/baeldung/hexagonal/dto/User.java @@ -0,0 +1,31 @@ +package com.baeldung.hexagonal.dto; + +public class User { + public int id; + public String firstName; + public String lastName; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } +} diff --git a/hexagonal/src/main/java/com/baeldung/hexagonal/factory/RepositoryFactory.java b/hexagonal/src/main/java/com/baeldung/hexagonal/factory/RepositoryFactory.java new file mode 100644 index 000000000000..538609689d32 --- /dev/null +++ b/hexagonal/src/main/java/com/baeldung/hexagonal/factory/RepositoryFactory.java @@ -0,0 +1,13 @@ +package com.baeldung.hexagonal.factory; + +import com.baeldung.hexagonal.repository.FileBasedUserRepository; +import com.baeldung.hexagonal.repository.UserRepository; + +public class RepositoryFactory { + public static UserRepository getUserRepository() { + // Here we would implement the logic to determine the type of + // UserRepository to return, presumably based on some configuration + // or environmental setting. + return new FileBasedUserRepository(); + } +} diff --git a/hexagonal/src/main/java/com/baeldung/hexagonal/repository/FileBasedUserRepository.java b/hexagonal/src/main/java/com/baeldung/hexagonal/repository/FileBasedUserRepository.java new file mode 100644 index 000000000000..59c7de251bb0 --- /dev/null +++ b/hexagonal/src/main/java/com/baeldung/hexagonal/repository/FileBasedUserRepository.java @@ -0,0 +1,37 @@ +package com.baeldung.hexagonal.repository; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.baeldung.hexagonal.dto.User; + +public class FileBasedUserRepository implements UserRepository { + + @Override + public List getUsers() { + String line = ""; + List userList = new ArrayList<>(); + try + { + //parsing a CSV file into BufferedReader class constructor + BufferedReader br = new BufferedReader(new FileReader("users.csv")); + while ((line = br.readLine()) != null) //returns a Boolean value + { + String[] userComponents = line.split(","); // use comma as separator + User user = new User(); + user.setId(Integer.valueOf(userComponents[0])); + user.setFirstName(userComponents[1]); + user.setLastName(userComponents[2]); + userList.add(user); + } + br.close(); + return userList; + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/hexagonal/src/main/java/com/baeldung/hexagonal/repository/UserRepository.java b/hexagonal/src/main/java/com/baeldung/hexagonal/repository/UserRepository.java new file mode 100644 index 000000000000..9173ea0370d1 --- /dev/null +++ b/hexagonal/src/main/java/com/baeldung/hexagonal/repository/UserRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.hexagonal.repository; + +import java.util.List; + +import com.baeldung.hexagonal.dto.User; + +public interface UserRepository { + public List getUsers(); +} diff --git a/hexagonal/src/test/java/com/baeldung/hexagonal/factory/RepositoryFactoryTest.java b/hexagonal/src/test/java/com/baeldung/hexagonal/factory/RepositoryFactoryTest.java new file mode 100644 index 000000000000..969dcd31c32b --- /dev/null +++ b/hexagonal/src/test/java/com/baeldung/hexagonal/factory/RepositoryFactoryTest.java @@ -0,0 +1,15 @@ +package com.baeldung.hexagonal.factory; + +import org.junit.jupiter.api.Test; + +import com.baeldung.hexagonal.repository.UserRepository; + +class RepositoryFactoryTest { + + @Test + void test() { + UserRepository repo = RepositoryFactory.getUserRepository(); + assert(repo != null); + } + +} diff --git a/hexagonal/src/test/java/com/baeldung/hexagonal/repository/FileBasedUserRepositoryTest.java b/hexagonal/src/test/java/com/baeldung/hexagonal/repository/FileBasedUserRepositoryTest.java new file mode 100644 index 000000000000..881051d6b92f --- /dev/null +++ b/hexagonal/src/test/java/com/baeldung/hexagonal/repository/FileBasedUserRepositoryTest.java @@ -0,0 +1,17 @@ +package com.baeldung.hexagonal.repository; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.baeldung.hexagonal.dto.User; + +class FileBasedUserRepositoryTest { + + @Test + void test() { + UserRepository repo = new FileBasedUserRepository(); + List userList = repo.getUsers(); + assert(userList != null && userList.size() > 0); + } +} diff --git a/hexagonal/users.csv b/hexagonal/users.csv new file mode 100644 index 000000000000..f781ef1d36ad --- /dev/null +++ b/hexagonal/users.csv @@ -0,0 +1,4 @@ +1,Rachel,Grey +2,Laura,Jenkins +3,Craig,Booker +4,Mary,Smith