Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions hexagonal/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung</groupId>
<artifactId>hexagonal</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hexagonal</name>
<description>Hexagonal Architecture</description>
</project>
11 changes: 11 additions & 0 deletions hexagonal/src/main/java/com/baeldung/hexagonal/Hexagonal.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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<User> userList = repo.getUsers();
// Perform business logic
userList.forEach(user -> {
System.out.println(user.getLastName()+", "+user.getFirstName());
});
}
}
31 changes: 31 additions & 0 deletions hexagonal/src/main/java/com/baeldung/hexagonal/dto/User.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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<User> getUsers() {
String line = "";
List<User> 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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.baeldung.hexagonal.repository;

import java.util.List;

import com.baeldung.hexagonal.dto.User;

public interface UserRepository {
public List<User> getUsers();
}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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<User> userList = repo.getUsers();
assert(userList != null && userList.size() > 0);
}
}
4 changes: 4 additions & 0 deletions hexagonal/users.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1,Rachel,Grey
2,Laura,Jenkins
3,Craig,Booker
4,Mary,Smith