From 91e50545f814f41001d99191ca5c9c0e0e909647 Mon Sep 17 00:00:00 2001 From: caroline Date: Mon, 14 Jan 2019 19:56:19 +0100 Subject: [PATCH 1/6] Source Code for hexagonal architecture article. --- patterns/hexagonal-design-pattern/.gitignore | 5 ++ patterns/hexagonal-design-pattern/pom.xml | 80 +++++++++++++++++++ .../com/baeldung/hexagonal/Application.java | 13 +++ .../adapter/controller/UserController.java | 31 +++++++ .../adapter/data/UserDataAdapter.java | 11 +++ .../adapter/data/UserDataAdapterImpl.java | 27 +++++++ .../adapter/data/entity/UserEntity.java | 39 +++++++++ .../adapter/data/mapper/ModelMapper.java | 41 ++++++++++ .../data/repository/UserRepository.java | 8 ++ .../hexagonal/config/PersistenceConfig.java | 24 ++++++ .../hexagonal/core/contract/User.java | 34 ++++++++ .../hexagonal/core/contract/UserService.java | 10 +++ .../hexagonal/core/contract/dto/UserDTO.java | 24 ++++++ .../core/mapper/CoreModelMapper.java | 41 ++++++++++ .../core/service/UserServiceImpl.java | 28 +++++++ .../src/main/resources/application.properties | 5 ++ .../src/main/resources/logback.xml | 13 +++ .../src/main/resources/myData.sql | 1 + .../src/main/resources/mySchema.sql | 1 + .../hexagonal/test/UserControllerTest.java | 54 +++++++++++++ patterns/pom.xml | 1 + 21 files changed, 491 insertions(+) create mode 100644 patterns/hexagonal-design-pattern/.gitignore create mode 100644 patterns/hexagonal-design-pattern/pom.xml create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java create mode 100644 patterns/hexagonal-design-pattern/src/main/resources/application.properties create mode 100644 patterns/hexagonal-design-pattern/src/main/resources/logback.xml create mode 100644 patterns/hexagonal-design-pattern/src/main/resources/myData.sql create mode 100644 patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql create mode 100644 patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java diff --git a/patterns/hexagonal-design-pattern/.gitignore b/patterns/hexagonal-design-pattern/.gitignore new file mode 100644 index 0000000000..aceea512a2 --- /dev/null +++ b/patterns/hexagonal-design-pattern/.gitignore @@ -0,0 +1,5 @@ +/target/ +.settings/ +.classpath +.project +/bin/ diff --git a/patterns/hexagonal-design-pattern/pom.xml b/patterns/hexagonal-design-pattern/pom.xml new file mode 100644 index 0000000000..1552859a65 --- /dev/null +++ b/patterns/hexagonal-design-pattern/pom.xml @@ -0,0 +1,80 @@ + + 4.0.0 + com.baeldung + hexagonal-design-pattern + 0.0.1-SNAPSHOT + hexagonal-design-pattern + war + + + org.springframework.boot + spring-boot-starter-parent + 1.5.3.RELEASE + + + + + ma.glasnost.orika + orika-core + 1.4.6 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-test + + + + + + + maven-compiler-plugin + + + maven-war-plugin + + WebContent + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + com.baeldung.hexagonal.Application + ${project.basedir}/docker + + + + + + + + + + 8.0.43 + UTF-8 + 1.8 + + + diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java new file mode 100644 index 0000000000..772a8ad9fd --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java @@ -0,0 +1,13 @@ +package com.baeldung.hexagonal; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java new file mode 100644 index 0000000000..1d4dda510e --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java @@ -0,0 +1,31 @@ +package com.baeldung.hexagonal.adapter.controller; + +import java.util.List; + +import com.baeldung.hexagonal.core.contract.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.HttpStatus; +import com.baeldung.hexagonal.core.contract.User; + +@RestController +public class UserController { + + @Autowired + private UserService userService; + + @PostMapping("/users") + @ResponseStatus(HttpStatus.CREATED) + public void addUser(@RequestBody User user) { + userService.addUser(user); + } + + @GetMapping("/users") + public List getUsers() { + return userService.getUsers(); + } +} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java new file mode 100644 index 0000000000..38a0e08468 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java @@ -0,0 +1,11 @@ +package com.baeldung.hexagonal.adapter.data; + +import com.baeldung.hexagonal.core.contract.dto.UserDTO; +import java.util.List; + +public interface UserDataAdapter { + + void addUser(UserDTO user); + + List getUsers(); +} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java new file mode 100644 index 0000000000..fe100b1ce0 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java @@ -0,0 +1,27 @@ +package com.baeldung.hexagonal.adapter.data; + +import com.baeldung.hexagonal.adapter.data.entity.UserEntity; +import com.baeldung.hexagonal.adapter.data.mapper.ModelMapper; +import com.baeldung.hexagonal.adapter.data.repository.UserRepository; +import com.baeldung.hexagonal.core.contract.dto.UserDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.List; + +@Component +public class UserDataAdapterImpl implements UserDataAdapter { + + @Autowired + private UserRepository userRepository; + + @Autowired + private ModelMapper modelMapper; + + public void addUser(UserDTO user) { + userRepository.save(modelMapper.map(user, UserEntity.class)); + } + + public List getUsers() { + return modelMapper.mapAsList(userRepository.findAll(), UserDTO.class); + } +} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java new file mode 100644 index 0000000000..91f80efa90 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java @@ -0,0 +1,39 @@ +package com.baeldung.hexagonal.adapter.data.entity; + +import javax.persistence.*; + +@Entity(name = "user") +@Table(name = "user") +public class UserEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private String name; + + public UserEntity() { + } + + public UserEntity(long id, String name) { + super(); + this.id = id; + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java new file mode 100644 index 0000000000..f451781b06 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java @@ -0,0 +1,41 @@ +package com.baeldung.hexagonal.adapter.data.mapper; + +import com.baeldung.hexagonal.adapter.data.entity.UserEntity; +import com.baeldung.hexagonal.core.contract.dto.UserDTO; +import ma.glasnost.orika.CustomMapper; +import ma.glasnost.orika.MapperFactory; +import ma.glasnost.orika.MappingContext; +import ma.glasnost.orika.impl.ConfigurableMapper; +import org.springframework.stereotype.Component; + +@Component +public class ModelMapper extends ConfigurableMapper { + + public void configure(MapperFactory factory) { + super.configure(factory); + + factory.registerClassMap(factory.classMap(UserDTO.class, UserEntity.class) + .customize(new CustomMapper() { + @Override + public void mapAtoB(UserDTO userDTO, UserEntity userEntity, MappingContext context) { + userEntity.setId(userDTO.getId()); + userEntity.setName(userDTO.getName()); + } + }) + .byDefault() + .toClassMap()); + + factory.registerClassMap(factory.classMap(UserEntity.class, UserDTO.class) + .customize(new CustomMapper() { + @Override + public void mapAtoB(UserEntity userEntity, UserDTO userDTO, MappingContext context) { + userDTO.setId(userEntity.getId()); + userDTO.setName(userEntity.getName()); + } + }) + .byDefault() + .toClassMap()); + + } + +} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java new file mode 100644 index 0000000000..937be19056 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.hexagonal.adapter.data.repository; + +import com.baeldung.hexagonal.adapter.data.entity.UserEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + +} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java new file mode 100644 index 0000000000..b9a5f9d556 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java @@ -0,0 +1,24 @@ +package com.baeldung.hexagonal.config; + +import javax.sql.DataSource; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; + +@Configuration +public class PersistenceConfig { + + @Bean + public DataSource dataSource() { + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); + EmbeddedDatabase db = builder.setType(EmbeddedDatabaseType.H2) + .addScript("mySchema.sql") + .addScript("myData.sql") + .build(); + return db; + } + +} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java new file mode 100644 index 0000000000..2013c2a88e --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java @@ -0,0 +1,34 @@ +package com.baeldung.hexagonal.core.contract; + +public class User { + + private long id; + + private String name; + + public User() { + } + + public User(long id, String name) { + super(); + this.id = id; + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java new file mode 100644 index 0000000000..2b0867872a --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java @@ -0,0 +1,10 @@ +package com.baeldung.hexagonal.core.contract; + +import java.util.List; + +public interface UserService { + + void addUser(User user); + + List getUsers(); +} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java new file mode 100644 index 0000000000..a92851310b --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java @@ -0,0 +1,24 @@ +package com.baeldung.hexagonal.core.contract.dto; + +public class UserDTO { + + private long id; + + private String name; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java new file mode 100644 index 0000000000..1cb569d109 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java @@ -0,0 +1,41 @@ +package com.baeldung.hexagonal.core.mapper; + +import com.baeldung.hexagonal.core.contract.dto.UserDTO; +import com.baeldung.hexagonal.core.contract.User; +import ma.glasnost.orika.CustomMapper; +import ma.glasnost.orika.MapperFactory; +import ma.glasnost.orika.MappingContext; +import ma.glasnost.orika.impl.ConfigurableMapper; +import org.springframework.stereotype.Component; + +@Component +public class CoreModelMapper extends ConfigurableMapper { + + public void configure(MapperFactory factory) { + super.configure(factory); + + factory.registerClassMap(factory.classMap(UserDTO.class, User.class) + .customize(new CustomMapper() { + @Override + public void mapAtoB(UserDTO userDTO, User user, MappingContext context) { + user.setId(userDTO.getId()); + user.setName(userDTO.getName()); + } + }) + .byDefault() + .toClassMap()); + + factory.registerClassMap(factory.classMap(User.class, UserDTO.class) + .customize(new CustomMapper() { + @Override + public void mapAtoB(User user, UserDTO userDTO, MappingContext context) { + userDTO.setId(user.getId()); + userDTO.setName(user.getName()); + } + }) + .byDefault() + .toClassMap()); + + } + +} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java new file mode 100644 index 0000000000..3b4800cffc --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java @@ -0,0 +1,28 @@ +package com.baeldung.hexagonal.core.service; + +import com.baeldung.hexagonal.adapter.data.UserDataAdapter; +import com.baeldung.hexagonal.core.contract.UserService; +import com.baeldung.hexagonal.core.contract.dto.UserDTO; +import com.baeldung.hexagonal.core.mapper.CoreModelMapper; +import com.baeldung.hexagonal.core.contract.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +@Service +public class UserServiceImpl implements UserService { + + @Autowired + private UserDataAdapter userDataAdapter; + + @Autowired + private CoreModelMapper coreModelMapper; + + public void addUser(User user) { + userDataAdapter.addUser(coreModelMapper.map(user, UserDTO.class)); + } + + public List getUsers() { + return coreModelMapper.mapAsList(userDataAdapter.getUsers(), User.class); + } +} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/application.properties b/patterns/hexagonal-design-pattern/src/main/resources/application.properties new file mode 100644 index 0000000000..4420285967 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/resources/application.properties @@ -0,0 +1,5 @@ +server.port=8081 +server.contextPath=/hexagonaldesignapp +logging.level.org.springframework.web: INFO + +spring.jpa.hibernate.ddl-auto=update \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/logback.xml b/patterns/hexagonal-design-pattern/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/myData.sql b/patterns/hexagonal-design-pattern/src/main/resources/myData.sql new file mode 100644 index 0000000000..21353649ba --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/resources/myData.sql @@ -0,0 +1 @@ +insert into user(name) values ('ana'); \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql b/patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql new file mode 100644 index 0000000000..d561e4f8b2 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql @@ -0,0 +1 @@ +create table user(id int identity primary key, name varchar(30)); \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java b/patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java new file mode 100644 index 0000000000..3b0c849e3b --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java @@ -0,0 +1,54 @@ +package com.baeldung.hexagonal.test; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.hamcrest.Matchers.*; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import com.baeldung.hexagonal.Application; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +@WebAppConfiguration +public class UserControllerTest { + + private static final String CONTENT_TYPE = "application/json;charset=UTF-8"; + + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext webApplicationContext; + + @Before + public void setup() throws Exception { + this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) + .build(); + } + + @Test + public void whenCreateGetUser_thenOk() throws Exception { + String userJson = "{\"name\":\"john\"}"; + + this.mockMvc.perform(post("/users").contentType(CONTENT_TYPE) + .content(userJson)) + .andExpect(status().isCreated()); + + this.mockMvc.perform(get("/users")) + .andExpect(status().isOk()) + .andExpect(content().contentType(CONTENT_TYPE)) + .andExpect(jsonPath("$", hasSize(2))) + .andExpect(jsonPath("$[0].name", is("ana"))) + .andExpect(jsonPath("$[1].name", is("john"))); + } +} diff --git a/patterns/pom.xml b/patterns/pom.xml index bc1f5173e2..795b4c64db 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -17,6 +17,7 @@ front-controller intercepting-filter design-patterns + hexagonal-design-pattern From ab4b3368bd50734f24d00a1eacae3e7b24fe1154 Mon Sep 17 00:00:00 2001 From: caroline Date: Tue, 15 Jan 2019 21:06:57 +0100 Subject: [PATCH 2/6] Source Code for hexagonal architecture article. --- .../hexagonal/core/contract/UserDataAdapter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java new file mode 100644 index 0000000000..b89410e139 --- /dev/null +++ b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java @@ -0,0 +1,12 @@ +package com.baeldung.hexagonal.core.contract; + +import com.baeldung.hexagonal.core.contract.dto.UserDTO; + +import java.util.List; + +public interface UserDataAdapter { + + void addUser(UserDTO user); + + List getUsers(); +} \ No newline at end of file From 73f2a12c4e2a18105f92491027d7d91d6e1b91b2 Mon Sep 17 00:00:00 2001 From: caroline Date: Tue, 29 Jan 2019 22:52:53 +0100 Subject: [PATCH 3/6] Source Code for BAEL-2534 : Determine if all elements are the same in a Java list --- core-java-collections-list/pom.xml | 7 + .../VerifyAllEqualListElements.java | 43 +++++ .../VerifyAllEqualListElementsUnitTest.java | 181 ++++++++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java create mode 100644 core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java diff --git a/core-java-collections-list/pom.xml b/core-java-collections-list/pom.xml index ee99e470d0..103508b948 100644 --- a/core-java-collections-list/pom.xml +++ b/core-java-collections-list/pom.xml @@ -36,6 +36,12 @@ ${lombok.version} provided + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + @@ -44,5 +50,6 @@ 1.7.0 3.11.1 1.16.12 + 5.0.0-M4 diff --git a/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java b/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java new file mode 100644 index 0000000000..033245f239 --- /dev/null +++ b/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java @@ -0,0 +1,43 @@ +package com.baeldung.allequalelements; + +import java.util.List; +import org.apache.commons.collections4.IterableUtils; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; + +public class VerifyAllEqualListElements { + + public boolean verifyAllEqualUsingALoop(List list) { + for (String s : list) { + if(!s.equals(list.get(0))) + return false; + } + return true; + } + + public boolean verifyAllEqualUsingStream(List list) { + return list.stream().distinct().limit(2).count() <= 1; + } + + public boolean verifyAllEqualAnotherUsingStream(List list) { + return list.isEmpty() || list.stream().allMatch(list.get(0)::equals); + } + + + public boolean verifyAllEqualUsingGuava(List list) { + return Iterables.all(list, new Predicate() { + public boolean apply(String s) { + return s.equals(list.get(0)); + } + }); + } + + public boolean verifyAllEqualUsingApacheCommon(List list) { + return IterableUtils.matchesAll(list, new org.apache.commons.collections4.Predicate() { + public boolean evaluate(String s) { + return s.equals(list.get(0)); + } + }); + } + +} \ No newline at end of file diff --git a/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java b/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java new file mode 100644 index 0000000000..6ebb724580 --- /dev/null +++ b/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java @@ -0,0 +1,181 @@ +package com.baeldung.allequalelements; + +import org.junit.Test; +import java.util.ArrayList; +import java.util.List; +import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class VerifyAllEqualListElementsUnitTest { + + private static List distinctList = new ArrayList<>(); + + static { + distinctList.add(new String("Jack")); + distinctList.add(new String("James")); + distinctList.add(new String("Sam")); + } + + private static List notAllEqualList = new ArrayList<>(); + + static { + notAllEqualList.add(new String("Jack")); + notAllEqualList.add(new String("James")); + notAllEqualList.add(new String("Sam")); + notAllEqualList.add(new String("James")); + } + + private static List emptyList = new ArrayList<>(); + + private static List allEqualList = new ArrayList<>(); + + static { + allEqualList.add(new String("Jack")); + allEqualList.add(new String("Jack")); + allEqualList.add(new String("Jack")); + allEqualList.add(new String("Jack")); + } + + private static VerifyAllEqualListElements verifyAllEqualListElements = new VerifyAllEqualListElements(); + + @Test + public void verifyAllEqualUsingALoop_whenUsingDistinctList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(distinctList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingALoop_whenNotAllEqualList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(notAllEqualList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingALoop_whenEmptyList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(emptyList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingALoop_whenAllEqualList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(allEqualList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingStream_whenUsingDistinctList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(distinctList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingStream_whenNotAllEqualList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(notAllEqualList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingStream_whenEmptyList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(emptyList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingStream_whenAllEqualList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(allEqualList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualAnotherUsingStream_whenUsingDistinctList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(distinctList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualAnotherUsingStream_whenNotAllEqualList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(notAllEqualList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualAnotherUsingStream_whenEmptyList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(emptyList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualAnotherUsingStream_whenAllEqualList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(allEqualList); + + assertTrue(allEqual); + } + + + @Test + public void verifyAllEqualUsingGuava_whenUsingDistinctList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(distinctList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingGuava_whenNotAllEqualList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(notAllEqualList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingGuava_whenEmptyList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(emptyList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingGuava_whenAllEqualList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(allEqualList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingApacheCommon_whenUsingDistinctList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(distinctList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingApacheCommon_whenNotAllEqualList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(notAllEqualList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingApacheCommon_whenEmptyList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(emptyList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingApacheCommon_whenAllEqualList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(allEqualList); + + assertTrue(allEqual); + } +} From 555409b78ed9bbfa43734ac9764f2b29fbcf4490 Mon Sep 17 00:00:00 2001 From: caroline Date: Fri, 1 Feb 2019 21:34:08 +0100 Subject: [PATCH 4/6] Source Code for BAEL-2534 : Determine if all elements are the same in a Java list --- core-java-collections-list/pom.xml | 7 -- .../VerifyAllEqualListElements.java | 21 ++++- .../VerifyAllEqualListElementsUnitTest.java | 79 ++++++++++++++----- 3 files changed, 78 insertions(+), 29 deletions(-) diff --git a/core-java-collections-list/pom.xml b/core-java-collections-list/pom.xml index 103508b948..ee99e470d0 100644 --- a/core-java-collections-list/pom.xml +++ b/core-java-collections-list/pom.xml @@ -36,12 +36,6 @@ ${lombok.version} provided - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter.version} - test - @@ -50,6 +44,5 @@ 1.7.0 3.11.1 1.16.12 - 5.0.0-M4 diff --git a/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java b/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java index 033245f239..7c9b4a5b9f 100644 --- a/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java +++ b/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java @@ -1,5 +1,7 @@ package com.baeldung.allequalelements; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import org.apache.commons.collections4.IterableUtils; import com.google.common.base.Predicate; @@ -9,21 +11,32 @@ public class VerifyAllEqualListElements { public boolean verifyAllEqualUsingALoop(List list) { for (String s : list) { - if(!s.equals(list.get(0))) + if (!s.equals(list.get(0))) return false; } return true; } + public boolean verifyAllEqualUsingHashSet(List list) { + return new HashSet(list).size() <= 1; + } + + public boolean verifyAllEqualUsingFrequency(List list) { + return list.isEmpty() || Collections.frequency(list, list.get(0)) == list.size(); + } + public boolean verifyAllEqualUsingStream(List list) { - return list.stream().distinct().limit(2).count() <= 1; + return list.stream() + .distinct() + .limit(2) + .count() <= 1; } public boolean verifyAllEqualAnotherUsingStream(List list) { - return list.isEmpty() || list.stream().allMatch(list.get(0)::equals); + return list.isEmpty() || list.stream() + .allMatch(list.get(0)::equals); } - public boolean verifyAllEqualUsingGuava(List list) { return Iterables.all(list, new Predicate() { public boolean apply(String s) { diff --git a/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java b/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java index 6ebb724580..12c9b0ebeb 100644 --- a/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java +++ b/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java @@ -2,6 +2,7 @@ package com.baeldung.allequalelements; import org.junit.Test; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -10,30 +11,17 @@ public class VerifyAllEqualListElementsUnitTest { private static List distinctList = new ArrayList<>(); - static { - distinctList.add(new String("Jack")); - distinctList.add(new String("James")); - distinctList.add(new String("Sam")); - } - private static List notAllEqualList = new ArrayList<>(); - static { - notAllEqualList.add(new String("Jack")); - notAllEqualList.add(new String("James")); - notAllEqualList.add(new String("Sam")); - notAllEqualList.add(new String("James")); - } - private static List emptyList = new ArrayList<>(); private static List allEqualList = new ArrayList<>(); static { - allEqualList.add(new String("Jack")); - allEqualList.add(new String("Jack")); - allEqualList.add(new String("Jack")); - allEqualList.add(new String("Jack")); + distinctList = Arrays.asList("Jack", "James", "Sam"); + notAllEqualList = Arrays.asList("Jack", "James", "Sam", "James"); + emptyList = Arrays.asList(); + allEqualList = Arrays.asList("Jack", "Jack", "Jack", "Jack"); } private static VerifyAllEqualListElements verifyAllEqualListElements = new VerifyAllEqualListElements(); @@ -66,6 +54,62 @@ public class VerifyAllEqualListElementsUnitTest { assertTrue(allEqual); } + @Test + public void verifyAllEqualUsingHashSet_whenUsingDistinctList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(distinctList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingHashSet_whenNotAllEqualList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(notAllEqualList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingHashSet_whenEmptyList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(emptyList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingHashSet_whenAllEqualList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(allEqualList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingFrequency_whenUsingDistinctList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(distinctList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingFrequency_whenNotAllEqualList_thenReturnFalse() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(notAllEqualList); + + assertFalse(allEqual); + } + + @Test + public void verifyAllEqualUsingFrequency_whenEmptyList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(emptyList); + + assertTrue(allEqual); + } + + @Test + public void verifyAllEqualUsingFrequency_whenAllEqualList_thenReturnTrue() { + boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(allEqualList); + + assertTrue(allEqual); + } + @Test public void verifyAllEqualUsingStream_whenUsingDistinctList_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(distinctList); @@ -122,7 +166,6 @@ public class VerifyAllEqualListElementsUnitTest { assertTrue(allEqual); } - @Test public void verifyAllEqualUsingGuava_whenUsingDistinctList_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(distinctList); From 0a4e783bf552dfd6f462b2c14f1691deb1619556 Mon Sep 17 00:00:00 2001 From: caroline Date: Fri, 1 Feb 2019 21:56:40 +0100 Subject: [PATCH 5/6] Removing code done for demo on Hexagonal Design Pattern. --- patterns/hexagonal-design-pattern/.gitignore | 5 -- patterns/hexagonal-design-pattern/pom.xml | 80 ------------------- .../com/baeldung/hexagonal/Application.java | 13 --- .../adapter/controller/UserController.java | 31 ------- .../adapter/data/UserDataAdapter.java | 11 --- .../adapter/data/UserDataAdapterImpl.java | 27 ------- .../adapter/data/entity/UserEntity.java | 39 --------- .../adapter/data/mapper/ModelMapper.java | 41 ---------- .../data/repository/UserRepository.java | 8 -- .../hexagonal/config/PersistenceConfig.java | 24 ------ .../hexagonal/core/contract/User.java | 34 -------- .../core/contract/UserDataAdapter.java | 12 --- .../hexagonal/core/contract/UserService.java | 10 --- .../hexagonal/core/contract/dto/UserDTO.java | 24 ------ .../core/mapper/CoreModelMapper.java | 41 ---------- .../core/service/UserServiceImpl.java | 28 ------- .../src/main/resources/application.properties | 5 -- .../src/main/resources/logback.xml | 13 --- .../src/main/resources/myData.sql | 1 - .../src/main/resources/mySchema.sql | 1 - .../hexagonal/test/UserControllerTest.java | 54 ------------- patterns/pom.xml | 1 - 22 files changed, 503 deletions(-) delete mode 100644 patterns/hexagonal-design-pattern/.gitignore delete mode 100644 patterns/hexagonal-design-pattern/pom.xml delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java delete mode 100644 patterns/hexagonal-design-pattern/src/main/resources/application.properties delete mode 100644 patterns/hexagonal-design-pattern/src/main/resources/logback.xml delete mode 100644 patterns/hexagonal-design-pattern/src/main/resources/myData.sql delete mode 100644 patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql delete mode 100644 patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java diff --git a/patterns/hexagonal-design-pattern/.gitignore b/patterns/hexagonal-design-pattern/.gitignore deleted file mode 100644 index aceea512a2..0000000000 --- a/patterns/hexagonal-design-pattern/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/target/ -.settings/ -.classpath -.project -/bin/ diff --git a/patterns/hexagonal-design-pattern/pom.xml b/patterns/hexagonal-design-pattern/pom.xml deleted file mode 100644 index 1552859a65..0000000000 --- a/patterns/hexagonal-design-pattern/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - 4.0.0 - com.baeldung - hexagonal-design-pattern - 0.0.1-SNAPSHOT - hexagonal-design-pattern - war - - - org.springframework.boot - spring-boot-starter-parent - 1.5.3.RELEASE - - - - - ma.glasnost.orika - orika-core - 1.4.6 - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - - com.h2database - h2 - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-test - - - - - - - maven-compiler-plugin - - - maven-war-plugin - - WebContent - - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - com.baeldung.hexagonal.Application - ${project.basedir}/docker - - - - - - - - - - 8.0.43 - UTF-8 - 1.8 - - - diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java deleted file mode 100644 index 772a8ad9fd..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/Application.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.hexagonal; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java deleted file mode 100644 index 1d4dda510e..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/controller/UserController.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.hexagonal.adapter.controller; - -import java.util.List; - -import com.baeldung.hexagonal.core.contract.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.http.HttpStatus; -import com.baeldung.hexagonal.core.contract.User; - -@RestController -public class UserController { - - @Autowired - private UserService userService; - - @PostMapping("/users") - @ResponseStatus(HttpStatus.CREATED) - public void addUser(@RequestBody User user) { - userService.addUser(user); - } - - @GetMapping("/users") - public List getUsers() { - return userService.getUsers(); - } -} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java deleted file mode 100644 index 38a0e08468..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapter.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.hexagonal.adapter.data; - -import com.baeldung.hexagonal.core.contract.dto.UserDTO; -import java.util.List; - -public interface UserDataAdapter { - - void addUser(UserDTO user); - - List getUsers(); -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java deleted file mode 100644 index fe100b1ce0..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/UserDataAdapterImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.hexagonal.adapter.data; - -import com.baeldung.hexagonal.adapter.data.entity.UserEntity; -import com.baeldung.hexagonal.adapter.data.mapper.ModelMapper; -import com.baeldung.hexagonal.adapter.data.repository.UserRepository; -import com.baeldung.hexagonal.core.contract.dto.UserDTO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import java.util.List; - -@Component -public class UserDataAdapterImpl implements UserDataAdapter { - - @Autowired - private UserRepository userRepository; - - @Autowired - private ModelMapper modelMapper; - - public void addUser(UserDTO user) { - userRepository.save(modelMapper.map(user, UserEntity.class)); - } - - public List getUsers() { - return modelMapper.mapAsList(userRepository.findAll(), UserDTO.class); - } -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java deleted file mode 100644 index 91f80efa90..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/entity/UserEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.hexagonal.adapter.data.entity; - -import javax.persistence.*; - -@Entity(name = "user") -@Table(name = "user") -public class UserEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String name; - - public UserEntity() { - } - - public UserEntity(long id, String name) { - super(); - this.id = id; - this.name = name; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java deleted file mode 100644 index f451781b06..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/mapper/ModelMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.hexagonal.adapter.data.mapper; - -import com.baeldung.hexagonal.adapter.data.entity.UserEntity; -import com.baeldung.hexagonal.core.contract.dto.UserDTO; -import ma.glasnost.orika.CustomMapper; -import ma.glasnost.orika.MapperFactory; -import ma.glasnost.orika.MappingContext; -import ma.glasnost.orika.impl.ConfigurableMapper; -import org.springframework.stereotype.Component; - -@Component -public class ModelMapper extends ConfigurableMapper { - - public void configure(MapperFactory factory) { - super.configure(factory); - - factory.registerClassMap(factory.classMap(UserDTO.class, UserEntity.class) - .customize(new CustomMapper() { - @Override - public void mapAtoB(UserDTO userDTO, UserEntity userEntity, MappingContext context) { - userEntity.setId(userDTO.getId()); - userEntity.setName(userDTO.getName()); - } - }) - .byDefault() - .toClassMap()); - - factory.registerClassMap(factory.classMap(UserEntity.class, UserDTO.class) - .customize(new CustomMapper() { - @Override - public void mapAtoB(UserEntity userEntity, UserDTO userDTO, MappingContext context) { - userDTO.setId(userEntity.getId()); - userDTO.setName(userEntity.getName()); - } - }) - .byDefault() - .toClassMap()); - - } - -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java deleted file mode 100644 index 937be19056..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/adapter/data/repository/UserRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.hexagonal.adapter.data.repository; - -import com.baeldung.hexagonal.adapter.data.entity.UserEntity; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UserRepository extends JpaRepository { - -} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java deleted file mode 100644 index b9a5f9d556..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/config/PersistenceConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.hexagonal.config; - -import javax.sql.DataSource; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; - -@Configuration -public class PersistenceConfig { - - @Bean - public DataSource dataSource() { - EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); - EmbeddedDatabase db = builder.setType(EmbeddedDatabaseType.H2) - .addScript("mySchema.sql") - .addScript("myData.sql") - .build(); - return db; - } - -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java deleted file mode 100644 index 2013c2a88e..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/User.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.hexagonal.core.contract; - -public class User { - - private long id; - - private String name; - - public User() { - } - - public User(long id, String name) { - super(); - this.id = id; - this.name = name; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java deleted file mode 100644 index b89410e139..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserDataAdapter.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.hexagonal.core.contract; - -import com.baeldung.hexagonal.core.contract.dto.UserDTO; - -import java.util.List; - -public interface UserDataAdapter { - - void addUser(UserDTO user); - - List getUsers(); -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java deleted file mode 100644 index 2b0867872a..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/UserService.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.hexagonal.core.contract; - -import java.util.List; - -public interface UserService { - - void addUser(User user); - - List getUsers(); -} diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java deleted file mode 100644 index a92851310b..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/contract/dto/UserDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.hexagonal.core.contract.dto; - -public class UserDTO { - - private long id; - - private String name; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java deleted file mode 100644 index 1cb569d109..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/mapper/CoreModelMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.hexagonal.core.mapper; - -import com.baeldung.hexagonal.core.contract.dto.UserDTO; -import com.baeldung.hexagonal.core.contract.User; -import ma.glasnost.orika.CustomMapper; -import ma.glasnost.orika.MapperFactory; -import ma.glasnost.orika.MappingContext; -import ma.glasnost.orika.impl.ConfigurableMapper; -import org.springframework.stereotype.Component; - -@Component -public class CoreModelMapper extends ConfigurableMapper { - - public void configure(MapperFactory factory) { - super.configure(factory); - - factory.registerClassMap(factory.classMap(UserDTO.class, User.class) - .customize(new CustomMapper() { - @Override - public void mapAtoB(UserDTO userDTO, User user, MappingContext context) { - user.setId(userDTO.getId()); - user.setName(userDTO.getName()); - } - }) - .byDefault() - .toClassMap()); - - factory.registerClassMap(factory.classMap(User.class, UserDTO.class) - .customize(new CustomMapper() { - @Override - public void mapAtoB(User user, UserDTO userDTO, MappingContext context) { - userDTO.setId(user.getId()); - userDTO.setName(user.getName()); - } - }) - .byDefault() - .toClassMap()); - - } - -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java b/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java deleted file mode 100644 index 3b4800cffc..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/java/com/baeldung/hexagonal/core/service/UserServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.hexagonal.core.service; - -import com.baeldung.hexagonal.adapter.data.UserDataAdapter; -import com.baeldung.hexagonal.core.contract.UserService; -import com.baeldung.hexagonal.core.contract.dto.UserDTO; -import com.baeldung.hexagonal.core.mapper.CoreModelMapper; -import com.baeldung.hexagonal.core.contract.User; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import java.util.List; - -@Service -public class UserServiceImpl implements UserService { - - @Autowired - private UserDataAdapter userDataAdapter; - - @Autowired - private CoreModelMapper coreModelMapper; - - public void addUser(User user) { - userDataAdapter.addUser(coreModelMapper.map(user, UserDTO.class)); - } - - public List getUsers() { - return coreModelMapper.mapAsList(userDataAdapter.getUsers(), User.class); - } -} \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/application.properties b/patterns/hexagonal-design-pattern/src/main/resources/application.properties deleted file mode 100644 index 4420285967..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/resources/application.properties +++ /dev/null @@ -1,5 +0,0 @@ -server.port=8081 -server.contextPath=/hexagonaldesignapp -logging.level.org.springframework.web: INFO - -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/logback.xml b/patterns/hexagonal-design-pattern/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/myData.sql b/patterns/hexagonal-design-pattern/src/main/resources/myData.sql deleted file mode 100644 index 21353649ba..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/resources/myData.sql +++ /dev/null @@ -1 +0,0 @@ -insert into user(name) values ('ana'); \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql b/patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql deleted file mode 100644 index d561e4f8b2..0000000000 --- a/patterns/hexagonal-design-pattern/src/main/resources/mySchema.sql +++ /dev/null @@ -1 +0,0 @@ -create table user(id int identity primary key, name varchar(30)); \ No newline at end of file diff --git a/patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java b/patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java deleted file mode 100644 index 3b0c849e3b..0000000000 --- a/patterns/hexagonal-design-pattern/src/test/java/com/baeldung/hexagonal/test/UserControllerTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.hexagonal.test; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; - -import static org.hamcrest.Matchers.*; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import com.baeldung.hexagonal.Application; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -@WebAppConfiguration -public class UserControllerTest { - - private static final String CONTENT_TYPE = "application/json;charset=UTF-8"; - - private MockMvc mockMvc; - - @Autowired - private WebApplicationContext webApplicationContext; - - @Before - public void setup() throws Exception { - this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) - .build(); - } - - @Test - public void whenCreateGetUser_thenOk() throws Exception { - String userJson = "{\"name\":\"john\"}"; - - this.mockMvc.perform(post("/users").contentType(CONTENT_TYPE) - .content(userJson)) - .andExpect(status().isCreated()); - - this.mockMvc.perform(get("/users")) - .andExpect(status().isOk()) - .andExpect(content().contentType(CONTENT_TYPE)) - .andExpect(jsonPath("$", hasSize(2))) - .andExpect(jsonPath("$[0].name", is("ana"))) - .andExpect(jsonPath("$[1].name", is("john"))); - } -} diff --git a/patterns/pom.xml b/patterns/pom.xml index 795b4c64db..bc1f5173e2 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -17,7 +17,6 @@ front-controller intercepting-filter design-patterns - hexagonal-design-pattern From 6faaedddb44637d9470986d301709cfccdd3666b Mon Sep 17 00:00:00 2001 From: caroline Date: Mon, 4 Feb 2019 21:52:56 +0100 Subject: [PATCH 6/6] Changes after editor's review --- .../VerifyAllEqualListElements.java | 1 - .../VerifyAllEqualListElementsUnitTest.java | 94 +++++-------------- 2 files changed, 21 insertions(+), 74 deletions(-) diff --git a/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java b/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java index 7c9b4a5b9f..936e89893c 100644 --- a/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java +++ b/core-java-collections-list/src/main/java/com/baeldung/allequalelements/VerifyAllEqualListElements.java @@ -28,7 +28,6 @@ public class VerifyAllEqualListElements { public boolean verifyAllEqualUsingStream(List list) { return list.stream() .distinct() - .limit(2) .count() <= 1; } diff --git a/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java b/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java index 12c9b0ebeb..698725591c 100644 --- a/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java +++ b/core-java-collections-list/src/test/java/com/baeldung/allequalelements/VerifyAllEqualListElementsUnitTest.java @@ -9,8 +9,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; public class VerifyAllEqualListElementsUnitTest { - private static List distinctList = new ArrayList<>(); - private static List notAllEqualList = new ArrayList<>(); private static List emptyList = new ArrayList<>(); @@ -18,7 +16,6 @@ public class VerifyAllEqualListElementsUnitTest { private static List allEqualList = new ArrayList<>(); static { - distinctList = Arrays.asList("Jack", "James", "Sam"); notAllEqualList = Arrays.asList("Jack", "James", "Sam", "James"); emptyList = Arrays.asList(); allEqualList = Arrays.asList("Jack", "Jack", "Jack", "Jack"); @@ -27,196 +24,147 @@ public class VerifyAllEqualListElementsUnitTest { private static VerifyAllEqualListElements verifyAllEqualListElements = new VerifyAllEqualListElements(); @Test - public void verifyAllEqualUsingALoop_whenUsingDistinctList_thenReturnFalse() { - boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(distinctList); - - assertFalse(allEqual); - } - - @Test - public void verifyAllEqualUsingALoop_whenNotAllEqualList_thenReturnFalse() { + public void givenNotAllEqualList_whenUsingALoop_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(notAllEqualList); assertFalse(allEqual); } @Test - public void verifyAllEqualUsingALoop_whenEmptyList_thenReturnTrue() { + public void givenEmptyList_whenUsingALoop_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(emptyList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingALoop_whenAllEqualList_thenReturnTrue() { + public void givenAllEqualList_whenUsingALoop_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingALoop(allEqualList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingHashSet_whenUsingDistinctList_thenReturnFalse() { - boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(distinctList); - - assertFalse(allEqual); - } - - @Test - public void verifyAllEqualUsingHashSet_whenNotAllEqualList_thenReturnFalse() { + public void givenNotAllEqualList_whenUsingHashSet_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(notAllEqualList); assertFalse(allEqual); } @Test - public void verifyAllEqualUsingHashSet_whenEmptyList_thenReturnTrue() { + public void givenEmptyList_whenUsingHashSet_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(emptyList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingHashSet_whenAllEqualList_thenReturnTrue() { + public void givenAllEqualList_whenUsingHashSet_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingHashSet(allEqualList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingFrequency_whenUsingDistinctList_thenReturnFalse() { - boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(distinctList); - - assertFalse(allEqual); - } - - @Test - public void verifyAllEqualUsingFrequency_whenNotAllEqualList_thenReturnFalse() { + public void givenNotAllEqualList_whenUsingFrequency_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(notAllEqualList); assertFalse(allEqual); } @Test - public void verifyAllEqualUsingFrequency_whenEmptyList_thenReturnTrue() { + public void givenEmptyList_whenUsingFrequency_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(emptyList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingFrequency_whenAllEqualList_thenReturnTrue() { + public void givenAllEqualList_whenUsingFrequency_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingFrequency(allEqualList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingStream_whenUsingDistinctList_thenReturnFalse() { - boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(distinctList); - - assertFalse(allEqual); - } - - @Test - public void verifyAllEqualUsingStream_whenNotAllEqualList_thenReturnFalse() { + public void givenNotAllEqualList_whenUsingStream_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(notAllEqualList); assertFalse(allEqual); } @Test - public void verifyAllEqualUsingStream_whenEmptyList_thenReturnTrue() { + public void givenEmptyList_whenUsingStream_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(emptyList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingStream_whenAllEqualList_thenReturnTrue() { + public void givenAllEqualList_whenUsingStream_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingStream(allEqualList); assertTrue(allEqual); } @Test - public void verifyAllEqualAnotherUsingStream_whenUsingDistinctList_thenReturnFalse() { - boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(distinctList); - - assertFalse(allEqual); - } - - @Test - public void verifyAllEqualAnotherUsingStream_whenNotAllEqualList_thenReturnFalse() { + public void givenNotAllEqualList_whenUsingAnotherStream_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(notAllEqualList); assertFalse(allEqual); } @Test - public void verifyAllEqualAnotherUsingStream_whenEmptyList_thenReturnTrue() { + public void givenEmptyList_whenUsingAnotherStream_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(emptyList); assertTrue(allEqual); } @Test - public void verifyAllEqualAnotherUsingStream_whenAllEqualList_thenReturnTrue() { + public void givenAllEqualList_whenUsingAnotherStream_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualAnotherUsingStream(allEqualList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingGuava_whenUsingDistinctList_thenReturnFalse() { - boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(distinctList); - - assertFalse(allEqual); - } - - @Test - public void verifyAllEqualUsingGuava_whenNotAllEqualList_thenReturnFalse() { + public void givenNotAllEqualList_whenUsingGuava_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(notAllEqualList); assertFalse(allEqual); } @Test - public void verifyAllEqualUsingGuava_whenEmptyList_thenReturnTrue() { + public void givenEmptyList_whenUsingGuava_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(emptyList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingGuava_whenAllEqualList_thenReturnTrue() { + public void givenAllEqualList_whenUsingGuava_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingGuava(allEqualList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingApacheCommon_whenUsingDistinctList_thenReturnFalse() { - boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(distinctList); - - assertFalse(allEqual); - } - - @Test - public void verifyAllEqualUsingApacheCommon_whenNotAllEqualList_thenReturnFalse() { + public void givenNotAllEqualList_whenUsingApacheCommon_thenReturnFalse() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(notAllEqualList); assertFalse(allEqual); } @Test - public void verifyAllEqualUsingApacheCommon_whenEmptyList_thenReturnTrue() { + public void givenEmptyList_whenUsingApacheCommon_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(emptyList); assertTrue(allEqual); } @Test - public void verifyAllEqualUsingApacheCommon_whenAllEqualList_thenReturnTrue() { + public void givenAllEqualList_whenUsingApacheCommon_thenReturnTrue() { boolean allEqual = verifyAllEqualListElements.verifyAllEqualUsingApacheCommon(allEqualList); assertTrue(allEqual);