From 6e1a4c8a7d17a6042135bc63fd4f1cc9dff21fca Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 23 Jun 2019 17:46:20 +0530 Subject: [PATCH 001/304] [BAEL-14274] - Fixed article code for https://www.baeldung.com/properties-with-spring --- .../baeldung/properties/parentchild/config/ChildConfig2.java | 2 +- .../baeldung/properties/parentchild/config/ParentConfig2.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java b/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java index 2ed14d7701..0dfff4d858 100644 --- a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java +++ b/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java @@ -15,7 +15,7 @@ public class ChildConfig2 { } @Bean - public static PropertyPlaceholderConfigurer configurer() { + public static PropertyPlaceholderConfigurer properties() { final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); ppc.setLocations(new ClassPathResource("child.properties")); return ppc; diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java b/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java index c38ba8e483..84ebdad760 100644 --- a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java +++ b/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java @@ -15,7 +15,7 @@ public class ParentConfig2 { } @Bean - public static PropertyPlaceholderConfigurer configurer() { + public static PropertyPlaceholderConfigurer properties() { final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); ppc.setLocations(new ClassPathResource("parent.properties")); return ppc; From e42215d31cd676827851aef1e948ec3547cc8133 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 23 Jun 2019 21:16:14 +0530 Subject: [PATCH 002/304] [BAEL-14274] - Fixed article code for https://www.baeldung.com/jackson-annotations --- .../java/com/baeldung/jackson/annotation/MyBean.java | 12 ++++++++++++ .../date/{EventWithFormat.java => Event.java} | 6 +++--- .../jackson/test/JacksonAnnotationUnitTest.java | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) rename jackson-simple/src/test/java/com/baeldung/jackson/date/{EventWithFormat.java => Event.java} (77%) diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/MyBean.java b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/MyBean.java index 5d4ce4202c..e4e78ce445 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/MyBean.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/MyBean.java @@ -1,8 +1,10 @@ package com.baeldung.jackson.annotation; +import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonSetter; @JsonInclude(Include.NON_NULL) @JsonPropertyOrder({ "name", "id" }) @@ -18,4 +20,14 @@ public class MyBean { this.id = id; this.name = name; } + + @JsonGetter("name") + public String getTheName() { + return name; + } + + @JsonSetter("name") + public void setTheName(String name) { + this.name = name; + } } diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/date/EventWithFormat.java b/jackson-simple/src/test/java/com/baeldung/jackson/date/Event.java similarity index 77% rename from jackson-simple/src/test/java/com/baeldung/jackson/date/EventWithFormat.java rename to jackson-simple/src/test/java/com/baeldung/jackson/date/Event.java index 607e694cef..fb19f44a42 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/date/EventWithFormat.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/date/Event.java @@ -4,17 +4,17 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; -public class EventWithFormat { +public class Event { public String name; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") public Date eventDate; - public EventWithFormat() { + public Event() { super(); } - public EventWithFormat(final String name, final Date eventDate) { + public Event(final String name, final Date eventDate) { this.name = name; this.eventDate = eventDate; } diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java index ee11f8f20e..e63208d860 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java @@ -32,7 +32,7 @@ import com.baeldung.jackson.bidirection.ItemWithIdentity; import com.baeldung.jackson.bidirection.ItemWithRef; import com.baeldung.jackson.bidirection.UserWithIdentity; import com.baeldung.jackson.bidirection.UserWithRef; -import com.baeldung.jackson.date.EventWithFormat; +import com.baeldung.jackson.date.Event; import com.baeldung.jackson.date.EventWithSerializer; import com.baeldung.jackson.dtos.MyMixInForIgnoreType; import com.baeldung.jackson.dtos.withEnum.DistanceEnumWithValue; @@ -270,7 +270,7 @@ public class JacksonAnnotationUnitTest { final String toParse = "20-12-2014 02:30:00"; final Date date = df.parse(toParse); - final EventWithFormat event = new EventWithFormat("party", date); + final Event event = new Event("party", date); final String result = new ObjectMapper().writeValueAsString(event); assertThat(result, containsString(toParse)); From 9cf7d4d67dec9df3c7b8ef0a84a8b41d3925f34b Mon Sep 17 00:00:00 2001 From: amit2103 Date: Mon, 22 Jul 2019 00:51:41 +0530 Subject: [PATCH 003/304] [BAEL-16045] - Fixed article code for https://www.baeldung.com/java-random-string --- .../src/test/java/com/baeldung/random/JavaRandomUnitTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {java-numbers => java-strings}/src/test/java/com/baeldung/random/JavaRandomUnitTest.java (100%) diff --git a/java-numbers/src/test/java/com/baeldung/random/JavaRandomUnitTest.java b/java-strings/src/test/java/com/baeldung/random/JavaRandomUnitTest.java similarity index 100% rename from java-numbers/src/test/java/com/baeldung/random/JavaRandomUnitTest.java rename to java-strings/src/test/java/com/baeldung/random/JavaRandomUnitTest.java From b546c00dd0c770a17443022ddf443cc65ce01582 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 28 Jul 2019 12:08:43 +0530 Subject: [PATCH 004/304] [BAEL-16045] - Check Article Code Matches GitHub for https://www.baeldung.com/how-to-use-resttemplate-with-basic-authentication-in-spring article --- .../java/com/baeldung/oauth2/LoginController.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java index 5d6c13bb0e..ea4650ab02 100644 --- a/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java +++ b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java @@ -1,8 +1,10 @@ package com.baeldung.oauth2; +import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; +import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ResolvableType; import org.springframework.http.HttpEntity; @@ -71,5 +73,14 @@ public class LoginController { return "loginSuccess"; } - + + public HttpHeaders createHeaders(String username, String password){ + return new HttpHeaders() {{ + String auth = username + ":" + password; + byte[] encodedAuth = Base64.encodeBase64( + auth.getBytes(Charset.forName("US-ASCII")) ); + String authHeader = "Basic " + new String( encodedAuth ); + set( "Authorization", authHeader ); + }}; + } } From 85b3775a9a82a36d94a0b254776fc031c2ef9b46 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Thu, 1 Aug 2019 14:25:02 +0200 Subject: [PATCH 005/304] implement hexagonal architecture pattern --- .../hexagonal/AccountApplication.java | 21 ++++++++ .../com/baeldung/hexagonal/IOCContainer.java | 54 +++++++++++++++++++ .../hexagonal/central/domain/Account.java | 42 +++++++++++++++ .../hexagonal/central/domain/AccountType.java | 7 +++ .../repository/IAccountRepository.java | 9 ++++ .../central/service/AccountService.java | 32 +++++++++++ .../central/service/IAccountService.java | 7 +++ .../hexagonal/central/ui/IAccountUI.java | 9 ++++ .../baeldung/hexagonal/input/ConsoleUI.java | 54 +++++++++++++++++++ .../output/InMemoryAccountRepository.java | 23 ++++++++ 10 files changed, 258 insertions(+) create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java new file mode 100644 index 0000000000..d4dd34312d --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java @@ -0,0 +1,21 @@ +package com.baeldung.hexagonal; + +import java.util.Map; + +import com.baeldung.hexagonal.input.ConsoleUI; + +public class AccountApplication extends IOCContainer { + + public static void main(String[] args) { + + AccountApplication app = new AccountApplication(); + + ConsoleUI console = app.get(ConsoleUI.class); + console.printWelcomeMessage(); + + Map parameters = console.readParameters(); + console.create(parameters); + + } + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java new file mode 100644 index 0000000000..49ff1955ee --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java @@ -0,0 +1,54 @@ +package com.baeldung.hexagonal; + +import com.baeldung.hexagonal.central.service.AccountService; +import com.baeldung.hexagonal.central.service.IAccountService; +import com.baeldung.hexagonal.input.ConsoleUI; +import com.baeldung.hexagonal.output.InMemoryAccountRepository; + +public class IOCContainer { + + private ConsoleUI consoleAdapter; + private AccountService accountService; + private InMemoryAccountRepository inMemoryAccountRepository; + + public T get(Class clazz) { + + if (ConsoleUI.class.isAssignableFrom(clazz)) { + return (T) getConsoleAdapter(); + } + + if (IAccountService.class.isAssignableFrom(clazz)) { + return (T) getAccountService(); + } + + if (InMemoryAccountRepository.class.isAssignableFrom(clazz)) { + return (T) getInMemoryAccountRepository(); + } + + return null; + } + + private ConsoleUI getConsoleAdapter() { + if (consoleAdapter == null) { + consoleAdapter = new ConsoleUI(); + consoleAdapter.setAccountService(getAccountService()); + } + return consoleAdapter; + } + + private IAccountService getAccountService() { + if (accountService == null) { + accountService = new AccountService(); + accountService.setAccountRepository(getInMemoryAccountRepository()); + } + return accountService; + } + + private InMemoryAccountRepository getInMemoryAccountRepository() { + if (inMemoryAccountRepository == null) { + inMemoryAccountRepository = new InMemoryAccountRepository(); + } + return inMemoryAccountRepository; + } + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java new file mode 100644 index 0000000000..2ecb602690 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java @@ -0,0 +1,42 @@ +package com.baeldung.hexagonal.central.domain; + +import java.util.UUID; + +public class Account { + + private UUID id; + + private String name; + + private AccountType type; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public AccountType getType() { + return type; + } + + public void setType(AccountType type) { + this.type = type; + } + + @Override + public String toString() { + return "Account [name=" + name + ", type=" + type + "]"; + } + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java new file mode 100644 index 0000000000..a0ec54ce7f --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java @@ -0,0 +1,7 @@ +package com.baeldung.hexagonal.central.domain; + +public enum AccountType { + + USER, MODERATOR, ADMIN + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java new file mode 100644 index 0000000000..6863d04740 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.hexagonal.central.repository; + +import com.baeldung.hexagonal.central.domain.Account; + +public interface IAccountRepository { + + public void save(Account account); + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java new file mode 100644 index 0000000000..97fa1fd7f9 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java @@ -0,0 +1,32 @@ +package com.baeldung.hexagonal.central.service; + +import com.baeldung.hexagonal.central.domain.Account; +import com.baeldung.hexagonal.central.domain.AccountType; +import com.baeldung.hexagonal.central.repository.IAccountRepository; + +public class AccountService implements IAccountService { + + private IAccountRepository accountRepository; + + public void setAccountRepository(IAccountRepository accountRepository) { + this.accountRepository = accountRepository; + } + + @Override + public void createAccount(String name, String type) { + + Account account = new Account(); + account.setName(name); + + if ("user".equals(type)) { + account.setType(AccountType.USER); + } + if ("mod".equals(type)) { + account.setType(AccountType.MODERATOR); + } + + accountRepository.save(account); + + } + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java new file mode 100644 index 0000000000..1df98ef49e --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java @@ -0,0 +1,7 @@ +package com.baeldung.hexagonal.central.service; + +public interface IAccountService { + + public void createAccount(String name, String type); + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java new file mode 100644 index 0000000000..fbb7cef914 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java @@ -0,0 +1,9 @@ +package com.baeldung.hexagonal.central.ui; + +import java.util.Map; + +public interface IAccountUI { + + public void create(Map parameters); + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java new file mode 100644 index 0000000000..7c1bacfac3 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java @@ -0,0 +1,54 @@ +package com.baeldung.hexagonal.input; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +import com.baeldung.hexagonal.central.service.IAccountService; +import com.baeldung.hexagonal.central.ui.IAccountUI; + +public class ConsoleUI implements IAccountUI { + + private IAccountService accountService; + + public void setAccountService(IAccountService accountService) { + this.accountService = accountService; + } + + public void printWelcomeMessage() { + + StringBuilder sb = new StringBuilder(); + sb.append("Welcome to Account Application!"); + sb.append("\n"); + sb.append("Usage:"); + sb.append("* new account:"); + sb.append("\tcreate "); + + System.out.println(sb.toString()); + } + + public Map readParameters() { + + Scanner scanner = new Scanner(System.in); + + Map params = new HashMap<>(); + + String name = scanner.next(); + String type = scanner.next(); + + params.put("name", name); + params.put("type", type); + + return params; + } + + @Override + public void create(Map parameters) { + + String name = parameters.get("name"); + String type = parameters.get("type"); + + accountService.createAccount(name, type); + } + +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java new file mode 100644 index 0000000000..22924e6b23 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java @@ -0,0 +1,23 @@ +package com.baeldung.hexagonal.output; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.baeldung.hexagonal.central.domain.Account; +import com.baeldung.hexagonal.central.repository.IAccountRepository; + +public class InMemoryAccountRepository implements IAccountRepository { + + private List accountList = new ArrayList<>(); + + @Override + public void save(Account account) { + + account.setId(UUID.randomUUID()); + + accountList.add(account); + + } + +} From cfabbb348cccf1ec4836edbc0f13a006d714eb1a Mon Sep 17 00:00:00 2001 From: amit2103 Date: Thu, 1 Aug 2019 23:55:50 +0530 Subject: [PATCH 006/304] [BAEL-16045] - Check Article Code Matches GitHub for https://www.baeldung.com/java-try-with-resources article --- .../trywithresource/AutoCloseableMain.java | 16 ++++++++++++++++ .../AutoCloseableResourcesFirst.java | 17 +++++++++++++++++ .../AutoCloseableResourcesSecond.java | 17 +++++++++++++++++ .../baeldung/trywithresource/MyResource.java | 8 ++++++++ 4 files changed, 58 insertions(+) create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/MyResource.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java new file mode 100644 index 0000000000..fee52fe2bc --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java @@ -0,0 +1,16 @@ +package com.baeldung.trywithresource; + +public class AutoCloseableMain { + + public static void main(String[] args) throws Exception { + orderOfClosingResources(); + } + + private static void orderOfClosingResources() throws Exception { + try (AutoCloseableResourcesFirst af = new AutoCloseableResourcesFirst(); + AutoCloseableResourcesSecond as = new AutoCloseableResourcesSecond()) { + af.doSomething(); + as.doSomething(); + } + } +} \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java new file mode 100644 index 0000000000..b001244d93 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java @@ -0,0 +1,17 @@ +package com.baeldung.trywithresource; + +public class AutoCloseableResourcesFirst implements AutoCloseable { + + public AutoCloseableResourcesFirst() { + System.out.println("Constructor -> AutoCloseableResources_First"); + } + + public void doSomething() { + System.out.println("Something -> AutoCloseableResources_First"); + } + + @Override + public void close() throws Exception { + System.out.println("Closed AutoCloseableResources_First"); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java new file mode 100644 index 0000000000..ef8bcd7166 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java @@ -0,0 +1,17 @@ +package com.baeldung.trywithresource; + +public class AutoCloseableResourcesSecond implements AutoCloseable { + + public AutoCloseableResourcesSecond() { + System.out.println("Constructor -> AutoCloseableResources_Second"); + } + + public void doSomething() { + System.out.println("Something -> AutoCloseableResources_Second"); + } + + @Override + public void close() throws Exception { + System.out.println("Closed AutoCloseableResources_Second"); + } +} diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/MyResource.java b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/MyResource.java new file mode 100644 index 0000000000..3ddf0f52e0 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/MyResource.java @@ -0,0 +1,8 @@ +package com.baeldung.trywithresource; + +public class MyResource implements AutoCloseable { + @Override + public void close() throws Exception { + System.out.println("Closed MyResource"); + } +} \ No newline at end of file From f17b11fd6821abaf632da8a7114bd8fa058676f0 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Fri, 9 Aug 2019 21:13:10 +0200 Subject: [PATCH 007/304] Add source code for article BAEL-2463 --- .../com/baeldung/jackson/entities/File.java | 25 +++ .../com/baeldung/jackson/entities/Folder.java | 82 +++++++++ .../FolderBeanSerializerModifier.java | 21 +++ .../custom/serializer/FolderSerializer.java | 36 ++++ ...derSerializerWithCallingOwnSerializer.java | 30 ++++ ...SerializerWithDefaultSerializerStored.java | 35 ++++ ...derSerializerWithInternalObjectMapper.java | 34 ++++ ...olderSerializerWithSerializerProvider.java | 29 +++ .../CallingDefaultSerializerUnitTest.java | 166 ++++++++++++++++++ 9 files changed, 458 insertions(+) create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/entities/File.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java create mode 100644 jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java diff --git a/jackson-2/src/main/java/com/baeldung/jackson/entities/File.java b/jackson-2/src/main/java/com/baeldung/jackson/entities/File.java new file mode 100644 index 0000000000..0e8829e927 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/entities/File.java @@ -0,0 +1,25 @@ +package com.baeldung.jackson.entities; + +public class File { + + 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/jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java b/jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java new file mode 100644 index 0000000000..c49e46b204 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java @@ -0,0 +1,82 @@ +package com.baeldung.jackson.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +public class Folder { + + private Long id; + + private String name; + + private String owner; + + private Date created; + + private Date modified; + + private Date lastAccess; + + @JsonIgnore + private List files = new ArrayList<>(); + + 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; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getModified() { + return modified; + } + + public void setModified(Date modified) { + this.modified = modified; + } + + public Date getLastAccess() { + return lastAccess; + } + + public void setLastAccess(Date lastAccess) { + this.lastAccess = lastAccess; + } + + public List getFiles() { + return files; + } + + public void setFiles(List files) { + this.files = files; + } + +} \ No newline at end of file diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java new file mode 100644 index 0000000000..a3add58dc4 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java @@ -0,0 +1,21 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.databind.BeanDescription; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; + +public class FolderBeanSerializerModifier extends BeanSerializerModifier { + + @Override + public JsonSerializer modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer serializer) { + + if (beanDesc.getBeanClass().equals(Folder.class)) { + return new FolderSerializerWithDefaultSerializerStored((JsonSerializer) serializer); + } + + return serializer; + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java new file mode 100644 index 0000000000..f385e63e09 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java @@ -0,0 +1,36 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.File; +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializer extends StdSerializer { + + public FolderSerializer() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + gen.writeArrayFieldStart("files"); + for (File file : value.getFiles()) { + gen.writeStartObject(); + gen.writeNumberField("id", file.getId()); + gen.writeStringField("name", file.getName()); + gen.writeEndObject(); + } + gen.writeEndArray(); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java new file mode 100644 index 0000000000..ed5d9fffb8 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java @@ -0,0 +1,30 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithCallingOwnSerializer extends StdSerializer { + + public FolderSerializerWithCallingOwnSerializer() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + provider.defaultSerializeField("files", value.getFiles(), gen); + + provider.defaultSerializeField("details", value, gen); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java new file mode 100644 index 0000000000..d4a95cd939 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java @@ -0,0 +1,35 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithDefaultSerializerStored extends StdSerializer { + + private final JsonSerializer defaultSerializer; + + public FolderSerializerWithDefaultSerializerStored(JsonSerializer defaultSerializer) { + super(Folder.class); + this.defaultSerializer = defaultSerializer; + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + provider.defaultSerializeField("files", value.getFiles(), gen); + + gen.writeFieldName("details"); + defaultSerializer.serialize(value, gen, provider); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java new file mode 100644 index 0000000000..b23dc32205 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java @@ -0,0 +1,34 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithInternalObjectMapper extends StdSerializer { + + public FolderSerializerWithInternalObjectMapper() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + // we access internal mapper to delegate the serialization of File list + ObjectMapper mapper = (ObjectMapper) gen.getCodec(); + + gen.writeFieldName("files"); + String stringValue = mapper.writeValueAsString(value.getFiles()); + gen.writeRawValue(stringValue); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java new file mode 100644 index 0000000000..81990a084d --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java @@ -0,0 +1,29 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithSerializerProvider extends StdSerializer { + + public FolderSerializerWithSerializerProvider() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + // we delegate the File list serialization to its default serializer + provider.defaultSerializeField("files", value.getFiles(), gen); + + gen.writeEndObject(); + + } + +} \ No newline at end of file diff --git a/jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java b/jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java new file mode 100644 index 0000000000..b067e7b501 --- /dev/null +++ b/jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java @@ -0,0 +1,166 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.jackson.entities.File; +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; + +public class CallingDefaultSerializerUnitTest { + + private ObjectMapper mapper; + private Folder mockFolder; + private TypeReference> mapType; + + @Before + public void setup() { + + mapType = new TypeReference>() { + }; + + mapper = new ObjectMapper(); + + mockFolder = new Folder(); + mockFolder.setId(1L); + mockFolder.setName("Root Folder"); + mockFolder.setOwner("root"); + mockFolder.setCreated(Date.from(Instant.now().minusSeconds(60))); + mockFolder.setModified(Date.from(Instant.now().minusSeconds(30))); + mockFolder.setLastAccess(Date.from(Instant.now())); + + File file1 = new File(); + file1.setId(1L); + file1.setName("File 1"); + + File file2 = new File(); + file2.setId(2L); + file2.setName("File 2"); + + List files = new ArrayList<>(); + files.add(file1); + files.add(file2); + mockFolder.setFiles(files); + + } + + @Test + public void givenFolder_whenSerialized_onlyNameAndFilesFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializer()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + } + + @Test + public void givenFolder_whenSerializedWithSerializerProvider_onlyNameAndFilesFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializerWithSerializerProvider()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + } + + @Test + public void givenFolder_whenSerializedWithInternalObjectMapper_onlyNameAndFilesFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializerWithInternalObjectMapper()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + } + + @Test(expected = StackOverflowError.class) + public void givenFolder_whenSerializedWithCallingOwnSerializer_exceptionOccured() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializerWithCallingOwnSerializer()); + mapper.registerModule(module); + + mapper.writeValueAsString(mockFolder); + + } + + @Test + public void givenFolder_whenSerializedWithDefaultSerializerStored_NameAndFilesAndDetailsFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.setSerializerModifier(new FolderBeanSerializerModifier()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + Map actualDetails = (Map) actual.get("details"); + assertTrue(actualDetails.containsKey("id")); + assertTrue(actualDetails.containsKey("name")); + assertTrue(actualDetails.containsKey("owner")); + assertTrue(actualDetails.containsKey("created")); + assertTrue(actualDetails.containsKey("modified")); + assertTrue(actualDetails.containsKey("lastAccess")); + + assertEquals(mockFolder.getId().longValue(), ((Number)actualDetails.get("id")).longValue()); + assertEquals(mockFolder.getName(), actualDetails.get("name")); + assertEquals(mockFolder.getOwner(), actualDetails.get("owner")); + assertEquals(mockFolder.getCreated(), new Date((long) actualDetails.get("created"))); + assertEquals(mockFolder.getModified(), new Date((long) actualDetails.get("modified"))); + assertEquals(mockFolder.getLastAccess(), new Date((long) actualDetails.get("lastAccess"))); + + } + +} From 116d90ce2909347f35ad91999a12de09c75951b6 Mon Sep 17 00:00:00 2001 From: Jon Cook Date: Fri, 30 Aug 2019 11:54:09 +0200 Subject: [PATCH 008/304] BAEL-3132 - Linux Commands - Loop Through Directories/Folders --- linux-modules/bash/pom.xml | 18 ++++++++++++++++++ .../src/main/resources/find_directories.sh | 7 +++++++ .../src/main/resources/loop_directories.sh | 11 +++++++++++ linux-modules/pom.xml | 19 +++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 linux-modules/bash/pom.xml create mode 100755 linux-modules/bash/src/main/resources/find_directories.sh create mode 100755 linux-modules/bash/src/main/resources/loop_directories.sh create mode 100644 linux-modules/pom.xml diff --git a/linux-modules/bash/pom.xml b/linux-modules/bash/pom.xml new file mode 100644 index 0000000000..bb8dd675f8 --- /dev/null +++ b/linux-modules/bash/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + bash + 1.0-SNAPSHOT + bash + Linux Bash Topics + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + diff --git a/linux-modules/bash/src/main/resources/find_directories.sh b/linux-modules/bash/src/main/resources/find_directories.sh new file mode 100755 index 0000000000..76a0a208bd --- /dev/null +++ b/linux-modules/bash/src/main/resources/find_directories.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +find . -maxdepth 1 -mindepth 1 -type d -printf '%f\n' + +find . -maxdepth 1 -mindepth 1 -type d | while read dir; do + echo "$dir" +done \ No newline at end of file diff --git a/linux-modules/bash/src/main/resources/loop_directories.sh b/linux-modules/bash/src/main/resources/loop_directories.sh new file mode 100755 index 0000000000..77e661d710 --- /dev/null +++ b/linux-modules/bash/src/main/resources/loop_directories.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +for dir in */; do + echo "$dir" +done + +for file in *; do + if [ -d "$file" ]; then + echo "$file" + fi +done \ No newline at end of file diff --git a/linux-modules/pom.xml b/linux-modules/pom.xml new file mode 100644 index 0000000000..347c9d096e --- /dev/null +++ b/linux-modules/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + linux-modules + linux-modules + pom + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + .. + + + + bash + + From d1aa5dc4df6c5677edb4296c19748fac0e22939a Mon Sep 17 00:00:00 2001 From: Jon Cook Date: Fri, 30 Aug 2019 12:10:34 +0200 Subject: [PATCH 009/304] BAEL-3132 - Linux Commands - Loop Through Directories/Folders - update pom description. --- linux-modules/bash/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-modules/bash/pom.xml b/linux-modules/bash/pom.xml index bb8dd675f8..9694fb0d5c 100644 --- a/linux-modules/bash/pom.xml +++ b/linux-modules/bash/pom.xml @@ -6,7 +6,7 @@ bash 1.0-SNAPSHOT bash - Linux Bash Topics + Linux Bash Topics com.baeldung From 03b402187bbee2d975fd7ff0124e20fb59134b86 Mon Sep 17 00:00:00 2001 From: Jon Cook Date: Sun, 1 Sep 2019 13:16:59 +0200 Subject: [PATCH 010/304] BAEL-3132 - Linux Commands - Loop Through Directories/Folders - Add another example using find exec. --- linux-modules/bash/src/main/resources/find_directories.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/linux-modules/bash/src/main/resources/find_directories.sh b/linux-modules/bash/src/main/resources/find_directories.sh index 76a0a208bd..8a9b20294d 100755 --- a/linux-modules/bash/src/main/resources/find_directories.sh +++ b/linux-modules/bash/src/main/resources/find_directories.sh @@ -4,4 +4,6 @@ find . -maxdepth 1 -mindepth 1 -type d -printf '%f\n' find . -maxdepth 1 -mindepth 1 -type d | while read dir; do echo "$dir" -done \ No newline at end of file +done + +find . -maxdepth 1 -type d -exec echo {} \; \ No newline at end of file From 5c9635666f23ebdf101856892991433e5c59915e Mon Sep 17 00:00:00 2001 From: Jon Cook Date: Mon, 9 Sep 2019 17:54:08 +0200 Subject: [PATCH 011/304] BAEL-3132 - Linux Commands - Loop Through Directories/Folders --- .../loops/src/main/bash}/find_directories.sh | 0 .../loops/src/main/bash}/loop_directories.sh | 0 linux-modules/bash/pom.xml | 18 ------------------ linux-modules/pom.xml | 19 ------------------- 4 files changed, 37 deletions(-) rename {linux-modules/bash/src/main/resources => linux-bash/loops/src/main/bash}/find_directories.sh (100%) rename {linux-modules/bash/src/main/resources => linux-bash/loops/src/main/bash}/loop_directories.sh (100%) delete mode 100644 linux-modules/bash/pom.xml delete mode 100644 linux-modules/pom.xml diff --git a/linux-modules/bash/src/main/resources/find_directories.sh b/linux-bash/loops/src/main/bash/find_directories.sh similarity index 100% rename from linux-modules/bash/src/main/resources/find_directories.sh rename to linux-bash/loops/src/main/bash/find_directories.sh diff --git a/linux-modules/bash/src/main/resources/loop_directories.sh b/linux-bash/loops/src/main/bash/loop_directories.sh similarity index 100% rename from linux-modules/bash/src/main/resources/loop_directories.sh rename to linux-bash/loops/src/main/bash/loop_directories.sh diff --git a/linux-modules/bash/pom.xml b/linux-modules/bash/pom.xml deleted file mode 100644 index 9694fb0d5c..0000000000 --- a/linux-modules/bash/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - 4.0.0 - bash - 1.0-SNAPSHOT - bash - Linux Bash Topics - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - - - diff --git a/linux-modules/pom.xml b/linux-modules/pom.xml deleted file mode 100644 index 347c9d096e..0000000000 --- a/linux-modules/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - 4.0.0 - linux-modules - linux-modules - pom - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. - - - - bash - - From 369f73e7b38a214ed4337604b732d0879dfa7c4e Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sun, 15 Sep 2019 00:32:01 +0200 Subject: [PATCH 012/304] enum deserialization --- .../com/baeldung/jackson/entities/City.java | 22 ++++++++++ .../com/baeldung/jackson/enums/Distance.java | 38 +++++++++++++--- .../JacksonEnumSerializationUnitTest.java | 43 ++++++++++++++++++- 3 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 jackson/src/main/java/com/baeldung/jackson/entities/City.java diff --git a/jackson/src/main/java/com/baeldung/jackson/entities/City.java b/jackson/src/main/java/com/baeldung/jackson/entities/City.java new file mode 100644 index 0000000000..d4c5d715de --- /dev/null +++ b/jackson/src/main/java/com/baeldung/jackson/entities/City.java @@ -0,0 +1,22 @@ +package com.baeldung.jackson.entities; + +import com.baeldung.jackson.enums.Distance; + +public class City { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + + @Override + public String toString() { + return "City [distance=" + distance + "]"; + } + +} diff --git a/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java b/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java index 8026eedc44..fdda32d16c 100644 --- a/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java +++ b/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java @@ -1,20 +1,29 @@ package com.baeldung.jackson.enums; import com.baeldung.jackson.serialization.DistanceSerializer; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Use @JsonFormat to handle representation of Enum as JSON (available since Jackson 2.1.2) * Use @JsonSerialize to configure a custom Jackson serializer */ -// @JsonFormat(shape = JsonFormat.Shape.OBJECT) -@JsonSerialize(using = DistanceSerializer.class) +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +//@JsonSerialize(using = DistanceSerializer.class) public enum Distance { - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); + @JsonProperty("distance-in-km") + KILOMETER("km", 1000), + @JsonProperty("distance-in-miles") + MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), + MILLIMETER("mm", 0.001); private String unit; private final double meters; - + private Distance(String unit, double meters) { this.unit = unit; this.meters = meters; @@ -23,11 +32,11 @@ public enum Distance { /** * Use @JsonValue to control marshalling output for an enum */ - // @JsonValue +// @JsonValue public double getMeters() { return meters; } - + public String getUnit() { return unit; } @@ -35,7 +44,7 @@ public enum Distance { public void setUnit(String unit) { this.unit = unit; } - + /** * Usage example: Distance.MILE.convertFromMeters(1205.5); */ @@ -51,4 +60,19 @@ public enum Distance { return distanceInMeters * meters; } +// @JsonCreator + public static Distance forValues(@JsonProperty("unit") String unit, @JsonProperty("meters") double meters) { + + for (Distance distance : Distance.values()) { + if (distance.unit.equals(unit) + && Double.compare(distance.meters, meters) == 0) { + + return distance; + } + } + + return null; + + } + } \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java index 45c0ba1382..3108773a00 100644 --- a/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java @@ -1,13 +1,17 @@ package com.baeldung.jackson.enums; import static org.hamcrest.Matchers.containsString; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; - +import org.junit.Ignore; import org.junit.Test; +import com.baeldung.jackson.entities.City; import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonEnumSerializationUnitTest { @@ -19,4 +23,41 @@ public class JacksonEnumSerializationUnitTest { assertThat(dtoAsString, containsString("1609.34")); } + @Test + @Ignore + public final void givenEnum_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\":\"KILOMETER\"}"; + City city = new ObjectMapper().readValue(json, City.class); + + assertEquals(Distance.KILOMETER, city.getDistance()); + } + + @Test + @Ignore + public final void givenEnumWithJsonValue_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"JacksonDeserializationUnitTestdistance\": \"0.0254\"}"; + + City city = new ObjectMapper().readValue(json, City.class); + assertEquals(Distance.INCH, city.getDistance()); + } + + @Test + public final void givenEnumWithGsonProperty_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\": \"distance-in-km\"}"; + + City city = new ObjectMapper().readValue(json, City.class); + assertEquals(Distance.KILOMETER, city.getDistance()); + + } + + @Test + @Ignore + public final void givenEnumWithGsonCreator_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; + + City city = new ObjectMapper().readValue(json, City.class); + assertEquals(Distance.MILE, city.getDistance()); + System.out.println(city); + } + } From ed9463faa125fbb0b56412ca0a4a999162d0ced1 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Tue, 17 Sep 2019 19:13:21 +0200 Subject: [PATCH 013/304] Split the first 2 modules: java-dates-conversion and java-dates-string. --- java-dates-2/README.md | 4 - .../.gitignore | 5 +- java-dates-conversion/README.md | 9 ++ .../pom.xml | 28 +++---- .../DateToLocalDateConverter.java | 0 .../DateToLocalDateTimeConverter.java | 0 .../LocalDateTimeToDateConverter.java | 0 .../LocalDateToDateConverter.java | 0 .../convert/ConvertDateTimeUnitTest.java | 0 .../ConvertInstantToTimestampUnitTest.java | 5 +- .../DateToLocalDateConverterUnitTest.java | 0 .../DateToLocalDateTimeConverterUnitTest.java | 0 .../LocalDateTimeToDateConverterUnitTest.java | 0 .../LocalDateToDateConverterUnitTest.java | 0 ...XmlGregorianCalendarConverterUnitTest.java | 0 java-dates-string/.gitignore | 26 ++++++ java-dates-string/README.md | 12 +++ java-dates-string/pom.xml | 83 +++++++++++++++++++ .../date/validation/DateValidator.java | 0 .../DateValidatorUsingApacheValidator.java | 0 .../DateValidatorUsingDateFormat.java | 0 .../DateValidatorUsingDateTimeFormatter.java | 0 .../DateValidatorUsingLocalDate.java | 0 .../regexp/datepattern/DateMatcher.java | 0 .../datepattern/FormattedDateMatcher.java | 0 .../regexp/datepattern/RangedDateMatcher.java | 0 .../gregorian/February29thMatcher.java | 0 .../gregorian/FebruaryGeneralMatcher.java | 0 .../gregorian/GregorianDateMatcher.java | 0 .../gregorian/MonthsOf30DaysMatcher.java | 0 .../gregorian/MonthsOf31DaysMatcher.java | 0 .../optmization/OptimizedMatcher.java | 0 .../timezonedisplay/TimezoneDisplay.java | 0 .../timezonedisplay/TimezoneDisplayApp.java | 0 .../timezonedisplay/TimezoneDisplayJava7.java | 0 .../TimezoneDisplayJava7App.java | 0 .../zonedatetime}/OffsetDateTimeExample.java | 2 +- .../zonedatetime}/OffsetTimeExample.java | 2 +- .../zonedatetime}/ZoneDateTimeExample.java | 2 +- ...ValidatorUsingApacheValidatorUnitTest.java | 0 .../DateValidatorUsingDateFormatUnitTest.java | 0 ...lidatorUsingDateTimeFormatterUnitTest.java | 0 .../DateValidatorUsingLocalDateUnitTest.java | 0 .../datetime/DateTimeFormatterUnitTest.java | 0 .../FormattedDateMatcherUnitTest.java | 0 .../RangedDateMatcherUnitTest.java | 0 .../February29thMatcherUnitTest.java | 0 .../FebruaryGeneralMatcherUnitTest.java | 0 .../GregorianDateMatcherUnitTest.java | 0 .../MonthsOf30DaysMatcherUnitTest.java | 0 .../MonthsOf31DaysMatcherUnitTest.java | 0 .../testhelper/GregorianDateTestHelper.java | 0 .../SimpleDateFormatUnitTest.java | 0 .../StringToTimestampConverterUnitTest.java | 0 .../TimestampToStringConverterTest.java | 0 .../OffsetDateTimeExampleUnitTest.java | 2 +- .../OffsetTimeExampleUnitTest.java | 2 +- .../ZoneDateTimeExampleUnitTest.java | 2 +- .../zonedatetime}/ZonedDateTimeUnitTest.java | 2 +- java-dates/README.md | 8 -- java-dates/pom.xml | 6 -- pom.xml | 6 +- 62 files changed, 158 insertions(+), 48 deletions(-) delete mode 100644 java-dates-2/README.md rename {java-dates-2 => java-dates-conversion}/.gitignore (90%) create mode 100644 java-dates-conversion/README.md rename {java-dates-2 => java-dates-conversion}/pom.xml (76%) rename {java-dates => java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java (100%) rename {java-dates => java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java (100%) rename {java-dates => java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java (100%) rename {java-dates => java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java (100%) rename {java-dates-2 => java-dates-conversion}/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java (100%) rename {java-dates => java-dates-conversion}/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java (97%) rename {java-dates => java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java (100%) rename {java-dates => java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java (100%) rename {java-dates => java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java (100%) rename {java-dates => java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java (100%) rename {java-dates-2 => java-dates-conversion}/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java (100%) create mode 100644 java-dates-string/.gitignore create mode 100644 java-dates-string/README.md create mode 100644 java-dates-string/pom.xml rename {java-dates-2 => java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidator.java (100%) rename {java-dates-2 => java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java (100%) rename {java-dates-2 => java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java (100%) rename {java-dates-2 => java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java (100%) rename {java-dates-2 => java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java (100%) rename {java-dates => java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java (100%) rename {java-dates/src/main/java/com/baeldung/zoneddatetime => java-dates-string/src/main/java/com/baeldung/zonedatetime}/OffsetDateTimeExample.java (89%) rename {java-dates/src/main/java/com/baeldung/zoneddatetime => java-dates-string/src/main/java/com/baeldung/zonedatetime}/OffsetTimeExample.java (89%) rename {java-dates/src/main/java/com/baeldung/zoneddatetime => java-dates-string/src/main/java/com/baeldung/zonedatetime}/ZoneDateTimeExample.java (93%) rename {java-dates-2 => java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java (100%) rename {java-dates-2 => java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java (100%) rename {java-dates-2 => java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java (100%) rename {java-dates-2 => java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java (100%) rename {java-dates => java-dates-string}/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java (100%) rename {java-dates/src/test/java/com/baeldung/zoneddatetime => java-dates-string/src/test/java/com/baeldung/zonedatetime}/OffsetDateTimeExampleUnitTest.java (93%) rename {java-dates/src/test/java/com/baeldung/zoneddatetime => java-dates-string/src/test/java/com/baeldung/zonedatetime}/OffsetTimeExampleUnitTest.java (93%) rename {java-dates/src/test/java/com/baeldung/zoneddatetime => java-dates-string/src/test/java/com/baeldung/zonedatetime}/ZoneDateTimeExampleUnitTest.java (96%) rename {java-dates/src/test/java/com/baeldung/zoneddatetime => java-dates-string/src/test/java/com/baeldung/zonedatetime}/ZonedDateTimeUnitTest.java (98%) diff --git a/java-dates-2/README.md b/java-dates-2/README.md deleted file mode 100644 index b2f8319e58..0000000000 --- a/java-dates-2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -## Relevant Articles: -- [Converting Between LocalDate and XMLGregorianCalendar](https://www.baeldung.com/java-localdate-to-xmlgregoriancalendar) -- [Convert Time to Milliseconds in Java](https://www.baeldung.com/java-time-milliseconds) -- [Check If a String Is a Valid Date in Java](https://www.baeldung.com/java-string-valid-date) diff --git a/java-dates-2/.gitignore b/java-dates-conversion/.gitignore similarity index 90% rename from java-dates-2/.gitignore rename to java-dates-conversion/.gitignore index 6471aabbcf..3de4cc647e 100644 --- a/java-dates-2/.gitignore +++ b/java-dates-conversion/.gitignore @@ -23,7 +23,4 @@ backup-pom.xml #IntelliJ specific .idea/ -*.iml - -#jenv -.java-version \ No newline at end of file +*.iml \ No newline at end of file diff --git a/java-dates-conversion/README.md b/java-dates-conversion/README.md new file mode 100644 index 0000000000..f781a9515c --- /dev/null +++ b/java-dates-conversion/README.md @@ -0,0 +1,9 @@ +========= + +## Java Date/time conversion Cookbooks and Examples + +### Relevant Articles: +- [Converting Between LocalDate and XMLGregorianCalendar](https://www.baeldung.com/java-localdate-to-xmlgregoriancalendar) +- [Convert Time to Milliseconds in Java](https://www.baeldung.com/java-time-milliseconds) +- [Convert Date to LocalDate or LocalDateTime and Back](http://www.baeldung.com/java-date-to-localdate-and-localdatetime) +- [Convert Between java.time.Instant and java.sql.Timestamp](https://www.baeldung.com/java-time-instant-to-java-sql-timestamp) diff --git a/java-dates-2/pom.xml b/java-dates-conversion/pom.xml similarity index 76% rename from java-dates-2/pom.xml rename to java-dates-conversion/pom.xml index c1419514ef..c9326eb44c 100644 --- a/java-dates-2/pom.xml +++ b/java-dates-conversion/pom.xml @@ -1,11 +1,10 @@ 4.0.0 - com.baeldung - java-dates-2 - 0.1.0-SNAPSHOT + java-dates-conversion + ${project.parent.version} + java-dates jar - java-dates-2 com.baeldung @@ -20,14 +19,16 @@ joda-time ${joda-time.version} - - - commons-validator - commons-validator - ${commons-validator.version} + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + log4j + log4j + ${log4j.version} - org.assertj @@ -38,7 +39,7 @@ - java-dates-2 + java-dates src/main/resources @@ -60,11 +61,10 @@ + 2.10 3.6.1 - 2.10 - 1.6 - 1.9 + 1.9 1.9 diff --git a/java-dates/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java b/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java rename to java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java diff --git a/java-dates/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java b/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java rename to java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java diff --git a/java-dates/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java b/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java rename to java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java diff --git a/java-dates/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java b/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java rename to java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java diff --git a/java-dates-2/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java b/java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java similarity index 100% rename from java-dates-2/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java rename to java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java b/java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java similarity index 97% rename from java-dates/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java rename to java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java index 3ba01a591a..e5fd80285c 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java +++ b/java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java @@ -1,15 +1,14 @@ package com.baeldung.datetime; -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Test; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.Instant; -import java.time.ZoneId; import java.util.TimeZone; -import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; public class ConvertInstantToTimestampUnitTest { diff --git a/java-dates/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java b/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java rename to java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java b/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java rename to java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java b/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java rename to java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java b/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java rename to java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java diff --git a/java-dates-2/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java b/java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java similarity index 100% rename from java-dates-2/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java rename to java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java diff --git a/java-dates-string/.gitignore b/java-dates-string/.gitignore new file mode 100644 index 0000000000..3de4cc647e --- /dev/null +++ b/java-dates-string/.gitignore @@ -0,0 +1,26 @@ +*.class + +0.* + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* +.resourceCache + +# Packaged files # +*.jar +*.war +*.ear + +# Files generated by integration tests +*.txt +backup-pom.xml +/bin/ +/temp + +#IntelliJ specific +.idea/ +*.iml \ No newline at end of file diff --git a/java-dates-string/README.md b/java-dates-string/README.md new file mode 100644 index 0000000000..9becf8a460 --- /dev/null +++ b/java-dates-string/README.md @@ -0,0 +1,12 @@ +========= + +## Java Dates Parsing and Formatting Cookbooks and Examples + +### Relevant Articles: +- [Check If a String Is a Valid Date in Java](https://www.baeldung.com/java-string-valid-date) +- [RegEx for matching Date Pattern in Java](http://www.baeldung.com/java-date-regular-expressions) +- [Guide to DateTimeFormatter](https://www.baeldung.com/java-datetimeformatter) +- [Format ZonedDateTime to String](https://www.baeldung.com/java-format-zoned-datetime-string) +- [A Guide to SimpleDateFormat](https://www.baeldung.com/java-simple-date-format) +- [Display All Time Zones With GMT And UTC in Java](http://www.baeldung.com/java-time-zones) +- [Convert between String and Timestamp](https://www.baeldung.com/java-string-to-timestamp) diff --git a/java-dates-string/pom.xml b/java-dates-string/pom.xml new file mode 100644 index 0000000000..d65ac140fb --- /dev/null +++ b/java-dates-string/pom.xml @@ -0,0 +1,83 @@ + + 4.0.0 + java-dates-string + ${project.parent.version} + java-dates + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + commons-validator + commons-validator + ${commons-validator.version} + + + log4j + log4j + ${log4j.version} + + + + org.assertj + assertj-core + ${assertj.version} + test + + + joda-time + joda-time + ${joda-time.version} + + + com.darwinsys + hirondelle-date4j + RELEASE + test + + + + + java-dates + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + 1.6 + 2.10 + + 3.6.1 + 1.9 + 1.9 + + diff --git a/java-dates-2/src/main/java/com/baeldung/date/validation/DateValidator.java b/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java similarity index 100% rename from java-dates-2/src/main/java/com/baeldung/date/validation/DateValidator.java rename to java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java diff --git a/java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java b/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java similarity index 100% rename from java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java rename to java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java diff --git a/java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java b/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java similarity index 100% rename from java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java rename to java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java diff --git a/java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java b/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java similarity index 100% rename from java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java rename to java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java diff --git a/java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java b/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java similarity index 100% rename from java-dates-2/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java rename to java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java b/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java rename to java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java diff --git a/java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java b/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java rename to java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java diff --git a/java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java b/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java rename to java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java diff --git a/java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java b/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java rename to java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java diff --git a/java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java b/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java rename to java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java diff --git a/java-dates/src/main/java/com/baeldung/zoneddatetime/OffsetDateTimeExample.java b/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java similarity index 89% rename from java-dates/src/main/java/com/baeldung/zoneddatetime/OffsetDateTimeExample.java rename to java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java index fb92eb8d0d..90077795f0 100644 --- a/java-dates/src/main/java/com/baeldung/zoneddatetime/OffsetDateTimeExample.java +++ b/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java @@ -1,4 +1,4 @@ -package com.baeldung.zoneddatetime; +package com.baeldung.zonedatetime; import java.time.OffsetDateTime; import java.time.ZoneOffset; diff --git a/java-dates/src/main/java/com/baeldung/zoneddatetime/OffsetTimeExample.java b/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java similarity index 89% rename from java-dates/src/main/java/com/baeldung/zoneddatetime/OffsetTimeExample.java rename to java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java index 58e2d4d5ad..e280d365c2 100644 --- a/java-dates/src/main/java/com/baeldung/zoneddatetime/OffsetTimeExample.java +++ b/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java @@ -1,4 +1,4 @@ -package com.baeldung.zoneddatetime; +package com.baeldung.zonedatetime; import java.time.OffsetTime; import java.time.ZoneOffset; diff --git a/java-dates/src/main/java/com/baeldung/zoneddatetime/ZoneDateTimeExample.java b/java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java similarity index 93% rename from java-dates/src/main/java/com/baeldung/zoneddatetime/ZoneDateTimeExample.java rename to java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java index b54b8c5225..a0dd304876 100644 --- a/java-dates/src/main/java/com/baeldung/zoneddatetime/ZoneDateTimeExample.java +++ b/java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java @@ -1,4 +1,4 @@ -package com.baeldung.zoneddatetime; +package com.baeldung.zonedatetime; import java.time.ZoneId; import java.time.ZonedDateTime; diff --git a/java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java b/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java similarity index 100% rename from java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java diff --git a/java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java b/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java similarity index 100% rename from java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java diff --git a/java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java b/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java similarity index 100% rename from java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java diff --git a/java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java b/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java similarity index 100% rename from java-dates-2/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java b/java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java b/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java rename to java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java diff --git a/java-dates/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java b/java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java b/java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java b/java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java rename to java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java diff --git a/java-dates/src/test/java/com/baeldung/zoneddatetime/OffsetDateTimeExampleUnitTest.java b/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java similarity index 93% rename from java-dates/src/test/java/com/baeldung/zoneddatetime/OffsetDateTimeExampleUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java index a08d3737cd..7634ff1572 100644 --- a/java-dates/src/test/java/com/baeldung/zoneddatetime/OffsetDateTimeExampleUnitTest.java +++ b/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.zoneddatetime; +package com.baeldung.zonedatetime; import static org.junit.Assert.assertTrue; diff --git a/java-dates/src/test/java/com/baeldung/zoneddatetime/OffsetTimeExampleUnitTest.java b/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java similarity index 93% rename from java-dates/src/test/java/com/baeldung/zoneddatetime/OffsetTimeExampleUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java index 488f934179..6134e48f70 100644 --- a/java-dates/src/test/java/com/baeldung/zoneddatetime/OffsetTimeExampleUnitTest.java +++ b/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.zoneddatetime; +package com.baeldung.zonedatetime; import static org.junit.Assert.assertTrue; diff --git a/java-dates/src/test/java/com/baeldung/zoneddatetime/ZoneDateTimeExampleUnitTest.java b/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java similarity index 96% rename from java-dates/src/test/java/com/baeldung/zoneddatetime/ZoneDateTimeExampleUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java index e78ff3e3fd..cc19055beb 100644 --- a/java-dates/src/test/java/com/baeldung/zoneddatetime/ZoneDateTimeExampleUnitTest.java +++ b/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.zoneddatetime; +package com.baeldung.zonedatetime; import static org.junit.Assert.assertTrue; diff --git a/java-dates/src/test/java/com/baeldung/zoneddatetime/ZonedDateTimeUnitTest.java b/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java similarity index 98% rename from java-dates/src/test/java/com/baeldung/zoneddatetime/ZonedDateTimeUnitTest.java rename to java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java index 65f63bc787..150983c61b 100644 --- a/java-dates/src/test/java/com/baeldung/zoneddatetime/ZonedDateTimeUnitTest.java +++ b/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.zoneddatetime; +package com.baeldung.zonedatetime; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/java-dates/README.md b/java-dates/README.md index 7da309924d..ef4cffe6d8 100644 --- a/java-dates/README.md +++ b/java-dates/README.md @@ -7,14 +7,11 @@ - [Handling Daylight Savings Time in Java](http://www.baeldung.com/java-daylight-savings) - [Period and Duration in Java](http://www.baeldung.com/java-period-duration) - [Difference Between Two Dates in Java](http://www.baeldung.com/java-date-difference) -- [RegEx for matching Date Pattern in Java](http://www.baeldung.com/java-date-regular-expressions) - [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api) - [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) - [Get the Current Date, Time and Timestamp in Java 8](http://www.baeldung.com/current-date-time-and-timestamp-in-java-8) - [Get Date Without Time in Java](http://www.baeldung.com/java-date-without-time) - [How to Get All Dates Between Two Dates?](http://www.baeldung.com/java-between-dates) -- [Convert Date to LocalDate or LocalDateTime and Back](http://www.baeldung.com/java-date-to-localdate-and-localdatetime) -- [Display All Time Zones With GMT And UTC in Java](http://www.baeldung.com/java-time-zones) - [Extracting Year, Month and Day from Date in Java](http://www.baeldung.com/java-year-month-day) - [Guide to java.util.GregorianCalendar](http://www.baeldung.com/java-gregorian-calendar) - [Measure Elapsed Time in Java](http://www.baeldung.com/java-measure-elapsed-time) @@ -22,11 +19,6 @@ - [Calculate Age in Java](http://www.baeldung.com/java-get-age) - [Increment Date in Java](http://www.baeldung.com/java-increment-date) - [Add Hours To a Date In Java](http://www.baeldung.com/java-add-hours-date) -- [Guide to DateTimeFormatter](https://www.baeldung.com/java-datetimeformatter) -- [Format ZonedDateTime to String](https://www.baeldung.com/java-format-zoned-datetime-string) -- [Convert Between java.time.Instant and java.sql.Timestamp](https://www.baeldung.com/java-time-instant-to-java-sql-timestamp) -- [Convert between String and Timestamp](https://www.baeldung.com/java-string-to-timestamp) -- [A Guide to SimpleDateFormat](https://www.baeldung.com/java-simple-date-format) - [ZoneOffset in Java](https://www.baeldung.com/java-zone-offset) - [Differences Between ZonedDateTime and OffsetDateTime](https://www.baeldung.com/java-zoneddatetime-offsetdatetime) - [Introduction to Joda-Time](http://www.baeldung.com/joda-time) diff --git a/java-dates/pom.xml b/java-dates/pom.xml index 3fddf3f0f8..761ebd71a6 100644 --- a/java-dates/pom.xml +++ b/java-dates/pom.xml @@ -25,12 +25,6 @@ log4j ${log4j.version} - - org.projectlombok - lombok - ${lombok.version} - provided - org.assertj diff --git a/pom.xml b/pom.xml index c3f3a62da1..52a5922273 100644 --- a/pom.xml +++ b/pom.xml @@ -467,8 +467,10 @@ java-collections-maps java-collections-maps-2 java-jdi - - + java-lite java-math From ed51850e005d67816f52171498ad41cf63d78434 Mon Sep 17 00:00:00 2001 From: pazis Date: Fri, 20 Sep 2019 10:41:22 +0000 Subject: [PATCH 014/304] date to offsetdatetime --- .../conversion/ConvertToOffsetDateTime.java | 17 +++++++++++ .../ConvertToOffsetDateTimeUnitTest.java | 29 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java create mode 100644 java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java diff --git a/java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java b/java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java new file mode 100644 index 0000000000..143531bd33 --- /dev/null +++ b/java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java @@ -0,0 +1,17 @@ +package com.baeldung.date.conversion; + +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.util.Date; + +public class ConvertToOffsetDateTime { + + public static OffsetDateTime convert (Date date) { + return date.toInstant().atOffset(ZoneOffset.UTC); + } + + public static OffsetDateTime convert (Date date, int hour, int minute) { + return date.toInstant().atOffset(ZoneOffset.ofHoursMinutes(hour, minute)); + } + +} diff --git a/java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java b/java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java new file mode 100644 index 0000000000..cb9d3daf3d --- /dev/null +++ b/java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.date.conversion; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.time.OffsetDateTime; +import java.util.Date; + +import org.junit.Test; + +public class ConvertToOffsetDateTimeUnitTest { + + @Test + public void whenDateIsNotNull_thenConvertToOffsetDateTime() { + Date date = new Date(); + assertTrue(ConvertToOffsetDateTime.convert(date) instanceof OffsetDateTime); + } + + @Test + public void givenDate_whenHasOffset_thenConvertWithOffset() { + Date date = new Date(); + date.setHours(6); + date.setMinutes(30); + OffsetDateTime odt = ConvertToOffsetDateTime.convert(date, 3, 30); + assertEquals(10, odt.getHour()); + assertEquals(0, odt.getMinute()); + } + +} From 4612edeb68f1c854788f1db2d51d0fa77442ef32 Mon Sep 17 00:00:00 2001 From: pazis Date: Fri, 20 Sep 2019 10:44:22 +0000 Subject: [PATCH 015/304] formatting fix --- .../date/conversion/ConvertToOffsetDateTime.java | 14 ++++++++------ .../ConvertToOffsetDateTimeUnitTest.java | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java b/java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java index 143531bd33..34914962f9 100644 --- a/java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java +++ b/java-dates-2/src/main/java/com/baeldung/date/conversion/ConvertToOffsetDateTime.java @@ -5,13 +5,15 @@ import java.time.ZoneOffset; import java.util.Date; public class ConvertToOffsetDateTime { - - public static OffsetDateTime convert (Date date) { - return date.toInstant().atOffset(ZoneOffset.UTC); + + public static OffsetDateTime convert(Date date) { + return date.toInstant() + .atOffset(ZoneOffset.UTC); } - - public static OffsetDateTime convert (Date date, int hour, int minute) { - return date.toInstant().atOffset(ZoneOffset.ofHoursMinutes(hour, minute)); + + public static OffsetDateTime convert(Date date, int hour, int minute) { + return date.toInstant() + .atOffset(ZoneOffset.ofHoursMinutes(hour, minute)); } } diff --git a/java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java b/java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java index cb9d3daf3d..c927da00c8 100644 --- a/java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java +++ b/java-dates-2/src/test/java/com/baeldung/date/conversion/ConvertToOffsetDateTimeUnitTest.java @@ -15,7 +15,7 @@ public class ConvertToOffsetDateTimeUnitTest { Date date = new Date(); assertTrue(ConvertToOffsetDateTime.convert(date) instanceof OffsetDateTime); } - + @Test public void givenDate_whenHasOffset_thenConvertWithOffset() { Date date = new Date(); @@ -25,5 +25,5 @@ public class ConvertToOffsetDateTimeUnitTest { assertEquals(10, odt.getHour()); assertEquals(0, odt.getMinute()); } - + } From f4e010cef5931acb67c78fa0b3bf41bf366576da Mon Sep 17 00:00:00 2001 From: Jon Cook Date: Mon, 23 Sep 2019 22:34:20 +0200 Subject: [PATCH 016/304] BAEL-3110 - Linux Commands - Remove All Text After X --- .../text/src/main/bash/remove_characters.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100755 linux-bash/text/src/main/bash/remove_characters.sh diff --git a/linux-bash/text/src/main/bash/remove_characters.sh b/linux-bash/text/src/main/bash/remove_characters.sh new file mode 100755 index 0000000000..a8f51468f4 --- /dev/null +++ b/linux-bash/text/src/main/bash/remove_characters.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +my_var="Hola Mundo" +echo ${my_var} + +my_filename="interesting-text-file.txt" +echo ${my_filename:0:21} + +echo ${my_filename%.*} + +complicated_filename="hello-world.tar.gz" +echo ${complicated_filename%%.*} + +echo ${my_filename/.*/} + +echo 'interesting-text-file.txt' | sed 's/.txt*//' + +echo 'interesting-text-file.txt' | cut -f1 -d"." +echo ${complicated_filename} | cut -f1 -d"." From 9a456ba4f1d1c62819d8712fd35fd751e606f4ec Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Sat, 28 Sep 2019 10:39:34 +0530 Subject: [PATCH 017/304] BAEL-1363 Fallback for Zuul Routes --- spring-cloud/pom.xml | 7 +- .../spring-cloud-zuul-fallback/README.md | 2 + .../api-gateway/pom.xml | 43 ++++++++++++ .../apigateway/ApiGatewayApplication.java | 15 ++++ .../fallback/GatewayClientResponse.java | 69 +++++++++++++++++++ .../fallback/GatewayServiceFallback.java | 29 ++++++++ .../fallback/WeatherServiceFallback.java | 29 ++++++++ .../src/main/resources/application.yml | 22 ++++++ .../ApiGatewayApplicationIntegrationTest.java | 16 +++++ .../GatewayServiceFallbackUnitTest.java | 46 +++++++++++++ .../WeatherServiceFallbackUnitTest.java | 46 +++++++++++++ .../spring-cloud-zuul-fallback/pom.xml | 28 ++++++++ .../weather-service/pom.xml | 39 +++++++++++ .../weatherservice/WeatherController.java | 16 +++++ .../WeatherServiceApplication.java | 13 ++++ .../src/main/resources/application.yml | 5 ++ .../WeatherControllerIntegrationTest.java | 31 +++++++++ ...therServiceApplicationIntegrationTest.java | 16 +++++ 18 files changed, 469 insertions(+), 3 deletions(-) create mode 100644 spring-cloud/spring-cloud-zuul-fallback/README.md create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplication.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayClientResponse.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallback.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallback.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplicationIntegrationTest.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallbackUnitTest.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallbackUnitTest.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherController.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplication.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherControllerIntegrationTest.java create mode 100644 spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplicationIntegrationTest.java diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index baf86a4386..7138efc128 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -25,7 +25,7 @@ spring-cloud-zookeeper spring-cloud-gateway spring-cloud-stream - spring-cloud-stream-starters/twitterhdfs + spring-cloud-stream-starters/twitterhdfs spring-cloud-connectors-heroku spring-cloud-aws spring-cloud-consul @@ -35,9 +35,10 @@ spring-cloud-archaius spring-cloud-functions spring-cloud-vault - - spring-cloud-task + + spring-cloud-task spring-cloud-zuul + spring-cloud-zuul-fallback diff --git a/spring-cloud/spring-cloud-zuul-fallback/README.md b/spring-cloud/spring-cloud-zuul-fallback/README.md new file mode 100644 index 0000000000..2f13c1923b --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Fallback for Zuul Route](TODO) diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml new file mode 100644 index 0000000000..ee0f607d8a --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml @@ -0,0 +1,43 @@ + + 4.0.0 + api-gateway + api-gateway + API Gateway using Zuul + jar + + + com.baeldung.spring.cloud + spring-cloud-zuul-fallback + 1.0.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-zuul + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-starter-parent + ${spring-cloud-dependencies.version} + pom + import + + + + diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplication.java b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplication.java new file mode 100644 index 0000000000..78f489f2bb --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.cloud.apigateway; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.zuul.EnableZuulProxy; + +@SpringBootApplication +@EnableZuulProxy +public class ApiGatewayApplication { + + public static void main(String[] args) { + SpringApplication.run(ApiGatewayApplication.class, args); + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayClientResponse.java b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayClientResponse.java new file mode 100644 index 0000000000..ce0c7819f1 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayClientResponse.java @@ -0,0 +1,69 @@ +package com.baeldung.spring.cloud.apigateway.fallback; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpResponse; + +public class GatewayClientResponse implements ClientHttpResponse { + + private HttpStatus status; + private String message; + + public GatewayClientResponse(HttpStatus status, String message) { + this.status = status; + this.message = message; + } + + @Override + public HttpStatus getStatusCode() throws IOException { + return status; + } + + @Override + public int getRawStatusCode() throws IOException { + return status.value(); + } + + @Override + public String getStatusText() throws IOException { + return status.getReasonPhrase(); + } + + @Override + public void close() { + } + + @Override + public InputStream getBody() throws IOException { + return new ByteArrayInputStream(message.getBytes()); + } + + @Override + public HttpHeaders getHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + return headers; + } + + public HttpStatus getStatus() { + return status; + } + + public void setStatus(HttpStatus status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallback.java b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallback.java new file mode 100644 index 0000000000..73f72492c9 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallback.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.cloud.apigateway.fallback; + +import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; +import org.springframework.http.HttpStatus; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +import com.netflix.hystrix.exception.HystrixTimeoutException; + +@Component +class GatewayServiceFallback implements FallbackProvider { + + private static final String DEFAULT_MESSAGE = "Service not available."; + + @Override + public String getRoute() { + return "*"; // or return null; + } + + @Override + public ClientHttpResponse fallbackResponse(String route, Throwable cause) { + if (cause instanceof HystrixTimeoutException) { + return new GatewayClientResponse(HttpStatus.GATEWAY_TIMEOUT, DEFAULT_MESSAGE); + } else { + return new GatewayClientResponse(HttpStatus.INTERNAL_SERVER_ERROR, DEFAULT_MESSAGE); + } + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallback.java b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallback.java new file mode 100644 index 0000000000..28fb6fb6e5 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallback.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.cloud.apigateway.fallback; + +import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; +import org.springframework.http.HttpStatus; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +import com.netflix.hystrix.exception.HystrixTimeoutException; + +@Component +class WeatherServiceFallback implements FallbackProvider { + + private static final String DEFAULT_MESSAGE = "Weather information is not available."; + + @Override + public String getRoute() { + return "weather-service"; + } + + @Override + public ClientHttpResponse fallbackResponse(String route, Throwable cause) { + if (cause instanceof HystrixTimeoutException) { + return new GatewayClientResponse(HttpStatus.GATEWAY_TIMEOUT, DEFAULT_MESSAGE); + } else { + return new GatewayClientResponse(HttpStatus.INTERNAL_SERVER_ERROR, DEFAULT_MESSAGE); + } + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml new file mode 100644 index 0000000000..9a7d3314a3 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml @@ -0,0 +1,22 @@ +spring: + application: + name: api-gateway +server: + port: 8008 + +zuul: + igoredServices: '*' + routes: + weather-service: + path: /weather/** + serviceId: weather-service + strip-prefix: false + +ribbon: + eureka: + enabled: false + +weather-service: + ribbon: + listOfServers: localhost:7070 + diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplicationIntegrationTest.java b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplicationIntegrationTest.java new file mode 100644 index 0000000000..4052edc1f3 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/ApiGatewayApplicationIntegrationTest.java @@ -0,0 +1,16 @@ +package com.baeldung.spring.cloud.apigateway; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ApiGatewayApplicationIntegrationTest { + + @Test + public void whenSpringContextIsBootstrapped_thenNoExceptions() { + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallbackUnitTest.java b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallbackUnitTest.java new file mode 100644 index 0000000000..db2f703084 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/GatewayServiceFallbackUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.spring.cloud.apigateway.fallback; + +import static org.junit.Assert.assertEquals; + +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.http.HttpStatus; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.test.context.junit4.SpringRunner; + +import com.netflix.hystrix.exception.HystrixTimeoutException; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class GatewayServiceFallbackUnitTest { + + private static final String ROUTE = "*"; + + @Autowired + private GatewayServiceFallback fallback; + + @Test + public void testWhenGetRouteThenReturnWeatherServiceRoute() { + assertEquals(ROUTE, fallback.getRoute()); + + } + + @Test + public void testFallbackResponse_whenHystrixException_thenGatewayTimeout() throws Exception { + HystrixTimeoutException exception = new HystrixTimeoutException(); + ClientHttpResponse response = fallback.fallbackResponse(ROUTE, exception); + + assertEquals(HttpStatus.GATEWAY_TIMEOUT, response.getStatusCode()); + } + + @Test + public void testFallbackResponse_whenNonHystrixException_thenInternalServerError() throws Exception { + RuntimeException exception = new RuntimeException("Test exception"); + ClientHttpResponse response = fallback.fallbackResponse(ROUTE, exception); + + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallbackUnitTest.java b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallbackUnitTest.java new file mode 100644 index 0000000000..ccd59531b5 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/test/java/com/baeldung/spring/cloud/apigateway/fallback/WeatherServiceFallbackUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.spring.cloud.apigateway.fallback; + +import static org.junit.Assert.assertEquals; + +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.http.HttpStatus; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.test.context.junit4.SpringRunner; + +import com.netflix.hystrix.exception.HystrixTimeoutException; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class WeatherServiceFallbackUnitTest { + + private static final String ROUTE = "weather-service"; + + @Autowired + private WeatherServiceFallback fallback; + + @Test + public void testWhenGetRouteThenReturnWeatherServiceRoute() { + assertEquals(ROUTE, fallback.getRoute()); + + } + + @Test + public void testFallbackResponse_whenHystrixException_thenGatewayTimeout() throws Exception { + HystrixTimeoutException exception = new HystrixTimeoutException(); + ClientHttpResponse response = fallback.fallbackResponse(ROUTE, exception); + + assertEquals(HttpStatus.GATEWAY_TIMEOUT, response.getStatusCode()); + } + + @Test + public void testFallbackResponse_whenNonHystrixException_thenInternalServerError() throws Exception { + RuntimeException exception = new RuntimeException("Test exception"); + ClientHttpResponse response = fallback.fallbackResponse(ROUTE, exception); + + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/pom.xml b/spring-cloud/spring-cloud-zuul-fallback/pom.xml new file mode 100644 index 0000000000..5bdd1d49ca --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + spring-cloud-zuul-fallback + pom + spring-cloud-zuul-fallback + Spring Cloud Zuul Fallback + + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + .. + + + + api-gateway + weather-service + + + + 1.8 + Finchley.SR2 + 3.1.1 + + diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml b/spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml new file mode 100644 index 0000000000..611f1dcd4f --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml @@ -0,0 +1,39 @@ + + 4.0.0 + weather-service + Weather Service + Weather Service for Zuul Fallback Test + + + com.baeldung.spring.cloud + spring-cloud-zuul-fallback + 1.0.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-starter-parent + ${spring-cloud-dependencies.version} + pom + import + + + + diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherController.java b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherController.java new file mode 100644 index 0000000000..3cf451dcf7 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherController.java @@ -0,0 +1,16 @@ +package com.baeldung.spring.cloud.weatherservice; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/weather") +public class WeatherController { + + @GetMapping("/today") + public String getMessage() { + return "It's a bright sunny day today!"; + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplication.java b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplication.java new file mode 100644 index 0000000000..3a6d85e8d1 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.cloud.weatherservice; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class WeatherServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(WeatherServiceApplication.class, args); + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml new file mode 100644 index 0000000000..30ceeee438 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml @@ -0,0 +1,5 @@ +spring: + application: + name: weather-service +server: + port: 7070 diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherControllerIntegrationTest.java b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherControllerIntegrationTest.java new file mode 100644 index 0000000000..3ffd2b0e7a --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherControllerIntegrationTest.java @@ -0,0 +1,31 @@ +package com.baeldung.spring.cloud.weatherservice; + +import static org.hamcrest.Matchers.containsString; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +@RunWith(SpringRunner.class) +@WebMvcTest(WeatherController.class) +public class WeatherControllerIntegrationTest { + + @Autowired + private MockMvc mockMvc; + + @Test + public void whenWeatherControllerInvoked_thenReturnWeatherInformation() throws Exception { + this.mockMvc.perform(get("/weather/today")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("bright sunny day"))); + } + +} diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplicationIntegrationTest.java b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplicationIntegrationTest.java new file mode 100644 index 0000000000..fec7ec1560 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/test/java/com/baeldung/spring/cloud/weatherservice/WeatherServiceApplicationIntegrationTest.java @@ -0,0 +1,16 @@ +package com.baeldung.spring.cloud.weatherservice; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class WeatherServiceApplicationIntegrationTest { + + @Test + public void whenSpringContextIsBootstrapped_thenNoExceptions() { + } + +} From f59fa07851d426421cdd36240f0a15e5a0354f0c Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 29 Sep 2019 09:11:53 +0200 Subject: [PATCH 018/304] #BAEL-16646 moved modules java-dates-conversion and java-dates-string under core-java/core-java-datetime --- .../core-java-datetime/README.md | 3 +++ .../java-dates-conversion}/.gitignore | 0 .../java-dates-conversion}/README.md | 4 ++-- .../java-dates-conversion}/pom.xml | 0 .../DateToLocalDateConverter.java | 0 .../DateToLocalDateTimeConverter.java | 0 .../LocalDateTimeToDateConverter.java | 0 .../LocalDateToDateConverter.java | 0 .../convert/ConvertDateTimeUnitTest.java | 0 .../ConvertInstantToTimestampUnitTest.java | 0 .../DateToLocalDateConverterUnitTest.java | 0 .../DateToLocalDateTimeConverterUnitTest.java | 0 .../LocalDateTimeToDateConverterUnitTest.java | 0 .../LocalDateToDateConverterUnitTest.java | 0 ...XmlGregorianCalendarConverterUnitTest.java | 0 .../java-dates-string}/.gitignore | 0 .../java-dates-string}/README.md | 4 ++-- .../java-dates-string}/pom.xml | 0 .../date/validation/DateValidator.java | 0 .../DateValidatorUsingApacheValidator.java | 0 .../DateValidatorUsingDateFormat.java | 0 .../DateValidatorUsingDateTimeFormatter.java | 0 .../DateValidatorUsingLocalDate.java | 0 .../regexp/datepattern/DateMatcher.java | 0 .../datepattern/FormattedDateMatcher.java | 0 .../regexp/datepattern/RangedDateMatcher.java | 0 .../gregorian/February29thMatcher.java | 0 .../gregorian/FebruaryGeneralMatcher.java | 0 .../gregorian/GregorianDateMatcher.java | 0 .../gregorian/MonthsOf30DaysMatcher.java | 0 .../gregorian/MonthsOf31DaysMatcher.java | 0 .../optmization/OptimizedMatcher.java | 0 .../timezonedisplay/TimezoneDisplay.java | 0 .../timezonedisplay/TimezoneDisplayApp.java | 0 .../timezonedisplay/TimezoneDisplayJava7.java | 0 .../TimezoneDisplayJava7App.java | 0 .../zonedatetime/OffsetDateTimeExample.java | 0 .../zonedatetime/OffsetTimeExample.java | 0 .../zonedatetime/ZoneDateTimeExample.java | 0 ...ValidatorUsingApacheValidatorUnitTest.java | 0 .../DateValidatorUsingDateFormatUnitTest.java | 0 ...lidatorUsingDateTimeFormatterUnitTest.java | 0 .../DateValidatorUsingLocalDateUnitTest.java | 0 .../datetime/DateTimeFormatterUnitTest.java | 0 .../FormattedDateMatcherUnitTest.java | 0 .../RangedDateMatcherUnitTest.java | 0 .../February29thMatcherUnitTest.java | 0 .../FebruaryGeneralMatcherUnitTest.java | 0 .../GregorianDateMatcherUnitTest.java | 0 .../MonthsOf30DaysMatcherUnitTest.java | 0 .../MonthsOf31DaysMatcherUnitTest.java | 0 .../testhelper/GregorianDateTestHelper.java | 0 .../SimpleDateFormatUnitTest.java | 0 .../StringToTimestampConverterUnitTest.java | 0 .../TimestampToStringConverterTest.java | 0 .../OffsetDateTimeExampleUnitTest.java | 0 .../OffsetTimeExampleUnitTest.java | 0 .../ZoneDateTimeExampleUnitTest.java | 0 .../zonedatetime/ZonedDateTimeUnitTest.java | 0 core-java-modules/core-java-datetime/pom.xml | 23 +++++++++++++++++++ .../hibernate-mapping/README.md | 2 +- pom.xml | 6 ++--- 62 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 core-java-modules/core-java-datetime/README.md rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/.gitignore (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/README.md (86%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/pom.xml (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java (100%) rename {java-dates-conversion => core-java-modules/core-java-datetime/java-dates-conversion}/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/.gitignore (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/README.md (89%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/pom.xml (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidator.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java (100%) rename {java-dates-string => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java (100%) create mode 100644 core-java-modules/core-java-datetime/pom.xml diff --git a/core-java-modules/core-java-datetime/README.md b/core-java-modules/core-java-datetime/README.md new file mode 100644 index 0000000000..51f52e239d --- /dev/null +++ b/core-java-modules/core-java-datetime/README.md @@ -0,0 +1,3 @@ +## Java Date and Time + +This module contains articles about date and time in Java. diff --git a/java-dates-conversion/.gitignore b/core-java-modules/core-java-datetime/java-dates-conversion/.gitignore similarity index 100% rename from java-dates-conversion/.gitignore rename to core-java-modules/core-java-datetime/java-dates-conversion/.gitignore diff --git a/java-dates-conversion/README.md b/core-java-modules/core-java-datetime/java-dates-conversion/README.md similarity index 86% rename from java-dates-conversion/README.md rename to core-java-modules/core-java-datetime/java-dates-conversion/README.md index f781a9515c..2503459f50 100644 --- a/java-dates-conversion/README.md +++ b/core-java-modules/core-java-datetime/java-dates-conversion/README.md @@ -1,7 +1,7 @@ -========= - ## Java Date/time conversion Cookbooks and Examples +This module contains articles about converting between Java date and time objects. + ### Relevant Articles: - [Converting Between LocalDate and XMLGregorianCalendar](https://www.baeldung.com/java-localdate-to-xmlgregoriancalendar) - [Convert Time to Milliseconds in Java](https://www.baeldung.com/java-time-milliseconds) diff --git a/java-dates-conversion/pom.xml b/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml similarity index 100% rename from java-dates-conversion/pom.xml rename to core-java-modules/core-java-datetime/java-dates-conversion/pom.xml diff --git a/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java similarity index 100% rename from java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java diff --git a/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java similarity index 100% rename from java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java diff --git a/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java similarity index 100% rename from java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java diff --git a/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java similarity index 100% rename from java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java diff --git a/java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java similarity index 100% rename from java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java diff --git a/java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java similarity index 100% rename from java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java diff --git a/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java similarity index 100% rename from java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java diff --git a/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java similarity index 100% rename from java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java diff --git a/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java similarity index 100% rename from java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java diff --git a/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java similarity index 100% rename from java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java diff --git a/java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java similarity index 100% rename from java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java diff --git a/java-dates-string/.gitignore b/core-java-modules/core-java-datetime/java-dates-string/.gitignore similarity index 100% rename from java-dates-string/.gitignore rename to core-java-modules/core-java-datetime/java-dates-string/.gitignore diff --git a/java-dates-string/README.md b/core-java-modules/core-java-datetime/java-dates-string/README.md similarity index 89% rename from java-dates-string/README.md rename to core-java-modules/core-java-datetime/java-dates-string/README.md index 9becf8a460..76c3298bd5 100644 --- a/java-dates-string/README.md +++ b/core-java-modules/core-java-datetime/java-dates-string/README.md @@ -1,7 +1,7 @@ -========= - ## Java Dates Parsing and Formatting Cookbooks and Examples +This module contains articles about parsing and formatting Java date and time objects. + ### Relevant Articles: - [Check If a String Is a Valid Date in Java](https://www.baeldung.com/java-string-valid-date) - [RegEx for matching Date Pattern in Java](http://www.baeldung.com/java-date-regular-expressions) diff --git a/java-dates-string/pom.xml b/core-java-modules/core-java-datetime/java-dates-string/pom.xml similarity index 100% rename from java-dates-string/pom.xml rename to core-java-modules/core-java-datetime/java-dates-string/pom.xml diff --git a/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java diff --git a/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java diff --git a/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java diff --git a/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java diff --git a/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java diff --git a/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java diff --git a/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java diff --git a/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java diff --git a/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java diff --git a/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java diff --git a/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java diff --git a/java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java b/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java similarity index 100% rename from java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java rename to core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java diff --git a/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java diff --git a/java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java diff --git a/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java similarity index 100% rename from java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java diff --git a/core-java-modules/core-java-datetime/pom.xml b/core-java-modules/core-java-datetime/pom.xml new file mode 100644 index 0000000000..cab5c9fe98 --- /dev/null +++ b/core-java-modules/core-java-datetime/pom.xml @@ -0,0 +1,23 @@ + + 4.0.0 + com.baeldung.exception.numberformat + core-java-datetime + 0.0.1-SNAPSHOT + pom + core-java-datetime + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + java-dates-conversion + java-dates-string + + + diff --git a/persistence-modules/hibernate-mapping/README.md b/persistence-modules/hibernate-mapping/README.md index 99374f9135..c227620324 100644 --- a/persistence-modules/hibernate-mapping/README.md +++ b/persistence-modules/hibernate-mapping/README.md @@ -4,4 +4,4 @@ - [Persisting Maps with Hibernate](https://www.baeldung.com/hibernate-persisting-maps) - [Difference Between @Size, @Length, and @Column(length=value)](https://www.baeldung.com/jpa-size-length-column-differences) - [Hibernate Validator Specific Constraints](https://www.baeldung.com/hibernate-validator-constraints) -- [Hibernate One to Many Annotation Tutorial](http://www.baeldung.com/hibernate-one-to-many) \ No newline at end of file +- [Hibernate One to Many Annotation Tutorial](http://www.baeldung.com/hibernate-one-to-many) diff --git a/pom.xml b/pom.xml index 128320951c..927e1a25b4 100644 --- a/pom.xml +++ b/pom.xml @@ -469,10 +469,8 @@ java-collections-maps java-collections-maps-2 java-jdi - + + java-lite java-math From 95324865a81ced01b94226889bc796df242d63a1 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 29 Sep 2019 10:59:04 +0200 Subject: [PATCH 019/304] #BAEL-16646 fix project names --- core-java-modules/core-java-datetime/README.md | 2 +- .../core-java-datetime/java-dates-conversion/pom.xml | 6 +++--- .../core-java-datetime/java-dates-string/pom.xml | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-datetime/README.md b/core-java-modules/core-java-datetime/README.md index 51f52e239d..ddb2d336b5 100644 --- a/core-java-modules/core-java-datetime/README.md +++ b/core-java-modules/core-java-datetime/README.md @@ -1,3 +1,3 @@ ## Java Date and Time -This module contains articles about date and time in Java. +This module contains articles about date and time in Java. It's split in several submodules. diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml b/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml index c9326eb44c..8f3d35f4f3 100644 --- a/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml +++ b/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml @@ -3,14 +3,14 @@ 4.0.0 java-dates-conversion ${project.parent.version} - java-dates + java-dates-conversion jar com.baeldung parent-java 0.0.1-SNAPSHOT - ../parent-java + ../../parent-java @@ -39,7 +39,7 @@ - java-dates + java-dates-conversion src/main/resources diff --git a/core-java-modules/core-java-datetime/java-dates-string/pom.xml b/core-java-modules/core-java-datetime/java-dates-string/pom.xml index d65ac140fb..d599818924 100644 --- a/core-java-modules/core-java-datetime/java-dates-string/pom.xml +++ b/core-java-modules/core-java-datetime/java-dates-string/pom.xml @@ -3,14 +3,14 @@ 4.0.0 java-dates-string ${project.parent.version} - java-dates + java-dates-string jar com.baeldung parent-java 0.0.1-SNAPSHOT - ../parent-java + ../../parent-java @@ -51,7 +51,7 @@ - java-dates + java-dates-string src/main/resources From 491a91209066dd39fefe273a5527bd606b953d38 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 29 Sep 2019 11:13:08 +0200 Subject: [PATCH 020/304] #BAEL-16646 move https://www.baeldung.com/java-date-difference in new module java-dates-computations --- .../java-dates-computations/README.md | 6 ++ .../java-dates-computations/pom.xml | 60 +++++++++++++++++++ .../com/baeldung/date/DateDiffUnitTest.java | 0 core-java-modules/core-java-datetime/pom.xml | 1 + java-dates/README.md | 1 - java-dates/pom.xml | 6 -- pom.xml | 2 +- 7 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 core-java-modules/core-java-datetime/java-dates-computations/README.md create mode 100644 core-java-modules/core-java-datetime/java-dates-computations/pom.xml rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/date/DateDiffUnitTest.java (100%) diff --git a/core-java-modules/core-java-datetime/java-dates-computations/README.md b/core-java-modules/core-java-datetime/java-dates-computations/README.md new file mode 100644 index 0000000000..73b927df98 --- /dev/null +++ b/core-java-modules/core-java-datetime/java-dates-computations/README.md @@ -0,0 +1,6 @@ +## Java Date/time computations Cookbooks and Examples + +This module contains articles about date and time computations in Java. + +### Relevant Articles: +- [Difference Between Two Dates in Java](http://www.baeldung.com/java-date-difference) diff --git a/core-java-modules/core-java-datetime/java-dates-computations/pom.xml b/core-java-modules/core-java-datetime/java-dates-computations/pom.xml new file mode 100644 index 0000000000..8ce396d229 --- /dev/null +++ b/core-java-modules/core-java-datetime/java-dates-computations/pom.xml @@ -0,0 +1,60 @@ + + 4.0.0 + java-dates-computations + ${project.parent.version} + java-dates-computations + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../../parent-java + + + + + joda-time + joda-time + ${joda-time.version} + + + + com.darwinsys + hirondelle-date4j + RELEASE + test + + + + + java-dates-computations + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + 2.10 + + 3.6.1 + 1.9 + 1.9 + + diff --git a/java-dates/src/test/java/com/baeldung/date/DateDiffUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/date/DateDiffUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/date/DateDiffUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/date/DateDiffUnitTest.java diff --git a/core-java-modules/core-java-datetime/pom.xml b/core-java-modules/core-java-datetime/pom.xml index cab5c9fe98..e61f804a32 100644 --- a/core-java-modules/core-java-datetime/pom.xml +++ b/core-java-modules/core-java-datetime/pom.xml @@ -16,6 +16,7 @@ + java-dates-computations java-dates-conversion java-dates-string diff --git a/java-dates/README.md b/java-dates/README.md index d56e16eafd..71290c7c0f 100644 --- a/java-dates/README.md +++ b/java-dates/README.md @@ -6,7 +6,6 @@ - [TemporalAdjuster in Java](http://www.baeldung.com/java-temporal-adjuster) - [Handling Daylight Savings Time in Java](http://www.baeldung.com/java-daylight-savings) - [Period and Duration in Java](http://www.baeldung.com/java-period-duration) -- [Difference Between Two Dates in Java](http://www.baeldung.com/java-date-difference) - [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api) - [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) - [Get the Current Date, Time and Timestamp in Java 8](http://www.baeldung.com/current-date-time-and-timestamp-in-java-8) diff --git a/java-dates/pom.xml b/java-dates/pom.xml index 761ebd71a6..8e6b708c2f 100644 --- a/java-dates/pom.xml +++ b/java-dates/pom.xml @@ -37,12 +37,6 @@ joda-time ${joda-time.version} - - com.darwinsys - hirondelle-date4j - RELEASE - test - diff --git a/pom.xml b/pom.xml index 927e1a25b4..137c174b47 100644 --- a/pom.xml +++ b/pom.xml @@ -469,7 +469,7 @@ java-collections-maps java-collections-maps-2 java-jdi - + java-lite From fa3cc1e953d87e6f000ebe9b8cdad52877875794 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 29 Sep 2019 11:15:25 +0200 Subject: [PATCH 021/304] #BAEL-16646 fix pom parent --- .../core-java-datetime/java-dates-conversion/pom.xml | 2 +- core-java-modules/core-java-datetime/java-dates-string/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml b/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml index 8f3d35f4f3..b56cadc340 100644 --- a/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml +++ b/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml @@ -10,7 +10,7 @@ com.baeldung parent-java 0.0.1-SNAPSHOT - ../../parent-java + ../../../parent-java diff --git a/core-java-modules/core-java-datetime/java-dates-string/pom.xml b/core-java-modules/core-java-datetime/java-dates-string/pom.xml index d599818924..714a65195a 100644 --- a/core-java-modules/core-java-datetime/java-dates-string/pom.xml +++ b/core-java-modules/core-java-datetime/java-dates-string/pom.xml @@ -10,7 +10,7 @@ com.baeldung parent-java 0.0.1-SNAPSHOT - ../../parent-java + ../../../parent-java From c70ac2cc73632117a9e657d32efc0500015cb4c3 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Mon, 30 Sep 2019 15:52:48 +0200 Subject: [PATCH 022/304] #BAEL-16646 move java-dates "computations" articles under new Core Java module. --- .../java-dates-computations/README.md | 10 ++++ .../java-dates-computations/pom.xml | 11 ++++ .../java/com/baeldung/date/AgeCalculator.java | 0 .../com/baeldung/date/DateWithoutTime.java | 0 .../com/baeldung/datetime/AddHoursToDate.java | 0 .../DateExtractYearMonthDayIntegerValues.java | 56 +++++++++---------- .../datetime/modify/DateIncrementer.java | 0 .../calendar/GregorianCalendarExample.java | 0 .../java/com/baeldung/java9/time/TimeApi.java | 0 .../date/DateWithoutTimeUnitTest.java | 0 .../datetime/AddHoursToDateUnitTest.java | 0 .../modify/DateIncrementerUnitTest.java | 0 .../DaylightSavingTimeExamplesUnitTest.java | 0 ...ghtSavingTimeJavaTimeExamplesUnitTest.java | 0 .../calendar/GregorianCalendarTester.java | 0 .../baeldung/java9/time/TimeApiUnitTest.java | 0 .../baeldung/jodatime/JodaTimeUnitTest.java | 0 .../baeldung/time/ElapsedTimeUnitTest.java | 0 java-dates/README.md | 10 ---- java-dates/pom.xml | 11 ---- pom.xml | 2 +- 21 files changed, 50 insertions(+), 50 deletions(-) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/date/AgeCalculator.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/date/DateWithoutTime.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/datetime/AddHoursToDate.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValues.java (95%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/datetime/modify/DateIncrementer.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/gregorian/calendar/GregorianCalendarExample.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/java9/time/TimeApi.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/date/DateWithoutTimeUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/datetime/AddHoursToDateUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/datetime/modify/DateIncrementerUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/dst/DaylightSavingTimeExamplesUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/dst/DaylightSavingTimeJavaTimeExamplesUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/gregorian/calendar/GregorianCalendarTester.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/java9/time/TimeApiUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/time/ElapsedTimeUnitTest.java (100%) diff --git a/core-java-modules/core-java-datetime/java-dates-computations/README.md b/core-java-modules/core-java-datetime/java-dates-computations/README.md index 73b927df98..019c34c7d3 100644 --- a/core-java-modules/core-java-datetime/java-dates-computations/README.md +++ b/core-java-modules/core-java-datetime/java-dates-computations/README.md @@ -4,3 +4,13 @@ This module contains articles about date and time computations in Java. ### Relevant Articles: - [Difference Between Two Dates in Java](http://www.baeldung.com/java-date-difference) +- [Get Date Without Time in Java](http://www.baeldung.com/java-date-without-time) +- [How to Get All Dates Between Two Dates?](http://www.baeldung.com/java-between-dates) +- [Extracting Year, Month and Day from Date in Java](http://www.baeldung.com/java-year-month-day) +- [Guide to java.util.GregorianCalendar](http://www.baeldung.com/java-gregorian-calendar) +- [Handling Daylight Savings Time in Java](http://www.baeldung.com/java-daylight-savings) +- [Calculate Age in Java](http://www.baeldung.com/java-get-age) +- [Increment Date in Java](http://www.baeldung.com/java-increment-date) +- [Add Hours To a Date In Java](http://www.baeldung.com/java-add-hours-date) +- [Introduction to Joda-Time](http://www.baeldung.com/joda-time) +- [Measure Elapsed Time in Java](http://www.baeldung.com/java-measure-elapsed-time) diff --git a/core-java-modules/core-java-datetime/java-dates-computations/pom.xml b/core-java-modules/core-java-datetime/java-dates-computations/pom.xml index 8ce396d229..46790bdce4 100644 --- a/core-java-modules/core-java-datetime/java-dates-computations/pom.xml +++ b/core-java-modules/core-java-datetime/java-dates-computations/pom.xml @@ -19,7 +19,18 @@ joda-time ${joda-time.version} + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.assertj + assertj-core + ${assertj.version} + test + com.darwinsys hirondelle-date4j diff --git a/java-dates/src/main/java/com/baeldung/date/AgeCalculator.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/date/AgeCalculator.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/date/AgeCalculator.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/date/AgeCalculator.java diff --git a/java-dates/src/main/java/com/baeldung/date/DateWithoutTime.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/date/DateWithoutTime.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/date/DateWithoutTime.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/date/DateWithoutTime.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/AddHoursToDate.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/AddHoursToDate.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/AddHoursToDate.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/AddHoursToDate.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValues.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValues.java similarity index 95% rename from java-dates/src/main/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValues.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValues.java index a6cef94377..8b6d9885af 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValues.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValues.java @@ -1,28 +1,28 @@ -package com.baeldung.datetime; - -import java.util.Calendar; -import java.util.Date; - -public class DateExtractYearMonthDayIntegerValues { - - int getYear(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - - return calendar.get(Calendar.YEAR); - } - - int getMonth(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - - return calendar.get(Calendar.MONTH); - } - - int getDay(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - - return calendar.get(Calendar.DAY_OF_MONTH); - } -} +package com.baeldung.datetime; + +import java.util.Calendar; +import java.util.Date; + +public class DateExtractYearMonthDayIntegerValues { + + int getYear(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + + return calendar.get(Calendar.YEAR); + } + + int getMonth(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + + return calendar.get(Calendar.MONTH); + } + + int getDay(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + + return calendar.get(Calendar.DAY_OF_MONTH); + } +} diff --git a/java-dates/src/main/java/com/baeldung/datetime/modify/DateIncrementer.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/modify/DateIncrementer.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/modify/DateIncrementer.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/modify/DateIncrementer.java diff --git a/java-dates/src/main/java/com/baeldung/gregorian/calendar/GregorianCalendarExample.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/gregorian/calendar/GregorianCalendarExample.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/gregorian/calendar/GregorianCalendarExample.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/gregorian/calendar/GregorianCalendarExample.java diff --git a/java-dates/src/main/java/com/baeldung/java9/time/TimeApi.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/java9/time/TimeApi.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/java9/time/TimeApi.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/java9/time/TimeApi.java diff --git a/java-dates/src/test/java/com/baeldung/date/DateWithoutTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/date/DateWithoutTimeUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/date/DateWithoutTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/date/DateWithoutTimeUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/AddHoursToDateUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/AddHoursToDateUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/AddHoursToDateUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/AddHoursToDateUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/modify/DateIncrementerUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/modify/DateIncrementerUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/modify/DateIncrementerUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/modify/DateIncrementerUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/dst/DaylightSavingTimeExamplesUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/dst/DaylightSavingTimeExamplesUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/dst/DaylightSavingTimeExamplesUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/dst/DaylightSavingTimeExamplesUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/dst/DaylightSavingTimeJavaTimeExamplesUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/dst/DaylightSavingTimeJavaTimeExamplesUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/dst/DaylightSavingTimeJavaTimeExamplesUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/dst/DaylightSavingTimeJavaTimeExamplesUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/gregorian/calendar/GregorianCalendarTester.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/gregorian/calendar/GregorianCalendarTester.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/gregorian/calendar/GregorianCalendarTester.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/gregorian/calendar/GregorianCalendarTester.java diff --git a/java-dates/src/test/java/com/baeldung/java9/time/TimeApiUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/java9/time/TimeApiUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/java9/time/TimeApiUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/java9/time/TimeApiUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/time/ElapsedTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/time/ElapsedTimeUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/time/ElapsedTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/time/ElapsedTimeUnitTest.java diff --git a/java-dates/README.md b/java-dates/README.md index 71290c7c0f..c9ee971101 100644 --- a/java-dates/README.md +++ b/java-dates/README.md @@ -4,21 +4,11 @@ ### Relevant Articles: - [TemporalAdjuster in Java](http://www.baeldung.com/java-temporal-adjuster) -- [Handling Daylight Savings Time in Java](http://www.baeldung.com/java-daylight-savings) - [Period and Duration in Java](http://www.baeldung.com/java-period-duration) - [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api) - [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) - [Get the Current Date, Time and Timestamp in Java 8](http://www.baeldung.com/current-date-time-and-timestamp-in-java-8) -- [Get Date Without Time in Java](http://www.baeldung.com/java-date-without-time) -- [How to Get All Dates Between Two Dates?](http://www.baeldung.com/java-between-dates) -- [Extracting Year, Month and Day from Date in Java](http://www.baeldung.com/java-year-month-day) -- [Guide to java.util.GregorianCalendar](http://www.baeldung.com/java-gregorian-calendar) -- [Measure Elapsed Time in Java](http://www.baeldung.com/java-measure-elapsed-time) - [How to Get the Start and the End of a Day using Java](http://www.baeldung.com/java-day-start-end) -- [Calculate Age in Java](http://www.baeldung.com/java-get-age) -- [Increment Date in Java](http://www.baeldung.com/java-increment-date) -- [Add Hours To a Date In Java](http://www.baeldung.com/java-add-hours-date) - [ZoneOffset in Java](https://www.baeldung.com/java-zone-offset) - [Differences Between ZonedDateTime and OffsetDateTime](https://www.baeldung.com/java-zoneddatetime-offsetdatetime) -- [Introduction to Joda-Time](http://www.baeldung.com/joda-time) - [Comparing Dates in Java](https://www.baeldung.com/java-comparing-dates) diff --git a/java-dates/pom.xml b/java-dates/pom.xml index 8e6b708c2f..464a3bff12 100644 --- a/java-dates/pom.xml +++ b/java-dates/pom.xml @@ -15,23 +15,12 @@ - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - log4j log4j ${log4j.version} - - org.assertj - assertj-core - ${assertj.version} - test - joda-time joda-time diff --git a/pom.xml b/pom.xml index 137c174b47..bac4baa403 100644 --- a/pom.xml +++ b/pom.xml @@ -469,7 +469,7 @@ java-collections-maps java-collections-maps-2 java-jdi - + core-java-modules/core-java-datetime java-lite From 6ce78b1dde25a3e9a4e4be97e4d64189cf807a2b Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Mon, 30 Sep 2019 20:53:40 +0200 Subject: [PATCH 023/304] #BAEL-16646 Start splitting Java dates articles regarding Java 8. --- .../core-java-datetime/README.md | 2 +- .../java-dates-java8/README.md | 6 +++ .../java-dates-java8/pom.xml | 53 +++++++++++++++++++ .../baeldung/dateapi/ConversionExample.java | 0 .../dateapi/JavaUtilTimeUnitTest.java | 0 core-java-modules/core-java-datetime/pom.xml | 1 + java-dates/README.md | 1 - 7 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 core-java-modules/core-java-datetime/java-dates-java8/README.md create mode 100644 core-java-modules/core-java-datetime/java-dates-java8/pom.xml rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/dateapi/ConversionExample.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java (100%) diff --git a/core-java-modules/core-java-datetime/README.md b/core-java-modules/core-java-datetime/README.md index 51f52e239d..9077b0a10f 100644 --- a/core-java-modules/core-java-datetime/README.md +++ b/core-java-modules/core-java-datetime/README.md @@ -1,3 +1,3 @@ ## Java Date and Time -This module contains articles about date and time in Java. +This module contains articles about date and time in Java. Please refer to its submodules. diff --git a/core-java-modules/core-java-datetime/java-dates-java8/README.md b/core-java-modules/core-java-datetime/java-dates-java8/README.md new file mode 100644 index 0000000000..1e36c546df --- /dev/null +++ b/core-java-modules/core-java-datetime/java-dates-java8/README.md @@ -0,0 +1,6 @@ +## Java 8+ Date and Time API + +This module contains articles about the Date and Time API introduced with Java 8. + +### Relevant Articles: +- [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api) diff --git a/core-java-modules/core-java-datetime/java-dates-java8/pom.xml b/core-java-modules/core-java-datetime/java-dates-java8/pom.xml new file mode 100644 index 0000000000..d5bbcb6e4d --- /dev/null +++ b/core-java-modules/core-java-datetime/java-dates-java8/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + java-dates-java8 + ${project.parent.version} + java-dates-java8 + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../../parent-java + + + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + java-dates-java8 + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + 1.9 + 1.9 + + 3.6.1 + + diff --git a/java-dates/src/test/java/com/baeldung/dateapi/ConversionExample.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/ConversionExample.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/dateapi/ConversionExample.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/ConversionExample.java diff --git a/java-dates/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java diff --git a/core-java-modules/core-java-datetime/pom.xml b/core-java-modules/core-java-datetime/pom.xml index e61f804a32..080289e751 100644 --- a/core-java-modules/core-java-datetime/pom.xml +++ b/core-java-modules/core-java-datetime/pom.xml @@ -18,6 +18,7 @@ java-dates-computations java-dates-conversion + java-dates-java8 java-dates-string diff --git a/java-dates/README.md b/java-dates/README.md index c9ee971101..f16ea6d411 100644 --- a/java-dates/README.md +++ b/java-dates/README.md @@ -5,7 +5,6 @@ ### Relevant Articles: - [TemporalAdjuster in Java](http://www.baeldung.com/java-temporal-adjuster) - [Period and Duration in Java](http://www.baeldung.com/java-period-duration) -- [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api) - [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) - [Get the Current Date, Time and Timestamp in Java 8](http://www.baeldung.com/current-date-time-and-timestamp-in-java-8) - [How to Get the Start and the End of a Day using Java](http://www.baeldung.com/java-day-start-end) From 80638ba2cac21c2165c29ef29c3d28442f4eb348 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Wed, 2 Oct 2019 16:59:08 +0200 Subject: [PATCH 024/304] #BAEL-16646 Split Java dates articles regarding Java 8. Also moved [Set the Time Zone of a Date in Java](https://www.baeldung.com/java-set-date-time-zone) from core-java-8 to the new java-dates-java8 module (the code was already in java-dates) and moved some missing files for the article Extracting... to java-dates-computations. java-dates now contains only two classes, which are relevant to the previous PR which will be shortly updated. One seems related to java-dates-string but it's unclear which article it belongs to and needs to be investigated. --- core-java-modules/core-java-8/README.md | 1 - ...lDateExtractYearMonthDayIntegerValues.java | 36 ++--- ...eTimeExtractYearMonthDayIntegerValues.java | 36 ++--- ...eTimeExtractYearMonthDayIntegerValues.java | 36 ++--- ...eTimeExtractYearMonthDayIntegerValues.java | 36 ++--- ...ractYearMonthDayIntegerValuesUnitTest.java | 90 +++++------ ...ractYearMonthDayIntegerValuesUnitTest.java | 72 ++++----- ...ractYearMonthDayIntegerValuesUnitTest.java | 72 ++++----- ...ractYearMonthDayIntegerValuesUnitTest.java | 72 ++++----- ...ractYearMonthDayIntegerValuesUnitTest.java | 72 ++++----- .../java-dates-java8/README.md | 9 ++ .../java-dates-java8/pom.xml | 17 +++ .../comparison/DateTimeComparisonUtils.java | 0 .../comparison/LegacyDateComparisonUtils.java | 0 .../com/baeldung/datetime/UseDuration.java | 0 .../com/baeldung/datetime/UseLocalDate.java | 0 .../baeldung/datetime/UseLocalDateTime.java | 0 .../com/baeldung/datetime/UseLocalTime.java | 0 .../java/com/baeldung/datetime/UsePeriod.java | 0 .../com/baeldung/datetime/UseToInstant.java | 0 .../baeldung/datetime/UseZonedDateTime.java | 0 .../CustomTemporalAdjuster.java | 0 .../DateTimeComparisonUtilsUnitTest.java | 0 ...DateTimeApiGeneralComparisonsUnitTest.java | 0 .../LegacyDateComparisonUtilsUnitTest.java | 0 .../dateapi/JavaDurationUnitTest.java | 0 .../baeldung/dateapi/JavaPeriodUnitTest.java | 0 .../datetime/UseLocalDateTimeUnitTest.java | 0 .../datetime/UseLocalDateUnitTest.java | 0 .../datetime/UseLocalTimeUnitTest.java | 0 .../baeldung/datetime/UsePeriodUnitTest.java | 0 .../datetime/UseTimeZoneUnitTest.java | 144 +++++++++--------- .../datetime/UseZonedDateTimeUnitTest.java | 0 .../CustomTemporalAdjusterUnitTest.java | 0 .../TemporalAdjustersUnitTest.java | 0 java-dates/.gitignore | 26 ---- java-dates/README.md | 13 -- java-dates/pom.xml | 60 -------- .../main/java/com/baeldung/datetime/README.md | 1 - java-dates/src/main/resources/logback.xml | 13 -- java-dates/src/test/resources/.gitignore | 13 -- 41 files changed, 359 insertions(+), 460 deletions(-) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValues.java (95%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValues.java (95%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValues.java (96%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/main/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValues.java (95%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValuesUnitTest.java (96%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValuesUnitTest.java (96%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest.java (96%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest.java (96%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest.java (96%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/datetime/UseDuration.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/datetime/UseLocalDate.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/datetime/UseLocalDateTime.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/datetime/UseLocalTime.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/datetime/UsePeriod.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/datetime/UseToInstant.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/datetime/UseZonedDateTime.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/datetime/UsePeriodUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/datetime/UseTimeZoneUnitTest.java (97%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterUnitTest.java (100%) rename {java-dates => core-java-modules/core-java-datetime/java-dates-java8}/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersUnitTest.java (100%) delete mode 100644 java-dates/.gitignore delete mode 100644 java-dates/README.md delete mode 100644 java-dates/pom.xml delete mode 100644 java-dates/src/main/java/com/baeldung/datetime/README.md delete mode 100644 java-dates/src/main/resources/logback.xml delete mode 100644 java-dates/src/test/resources/.gitignore diff --git a/core-java-modules/core-java-8/README.md b/core-java-modules/core-java-8/README.md index aee7121fb3..f364b5ed94 100644 --- a/core-java-modules/core-java-8/README.md +++ b/core-java-modules/core-java-8/README.md @@ -23,7 +23,6 @@ - [Java 8 Unsigned Arithmetic Support](http://www.baeldung.com/java-unsigned-arithmetic) - [Generalized Target-Type Inference in Java](http://www.baeldung.com/java-generalized-target-type-inference) - [Overriding System Time for Testing in Java](http://www.baeldung.com/java-override-system-time) -- [Set the Time Zone of a Date in Java](https://www.baeldung.com/java-set-date-time-zone) - [An Overview of Regular Expressions Performance in Java](https://www.baeldung.com/java-regex-performance) - [Java Primitives versus Objects](https://www.baeldung.com/java-primitives-vs-objects) - [How to Use if/else Logic in Java 8 Streams](https://www.baeldung.com/java-8-streams-if-else-logic) diff --git a/java-dates/src/main/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValues.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValues.java similarity index 95% rename from java-dates/src/main/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValues.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValues.java index b40e10f6ad..6daa86130d 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValues.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValues.java @@ -1,18 +1,18 @@ -package com.baeldung.datetime; - -import java.time.LocalDate; - -public class LocalDateExtractYearMonthDayIntegerValues { - - int getYear(LocalDate localDate) { - return localDate.getYear(); - } - - int getMonth(LocalDate localDate) { - return localDate.getMonthValue(); - } - - int getDay(LocalDate localDate) { - return localDate.getDayOfMonth(); - } -} +package com.baeldung.datetime; + +import java.time.LocalDate; + +public class LocalDateExtractYearMonthDayIntegerValues { + + int getYear(LocalDate localDate) { + return localDate.getYear(); + } + + int getMonth(LocalDate localDate) { + return localDate.getMonthValue(); + } + + int getDay(LocalDate localDate) { + return localDate.getDayOfMonth(); + } +} diff --git a/java-dates/src/main/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValues.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValues.java similarity index 95% rename from java-dates/src/main/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValues.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValues.java index 404a62d2f4..bb4415fbc7 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValues.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValues.java @@ -1,18 +1,18 @@ -package com.baeldung.datetime; - -import java.time.LocalDateTime; - -public class LocalDateTimeExtractYearMonthDayIntegerValues { - - int getYear(LocalDateTime localDateTime) { - return localDateTime.getYear(); - } - - int getMonth(LocalDateTime localDateTime) { - return localDateTime.getMonthValue(); - } - - int getDay(LocalDateTime localDateTime) { - return localDateTime.getDayOfMonth(); - } -} +package com.baeldung.datetime; + +import java.time.LocalDateTime; + +public class LocalDateTimeExtractYearMonthDayIntegerValues { + + int getYear(LocalDateTime localDateTime) { + return localDateTime.getYear(); + } + + int getMonth(LocalDateTime localDateTime) { + return localDateTime.getMonthValue(); + } + + int getDay(LocalDateTime localDateTime) { + return localDateTime.getDayOfMonth(); + } +} diff --git a/java-dates/src/main/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValues.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValues.java similarity index 96% rename from java-dates/src/main/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValues.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValues.java index e686b05493..398c03102c 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValues.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValues.java @@ -1,18 +1,18 @@ -package com.baeldung.datetime; - -import java.time.OffsetDateTime; - -public class OffsetDateTimeExtractYearMonthDayIntegerValues { - - int getYear(OffsetDateTime offsetDateTime) { - return offsetDateTime.getYear(); - } - - int getMonth(OffsetDateTime offsetDateTime) { - return offsetDateTime.getMonthValue(); - } - - int getDay(OffsetDateTime offsetDateTime) { - return offsetDateTime.getDayOfMonth(); - } -} +package com.baeldung.datetime; + +import java.time.OffsetDateTime; + +public class OffsetDateTimeExtractYearMonthDayIntegerValues { + + int getYear(OffsetDateTime offsetDateTime) { + return offsetDateTime.getYear(); + } + + int getMonth(OffsetDateTime offsetDateTime) { + return offsetDateTime.getMonthValue(); + } + + int getDay(OffsetDateTime offsetDateTime) { + return offsetDateTime.getDayOfMonth(); + } +} diff --git a/java-dates/src/main/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValues.java b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValues.java similarity index 95% rename from java-dates/src/main/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValues.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValues.java index 3e790b2b3f..86bce90f75 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValues.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/main/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValues.java @@ -1,18 +1,18 @@ -package com.baeldung.datetime; - -import java.time.ZonedDateTime; - -public class ZonedDateTimeExtractYearMonthDayIntegerValues { - - int getYear(ZonedDateTime zonedDateTime) { - return zonedDateTime.getYear(); - } - - int getMonth(ZonedDateTime zonedDateTime) { - return zonedDateTime.getMonthValue(); - } - - int getDay(ZonedDateTime zonedDateTime) { - return zonedDateTime.getDayOfMonth(); - } -} +package com.baeldung.datetime; + +import java.time.ZonedDateTime; + +public class ZonedDateTimeExtractYearMonthDayIntegerValues { + + int getYear(ZonedDateTime zonedDateTime) { + return zonedDateTime.getYear(); + } + + int getMonth(ZonedDateTime zonedDateTime) { + return zonedDateTime.getMonthValue(); + } + + int getDay(ZonedDateTime zonedDateTime) { + return zonedDateTime.getDayOfMonth(); + } +} diff --git a/java-dates/src/test/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValuesUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValuesUnitTest.java similarity index 96% rename from java-dates/src/test/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValuesUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValuesUnitTest.java index 3b1fcfa6c5..5914b5a727 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValuesUnitTest.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/DateExtractYearMonthDayIntegerValuesUnitTest.java @@ -1,45 +1,45 @@ -package com.baeldung.datetime; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import org.junit.Before; -import org.junit.Test; - -public class DateExtractYearMonthDayIntegerValuesUnitTest { - - DateExtractYearMonthDayIntegerValues extractYearMonthDateIntegerValues = new DateExtractYearMonthDayIntegerValues(); - - Date date; - - @Before - public void setup() throws ParseException - { - date=new SimpleDateFormat("dd-MM-yyyy").parse("01-03-2018"); - } - - @Test - public void whenGetYear_thenCorrectYear() - { - int actualYear=extractYearMonthDateIntegerValues.getYear(date); - assertThat(actualYear,is(2018)); - } - - @Test - public void whenGetMonth_thenCorrectMonth() - { - int actualMonth=extractYearMonthDateIntegerValues.getMonth(date); - assertThat(actualMonth,is(02)); - } - - @Test - public void whenGetDay_thenCorrectDay() - { - int actualDayOfMonth=extractYearMonthDateIntegerValues.getDay(date); - assertThat(actualDayOfMonth,is(01)); - } -} +package com.baeldung.datetime; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; + +public class DateExtractYearMonthDayIntegerValuesUnitTest { + + DateExtractYearMonthDayIntegerValues extractYearMonthDateIntegerValues = new DateExtractYearMonthDayIntegerValues(); + + Date date; + + @Before + public void setup() throws ParseException + { + date=new SimpleDateFormat("dd-MM-yyyy").parse("01-03-2018"); + } + + @Test + public void whenGetYear_thenCorrectYear() + { + int actualYear=extractYearMonthDateIntegerValues.getYear(date); + assertThat(actualYear,is(2018)); + } + + @Test + public void whenGetMonth_thenCorrectMonth() + { + int actualMonth=extractYearMonthDateIntegerValues.getMonth(date); + assertThat(actualMonth,is(02)); + } + + @Test + public void whenGetDay_thenCorrectDay() + { + int actualDayOfMonth=extractYearMonthDateIntegerValues.getDay(date); + assertThat(actualDayOfMonth,is(01)); + } +} diff --git a/java-dates/src/test/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValuesUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValuesUnitTest.java similarity index 96% rename from java-dates/src/test/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValuesUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValuesUnitTest.java index 05de6ed0b9..641d45a536 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValuesUnitTest.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/LocalDateExtractYearMonthDayIntegerValuesUnitTest.java @@ -1,36 +1,36 @@ -package com.baeldung.datetime; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -import java.time.LocalDate; - -import org.junit.Test; - -public class LocalDateExtractYearMonthDayIntegerValuesUnitTest { - - LocalDateExtractYearMonthDayIntegerValues localDateExtractYearMonthDayIntegerValues=new LocalDateExtractYearMonthDayIntegerValues(); - - LocalDate localDate=LocalDate.parse("2007-12-03"); - - @Test - public void whenGetYear_thenCorrectYear() - { - int actualYear=localDateExtractYearMonthDayIntegerValues.getYear(localDate); - assertThat(actualYear,is(2007)); - } - - @Test - public void whenGetMonth_thenCorrectMonth() - { - int actualMonth=localDateExtractYearMonthDayIntegerValues.getMonth(localDate); - assertThat(actualMonth,is(12)); - } - - @Test - public void whenGetDay_thenCorrectDay() - { - int actualDayOfMonth=localDateExtractYearMonthDayIntegerValues.getDay(localDate); - assertThat(actualDayOfMonth,is(03)); - } -} +package com.baeldung.datetime; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import java.time.LocalDate; + +import org.junit.Test; + +public class LocalDateExtractYearMonthDayIntegerValuesUnitTest { + + LocalDateExtractYearMonthDayIntegerValues localDateExtractYearMonthDayIntegerValues=new LocalDateExtractYearMonthDayIntegerValues(); + + LocalDate localDate=LocalDate.parse("2007-12-03"); + + @Test + public void whenGetYear_thenCorrectYear() + { + int actualYear=localDateExtractYearMonthDayIntegerValues.getYear(localDate); + assertThat(actualYear,is(2007)); + } + + @Test + public void whenGetMonth_thenCorrectMonth() + { + int actualMonth=localDateExtractYearMonthDayIntegerValues.getMonth(localDate); + assertThat(actualMonth,is(12)); + } + + @Test + public void whenGetDay_thenCorrectDay() + { + int actualDayOfMonth=localDateExtractYearMonthDayIntegerValues.getDay(localDate); + assertThat(actualDayOfMonth,is(03)); + } +} diff --git a/java-dates/src/test/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest.java similarity index 96% rename from java-dates/src/test/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest.java index 70544ea970..295a4018c2 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest.java @@ -1,36 +1,36 @@ -package com.baeldung.datetime; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -import java.time.LocalDateTime; - -import org.junit.Test; - -public class LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest { - - LocalDateTimeExtractYearMonthDayIntegerValues localDateTimeExtractYearMonthDayIntegerValues = new LocalDateTimeExtractYearMonthDayIntegerValues(); - - LocalDateTime localDateTime=LocalDateTime.parse("2007-12-03T10:15:30"); - - @Test - public void whenGetYear_thenCorrectYear() - { - int actualYear=localDateTimeExtractYearMonthDayIntegerValues.getYear(localDateTime); - assertThat(actualYear,is(2007)); - } - - @Test - public void whenGetMonth_thenCorrectMonth() - { - int actualMonth=localDateTimeExtractYearMonthDayIntegerValues.getMonth(localDateTime); - assertThat(actualMonth,is(12)); - } - - @Test - public void whenGetDay_thenCorrectDay() - { - int actualDayOfMonth=localDateTimeExtractYearMonthDayIntegerValues.getDay(localDateTime); - assertThat(actualDayOfMonth,is(03)); - } -} +package com.baeldung.datetime; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import java.time.LocalDateTime; + +import org.junit.Test; + +public class LocalDateTimeExtractYearMonthDayIntegerValuesUnitTest { + + LocalDateTimeExtractYearMonthDayIntegerValues localDateTimeExtractYearMonthDayIntegerValues = new LocalDateTimeExtractYearMonthDayIntegerValues(); + + LocalDateTime localDateTime=LocalDateTime.parse("2007-12-03T10:15:30"); + + @Test + public void whenGetYear_thenCorrectYear() + { + int actualYear=localDateTimeExtractYearMonthDayIntegerValues.getYear(localDateTime); + assertThat(actualYear,is(2007)); + } + + @Test + public void whenGetMonth_thenCorrectMonth() + { + int actualMonth=localDateTimeExtractYearMonthDayIntegerValues.getMonth(localDateTime); + assertThat(actualMonth,is(12)); + } + + @Test + public void whenGetDay_thenCorrectDay() + { + int actualDayOfMonth=localDateTimeExtractYearMonthDayIntegerValues.getDay(localDateTime); + assertThat(actualDayOfMonth,is(03)); + } +} diff --git a/java-dates/src/test/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest.java similarity index 96% rename from java-dates/src/test/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest.java index efb01c49a5..3e1044e4be 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest.java @@ -1,36 +1,36 @@ -package com.baeldung.datetime; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -import java.time.OffsetDateTime; - -import org.junit.Test; - -public class OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest { - - OffsetDateTimeExtractYearMonthDayIntegerValues offsetDateTimeExtractYearMonthDayIntegerValues = new OffsetDateTimeExtractYearMonthDayIntegerValues(); - - OffsetDateTime offsetDateTime=OffsetDateTime.parse("2007-12-03T10:15:30+01:00"); - - @Test - public void whenGetYear_thenCorrectYear() - { - int actualYear=offsetDateTimeExtractYearMonthDayIntegerValues.getYear(offsetDateTime); - assertThat(actualYear,is(2007)); - } - - @Test - public void whenGetMonth_thenCorrectMonth() - { - int actualMonth=offsetDateTimeExtractYearMonthDayIntegerValues.getMonth(offsetDateTime); - assertThat(actualMonth,is(12)); - } - - @Test - public void whenGetDay_thenCorrectDay() - { - int actualDayOfMonth=offsetDateTimeExtractYearMonthDayIntegerValues.getDay(offsetDateTime); - assertThat(actualDayOfMonth,is(03)); - } -} +package com.baeldung.datetime; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import java.time.OffsetDateTime; + +import org.junit.Test; + +public class OffsetDateTimeExtractYearMonthDayIntegerValuesUnitTest { + + OffsetDateTimeExtractYearMonthDayIntegerValues offsetDateTimeExtractYearMonthDayIntegerValues = new OffsetDateTimeExtractYearMonthDayIntegerValues(); + + OffsetDateTime offsetDateTime=OffsetDateTime.parse("2007-12-03T10:15:30+01:00"); + + @Test + public void whenGetYear_thenCorrectYear() + { + int actualYear=offsetDateTimeExtractYearMonthDayIntegerValues.getYear(offsetDateTime); + assertThat(actualYear,is(2007)); + } + + @Test + public void whenGetMonth_thenCorrectMonth() + { + int actualMonth=offsetDateTimeExtractYearMonthDayIntegerValues.getMonth(offsetDateTime); + assertThat(actualMonth,is(12)); + } + + @Test + public void whenGetDay_thenCorrectDay() + { + int actualDayOfMonth=offsetDateTimeExtractYearMonthDayIntegerValues.getDay(offsetDateTime); + assertThat(actualDayOfMonth,is(03)); + } +} diff --git a/java-dates/src/test/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest.java similarity index 96% rename from java-dates/src/test/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest.java index a9ed3d2b74..2f2c0a99be 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest.java +++ b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/datetime/ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest.java @@ -1,36 +1,36 @@ -package com.baeldung.datetime; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -import java.time.ZonedDateTime; - -import org.junit.Test; - -public class ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest { - - ZonedDateTimeExtractYearMonthDayIntegerValues zonedDateTimeExtractYearMonthDayIntegerValues = new ZonedDateTimeExtractYearMonthDayIntegerValues(); - - ZonedDateTime zonedDateTime=ZonedDateTime.parse("2007-12-03T10:15:30+01:00"); - - @Test - public void whenGetYear_thenCorrectYear() - { - int actualYear=zonedDateTimeExtractYearMonthDayIntegerValues.getYear(zonedDateTime); - assertThat(actualYear,is(2007)); - } - - @Test - public void whenGetMonth_thenCorrectMonth() - { - int actualMonth=zonedDateTimeExtractYearMonthDayIntegerValues.getMonth(zonedDateTime); - assertThat(actualMonth,is(12)); - } - - @Test - public void whenGetDay_thenCorrectDay() - { - int actualDayOfMonth=zonedDateTimeExtractYearMonthDayIntegerValues.getDay(zonedDateTime); - assertThat(actualDayOfMonth,is(03)); - } -} +package com.baeldung.datetime; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import java.time.ZonedDateTime; + +import org.junit.Test; + +public class ZonedDateTimeExtractYearMonthDayIntegerValuesUnitTest { + + ZonedDateTimeExtractYearMonthDayIntegerValues zonedDateTimeExtractYearMonthDayIntegerValues = new ZonedDateTimeExtractYearMonthDayIntegerValues(); + + ZonedDateTime zonedDateTime=ZonedDateTime.parse("2007-12-03T10:15:30+01:00"); + + @Test + public void whenGetYear_thenCorrectYear() + { + int actualYear=zonedDateTimeExtractYearMonthDayIntegerValues.getYear(zonedDateTime); + assertThat(actualYear,is(2007)); + } + + @Test + public void whenGetMonth_thenCorrectMonth() + { + int actualMonth=zonedDateTimeExtractYearMonthDayIntegerValues.getMonth(zonedDateTime); + assertThat(actualMonth,is(12)); + } + + @Test + public void whenGetDay_thenCorrectDay() + { + int actualDayOfMonth=zonedDateTimeExtractYearMonthDayIntegerValues.getDay(zonedDateTime); + assertThat(actualDayOfMonth,is(03)); + } +} diff --git a/core-java-modules/core-java-datetime/java-dates-java8/README.md b/core-java-modules/core-java-datetime/java-dates-java8/README.md index 1e36c546df..044f6f3fe3 100644 --- a/core-java-modules/core-java-datetime/java-dates-java8/README.md +++ b/core-java-modules/core-java-datetime/java-dates-java8/README.md @@ -3,4 +3,13 @@ This module contains articles about the Date and Time API introduced with Java 8. ### Relevant Articles: +- [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) - [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api) +- [Get the Current Date, Time and Timestamp in Java 8](http://www.baeldung.com/current-date-time-and-timestamp-in-java-8) +- [TemporalAdjuster in Java](http://www.baeldung.com/java-temporal-adjuster) +- [ZoneOffset in Java](https://www.baeldung.com/java-zone-offset) +- [Differences Between ZonedDateTime and OffsetDateTime](https://www.baeldung.com/java-zoneddatetime-offsetdatetime) +- [Period and Duration in Java](http://www.baeldung.com/java-period-duration) +- [How to Get the Start and the End of a Day using Java](http://www.baeldung.com/java-day-start-end) +- [Set the Time Zone of a Date in Java](https://www.baeldung.com/java-set-date-time-zone) +- [Comparing Dates in Java](https://www.baeldung.com/java-comparing-dates) diff --git a/core-java-modules/core-java-datetime/java-dates-java8/pom.xml b/core-java-modules/core-java-datetime/java-dates-java8/pom.xml index d5bbcb6e4d..cf30ebf413 100644 --- a/core-java-modules/core-java-datetime/java-dates-java8/pom.xml +++ b/core-java-modules/core-java-datetime/java-dates-java8/pom.xml @@ -14,12 +14,28 @@ + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + joda-time + joda-time + ${joda-time.version} + org.assertj assertj-core ${assertj.version} test + + log4j + log4j + ${log4j.version} + test + @@ -47,6 +63,7 @@ 1.9 1.9 + 2.10 3.6.1 diff --git a/java-dates/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java diff --git a/java-dates/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseDuration.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseDuration.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/UseDuration.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseDuration.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseLocalDate.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseLocalDate.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/UseLocalDate.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseLocalDate.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseLocalDateTime.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/UseLocalDateTime.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseLocalTime.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseLocalTime.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/UseLocalTime.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseLocalTime.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UsePeriod.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UsePeriod.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/UsePeriod.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UsePeriod.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseToInstant.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseToInstant.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/UseToInstant.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseToInstant.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseZonedDateTime.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/datetime/UseZonedDateTime.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java diff --git a/java-dates/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java b/core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java similarity index 100% rename from java-dates/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java diff --git a/java-dates/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/UsePeriodUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UsePeriodUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/UsePeriodUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UsePeriodUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseTimeZoneUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseTimeZoneUnitTest.java similarity index 97% rename from java-dates/src/test/java/com/baeldung/datetime/UseTimeZoneUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseTimeZoneUnitTest.java index 4423ac6ce0..7e403ddcab 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/UseTimeZoneUnitTest.java +++ b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseTimeZoneUnitTest.java @@ -1,72 +1,72 @@ -package com.baeldung.datetime; - -import java.text.SimpleDateFormat; -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Calendar; -import java.util.Date; -import java.util.TimeZone; - -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.junit.Assert; -import org.junit.Test; - -public class UseTimeZoneUnitTest { - - /* https://en.wikipedia.org/wiki/List_of_tz_database_time_zones */ - - String timeZone = "Asia/Singapore"; - - private static final String PATTERN = "E yyyy-MM-dd HH:mm:ss a"; - - @Test - public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJava7_ThenTimeZoneIsSetSuccessfully() { - Date nowUtc = new Date(); - TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone); - - Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore); - nowAsiaSingapore.setTime(nowUtc); - - SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTERN); - simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone)); - - System.out.println(String.format("Java7: Time now in '%s' is '%s'", nowAsiaSingapore.getTimeZone() - .getID(), simpleDateFormat.format(nowAsiaSingapore.getTime()))); - - Assert.assertEquals(nowUtc.toInstant().getEpochSecond(), nowAsiaSingapore.toInstant().getEpochSecond()); - Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getTimeZone()); - - } - - @Test - public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJava8_ThenTimeZoneIsSetSuccessfully() { - Instant nowUtc = Instant.now(); - ZoneId asiaSingapore = ZoneId.of(timeZone); - - ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore); - - System.out.println(String.format("Java8: Time now in '%s' is '%s'", nowAsiaSingapore.getZone(), - nowAsiaSingapore.format(DateTimeFormatter.ofPattern(PATTERN)))); - - Assert.assertEquals(nowUtc.getEpochSecond(), nowAsiaSingapore.toEpochSecond()); - Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getZone()); - } - - @Test - public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJodaTime_ThenTimeZoneIsSetSuccessfully() { - org.joda.time.Instant nowUtc = org.joda.time.Instant.now(); - DateTimeZone asiaSingapore = DateTimeZone.forID(timeZone); - - DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore); - - System.out.println(String.format("Joda-time: Time now in '%s' is '%s'", nowAsiaSingapore.getZone(), - nowAsiaSingapore.toString(PATTERN))); - - Assert.assertEquals(nowUtc.toInstant().getMillis(), nowAsiaSingapore.toInstant().getMillis()); - Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getZone()); - } - -} +package com.baeldung.datetime; + +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.junit.Assert; +import org.junit.Test; + +public class UseTimeZoneUnitTest { + + /* https://en.wikipedia.org/wiki/List_of_tz_database_time_zones */ + + String timeZone = "Asia/Singapore"; + + private static final String PATTERN = "E yyyy-MM-dd HH:mm:ss a"; + + @Test + public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJava7_ThenTimeZoneIsSetSuccessfully() { + Date nowUtc = new Date(); + TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone); + + Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore); + nowAsiaSingapore.setTime(nowUtc); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTERN); + simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone)); + + System.out.println(String.format("Java7: Time now in '%s' is '%s'", nowAsiaSingapore.getTimeZone() + .getID(), simpleDateFormat.format(nowAsiaSingapore.getTime()))); + + Assert.assertEquals(nowUtc.toInstant().getEpochSecond(), nowAsiaSingapore.toInstant().getEpochSecond()); + Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getTimeZone()); + + } + + @Test + public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJava8_ThenTimeZoneIsSetSuccessfully() { + Instant nowUtc = Instant.now(); + ZoneId asiaSingapore = ZoneId.of(timeZone); + + ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore); + + System.out.println(String.format("Java8: Time now in '%s' is '%s'", nowAsiaSingapore.getZone(), + nowAsiaSingapore.format(DateTimeFormatter.ofPattern(PATTERN)))); + + Assert.assertEquals(nowUtc.getEpochSecond(), nowAsiaSingapore.toEpochSecond()); + Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getZone()); + } + + @Test + public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJodaTime_ThenTimeZoneIsSetSuccessfully() { + org.joda.time.Instant nowUtc = org.joda.time.Instant.now(); + DateTimeZone asiaSingapore = DateTimeZone.forID(timeZone); + + DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore); + + System.out.println(String.format("Joda-time: Time now in '%s' is '%s'", nowAsiaSingapore.getZone(), + nowAsiaSingapore.toString(PATTERN))); + + Assert.assertEquals(nowUtc.toInstant().getMillis(), nowAsiaSingapore.toInstant().getMillis()); + Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getZone()); + } + +} diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterUnitTest.java diff --git a/java-dates/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersUnitTest.java b/core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-java8/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersUnitTest.java diff --git a/java-dates/.gitignore b/java-dates/.gitignore deleted file mode 100644 index 3de4cc647e..0000000000 --- a/java-dates/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -*.class - -0.* - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* -.resourceCache - -# Packaged files # -*.jar -*.war -*.ear - -# Files generated by integration tests -*.txt -backup-pom.xml -/bin/ -/temp - -#IntelliJ specific -.idea/ -*.iml \ No newline at end of file diff --git a/java-dates/README.md b/java-dates/README.md deleted file mode 100644 index f16ea6d411..0000000000 --- a/java-dates/README.md +++ /dev/null @@ -1,13 +0,0 @@ -========= - -## Java Dates Cookbooks and Examples - -### Relevant Articles: -- [TemporalAdjuster in Java](http://www.baeldung.com/java-temporal-adjuster) -- [Period and Duration in Java](http://www.baeldung.com/java-period-duration) -- [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) -- [Get the Current Date, Time and Timestamp in Java 8](http://www.baeldung.com/current-date-time-and-timestamp-in-java-8) -- [How to Get the Start and the End of a Day using Java](http://www.baeldung.com/java-day-start-end) -- [ZoneOffset in Java](https://www.baeldung.com/java-zone-offset) -- [Differences Between ZonedDateTime and OffsetDateTime](https://www.baeldung.com/java-zoneddatetime-offsetdatetime) -- [Comparing Dates in Java](https://www.baeldung.com/java-comparing-dates) diff --git a/java-dates/pom.xml b/java-dates/pom.xml deleted file mode 100644 index 464a3bff12..0000000000 --- a/java-dates/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - 4.0.0 - com.baeldung - java-dates - 0.1.0-SNAPSHOT - java-dates - jar - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - log4j - log4j - ${log4j.version} - - - - joda-time - joda-time - ${joda-time.version} - - - - - java-dates - - - src/main/resources - true - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source} - ${maven.compiler.target} - - - - - - - 2.10 - - 3.6.1 - 1.9 - 1.9 - - diff --git a/java-dates/src/main/java/com/baeldung/datetime/README.md b/java-dates/src/main/java/com/baeldung/datetime/README.md deleted file mode 100644 index 7d843af9ea..0000000000 --- a/java-dates/src/main/java/com/baeldung/datetime/README.md +++ /dev/null @@ -1 +0,0 @@ -### Relevant Articles: diff --git a/java-dates/src/main/resources/logback.xml b/java-dates/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/java-dates/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/java-dates/src/test/resources/.gitignore b/java-dates/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/java-dates/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file From d2b96ee409b0cc7ce2a72e362d64d015a05f3a24 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Wed, 2 Oct 2019 17:04:11 +0200 Subject: [PATCH 025/304] #BAEL-16646 Move article [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) from libraries to java-dates-string. The code was already in java-dates (but the article still points to libraries). --- core-java-modules/core-java-datetime/java-dates-string/README.md | 1 + .../src/test/java/com/baeldung/date/StringToDateUnitTest.java | 0 libraries/README.md | 1 - 3 files changed, 1 insertion(+), 1 deletion(-) rename {java-dates => core-java-modules/core-java-datetime/java-dates-string}/src/test/java/com/baeldung/date/StringToDateUnitTest.java (100%) diff --git a/core-java-modules/core-java-datetime/java-dates-string/README.md b/core-java-modules/core-java-datetime/java-dates-string/README.md index 76c3298bd5..cf00bdeb1f 100644 --- a/core-java-modules/core-java-datetime/java-dates-string/README.md +++ b/core-java-modules/core-java-datetime/java-dates-string/README.md @@ -10,3 +10,4 @@ This module contains articles about parsing and formatting Java date and time ob - [A Guide to SimpleDateFormat](https://www.baeldung.com/java-simple-date-format) - [Display All Time Zones With GMT And UTC in Java](http://www.baeldung.com/java-time-zones) - [Convert between String and Timestamp](https://www.baeldung.com/java-string-to-timestamp) +- [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) diff --git a/java-dates/src/test/java/com/baeldung/date/StringToDateUnitTest.java b/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/StringToDateUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/date/StringToDateUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/StringToDateUnitTest.java diff --git a/libraries/README.md b/libraries/README.md index ebf087ccd8..45713b6b45 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -31,7 +31,6 @@ - [Publish and Receive Messages with Nats Java Client](http://www.baeldung.com/nats-java-client) - [Java Concurrency Utility with JCTools](http://www.baeldung.com/java-concurrency-jc-tools) - [Introduction to JavaPoet](http://www.baeldung.com/java-poet) -- [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) - [Guide to Resilience4j](http://www.baeldung.com/resilience4j) - [Exactly Once Processing in Kafka](https://www.baeldung.com/kafka-exactly-once) - [Implementing a FTP-Client in Java](http://www.baeldung.com/java-ftp-client) From ab77ab88efff41423f9e4d539f9bc148baa74729 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Wed, 2 Oct 2019 17:07:25 +0200 Subject: [PATCH 026/304] #BAEL-16646 Move code for article Calculate age in Java from java-dates to java-dates-computations. The java-dates module is now empty. --- .../src/test/java/com/baeldung/date/AgeCalculatorUnitTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {java-dates => core-java-modules/core-java-datetime/java-dates-computations}/src/test/java/com/baeldung/date/AgeCalculatorUnitTest.java (100%) diff --git a/java-dates/src/test/java/com/baeldung/date/AgeCalculatorUnitTest.java b/core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/date/AgeCalculatorUnitTest.java similarity index 100% rename from java-dates/src/test/java/com/baeldung/date/AgeCalculatorUnitTest.java rename to core-java-modules/core-java-datetime/java-dates-computations/src/test/java/com/baeldung/date/AgeCalculatorUnitTest.java From 779ae2f7a3134f2cc7d26761e790bad295956408 Mon Sep 17 00:00:00 2001 From: maryarm Date: Fri, 4 Oct 2019 15:44:46 +0330 Subject: [PATCH 027/304] #BAEL-3228: Unit tests for Transaction Propagation and Isolation in Spring @Transactional --- .../FooTransactionalUnitTest.java | 250 ++++++++++++++++++ .../PersistenceTransactionalTestConfig.java | 148 +++++++++++ 2 files changed, 398 insertions(+) create mode 100644 persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/FooTransactionalUnitTest.java create mode 100644 persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/PersistenceTransactionalTestConfig.java diff --git a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/FooTransactionalUnitTest.java b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/FooTransactionalUnitTest.java new file mode 100644 index 0000000000..6f2a499bc5 --- /dev/null +++ b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/FooTransactionalUnitTest.java @@ -0,0 +1,250 @@ +package com.baeldung.persistence.service.transactional; + +import com.baeldung.persistence.model.Foo; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; +import org.springframework.transaction.IllegalTransactionStateException; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionTemplate; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { PersistenceTransactionalTestConfig.class }, loader = AnnotationConfigContextLoader.class) +@DirtiesContext +public class FooTransactionalUnitTest { + + static abstract class BasicFooDao { + @PersistenceContext private EntityManager entityManager; + + public Foo findOne(final long id) { + return entityManager.find(Foo.class, id); + } + + public Foo create(final Foo entity) { + entityManager.persist(entity); + return entity; + } + } + + @Repository + static class RequiredTransactionalFooDao extends BasicFooDao { + @Override + @Transactional(propagation = Propagation.REQUIRED) + public Foo create(Foo entity) { + return super.create(entity); + } + } + + @Repository + static class RequiresNewTransactionalFooDao extends BasicFooDao { + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public Foo create(Foo entity) { + return super.create(entity); + } + } + + @Repository + static class SupportTransactionalFooDao extends BasicFooDao { + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public Foo create(Foo entity) { + return super.create(entity); + } + } + + @Repository + static class MandatoryTransactionalFooDao extends BasicFooDao { + @Override + @Transactional(propagation = Propagation.MANDATORY) + public Foo create(Foo entity) { + return super.create(entity); + } + } + + @Repository + static class SupportTransactionalFooService { + @Transactional(propagation = Propagation.SUPPORTS) + public Foo identity(Foo entity) { + return entity; + } + } + + @Service + static class MandatoryTransactionalFooService { + @Transactional(propagation = Propagation.MANDATORY) + public Foo identity(Foo entity) { + return entity; + } + } + + @Service + static class NotSupportedTransactionalFooService { + @Transactional(propagation = Propagation.NOT_SUPPORTED) + public Foo identity(Foo entity) { + return entity; + } + } + + @Service + static class NeverTransactionalFooService { + @Transactional(propagation = Propagation.NEVER) + public Foo identity(Foo entity) { + return entity; + } + } + + @Autowired private TransactionTemplate transactionTemplate; + + @Autowired private RequiredTransactionalFooDao requiredTransactionalFooDao; + + @Autowired private RequiresNewTransactionalFooDao requiresNewTransactionalFooDao; + + @Autowired private SupportTransactionalFooDao supportTransactionalFooDao; + + @Autowired private MandatoryTransactionalFooDao mandatoryTransactionalFooDao; + + @Autowired private MandatoryTransactionalFooService mandatoryTransactionalFooService; + + @Autowired private NeverTransactionalFooService neverTransactionalFooService; + + @Autowired private NotSupportedTransactionalFooService notSupportedTransactionalFooService; + + @Autowired private SupportTransactionalFooService supportTransactionalFooService; + + @After + public void tearDown(){ + PersistenceTransactionalTestConfig.clearSpy(); + } + + @Test + public void givenRequiredWithNoActiveTransaction_whenCallCreate_thenExpect1NewAnd0Suspend() { + requiredTransactionalFooDao.create(new Foo("baeldung")); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(1, transactionSpy.getCreate()); + } + + + + @Test + public void givenRequiresNewWithNoActiveTransaction_whenCallCreate_thenExpect1NewAnd0Suspend() { + requiresNewTransactionalFooDao.create(new Foo("baeldung")); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(1, transactionSpy.getCreate()); + } + + @Test + public void givenSupportWithNoActiveTransaction_whenCallService_thenExpect0NewAnd0Suspend() { + supportTransactionalFooService.identity(new Foo("baeldung")); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(0, transactionSpy.getCreate()); + } + + @Test(expected = IllegalTransactionStateException.class) + public void givenMandatoryWithNoActiveTransaction_whenCallService_thenExpectIllegalTransactionStateExceptionWith0NewAnd0Suspend() { + mandatoryTransactionalFooService.identity(new Foo("baeldung")); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(0, transactionSpy.getCreate()); + } + + @Test + public void givenNotSupportWithNoActiveTransaction_whenCallService_thenExpect0NewAnd0Suspend() { + notSupportedTransactionalFooService.identity(new Foo("baeldung")); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(0, transactionSpy.getCreate()); + } + + @Test + public void givenNeverWithNoActiveTransaction_whenCallService_thenExpect0NewAnd0Suspend() { + neverTransactionalFooService.identity(new Foo("baeldung")); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(0, transactionSpy.getCreate()); + } + + @Test + public void givenRequiredWithActiveTransaction_whenCallCreate_thenExpect0NewAnd0Suspend() { + transactionTemplate.execute(status -> { + Foo foo = new Foo("baeldung"); + return requiredTransactionalFooDao.create(foo); + }); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(1, transactionSpy.getCreate()); + } + + @Test + public void givenRequiresNewWithActiveTransaction_whenCallCreate_thenExpect1NewAnd1Suspend() { + transactionTemplate.execute(status -> { + Foo foo = new Foo("baeldung"); + return requiresNewTransactionalFooDao.create(foo); + }); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(1, transactionSpy.getSuspend()); + Assert.assertEquals(2, transactionSpy.getCreate()); + } + + @Test + public void givenSupportWithActiveTransaction_whenCallCreate_thenExpect0NewAnd0Suspend() { + transactionTemplate.execute(status -> { + Foo foo = new Foo("baeldung"); + return supportTransactionalFooDao.create(foo); + }); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(1, transactionSpy.getCreate()); + } + + @Test + public void givenMandatoryWithActiveTransaction_whenCallCreate_thenExpect0NewAnd0Suspend() { + + transactionTemplate.execute(status -> { + Foo foo = new Foo("baeldung"); + return mandatoryTransactionalFooDao.create(foo); + }); + + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(1, transactionSpy.getCreate()); + } + + @Test + public void givenNotSupportWithActiveTransaction_whenCallCreate_thenExpect0NewAnd1Suspend() { + transactionTemplate.execute(status -> { + Foo foo = new Foo("baeldung"); + return notSupportedTransactionalFooService.identity(foo); + }); + + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(1, transactionSpy.getSuspend()); + Assert.assertEquals(1, transactionSpy.getCreate()); + } + + @Test(expected = IllegalTransactionStateException.class) + public void givenNeverWithActiveTransaction_whenCallCreate_thenExpectIllegalTransactionStateExceptionWith0NewAnd0Suspend() { + transactionTemplate.execute(status -> { + Foo foo = new Foo("baeldung"); + return neverTransactionalFooService.identity(foo); + }); + PersistenceTransactionalTestConfig.TransactionSynchronizationAdapterSpy transactionSpy = PersistenceTransactionalTestConfig.getSpy(); + Assert.assertEquals(0, transactionSpy.getSuspend()); + Assert.assertEquals(1, transactionSpy.getCreate()); + } + +} diff --git a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/PersistenceTransactionalTestConfig.java b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/PersistenceTransactionalTestConfig.java new file mode 100644 index 0000000000..fde1857ca2 --- /dev/null +++ b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/persistence/service/transactional/PersistenceTransactionalTestConfig.java @@ -0,0 +1,148 @@ +package com.baeldung.persistence.service.transactional; + +import com.google.common.base.Preconditions; +import java.util.Properties; +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.support.DefaultTransactionStatus; +import org.springframework.transaction.support.TransactionSynchronizationAdapter; +import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.transaction.support.TransactionTemplate; + +@Configuration +@EnableTransactionManagement +@PropertySource({ "classpath:persistence-h2.properties" }) +@ComponentScan({ "com.baeldung.persistence","com.baeldung.jpa.dao" }) +@EnableJpaRepositories(basePackages = "com.baeldung.jpa.dao") +public class PersistenceTransactionalTestConfig { + + public static class TransactionSynchronizationAdapterSpy extends TransactionSynchronizationAdapter { + private int create, suspend; + + public int getSuspend() { + return suspend; + } + + public int getCreate() { + return create; + } + + public void create() { + create++; + } + + @Override + public void suspend() { + suspend++; + super.suspend(); + } + } + + + public static class JpaTransactionManagerSpy extends JpaTransactionManager { + @Override + protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition) { + super.prepareSynchronization(status, definition); + if (status.isNewTransaction()) { + if ( adapterSpyThreadLocal.get() == null ){ + TransactionSynchronizationAdapterSpy spy = new TransactionSynchronizationAdapterSpy(); + TransactionSynchronizationManager.registerSynchronization(spy); + adapterSpyThreadLocal.set(spy); + } + adapterSpyThreadLocal.get().create(); + } + } + } + + private static ThreadLocal adapterSpyThreadLocal = new ThreadLocal<>(); + + @Autowired + private Environment env; + + public PersistenceTransactionalTestConfig() { + super(); + } + + public static TransactionSynchronizationAdapterSpy getSpy(){ + if ( adapterSpyThreadLocal.get() == null ) + return new TransactionSynchronizationAdapterSpy(); + return adapterSpyThreadLocal.get(); + } + + public static void clearSpy(){ + adapterSpyThreadLocal.set(null); + } + + // beans + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() { + final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "com.baeldung.persistence.model" }); + + final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public DataSource dataSource() { + final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user"))); + dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); + + return dataSource; + } + + + + @Bean + public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) { + final JpaTransactionManagerSpy transactionManager = new JpaTransactionManagerSpy(); + transactionManager.setEntityManagerFactory(emf); + return transactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + final Properties additionalProperties() { + final Properties hibernateProperties = new Properties(); + hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); + hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); + hibernateProperties.setProperty("hibernate.cache.use_second_level_cache", "false"); + return hibernateProperties; + } + + + @Bean + public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager){ + TransactionTemplate template = new TransactionTemplate(transactionManager); + template.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); + return template; + } + + +} \ No newline at end of file From 1b5d8a6b62e429e7c72db8b7fb4536fac5232b84 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 4 Oct 2019 21:47:42 +0200 Subject: [PATCH 028/304] #BAEL-16646 flatten java-datetime modules --- .../.gitignore | 0 .../README.md | 0 .../pom.xml | 0 .../DateToLocalDateConverter.java | 0 .../DateToLocalDateTimeConverter.java | 0 .../LocalDateTimeToDateConverter.java | 0 .../LocalDateToDateConverter.java | 0 .../convert/ConvertDateTimeUnitTest.java | 0 .../ConvertInstantToTimestampUnitTest.java | 0 .../DateToLocalDateConverterUnitTest.java | 0 .../DateToLocalDateTimeConverterUnitTest.java | 0 .../LocalDateTimeToDateConverterUnitTest.java | 0 .../LocalDateToDateConverterUnitTest.java | 0 ...XmlGregorianCalendarConverterUnitTest.java | 0 .../.gitignore | 0 .../README.md | 0 .../pom.xml | 0 .../date/validation/DateValidator.java | 0 .../DateValidatorUsingApacheValidator.java | 0 .../DateValidatorUsingDateFormat.java | 0 .../DateValidatorUsingDateTimeFormatter.java | 0 .../DateValidatorUsingLocalDate.java | 0 .../regexp/datepattern/DateMatcher.java | 0 .../datepattern/FormattedDateMatcher.java | 0 .../regexp/datepattern/RangedDateMatcher.java | 0 .../gregorian/February29thMatcher.java | 0 .../gregorian/FebruaryGeneralMatcher.java | 0 .../gregorian/GregorianDateMatcher.java | 0 .../gregorian/MonthsOf30DaysMatcher.java | 0 .../gregorian/MonthsOf31DaysMatcher.java | 0 .../optmization/OptimizedMatcher.java | 0 .../timezonedisplay/TimezoneDisplay.java | 0 .../timezonedisplay/TimezoneDisplayApp.java | 0 .../timezonedisplay/TimezoneDisplayJava7.java | 0 .../TimezoneDisplayJava7App.java | 0 .../zonedatetime/OffsetDateTimeExample.java | 0 .../zonedatetime/OffsetTimeExample.java | 0 .../zonedatetime/ZoneDateTimeExample.java | 0 .../baeldung/date/StringToDateUnitTest.java | 0 ...ValidatorUsingApacheValidatorUnitTest.java | 0 .../DateValidatorUsingDateFormatUnitTest.java | 0 ...lidatorUsingDateTimeFormatterUnitTest.java | 0 .../DateValidatorUsingLocalDateUnitTest.java | 0 .../datetime/DateTimeFormatterUnitTest.java | 0 .../FormattedDateMatcherUnitTest.java | 0 .../RangedDateMatcherUnitTest.java | 0 .../February29thMatcherUnitTest.java | 0 .../FebruaryGeneralMatcherUnitTest.java | 0 .../GregorianDateMatcherUnitTest.java | 0 .../MonthsOf30DaysMatcherUnitTest.java | 0 .../MonthsOf31DaysMatcherUnitTest.java | 0 .../testhelper/GregorianDateTestHelper.java | 0 .../SimpleDateFormatUnitTest.java | 0 .../StringToTimestampConverterUnitTest.java | 0 .../TimestampToStringConverterTest.java | 0 .../OffsetDateTimeExampleUnitTest.java | 0 .../OffsetTimeExampleUnitTest.java | 0 .../ZoneDateTimeExampleUnitTest.java | 0 .../zonedatetime/ZonedDateTimeUnitTest.java | 0 .../core-java-datetime/README.md | 3 --- core-java-modules/core-java-datetime/pom.xml | 23 ------------------- core-java-modules/pom.xml | 2 ++ 62 files changed, 2 insertions(+), 26 deletions(-) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/.gitignore (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/README.md (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/pom.xml (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-conversion => core-java-datetime-conversion}/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/.gitignore (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/README.md (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/pom.xml (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/date/validation/DateValidator.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/date/StringToDateUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java (100%) rename core-java-modules/{core-java-datetime/java-dates-string => core-java-datetime-string}/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java (100%) delete mode 100644 core-java-modules/core-java-datetime/README.md delete mode 100644 core-java-modules/core-java-datetime/pom.xml diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/.gitignore b/core-java-modules/core-java-datetime-conversion/.gitignore similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/.gitignore rename to core-java-modules/core-java-datetime-conversion/.gitignore diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/README.md b/core-java-modules/core-java-datetime-conversion/README.md similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/README.md rename to core-java-modules/core-java-datetime-conversion/README.md diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/pom.xml b/core-java-modules/core-java-datetime-conversion/pom.xml similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/pom.xml rename to core-java-modules/core-java-datetime-conversion/pom.xml diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java b/core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java rename to core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateConverter.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java b/core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java rename to core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverter.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java b/core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java rename to core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverter.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java b/core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java rename to core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/datetolocaldate/LocalDateToDateConverter.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java rename to core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/convert/ConvertDateTimeUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java rename to core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetime/ConvertInstantToTimestampUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java rename to core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateConverterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java rename to core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/DateToLocalDateTimeConverterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java rename to core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateTimeToDateConverterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java rename to core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/datetolocaldate/LocalDateToDateConverterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java rename to core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/xmlgregoriancalendar/XmlGregorianCalendarConverterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/.gitignore b/core-java-modules/core-java-datetime-string/.gitignore similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/.gitignore rename to core-java-modules/core-java-datetime-string/.gitignore diff --git a/core-java-modules/core-java-datetime/java-dates-string/README.md b/core-java-modules/core-java-datetime-string/README.md similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/README.md rename to core-java-modules/core-java-datetime-string/README.md diff --git a/core-java-modules/core-java-datetime/java-dates-string/pom.xml b/core-java-modules/core-java-datetime-string/pom.xml similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/pom.xml rename to core-java-modules/core-java-datetime-string/pom.xml diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidator.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidator.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidator.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingApacheValidator.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateFormat.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatter.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/date/validation/DateValidatorUsingLocalDate.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/DateMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/FormattedDateMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/RangedDateMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/regexp/datepattern/optmization/OptimizedMatcher.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/zonedatetime/OffsetDateTimeExample.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/zonedatetime/OffsetTimeExample.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java b/core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java rename to core-java-modules/core-java-datetime-string/src/main/java/com/baeldung/zonedatetime/ZoneDateTimeExample.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/StringToDateUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/StringToDateUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/StringToDateUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/StringToDateUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingApacheValidatorUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateFormatUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingDateTimeFormatterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/date/validation/DateValidatorUsingLocalDateUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/datetime/DateTimeFormatterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/FormattedDateMatcherUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/RangedDateMatcherUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/February29thMatcherUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/FebruaryGeneralMatcherUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/GregorianDateMatcherUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf30DaysMatcherUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/MonthsOf31DaysMatcherUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/regexp/datepattern/gregorian/testhelper/GregorianDateTestHelper.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/StringToTimestampConverterUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/OffsetDateTimeExampleUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/OffsetTimeExampleUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/ZoneDateTimeExampleUnitTest.java diff --git a/core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java similarity index 100% rename from core-java-modules/core-java-datetime/java-dates-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/zonedatetime/ZonedDateTimeUnitTest.java diff --git a/core-java-modules/core-java-datetime/README.md b/core-java-modules/core-java-datetime/README.md deleted file mode 100644 index ddb2d336b5..0000000000 --- a/core-java-modules/core-java-datetime/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Java Date and Time - -This module contains articles about date and time in Java. It's split in several submodules. diff --git a/core-java-modules/core-java-datetime/pom.xml b/core-java-modules/core-java-datetime/pom.xml deleted file mode 100644 index cab5c9fe98..0000000000 --- a/core-java-modules/core-java-datetime/pom.xml +++ /dev/null @@ -1,23 +0,0 @@ - - 4.0.0 - com.baeldung.exception.numberformat - core-java-datetime - 0.0.1-SNAPSHOT - pom - core-java-datetime - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../../parent-java - - - - java-dates-conversion - java-dates-string - - - diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 082ffbef53..7e646d4bc0 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -20,6 +20,8 @@ core-java-lang-operators core-java-networking-2 core-java-security-manager + core-java-datetime-conversion + core-java-datetime-string From 850b6bf2f879f927a0f18c70b08c18c2bc1847c9 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 4 Oct 2019 21:56:40 +0200 Subject: [PATCH 029/304] #BAEL-16646 flatten java-datetime modules --- core-java-modules/core-java-datetime-conversion/pom.xml | 8 ++++---- core-java-modules/core-java-datetime-string/pom.xml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/core-java-modules/core-java-datetime-conversion/pom.xml b/core-java-modules/core-java-datetime-conversion/pom.xml index b56cadc340..a93eca00af 100644 --- a/core-java-modules/core-java-datetime-conversion/pom.xml +++ b/core-java-modules/core-java-datetime-conversion/pom.xml @@ -1,16 +1,16 @@ 4.0.0 - java-dates-conversion + core-java-datetime-conversion ${project.parent.version} - java-dates-conversion + core-java-datetime-conversion jar com.baeldung parent-java 0.0.1-SNAPSHOT - ../../../parent-java + ../../parent-java @@ -39,7 +39,7 @@ - java-dates-conversion + core-java-datetime-conversion src/main/resources diff --git a/core-java-modules/core-java-datetime-string/pom.xml b/core-java-modules/core-java-datetime-string/pom.xml index 714a65195a..b4e7aff524 100644 --- a/core-java-modules/core-java-datetime-string/pom.xml +++ b/core-java-modules/core-java-datetime-string/pom.xml @@ -1,16 +1,16 @@ 4.0.0 - java-dates-string + core-java-datetime-string ${project.parent.version} - java-dates-string + core-java-datetime-string jar com.baeldung parent-java 0.0.1-SNAPSHOT - ../../../parent-java + ../../parent-java @@ -51,7 +51,7 @@ - java-dates-string + core-java-datetime-string src/main/resources From c3f60b7f1490d6b55bda03d909944621e2b04fb3 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 6 Oct 2019 08:34:37 +0200 Subject: [PATCH 030/304] #BAEL-16646 reindent parent pom.xml with spaces. Remove .gitignore files in datetime modules. --- .../core-java-datetime-conversion/.gitignore | 26 - .../core-java-datetime-string/.gitignore | 26 - pom.xml | 3001 +++++++++-------- 3 files changed, 1501 insertions(+), 1552 deletions(-) delete mode 100644 core-java-modules/core-java-datetime-conversion/.gitignore delete mode 100644 core-java-modules/core-java-datetime-string/.gitignore diff --git a/core-java-modules/core-java-datetime-conversion/.gitignore b/core-java-modules/core-java-datetime-conversion/.gitignore deleted file mode 100644 index 3de4cc647e..0000000000 --- a/core-java-modules/core-java-datetime-conversion/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -*.class - -0.* - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* -.resourceCache - -# Packaged files # -*.jar -*.war -*.ear - -# Files generated by integration tests -*.txt -backup-pom.xml -/bin/ -/temp - -#IntelliJ specific -.idea/ -*.iml \ No newline at end of file diff --git a/core-java-modules/core-java-datetime-string/.gitignore b/core-java-modules/core-java-datetime-string/.gitignore deleted file mode 100644 index 3de4cc647e..0000000000 --- a/core-java-modules/core-java-datetime-string/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -*.class - -0.* - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* -.resourceCache - -# Packaged files # -*.jar -*.war -*.ear - -# Files generated by integration tests -*.txt -backup-pom.xml -/bin/ -/temp - -#IntelliJ specific -.idea/ -*.iml \ No newline at end of file diff --git a/pom.xml b/pom.xml index cb3c7c06c4..adf55b762a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,415 +1,416 @@ - 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"> + 4.0.0 - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - parent-modules - pom + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + parent-modules + pom - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - ch.qos.logback - logback-core - ${logback.version} - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + ch.qos.logback + logback-core + ${logback.version} + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + - - - junit - junit - ${junit.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-params - ${junit-jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter.version} - test - - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-all - ${org.hamcrest.version} - test - - - org.mockito - mockito-core - ${mockito.version} - test - - - org.apache.maven.surefire - surefire-logger-api - ${maven-surefire-plugin.version} - - test - true - - + + + junit + junit + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-params + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-all + ${org.hamcrest.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + org.apache.maven.surefire + surefire-logger-api + ${maven-surefire-plugin.version} + + test + true + + - - - - org.codehaus.mojo - exec-maven-plugin - ${exec-maven-plugin.version} - - maven - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - **/*IntegrationTest.java - **/*IntTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - **/JdbcTest.java - **/*LiveTest.java - - - - - org.junit.platform - junit-platform-surefire-provider - ${junit-platform.version} - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - - - org.junit.vintage - junit-vintage-engine - ${junit-jupiter.version} - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - - - - org.apache.maven.plugins - maven-pmd-plugin - ${maven-pmd-plugin.version} - - - org.baeldung.pmd - custom-pmd - ${custom-pmd.version} - - - - 5 - false - true - true - true - true - UTF-8 - ${java.version} - - ${tutorialsproject.basedir}/baeldung-pmd-rules.xml - - - target/generated-sources - - - - - compile - - check - - - - - - org.commonjava.maven.plugins - directory-maven-plugin - ${directory-maven-plugin.version} - - - directories - - directory-of - - validate - - tutorialsproject.basedir - - com.baeldung - parent-modules - - - - - - - org.apache.maven.plugins - maven-install-plugin - ${maven-install-plugin.version} - - org.baeldung.pmd - custom-pmd - ${custom-pmd.version} - jar - ${tutorialsproject.basedir}/custom-pmd-${custom-pmd.version}.jar - true - - - - install-jar-lib - - install-file - - validate - - - - - maven-war-plugin - ${maven-war-plugin.version} - - + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + maven + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + **/*IntegrationTest.java + **/*IntTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + **/JdbcTest.java + **/*LiveTest.java + + + + + org.junit.platform + junit-platform-surefire-provider + ${junit-platform.version} + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + + + org.junit.vintage + junit-vintage-engine + ${junit-jupiter.version} + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-pmd-plugin + ${maven-pmd-plugin.version} + + + org.baeldung.pmd + custom-pmd + ${custom-pmd.version} + + + + 5 + false + true + true + true + true + UTF-8 + ${java.version} + + ${tutorialsproject.basedir}/baeldung-pmd-rules.xml + + + target/generated-sources + + + + + compile + + check + + + + + + org.commonjava.maven.plugins + directory-maven-plugin + ${directory-maven-plugin.version} + + + directories + + directory-of + + validate + + tutorialsproject.basedir + + com.baeldung + parent-modules + + + + + + + org.apache.maven.plugins + maven-install-plugin + ${maven-install-plugin.version} + + org.baeldung.pmd + custom-pmd + ${custom-pmd.version} + jar + ${tutorialsproject.basedir}/custom-pmd-${custom-pmd.version}.jar + true + + + + install-jar-lib + + install-file + + validate + + + + + maven-war-plugin + ${maven-war-plugin.version} + + - - - com.vackosar.gitflowincrementalbuilder - gitflow-incremental-builder - ${gitflow-incremental-builder.version} - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - - org.commonjava.maven.plugins - - - directory-maven-plugin - - - [0.3.1,) - - - directory-of - - - - - - - - - - org.apache.maven.plugins - - - maven-install-plugin - - - [2.5.1,) - - - install-file - - - - - - - - - - - - - + + + com.vackosar.gitflowincrementalbuilder + gitflow-incremental-builder + ${gitflow-incremental-builder.version} + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.commonjava.maven.plugins + + + directory-maven-plugin + + + [0.3.1,) + + + directory-of + + + + + + + + + + org.apache.maven.plugins + + + maven-install-plugin + + + [2.5.1,) + + + install-file + + + + + + + + + + + + + - + - - default-first - - + + default-first + + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - SpringContextTest - **/*UnitTest - - - **/*IntegrationTest.java - **/*IntTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - **/JdbcTest.java - **/*LiveTest.java - - - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + SpringContextTest + **/*UnitTest + + + **/*IntegrationTest.java + **/*IntTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + **/JdbcTest.java + **/*LiveTest.java + + + - - + + - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - akka-streams - algorithms-genetic - algorithms-miscellaneous-1 - algorithms-miscellaneous-2 - algorithms-miscellaneous-3 - algorithms-miscellaneous-4 - algorithms-miscellaneous-5 - algorithms-sorting - animal-sniffer-mvn-plugin - annotations - antlr - apache-avro - apache-bval - apache-curator - apache-cxf - apache-fop - apache-geode - apache-meecrowave - apache-olingo/olingo2 - apache-opennlp - apache-poi - apache-pulsar - apache-shiro - apache-solrj - apache-spark - apache-thrift - apache-tika - apache-velocity - apache-zookeeper - asciidoctor - asm - atomix - autovalue - aws - aws-lambda - axon - azure + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + akka-streams + algorithms-genetic + algorithms-miscellaneous-1 + algorithms-miscellaneous-2 + algorithms-miscellaneous-3 + algorithms-miscellaneous-4 + algorithms-miscellaneous-5 + algorithms-sorting + animal-sniffer-mvn-plugin + annotations + antlr + apache-avro + apache-bval + apache-curator + apache-cxf + apache-fop + apache-geode + apache-meecrowave + apache-olingo/olingo2 + apache-opennlp + apache-poi + apache-pulsar + apache-shiro + apache-solrj + apache-spark + apache-thrift + apache-tika + apache-velocity + apache-zookeeper + asciidoctor + asm + atomix + autovalue + aws + aws-lambda + axon + azure - bazel - blade - bootique + bazel + blade + bootique - cas - cdi - checker-plugin - cloud-foundry-uaa/cf-uaa-oauth2-client - cloud-foundry-uaa/cf-uaa-oauth2-resource-server - core-groovy - core-groovy-2 - core-groovy-collections - - - - core-java-modules/core-java-8 - core-java-modules/core-java-8-2 - core-java-modules/core-java-annotations - core-java-modules/core-java-streams - core-java-modules/core-java-function - core-java-modules/core-java-lang-math - core-java-modules/core-java-datetime - core-java-modules/core-java-text - core-java-modules/core-java-lambdas + cas + cdi + checker-plugin + cloud-foundry-uaa/cf-uaa-oauth2-client + cloud-foundry-uaa/cf-uaa-oauth2-resource-server + core-groovy + core-groovy-2 + core-groovy-collections + + + + core-java-modules/core-java-8 + core-java-modules/core-java-8-2 + core-java-modules/core-java-annotations + core-java-modules/core-java-streams + core-java-modules/core-java-function + core-java-modules/core-java-lang-math + core-java-modules/core-java-datetime-conversion + core-java-modules/core-java-datetime-string + core-java-modules/core-java-text + core-java-modules/core-java-lambdas core-java-modules/core-java-arrays core-java-modules/core-java-arrays-2 core-java-modules/core-java-collections - core-java-modules/core-java-collections-2 - core-java-modules/core-java-collections-3 + core-java-modules/core-java-collections-2 + core-java-modules/core-java-collections-3 core-java-modules/core-java-collections-list core-java-modules/core-java-collections-list-2 core-java-modules/core-java-collections-list-3 core-java-modules/core-java-collections-array-list core-java-modules/core-java-collections-set core-java-modules/core-java-concurrency-basic - core-java-modules/core-java-concurrency-basic-2 + core-java-modules/core-java-concurrency-basic-2 core-java-modules/core-java-concurrency-collections core-java-modules/core-java-io core-java-modules/core-java-io-files @@ -418,10 +419,10 @@ core-java-modules/core-java-lang-syntax core-java-modules/core-java-lang-syntax-2 core-java-modules/core-java-lang - core-java-modules/core-java-lang-2 + core-java-modules/core-java-lang-2 core-java-modules/core-java-lang-oop core-java-modules/core-java-lang-oop-2 - core-java-modules/core-java-lang-oop-3 + core-java-modules/core-java-lang-oop-3 core-java-modules core-java-modules/core-java-networking core-java-modules/core-java-perf @@ -456,9 +457,9 @@ grpc gson guava - guava-io + guava-io guava-collections - guava-collections-set + guava-collections-set guava-modules guice @@ -479,11 +480,11 @@ java-collections-maps java-collections-maps-2 java-jdi - - + + java-lite - java-math + java-math java-numbers java-numbers-2 java-rmi @@ -502,1178 +503,1178 @@ jaxb - jee-7-security - jee-kotlin - jersey - jgit - jgroups - jhipster-5 - jib - jjwt - jmeter - jmh - jni - jooby - jsf - json - json-path - jsoup - jta + jee-7-security + jee-kotlin + jersey + jgit + jgroups + jhipster-5 + jib + jjwt + jmeter + jmh + jni + jooby + jsf + json + json-path + jsoup + jta - - kotlin-libraries - kotlin-libraries-2 + + kotlin-libraries + kotlin-libraries-2 - - libraries - libraries-2 - libraries-data - libraries-data-2 - libraries-apache-commons - libraries-apache-commons-collections - libraries-apache-commons-io - libraries-primitive - libraries-testing - libraries-security - libraries-server - libraries-http - libraries-io - linkrest - logging-modules - lombok - lucene + + libraries + libraries-2 + libraries-data + libraries-data-2 + libraries-apache-commons + libraries-apache-commons-collections + libraries-apache-commons-io + libraries-primitive + libraries-testing + libraries-security + libraries-server + libraries-http + libraries-io + linkrest + logging-modules + lombok + lucene - mapstruct - - maven-all/maven - maven-all/maven-war-plugin - maven-all/profiles - maven-all/versions-maven-plugin - maven-archetype - - maven-polyglot/maven-polyglot-json-extension - - mesos-marathon - metrics - - microprofile + mapstruct + + maven-all/maven + maven-all/maven-war-plugin + maven-all/profiles + maven-all/versions-maven-plugin + maven-archetype + + maven-polyglot/maven-polyglot-json-extension + + mesos-marathon + metrics + + microprofile ml - msf4j - - mustache - mybatis - - - optaplanner - orika - osgi - - patterns - pdf - performance-tests - - protobuffer - - persistence-modules - quarkus - - rabbitmq - - ratpack - reactor-core - resteasy - restx - - rule-engines - rsocket - rxjava - rxjava-2 - software-security/sql-injection-samples - - tensorflow-java - spf4j - spring-boot-flowable - spring-boot-mvc-2 - spring-boot-performance - spring-boot-properties - - spring-security-kerberos - oauth2-framework-impl - - spring-boot-nashorn - java-blockchain - - - - - - - default-second - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - SpringContextTest - **/*UnitTest - - - **/*IntegrationTest.java - **/*IntTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - **/*JdbcTest.java - **/*LiveTest.java - - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - saas - spark-java - - spring-4 - - spring-5 - spring-5-webflux - spring-5-data-reactive - spring-5-mvc - spring-5-reactive - spring-5-reactive-2 - spring-5-reactive-client - spring-5-reactive-oauth - spring-5-reactive-security - spring-5-security - spring-5-security-oauth - spring-5-security-cognito - - spring-activiti - spring-akka - spring-all - spring-amqp - spring-aop - spring-apache-camel - spring-batch - spring-bom - - spring-boot - spring-boot-admin - spring-boot-angular - spring-boot-autoconfiguration - spring-boot-bootstrap - spring-boot-camel - - spring-boot-client - - spring-boot-crud - spring-boot-ctx-fluent - spring-boot-custom-starter - spring-boot-disable-console-logging - - spring-boot-jasypt - spring-boot-keycloak - spring-boot-kotlin - spring-boot-logging-log4j2 - spring-boot-management - spring-boot-mvc - spring-boot-mvc-birt - spring-boot-ops - spring-boot-ops-2 - spring-boot-rest - spring-boot-data - spring-boot-parent - spring-boot-property-exp - spring-boot-security - spring-boot-testing - spring-boot-vue - spring-boot-libraries - - - spring-cloud - spring-cloud-bus - - spring-cloud-data-flow - - spring-core - spring-core-2 - spring-cucumber - - spring-data-rest - spring-data-rest-querydsl - spring-dispatcher-servlet - spring-drools - spring-di - - spring-ehcache - spring-ejb - spring-exceptions - - spring-freemarker - - spring-groovy - - spring-integration - - spring-jenkins-pipeline - spring-jersey - spring-jinq - spring-jms - spring-jooq - - spring-kafka - spring-katharsis - - spring-ldap - - spring-mobile - spring-mockito - spring-mvc-forms-jsp - spring-mvc-forms-thymeleaf - spring-mvc-java - spring-mvc-kotlin - spring-mvc-simple - spring-mvc-simple-2 - spring-mvc-velocity - spring-mvc-webflow - spring-mvc-xml - - spring-protobuf - - - spring-quartz - - spring-reactive-kotlin - spring-reactor - spring-remoting - spring-rest - spring-rest-angular - spring-rest-compress - spring-rest-full - spring-rest-hal-browser - spring-rest-query-language - spring-rest-shell - spring-rest-simple - spring-resttemplate - spring-roo - spring-security-acl - spring-security-angular/server - spring-security-cache-control - - spring-security-core - spring-security-mvc-boot - spring-security-mvc-custom - spring-security-mvc-digest-auth - spring-security-mvc-jsonview - spring-security-mvc-ldap - spring-security-mvc-login - spring-security-mvc-persisted-remember-me - spring-security-mvc - spring-security-mvc-socket - spring-security-openid - - spring-security-rest - spring-security-rest-basic-auth - spring-security-rest-custom - spring-security-sso - spring-security-stormpath - spring-security-thymeleaf - spring-security-x509 - spring-session - spring-sleuth - spring-soap - spring-social-login - spring-spel - spring-state-machine - spring-static-resources - spring-swagger-codegen - - spring-thymeleaf - - spring-vault - spring-vertx - - spring-webflux-amqp - - spring-zuul - - static-analysis - stripe - structurizr - struts-2 - - testing-modules - - twilio - twitter4j - - undertow - - vertx - vertx-and-rxjava - video-tutorials - vraptor - - wicket - - xml - xstream - - tensorflow-java - spring-boot-flowable - spring-security-kerberos - - spring-boot-nashorn - java-blockchain - - - - - - - spring-context - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - **/*SpringContextIntegrationTest.java - - - - - - - - - spring-5 - spring-5-data-reactive - spring-5-reactive - spring-5-reactive-2 - spring-5-reactive-client - spring-5-reactive-security - spring-5-security - spring-5-security-oauth - spring-5-security-cognito - spring-activiti - spring-akka - spring-all - spring-aop - spring-apache-camel - spring-batch - spring-bom - spring-boot-admin - spring-boot-bootstrap - spring-boot-bootstrap - spring-boot-camel - spring-boot-client - spring-boot-custom-starter - spring-boot-di - greeter-spring-boot-autoconfigure - greeter-spring-boot-sample-app - persistence-modules/spring-boot-h2/spring-boot-h2-database - spring-boot-jasypt - spring-boot-keycloak - spring-boot-mvc - spring-boot-property-exp - spring-boot-vue - spring-cloud - spring-cloud/spring-cloud-archaius/basic-config - spring-cloud/spring-cloud-archaius/extra-configs - spring-cloud/spring-cloud-bootstrap/config - spring-cloud/spring-cloud-contract - spring-cloud/spring-cloud-gateway - spring-cloud/spring-cloud-kubernetes/demo-backend - spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server - spring-cloud/spring-cloud-ribbon-client - spring-cloud/spring-cloud-security - spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit - spring-cloud/spring-cloud-task/springcloudtasksink - spring-cloud/spring-cloud-zookeeper - spring-cloud/spring-cloud-bus/spring-cloud-config-server - spring-cloud/spring-cloud-data-flow/log-sink - spring-cloud/spring-cloud-data-flow/time-processor - spring-cloud/spring-cloud-data-flow/time-source - spring-cucumber - persistence-modules/spring-data-keyvalue - spring-data-rest - spring-dispatcher-servlet - spring-drools - spring-di - spring-ehcache - spring-freemarker - persistence-modules/spring-hibernate-3 - persistence-modules/spring-hibernate4 - persistence-modules/spring-mybatis - spring-integration - spring-jenkins-pipeline - spring-jersey - spring-jinq - spring-jms - spring-kafka - spring-katharsis - spring-ldap - spring-mobile - spring-mockito - spring-mvc-forms-thymeleaf - spring-mvc-java - spring-mvc-velocity - spring-mvc-webflow - spring-protobuf - spring-quartz - remoting-hessian-burlap/spring-remoting-hessian-burlap-client - remoting-hessian-burlap/remoting-hessian-burlap-server - spring-reactor - spring-remoting/ - spring-remoting/remoting-http/remoting-http-server - spring-remoting/remoting-jms/remoting-jms-client - spring-remoting/remoting-rmi/remoting-rmi-server - spring-rest - spring-rest-angular - spring-rest-compress - spring-rest-full - spring-rest-simple - spring-resttemplate - spring-security-acl - spring-security-angular - spring-security-cache-control - spring-security-core - spring-security-mvc-boot - spring-security-mvc-custom - spring-security-mvc-digest-auth - spring-security-mvc-ldap - spring-security-mvc-persisted-remember-me - spring-security-mvc - spring-security-mvc-socket - spring-security-rest - spring-security-sso - spring-security-thymeleaf/spring-security-thymeleaf-authentication - spring-security-thymeleaf/spring-security-thymeleaf-authorize - spring-security-thymeleaf/spring-security-thymeleaf-config - spring-security-x509 - spring-session/spring-session-jdbc - spring-sleuth - spring-social-login - spring-spel - spring-state-machine - spring-swagger-codegen/spring-swagger-codegen-app - spring-thymeleaf - spring-vault - spring-vertx - spring-zuul/spring-zuul-foos-resource - persistence-modules/hibernate-mapping - persistence-modules/spring-data-dynamodb - persistence-modules/spring-data-eclipselink - persistence-modules/spring-data-solr - persistence-modules/spring-hibernate-5 - - spring-boot-flowable - spring-security-kerberos - spring-boot-nashorn - - - - - - default-heavy - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - SpringContextTest - **/*UnitTest - - - **/*IntegrationTest.java - **/*IntTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - **/*JdbcTest.java - **/*LiveTest.java - - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - core-java-modules/core-java-concurrency-advanced - core-kotlin - core-kotlin-2 - core-kotlin-io - - jenkins/hello-world - jhipster - jws - - libraries - persistence-modules/hibernate5 - persistence-modules/hibernate-mapping - persistence-modules/java-jpa - persistence-modules/java-jpa-2 - persistence-modules/java-mongodb - persistence-modules/jnosql - - vaadin - vavr - - - - - integration-lite-first - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - akka-streams - algorithms-genetic - algorithms-miscellaneous-1 - algorithms-miscellaneous-2 - algorithms-miscellaneous-3 - algorithms-miscellaneous-4 - algorithms-miscellaneous-5 - algorithms-sorting - animal-sniffer-mvn-plugin - annotations - antlr - apache-avro - apache-bval - apache-curator - apache-cxf - apache-fop - apache-geode - apache-meecrowave - apache-olingo/olingo2 - apache-opennlp - apache-poi - apache-pulsar - apache-shiro - apache-solrj - apache-spark - apache-thrift - apache-tika - apache-velocity - apache-zookeeper - asciidoctor - asm - atomix - autovalue - aws - aws-lambda - axon - azure - bazel - bootique - - cas - cdi - checker-plugin - cloud-foundry-uaa/cf-uaa-oauth2-client - cloud-foundry-uaa/cf-uaa-oauth2-resource-server - core-groovy - core-groovy-2 - core-groovy-collections - - - core-java-modules/core-java-8 - core-java-modules/core-java-8-2 - core-java-modules/core-java-annotations - core-java-modules/core-java-streams - core-java-modules/core-java-function - core-java-modules/core-java-lang-math - core-java-modules/core-java-datetime - core-java-modules/core-java-text - - - core-java-modules/core-java-arrays - core-java-modules/core-java-arrays-2 - core-java-modules/core-java-collections - core-java-modules/core-java-collections-2 - core-java-modules/core-java-collections-3 - core-java-modules/core-java-collections-list - core-java-modules/core-java-collections-list-2 - core-java-modules/core-java-collections-list-3 - core-java-modules/core-java-collections-array-list - core-java-modules/core-java-collections-set - core-java-modules/core-java-concurrency-basic - core-java-modules/core-java-concurrency-basic-2 - core-java-modules/core-java-concurrency-collections - core-java-modules/core-java-io - core-java-modules/core-java-io-files - core-java-modules/core-java-nio - core-java-modules/core-java-security - core-java-modules/core-java-lang-syntax - core-java-modules/core-java-lang-syntax-2 - core-java-modules/core-java-lang - core-java-modules/core-java-lang-2 - core-java-modules/core-java-lang-oop - core-java-modules/core-java-lang-oop-2 - core-java-modules/core-java-lang-oop-3 - core-java-modules - core-java-modules/core-java-networking - core-java-modules/core-java-perf - core-java-modules/core-java-sun - core-scala - couchbase - custom-pmd - - dagger - data-structures - ddd - deeplearning4j - disruptor - dozer - drools - dubbo - - ethereum - - feign - flyway-cdi-extension - - geotools - google-cloud - google-web-toolkit - - - graphql/graphql-java - grpc - gson - guava - guava-io - guava-collections - guava-collections-set - guava-modules - - guice - - hazelcast - helidon - httpclient - httpclient-simple - hystrix - - image-processing - immutables - - jackson - jackson-2 - jackson-simple - java-collections-conversions - java-collections-maps - java-collections-maps-2 - java-jdi - - java-ee-8-security-api - java-lite - java-math - java-numbers - java-numbers-2 - java-rmi - java-spi - java-streams - - java-strings - java-strings-2 - java-strings-3 - java-strings-ops - java-vavr-stream - java-websocket - javafx - javax-servlets - javaxval - jaxb - + mustache + mybatis + + + optaplanner + orika + osgi + + patterns + pdf + performance-tests + + protobuffer + + persistence-modules + quarkus + + rabbitmq + + ratpack + reactor-core + resteasy + restx + + rule-engines + rsocket + rxjava + rxjava-2 + software-security/sql-injection-samples + + tensorflow-java + spf4j + spring-boot-flowable + spring-boot-mvc-2 + spring-boot-performance + spring-boot-properties + + spring-security-kerberos + oauth2-framework-impl + + spring-boot-nashorn + java-blockchain + + + + + + + default-second + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + SpringContextTest + **/*UnitTest + + + **/*IntegrationTest.java + **/*IntTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + **/*JdbcTest.java + **/*LiveTest.java + + + + + + + + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + saas + spark-java + + spring-4 + + spring-5 + spring-5-webflux + spring-5-data-reactive + spring-5-mvc + spring-5-reactive + spring-5-reactive-2 + spring-5-reactive-client + spring-5-reactive-oauth + spring-5-reactive-security + spring-5-security + spring-5-security-oauth + spring-5-security-cognito + + spring-activiti + spring-akka + spring-all + spring-amqp + spring-aop + spring-apache-camel + spring-batch + spring-bom + + spring-boot + spring-boot-admin + spring-boot-angular + spring-boot-autoconfiguration + spring-boot-bootstrap + spring-boot-camel + + spring-boot-client + + spring-boot-crud + spring-boot-ctx-fluent + spring-boot-custom-starter + spring-boot-disable-console-logging + + spring-boot-jasypt + spring-boot-keycloak + spring-boot-kotlin + spring-boot-logging-log4j2 + spring-boot-management + spring-boot-mvc + spring-boot-mvc-birt + spring-boot-ops + spring-boot-ops-2 + spring-boot-rest + spring-boot-data + spring-boot-parent + spring-boot-property-exp + spring-boot-security + spring-boot-testing + spring-boot-vue + spring-boot-libraries + + + spring-cloud + spring-cloud-bus + + spring-cloud-data-flow + + spring-core + spring-core-2 + spring-cucumber + + spring-data-rest + spring-data-rest-querydsl + spring-dispatcher-servlet + spring-drools + spring-di + + spring-ehcache + spring-ejb + spring-exceptions + + spring-freemarker + + spring-groovy + + spring-integration + + spring-jenkins-pipeline + spring-jersey + spring-jinq + spring-jms + spring-jooq + + spring-kafka + spring-katharsis + + spring-ldap + + spring-mobile + spring-mockito + spring-mvc-forms-jsp + spring-mvc-forms-thymeleaf + spring-mvc-java + spring-mvc-kotlin + spring-mvc-simple + spring-mvc-simple-2 + spring-mvc-velocity + spring-mvc-webflow + spring-mvc-xml + + spring-protobuf + + + spring-quartz + + spring-reactive-kotlin + spring-reactor + spring-remoting + spring-rest + spring-rest-angular + spring-rest-compress + spring-rest-full + spring-rest-hal-browser + spring-rest-query-language + spring-rest-shell + spring-rest-simple + spring-resttemplate + spring-roo + spring-security-acl + spring-security-angular/server + spring-security-cache-control + + spring-security-core + spring-security-mvc-boot + spring-security-mvc-custom + spring-security-mvc-digest-auth + spring-security-mvc-jsonview + spring-security-mvc-ldap + spring-security-mvc-login + spring-security-mvc-persisted-remember-me + spring-security-mvc + spring-security-mvc-socket + spring-security-openid + + spring-security-rest + spring-security-rest-basic-auth + spring-security-rest-custom + spring-security-sso + spring-security-stormpath + spring-security-thymeleaf + spring-security-x509 + spring-session + spring-sleuth + spring-soap + spring-social-login + spring-spel + spring-state-machine + spring-static-resources + spring-swagger-codegen + + spring-thymeleaf + + spring-vault + spring-vertx + + spring-webflux-amqp + + spring-zuul + + static-analysis + stripe + structurizr + struts-2 + + testing-modules + + twilio + twitter4j + + undertow + + vertx + vertx-and-rxjava + video-tutorials + vraptor + + wicket + + xml + xstream + + tensorflow-java + spring-boot-flowable + spring-security-kerberos + + spring-boot-nashorn + java-blockchain + + + + + + + spring-context + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + **/*SpringContextIntegrationTest.java + + + + + + + + + spring-5 + spring-5-data-reactive + spring-5-reactive + spring-5-reactive-2 + spring-5-reactive-client + spring-5-reactive-security + spring-5-security + spring-5-security-oauth + spring-5-security-cognito + spring-activiti + spring-akka + spring-all + spring-aop + spring-apache-camel + spring-batch + spring-bom + spring-boot-admin + spring-boot-bootstrap + spring-boot-bootstrap + spring-boot-camel + spring-boot-client + spring-boot-custom-starter + spring-boot-di + greeter-spring-boot-autoconfigure + greeter-spring-boot-sample-app + persistence-modules/spring-boot-h2/spring-boot-h2-database + spring-boot-jasypt + spring-boot-keycloak + spring-boot-mvc + spring-boot-property-exp + spring-boot-vue + spring-cloud + spring-cloud/spring-cloud-archaius/basic-config + spring-cloud/spring-cloud-archaius/extra-configs + spring-cloud/spring-cloud-bootstrap/config + spring-cloud/spring-cloud-contract + spring-cloud/spring-cloud-gateway + spring-cloud/spring-cloud-kubernetes/demo-backend + spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server + spring-cloud/spring-cloud-ribbon-client + spring-cloud/spring-cloud-security + spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit + spring-cloud/spring-cloud-task/springcloudtasksink + spring-cloud/spring-cloud-zookeeper + spring-cloud/spring-cloud-bus/spring-cloud-config-server + spring-cloud/spring-cloud-data-flow/log-sink + spring-cloud/spring-cloud-data-flow/time-processor + spring-cloud/spring-cloud-data-flow/time-source + spring-cucumber + persistence-modules/spring-data-keyvalue + spring-data-rest + spring-dispatcher-servlet + spring-drools + spring-di + spring-ehcache + spring-freemarker + persistence-modules/spring-hibernate-3 + persistence-modules/spring-hibernate4 + persistence-modules/spring-mybatis + spring-integration + spring-jenkins-pipeline + spring-jersey + spring-jinq + spring-jms + spring-kafka + spring-katharsis + spring-ldap + spring-mobile + spring-mockito + spring-mvc-forms-thymeleaf + spring-mvc-java + spring-mvc-velocity + spring-mvc-webflow + spring-protobuf + spring-quartz + remoting-hessian-burlap/spring-remoting-hessian-burlap-client + remoting-hessian-burlap/remoting-hessian-burlap-server + spring-reactor + spring-remoting/ + spring-remoting/remoting-http/remoting-http-server + spring-remoting/remoting-jms/remoting-jms-client + spring-remoting/remoting-rmi/remoting-rmi-server + spring-rest + spring-rest-angular + spring-rest-compress + spring-rest-full + spring-rest-simple + spring-resttemplate + spring-security-acl + spring-security-angular + spring-security-cache-control + spring-security-core + spring-security-mvc-boot + spring-security-mvc-custom + spring-security-mvc-digest-auth + spring-security-mvc-ldap + spring-security-mvc-persisted-remember-me + spring-security-mvc + spring-security-mvc-socket + spring-security-rest + spring-security-sso + spring-security-thymeleaf/spring-security-thymeleaf-authentication + spring-security-thymeleaf/spring-security-thymeleaf-authorize + spring-security-thymeleaf/spring-security-thymeleaf-config + spring-security-x509 + spring-session/spring-session-jdbc + spring-sleuth + spring-social-login + spring-spel + spring-state-machine + spring-swagger-codegen/spring-swagger-codegen-app + spring-thymeleaf + spring-vault + spring-vertx + spring-zuul/spring-zuul-foos-resource + persistence-modules/hibernate-mapping + persistence-modules/spring-data-dynamodb + persistence-modules/spring-data-eclipselink + persistence-modules/spring-data-solr + persistence-modules/spring-hibernate-5 + + spring-boot-flowable + spring-security-kerberos + spring-boot-nashorn + + + + + + default-heavy + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + SpringContextTest + **/*UnitTest + + + **/*IntegrationTest.java + **/*IntTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + **/*JdbcTest.java + **/*LiveTest.java + + + + + + + + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + core-java-modules/core-java-concurrency-advanced + core-kotlin + core-kotlin-2 + core-kotlin-io + + jenkins/hello-world + jhipster + jws + + libraries + persistence-modules/hibernate5 + persistence-modules/hibernate-mapping + persistence-modules/java-jpa + persistence-modules/java-jpa-2 + persistence-modules/java-mongodb + persistence-modules/jnosql + + vaadin + vavr + + + + + integration-lite-first + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*ManualTest.java + **/*LiveTest.java + + + **/*IntegrationTest.java + **/*IntTest.java + + + + + + + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + akka-streams + algorithms-genetic + algorithms-miscellaneous-1 + algorithms-miscellaneous-2 + algorithms-miscellaneous-3 + algorithms-miscellaneous-4 + algorithms-miscellaneous-5 + algorithms-sorting + animal-sniffer-mvn-plugin + annotations + antlr + apache-avro + apache-bval + apache-curator + apache-cxf + apache-fop + apache-geode + apache-meecrowave + apache-olingo/olingo2 + apache-opennlp + apache-poi + apache-pulsar + apache-shiro + apache-solrj + apache-spark + apache-thrift + apache-tika + apache-velocity + apache-zookeeper + asciidoctor + asm + atomix + autovalue + aws + aws-lambda + axon + azure + bazel + bootique + + cas + cdi + checker-plugin + cloud-foundry-uaa/cf-uaa-oauth2-client + cloud-foundry-uaa/cf-uaa-oauth2-resource-server + core-groovy + core-groovy-2 + core-groovy-collections + + + core-java-modules/core-java-8 + core-java-modules/core-java-8-2 + core-java-modules/core-java-annotations + core-java-modules/core-java-streams + core-java-modules/core-java-function + core-java-modules/core-java-lang-math + core-java-modules/core-java-datetime + core-java-modules/core-java-text + + + core-java-modules/core-java-arrays + core-java-modules/core-java-arrays-2 + core-java-modules/core-java-collections + core-java-modules/core-java-collections-2 + core-java-modules/core-java-collections-3 + core-java-modules/core-java-collections-list + core-java-modules/core-java-collections-list-2 + core-java-modules/core-java-collections-list-3 + core-java-modules/core-java-collections-array-list + core-java-modules/core-java-collections-set + core-java-modules/core-java-concurrency-basic + core-java-modules/core-java-concurrency-basic-2 + core-java-modules/core-java-concurrency-collections + core-java-modules/core-java-io + core-java-modules/core-java-io-files + core-java-modules/core-java-nio + core-java-modules/core-java-security + core-java-modules/core-java-lang-syntax + core-java-modules/core-java-lang-syntax-2 + core-java-modules/core-java-lang + core-java-modules/core-java-lang-2 + core-java-modules/core-java-lang-oop + core-java-modules/core-java-lang-oop-2 + core-java-modules/core-java-lang-oop-3 + core-java-modules + core-java-modules/core-java-networking + core-java-modules/core-java-perf + core-java-modules/core-java-sun + core-scala + couchbase + custom-pmd + + dagger + data-structures + ddd + deeplearning4j + disruptor + dozer + drools + dubbo + + ethereum + + feign + flyway-cdi-extension + + geotools + google-cloud + google-web-toolkit + + + graphql/graphql-java + grpc + gson + guava + guava-io + guava-collections + guava-collections-set + guava-modules + + guice + + hazelcast + helidon + httpclient + httpclient-simple + hystrix + + image-processing + immutables + + jackson + jackson-2 + jackson-simple + java-collections-conversions + java-collections-maps + java-collections-maps-2 + java-jdi + + java-ee-8-security-api + java-lite + java-math + java-numbers + java-numbers-2 + java-rmi + java-spi + java-streams + + java-strings + java-strings-2 + java-strings-3 + java-strings-ops + java-vavr-stream + java-websocket + javafx + javax-servlets + javaxval + jaxb + - jee-7-security - jee-kotlin - jersey - jgit - jgroups - jhipster-5 - jib - jjwt - jmeter - jmh - jni - jooby - jsf - json - json-path - jsoup - jta + jee-7-security + jee-kotlin + jersey + jgit + jgroups + jhipster-5 + jib + jjwt + jmeter + jmh + jni + jooby + jsf + json + json-path + jsoup + jta - - kotlin-libraries + + kotlin-libraries - - libraries - libraries-data - libraries-data-2 - libraries-apache-commons - libraries-apache-commons-collections - libraries-apache-commons-io - libraries-testing - libraries-security - libraries-server - libraries-http - linkrest - logging-modules - lombok - lucene + + libraries + libraries-data + libraries-data-2 + libraries-apache-commons + libraries-apache-commons-collections + libraries-apache-commons-io + libraries-testing + libraries-security + libraries-server + libraries-http + linkrest + logging-modules + lombok + lucene - mapstruct - - maven-all/maven - maven-all/maven-war-plugin - maven-all/profiles - maven-all/versions-maven-plugin - - maven-archetype - - maven-polyglot/maven-polyglot-json-extension - - mesos-marathon - metrics - - microprofile + mapstruct + + maven-all/maven + maven-all/maven-war-plugin + maven-all/profiles + maven-all/versions-maven-plugin + + maven-archetype + + maven-polyglot/maven-polyglot-json-extension + + mesos-marathon + metrics + + microprofile ml - msf4j - - mustache - mybatis + msf4j + + mustache + mybatis - optaplanner - orika - osgi + optaplanner + orika + osgi - patterns - pdf - performance-tests - - protobuffer + patterns + pdf + performance-tests + + protobuffer - persistence-modules + persistence-modules - rabbitmq - - ratpack - reactor-core - resteasy - restx - - rule-engines - rsocket - rxjava - rxjava-2 - oauth2-framework-impl - spf4j - spring-boot-performance - spring-boot-properties - - + rabbitmq + + ratpack + reactor-core + resteasy + restx + + rule-engines + rsocket + rxjava + rxjava-2 + oauth2-framework-impl + spf4j + spring-boot-performance + spring-boot-properties + + - + - + - - integration-lite-second + + integration-lite-second - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*ManualTest.java + **/*LiveTest.java + + + **/*IntegrationTest.java + **/*IntTest.java + + + + + - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin - saas - spark-java + saas + spark-java - spring-4 + spring-4 - spring-5 - spring-5-data-reactive - spring-5-mvc - spring-5-reactive - spring-5-reactive-2 - spring-5-reactive-client - spring-5-reactive-oauth - spring-5-reactive-security - spring-5-security - spring-5-security-oauth - spring-5-security-cognito - spring-activiti - spring-akka - spring-all - spring-amqp - spring-aop - spring-apache-camel - spring-batch - spring-bom + spring-5 + spring-5-data-reactive + spring-5-mvc + spring-5-reactive + spring-5-reactive-2 + spring-5-reactive-client + spring-5-reactive-oauth + spring-5-reactive-security + spring-5-security + spring-5-security-oauth + spring-5-security-cognito + spring-activiti + spring-akka + spring-all + spring-amqp + spring-aop + spring-apache-camel + spring-batch + spring-bom - spring-boot - spring-boot-admin - spring-boot-angular - spring-boot-autoconfiguration - spring-boot-bootstrap - spring-boot-camel - - spring-boot-client - spring-boot-crud - spring-boot-ctx-fluent - spring-boot-custom-starter - spring-boot-disable-console-logging - - spring-boot-jasypt - spring-boot-keycloak - spring-boot-logging-log4j2 - spring-boot-management - spring-boot-mvc - spring-boot-mvc-birt - spring-boot-ops - spring-boot-ops-2 - spring-boot-rest - spring-boot-data - spring-boot-parent - spring-boot-property-exp - spring-boot-security - spring-boot-vue + spring-boot + spring-boot-admin + spring-boot-angular + spring-boot-autoconfiguration + spring-boot-bootstrap + spring-boot-camel + + spring-boot-client + spring-boot-crud + spring-boot-ctx-fluent + spring-boot-custom-starter + spring-boot-disable-console-logging + + spring-boot-jasypt + spring-boot-keycloak + spring-boot-logging-log4j2 + spring-boot-management + spring-boot-mvc + spring-boot-mvc-birt + spring-boot-ops + spring-boot-ops-2 + spring-boot-rest + spring-boot-data + spring-boot-parent + spring-boot-property-exp + spring-boot-security + spring-boot-vue - spring-cloud - spring-cloud-bus - - spring-cloud-data-flow + spring-cloud + spring-cloud-bus + + spring-cloud-data-flow - spring-core - spring-core-2 - spring-cucumber + spring-core + spring-core-2 + spring-cucumber - spring-data-rest - spring-data-rest-querydsl - spring-dispatcher-servlet - spring-drools - spring-di + spring-data-rest + spring-data-rest-querydsl + spring-dispatcher-servlet + spring-drools + spring-di - spring-ehcache - spring-ejb - spring-exceptions + spring-ehcache + spring-ejb + spring-exceptions - spring-freemarker + spring-freemarker - spring-groovy + spring-groovy - spring-integration + spring-integration - spring-jenkins-pipeline - spring-jersey - spring-jinq - spring-jms - spring-jooq + spring-jenkins-pipeline + spring-jersey + spring-jinq + spring-jms + spring-jooq - spring-kafka - spring-katharsis + spring-kafka + spring-katharsis - spring-ldap + spring-ldap - spring-mobile - spring-mockito - spring-mvc-forms-jsp - spring-mvc-forms-thymeleaf - spring-mvc-java - spring-mvc-kotlin - spring-mvc-simple - spring-mvc-simple-2 - spring-mvc-velocity - spring-mvc-webflow - spring-mvc-xml + spring-mobile + spring-mockito + spring-mvc-forms-jsp + spring-mvc-forms-thymeleaf + spring-mvc-java + spring-mvc-kotlin + spring-mvc-simple + spring-mvc-simple-2 + spring-mvc-velocity + spring-mvc-webflow + spring-mvc-xml - spring-protobuf - + spring-protobuf + - spring-quartz + spring-quartz - spring-reactive-kotlin - spring-reactor - spring-remoting - spring-rest - spring-rest-angular - spring-rest-compress - spring-rest-full - spring-rest-hal-browser - spring-rest-query-language - spring-rest-shell - spring-rest-simple - spring-resttemplate - spring-roo + spring-reactive-kotlin + spring-reactor + spring-remoting + spring-rest + spring-rest-angular + spring-rest-compress + spring-rest-full + spring-rest-hal-browser + spring-rest-query-language + spring-rest-shell + spring-rest-simple + spring-resttemplate + spring-roo - spring-security-acl - spring-security-angular/server - spring-security-cache-control - spring-security-core - spring-security-mvc-boot - spring-security-mvc-custom - spring-security-mvc-digest-auth - spring-security-mvc-ldap - spring-security-mvc-login - spring-security-mvc-persisted-remember-me - spring-security-mvc - spring-security-mvc-socket - spring-security-openid - - spring-security-rest - spring-security-rest-basic-auth - spring-security-rest-custom - spring-security-sso - spring-security-stormpath - spring-security-thymeleaf - spring-security-x509 - spring-session - spring-sleuth - spring-soap - spring-social-login - spring-spel - spring-state-machine - spring-static-resources - spring-swagger-codegen + spring-security-acl + spring-security-angular/server + spring-security-cache-control + spring-security-core + spring-security-mvc-boot + spring-security-mvc-custom + spring-security-mvc-digest-auth + spring-security-mvc-ldap + spring-security-mvc-login + spring-security-mvc-persisted-remember-me + spring-security-mvc + spring-security-mvc-socket + spring-security-openid + + spring-security-rest + spring-security-rest-basic-auth + spring-security-rest-custom + spring-security-sso + spring-security-stormpath + spring-security-thymeleaf + spring-security-x509 + spring-session + spring-sleuth + spring-soap + spring-social-login + spring-spel + spring-state-machine + spring-static-resources + spring-swagger-codegen - spring-thymeleaf + spring-thymeleaf - spring-vault - spring-vertx + spring-vault + spring-vertx - spring-webflux-amqp + spring-webflux-amqp - spring-zuul + spring-zuul - static-analysis - stripe - structurizr - struts-2 + static-analysis + stripe + structurizr + struts-2 - testing-modules + testing-modules - twilio - twitter4j + twilio + twitter4j - undertow + undertow - vertx - vertx-and-rxjava - video-tutorials - vraptor + vertx + vertx-and-rxjava + video-tutorials + vraptor - wicket + wicket - xml - xstream - + xml + xstream + - + - - integration-heavy + + integration-heavy - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*ManualTest.java + **/*LiveTest.java + + + **/*IntegrationTest.java + **/*IntTest.java + + + + + - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin - core-java-modules/core-java - core-java-modules/core-java-concurrency-advanced - core-kotlin - core-kotlin-2 + core-java-modules/core-java + core-java-modules/core-java-concurrency-advanced + core-kotlin + core-kotlin-2 - jenkins/hello-world - jhipster - jws + jenkins/hello-world + jhipster + jws - libraries + libraries - persistence-modules/hibernate5 - persistence-modules/java-jpa - persistence-modules/java-jpa-2 - persistence-modules/java-mongodb - persistence-modules/jnosql + persistence-modules/hibernate5 + persistence-modules/java-jpa + persistence-modules/java-jpa-2 + persistence-modules/java-mongodb + persistence-modules/jnosql - vaadin - vavr - + vaadin + vavr + - + - + - - - - org.apache.maven.plugins - maven-jxr-plugin - ${maven-jxr-plugin.version} - - - + + + + org.apache.maven.plugins + maven-jxr-plugin + ${maven-jxr-plugin.version} + + + - - UTF-8 - UTF-8 - refs/remotes/origin/master - true - false - false - false - false + + UTF-8 + UTF-8 + refs/remotes/origin/master + true + false + false + false + false - 4.12 - 1.3 - 2.21.0 + 4.12 + 1.3 + 2.21.0 - - 1.7.21 - 1.1.7 + + 1.7.21 + 1.1.7 - - - 2.21.0 - 3.7.0 - 1.6.0 - 1.8 - 1.2.17 - 1.1 - 2.1.0.1 - 1.19 - 1.19 - 1.3 - 1.6.0 - 2.21.0 - 2.5 - 2.6 - 3.5 - 1.4 - 3.0.0 - 3.1.0 - 1.2 - 2.3.1 - 1.9.13 - 1.2 - 2.9.8 - 1.3 - 1.2.0 - 5.2.0 - 0.3.1 - 2.5.1 - 0.0.1 - 3.8 - 2.3 - - 3.8 - 1.16.12 - 1.4.197 - + + + 2.21.0 + 3.7.0 + 1.6.0 + 1.8 + 1.2.17 + 1.1 + 2.1.0.1 + 1.19 + 1.19 + 1.3 + 1.6.0 + 2.21.0 + 2.5 + 2.6 + 3.5 + 1.4 + 3.0.0 + 3.1.0 + 1.2 + 2.3.1 + 1.9.13 + 1.2 + 2.9.8 + 1.3 + 1.2.0 + 5.2.0 + 0.3.1 + 2.5.1 + 0.0.1 + 3.8 + 2.3 + + 3.8 + 1.16.12 + 1.4.197 + From 44fb860b403a7d38cfe81d12679cce1c7fe0dde8 Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Mon, 7 Oct 2019 13:52:10 +0200 Subject: [PATCH 031/304] resetting Distance class --- .../com/baeldung/jackson/enums/Distance.java | 38 ++++--------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java b/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java index fdda32d16c..8026eedc44 100644 --- a/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java +++ b/jackson/src/main/java/com/baeldung/jackson/enums/Distance.java @@ -1,29 +1,20 @@ package com.baeldung.jackson.enums; import com.baeldung.jackson.serialization.DistanceSerializer; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Use @JsonFormat to handle representation of Enum as JSON (available since Jackson 2.1.2) * Use @JsonSerialize to configure a custom Jackson serializer */ -@JsonFormat(shape = JsonFormat.Shape.OBJECT) -//@JsonSerialize(using = DistanceSerializer.class) +// @JsonFormat(shape = JsonFormat.Shape.OBJECT) +@JsonSerialize(using = DistanceSerializer.class) public enum Distance { - @JsonProperty("distance-in-km") - KILOMETER("km", 1000), - @JsonProperty("distance-in-miles") - MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), - MILLIMETER("mm", 0.001); + KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); private String unit; private final double meters; - + private Distance(String unit, double meters) { this.unit = unit; this.meters = meters; @@ -32,11 +23,11 @@ public enum Distance { /** * Use @JsonValue to control marshalling output for an enum */ -// @JsonValue + // @JsonValue public double getMeters() { return meters; } - + public String getUnit() { return unit; } @@ -44,7 +35,7 @@ public enum Distance { public void setUnit(String unit) { this.unit = unit; } - + /** * Usage example: Distance.MILE.convertFromMeters(1205.5); */ @@ -60,19 +51,4 @@ public enum Distance { return distanceInMeters * meters; } -// @JsonCreator - public static Distance forValues(@JsonProperty("unit") String unit, @JsonProperty("meters") double meters) { - - for (Distance distance : Distance.values()) { - if (distance.unit.equals(unit) - && Double.compare(distance.meters, meters) == 0) { - - return distance; - } - } - - return null; - - } - } \ No newline at end of file From 100d302faa7afee5dc8f6a72136342d68d5c6cae Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Mon, 7 Oct 2019 14:26:16 +0200 Subject: [PATCH 032/304] #BAEL-16646 amend pom.xml to include core-java-datetime-* modules in integration-tests-lite profile (which already contained java-datetime) --- pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pom.xml b/pom.xml index f6f99e6269..27fec08ade 100644 --- a/pom.xml +++ b/pom.xml @@ -1148,7 +1148,10 @@ core-java-modules/core-java-lang-math core-java-modules/core-java-datetime-conversion core-java-modules/core-java-datetime-string + core-java-modules/core-java-datetime-java8 + core-java-modules/core-java-datetime-string core-java-modules/core-java-text + core-java-modules/core-java-time-measurements core-java-modules/core-java-arrays From 06cec4c83a0a076d82e7143b7409d1c55236aa2b Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Mon, 7 Oct 2019 16:07:17 +0200 Subject: [PATCH 033/304] multiple Distance enum versions --- .../com/baeldung/jackson/entities/City.java | 196 ++++++++++++++++-- .../JacksonEnumDeserializationUnitTest.java | 45 ++++ .../JacksonEnumSerializationUnitTest.java | 44 ---- 3 files changed, 229 insertions(+), 56 deletions(-) create mode 100644 jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java diff --git a/jackson/src/main/java/com/baeldung/jackson/entities/City.java b/jackson/src/main/java/com/baeldung/jackson/entities/City.java index d4c5d715de..9f338acc28 100644 --- a/jackson/src/main/java/com/baeldung/jackson/entities/City.java +++ b/jackson/src/main/java/com/baeldung/jackson/entities/City.java @@ -1,22 +1,194 @@ package com.baeldung.jackson.entities; -import com.baeldung.jackson.enums.Distance; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; public class City { - - private Distance distance; - public Distance getDistance() { - return distance; + public static class CityWithDefaultEnum { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + + public enum Distance { + + KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); + + private String unit; + private final double meters; + + private Distance(String unit, double meters) { + this.unit = unit; + this.meters = meters; + } + + public double getMeters() { + return meters; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + } + } + + public static class CityWithJsonCreatorEnum { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + + public enum Distance { + + KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); + + private String unit; + private final double meters; + + private Distance(String unit, double meters) { + this.unit = unit; + this.meters = meters; + } + + public double getMeters() { + return meters; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + @JsonCreator + public static Distance forValues(@JsonProperty("unit") String unit, @JsonProperty("meters") double meters) { + + for (Distance distance : Distance.values()) { + if (distance.unit.equals(unit) && Double.compare(distance.meters, meters) == 0) { + + return distance; + } + } + + return null; + + } + } } - public void setDistance(Distance distance) { - this.distance = distance; + public static class CityWithJsonPropertyEnum { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + + public enum Distance { + + @JsonProperty("distance-in-km") + KILOMETER("km", 1000), + + @JsonProperty("distance-in-miles") + MILE("miles", 1609.34), + + @JsonProperty("distance-in-meters") + METER("meters", 1), + + @JsonProperty("distance-in-inches") + INCH("inches", 0.0254), + + @JsonProperty("distance-in-cm") + CENTIMETER("cm", 0.01), + + @JsonProperty("distance-in-mm") + MILLIMETER("mm", 0.001); + + private String unit; + private final double meters; + + private Distance(String unit, double meters) { + this.unit = unit; + this.meters = meters; + } + + public double getMeters() { + return meters; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + } + } + + public static class CityWithJsonValueEnum { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + + public enum Distance { + + KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); + + private String unit; + private final double meters; + + private Distance(String unit, double meters) { + this.unit = unit; + this.meters = meters; + } + + @JsonValue + public double getMeters() { + return meters; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + } } - @Override - public String toString() { - return "City [distance=" + distance + "]"; - } - } diff --git a/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java new file mode 100644 index 0000000000..d823bca445 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java @@ -0,0 +1,45 @@ +package com.baeldung.jackson.enums; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.IOException; +import org.junit.Test; +import com.baeldung.jackson.entities.City; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class JacksonEnumDeserializationUnitTest { + + @Test + public final void givenEnum_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\":\"KILOMETER\"}"; + City.CityWithDefaultEnum city = new ObjectMapper().readValue(json, City.CityWithDefaultEnum.class); + + assertEquals(City.CityWithDefaultEnum.Distance.KILOMETER, city.getDistance()); + } + + @Test + public final void givenEnumWithJsonValue_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\": \"0.0254\"}"; + + City.CityWithJsonValueEnum city = new ObjectMapper().readValue(json, City.CityWithJsonValueEnum.class); + assertEquals(City.CityWithJsonValueEnum.Distance.INCH, city.getDistance()); + } + + @Test + public final void givenEnumWithJsonProperty_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\": \"distance-in-km\"}"; + + City.CityWithJsonPropertyEnum city = new ObjectMapper().readValue(json, City.CityWithJsonPropertyEnum.class); + assertEquals(City.CityWithJsonPropertyEnum.Distance.KILOMETER, city.getDistance()); + + } + + @Test + public final void givenEnumWithJsonCreator_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; + + City.CityWithJsonCreatorEnum city = new ObjectMapper().readValue(json, City.CityWithJsonCreatorEnum.class); + assertEquals(City.CityWithJsonCreatorEnum.Distance.MILE, city.getDistance()); + } + +} diff --git a/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java index 3108773a00..d4fb2401ed 100644 --- a/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumSerializationUnitTest.java @@ -1,17 +1,10 @@ package com.baeldung.jackson.enums; import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; - import java.io.IOException; -import org.junit.Ignore; import org.junit.Test; - -import com.baeldung.jackson.entities.City; import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonEnumSerializationUnitTest { @@ -22,42 +15,5 @@ public class JacksonEnumSerializationUnitTest { assertThat(dtoAsString, containsString("1609.34")); } - - @Test - @Ignore - public final void givenEnum_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\":\"KILOMETER\"}"; - City city = new ObjectMapper().readValue(json, City.class); - - assertEquals(Distance.KILOMETER, city.getDistance()); - } - - @Test - @Ignore - public final void givenEnumWithJsonValue_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"JacksonDeserializationUnitTestdistance\": \"0.0254\"}"; - - City city = new ObjectMapper().readValue(json, City.class); - assertEquals(Distance.INCH, city.getDistance()); - } - - @Test - public final void givenEnumWithGsonProperty_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\": \"distance-in-km\"}"; - - City city = new ObjectMapper().readValue(json, City.class); - assertEquals(Distance.KILOMETER, city.getDistance()); - - } - - @Test - @Ignore - public final void givenEnumWithGsonCreator_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; - - City city = new ObjectMapper().readValue(json, City.class); - assertEquals(Distance.MILE, city.getDistance()); - System.out.println(city); - } } From d97f501cbded06fa17315b816d34e3c50125e2ac Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Mon, 7 Oct 2019 17:07:57 +0100 Subject: [PATCH 034/304] BAEL-13505 Move articles out of core java - part 2 --- core-java-modules/core-java-jvm/README.md | 6 +++-- core-java-modules/core-java-jvm/pom.xml | 22 +++++++++++++++ .../classloader/CustomClassLoader.java | 0 .../classloader/PrintClassLoader.java | 0 .../instrumentation/agent/AtmTransformer.java | 0 .../agent/MyInstrumentationAgent.java | 0 .../application/AgentLoader.java | 0 .../instrumentation/application/Launcher.java | 0 .../instrumentation/application/MyAtm.java | 0 .../application/MyAtmApplication.java | 0 .../baeldung/logforging/LogForgingDemo.java | 0 .../src/main/resources/ESAPI.properties | 0 .../CustomClassLoaderUnitTest.java | 0 .../classloader/PrintClassLoaderUnitTest.java | 0 core-java-modules/core-java-os/README.md | 5 ++++ core-java-modules/core-java-os/pom.xml | 12 +++++++++ .../com/baeldung/printscreen/Screenshot.java | 0 .../java/com/baeldung/system/DetectOS.java | 0 .../grep/GrepWithUnix4JIntegrationTest.java | 0 .../printscreen/ScreenshotLiveTest.java | 0 .../shell/JavaProcessUnitIntegrationTest.java | 2 +- .../system/WhenDetectingOSUnitTest.java | 0 core-java-modules/core-java/README.md | 9 ------- core-java-modules/core-java/pom.xml | 27 ++++--------------- .../java/com/baeldung/printscreen/README.md | 2 -- 25 files changed, 49 insertions(+), 36 deletions(-) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/classloader/CustomClassLoader.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/classloader/PrintClassLoader.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/instrumentation/application/Launcher.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/instrumentation/application/MyAtm.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/java/com/baeldung/logforging/LogForgingDemo.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/main/resources/ESAPI.properties (100%) rename core-java-modules/{core-java => core-java-jvm}/src/test/java/com/baeldung/classloader/CustomClassLoaderUnitTest.java (100%) rename core-java-modules/{core-java => core-java-jvm}/src/test/java/com/baeldung/classloader/PrintClassLoaderUnitTest.java (100%) rename core-java-modules/{core-java => core-java-os}/src/main/java/com/baeldung/printscreen/Screenshot.java (100%) rename core-java-modules/{core-java => core-java-os}/src/main/java/com/baeldung/system/DetectOS.java (100%) rename core-java-modules/{core-java => core-java-os}/src/test/java/com/baeldung/grep/GrepWithUnix4JIntegrationTest.java (100%) rename core-java-modules/{core-java => core-java-os}/src/test/java/com/baeldung/printscreen/ScreenshotLiveTest.java (100%) rename core-java-modules/{core-java/src/test/java/org/baeldung/java => core-java-os/src/test/java/com/baeldung}/shell/JavaProcessUnitIntegrationTest.java (98%) rename core-java-modules/{core-java => core-java-os}/src/test/java/com/baeldung/system/WhenDetectingOSUnitTest.java (100%) delete mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/printscreen/README.md diff --git a/core-java-modules/core-java-jvm/README.md b/core-java-modules/core-java-jvm/README.md index 82067ad952..9f1d21fa6f 100644 --- a/core-java-modules/core-java-jvm/README.md +++ b/core-java-modules/core-java-jvm/README.md @@ -1,6 +1,8 @@ -========= - ## Core Java JVM Cookbooks and Examples ### Relevant Articles: + - [Method Inlining in the JVM](https://www.baeldung.com/jvm-method-inlining) +- [JVM Log Forging](http://www.baeldung.com/jvm-log-forging) +- [Guide to Java Instrumentation](http://www.baeldung.com/java-instrumentation) +- [Class Loaders in Java](http://www.baeldung.com/java-classloaders) diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index b1860322a6..b6fd81fe45 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -32,9 +32,31 @@ ${assertj.version} test + + org.javassist + javassist + ${javaassist.version} + + + org.owasp.esapi + esapi + ${esapi.version} + + + com.sun + tools + ${sun.tools.version} + system + ${java.home}/../lib/tools.jar + + 3.6.1 + + 3.21.0-GA + 2.1.0.1 + 1.8.0 diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/classloader/CustomClassLoader.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/CustomClassLoader.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/classloader/CustomClassLoader.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/CustomClassLoader.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/classloader/PrintClassLoader.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/classloader/PrintClassLoader.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/Launcher.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/Launcher.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/Launcher.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/Launcher.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtm.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/MyAtm.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtm.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/MyAtm.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/logforging/LogForgingDemo.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/logforging/LogForgingDemo.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/logforging/LogForgingDemo.java rename to core-java-modules/core-java-jvm/src/main/java/com/baeldung/logforging/LogForgingDemo.java diff --git a/core-java-modules/core-java/src/main/resources/ESAPI.properties b/core-java-modules/core-java-jvm/src/main/resources/ESAPI.properties similarity index 100% rename from core-java-modules/core-java/src/main/resources/ESAPI.properties rename to core-java-modules/core-java-jvm/src/main/resources/ESAPI.properties diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/classloader/CustomClassLoaderUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/classloader/CustomClassLoaderUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/classloader/CustomClassLoaderUnitTest.java rename to core-java-modules/core-java-jvm/src/test/java/com/baeldung/classloader/CustomClassLoaderUnitTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/classloader/PrintClassLoaderUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/classloader/PrintClassLoaderUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/classloader/PrintClassLoaderUnitTest.java rename to core-java-modules/core-java-jvm/src/test/java/com/baeldung/classloader/PrintClassLoaderUnitTest.java diff --git a/core-java-modules/core-java-os/README.md b/core-java-modules/core-java-os/README.md index 9205628a87..f2ec3f9d48 100644 --- a/core-java-modules/core-java-os/README.md +++ b/core-java-modules/core-java-os/README.md @@ -3,9 +3,14 @@ This module contains articles about working with the operating system (OS) in Java ### Relevant Articles: + - [Java 9 Process API Improvements](http://www.baeldung.com/java-9-process-api) - [Guide to java.lang.Process API](https://www.baeldung.com/java-process-api) - [Guide to java.lang.ProcessBuilder API](https://www.baeldung.com/java-lang-processbuilder-api) - [Get the Current Working Directory in Java](https://www.baeldung.com/java-current-directory) +- [How to Detect the OS Using Java](http://www.baeldung.com/java-detect-os) +- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java) +- [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java) +- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) This module uses Java 9, so make sure to have the JDK 9 installed to run it. \ No newline at end of file diff --git a/core-java-modules/core-java-os/pom.xml b/core-java-modules/core-java-os/pom.xml index f6c5ef04a5..16391e968d 100644 --- a/core-java-modules/core-java-os/pom.xml +++ b/core-java-modules/core-java-os/pom.xml @@ -42,6 +42,16 @@ ${assertj.version} test + + org.unix4j + unix4j-command + ${unix4j.version} + + + com.googlecode.grep4j + grep4j + ${grep4j.version} + @@ -77,5 +87,7 @@ 1.9 1.9 25.1-jre + 0.4 + 1.8.7 diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/printscreen/Screenshot.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java rename to core-java-modules/core-java-os/src/main/java/com/baeldung/printscreen/Screenshot.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/system/DetectOS.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/system/DetectOS.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/system/DetectOS.java rename to core-java-modules/core-java-os/src/main/java/com/baeldung/system/DetectOS.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/grep/GrepWithUnix4JIntegrationTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/grep/GrepWithUnix4JIntegrationTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/grep/GrepWithUnix4JIntegrationTest.java rename to core-java-modules/core-java-os/src/test/java/com/baeldung/grep/GrepWithUnix4JIntegrationTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/printscreen/ScreenshotLiveTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/printscreen/ScreenshotLiveTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/printscreen/ScreenshotLiveTest.java rename to core-java-modules/core-java-os/src/test/java/com/baeldung/printscreen/ScreenshotLiveTest.java diff --git a/core-java-modules/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitIntegrationTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/shell/JavaProcessUnitIntegrationTest.java similarity index 98% rename from core-java-modules/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitIntegrationTest.java rename to core-java-modules/core-java-os/src/test/java/com/baeldung/shell/JavaProcessUnitIntegrationTest.java index efd7dda70f..53e9364207 100644 --- a/core-java-modules/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitIntegrationTest.java +++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/shell/JavaProcessUnitIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.java.shell; +package com.baeldung.java.shell; import org.junit.Assert; import org.junit.Test; diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/system/WhenDetectingOSUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/system/WhenDetectingOSUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/system/WhenDetectingOSUnitTest.java rename to core-java-modules/core-java-os/src/test/java/com/baeldung/system/WhenDetectingOSUnitTest.java diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 436a481803..a592449799 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -1,18 +1,12 @@ -========= - ## Core Java Cookbooks and Examples ### Relevant Articles: - [Java Timer](http://www.baeldung.com/java-timer-and-timertask) -- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) -- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java) - [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java) - [Getting Started with Java Properties](http://www.baeldung.com/java-properties) -- [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java) - [How to Create an Executable JAR with Maven](http://www.baeldung.com/executable-jar-with-maven) - [Introduction to Nashorn](http://www.baeldung.com/java-nashorn) - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) -- [JVM Log Forging](http://www.baeldung.com/jvm-log-forging) - [How to Add a Single Element to a Stream](http://www.baeldung.com/java-stream-append-prepend) - [How to Find all Getters Returning Null](http://www.baeldung.com/java-getters-returning-null) - [How to Get a Name of a Method Being Executed?](http://www.baeldung.com/java-name-of-executing-method) @@ -24,16 +18,13 @@ - [Compiling Java *.class Files with javac](http://www.baeldung.com/javac) - [Introduction to Javadoc](http://www.baeldung.com/javadoc) - [Guide to the Externalizable Interface in Java](http://www.baeldung.com/java-externalizable) -- [How to Detect the OS Using Java](http://www.baeldung.com/java-detect-os) - [ASCII Art in Java](http://www.baeldung.com/ascii-art-in-java) - [What is the serialVersionUID?](http://www.baeldung.com/java-serial-version-uid) - [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle) -- [Class Loaders in Java](http://www.baeldung.com/java-classloaders) - [Guide to the Java Clock Class](http://www.baeldung.com/java-clock) - [Importance of Main Manifest Attribute in a Self-Executing JAR](http://www.baeldung.com/java-jar-executable-manifest-main-class) - [Java Global Exception Handler](http://www.baeldung.com/java-global-exception-handler) - [How to Get the Size of an Object in Java](http://www.baeldung.com/java-size-of-object) -- [Guide to Java Instrumentation](http://www.baeldung.com/java-instrumentation) - [Common Java Exceptions](http://www.baeldung.com/java-common-exceptions) - [Throw Exception in Optional in Java 8](https://www.baeldung.com/java-optional-throw-exception) - [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 2a2cb3a6af..f04e63eb7c 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -75,11 +75,7 @@ moneta ${javamoney.moneta.version} - - org.owasp.esapi - esapi - ${esapi.version} - + com.sun.messaging.mq fscontext @@ -115,19 +111,7 @@ h2 ${h2.version} - - - org.javassist - javassist - ${javaassist.version} - - - com.sun - tools - ${sun.tools.version} - system - ${java.home}/../lib/tools.jar - + @@ -469,7 +453,7 @@ 2.21.0 1.1 - 2.1.0.1 + 1.19 1.19 @@ -480,9 +464,8 @@ 2.0.3.RELEASE 1.6.0 61.1 - - 3.21.0-GA + - 1.8.0 + diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/printscreen/README.md b/core-java-modules/core-java/src/main/java/com/baeldung/printscreen/README.md deleted file mode 100644 index 7b3b40c102..0000000000 --- a/core-java-modules/core-java/src/main/java/com/baeldung/printscreen/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Articles: -- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java) From a2e57b357786430143c1057da765494688a69d1b Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Mon, 7 Oct 2019 22:46:32 +0200 Subject: [PATCH 035/304] custom deserializer --- .../enums/CustomEnumDeserializer.java | 44 +++++++++++++++++++ .../com/baeldung/jackson/entities/City.java | 41 +++++++++++++++++ .../JacksonEnumDeserializationUnitTest.java | 7 +++ 3 files changed, 92 insertions(+) create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/CustomEnumDeserializer.java diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/CustomEnumDeserializer.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/CustomEnumDeserializer.java new file mode 100644 index 0000000000..3b99490e0b --- /dev/null +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/CustomEnumDeserializer.java @@ -0,0 +1,44 @@ +package com.baeldung.jackson.deserialization.enums; + +import java.io.IOException; +import com.baeldung.jackson.entities.City; +import com.baeldung.jackson.entities.City.CityWithCustomDeserializationEnum.Distance; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +public class CustomEnumDeserializer extends StdDeserializer { + + private static final long serialVersionUID = -1166032307856492833L; + + public CustomEnumDeserializer() { + this(null); + } + + public CustomEnumDeserializer(Class vc) { + super(vc); + } + + @Override + public City.CityWithCustomDeserializationEnum.Distance deserialize(final JsonParser jsonParser, final DeserializationContext ctxt) throws IOException, JsonProcessingException { + + final JsonNode node = jsonParser.getCodec().readTree(jsonParser); + + String unit = node.get("unit").asText(); + double meters = node.get("meters").asDouble(); + + for (Distance distance : Distance.values()) { + + if (distance.getUnit().equals(unit) && + Double.compare(distance.getMeters(), meters) == 0) { + + return distance; + } + } + + return null; + } + +} diff --git a/jackson/src/main/java/com/baeldung/jackson/entities/City.java b/jackson/src/main/java/com/baeldung/jackson/entities/City.java index 9f338acc28..42911dc798 100644 --- a/jackson/src/main/java/com/baeldung/jackson/entities/City.java +++ b/jackson/src/main/java/com/baeldung/jackson/entities/City.java @@ -1,8 +1,10 @@ package com.baeldung.jackson.entities; +import com.baeldung.jackson.deserialization.enums.CustomEnumDeserializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; public class City { @@ -191,4 +193,43 @@ public class City { } } + public static class CityWithCustomDeserializationEnum { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + + @JsonDeserialize(using = CustomEnumDeserializer.class) + public enum Distance { + + KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); + + private String unit; + private final double meters; + + private Distance(String unit, double meters) { + this.unit = unit; + this.meters = meters; + } + + public double getMeters() { + return meters; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + } + } + } diff --git a/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java index d823bca445..b4d63c181e 100644 --- a/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java @@ -42,4 +42,11 @@ public class JacksonEnumDeserializationUnitTest { assertEquals(City.CityWithJsonCreatorEnum.Distance.MILE, city.getDistance()); } + @Test + public final void givenEnumWithCustomDeserializer_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; + + City.CityWithCustomDeserializationEnum city = new ObjectMapper().readValue(json, City.CityWithCustomDeserializationEnum.class); + assertEquals(City.CityWithCustomDeserializationEnum.Distance.MILE, city.getDistance()); + } } From cd0d79d8f64396ab831dfcbc8ffe3cf061cf01e6 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Tue, 8 Oct 2019 15:40:45 +0300 Subject: [PATCH 036/304] BAEL-1871 - Spring Data Geode --- persistence-modules/pom.xml | 1 + persistence-modules/spring-data-geode/pom.xml | 94 +++++++++++++++++++ .../springdatageode/app/ClientCacheApp.java | 32 +++++++ .../controller/AppController.java | 37 ++++++++ .../springdatageode/domain/Author.java | 58 ++++++++++++ .../repo/AuthorRepository.java | 12 +++ .../service/AuthorService.java | 14 +++ .../src/main/resources/application.properties | 1 + .../src/main/resources/logback.xml | 13 +++ 9 files changed, 262 insertions(+) create mode 100644 persistence-modules/spring-data-geode/pom.xml create mode 100644 persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/app/ClientCacheApp.java create mode 100644 persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/controller/AppController.java create mode 100644 persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/domain/Author.java create mode 100644 persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java create mode 100644 persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/service/AuthorService.java create mode 100644 persistence-modules/spring-data-geode/src/main/resources/application.properties create mode 100644 persistence-modules/spring-data-geode/src/main/resources/logback.xml diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 932b62a235..f57566b879 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -48,6 +48,7 @@ spring-data-eclipselink spring-data-elasticsearch spring-data-gemfire + spring-data-geode spring-data-jpa spring-data-keyvalue spring-data-mongodb diff --git a/persistence-modules/spring-data-geode/pom.xml b/persistence-modules/spring-data-geode/pom.xml new file mode 100644 index 0000000000..abd3049755 --- /dev/null +++ b/persistence-modules/spring-data-geode/pom.xml @@ -0,0 +1,94 @@ + + + 4.0.0 + spring-data-geode + spring-data-geode + jar + Intro to Spring Data Geode + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + + + org.springframework.boot + spring-boot-starter + 2.1.9.RELEASE + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot-version} + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.geode + spring-geode-starter + ${spring-geode-starter-version} + + + + org.springframework.boot + spring-boot-autoconfigure + ${spring-boot-version} + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot-version} + test + + + + + ${project.artifactId} + + + com.mysema.maven + maven-apt-plugin + 1.0 + + + generate-sources + + process + + + target/generated-sources + com.querydsl.apt.jpa.JPAAnnotationProcessor + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-version} + + + + + + 2.1.9.RELEASE + UTF-8 + com.baeldung.springdatageode.app.ClientCacheApp + 1.1.1.RELEASE + + + \ No newline at end of file diff --git a/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/app/ClientCacheApp.java b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/app/ClientCacheApp.java new file mode 100644 index 0000000000..6e9a33e953 --- /dev/null +++ b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/app/ClientCacheApp.java @@ -0,0 +1,32 @@ +package com.baeldung.springdatageode.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.data.gemfire.config.annotation.ClientCacheApplication; +import org.springframework.data.gemfire.config.annotation.EnableClusterConfiguration; +import org.springframework.data.gemfire.config.annotation.EnableContinuousQueries; +import org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions; +import org.springframework.data.gemfire.config.annotation.EnableIndexing; +import org.springframework.data.gemfire.repository.config.EnableGemfireRepositories; + +import com.baeldung.springdatageode.controller.AppController; +import com.baeldung.springdatageode.domain.Author; +import com.baeldung.springdatageode.repo.AuthorRepository; +import com.baeldung.springdatageode.service.AuthorService; + +@SpringBootApplication +@ClientCacheApplication(subscriptionEnabled = true) +@EnableEntityDefinedRegions(basePackageClasses = Author.class) +@EnableIndexing +@EnableGemfireRepositories(basePackageClasses = AuthorRepository.class) +@ComponentScan(basePackageClasses = {AppController.class, AuthorService.class}) +@EnableClusterConfiguration(useHttp = true, requireHttps=false) +@EnableContinuousQueries +public class ClientCacheApp { + + public static void main(String[] args) { + SpringApplication.run(ClientCacheApp.class, args); + } + +} diff --git a/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/controller/AppController.java b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/controller/AppController.java new file mode 100644 index 0000000000..32f931820a --- /dev/null +++ b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/controller/AppController.java @@ -0,0 +1,37 @@ +package com.baeldung.springdatageode.controller; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.springdatageode.domain.Author; +import com.baeldung.springdatageode.repo.AuthorRepository; + +@RestController +@CrossOrigin +public class AppController { + + @Autowired + private AuthorRepository authorRepositoryImpl; + + @PostMapping(path = "/author" ) + public ResponseEntity addAuthor(@RequestBody Author author) throws Exception { + authorRepositoryImpl.save(author); + return new ResponseEntity<>("OK", HttpStatus.OK); + } + + @GetMapping(path = "/author" ) + public ResponseEntity getAuthor(@RequestParam("id") String id) throws Exception { + Optional author = authorRepositoryImpl.findById(Long.parseLong(id)); + return new ResponseEntity<>(author.isPresent() ? author.get() : null, HttpStatus.OK); + } + +} diff --git a/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/domain/Author.java b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/domain/Author.java new file mode 100644 index 0000000000..4a2e58ff34 --- /dev/null +++ b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/domain/Author.java @@ -0,0 +1,58 @@ +package com.baeldung.springdatageode.domain; + +import org.springframework.data.annotation.Id; +import org.springframework.data.gemfire.mapping.annotation.Indexed; +import org.springframework.data.gemfire.mapping.annotation.Region; + +@Region(name = "Authors") +public class Author { + + @Id + private Long id; + + private String firstName; + + private String lastName; + + @Indexed + private int age; + + public Long getId() { + return id; + } + + public void setId(Long 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; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return this.firstName + " " + this.lastName + ", " + this.age + " years old"; + } + +} + diff --git a/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java new file mode 100644 index 0000000000..3a311039a4 --- /dev/null +++ b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java @@ -0,0 +1,12 @@ +package com.baeldung.springdatageode.repo; + +import com.baeldung.springdatageode.domain.Author; + +import java.util.Optional; + +import org.springframework.data.repository.CrudRepository; + +public interface AuthorRepository extends CrudRepository { + + Optional findById(Long id); +} diff --git a/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/service/AuthorService.java b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/service/AuthorService.java new file mode 100644 index 0000000000..1bf4cbaba1 --- /dev/null +++ b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/service/AuthorService.java @@ -0,0 +1,14 @@ +package com.baeldung.springdatageode.service; + +import org.apache.geode.cache.query.CqEvent; +import org.springframework.data.gemfire.listener.annotation.ContinuousQuery; +import org.springframework.stereotype.Service; + +@Service +public class AuthorService { + + @ContinuousQuery(query = "SELECT * FROM /Authors a WHERE a.id = 1") + public void process(CqEvent event) { + System.out.println("Author #" + event.getKey() + " updated to " + event.getNewValue()); + } +} diff --git a/persistence-modules/spring-data-geode/src/main/resources/application.properties b/persistence-modules/spring-data-geode/src/main/resources/application.properties new file mode 100644 index 0000000000..7b7cb5a37b --- /dev/null +++ b/persistence-modules/spring-data-geode/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=9091 \ No newline at end of file diff --git a/persistence-modules/spring-data-geode/src/main/resources/logback.xml b/persistence-modules/spring-data-geode/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/persistence-modules/spring-data-geode/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 From f4497314297a6d1a1d4b5480f2d8ec7441365312 Mon Sep 17 00:00:00 2001 From: Vivek Balasubramaniam Date: Sat, 12 Oct 2019 08:56:35 +0530 Subject: [PATCH 037/304] BAEL-3091: The Prototype Pattern in Java --- .../java/com/baeldung/prototype/Position.java | 51 ++++++++++++++++++ .../java/com/baeldung/prototype/Tree.java | 54 +++++++++++++++++++ .../com/baeldung/prototype/TreeCloneable.java | 7 +++ .../prototype/TreePrototypeUnitTest.java | 24 +++++++++ 4 files changed, 136 insertions(+) create mode 100644 patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Position.java create mode 100644 patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java create mode 100644 patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java create mode 100644 patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Position.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Position.java new file mode 100644 index 0000000000..dd7694feb6 --- /dev/null +++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Position.java @@ -0,0 +1,51 @@ +package com.baeldung.prototype; + +public final class Position { + + private final int x; + private final int y; + + public Position(int x, int y) { + this.x = x; + this.y = y; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + x; + result = prime * result + y; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Position other = (Position) obj; + if (x != other.x) + return false; + if (y != other.y) + return false; + return true; + } + + @Override + public String toString() { + return "Position [x=" + x + ", y=" + y + "]"; + } + +} diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java new file mode 100644 index 0000000000..242ed2176e --- /dev/null +++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java @@ -0,0 +1,54 @@ +package com.baeldung.prototype; + +public class Tree implements TreeCloneable { + + private double mass; + private double height; + private Position position; + + public Tree(double mass, double height) { + this.mass = mass; + this.height = height; + } + + public void setMass(double mass) { + this.mass = mass; + } + + public void setHeight(double height) { + this.height = height; + } + + public void setPosition(Position position) { + this.position = position; + } + + public double getMass() { + return mass; + } + + public double getHeight() { + return height; + } + + public Position getPosition() { + return position; + } + + @Override + public TreeCloneable createA_Clone() { + TreeCloneable tree = null; + try { + tree = (TreeCloneable) super.clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return tree; + } + + @Override + public String toString() { + return "SomeTree [mass=" + mass + ", height=" + height + ", position=" + position + "]"; + } + +} diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java new file mode 100644 index 0000000000..e554058624 --- /dev/null +++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java @@ -0,0 +1,7 @@ +package com.baeldung.prototype; + +public interface TreeCloneable extends Cloneable { + + public TreeCloneable createA_Clone(); + +} diff --git a/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java new file mode 100644 index 0000000000..7f260c52bf --- /dev/null +++ b/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java @@ -0,0 +1,24 @@ +package com.baeldung.prototype; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class TreePrototypeUnitTest { + + @Test + public void givenATreePrototypeWhenClonedThenCreateA_Clone() { + double mass = 10.0; + double height = 3.7; + Position position = new Position(3, 7); + Position otherPosition = new Position(4, 8); + + Tree tree = new Tree(mass, height); + tree.setPosition(position); + Tree anotherTree = (Tree) tree.createA_Clone(); + anotherTree.setPosition(otherPosition); + + assertEquals(position, tree.getPosition()); + assertEquals(otherPosition, anotherTree.getPosition()); + } +} From 5fa271fe024d6bbcb96f8308038abd1fd8ab7287 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Sat, 12 Oct 2019 15:51:21 +0530 Subject: [PATCH 038/304] BAEL-3209 - Adding elements in Java Array vs ArrayList --- .../array/operations/ArrayOperations.java | 30 +++++++++++ .../operations/ArrayListOperations.java | 23 +++++++++ .../operations/ArrayOperationsUnitTest.java | 32 ++++++++++++ .../ArrayListOperationsUnitTest.java | 50 +++++++++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/array/operations/ArrayOperations.java create mode 100644 core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/arraylist/operations/ArrayListOperations.java create mode 100644 core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/array/operations/ArrayOperationsUnitTest.java create mode 100644 core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraylist/operations/ArrayListOperationsUnitTest.java diff --git a/core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/array/operations/ArrayOperations.java b/core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/array/operations/ArrayOperations.java new file mode 100644 index 0000000000..8d9c4d6730 --- /dev/null +++ b/core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/array/operations/ArrayOperations.java @@ -0,0 +1,30 @@ +package com.baeldung.array.operations; + +public class ArrayOperations { + + public static Integer[] addElementUsingPureJava(Integer[] srcArray, int elementToAdd) { + Integer[] destArray = new Integer[srcArray.length + 1]; + + for (int i = 0; i < srcArray.length; i++) { + destArray[i] = srcArray[i]; + } + + destArray[destArray.length - 1] = elementToAdd; + return destArray; + } + + public static int[] insertAnElementAtAGivenIndex(final int[] srcArray, int index, int newElement) { + int[] destArray = new int[srcArray.length + 1]; + int j = 0; + for (int i = 0; i < destArray.length - 1; i++) { + + if (i == index) { + destArray[i] = newElement; + } else { + destArray[i] = srcArray[j]; + j++; + } + } + return destArray; + } +} diff --git a/core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/arraylist/operations/ArrayListOperations.java b/core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/arraylist/operations/ArrayListOperations.java new file mode 100644 index 0000000000..b2aed553da --- /dev/null +++ b/core-java-modules/core-java-arrays-2/src/main/java/com/baeldung/arraylist/operations/ArrayListOperations.java @@ -0,0 +1,23 @@ +package com.baeldung.arraylist.operations; + +import java.util.ArrayList; + +public class ArrayListOperations { + + public static Integer getAnIntegerElement(ArrayList anArrayList, int index) { + return anArrayList.get(index); + } + + public static void modifyAnIntegerElement(ArrayList anArrayList, int index, Integer newElement) { + anArrayList.set(index, newElement); + } + + public static void appendAnIntegerElement(ArrayList anArrayList, Integer newElement) { + anArrayList.add(newElement); + } + + public static void insertAnIntegerElementAtIndex(ArrayList anArrayList, int index, Integer newElement) { + anArrayList.add(index, newElement); + } + +} diff --git a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/array/operations/ArrayOperationsUnitTest.java b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/array/operations/ArrayOperationsUnitTest.java new file mode 100644 index 0000000000..5ed27f2dbb --- /dev/null +++ b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/array/operations/ArrayOperationsUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.array.operations; + +import org.junit.jupiter.api.Test; +import static org.junit.Assert.assertArrayEquals; +import static org.assertj.core.api.Assertions.assertThat; + +public class ArrayOperationsUnitTest { + + @Test + public void givenSourceArrayAndElement_whenAddElementUsingPureJavaIsInvoked_thenNewElementMustBeAdded() { + Integer[] sourceArray = { 1, 2, 3, 4 }; + int elementToAdd = 5; + + Integer[] destArray = ArrayOperations.addElementUsingPureJava(sourceArray, elementToAdd); + + Integer[] expectedArray = { 1, 2, 3, 4, 5 }; + assertArrayEquals(expectedArray, destArray); + } + + @Test + public void whenInsertAnElementAtAGivenIndexCalled_thenShiftTheFollowingElementsAndInsertTheElementInArray() { + int[] expectedArray = { 1, 4, 2, 3, 0 }; + int[] anArray = new int[4]; + anArray[0] = 1; + anArray[1] = 2; + anArray[2] = 3; + int[] outputArray = ArrayOperations.insertAnElementAtAGivenIndex(anArray, 1, 4); + + assertThat(outputArray).containsExactly(expectedArray); + } + +} diff --git a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraylist/operations/ArrayListOperationsUnitTest.java b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraylist/operations/ArrayListOperationsUnitTest.java new file mode 100644 index 0000000000..1ec7645d8f --- /dev/null +++ b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraylist/operations/ArrayListOperationsUnitTest.java @@ -0,0 +1,50 @@ +package com.baeldung.arraylist.operations; + +import java.util.ArrayList; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + +public class ArrayListOperationsUnitTest { + + private ArrayList anArrayList; + + @BeforeEach + public void setupDefaults() { + anArrayList = new ArrayList<>(); + anArrayList.add(2); + anArrayList.add(3); + anArrayList.add(4); + } + + @Test + public void whenGetAnIntegerElementCalled_thenReturnTheIntegerElement() { + Integer output = ArrayListOperations.getAnIntegerElement(anArrayList, 1); + + assertThat(output).isEqualTo(3); + } + + @Test + public void whenModifyAnIntegerElementCalled_thenModifyTheIntegerElement() { + ArrayListOperations.modifyAnIntegerElement(anArrayList, 2, 5); + Integer output = ArrayListOperations.getAnIntegerElement(anArrayList, 2); + + assertThat(output).isEqualTo(5); + } + + @Test + public void whenAppendAnIntegerElementCalled_thenTheIntegerElementIsAppendedToArrayList() { + ArrayListOperations.appendAnIntegerElement(anArrayList, 6); + Integer output = ArrayListOperations.getAnIntegerElement(anArrayList, anArrayList.size() - 1); + + assertThat(output).isEqualTo(6); + } + + @Test + public void whenInsertAnIntegerAtIndexCalled_thenTheIntegerElementIsInseredToArrayList() { + ArrayListOperations.insertAnIntegerElementAtIndex(anArrayList, 1, 10); + Integer output = ArrayListOperations.getAnIntegerElement(anArrayList, 1); + + assertThat(output).isEqualTo(10); + } +} \ No newline at end of file From b47497cfc2d8619be3a18d46044fe1032c8293c8 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 12 Oct 2019 12:41:48 +0200 Subject: [PATCH 039/304] remove evaluation article codes --- .../hexagonal/AccountApplication.java | 21 -------- .../com/baeldung/hexagonal/IOCContainer.java | 54 ------------------- .../hexagonal/central/domain/Account.java | 42 --------------- .../hexagonal/central/domain/AccountType.java | 7 --- .../repository/IAccountRepository.java | 9 ---- .../central/service/AccountService.java | 32 ----------- .../central/service/IAccountService.java | 7 --- .../hexagonal/central/ui/IAccountUI.java | 9 ---- .../baeldung/hexagonal/input/ConsoleUI.java | 54 ------------------- .../output/InMemoryAccountRepository.java | 23 -------- 10 files changed, 258 deletions(-) delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java deleted file mode 100644 index d4dd34312d..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/AccountApplication.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.hexagonal; - -import java.util.Map; - -import com.baeldung.hexagonal.input.ConsoleUI; - -public class AccountApplication extends IOCContainer { - - public static void main(String[] args) { - - AccountApplication app = new AccountApplication(); - - ConsoleUI console = app.get(ConsoleUI.class); - console.printWelcomeMessage(); - - Map parameters = console.readParameters(); - console.create(parameters); - - } - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java deleted file mode 100644 index 49ff1955ee..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/IOCContainer.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.hexagonal; - -import com.baeldung.hexagonal.central.service.AccountService; -import com.baeldung.hexagonal.central.service.IAccountService; -import com.baeldung.hexagonal.input.ConsoleUI; -import com.baeldung.hexagonal.output.InMemoryAccountRepository; - -public class IOCContainer { - - private ConsoleUI consoleAdapter; - private AccountService accountService; - private InMemoryAccountRepository inMemoryAccountRepository; - - public T get(Class clazz) { - - if (ConsoleUI.class.isAssignableFrom(clazz)) { - return (T) getConsoleAdapter(); - } - - if (IAccountService.class.isAssignableFrom(clazz)) { - return (T) getAccountService(); - } - - if (InMemoryAccountRepository.class.isAssignableFrom(clazz)) { - return (T) getInMemoryAccountRepository(); - } - - return null; - } - - private ConsoleUI getConsoleAdapter() { - if (consoleAdapter == null) { - consoleAdapter = new ConsoleUI(); - consoleAdapter.setAccountService(getAccountService()); - } - return consoleAdapter; - } - - private IAccountService getAccountService() { - if (accountService == null) { - accountService = new AccountService(); - accountService.setAccountRepository(getInMemoryAccountRepository()); - } - return accountService; - } - - private InMemoryAccountRepository getInMemoryAccountRepository() { - if (inMemoryAccountRepository == null) { - inMemoryAccountRepository = new InMemoryAccountRepository(); - } - return inMemoryAccountRepository; - } - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java deleted file mode 100644 index 2ecb602690..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/Account.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.baeldung.hexagonal.central.domain; - -import java.util.UUID; - -public class Account { - - private UUID id; - - private String name; - - private AccountType type; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public AccountType getType() { - return type; - } - - public void setType(AccountType type) { - this.type = type; - } - - @Override - public String toString() { - return "Account [name=" + name + ", type=" + type + "]"; - } - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java deleted file mode 100644 index a0ec54ce7f..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/domain/AccountType.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.baeldung.hexagonal.central.domain; - -public enum AccountType { - - USER, MODERATOR, ADMIN - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java deleted file mode 100644 index 6863d04740..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/repository/IAccountRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.hexagonal.central.repository; - -import com.baeldung.hexagonal.central.domain.Account; - -public interface IAccountRepository { - - public void save(Account account); - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java deleted file mode 100644 index 97fa1fd7f9..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/AccountService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.hexagonal.central.service; - -import com.baeldung.hexagonal.central.domain.Account; -import com.baeldung.hexagonal.central.domain.AccountType; -import com.baeldung.hexagonal.central.repository.IAccountRepository; - -public class AccountService implements IAccountService { - - private IAccountRepository accountRepository; - - public void setAccountRepository(IAccountRepository accountRepository) { - this.accountRepository = accountRepository; - } - - @Override - public void createAccount(String name, String type) { - - Account account = new Account(); - account.setName(name); - - if ("user".equals(type)) { - account.setType(AccountType.USER); - } - if ("mod".equals(type)) { - account.setType(AccountType.MODERATOR); - } - - accountRepository.save(account); - - } - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java deleted file mode 100644 index 1df98ef49e..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/service/IAccountService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.baeldung.hexagonal.central.service; - -public interface IAccountService { - - public void createAccount(String name, String type); - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java deleted file mode 100644 index fbb7cef914..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/central/ui/IAccountUI.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.hexagonal.central.ui; - -import java.util.Map; - -public interface IAccountUI { - - public void create(Map parameters); - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java deleted file mode 100644 index 7c1bacfac3..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/input/ConsoleUI.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.hexagonal.input; - -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; - -import com.baeldung.hexagonal.central.service.IAccountService; -import com.baeldung.hexagonal.central.ui.IAccountUI; - -public class ConsoleUI implements IAccountUI { - - private IAccountService accountService; - - public void setAccountService(IAccountService accountService) { - this.accountService = accountService; - } - - public void printWelcomeMessage() { - - StringBuilder sb = new StringBuilder(); - sb.append("Welcome to Account Application!"); - sb.append("\n"); - sb.append("Usage:"); - sb.append("* new account:"); - sb.append("\tcreate "); - - System.out.println(sb.toString()); - } - - public Map readParameters() { - - Scanner scanner = new Scanner(System.in); - - Map params = new HashMap<>(); - - String name = scanner.next(); - String type = scanner.next(); - - params.put("name", name); - params.put("type", type); - - return params; - } - - @Override - public void create(Map parameters) { - - String name = parameters.get("name"); - String type = parameters.get("type"); - - accountService.createAccount(name, type); - } - -} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java b/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java deleted file mode 100644 index 22924e6b23..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/hexagonal/output/InMemoryAccountRepository.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.hexagonal.output; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import com.baeldung.hexagonal.central.domain.Account; -import com.baeldung.hexagonal.central.repository.IAccountRepository; - -public class InMemoryAccountRepository implements IAccountRepository { - - private List accountList = new ArrayList<>(); - - @Override - public void save(Account account) { - - account.setId(UUID.randomUUID()); - - accountList.add(account); - - } - -} From 6ad475d93fc9b67dd0b933a7827e76382d2f30f6 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 12 Oct 2019 13:28:35 +0200 Subject: [PATCH 040/304] fix name clash --- annotations/{readme.md => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename annotations/{readme.md => README.md} (100%) diff --git a/annotations/readme.md b/annotations/README.md similarity index 100% rename from annotations/readme.md rename to annotations/README.md From 641548b00fa5fb77857dc4e24629b8cccb472572 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 12 Oct 2019 13:33:41 +0200 Subject: [PATCH 041/304] fix name clash --- core-java-modules/core-java-arrays-2/README.MD | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 core-java-modules/core-java-arrays-2/README.MD diff --git a/core-java-modules/core-java-arrays-2/README.MD b/core-java-modules/core-java-arrays-2/README.MD deleted file mode 100644 index f272f4d299..0000000000 --- a/core-java-modules/core-java-arrays-2/README.MD +++ /dev/null @@ -1,5 +0,0 @@ -## Relevant Articles - -- [Extending an Array’s Length](https://www.baeldung.com/java-array-add-element-at-the-end) -- [Checking If an Array Is Sorted in Java](https://www.baeldung.com/java-check-sorted-array) -- [Looping Diagonally Through a 2d Java Array](https://www.baeldung.com/java-loop-diagonal-array) From e08fce79d893bf512df4c76dd1bb3d5a333dff47 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 12 Oct 2019 13:36:04 +0200 Subject: [PATCH 042/304] fix name clash --- osgi/README.md | 94 +++++++++++++++++++ spring-boot-autoconfiguration/README.MD | 7 -- spring-boot-libraries/README.MD | 7 -- spring-boot-testing/README.MD | 9 -- spring-cloud-data-flow/README.MD | 2 - spring-cloud/spring-cloud-bootstrap/README.MD | 15 --- spring-cloud/spring-cloud-gateway/README.MD | 2 - spring-security-mvc-boot/README.MD | 15 --- 8 files changed, 94 insertions(+), 57 deletions(-) create mode 100644 osgi/README.md delete mode 100644 spring-boot-autoconfiguration/README.MD delete mode 100644 spring-boot-libraries/README.MD delete mode 100644 spring-boot-testing/README.MD delete mode 100644 spring-cloud-data-flow/README.MD delete mode 100644 spring-cloud/spring-cloud-bootstrap/README.MD delete mode 100644 spring-cloud/spring-cloud-gateway/README.MD delete mode 100644 spring-security-mvc-boot/README.MD diff --git a/osgi/README.md b/osgi/README.md new file mode 100644 index 0000000000..e380ae06c3 --- /dev/null +++ b/osgi/README.md @@ -0,0 +1,94 @@ +OSGi +==== + +Info +--- + +com.baeldung.osgi +com.baeldung.osgi.sample.activator + +Apache Felix +--- + + +### Start + +Download Apache Felix Framework Distribution +from +org.apache.felix.main.distribution-5.6.8 + +No! The Apache Karaf container is best. +Download it from: + +Download a binary distribution and unzip wherever you prefer. + +Then run + + bin\karaf.bat start + + +Unzip, pay attention to the files not being clipped(!). + + system:exit + +exit! + + shutdown -h + +or `^D` + +### clean start + +full clean, remove "data directory " + +or... + + bin\karaf.bat clean + + bin\start.bat clean + +### run mode + +can be launched in + +- the "regular" mode starts Apache Karaf in foreground, including the shell console. +- the "server" mode starts Apache Karaf in foreground, without the shell console. +- the "background" mode starts Apache Karaf in background. + +### Logging + +https://karaf.apache.org/manual/latest/#_log + +can be logged to console + + +### Bundle deploy + + bundle:install mvn:com.baeldung/osgi-intro-sample-activator/1.0-SNAPSHOT + + install mvn:com.baeldung/osgi-intro-sample-service/1.0-SNAPSHOT + install mvn:com.baeldung/osgi-intro-sample-client/1.0-SNAPSHOT + +Eclipse's Equinox +==== + +Eclipse's OSGi platform +http://www.eclipse.org/equinox/ + +http://www.eclipse.org/equinox/documents/quickstart-framework.php + +click on "download" + +Latest Release +Oxygen.1 Wed, 6 Sep 2017 -- 17:00 (-0400) + +org.eclipse.osgi_3.12.1.v20170821-1548.jar + + = = NOT GOOD = = + + ## Relevant articles: + - [Introduction to OSGi](http://www.baeldung.com/osgi) + + + + diff --git a/spring-boot-autoconfiguration/README.MD b/spring-boot-autoconfiguration/README.MD deleted file mode 100644 index dc9cad539a..0000000000 --- a/spring-boot-autoconfiguration/README.MD +++ /dev/null @@ -1,7 +0,0 @@ -### The Course -The "REST With Spring" Classes: http://bit.ly/restwithspring - -### Relevant Articles: - -- [Create a Custom Auto-Configuration with Spring Boot](http://www.baeldung.com/spring-boot-custom-auto-configuration) -- [Guide to ApplicationContextRunner in Spring Boot](https://www.baeldung.com/spring-boot-context-runner) diff --git a/spring-boot-libraries/README.MD b/spring-boot-libraries/README.MD deleted file mode 100644 index f3706e0fa4..0000000000 --- a/spring-boot-libraries/README.MD +++ /dev/null @@ -1,7 +0,0 @@ -### The Course -The "REST With Spring" Classes: http://bit.ly/restwithspring - -### Relevant Articles: - -- [Guide to ShedLock with Spring](https://www.baeldung.com/shedlock-spring) -- [A Guide to the Problem Spring Web Library](https://www.baeldung.com/problem-spring-web) diff --git a/spring-boot-testing/README.MD b/spring-boot-testing/README.MD deleted file mode 100644 index 7a4c4f53a1..0000000000 --- a/spring-boot-testing/README.MD +++ /dev/null @@ -1,9 +0,0 @@ -### The Course -The "REST With Spring" Classes: http://bit.ly/restwithspring - -### Relevant Articles: - -- [Testing with Spring and Spock](https://www.baeldung.com/spring-spock-testing) -- [Exclude Auto-Configuration Classes in Spring Boot Tests](https://www.baeldung.com/spring-boot-exclude-auto-configuration-test) -- [Setting the Log Level in Spring Boot when Testing](https://www.baeldung.com/spring-boot-testing-log-level) -- [Embedded Redis Server with Spring Boot Test](https://www.baeldung.com/spring-embedded-redis) diff --git a/spring-cloud-data-flow/README.MD b/spring-cloud-data-flow/README.MD deleted file mode 100644 index f2ab96de2c..0000000000 --- a/spring-cloud-data-flow/README.MD +++ /dev/null @@ -1,2 +0,0 @@ - -This is an aggregator module for Spring Cloud Data Flow modules. diff --git a/spring-cloud/spring-cloud-bootstrap/README.MD b/spring-cloud/spring-cloud-bootstrap/README.MD deleted file mode 100644 index 7a3a94c8e3..0000000000 --- a/spring-cloud/spring-cloud-bootstrap/README.MD +++ /dev/null @@ -1,15 +0,0 @@ -### Relevant Articles: -- [Spring Cloud – Bootstrapping](http://www.baeldung.com/spring-cloud-bootstrapping) -- [Spring Cloud – Securing Services](http://www.baeldung.com/spring-cloud-securing-services) -- [Spring Cloud – Tracing Services with Zipkin](http://www.baeldung.com/tracing-services-with-zipkin) -- [Spring Cloud Series – The Gateway Pattern](http://www.baeldung.com/spring-cloud-gateway-pattern) -- [Spring Cloud – Adding Angular 4](http://www.baeldung.com/spring-cloud-angular) - -- To run the project: - - copy the appliction-config folder to c:\Users\{username}\ on Windows or /home/{username}/ on *nix. Then open a git bash terminal in application-config and run: - - git init - - git add . - - git commit -m "First commit" - - start the config server - - start the discovery server - - start all the other servers in any order (gateway, svc-book, svc-rating, zipkin) diff --git a/spring-cloud/spring-cloud-gateway/README.MD b/spring-cloud/spring-cloud-gateway/README.MD deleted file mode 100644 index d945ae949c..0000000000 --- a/spring-cloud/spring-cloud-gateway/README.MD +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Articles: -- [Exploring the new Spring Cloud Gateway](http://www.baeldung.com/spring-cloud-gateway) diff --git a/spring-security-mvc-boot/README.MD b/spring-security-mvc-boot/README.MD deleted file mode 100644 index 20036283a3..0000000000 --- a/spring-security-mvc-boot/README.MD +++ /dev/null @@ -1,15 +0,0 @@ -### The Course -The "REST With Spring" Classes: http://github.learnspringsecurity.com - -### Relevant Articles: -- [A Custom Security Expression with Spring Security](http://www.baeldung.com/spring-security-create-new-custom-security-expression) -- [Custom AccessDecisionVoters in Spring Security](http://www.baeldung.com/spring-security-custom-voter) -- [Spring Security: Authentication with a Database-backed UserDetailsService](http://www.baeldung.com/spring-security-authentication-with-a-database) -- [Two Login Pages with Spring Security](http://www.baeldung.com/spring-security-two-login-pages) -- [Multiple Entry Points in Spring Security](http://www.baeldung.com/spring-security-multiple-entry-points) -- [Multiple Authentication Providers in Spring Security](http://www.baeldung.com/spring-security-multiple-auth-providers) -- [Granted Authority Versus Role in Spring Security](http://www.baeldung.com/spring-security-granted-authority-vs-role) -- [Spring Data with Spring Security](https://www.baeldung.com/spring-data-security) -- [Spring Security – Whitelist IP Range](https://www.baeldung.com/spring-security-whitelist-ip-range) -- [Find the Registered Spring Security Filters](https://www.baeldung.com/spring-security-registered-filters) -- [HTTPS using Self-Signed Certificate in Spring Boot](https://www.baeldung.com/spring-boot-https-self-signed-certificate) From 51e9e905411bb00697b2ac834d9a68e153fddd0d Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sat, 12 Oct 2019 19:57:05 +0200 Subject: [PATCH 043/304] creating package per deserialization method --- .../jackson/deserialization/enums/City.java | 15 ++ .../deserialization/enums/Distance.java | 27 ++ .../enums/customdeserializer/City.java | 15 ++ .../CustomEnumDeserializer.java | 8 +- .../enums/customdeserializer/Distance.java | 29 +++ .../enums/jsoncreator/City.java | 15 ++ .../enums/jsoncreator/Distance.java | 44 ++++ .../enums/jsonproperty/City.java | 15 ++ .../enums/jsonproperty/Distance.java | 47 ++++ .../deserialization/enums/jsonvalue/City.java | 15 ++ .../enums/jsonvalue/Distance.java | 31 +++ .../com/baeldung/jackson/entities/City.java | 235 ------------------ .../DefaultJacksonEnumDeserialization.java | 19 ++ .../JacksonEnumCustomDeserialization.java | 18 ++ ...onEnumDeserializationUsingJsonCreator.java | 19 ++ ...nEnumDeserializationUsingJsonProperty.java | 20 ++ ...ksonEnumDeserializationUsingJsonValue.java | 19 ++ .../JacksonEnumDeserializationUnitTest.java | 52 ---- 18 files changed, 351 insertions(+), 292 deletions(-) create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/City.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/City.java rename jackson/src/main/java/com/baeldung/jackson/deserialization/enums/{ => customdeserializer}/CustomEnumDeserializer.java (68%) create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/Distance.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsoncreator/City.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsoncreator/Distance.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonproperty/City.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonproperty/Distance.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonvalue/City.java create mode 100644 jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonvalue/Distance.java delete mode 100644 jackson/src/main/java/com/baeldung/jackson/entities/City.java create mode 100644 jackson/src/test/java/com/baeldung/jackson/deserialization/enums/DefaultJacksonEnumDeserialization.java create mode 100644 jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/JacksonEnumCustomDeserialization.java create mode 100644 jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/JacksonEnumDeserializationUsingJsonCreator.java create mode 100644 jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/JacksonEnumDeserializationUsingJsonProperty.java create mode 100644 jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/JacksonEnumDeserializationUsingJsonValue.java delete mode 100644 jackson/src/test/java/com/baeldung/jackson/enums/JacksonEnumDeserializationUnitTest.java diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/City.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/City.java new file mode 100644 index 0000000000..2bbef534c3 --- /dev/null +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/City.java @@ -0,0 +1,15 @@ +package com.baeldung.jackson.deserialization.enums; + +public class City { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + +} diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java new file mode 100644 index 0000000000..ce332d34ae --- /dev/null +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java @@ -0,0 +1,27 @@ +package com.baeldung.jackson.deserialization.enums; + +public enum Distance { + + KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); + + private String unit; + private final double meters; + + private Distance(String unit, double meters) { + this.unit = unit; + this.meters = meters; + } + + public double getMeters() { + return meters; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } +} + diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/City.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/City.java new file mode 100644 index 0000000000..36ef7e244a --- /dev/null +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/City.java @@ -0,0 +1,15 @@ +package com.baeldung.jackson.deserialization.enums.customdeserializer; + +public class City { + + private Distance distance; + + public Distance getDistance() { + return distance; + } + + public void setDistance(Distance distance) { + this.distance = distance; + } + +} diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/CustomEnumDeserializer.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/CustomEnumDeserializer.java similarity index 68% rename from jackson/src/main/java/com/baeldung/jackson/deserialization/enums/CustomEnumDeserializer.java rename to jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/CustomEnumDeserializer.java index 3b99490e0b..21be368e01 100644 --- a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/CustomEnumDeserializer.java +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/CustomEnumDeserializer.java @@ -1,15 +1,13 @@ -package com.baeldung.jackson.deserialization.enums; +package com.baeldung.jackson.deserialization.enums.customdeserializer; import java.io.IOException; -import com.baeldung.jackson.entities.City; -import com.baeldung.jackson.entities.City.CityWithCustomDeserializationEnum.Distance; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -public class CustomEnumDeserializer extends StdDeserializer { +public class CustomEnumDeserializer extends StdDeserializer { private static final long serialVersionUID = -1166032307856492833L; @@ -22,7 +20,7 @@ public class CustomEnumDeserializer extends StdDeserializer Date: Sun, 13 Oct 2019 09:43:31 +0200 Subject: [PATCH 044/304] #BAEL-16646 remove duplicated modules - fix the build --- core-java-modules/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index d9b432008b..68ece1c473 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -19,8 +19,6 @@ core-java-lang-operators core-java-networking-2 core-java-security-manager - core-java-datetime-conversion - core-java-datetime-string From f37d003192f7cf65fc2adbd22167410e2ea06f93 Mon Sep 17 00:00:00 2001 From: fejera Date: Sun, 13 Oct 2019 18:00:43 +0200 Subject: [PATCH 045/304] BAEL-3089 - created examples for @SecondaryTable article --- persistence-modules/java-jpa-2/pom.xml | 11 ++- .../multipleentities/AllergensAsEntity.java | 73 ++++++++++++++ .../MealWithMultipleEntities.java | 75 ++++++++++++++ .../secondarytable/MealAsSingleEntity.java | 99 +++++++++++++++++++ .../embeddable/AllergensAsEmbeddable.java | 47 +++++++++ .../embeddable/MealWithEmbeddedAllergens.java | 78 +++++++++++++++ .../main/resources/META-INF/persistence.xml | 30 ++++++ .../MultipleTablesIntegrationTest.java | 79 +++++++++++++++ .../src/test/resources/multipletables.sql | 8 ++ 9 files changed, 498 insertions(+), 2 deletions(-) create mode 100644 persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/AllergensAsEntity.java create mode 100644 persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/MealWithMultipleEntities.java create mode 100644 persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/MealAsSingleEntity.java create mode 100644 persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/AllergensAsEmbeddable.java create mode 100644 persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/MealWithEmbeddedAllergens.java create mode 100644 persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/multipletables/MultipleTablesIntegrationTest.java create mode 100644 persistence-modules/java-jpa-2/src/test/resources/multipletables.sql diff --git a/persistence-modules/java-jpa-2/pom.xml b/persistence-modules/java-jpa-2/pom.xml index fdd482f833..3cbc15beed 100644 --- a/persistence-modules/java-jpa-2/pom.xml +++ b/persistence-modules/java-jpa-2/pom.xml @@ -1,5 +1,4 @@ - 4.0.0 java-jpa-2 @@ -47,6 +46,13 @@ ${postgres.version} runtime + + + org.assertj + assertj-core + ${assertj.version} + test + @@ -106,6 +112,7 @@ 2.7.4-RC1 42.2.5 2.2 + 3.11.1 \ No newline at end of file diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/AllergensAsEntity.java b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/AllergensAsEntity.java new file mode 100644 index 0000000000..e5e228d013 --- /dev/null +++ b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/AllergensAsEntity.java @@ -0,0 +1,73 @@ +package com.baeldung.jpa.multipletables.multipleentities; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.OneToOne; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.Table; + +import com.baeldung.jpa.multipletables.secondarytable.MealAsSingleEntity; + +@Entity +@Table(name = "allergens") +public class AllergensAsEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "meal_id") + private Long mealId; + + @OneToOne + @PrimaryKeyJoinColumn(name = "meal_id") + private MealAsSingleEntity meal; + + @Column(name = "peanuts") + private boolean peanuts; + + @Column(name = "celery") + private boolean celery; + + @Column(name = "sesame_seeds") + private boolean sesameSeeds; + + public MealAsSingleEntity getMeal() { + return meal; + } + + public void setMeal(MealAsSingleEntity meal) { + this.meal = meal; + } + + public boolean isPeanuts() { + return peanuts; + } + + public void setPeanuts(boolean peanuts) { + this.peanuts = peanuts; + } + + public boolean isCelery() { + return celery; + } + + public void setCelery(boolean celery) { + this.celery = celery; + } + + public boolean isSesameSeeds() { + return sesameSeeds; + } + + public void setSesameSeeds(boolean sesameSeeds) { + this.sesameSeeds = sesameSeeds; + } + + @Override + public String toString() { + return "AllergensAsEntity [peanuts=" + peanuts + ", celery=" + celery + ", sesameSeeds=" + sesameSeeds + "]"; + } + +} diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/MealWithMultipleEntities.java b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/MealWithMultipleEntities.java new file mode 100644 index 0000000000..74105f8f1f --- /dev/null +++ b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/multipleentities/MealWithMultipleEntities.java @@ -0,0 +1,75 @@ +package com.baeldung.jpa.multipletables.multipleentities; + +import java.math.BigDecimal; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.OneToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "meal") +public class MealWithMultipleEntities { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "description") + private String description; + + @Column(name = "price") + private BigDecimal price; + + @OneToOne(mappedBy = "meal") + private AllergensAsEntity allergens; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public AllergensAsEntity getAllergens() { + return allergens; + } + + public void setAllergens(AllergensAsEntity allergens) { + this.allergens = allergens; + } + + public Long getId() { + return id; + } + + @Override + public String toString() { + return "MealWithMultipleEntities [id=" + id + ", name=" + name + ", description=" + description + ", price=" + price + ", allergens=" + allergens + "]"; + } + +} diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/MealAsSingleEntity.java b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/MealAsSingleEntity.java new file mode 100644 index 0000000000..2929f391a4 --- /dev/null +++ b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/MealAsSingleEntity.java @@ -0,0 +1,99 @@ +package com.baeldung.jpa.multipletables.secondarytable; + +import java.math.BigDecimal; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.SecondaryTable; +import javax.persistence.Table; + +@Entity +@Table(name = "meal") +@SecondaryTable(name = "allergens", pkJoinColumns = @PrimaryKeyJoinColumn(name = "meal_id")) +public class MealAsSingleEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "description") + private String description; + + @Column(name = "price") + private BigDecimal price; + + @Column(name = "peanuts", table = "allergens") + private boolean peanuts; + + @Column(name = "celery", table = "allergens") + private boolean celery; + + @Column(name = "sesame_seeds", table = "allergens") + private boolean sesameSeeds; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public boolean isPeanuts() { + return peanuts; + } + + public void setPeanuts(boolean peanuts) { + this.peanuts = peanuts; + } + + public boolean isCelery() { + return celery; + } + + public void setCelery(boolean celery) { + this.celery = celery; + } + + public boolean isSesameSeeds() { + return sesameSeeds; + } + + public void setSesameSeeds(boolean sesameSeeds) { + this.sesameSeeds = sesameSeeds; + } + + public Long getId() { + return id; + } + + @Override + public String toString() { + return "MealAsSingleEntity [id=" + id + ", name=" + name + ", description=" + description + ", price=" + price + ", peanuts=" + peanuts + ", celery=" + celery + ", sesameSeeds=" + sesameSeeds + "]"; + } + +} diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/AllergensAsEmbeddable.java b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/AllergensAsEmbeddable.java new file mode 100644 index 0000000000..1c1f05890b --- /dev/null +++ b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/AllergensAsEmbeddable.java @@ -0,0 +1,47 @@ +package com.baeldung.jpa.multipletables.secondarytable.embeddable; + +import javax.persistence.Column; +import javax.persistence.Embeddable; + +@Embeddable +public class AllergensAsEmbeddable { + + @Column(name = "peanuts", table = "allergens") + private boolean peanuts; + + @Column(name = "celery", table = "allergens") + private boolean celery; + + @Column(name = "sesame_seeds", table = "allergens") + private boolean sesameSeeds; + + public boolean isPeanuts() { + return peanuts; + } + + public void setPeanuts(boolean peanuts) { + this.peanuts = peanuts; + } + + public boolean isCelery() { + return celery; + } + + public void setCelery(boolean celery) { + this.celery = celery; + } + + public boolean isSesameSeeds() { + return sesameSeeds; + } + + public void setSesameSeeds(boolean sesameSeeds) { + this.sesameSeeds = sesameSeeds; + } + + @Override + public String toString() { + return "AllergensAsEmbeddable [peanuts=" + peanuts + ", celery=" + celery + ", sesameSeeds=" + sesameSeeds + "]"; + } + +} diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/MealWithEmbeddedAllergens.java b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/MealWithEmbeddedAllergens.java new file mode 100644 index 0000000000..87a83157d7 --- /dev/null +++ b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/multipletables/secondarytable/embeddable/MealWithEmbeddedAllergens.java @@ -0,0 +1,78 @@ +package com.baeldung.jpa.multipletables.secondarytable.embeddable; + +import java.math.BigDecimal; + +import javax.persistence.Column; +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.SecondaryTable; +import javax.persistence.Table; + +@Entity +@Table(name = "meal") +@SecondaryTable(name = "allergens", pkJoinColumns = @PrimaryKeyJoinColumn(name = "meal_id")) +public class MealWithEmbeddedAllergens { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "description") + private String description; + + @Column(name = "price") + private BigDecimal price; + + @Embedded + private AllergensAsEmbeddable allergens; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public AllergensAsEmbeddable getAllergens() { + return allergens; + } + + public void setAllergens(AllergensAsEmbeddable allergens) { + this.allergens = allergens; + } + + public Long getId() { + return id; + } + + @Override + public String toString() { + return "MealWithEmbeddedAllergens [id=" + id + ", name=" + name + ", description=" + description + ", price=" + price + ", allergens=" + allergens + "]"; + } + +} diff --git a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml index 62d7ce0f5e..0602a82f6c 100644 --- a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml @@ -119,4 +119,34 @@ + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.multipletables.multipleentities.MealWithMultipleEntities + com.baeldung.jpa.multipletables.multipleentities.AllergensAsEntity + + com.baeldung.jpa.multipletables.secondarytable.MealAsSingleEntity + + com.baeldung.jpa.multipletables.secondarytable.embeddable.MealWithEmbeddedAllergens + com.baeldung.jpa.multipletables.secondarytable.embeddable.AllergensAsEmbeddable + + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/multipletables/MultipleTablesIntegrationTest.java b/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/multipletables/MultipleTablesIntegrationTest.java new file mode 100644 index 0000000000..99b2cd69ee --- /dev/null +++ b/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/multipletables/MultipleTablesIntegrationTest.java @@ -0,0 +1,79 @@ +package com.baeldung.jpa.multipletables; + +import static org.assertj.core.api.Assertions.*; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.baeldung.jpa.multipletables.multipleentities.MealWithMultipleEntities; +import com.baeldung.jpa.multipletables.secondarytable.MealAsSingleEntity; +import com.baeldung.jpa.multipletables.secondarytable.embeddable.MealWithEmbeddedAllergens; + +public class MultipleTablesIntegrationTest { + + private static EntityManagerFactory emf; + private static EntityManager em; + + @BeforeClass + public static void setup() { + emf = Persistence.createEntityManagerFactory("jpa-h2-multipltables"); + em = emf.createEntityManager(); + } + + @Test + public void entityManager_shouldLoadMealAsSingleEntity() { + // given + + // when + MealAsSingleEntity meal = em.find(MealAsSingleEntity.class, 1L); + + // then + assertThat(meal).isNotNull(); + assertThat(meal.getId()).isEqualTo(1L); + assertThat(meal.isPeanuts()).isFalse(); + assertThat(meal.isCelery()).isTrue(); + } + + @Test + public void entityManager_shouldLoadMealWithEmbeddedAllergens() { + // given + + // when + MealWithEmbeddedAllergens meal = em.find(MealWithEmbeddedAllergens.class, 1L); + + // then + assertThat(meal).isNotNull(); + assertThat(meal.getId()).isEqualTo(1L); + assertThat(meal.getAllergens()).isNotNull(); + assertThat(meal.getAllergens().isPeanuts()).isFalse(); + assertThat(meal.getAllergens().isCelery()).isTrue(); + } + + @Test + public void entityManager_shouldLoadMealWithAllergensEntity() { + // given + + // when + MealWithMultipleEntities meal = em.find(MealWithMultipleEntities.class, 1L); + + // then + assertThat(meal).isNotNull(); + assertThat(meal.getId()).isEqualTo(1L); + assertThat(meal.getAllergens()).isNotNull(); + assertThat(meal.getAllergens().isPeanuts()).isFalse(); + assertThat(meal.getAllergens().isCelery()).isTrue(); + } + + @AfterClass + public static void teardown() { + if (emf != null) { + emf.close(); + } + } + +} diff --git a/persistence-modules/java-jpa-2/src/test/resources/multipletables.sql b/persistence-modules/java-jpa-2/src/test/resources/multipletables.sql new file mode 100644 index 0000000000..226e63258b --- /dev/null +++ b/persistence-modules/java-jpa-2/src/test/resources/multipletables.sql @@ -0,0 +1,8 @@ +drop table if exists allergens; +drop table if exists meal; + +create table meal (id bigint auto_increment, name varchar(255) not null, description varchar(255) not null, price decimal(19, 2) not null, primary key (id)); +create table allergens (meal_id bigint auto_increment, peanuts number(1) not null, celery number(1) not null, sesame_seeds number(1) not null, primary key (meal_id)); + +insert into meal (id, name, description, price) values (1, 'Pizza', 'Delicious', 5); +insert into allergens (meal_id, peanuts, celery, sesame_seeds) values (1, 0, 1, 0); From 0b4a228333ad54dddf4d6ca66020af803aa0e83e Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 13 Oct 2019 21:39:18 +0200 Subject: [PATCH 046/304] #BAEL-16646 comment out Java 9 modules - fix the build --- pom.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 3fae6829c7..11a0902317 100644 --- a/pom.xml +++ b/pom.xml @@ -393,8 +393,8 @@ core-java-modules/core-java-streams core-java-modules/core-java-function core-java-modules/core-java-lang-math - core-java-modules/core-java-datetime-conversion - core-java-modules/core-java-datetime-string + + core-java-modules/core-java-text core-java-modules/core-java-lambdas @@ -482,7 +482,6 @@ java-collections-maps java-collections-maps-2 java-jdi - java-lite @@ -1153,8 +1152,8 @@ core-java-modules/core-java-streams core-java-modules/core-java-function core-java-modules/core-java-lang-math - core-java-modules/core-java-datetime-conversion - core-java-modules/core-java-datetime-string + + core-java-modules/core-java-text From 16e764c942b08449701a7b24521570ea1188bd11 Mon Sep 17 00:00:00 2001 From: Gang Date: Mon, 14 Oct 2019 14:48:50 -0600 Subject: [PATCH 047/304] BAEL-3349 Knapsack problem implementation in Java --- .../algorithms/knapsack/Knapsack.java | 32 ++++++++++++++ .../algorithms/knapsack/KnapsackUnitTest.java | 44 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java create mode 100644 algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/knapsack/KnapsackUnitTest.java diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java new file mode 100644 index 0000000000..a53ab21429 --- /dev/null +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java @@ -0,0 +1,32 @@ +package com.baeldung.algorithms.knapsack; + +class Knapsack { + + public int knapsackRec(int[] w, int[] v, int n, int W) { + if (n <= 0) + return 0; + else if (w[n - 1] > W) + return knapsackRec(w, v, n - 1, W); + else + return Math.max(knapsackRec(w, v, n - 1, W), v[n - 1] + knapsackRec(w, v, n - 1, W - w[n - 1])); + } + + public int knapsackDP(int[] w, int[] v, int n, int W) { + if (n <= 0 || W <= 0) + return 0; + int[][] m = new int[n + 1][W + 1]; + for (int j = 0; j <= W; j++) { + m[0][j] = 0; + } + + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= W; j++) { + if (w[i - 1] > j) + m[i][j] = m[i - 1][j]; + else + m[i][j] = Math.max(m[i - 1][j], m[i - 1][j - w[i - 1]] + v[i - 1]); + } + } + return m[n][W]; + } +} diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/knapsack/KnapsackUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/knapsack/KnapsackUnitTest.java new file mode 100644 index 0000000000..b168e6b1eb --- /dev/null +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/knapsack/KnapsackUnitTest.java @@ -0,0 +1,44 @@ +package com.baeldung.algorithms.knapsack; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class KnapsackUnitTest { + + @Test + public void givenWeightsandValues_whenCalculateMax_thenOutputCorrectResult() { + final int[] w = new int[] { 23, 26, 20, 18, 32, 27, 29, 26, 30, 27 }; + final int[] v = new int[] { 505, 352, 458, 220, 354, 414, 498, 545, 473, 543 }; + final int n = 10; + final int W = 67; + final Knapsack knapsack = new Knapsack(); + + assertEquals(1270, knapsack.knapsackRec(w, v, n, W)); + assertEquals(1270, knapsack.knapsackDP(w, v, n, W)); + } + + @Test + public void givenZeroItems_whenCalculateMax_thenOutputZero() { + final int[] w = new int[] {}; + final int[] v = new int[] {}; + final int n = 0; + final int W = 67; + final Knapsack knapsack = new Knapsack(); + + assertEquals(0, knapsack.knapsackRec(w, v, n, W)); + assertEquals(0, knapsack.knapsackDP(w, v, n, W)); + } + + @Test + public void givenZeroWeightLimit_whenCalculateMax_thenOutputZero() { + final int[] w = new int[] { 23, 26, 20, 18, 32, 27, 29, 26, 30, 27 }; + final int[] v = new int[] { 505, 352, 458, 220, 354, 414, 498, 545, 473, 543 }; + final int n = 10; + final int W = 0; + final Knapsack knapsack = new Knapsack(); + + assertEquals(0, knapsack.knapsackRec(w, v, n, W)); + assertEquals(0, knapsack.knapsackDP(w, v, n, W)); + } +} From 6557a8472029c76ff8a079ddcaf598cb250b3cbf Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:29:18 +0800 Subject: [PATCH 048/304] Update README.md --- testing-modules/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testing-modules/README.md b/testing-modules/README.md index c6098d1210..645d3546df 100644 --- a/testing-modules/README.md +++ b/testing-modules/README.md @@ -1,3 +1,5 @@ ## Testing Modules This is an aggregator module containing multiple modules focused on testing libraries. +### Relevant Articles: +[Introduction to Lambda Behave](https://www.baeldung.com/lambda-behave) From ccb7e2cf8186a3e20ddecca9565dae55939b829a Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:30:33 +0800 Subject: [PATCH 049/304] Update README.md --- testing-modules/mockito/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/mockito/README.md b/testing-modules/mockito/README.md index 6b8f53ffee..92a4e1f688 100644 --- a/testing-modules/mockito/README.md +++ b/testing-modules/mockito/README.md @@ -14,3 +14,4 @@ - [Mocking Void Methods with Mockito](https://www.baeldung.com/mockito-void-methods) - [Mock Final Classes and Methods with Mockito](https://www.baeldung.com/mockito-final) - [Testing Callbacks with Mockito](https://www.baeldung.com/mockito-callbacks) +- [Mockito – Using Spies](https://www.baeldung.com/mockito-spy) From 315cd095e046b184b34b77d7c8b7066fe6691188 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:31:22 +0800 Subject: [PATCH 050/304] Update README.md --- testing-modules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing-modules/README.md b/testing-modules/README.md index 645d3546df..232cf5819d 100644 --- a/testing-modules/README.md +++ b/testing-modules/README.md @@ -2,4 +2,4 @@ This is an aggregator module containing multiple modules focused on testing libraries. ### Relevant Articles: -[Introduction to Lambda Behave](https://www.baeldung.com/lambda-behave) +- [Introduction to Lambda Behave](https://www.baeldung.com/lambda-behave) From 58d4efc714137452cf828434b62a4ebdf89c162e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:35:28 +0800 Subject: [PATCH 051/304] Create README.md --- spring-all/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-all/README.md diff --git a/spring-all/README.md b/spring-all/README.md new file mode 100644 index 0000000000..2b9f61c76d --- /dev/null +++ b/spring-all/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [The @Scheduled Annotation in Spring](https://www.baeldung.com/spring-scheduled-tasks) From 8cff198ab1b7196fb9f302ee3b571814f9358748 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:36:42 +0800 Subject: [PATCH 052/304] Update README.md --- spring-boot-rest/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-rest/README.md b/spring-boot-rest/README.md index ffac9335fd..3909a99c65 100644 --- a/spring-boot-rest/README.md +++ b/spring-boot-rest/README.md @@ -10,6 +10,7 @@ This module contains articles about Spring Boot RESTful APIs. - [Testing REST with multiple MIME types](https://www.baeldung.com/testing-rest-api-with-multiple-media-types) - [Testing Web APIs with Postman Collections](https://www.baeldung.com/postman-testing-collections) - [Spring Boot Consuming and Producing JSON](https://www.baeldung.com/spring-boot-json) +- [Error Handling for REST with Spring](https://www.baeldung.com/exception-handling-for-rest-with-spring) ### E-book From 7d0f2b894f06cd21ddfaea8a429d587cce110925 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:43:14 +0800 Subject: [PATCH 053/304] Update README.md --- core-java-modules/core-java-annotations/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-annotations/README.md b/core-java-modules/core-java-annotations/README.md index a125e8abd5..93da3aea62 100644 --- a/core-java-modules/core-java-annotations/README.md +++ b/core-java-modules/core-java-annotations/README.md @@ -8,4 +8,5 @@ - [Java @SafeVarargs Annotation](https://www.baeldung.com/java-safevarargs) - [Java @Deprecated Annotation](https://www.baeldung.com/java-deprecated) - [Overview of Java Built-in Annotations](https://www.baeldung.com/java-default-annotations) -- [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) \ No newline at end of file +- [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) +- [Efficient Word Frequency Calculator in Java](https://www.baeldung.com/java-word-frequency) From 7dd89d191952dbf927366269962ba25bfe80b157 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:44:45 +0800 Subject: [PATCH 054/304] Update README.md --- testing-modules/mockito/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/mockito/README.md b/testing-modules/mockito/README.md index 92a4e1f688..7cef9ee8f6 100644 --- a/testing-modules/mockito/README.md +++ b/testing-modules/mockito/README.md @@ -15,3 +15,4 @@ - [Mock Final Classes and Methods with Mockito](https://www.baeldung.com/mockito-final) - [Testing Callbacks with Mockito](https://www.baeldung.com/mockito-callbacks) - [Mockito – Using Spies](https://www.baeldung.com/mockito-spy) +- [Quick Guide to BDDMockito](https://www.baeldung.com/bdd-mockito) From b923bfc6cd05011ca816120c7c390cf74f856213 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:47:18 +0800 Subject: [PATCH 055/304] Update README.md --- core-java-modules/core-java-collections-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-collections-2/README.md b/core-java-modules/core-java-collections-2/README.md index 13ca191edb..de5daddb38 100644 --- a/core-java-modules/core-java-collections-2/README.md +++ b/core-java-modules/core-java-collections-2/README.md @@ -12,4 +12,4 @@ - [Sorting in Java](https://www.baeldung.com/java-sorting) - [Getting the Size of an Iterable in Java](https://www.baeldung.com/java-iterable-size) - [Java Null-Safe Streams from Collections](https://www.baeldung.com/java-null-safe-streams-from-collections) - +- [Operating on and Removing an Item from Stream](https://www.baeldung.com/java-use-remove-item-stream) From 6636e67220333f82b5b6c13d82ddb6d82032629c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:49:16 +0800 Subject: [PATCH 056/304] Update README.md --- algorithms-miscellaneous-4/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md index fabb4d29b8..46df302aad 100644 --- a/algorithms-miscellaneous-4/README.md +++ b/algorithms-miscellaneous-4/README.md @@ -6,4 +6,5 @@ - [Find the Middle Element of a Linked List](https://www.baeldung.com/java-linked-list-middle-element) - [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings) - [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters) -- [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) \ No newline at end of file +- [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) +- [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) From 6b86ccdeb6dfcc5a69f7b860d46bf89ec336df8a Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 14:54:49 +0800 Subject: [PATCH 057/304] Update README.md --- spring-mvc-simple-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-simple-2/README.md b/spring-mvc-simple-2/README.md index a4a545ab72..c03fa6363a 100644 --- a/spring-mvc-simple-2/README.md +++ b/spring-mvc-simple-2/README.md @@ -5,4 +5,5 @@ This module contains articles about Spring MVC ## Relevant articles: - [How to Read HTTP Headers in Spring REST Controllers](https://www.baeldung.com/spring-rest-http-headers) - [A Custom Data Binder in Spring MVC](https://www.baeldung.com/spring-mvc-custom-data-binder) +- [Validating Lists in a Spring Controller](https://www.baeldung.com/spring-validate-list-controller) - More articles: [[<-- prev]](/spring-mvc-simple) From e6cb820aa972af05b1a4fed41fa6f088f813ee1b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:03:44 +0800 Subject: [PATCH 058/304] Update README.md --- algorithms-miscellaneous-4/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md index 46df302aad..e5e80505f8 100644 --- a/algorithms-miscellaneous-4/README.md +++ b/algorithms-miscellaneous-4/README.md @@ -8,3 +8,4 @@ - [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters) - [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) - [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) +- [Interpolation Search in Java](https://www.baeldung.com/java-interpolation-search) From 3442f1104e13d460ad83e147cfe4c5172c004499 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:06:35 +0800 Subject: [PATCH 059/304] Update README.md --- persistence-modules/sirix/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/persistence-modules/sirix/README.md b/persistence-modules/sirix/README.md index b0f6f8d04b..ab7fb65e44 100644 --- a/persistence-modules/sirix/README.md +++ b/persistence-modules/sirix/README.md @@ -1,3 +1,4 @@ ## Relevant articles: -- [Introduction to Sirix](https://www.baeldung.com/introduction-to-sirix) \ No newline at end of file +- [Introduction to Sirix](https://www.baeldung.com/introduction-to-sirix) +- [A Guide to SirixDB](https://www.baeldung.com/sirix) From 29b78d910e4bbbbe279037843ac7a70cc1a03935 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:15:32 +0800 Subject: [PATCH 060/304] Update README.md --- java-math/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-math/README.md b/java-math/README.md index 49ff5afde1..90d3b4ecc2 100644 --- a/java-math/README.md +++ b/java-math/README.md @@ -14,3 +14,4 @@ This module contains articles about math in Java. - [Convert Latitude and Longitude to a 2D Point in Java](https://www.baeldung.com/java-convert-latitude-longitude) - [Debugging with Eclipse](https://www.baeldung.com/eclipse-debugging) - [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication) +- [Calculating Logarithms in Java](https://www.baeldung.com/java-logarithms) From 288550e9d3c5500e0c90d1533943870909e1b106 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:16:48 +0800 Subject: [PATCH 061/304] Update README.md --- testing-modules/junit-5-advanced/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/junit-5-advanced/README.md b/testing-modules/junit-5-advanced/README.md index 61a65b2e5a..4a31292683 100644 --- a/testing-modules/junit-5-advanced/README.md +++ b/testing-modules/junit-5-advanced/README.md @@ -2,3 +2,4 @@ - [JUnit 5 TestWatcher API](https://www.baeldung.com/junit-testwatcher) - [JUnit Custom Display Name Generator API](https://www.baeldung.com/junit-custom-display-name-generator) +- [@TestInstance Annotation in JUnit 5](https://www.baeldung.com/junit-testinstance-annotation) From 80688329120bd9e9ad9e18f40a513501f127c990 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:20:04 +0800 Subject: [PATCH 062/304] Update README.md --- java-math/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-math/README.md b/java-math/README.md index 90d3b4ecc2..d80a07258a 100644 --- a/java-math/README.md +++ b/java-math/README.md @@ -15,3 +15,4 @@ This module contains articles about math in Java. - [Debugging with Eclipse](https://www.baeldung.com/eclipse-debugging) - [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication) - [Calculating Logarithms in Java](https://www.baeldung.com/java-logarithms) +- [Finding Greatest Common Divisor in Java](https://www.baeldung.com/java-greatest-common-divisor) From a59032ad836d68ff033d89437daa86a706755a56 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:22:17 +0800 Subject: [PATCH 063/304] Update README.md --- spring-thymeleaf-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-thymeleaf-2/README.md b/spring-thymeleaf-2/README.md index ce83032cb5..e7f0c60add 100644 --- a/spring-thymeleaf-2/README.md +++ b/spring-thymeleaf-2/README.md @@ -3,3 +3,4 @@ - [Working with Enums in Thymeleaf](https://www.baeldung.com/thymeleaf-enums) - [Changing the Thymeleaf Template Directory in Spring Boot](https://www.baeldung.com/spring-thymeleaf-template-directory) - [Spring Request Parameters with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-request-parameters) +- [Thymeleaf lists Utility Object](https://www.baeldung.com/thymeleaf-lists-utility) From 04e036f4bacf3f27d59d41cbc4384d64e25faa3a Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:23:24 +0800 Subject: [PATCH 064/304] Update README.md --- spring-resttemplate/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-resttemplate/README.md b/spring-resttemplate/README.md index e98af0e787..82d8234908 100644 --- a/spring-resttemplate/README.md +++ b/spring-resttemplate/README.md @@ -13,3 +13,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Mocking a RestTemplate in Spring](https://www.baeldung.com/spring-mock-rest-template) - [RestTemplate Post Request with JSON](https://www.baeldung.com/spring-resttemplate-post-json) - [Download a Large File Through a Spring RestTemplate](https://www.baeldung.com/spring-resttemplate-download-large-file) +- [Copy of RestTemplate Post Request with JSON](https://www.baeldung.com/spring-resttemplate-post-json-test) From 0e29b0835c9002d54d50300e3900c87b82d8ff3b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:33:22 +0800 Subject: [PATCH 065/304] Update README.md --- spring-freemarker/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-freemarker/README.md b/spring-freemarker/README.md index 410781f2ca..941777207f 100644 --- a/spring-freemarker/README.md +++ b/spring-freemarker/README.md @@ -4,3 +4,4 @@ This module contains articles about Spring with FreeMarker ### Relevant Articles: - [Introduction to Using FreeMarker in Spring MVC](https://www.baeldung.com/freemarker-in-spring-mvc-tutorial) +- [FreeMarker Common Operations](https://www.baeldung.com/freemarker-operations) From c7d1a4ffb18631a5e899ad296416142e0202b618 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:38:41 +0800 Subject: [PATCH 066/304] Create README.md --- gradle-5/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 gradle-5/README.md diff --git a/gradle-5/README.md b/gradle-5/README.md new file mode 100644 index 0000000000..7c9aeff07e --- /dev/null +++ b/gradle-5/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Run a Java main Method Using Gradle](https://www.baeldung.com/gradle-run-java-main) From 1c1ee58cb8f623eaa0e1f23e3c523e4269c6d199 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:39:56 +0800 Subject: [PATCH 067/304] Update README.md --- metrics/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/metrics/README.md b/metrics/README.md index f27f5fb795..6050b2b310 100644 --- a/metrics/README.md +++ b/metrics/README.md @@ -7,3 +7,4 @@ This module contains articles about metrics. - [Intro to Dropwizard Metrics](https://www.baeldung.com/dropwizard-metrics) - [Introduction to Netflix Servo](https://www.baeldung.com/netflix-servo) - [Quick Guide to Micrometer](https://www.baeldung.com/micrometer) +- [@Timed Annotation Using Metrics and AspectJ](https://www.baeldung.com/timed-metrics-aspectj) From 3a7b64b70b2e090f01058a660c96cda26b798138 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:41:04 +0800 Subject: [PATCH 068/304] Update README.md --- jhipster-5/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jhipster-5/README.md b/jhipster-5/README.md index ba05641af0..e4a6b3c3a0 100644 --- a/jhipster-5/README.md +++ b/jhipster-5/README.md @@ -1,3 +1,6 @@ ## JHipster 5 This module contains articles about JHipster 5. This is an aggregator module, articles are in the relevant submodules. + +### Relevant Articles: +- [JHipster Authentication with an External Service](https://www.baeldung.com/jhipster-authentication-external-service) From 88cbdd29f31ae5b1d8def2b2540859a01c3c6587 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:43:05 +0800 Subject: [PATCH 069/304] Update README.md --- spring-5/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-5/README.md b/spring-5/README.md index 7588d23304..8a0cbe807e 100644 --- a/spring-5/README.md +++ b/spring-5/README.md @@ -15,4 +15,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring ResponseStatusException](https://www.baeldung.com/spring-response-status-exception) - [Spring Assert Statements](https://www.baeldung.com/spring-assert) - [Configuring a Hikari Connection Pool with Spring Boot](https://www.baeldung.com/spring-boot-hikari) - +- [Difference between vs ](https://www.baeldung.com/spring-contextannotation-contextcomponentscan) From 343bf75950afe0ee04d66f5e878fb4aa43cea01e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:46:09 +0800 Subject: [PATCH 070/304] Create README.md --- linux-bash/loops/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 linux-bash/loops/README.md diff --git a/linux-bash/loops/README.md b/linux-bash/loops/README.md new file mode 100644 index 0000000000..8a0514f6f0 --- /dev/null +++ b/linux-bash/loops/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Linux Commands – Looping Through Directories](https://www.baeldung.com/linux/loop-directories) From ca89921512159a8921053961120f3e09e17b5b2d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:48:22 +0800 Subject: [PATCH 071/304] Update README.md --- mapstruct/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mapstruct/README.md b/mapstruct/README.md index b784820b98..6a42f4dc76 100644 --- a/mapstruct/README.md +++ b/mapstruct/README.md @@ -2,5 +2,6 @@ This module contains articles about MapStruct. -###Relevant Articles: +### Relevant Articles: - [Quick Guide to MapStruct](https://www.baeldung.com/mapstruct) +- [Custom Mapper with MapStruct](https://www.baeldung.com/mapstruct-custom-mapper) From 93d81b8813515627847454ef4ae880b54f51c6a3 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:50:04 +0800 Subject: [PATCH 072/304] Update README.md --- spring-mvc-xml/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-xml/README.md b/spring-mvc-xml/README.md index b6a34475ea..44a20e1527 100644 --- a/spring-mvc-xml/README.md +++ b/spring-mvc-xml/README.md @@ -14,6 +14,7 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [web.xml vs Initializer with Spring](https://www.baeldung.com/spring-xml-vs-java-config) - [A Java Web Application Without a web.xml](https://www.baeldung.com/java-web-app-without-web-xml) - [Validating RequestParams and PathVariables in Spring](https://www.baeldung.com/spring-validate-requestparam-pathvariable) +- [Debugging the Spring MVC 404 “No mapping found for HTTP request” Error](https://www.baeldung.com/spring-mvc-404-error) ## Spring MVC with XML Configuration Example Project - access a sample jsp page at: `http://localhost:8080/spring-mvc-xml/sample.html` From df1e4b8f55ba345f3c6934717791f1956d16daf1 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:51:35 +0800 Subject: [PATCH 073/304] Update README.md --- spring-5-data-reactive/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-5-data-reactive/README.md b/spring-5-data-reactive/README.md index 683b493317..42fcba96f2 100644 --- a/spring-5-data-reactive/README.md +++ b/spring-5-data-reactive/README.md @@ -10,3 +10,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring Data Reactive Repositories with MongoDB](https://www.baeldung.com/spring-data-mongodb-reactive) - [Spring Data MongoDB Tailable Cursors](https://www.baeldung.com/spring-data-mongodb-tailable-cursors) - [A Quick Look at R2DBC with Spring Data](https://www.baeldung.com/spring-data-r2dbc) +- [Spring Data Reactive Repositories with Couchbase](https://www.baeldung.com/spring-data-reactive-couchbase) From 6ffaa34a6a80fdeba990221c537742f043f989e7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:53:33 +0800 Subject: [PATCH 074/304] Update README.md --- java-strings-3/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-strings-3/README.md b/java-strings-3/README.md index 6276dfc621..7bc325243f 100644 --- a/java-strings-3/README.md +++ b/java-strings-3/README.md @@ -4,6 +4,6 @@ This module contains articles about strings in Java. ### Relevant Articles: - [Java String equalsIgnoreCase()](https://www.baeldung.com/java-string-equalsignorecase) -- [Finding the Difference Between Two Strings](https://www.baeldung.com/java-difference-between-two-strings) +- [Finding the Difference Between Two Strings in Java](https://www.baeldung.com/java-difference-between-two-strings) - [Counting Words in a String](https://www.baeldung.com/java-word-counting) - More articles: [[<-- prev>]](/java-strings-2) From 4435ac35f9de5d639cebd21817ebc2b3b8bd50af Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:56:29 +0800 Subject: [PATCH 075/304] Update README.md --- java-numbers-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-numbers-2/README.md b/java-numbers-2/README.md index 48f9acd32d..c625bed7ad 100644 --- a/java-numbers-2/README.md +++ b/java-numbers-2/README.md @@ -13,4 +13,5 @@ This module contains articles about numbers in Java. - [Binary Numbers in Java](https://www.baeldung.com/java-binary-numbers) - [Finding the Least Common Multiple in Java](https://www.baeldung.com/java-least-common-multiple) - [Binary Numbers in Java](https://www.baeldung.com/java-binary-numbers) +- [Generating Random Numbers in a Range in Java](https://www.baeldung.com/java-generating-random-numbers) - More articles: [[<-- prev]](/../java-numbers) From 4df590ed468f5b9e9c033b929768720306eb6924 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:57:33 +0800 Subject: [PATCH 076/304] Update README.md --- java-numbers-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-numbers-2/README.md b/java-numbers-2/README.md index c625bed7ad..e200c4aa03 100644 --- a/java-numbers-2/README.md +++ b/java-numbers-2/README.md @@ -14,4 +14,5 @@ This module contains articles about numbers in Java. - [Finding the Least Common Multiple in Java](https://www.baeldung.com/java-least-common-multiple) - [Binary Numbers in Java](https://www.baeldung.com/java-binary-numbers) - [Generating Random Numbers in a Range in Java](https://www.baeldung.com/java-generating-random-numbers) +- [Listing Numbers Within a Range in Java](https://www.baeldung.com/java-listing-numbers-within-a-range) - More articles: [[<-- prev]](/../java-numbers) From 5586ff86f65f225676132055200af8d0dee972bb Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:59:53 +0800 Subject: [PATCH 077/304] Update README.md --- spring-5-reactive-client/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-5-reactive-client/README.md b/spring-5-reactive-client/README.md index 1724db9e66..5a9a3f4e0e 100644 --- a/spring-5-reactive-client/README.md +++ b/spring-5-reactive-client/README.md @@ -7,4 +7,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles - [Simultaneous Spring WebClient Calls](https://www.baeldung.com/spring-webclient-simultaneous-calls) - +- [Logging Spring WebClient Calls](https://www.baeldung.com/spring-log-webclient-calls) From 970de49cf359f33b3b693d3b804a88604aa12ec8 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:03:30 +0800 Subject: [PATCH 078/304] Update README.MD --- libraries-primitive/README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries-primitive/README.MD b/libraries-primitive/README.MD index f27fb73dd6..9cb89f3552 100644 --- a/libraries-primitive/README.MD +++ b/libraries-primitive/README.MD @@ -1,3 +1,4 @@ ### Relevant Articles - [Guide to FastUtil](https://www.baeldung.com/fastutil) +- [Primitive Collections in Eclipse Collections](https://www.baeldung.com/java-eclipse-primitive-collections) From 31c52118db08fcd1fd86f732b0a74354e43711c6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:04:46 +0800 Subject: [PATCH 079/304] Update README.md --- jersey/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jersey/README.md b/jersey/README.md index 09de7051ca..366e7665f3 100644 --- a/jersey/README.md +++ b/jersey/README.md @@ -9,3 +9,4 @@ This module contains articles about Jersey. - [Set a Response Body in JAX-RS](https://www.baeldung.com/jax-rs-response) - [Exploring the Jersey Test Framework](https://www.baeldung.com/jersey-test) - [Explore Jersey Request Parameters](https://www.baeldung.com/jersey-request-parameters) +- [Add a Header to a Jersey SSE Client Request](https://www.baeldung.com/jersey-sse-client-request-headers) From 1259a15984bb8d3990f6547b480a1ecb016d4e44 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:06:06 +0800 Subject: [PATCH 080/304] Update README.md --- java-strings-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-strings-3/README.md b/java-strings-3/README.md index 7bc325243f..642752182f 100644 --- a/java-strings-3/README.md +++ b/java-strings-3/README.md @@ -6,4 +6,5 @@ This module contains articles about strings in Java. - [Java String equalsIgnoreCase()](https://www.baeldung.com/java-string-equalsignorecase) - [Finding the Difference Between Two Strings in Java](https://www.baeldung.com/java-difference-between-two-strings) - [Counting Words in a String](https://www.baeldung.com/java-word-counting) +- [Convert Character Array to String in Java](https://www.baeldung.com/java-char-array-to-string) - More articles: [[<-- prev>]](/java-strings-2) From 2b58354145cb602ff44f8872359d869ed2c76358 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:08:21 +0800 Subject: [PATCH 081/304] Update README.md --- spring-boot-autoconfiguration/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-autoconfiguration/README.md b/spring-boot-autoconfiguration/README.md index 67311eed50..b3a50ad7a5 100644 --- a/spring-boot-autoconfiguration/README.md +++ b/spring-boot-autoconfiguration/README.md @@ -9,3 +9,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Create a Custom Auto-Configuration with Spring Boot](https://www.baeldung.com/spring-boot-custom-auto-configuration) - [Guide to ApplicationContextRunner in Spring Boot](https://www.baeldung.com/spring-boot-context-runner) +- [A Guide to Spring Boot Configuration Metadata](https://www.baeldung.com/spring-boot-configuration-metadata) From 50d1feae2e463607af123f05c88dbb2930288d34 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:09:18 +0800 Subject: [PATCH 082/304] Update README.md --- xml/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/xml/README.md b/xml/README.md index d1aa3a798b..45f05a269d 100644 --- a/xml/README.md +++ b/xml/README.md @@ -10,3 +10,4 @@ This module contains articles about eXtensible Markup Language (XML) - [Write an org.w3.dom.Document to a File](https://www.baeldung.com/java-write-xml-document-file) - [Modifying an XML Attribute in Java](https://www.baeldung.com/java-modify-xml-attribute) - [Convert XML to HTML in Java](https://www.baeldung.com/java-convert-xml-to-html) +- [Parsing an XML File Using StAX](https://www.baeldung.com/java-stax) From 80f67dcdd2d487dbe21673dfec7908a4051ae152 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:11:09 +0800 Subject: [PATCH 083/304] Update README.md --- persistence-modules/spring-jpa/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-jpa/README.md b/persistence-modules/spring-jpa/README.md index d04e9f6f41..489d990fc3 100644 --- a/persistence-modules/spring-jpa/README.md +++ b/persistence-modules/spring-jpa/README.md @@ -13,6 +13,7 @@ - [Transactions with Spring 4 and JPA](http://www.baeldung.com/transaction-configuration-with-jpa-and-spring) - [Use Criteria Queries in a Spring Data Application](https://www.baeldung.com/spring-data-criteria-queries) - [Many-To-Many Relationship in JPA](https://www.baeldung.com/jpa-many-to-many) +- [Spring Persistence (Hibernate and JPA) with a JNDI datasource](https://www.baeldung.com/spring-persistence-hibernate-and-jpa-with-a-jndi-datasource/) ### Eclipse Config From 47af91317b6abfe68754a539cde4a98e8cbd482c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:12:27 +0800 Subject: [PATCH 084/304] Update README.md --- mapstruct/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mapstruct/README.md b/mapstruct/README.md index 6a42f4dc76..3107e06190 100644 --- a/mapstruct/README.md +++ b/mapstruct/README.md @@ -5,3 +5,4 @@ This module contains articles about MapStruct. ### Relevant Articles: - [Quick Guide to MapStruct](https://www.baeldung.com/mapstruct) - [Custom Mapper with MapStruct](https://www.baeldung.com/mapstruct-custom-mapper) +- [Using Multiple Source Objects with MapStruct](https://www.baeldung.com/mapstruct-multiple-source-objects) From 4acafe7baed1a22f2d832b0074c7d19fc65cbbf6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:13:47 +0800 Subject: [PATCH 085/304] Update README.md --- spring-mvc-simple-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-simple-2/README.md b/spring-mvc-simple-2/README.md index c03fa6363a..63227ea069 100644 --- a/spring-mvc-simple-2/README.md +++ b/spring-mvc-simple-2/README.md @@ -6,4 +6,5 @@ This module contains articles about Spring MVC - [How to Read HTTP Headers in Spring REST Controllers](https://www.baeldung.com/spring-rest-http-headers) - [A Custom Data Binder in Spring MVC](https://www.baeldung.com/spring-mvc-custom-data-binder) - [Validating Lists in a Spring Controller](https://www.baeldung.com/spring-validate-list-controller) +- [Spring Validation Message Interpolation](https://www.baeldung.com/spring-validation-message-interpolation) - More articles: [[<-- prev]](/spring-mvc-simple) From fc7e43c73c0182c836b048fed5815d517f371092 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:15:09 +0800 Subject: [PATCH 086/304] Update README.md --- core-groovy-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-groovy-2/README.md b/core-groovy-2/README.md index f1984f18f4..95a00a1f5b 100644 --- a/core-groovy-2/README.md +++ b/core-groovy-2/README.md @@ -12,4 +12,5 @@ This module contains articles about core Groovy concepts - [Concatenate Strings with Groovy](https://www.baeldung.com/groovy-concatenate-strings) - [Metaprogramming in Groovy](https://www.baeldung.com/groovy-metaprogramming) - [A Quick Guide to Working with Web Services in Groovy](https://www.baeldung.com/groovy-web-services) +- [Categories in Groovy](https://www.baeldung.com/groovy-categories) - [[<-- Prev]](/core-groovy) From 31fbccee2d5df247ed689436c6d7853dd8ada806 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:17:59 +0800 Subject: [PATCH 087/304] Update README.md --- java-dates-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-dates-2/README.md b/java-dates-2/README.md index b2f8319e58..70fd88558b 100644 --- a/java-dates-2/README.md +++ b/java-dates-2/README.md @@ -2,3 +2,4 @@ - [Converting Between LocalDate and XMLGregorianCalendar](https://www.baeldung.com/java-localdate-to-xmlgregoriancalendar) - [Convert Time to Milliseconds in Java](https://www.baeldung.com/java-time-milliseconds) - [Check If a String Is a Valid Date in Java](https://www.baeldung.com/java-string-valid-date) +- [Comparing Dates in Java](https://www.baeldung.com/java-comparing-dates) From 3fb3125429205e86703c9a46c01e8ecc7597d645 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:21:04 +0800 Subject: [PATCH 088/304] Update README.md --- spring-boot-admin/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-admin/README.md b/spring-boot-admin/README.md index ac4d781d0e..1a7acef6c1 100644 --- a/spring-boot-admin/README.md +++ b/spring-boot-admin/README.md @@ -24,3 +24,4 @@ and the mail configuration from application.properties ### Relevant Articles: - [A Guide to Spring Boot Admin](https://www.baeldung.com/spring-boot-admin) +- [Changing the Logging Level at the Runtime for a Spring Boot Application](https://www.baeldung.com/spring-boot-changing-log-level-at-runtime) From e899fa2ecea250b9c497cce8554178d7d48370a1 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:25:10 +0800 Subject: [PATCH 089/304] Create README.md --- persistence-modules/spring-boot-jdbi/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 persistence-modules/spring-boot-jdbi/README.md diff --git a/persistence-modules/spring-boot-jdbi/README.md b/persistence-modules/spring-boot-jdbi/README.md new file mode 100644 index 0000000000..5d171fb2ca --- /dev/null +++ b/persistence-modules/spring-boot-jdbi/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Using JDBI with Spring Boot](https://www.baeldung.com/spring-boot-jdbi) From 5d1eb27396e1dc8b30149714a2d196144ab477f6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:27:34 +0800 Subject: [PATCH 090/304] Update README.md --- algorithms-sorting/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-sorting/README.md b/algorithms-sorting/README.md index 4fd9d5e0c6..8b801e4387 100644 --- a/algorithms-sorting/README.md +++ b/algorithms-sorting/README.md @@ -16,3 +16,4 @@ This module contains articles about sorting algorithms. - [Selection Sort in Java](https://www.baeldung.com/java-selection-sort) - [Sorting Strings by Contained Numbers in Java](https://www.baeldung.com/java-sort-strings-contained-numbers) - [Radix Sort in Java](https://www.baeldung.com/java-radix-sort) +- [Bucket Sort in Java](https://www.baeldung.com/java-bucket-sort) From 809e99a0d1860c7a42549a96d8b6062138c2d090 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:28:58 +0800 Subject: [PATCH 091/304] Update README.md --- spring-boot-data/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-data/README.md b/spring-boot-data/README.md index 513c5fed18..eb3cd5bbaa 100644 --- a/spring-boot-data/README.md +++ b/spring-boot-data/README.md @@ -7,3 +7,4 @@ This module contains articles about Spring Boot with Spring Data - [Formatting JSON Dates in Spring Boot](https://www.baeldung.com/spring-boot-formatting-json-dates) - [Rendering Exceptions in JSON with Spring](https://www.baeldung.com/spring-exceptions-json) - [Disable Spring Data Auto Configuration](https://www.baeldung.com/spring-data-disable-auto-config) +- [Repositories with Multiple Spring Data Modules](https://www.baeldung.com/spring-multiple-data-modules) From c95133d0ff9b09d5df6cd90a337e325317c8b7ae Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:31:30 +0800 Subject: [PATCH 092/304] Update README.md --- ml/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml/README.md b/ml/README.md index 5fd32012b4..c70909465e 100644 --- a/ml/README.md +++ b/ml/README.md @@ -3,4 +3,4 @@ This module contains articles about Machine Learning (ML) in Java with [deeplearning4j](https://deeplearning4j.org). ### Relevant Articles: -- [Logistic Regression in Java](https://www.baeldung.com/) +- [Logistic Regression in Java](https://www.baeldung.com/java-logistic-regression) From 89e17bb6b844834e955463651bbca08aae1a5617 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:35:17 +0800 Subject: [PATCH 093/304] Update README.md --- jaxb/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxb/README.md b/jaxb/README.md index aca078af15..a471ccd39d 100644 --- a/jaxb/README.md +++ b/jaxb/README.md @@ -4,3 +4,4 @@ This module contains articles about JAXB. ### Relevant Articles: - [Guide to JAXB](https://www.baeldung.com/jaxb) +- [Unmarshalling Dates Using JAXB](https://www.baeldung.com/jaxb-unmarshalling-dates) From b20b9bdb3e3695f17769299691c17a675866fc4e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:43:53 +0800 Subject: [PATCH 094/304] Update README.md --- spring-core-2/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-core-2/README.md b/spring-core-2/README.md index bcb1ce1fb4..ec6eb91306 100644 --- a/spring-core-2/README.md +++ b/spring-core-2/README.md @@ -15,4 +15,5 @@ This module contains articles about core Spring functionality - [Spring Events](https://www.baeldung.com/spring-events) - [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations) - [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) -- More articles: [[<-- prev]](/spring-core) \ No newline at end of file +- [Guide to the Spring BeanFactory](https://www.baeldung.com/spring-beanfactory) +- More articles: [[<-- prev]](/spring-core) From b3e35da72974ca9ae1d8282f59528f68fea83a5b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:45:29 +0800 Subject: [PATCH 095/304] Update README.md --- testing-modules/hamcrest/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing-modules/hamcrest/README.md b/testing-modules/hamcrest/README.md index f2ff6b996d..cc1eeb3fbb 100644 --- a/testing-modules/hamcrest/README.md +++ b/testing-modules/hamcrest/README.md @@ -7,6 +7,6 @@ This module contains articles about Hamcrest - [Hamcrest File Matchers](https://www.baeldung.com/hamcrest-file-matchers) - [Hamcrest Object Matchers](https://www.baeldung.com/hamcrest-object-matchers) - [Hamcrest Bean Matchers](https://www.baeldung.com/hamcrest-bean-matchers) -- [Hamcrest Number Matchers](https://www.baeldung.com/hamcrest-number-matchers) +- [Using Hamcrest Number Matchers](https://www.baeldung.com/hamcrest-number-matchers) - [Hamcrest Common Core Matchers](https://www.baeldung.com/hamcrest-core-matchers) - [Hamcrest Custom Matchers](https://www.baeldung.com/hamcrest-custom-matchers) From 25f0d92073dae18d34b8217633737ed6465b53dd Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:47:04 +0800 Subject: [PATCH 096/304] Update README.md --- xml/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xml/README.md b/xml/README.md index 45f05a269d..78ed3a52a9 100644 --- a/xml/README.md +++ b/xml/README.md @@ -6,7 +6,7 @@ This module contains articles about eXtensible Markup Language (XML) - [Intro to XPath with Java](https://www.baeldung.com/java-xpath) - [Introduction to JiBX](https://www.baeldung.com/jibx) - [XML Libraries Support in Java](https://www.baeldung.com/java-xml-libraries) -- [DOM parsing with Xerces](https://www.baeldung.com/java-xerces-dom-parsing) +- [Working with XML Files in Java Using DOM Parsing](https://www.baeldung.com/java-xerces-dom-parsing) - [Write an org.w3.dom.Document to a File](https://www.baeldung.com/java-write-xml-document-file) - [Modifying an XML Attribute in Java](https://www.baeldung.com/java-modify-xml-attribute) - [Convert XML to HTML in Java](https://www.baeldung.com/java-convert-xml-to-html) From c4285d4b788780d03a1695df6d04f73768b477e0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 15 Oct 2019 16:50:52 +0800 Subject: [PATCH 097/304] Update README.md --- core-java-modules/core-java-lang-oop-3/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-lang-oop-3/README.md b/core-java-modules/core-java-lang-oop-3/README.md index 4ac6c3ffe9..bef0605577 100644 --- a/core-java-modules/core-java-lang-oop-3/README.md +++ b/core-java-modules/core-java-lang-oop-3/README.md @@ -7,11 +7,11 @@ This module contains articles about Object-oriented programming (OOP) in Java - [Access Modifiers in Java](https://www.baeldung.com/java-access-modifiers) - [Guide to the super Java Keyword](https://www.baeldung.com/java-super) - [Guide to the this Java Keyword](https://www.baeldung.com/java-this) -- [Java Public Access Modifier](https://www.baeldung.com/java-public-keyword) +- [Java ‘public’ Access Modifier](https://www.baeldung.com/java-public-keyword) - [Composition, Aggregation and Association in Java](https://www.baeldung.com/java-composition-aggregation-association) - [Nested Classes in Java](https://www.baeldung.com/java-nested-classes) - [A Guide to Inner Interfaces in Java](https://www.baeldung.com/java-inner-interfaces) - [Java Classes and Objects](https://www.baeldung.com/java-classes-objects) - [Java Interfaces](https://www.baeldung.com/java-interfaces) - [Static and Dynamic Binding in Java](https://www.baeldung.com/java-static-dynamic-binding) -- [[<-- Prev]](/core-java-modules/core-java-lang-oop-2) \ No newline at end of file +- [[<-- Prev]](/core-java-modules/core-java-lang-oop-2) From 546701f1f7c53d5628c6be1034abffaf3fb8cf26 Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Tue, 15 Oct 2019 12:42:06 +0200 Subject: [PATCH 098/304] renaming unit tests + removing unused final keyword --- .../baeldung/jackson/deserialization/enums/Distance.java | 6 +++++- .../enums/customdeserializer/CustomEnumDeserializer.java | 8 ++++---- .../enums/customdeserializer/Distance.java | 6 +++++- .../deserialization/enums/jsoncreator/Distance.java | 6 +++++- .../deserialization/enums/jsonproperty/Distance.java | 6 +++++- .../jackson/deserialization/enums/jsonvalue/Distance.java | 6 +++++- ...ation.java => DefaultEnumDeserializationUnitTest.java} | 4 ++-- ...zation.java => EnumCustomDeserializationUnitTest.java} | 4 ++-- ...a => EnumDeserializationUsingJsonCreatorUnitTest.java} | 4 ++-- ... => EnumDeserializationUsingJsonPropertyUnitTest.java} | 4 ++-- ...ava => EnumDeserializationUsingJsonValueUnitTest.java} | 4 ++-- 11 files changed, 39 insertions(+), 19 deletions(-) rename jackson/src/test/java/com/baeldung/jackson/deserialization/enums/{DefaultJacksonEnumDeserialization.java => DefaultEnumDeserializationUnitTest.java} (73%) rename jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/{JacksonEnumCustomDeserialization.java => EnumCustomDeserializationUnitTest.java} (72%) rename jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/{JacksonEnumDeserializationUsingJsonCreator.java => EnumDeserializationUsingJsonCreatorUnitTest.java} (72%) rename jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/{JacksonEnumDeserializationUsingJsonProperty.java => EnumDeserializationUsingJsonPropertyUnitTest.java} (71%) rename jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/{JacksonEnumDeserializationUsingJsonValue.java => EnumDeserializationUsingJsonValueUnitTest.java} (71%) diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java index ce332d34ae..2c96b6eb80 100644 --- a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/Distance.java @@ -5,13 +5,17 @@ public enum Distance { KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); private String unit; - private final double meters; + private double meters; private Distance(String unit, double meters) { this.unit = unit; this.meters = meters; } + public void setMeters(double meters) { + this.meters = meters; + } + public double getMeters() { return meters; } diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/CustomEnumDeserializer.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/CustomEnumDeserializer.java index 21be368e01..bae0c0df34 100644 --- a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/CustomEnumDeserializer.java +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/CustomEnumDeserializer.java @@ -15,14 +15,14 @@ public class CustomEnumDeserializer extends StdDeserializer { this(null); } - public CustomEnumDeserializer(Class vc) { - super(vc); + public CustomEnumDeserializer(Class c) { + super(c); } @Override - public Distance deserialize(final JsonParser jsonParser, final DeserializationContext ctxt) throws IOException, JsonProcessingException { + public Distance deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException { - final JsonNode node = jsonParser.getCodec().readTree(jsonParser); + JsonNode node = jsonParser.getCodec().readTree(jsonParser); String unit = node.get("unit").asText(); double meters = node.get("meters").asDouble(); diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/Distance.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/Distance.java index 4766b43435..9cb3a0c391 100644 --- a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/Distance.java +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/customdeserializer/Distance.java @@ -8,7 +8,7 @@ public enum Distance { KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); private String unit; - private final double meters; + private double meters; private Distance(String unit, double meters) { this.unit = unit; @@ -19,6 +19,10 @@ public enum Distance { return meters; } + public void setMeters(double meters) { + this.meters = meters; + } + public String getUnit() { return unit; } diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsoncreator/Distance.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsoncreator/Distance.java index 05c089ef69..18235fb5c6 100644 --- a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsoncreator/Distance.java +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsoncreator/Distance.java @@ -8,13 +8,17 @@ public enum Distance { KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); private String unit; - private final double meters; + private double meters; private Distance(String unit, double meters) { this.unit = unit; this.meters = meters; } + public void setMeters(double meters) { + this.meters = meters; + } + public double getMeters() { return meters; } diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonproperty/Distance.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonproperty/Distance.java index 2d324d7f8e..e671a9ae5b 100644 --- a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonproperty/Distance.java +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonproperty/Distance.java @@ -23,13 +23,17 @@ public enum Distance { MILLIMETER("mm", 0.001); private String unit; - private final double meters; + private double meters; private Distance(String unit, double meters) { this.unit = unit; this.meters = meters; } + public void setMeters(double meters) { + this.meters = meters; + } + public double getMeters() { return meters; } diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonvalue/Distance.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonvalue/Distance.java index 06a6f870f5..44bb5f20c3 100644 --- a/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonvalue/Distance.java +++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/enums/jsonvalue/Distance.java @@ -7,13 +7,17 @@ public enum Distance { KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); private String unit; - private final double meters; + private double meters; private Distance(String unit, double meters) { this.unit = unit; this.meters = meters; } + public void setMeters(double meters) { + this.meters = meters; + } + @JsonValue public double getMeters() { return meters; diff --git a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/DefaultJacksonEnumDeserialization.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/DefaultEnumDeserializationUnitTest.java similarity index 73% rename from jackson/src/test/java/com/baeldung/jackson/deserialization/enums/DefaultJacksonEnumDeserialization.java rename to jackson/src/test/java/com/baeldung/jackson/deserialization/enums/DefaultEnumDeserializationUnitTest.java index 12c9ffa10c..c7ce96e013 100644 --- a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/DefaultJacksonEnumDeserialization.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/DefaultEnumDeserializationUnitTest.java @@ -6,10 +6,10 @@ import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; -public class DefaultJacksonEnumDeserialization { +public class DefaultEnumDeserializationUnitTest { @Test - public final void givenEnum_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + public void givenEnum_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { String json = "{\"distance\":\"KILOMETER\"}"; City city = new ObjectMapper().readValue(json, City.class); diff --git a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/JacksonEnumCustomDeserialization.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/EnumCustomDeserializationUnitTest.java similarity index 72% rename from jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/JacksonEnumCustomDeserialization.java rename to jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/EnumCustomDeserializationUnitTest.java index 02354a336f..e8dbfa8df8 100644 --- a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/JacksonEnumCustomDeserialization.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/customdeserializer/EnumCustomDeserializationUnitTest.java @@ -6,10 +6,10 @@ import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; -public class JacksonEnumCustomDeserialization { +public class EnumCustomDeserializationUnitTest { @Test - public final void givenEnumWithCustomDeserializer_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + public void givenEnumWithCustomDeserializer_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; City city = new ObjectMapper().readValue(json, City.class); diff --git a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/JacksonEnumDeserializationUsingJsonCreator.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/EnumDeserializationUsingJsonCreatorUnitTest.java similarity index 72% rename from jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/JacksonEnumDeserializationUsingJsonCreator.java rename to jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/EnumDeserializationUsingJsonCreatorUnitTest.java index eaa06d34b0..d778cbe26b 100644 --- a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/JacksonEnumDeserializationUsingJsonCreator.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsoncreator/EnumDeserializationUsingJsonCreatorUnitTest.java @@ -6,10 +6,10 @@ import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; -public class JacksonEnumDeserializationUsingJsonCreator { +public class EnumDeserializationUsingJsonCreatorUnitTest { @Test - public final void givenEnumWithJsonCreator_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + public void givenEnumWithJsonCreator_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; City city = new ObjectMapper().readValue(json, City.class); diff --git a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/JacksonEnumDeserializationUsingJsonProperty.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/EnumDeserializationUsingJsonPropertyUnitTest.java similarity index 71% rename from jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/JacksonEnumDeserializationUsingJsonProperty.java rename to jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/EnumDeserializationUsingJsonPropertyUnitTest.java index 2743727f98..134f4a29cc 100644 --- a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/JacksonEnumDeserializationUsingJsonProperty.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonproperty/EnumDeserializationUsingJsonPropertyUnitTest.java @@ -6,10 +6,10 @@ import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; -public class JacksonEnumDeserializationUsingJsonProperty { +public class EnumDeserializationUsingJsonPropertyUnitTest { @Test - public final void givenEnumWithJsonProperty_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + public void givenEnumWithJsonProperty_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { String json = "{\"distance\": \"distance-in-km\"}"; City city = new ObjectMapper().readValue(json, City.class); diff --git a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/JacksonEnumDeserializationUsingJsonValue.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/EnumDeserializationUsingJsonValueUnitTest.java similarity index 71% rename from jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/JacksonEnumDeserializationUsingJsonValue.java rename to jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/EnumDeserializationUsingJsonValueUnitTest.java index d49cd4771b..85afcb9a69 100644 --- a/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/JacksonEnumDeserializationUsingJsonValue.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/enums/jsonvalue/EnumDeserializationUsingJsonValueUnitTest.java @@ -6,10 +6,10 @@ import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; -public class JacksonEnumDeserializationUsingJsonValue { +public class EnumDeserializationUsingJsonValueUnitTest { @Test - public final void givenEnumWithJsonValue_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { + public void givenEnumWithJsonValue_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { String json = "{\"distance\": \"0.0254\"}"; City city = new ObjectMapper().readValue(json, City.class); From c27a4c1238aaafa975237565947e7d003c6cf8eb Mon Sep 17 00:00:00 2001 From: "anshul.bansal" Date: Tue, 15 Oct 2019 15:29:22 +0300 Subject: [PATCH 099/304] removed already available method --- .../java/com/baeldung/springdatageode/repo/AuthorRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java index 3a311039a4..92f4165343 100644 --- a/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java +++ b/persistence-modules/spring-data-geode/src/main/java/com/baeldung/springdatageode/repo/AuthorRepository.java @@ -8,5 +8,4 @@ import org.springframework.data.repository.CrudRepository; public interface AuthorRepository extends CrudRepository { - Optional findById(Long id); } From 7bc98e99c10657757e04f29de371eaf0b2a4b622 Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Sun, 13 Oct 2019 12:48:59 +0530 Subject: [PATCH 100/304] BAEL-1363: Review Comments - applications port updated --- .../api-gateway/src/main/resources/application.yml | 4 ++-- .../weather-service/src/main/resources/application.yml | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml index 9a7d3314a3..4a0662a960 100644 --- a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/src/main/resources/application.yml @@ -2,7 +2,7 @@ spring: application: name: api-gateway server: - port: 8008 + port: 7070 zuul: igoredServices: '*' @@ -18,5 +18,5 @@ ribbon: weather-service: ribbon: - listOfServers: localhost:7070 + listOfServers: localhost:8080 diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml index 30ceeee438..242f842f44 100644 --- a/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/src/main/resources/application.yml @@ -1,5 +1,4 @@ spring: application: name: weather-service -server: - port: 7070 + From 85b5042cb7c6ca1c7c09dcfa7f782cc66648376e Mon Sep 17 00:00:00 2001 From: Gang Date: Tue, 15 Oct 2019 21:19:57 -0600 Subject: [PATCH 101/304] BAEL-3349, Add brackets and make the class public --- .../baeldung/algorithms/knapsack/Knapsack.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java index a53ab21429..61c3f05a95 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/knapsack/Knapsack.java @@ -1,19 +1,22 @@ package com.baeldung.algorithms.knapsack; -class Knapsack { +public class Knapsack { public int knapsackRec(int[] w, int[] v, int n, int W) { - if (n <= 0) + if (n <= 0) { return 0; - else if (w[n - 1] > W) + } else if (w[n - 1] > W) { return knapsackRec(w, v, n - 1, W); - else + } else { return Math.max(knapsackRec(w, v, n - 1, W), v[n - 1] + knapsackRec(w, v, n - 1, W - w[n - 1])); + } } public int knapsackDP(int[] w, int[] v, int n, int W) { - if (n <= 0 || W <= 0) + if (n <= 0 || W <= 0) { return 0; + } + int[][] m = new int[n + 1][W + 1]; for (int j = 0; j <= W; j++) { m[0][j] = 0; @@ -21,10 +24,11 @@ class Knapsack { for (int i = 1; i <= n; i++) { for (int j = 1; j <= W; j++) { - if (w[i - 1] > j) + if (w[i - 1] > j) { m[i][j] = m[i - 1][j]; - else + } else { m[i][j] = Math.max(m[i - 1][j], m[i - 1][j - w[i - 1]] + v[i - 1]); + } } } return m[n][W]; From 4dd386c5ec27412aec24e3d499e66ea1b97c8392 Mon Sep 17 00:00:00 2001 From: Alexander Molochko Date: Thu, 17 Oct 2019 03:01:56 +0300 Subject: [PATCH 102/304] BAEL-3200 Error handling with Spring AMQP --- .../errorhandling/ErrorHandlingApp.java | 25 +++++++ .../DLXCustomAmqpConfiguration.java | 43 +++++++++++ .../DLXDefaultAmqpConfiguration.java | 43 +++++++++++ .../DLXParkingLotAmqpConfiguration.java | 60 +++++++++++++++ ...talExceptionStrategyAmqpConfiguration.java | 54 +++++++++++++ ...ListenerErrorHandlerAmqpConfiguration.java | 46 ++++++++++++ .../SimpleDLQAmqpConfiguration.java | 34 +++++++++ .../consumer/MessagesConsumer.java | 75 +++++++++++++++++++ .../errorhandler/BusinessException.java | 4 + .../errorhandler/CustomErrorHandler.java | 14 ++++ .../CustomFatalExceptionStrategy.java | 10 +++ .../producer/MessageProducer.java | 24 ++++++ .../src/main/resources/application.properties | 1 + 13 files changed, 433 insertions(+) create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXDefaultAmqpConfiguration.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/BusinessException.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomErrorHandler.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomFatalExceptionStrategy.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/producer/MessageProducer.java create mode 100644 spring-amqp/src/main/resources/application.properties diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java new file mode 100644 index 0000000000..c006684083 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java @@ -0,0 +1,25 @@ +package com.baeldung.springamqp.errorhandling; + +import com.baeldung.springamqp.errorhandling.producer.MessageProducer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@EnableScheduling +public class ErrorHandlingApp { + @Autowired + MessageProducer messageProducer; + + public static void main(String[] args) { + SpringApplication.run(ErrorHandlingApp.class, args); + } + + @EventListener(ApplicationReadyEvent.class) + public void doSomethingAfterStartup() { + messageProducer.sendMessage(); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java new file mode 100644 index 0000000000..ba358cba52 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java @@ -0,0 +1,43 @@ +package com.baeldung.springamqp.errorhandling.configuration; + +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.*; + +//@Configuration +public class DLXCustomAmqpConfiguration { + public static final String DLX_EXCHANGE_MESSAGES = QUEUE_MESSAGES + ".dlx"; + + @Bean + Queue messagesQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES) + .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) + .build(); + } + + @Bean + FanoutExchange deadLetterExchange() { + return new FanoutExchange(DLX_EXCHANGE_MESSAGES); + } + + @Bean + Queue deadLetterQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES_DLQ).build(); + } + + @Bean + Binding deadLetterBinding() { + return BindingBuilder.bind(deadLetterQueue()).to(deadLetterExchange()); + } + + @Bean + DirectExchange messagesExchange() { + return new DirectExchange(EXCHANGE_MESSAGES); + } + + @Bean + Binding bindingMessages() { + return BindingBuilder.bind(messagesQueue()).to(messagesExchange()).with(QUEUE_MESSAGES); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXDefaultAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXDefaultAmqpConfiguration.java new file mode 100644 index 0000000000..6e576109f7 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXDefaultAmqpConfiguration.java @@ -0,0 +1,43 @@ +package com.baeldung.springamqp.errorhandling.configuration; + +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.*; + +//@Configuration +public class DLXDefaultAmqpConfiguration { + public static final String DLX_EXCHANGE_MESSAGES = QUEUE_MESSAGES + ".dlx"; + + @Bean + Queue messagesQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES) + .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) + .build(); + } + + @Bean + FanoutExchange deadLetterExchange() { + return new FanoutExchange(DLX_EXCHANGE_MESSAGES); + } + + @Bean + Queue deadLetterQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES_DLQ).build(); + } + + @Bean + Binding deadLetterBinding() { + return BindingBuilder.bind(deadLetterQueue()).to(deadLetterExchange()); + } + + @Bean + DirectExchange messagesExchange() { + return new DirectExchange(EXCHANGE_MESSAGES); + } + + @Bean + Binding bindingMessages() { + return BindingBuilder.bind(messagesQueue()).to(messagesExchange()).with(QUEUE_MESSAGES); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java new file mode 100644 index 0000000000..c11914605b --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java @@ -0,0 +1,60 @@ +package com.baeldung.springamqp.errorhandling.configuration; + +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.*; + +//@Configuration +public class DLXParkingLotAmqpConfiguration { + public static final String DLX_EXCHANGE_MESSAGES = QUEUE_MESSAGES + ".dlx"; + public static final String QUEUE_PARKING_LOT = QUEUE_MESSAGES + ".parking-lot"; + public static final String EXCHANGE_PARKING_LOT = QUEUE_MESSAGES + "exchange.parking-lot"; + + @Bean + FanoutExchange parkingLotExchange() { + return new FanoutExchange(EXCHANGE_PARKING_LOT); + } + + @Bean + Queue parkingLotQueue() { + return QueueBuilder.durable(QUEUE_PARKING_LOT).build(); + } + + @Bean + Binding parkingLotBinding() { + return BindingBuilder.bind(parkingLotQueue()).to(parkingLotExchange()); + } + + @Bean + Queue messagesQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES) + .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) + .build(); + } + + @Bean + FanoutExchange deadLetterExchange() { + return new FanoutExchange(DLX_EXCHANGE_MESSAGES); + } + + @Bean + Queue deadLetterQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES_DLQ).build(); + } + + @Bean + Binding deadLetterBinding() { + return BindingBuilder.bind(deadLetterQueue()).to(deadLetterExchange()); + } + + @Bean + DirectExchange messagesExchange() { + return new DirectExchange(EXCHANGE_MESSAGES); + } + + @Bean + Binding bindingMessages() { + return BindingBuilder.bind(messagesQueue()).to(messagesExchange()).with(QUEUE_MESSAGES); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java new file mode 100644 index 0000000000..3447c70420 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java @@ -0,0 +1,54 @@ +package com.baeldung.springamqp.errorhandling.configuration; + +import com.baeldung.springamqp.errorhandling.errorhandler.CustomFatalExceptionStrategy; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler; +import org.springframework.amqp.rabbit.listener.FatalExceptionStrategy; +import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.ErrorHandler; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES; + +@Configuration +public class FatalExceptionStrategyAmqpConfiguration { + + @Bean + public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory, + SimpleRabbitListenerContainerFactoryConfigurer configurer) { + SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); + configurer.configure(factory, connectionFactory); + factory.setErrorHandler(errorHandler()); + return factory; + } + + @Bean + public ErrorHandler errorHandler() { + return new ConditionalRejectingErrorHandler(customExceptionStrategy()); + } + + @Bean + FatalExceptionStrategy customExceptionStrategy() { + return new CustomFatalExceptionStrategy(); + } + + @Bean + Queue messagesQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES) + .build(); + } + + @Bean + DirectExchange messagesExchange() { + return new DirectExchange(EXCHANGE_MESSAGES); + } + + @Bean + Binding bindingMessages() { + return BindingBuilder.bind(messagesQueue()).to(messagesExchange()).with(QUEUE_MESSAGES); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java new file mode 100644 index 0000000000..5c0c0afaaf --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java @@ -0,0 +1,46 @@ +package com.baeldung.springamqp.errorhandling.configuration; + +import com.baeldung.springamqp.errorhandling.errorhandler.CustomErrorHandler; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; +import org.springframework.context.annotation.Bean; +import org.springframework.util.ErrorHandler; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES; + +//@Configuration +public class ListenerErrorHandlerAmqpConfiguration { + + @Bean + public ErrorHandler errorHandler() { + return new CustomErrorHandler(); + } + + @Bean + public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory, + SimpleRabbitListenerContainerFactoryConfigurer configurer) { + SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); + configurer.configure(factory, connectionFactory); + factory.setErrorHandler(errorHandler()); + return factory; + } + + @Bean + Queue messagesQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES) + .build(); + } + + @Bean + DirectExchange messagesExchange() { + return new DirectExchange(EXCHANGE_MESSAGES); + } + + @Bean + Binding bindingMessages() { + return BindingBuilder.bind(messagesQueue()).to(messagesExchange()).with(QUEUE_MESSAGES); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java new file mode 100644 index 0000000000..26da2d59ba --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java @@ -0,0 +1,34 @@ +package com.baeldung.springamqp.errorhandling.configuration; + +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; + +//@Configuration +public class SimpleDLQAmqpConfiguration { + public static final String QUEUE_MESSAGES = "baeldung-messages-queue"; + public static final String QUEUE_MESSAGES_DLQ = QUEUE_MESSAGES + ".dlq"; + public static final String EXCHANGE_MESSAGES = "baeldung-messages-exchange"; + + @Bean + Queue messagesQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES) + .withArgument("x-dead-letter-exchange", "") + .withArgument("x-dead-letter-routing-key", QUEUE_MESSAGES_DLQ) + .build(); + } + + @Bean + Queue deadLetterQueue() { + return QueueBuilder.durable(QUEUE_MESSAGES_DLQ).build(); + } + + @Bean + DirectExchange messagesExchange() { + return new DirectExchange(EXCHANGE_MESSAGES); + } + + @Bean + Binding bindingMessages() { + return BindingBuilder.bind(messagesQueue()).to(messagesExchange()).with(QUEUE_MESSAGES); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java new file mode 100644 index 0000000000..3af9a84678 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java @@ -0,0 +1,75 @@ +package com.baeldung.springamqp.errorhandling.consumer; + +import com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration; +import com.baeldung.springamqp.errorhandling.errorhandler.BusinessException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Service; + +import static com.baeldung.springamqp.errorhandling.configuration.DLXParkingLotAmqpConfiguration.EXCHANGE_PARKING_LOT; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; + +@Service +public class MessagesConsumer { + public static final String HEADER_X_RETRIES_COUNT = "x-retries-count"; + public static final int MAX_RETRIES_COUNT = 1; + + private static final Logger log = LoggerFactory.getLogger(MessagesConsumer.class); + private final RabbitTemplate rabbitTemplate; + + public MessagesConsumer(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + @RabbitListener(queues = SimpleDLQAmqpConfiguration.QUEUE_MESSAGES) + public void receiveMessage(final Message message) throws BusinessException { + log.info("Received message: {}", message.toString()); + throw new BusinessException(); + } + + //@RabbitListener(queues = DLXCustomAmqpConfiguration.QUEUE_MESSAGES_DLQ) + public void processFailedMessages(final Message message) { + log.info("Received failed message: {}", message.toString()); + } + + //@RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessagesRequeue(final Message failedMessage) { + log.info("Received failed message, requeueing: {}", failedMessage.toString()); + rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + } + + //@RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessagesRetryHeaders(final Message failedMessage) { + Integer retriesCnt = (Integer) failedMessage.getMessageProperties().getHeaders().get(HEADER_X_RETRIES_COUNT); + if (retriesCnt == null) retriesCnt = 0; + log.info("Retrying message for the {} time", retriesCnt); + if (retriesCnt > MAX_RETRIES_COUNT) { + log.info("Discarding message"); + return; + } + failedMessage.getMessageProperties().getHeaders().put(HEADER_X_RETRIES_COUNT, ++retriesCnt); + rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + } + + // @RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessagesRetryWithParkingLot(final Message failedMessage) { + Integer retriesCnt = (Integer) failedMessage.getMessageProperties().getHeaders().get(HEADER_X_RETRIES_COUNT); + if (retriesCnt == null) retriesCnt = 0; + log.info("Retrying message for the {} time", retriesCnt); + if (retriesCnt > MAX_RETRIES_COUNT) { + log.info("Sending message to the parking lot queue"); + rabbitTemplate.send(EXCHANGE_PARKING_LOT, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + return; + } + failedMessage.getMessageProperties().getHeaders().put(HEADER_X_RETRIES_COUNT, ++retriesCnt); + rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + } + + //@RabbitListener(queues = QUEUE_PARKING_LOT) + public void processParkingLotQueue(final Message failedMessage) { + log.info("Received message in parking lot queue"); + } +} \ No newline at end of file diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/BusinessException.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/BusinessException.java new file mode 100644 index 0000000000..faec96e2aa --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/BusinessException.java @@ -0,0 +1,4 @@ +package com.baeldung.springamqp.errorhandling.errorhandler; + +public class BusinessException extends Exception { +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomErrorHandler.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomErrorHandler.java new file mode 100644 index 0000000000..5c5e9cdf13 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomErrorHandler.java @@ -0,0 +1,14 @@ +package com.baeldung.springamqp.errorhandling.errorhandler; + +import org.springframework.amqp.AmqpRejectAndDontRequeueException; +import org.springframework.util.ErrorHandler; + +public class CustomErrorHandler implements ErrorHandler { + + @Override + public void handleError(Throwable t) { + if (!(t.getCause() instanceof BusinessException)) { + throw new AmqpRejectAndDontRequeueException("Error Handler converted exception to fatal", t); + } + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomFatalExceptionStrategy.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomFatalExceptionStrategy.java new file mode 100644 index 0000000000..e14be4e73c --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/errorhandler/CustomFatalExceptionStrategy.java @@ -0,0 +1,10 @@ +package com.baeldung.springamqp.errorhandling.errorhandler; + +import org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler; + +public class CustomFatalExceptionStrategy extends ConditionalRejectingErrorHandler.DefaultExceptionStrategy { + @Override + public boolean isFatal(Throwable t) { + return !(t.getCause() instanceof BusinessException); + } +} \ No newline at end of file diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/producer/MessageProducer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/producer/MessageProducer.java new file mode 100644 index 0000000000..c14fd5bf3b --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/producer/MessageProducer.java @@ -0,0 +1,24 @@ +package com.baeldung.springamqp.errorhandling.producer; + +import com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Service; + +@Service +public class MessageProducer { + + private static final Logger log = LoggerFactory.getLogger(MessageProducer.class); + private int messageNumber = 0; + private final RabbitTemplate rabbitTemplate; + + public MessageProducer(final RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + public void sendMessage() { + log.info("Sending message..."); + rabbitTemplate.convertAndSend(SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES, SimpleDLQAmqpConfiguration.QUEUE_MESSAGES, "Some message id:" + messageNumber++); + } +} \ No newline at end of file diff --git a/spring-amqp/src/main/resources/application.properties b/spring-amqp/src/main/resources/application.properties new file mode 100644 index 0000000000..1353a0e447 --- /dev/null +++ b/spring-amqp/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.rabbitmq.listener.simple.default-requeue-rejected=false \ No newline at end of file From 97de755d7533eeb3882a2f31bd26d8db07b673db Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Thu, 17 Oct 2019 17:17:31 +0100 Subject: [PATCH 103/304] [BAEL-18364] move spring-rest-*** articles - 1 --- spring-rest-full/README.md | 2 - spring-rest/README.md | 5 -- spring-rest/pom.xml | 42 ++------- spring-resttemplate/README.md | 4 + spring-resttemplate/pom.xml | 17 +++- .../SpringContextIntegrationTest.java | 0 .../java/com/baeldung/SpringContextTest.java | 0 .../changeport/CustomApplication.java | 0 .../changeport/ServerPortCustomizer.java | 0 .../produceimage/ImageApplication.java | 0 .../controller/DataProducerController.java | 0 .../PropertyEditorApplication.java | 0 .../PropertyEditorRestController.java | 0 .../propertyeditor/creditcard/CreditCard.java | 0 .../creditcard/CreditCardEditor.java | 0 .../editor/CustomExoticTypeEditor.java | 0 .../exotictype/model/ExoticType.java | 0 .../ResponseHeadersApplication.java | 0 .../FilterResponseHeaderController.java | 0 .../controllers/ResponseHeaderController.java | 0 .../filter/AddResponseHeaderFilter.java | 0 .../lists/EmployeeApplication.java | 0 .../lists/client/EmployeeClient.java | 0 .../lists/controller/EmployeeResource.java | 0 .../resttemplate/lists/dto/Employee.java | 0 .../resttemplate/lists/dto/EmployeeList.java | 0 .../lists/service/EmployeeService.java | 0 .../sampleapp/config/MainApplication.java | 0 .../sampleapp/config/RestClientConfig.java | 58 ++++++------ .../baeldung/sampleapp/config/WebConfig.java | 0 ...RestTemplateHeaderModifierInterceptor.java | 36 ++++---- .../repository/HeavyResourceRepository.java | 0 .../BarMappingExamplesController.java | 0 .../web/controller/CompanyController.java | 0 .../controller/DeferredResultController.java | 0 .../controller/HeavyResourceController.java | 0 .../web/controller/ItemController.java | 0 .../web/controller/MyFooController.java | 0 .../web/controller/PactController.java | 0 .../web/controller/SimplePostController.java | 0 .../mediatypes/CustomMediaTypeController.java | 0 .../redirect/RedirectController.java | 0 .../sampleapp/web/dto/BaeldungItem.java | 0 .../sampleapp/web/dto/BaeldungItemV2.java | 0 .../baeldung/sampleapp/web/dto/Company.java | 0 .../com/baeldung/sampleapp/web/dto/Foo.java | 0 .../sampleapp/web/dto/HeavyResource.java | 0 .../web/dto/HeavyResourceAddressOnly.java | 0 .../HeavyResourceAddressPartialUpdate.java | 0 .../com/baeldung/sampleapp/web/dto/Item.java | 0 .../sampleapp/web/dto/ItemManager.java | 0 .../baeldung/sampleapp/web/dto/PactDto.java | 0 .../com/baeldung/sampleapp/web/dto/Views.java | 0 .../exception/ResourceNotFoundException.java | 0 .../java/com/baeldung/transfer/LoginForm.java | 0 .../com/baeldung/web/log/app/Application.java | 0 .../log/app/TaxiFareRequestInterceptor.java | 88 +++++++++---------- .../config/CustomeRequestLoggingFilter.java | 0 .../config/RequestLoggingFilterConfig.java | 40 ++++----- .../web/log/config/TaxiFareMVCConfig.java | 38 ++++---- .../log/controller/TaxiFareController.java | 0 .../com/baeldung/web/log/data/RateCard.java | 62 ++++++------- .../com/baeldung/web/log/data/TaxiRide.java | 66 +++++++------- .../service/TaxiFareCalculatorService.java | 28 +++--- .../web/log/util/RequestLoggingUtil.java | 76 ++++++++-------- .../web/upload/app/UploadApplication.java | 0 .../client/MultipartFileUploadClient.java | 0 .../upload/controller/FileServerResource.java | 0 .../baeldung/pact/PactProviderLiveTest.java | 0 .../creditcard/CreditCardEditorUnitTest.java | 0 .../resttemplate/RestTemplateLiveTest.java | 0 ...eavyResourceControllerIntegrationTest.java | 0 .../TaxiFareControllerIntegrationTest.java | 0 ...tomMediaTypeControllerIntegrationTest.java | 0 .../CustomMediaTypeControllerLiveTest.java | 0 .../web/controller/mediatypes/TestConfig.java | 0 .../RedirectControllerIntegrationTest.java | 0 spring-security-rest/README.md | 1 + testing-modules/testing-libraries/README.md | 1 + .../testing-libraries}/checkstyle.xml | 0 testing-modules/testing-libraries/pom.xml | 42 +++++++++ 81 files changed, 314 insertions(+), 292 deletions(-) rename {spring-rest/src/test => spring-resttemplate/src/main}/java/com/baeldung/SpringContextIntegrationTest.java (100%) rename {spring-rest/src/test => spring-resttemplate/src/main}/java/com/baeldung/SpringContextTest.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/changeport/CustomApplication.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/produceimage/ImageApplication.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/produceimage/controller/DataProducerController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/responseheaders/ResponseHeadersApplication.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/resttemplate/lists/EmployeeApplication.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/resttemplate/lists/controller/EmployeeResource.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/resttemplate/lists/dto/Employee.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/resttemplate/lists/dto/EmployeeList.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/resttemplate/lists/service/EmployeeService.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/config/MainApplication.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java (97%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/config/WebConfig.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java (97%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/Company.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/Item.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/dto/Views.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/transfer/LoginForm.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/app/Application.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java (97%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java (97%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java (97%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/data/RateCard.java (95%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/data/TaxiRide.java (95%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java (96%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java (97%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/upload/app/UploadApplication.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java (100%) rename {spring-rest => spring-resttemplate}/src/main/java/com/baeldung/web/upload/controller/FileServerResource.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/pact/PactProviderLiveTest.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorUnitTest.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/resttemplate/RestTemplateLiveTest.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerLiveTest.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/web/controller/mediatypes/TestConfig.java (100%) rename {spring-rest => spring-resttemplate}/src/test/java/com/baeldung/web/controller/redirect/RedirectControllerIntegrationTest.java (100%) rename {spring-rest => testing-modules/testing-libraries}/checkstyle.xml (100%) diff --git a/spring-rest-full/README.md b/spring-rest-full/README.md index a0ba8df27d..df7856725f 100644 --- a/spring-rest-full/README.md +++ b/spring-rest-full/README.md @@ -12,8 +12,6 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com - [Integration Testing with the Maven Cargo plugin](https://www.baeldung.com/integration-testing-with-the-maven-cargo-plugin) - [Project Configuration with Spring](https://www.baeldung.com/project-configuration-with-spring) - [Metrics for your Spring REST API](https://www.baeldung.com/spring-rest-api-metrics) -- [Spring Security Expressions - hasRole Example](https://www.baeldung.com/spring-security-expressions-basic) - ### Build the Project ``` diff --git a/spring-rest/README.md b/spring-rest/README.md index ac12066e8f..af054b2dcf 100644 --- a/spring-rest/README.md +++ b/spring-rest/README.md @@ -10,16 +10,11 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Returning Custom Status Codes from Spring Controllers](https://www.baeldung.com/spring-mvc-controller-custom-http-status-code) - [Binary Data Formats in a Spring REST API](https://www.baeldung.com/spring-rest-api-with-binary-data-formats) - [Guide to UriComponentsBuilder in Spring](https://www.baeldung.com/spring-uricomponentsbuilder) -- [Introduction to FindBugs](https://www.baeldung.com/intro-to-findbugs) - [A Custom Media Type for a Spring REST API](https://www.baeldung.com/spring-rest-custom-media-type) - [HTTP PUT vs HTTP PATCH in a REST API](https://www.baeldung.com/http-put-patch-difference-spring) - [Spring – Log Incoming Requests](https://www.baeldung.com/spring-http-logging) -- [Introduction to CheckStyle](https://www.baeldung.com/checkstyle-java) - [How to Change the Default Port in Spring Boot](https://www.baeldung.com/spring-boot-change-port) - [Guide to DeferredResult in Spring](https://www.baeldung.com/spring-deferred-result) - [Spring Custom Property Editor](https://www.baeldung.com/spring-mvc-custom-property-editor) -- [Using the Spring RestTemplate Interceptor](https://www.baeldung.com/spring-rest-template-interceptor) -- [Get and Post Lists of Objects with RestTemplate](https://www.baeldung.com/spring-rest-template-list) - [How to Set a Header on a Response with Spring 5](https://www.baeldung.com/spring-response-header) -- [Uploading MultipartFile with Spring RestTemplate](https://www.baeldung.com/spring-rest-template-multipart-upload) - [Download an Image or a File with Spring MVC](https://www.baeldung.com/spring-controller-return-image-file) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 93160a9936..fce04a8f2d 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -20,10 +20,7 @@ org.springframework.boot spring-boot-starter-web - - org.springframework.boot - spring-boot-starter-thymeleaf - + org.springframework.boot spring-boot-starter-actuator @@ -141,11 +138,7 @@ commons-io ${commons-io.version} - - au.com.dius - pact-jvm-provider-junit_2.11 - ${pact.version} - + io.rest-assured rest-assured @@ -176,21 +169,7 @@ org.apache.maven.plugins maven-war-plugin - - org.apache.maven.plugins - maven-checkstyle-plugin - ${checkstyle-maven-plugin.version} - - checkstyle.xml - - - - - check - - - - + @@ -250,18 +229,7 @@ - - - - org.apache.maven.plugins - maven-checkstyle-plugin - ${checkstyle-maven-plugin.version} - - checkstyle.xml - - - - + 1.3.2 @@ -275,7 +243,7 @@ 1.6.0 3.0.4 - 3.0.0 + false 2.2.0 diff --git a/spring-resttemplate/README.md b/spring-resttemplate/README.md index e98af0e787..9ef8ed0584 100644 --- a/spring-resttemplate/README.md +++ b/spring-resttemplate/README.md @@ -13,3 +13,7 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Mocking a RestTemplate in Spring](https://www.baeldung.com/spring-mock-rest-template) - [RestTemplate Post Request with JSON](https://www.baeldung.com/spring-resttemplate-post-json) - [Download a Large File Through a Spring RestTemplate](https://www.baeldung.com/spring-resttemplate-download-large-file) +- [Using the Spring RestTemplate Interceptor](https://www.baeldung.com/spring-rest-template-interceptor) +- [Uploading MultipartFile with Spring RestTemplate](https://www.baeldung.com/spring-rest-template-multipart-upload) +- [Get and Post Lists of Objects with RestTemplate](https://www.baeldung.com/spring-rest-template-list) +- [Introduction to FindBugs](https://www.baeldung.com/intro-to-findbugs) \ No newline at end of file diff --git a/spring-resttemplate/pom.xml b/spring-resttemplate/pom.xml index ae5cfed4c9..26a3143d6d 100644 --- a/spring-resttemplate/pom.xml +++ b/spring-resttemplate/pom.xml @@ -21,6 +21,10 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.boot + spring-boot-starter-thymeleaf + org.springframework.boot spring-boot-devtools @@ -32,7 +36,13 @@ org.springframework.boot spring-boot-starter-test - test + + + + + au.com.dius + pact-jvm-provider-junit_2.11 + ${pact.version} @@ -111,11 +121,13 @@ + junit junit - test + 4.12 + org.hamcrest hamcrest-core @@ -295,6 +307,7 @@ 3.4.1 + 3.5.11 diff --git a/spring-rest/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-resttemplate/src/main/java/com/baeldung/SpringContextIntegrationTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/SpringContextIntegrationTest.java rename to spring-resttemplate/src/main/java/com/baeldung/SpringContextIntegrationTest.java diff --git a/spring-rest/src/test/java/com/baeldung/SpringContextTest.java b/spring-resttemplate/src/main/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/SpringContextTest.java rename to spring-resttemplate/src/main/java/com/baeldung/SpringContextTest.java diff --git a/spring-rest/src/main/java/com/baeldung/changeport/CustomApplication.java b/spring-resttemplate/src/main/java/com/baeldung/changeport/CustomApplication.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/changeport/CustomApplication.java rename to spring-resttemplate/src/main/java/com/baeldung/changeport/CustomApplication.java diff --git a/spring-rest/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java b/spring-resttemplate/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java rename to spring-resttemplate/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java diff --git a/spring-rest/src/main/java/com/baeldung/produceimage/ImageApplication.java b/spring-resttemplate/src/main/java/com/baeldung/produceimage/ImageApplication.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/produceimage/ImageApplication.java rename to spring-resttemplate/src/main/java/com/baeldung/produceimage/ImageApplication.java diff --git a/spring-rest/src/main/java/com/baeldung/produceimage/controller/DataProducerController.java b/spring-resttemplate/src/main/java/com/baeldung/produceimage/controller/DataProducerController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/produceimage/controller/DataProducerController.java rename to spring-resttemplate/src/main/java/com/baeldung/produceimage/controller/DataProducerController.java diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java b/spring-resttemplate/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java rename to spring-resttemplate/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java b/spring-resttemplate/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java rename to spring-resttemplate/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java b/spring-resttemplate/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java rename to spring-resttemplate/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java b/spring-resttemplate/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java rename to spring-resttemplate/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java b/spring-resttemplate/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java rename to spring-resttemplate/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java b/spring-resttemplate/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java rename to spring-resttemplate/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java diff --git a/spring-rest/src/main/java/com/baeldung/responseheaders/ResponseHeadersApplication.java b/spring-resttemplate/src/main/java/com/baeldung/responseheaders/ResponseHeadersApplication.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/responseheaders/ResponseHeadersApplication.java rename to spring-resttemplate/src/main/java/com/baeldung/responseheaders/ResponseHeadersApplication.java diff --git a/spring-rest/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java b/spring-resttemplate/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java rename to spring-resttemplate/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java diff --git a/spring-rest/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java b/spring-resttemplate/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java rename to spring-resttemplate/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java diff --git a/spring-rest/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java b/spring-resttemplate/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java rename to spring-resttemplate/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/EmployeeApplication.java b/spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/EmployeeApplication.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/resttemplate/lists/EmployeeApplication.java rename to spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/EmployeeApplication.java diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java b/spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java rename to spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/controller/EmployeeResource.java b/spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/controller/EmployeeResource.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/resttemplate/lists/controller/EmployeeResource.java rename to spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/controller/EmployeeResource.java diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/dto/Employee.java b/spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/dto/Employee.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/resttemplate/lists/dto/Employee.java rename to spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/dto/Employee.java diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/dto/EmployeeList.java b/spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/dto/EmployeeList.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/resttemplate/lists/dto/EmployeeList.java rename to spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/dto/EmployeeList.java diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/service/EmployeeService.java b/spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/service/EmployeeService.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/resttemplate/lists/service/EmployeeService.java rename to spring-resttemplate/src/main/java/com/baeldung/resttemplate/lists/service/EmployeeService.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/config/MainApplication.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/config/MainApplication.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/config/MainApplication.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/config/MainApplication.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java similarity index 97% rename from spring-rest/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java index 8abc368bdb..cbaa21f4ca 100644 --- a/spring-rest/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java +++ b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java @@ -1,29 +1,29 @@ -package com.baeldung.sampleapp.config; - -import java.util.ArrayList; -import java.util.List; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.ClientHttpRequestInterceptor; -import org.springframework.util.CollectionUtils; -import org.springframework.web.client.RestTemplate; - -import com.baeldung.sampleapp.interceptors.RestTemplateHeaderModifierInterceptor; - -@Configuration -public class RestClientConfig { - - @Bean - public RestTemplate restTemplate() { - RestTemplate restTemplate = new RestTemplate(); - - List interceptors = restTemplate.getInterceptors(); - if (CollectionUtils.isEmpty(interceptors)) { - interceptors = new ArrayList(); - } - interceptors.add(new RestTemplateHeaderModifierInterceptor()); - restTemplate.setInterceptors(interceptors); - return restTemplate; - } -} +package com.baeldung.sampleapp.config; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.util.CollectionUtils; +import org.springframework.web.client.RestTemplate; + +import com.baeldung.sampleapp.interceptors.RestTemplateHeaderModifierInterceptor; + +@Configuration +public class RestClientConfig { + + @Bean + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(); + + List interceptors = restTemplate.getInterceptors(); + if (CollectionUtils.isEmpty(interceptors)) { + interceptors = new ArrayList(); + } + interceptors.add(new RestTemplateHeaderModifierInterceptor()); + restTemplate.setInterceptors(interceptors); + return restTemplate; + } +} diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/config/WebConfig.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/config/WebConfig.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/config/WebConfig.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/config/WebConfig.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java similarity index 97% rename from spring-rest/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java index 519e5ebf0d..9ebe1553a5 100644 --- a/spring-rest/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java +++ b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java @@ -1,18 +1,18 @@ -package com.baeldung.sampleapp.interceptors; - -import java.io.IOException; - -import org.springframework.http.HttpRequest; -import org.springframework.http.client.ClientHttpRequestExecution; -import org.springframework.http.client.ClientHttpRequestInterceptor; -import org.springframework.http.client.ClientHttpResponse; - -public class RestTemplateHeaderModifierInterceptor implements ClientHttpRequestInterceptor { - - @Override - public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { - ClientHttpResponse response = execution.execute(request, body); - response.getHeaders().add("Foo", "bar"); - return response; - } -} +package com.baeldung.sampleapp.interceptors; + +import java.io.IOException; + +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +public class RestTemplateHeaderModifierInterceptor implements ClientHttpRequestInterceptor { + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + ClientHttpResponse response = execution.execute(request, body); + response.getHeaders().add("Foo", "bar"); + return response; + } +} diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Company.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Company.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Company.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Company.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Item.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Item.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Item.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Item.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Views.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Views.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/dto/Views.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/Views.java diff --git a/spring-rest/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java b/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java rename to spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java diff --git a/spring-rest/src/main/java/com/baeldung/transfer/LoginForm.java b/spring-resttemplate/src/main/java/com/baeldung/transfer/LoginForm.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/transfer/LoginForm.java rename to spring-resttemplate/src/main/java/com/baeldung/transfer/LoginForm.java diff --git a/spring-rest/src/main/java/com/baeldung/web/log/app/Application.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/app/Application.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/web/log/app/Application.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/app/Application.java diff --git a/spring-rest/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java similarity index 97% rename from spring-rest/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java index b154f3665f..2ea0204dc3 100644 --- a/spring-rest/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java +++ b/spring-resttemplate/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java @@ -1,44 +1,44 @@ -package com.baeldung.web.log.app; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; -import org.springframework.web.util.ContentCachingRequestWrapper; - -import com.baeldung.web.log.util.RequestLoggingUtil; - -@Component -public class TaxiFareRequestInterceptor extends HandlerInterceptorAdapter { - - private final static Logger LOGGER = LoggerFactory.getLogger(TaxiFareRequestInterceptor.class); - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String postData; - HttpServletRequest requestCacheWrapperObject = null; - try { - // Uncomment to produce the stream closed issue - // postData = RequestLoggingUtil.getStringFromInputStream(request.getInputStream()); - - // To overcome request stream closed issue - requestCacheWrapperObject = new ContentCachingRequestWrapper(request); - requestCacheWrapperObject.getParameterMap(); - } catch (Exception exception) { - exception.printStackTrace(); - } finally { - postData = RequestLoggingUtil.readPayload(requestCacheWrapperObject); - LOGGER.info("REQUEST DATA: " + postData); - } - return true; - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - LOGGER.info("RESPONSE: " + response.getStatus()); - } - -} +package com.baeldung.web.log.app; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import org.springframework.web.util.ContentCachingRequestWrapper; + +import com.baeldung.web.log.util.RequestLoggingUtil; + +@Component +public class TaxiFareRequestInterceptor extends HandlerInterceptorAdapter { + + private final static Logger LOGGER = LoggerFactory.getLogger(TaxiFareRequestInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String postData; + HttpServletRequest requestCacheWrapperObject = null; + try { + // Uncomment to produce the stream closed issue + // postData = RequestLoggingUtil.getStringFromInputStream(request.getInputStream()); + + // To overcome request stream closed issue + requestCacheWrapperObject = new ContentCachingRequestWrapper(request); + requestCacheWrapperObject.getParameterMap(); + } catch (Exception exception) { + exception.printStackTrace(); + } finally { + postData = RequestLoggingUtil.readPayload(requestCacheWrapperObject); + LOGGER.info("REQUEST DATA: " + postData); + } + return true; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + LOGGER.info("RESPONSE: " + response.getStatus()); + } + +} diff --git a/spring-rest/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java diff --git a/spring-rest/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java similarity index 97% rename from spring-rest/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java index bc9ad1cf84..85728729d5 100644 --- a/spring-rest/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java +++ b/spring-resttemplate/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java @@ -1,20 +1,20 @@ -package com.baeldung.web.log.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.filter.CommonsRequestLoggingFilter; - -@Configuration -public class RequestLoggingFilterConfig { - - @Bean - public CommonsRequestLoggingFilter logFilter() { - CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); - filter.setIncludeQueryString(true); - filter.setIncludePayload(true); - filter.setMaxPayloadLength(10000); - filter.setIncludeHeaders(false); - filter.setAfterMessagePrefix("REQUEST DATA : "); - return filter; - } -} +package com.baeldung.web.log.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.CommonsRequestLoggingFilter; + +@Configuration +public class RequestLoggingFilterConfig { + + @Bean + public CommonsRequestLoggingFilter logFilter() { + CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); + filter.setIncludeQueryString(true); + filter.setIncludePayload(true); + filter.setMaxPayloadLength(10000); + filter.setIncludeHeaders(false); + filter.setAfterMessagePrefix("REQUEST DATA : "); + return filter; + } +} diff --git a/spring-rest/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java similarity index 97% rename from spring-rest/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java index 8f1a000acc..fb0c1d1d48 100644 --- a/spring-rest/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java +++ b/spring-resttemplate/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java @@ -1,19 +1,19 @@ -package com.baeldung.web.log.config; - -import com.baeldung.web.log.app.TaxiFareRequestInterceptor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -public class TaxiFareMVCConfig implements WebMvcConfigurer { - - @Autowired - private TaxiFareRequestInterceptor taxiFareRequestInterceptor; - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(taxiFareRequestInterceptor).addPathPatterns("/**/taxifare/**/"); - } -} +package com.baeldung.web.log.config; + +import com.baeldung.web.log.app.TaxiFareRequestInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class TaxiFareMVCConfig implements WebMvcConfigurer { + + @Autowired + private TaxiFareRequestInterceptor taxiFareRequestInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(taxiFareRequestInterceptor).addPathPatterns("/**/taxifare/**/"); + } +} diff --git a/spring-rest/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java diff --git a/spring-rest/src/main/java/com/baeldung/web/log/data/RateCard.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/data/RateCard.java similarity index 95% rename from spring-rest/src/main/java/com/baeldung/web/log/data/RateCard.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/data/RateCard.java index c7955b561b..e486d6b1f7 100644 --- a/spring-rest/src/main/java/com/baeldung/web/log/data/RateCard.java +++ b/spring-resttemplate/src/main/java/com/baeldung/web/log/data/RateCard.java @@ -1,31 +1,31 @@ -package com.baeldung.web.log.data; - -public class RateCard { - - private String nightSurcharge; - private String ratePerMile; - - public RateCard() { - nightSurcharge = "Extra $ 100"; - ratePerMile = "$ 10 Per Mile"; - } - - - public String getNightSurcharge() { - return nightSurcharge; - } - - public void setNightSurcharge(String nightSurcharge) { - this.nightSurcharge = nightSurcharge; - } - - public String getRatePerMile() { - return ratePerMile; - } - - public void setRatePerMile(String ratePerMile) { - this.ratePerMile = ratePerMile; - } - - -} +package com.baeldung.web.log.data; + +public class RateCard { + + private String nightSurcharge; + private String ratePerMile; + + public RateCard() { + nightSurcharge = "Extra $ 100"; + ratePerMile = "$ 10 Per Mile"; + } + + + public String getNightSurcharge() { + return nightSurcharge; + } + + public void setNightSurcharge(String nightSurcharge) { + this.nightSurcharge = nightSurcharge; + } + + public String getRatePerMile() { + return ratePerMile; + } + + public void setRatePerMile(String ratePerMile) { + this.ratePerMile = ratePerMile; + } + + +} diff --git a/spring-rest/src/main/java/com/baeldung/web/log/data/TaxiRide.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/data/TaxiRide.java similarity index 95% rename from spring-rest/src/main/java/com/baeldung/web/log/data/TaxiRide.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/data/TaxiRide.java index 2e0f33f02b..6089c51996 100644 --- a/spring-rest/src/main/java/com/baeldung/web/log/data/TaxiRide.java +++ b/spring-resttemplate/src/main/java/com/baeldung/web/log/data/TaxiRide.java @@ -1,33 +1,33 @@ -package com.baeldung.web.log.data; - -public class TaxiRide { - - private Boolean isNightSurcharge; - private Long distanceInMile; - - public TaxiRide() { - } - - public TaxiRide(Boolean isNightSurcharge, Long distanceInMile) { - this.isNightSurcharge = isNightSurcharge; - this.distanceInMile = distanceInMile; - } - - - public Boolean getIsNightSurcharge() { - return isNightSurcharge; - } - - public void setIsNightSurcharge(Boolean isNightSurcharge) { - this.isNightSurcharge = isNightSurcharge; - } - - public Long getDistanceInMile() { - return distanceInMile; - } - - public void setDistanceInMile(Long distanceInMile) { - this.distanceInMile = distanceInMile; - } - -} +package com.baeldung.web.log.data; + +public class TaxiRide { + + private Boolean isNightSurcharge; + private Long distanceInMile; + + public TaxiRide() { + } + + public TaxiRide(Boolean isNightSurcharge, Long distanceInMile) { + this.isNightSurcharge = isNightSurcharge; + this.distanceInMile = distanceInMile; + } + + + public Boolean getIsNightSurcharge() { + return isNightSurcharge; + } + + public void setIsNightSurcharge(Boolean isNightSurcharge) { + this.isNightSurcharge = isNightSurcharge; + } + + public Long getDistanceInMile() { + return distanceInMile; + } + + public void setDistanceInMile(Long distanceInMile) { + this.distanceInMile = distanceInMile; + } + +} diff --git a/spring-rest/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java similarity index 96% rename from spring-rest/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java index 1176b31e4c..52a1698865 100644 --- a/spring-rest/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java +++ b/spring-resttemplate/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java @@ -1,14 +1,14 @@ -package com.baeldung.web.log.service; - -import com.baeldung.web.log.data.TaxiRide; -import org.springframework.stereotype.Service; - -@Service -public class TaxiFareCalculatorService { - - public String calculateFare(TaxiRide taxiRide) { - return String.valueOf((Long) (taxiRide.getIsNightSurcharge() - ? taxiRide.getDistanceInMile() * 10 + 100 - : taxiRide.getDistanceInMile() * 10)); - } -} +package com.baeldung.web.log.service; + +import com.baeldung.web.log.data.TaxiRide; +import org.springframework.stereotype.Service; + +@Service +public class TaxiFareCalculatorService { + + public String calculateFare(TaxiRide taxiRide) { + return String.valueOf((Long) (taxiRide.getIsNightSurcharge() + ? taxiRide.getDistanceInMile() * 10 + 100 + : taxiRide.getDistanceInMile() * 10)); + } +} diff --git a/spring-rest/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java b/spring-resttemplate/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java similarity index 97% rename from spring-rest/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java rename to spring-resttemplate/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java index c13d35b55c..70c4eaee90 100644 --- a/spring-rest/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java +++ b/spring-resttemplate/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java @@ -1,38 +1,38 @@ -package com.baeldung.web.log.util; - -import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.io.IOUtils; -import org.springframework.web.util.ContentCachingRequestWrapper; -import org.springframework.web.util.WebUtils; - -public class RequestLoggingUtil { - - public static String getStringFromInputStream(InputStream is) { - StringWriter writer = new StringWriter(); - String encoding = "UTF-8"; - try { - IOUtils.copy(is, writer, encoding); - } catch (IOException e) { - e.printStackTrace(); - } - return writer.toString(); - } - - public static String readPayload(final HttpServletRequest request) throws IOException { - String payloadData = null; - ContentCachingRequestWrapper contentCachingRequestWrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class); - if (null != contentCachingRequestWrapper) { - byte[] buf = contentCachingRequestWrapper.getContentAsByteArray(); - if (buf.length > 0) { - payloadData = new String(buf, 0, buf.length, contentCachingRequestWrapper.getCharacterEncoding()); - } - } - return payloadData; - } - -} +package com.baeldung.web.log.util; + +import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.io.IOUtils; +import org.springframework.web.util.ContentCachingRequestWrapper; +import org.springframework.web.util.WebUtils; + +public class RequestLoggingUtil { + + public static String getStringFromInputStream(InputStream is) { + StringWriter writer = new StringWriter(); + String encoding = "UTF-8"; + try { + IOUtils.copy(is, writer, encoding); + } catch (IOException e) { + e.printStackTrace(); + } + return writer.toString(); + } + + public static String readPayload(final HttpServletRequest request) throws IOException { + String payloadData = null; + ContentCachingRequestWrapper contentCachingRequestWrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class); + if (null != contentCachingRequestWrapper) { + byte[] buf = contentCachingRequestWrapper.getContentAsByteArray(); + if (buf.length > 0) { + payloadData = new String(buf, 0, buf.length, contentCachingRequestWrapper.getCharacterEncoding()); + } + } + return payloadData; + } + +} diff --git a/spring-rest/src/main/java/com/baeldung/web/upload/app/UploadApplication.java b/spring-resttemplate/src/main/java/com/baeldung/web/upload/app/UploadApplication.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/web/upload/app/UploadApplication.java rename to spring-resttemplate/src/main/java/com/baeldung/web/upload/app/UploadApplication.java diff --git a/spring-rest/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java b/spring-resttemplate/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java rename to spring-resttemplate/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java diff --git a/spring-rest/src/main/java/com/baeldung/web/upload/controller/FileServerResource.java b/spring-resttemplate/src/main/java/com/baeldung/web/upload/controller/FileServerResource.java similarity index 100% rename from spring-rest/src/main/java/com/baeldung/web/upload/controller/FileServerResource.java rename to spring-resttemplate/src/main/java/com/baeldung/web/upload/controller/FileServerResource.java diff --git a/spring-rest/src/test/java/com/baeldung/pact/PactProviderLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/pact/PactProviderLiveTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/pact/PactProviderLiveTest.java rename to spring-resttemplate/src/test/java/com/baeldung/pact/PactProviderLiveTest.java diff --git a/spring-rest/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorUnitTest.java b/spring-resttemplate/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorUnitTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorUnitTest.java rename to spring-resttemplate/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorUnitTest.java diff --git a/spring-rest/src/test/java/com/baeldung/resttemplate/RestTemplateLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/RestTemplateLiveTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/resttemplate/RestTemplateLiveTest.java rename to spring-resttemplate/src/test/java/com/baeldung/resttemplate/RestTemplateLiveTest.java diff --git a/spring-rest/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java b/spring-resttemplate/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java rename to spring-resttemplate/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java diff --git a/spring-rest/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java b/spring-resttemplate/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java rename to spring-resttemplate/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java diff --git a/spring-rest/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java b/spring-resttemplate/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java rename to spring-resttemplate/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java diff --git a/spring-rest/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerLiveTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerLiveTest.java rename to spring-resttemplate/src/test/java/com/baeldung/web/controller/mediatypes/CustomMediaTypeControllerLiveTest.java diff --git a/spring-rest/src/test/java/com/baeldung/web/controller/mediatypes/TestConfig.java b/spring-resttemplate/src/test/java/com/baeldung/web/controller/mediatypes/TestConfig.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/web/controller/mediatypes/TestConfig.java rename to spring-resttemplate/src/test/java/com/baeldung/web/controller/mediatypes/TestConfig.java diff --git a/spring-rest/src/test/java/com/baeldung/web/controller/redirect/RedirectControllerIntegrationTest.java b/spring-resttemplate/src/test/java/com/baeldung/web/controller/redirect/RedirectControllerIntegrationTest.java similarity index 100% rename from spring-rest/src/test/java/com/baeldung/web/controller/redirect/RedirectControllerIntegrationTest.java rename to spring-resttemplate/src/test/java/com/baeldung/web/controller/redirect/RedirectControllerIntegrationTest.java diff --git a/spring-security-rest/README.md b/spring-security-rest/README.md index d61a52070c..00bc2a1403 100644 --- a/spring-security-rest/README.md +++ b/spring-security-rest/README.md @@ -15,3 +15,4 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com - [Servlet 3 Async Support with Spring MVC and Spring Security](https://www.baeldung.com/spring-mvc-async-security) - [Intro to Spring Security Expressions](https://www.baeldung.com/spring-security-expressions) - [Spring Security for a REST API](https://www.baeldung.com/securing-a-restful-web-service-with-spring-security) +- [Spring Security Expressions - hasRole Example](https://www.baeldung.com/spring-security-expressions-basic) diff --git a/testing-modules/testing-libraries/README.md b/testing-modules/testing-libraries/README.md index 7191989224..d41c85679a 100644 --- a/testing-modules/testing-libraries/README.md +++ b/testing-modules/testing-libraries/README.md @@ -6,5 +6,6 @@ - [Cucumber and Scenario Outline](http://www.baeldung.com/cucumber-scenario-outline) - [Cucumber Java 8 Support](http://www.baeldung.com/cucumber-java-8-support) - [Introduction to Lambda Behave](http://www.baeldung.com/lambda-behave) +- [Introduction to CheckStyle](https://www.baeldung.com/checkstyle-java) diff --git a/spring-rest/checkstyle.xml b/testing-modules/testing-libraries/checkstyle.xml similarity index 100% rename from spring-rest/checkstyle.xml rename to testing-modules/testing-libraries/checkstyle.xml diff --git a/testing-modules/testing-libraries/pom.xml b/testing-modules/testing-libraries/pom.xml index 7891ebbf6d..c9d6049530 100644 --- a/testing-modules/testing-libraries/pom.xml +++ b/testing-modules/testing-libraries/pom.xml @@ -37,9 +37,51 @@ + + testing-libraries + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle-maven-plugin.version} + + checkstyle.xml + + + + + check + + + + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle-maven-plugin.version} + + checkstyle.xml + + + + + 0.4 1.2.5 + 3.0.0 From 511849dd58f2d9777bd5a72488fd9d9652a79489 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 18:24:16 +0800 Subject: [PATCH 104/304] Update README.md --- algorithms-miscellaneous-4/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md index e5e80505f8..93a9796092 100644 --- a/algorithms-miscellaneous-4/README.md +++ b/algorithms-miscellaneous-4/README.md @@ -7,5 +7,4 @@ - [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings) - [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters) - [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) -- [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) - [Interpolation Search in Java](https://www.baeldung.com/java-interpolation-search) From e8f29d2e7fda77b1087e2251aafc2c8e7d84404b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 18:25:22 +0800 Subject: [PATCH 105/304] Update README.md --- algorithms-miscellaneous-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-3/README.md b/algorithms-miscellaneous-3/README.md index a1456c6b20..1a113a4f89 100644 --- a/algorithms-miscellaneous-3/README.md +++ b/algorithms-miscellaneous-3/README.md @@ -16,4 +16,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g. - [Efficient Word Frequency Calculator in Java](https://www.baeldung.com/java-word-frequency) - [Interpolation Search in Java](https://www.baeldung.com/java-interpolation-search) - [The K-Means Clustering Algorithm in Java](https://www.baeldung.com/java-k-means-clustering-algorithm) +- [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) - More articles: [[<-- prev]](/algorithms-miscellaneous-2) [[next -->]](/algorithms-miscellaneous-4) From 3e246d4758e9dd7b317ffc6b8e60205101a30e51 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 18:28:06 +0800 Subject: [PATCH 106/304] Update README.md --- testing-modules/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/testing-modules/README.md b/testing-modules/README.md index 232cf5819d..c6098d1210 100644 --- a/testing-modules/README.md +++ b/testing-modules/README.md @@ -1,5 +1,3 @@ ## Testing Modules This is an aggregator module containing multiple modules focused on testing libraries. -### Relevant Articles: -- [Introduction to Lambda Behave](https://www.baeldung.com/lambda-behave) From 5f0c693cfab6e4945ecc604e9e60b9b5315ef3e9 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 18:29:13 +0800 Subject: [PATCH 107/304] Update README.md --- testing-modules/junit-4/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/junit-4/README.md b/testing-modules/junit-4/README.md index d19a0a1e47..6cc3981ed4 100644 --- a/testing-modules/junit-4/README.md +++ b/testing-modules/junit-4/README.md @@ -4,3 +4,4 @@ - [Custom JUnit 4 Test Runners](http://www.baeldung.com/junit-4-custom-runners) - [Introduction to JUnitParams](http://www.baeldung.com/junit-params) - [Running JUnit Tests Programmatically, from a Java Application](https://www.baeldung.com/junit-tests-run-programmatically-from-java) +- [Introduction to Lambda Behave](https://www.baeldung.com/lambda-behave) From 37c381034dd5174b751b94121c15badd1db88f86 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:44:20 +0800 Subject: [PATCH 108/304] Update README.md --- core-java-modules/core-java-lang/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-lang/README.md b/core-java-modules/core-java-lang/README.md index 9b485d80e9..bd24c2831f 100644 --- a/core-java-modules/core-java-lang/README.md +++ b/core-java-modules/core-java-lang/README.md @@ -13,4 +13,5 @@ This module contains articles about core features in the Java language - [Synthetic Constructs in Java](https://www.baeldung.com/java-synthetic) - [Retrieving a Class Name in Java](https://www.baeldung.com/java-class-name) - [Attaching Values to Java Enum](https://www.baeldung.com/java-enum-values) -- [[More --> ]](/core-java-modules/core-java-lang-2) \ No newline at end of file +- [The Java continue and break Keywords](https://www.baeldung.com/java-continue-and-break) +- [[More --> ]](/core-java-modules/core-java-lang-2) From 42ec60311c692dcce87c3432f357cad4997bcd06 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:45:45 +0800 Subject: [PATCH 109/304] Update README.md --- spring-core/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-core/README.md b/spring-core/README.md index 6d274e89f0..03e946eda4 100644 --- a/spring-core/README.md +++ b/spring-core/README.md @@ -6,7 +6,7 @@ This module contains articles about core Spring functionality - [Wiring in Spring: @Autowired, @Resource and @Inject](https://www.baeldung.com/spring-annotations-resource-inject-autowire) - [Constructor Injection in Spring with Lombok](httsp://www.baeldung.com/spring-injection-lombok) - [Introduction to Spring’s StreamUtils](https://www.baeldung.com/spring-stream-utils) -- [XML-Based Injection in Spring](httsp://www.baeldung.com/spring-xml-injection) +- [XML-Based Injection in Spring](https://www.baeldung.com/spring-xml-injection) - [A Quick Guide to the Spring @Lazy Annotation](https://www.baeldung.com/spring-lazy-annotation) - [BeanNameAware and BeanFactoryAware Interfaces in Spring](https://www.baeldung.com/spring-bean-name-factory-aware) - [Access a File from the Classpath in a Spring Application](https://www.baeldung.com/spring-classpath-file-access) From be73064472322987b9035df947644c854d844d13 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:48:08 +0800 Subject: [PATCH 110/304] Update README.md --- spring-ejb/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-ejb/README.md b/spring-ejb/README.md index 6c63c2709f..423d55ea22 100644 --- a/spring-ejb/README.md +++ b/spring-ejb/README.md @@ -6,7 +6,6 @@ This module contains articles about Spring with EJB - [Guide to EJB Set-up](https://www.baeldung.com/ejb-intro) - [Java EE Session Beans](https://www.baeldung.com/ejb-session-beans) -- [Introduction to EJB JNDI Lookup on WildFly Application Server](httpss://www.baeldung.com/wildfly-ejb-jndi) - [A Guide to Message Driven Beans in EJB](https://www.baeldung.com/ejb-message-driven-beans) - [Integration Guide for Spring and EJB](https://www.baeldung.com/spring-ejb) - [Singleton Session Bean in Java EE](https://www.baeldung.com/java-ee-singleton-session-bean) From 67670bb4e4cf11b328c0fdfd2e2b3872a3dde233 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:49:26 +0800 Subject: [PATCH 111/304] Create README.md --- spring-ejb/spring-ejb-client/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-ejb/spring-ejb-client/README.md diff --git a/spring-ejb/spring-ejb-client/README.md b/spring-ejb/spring-ejb-client/README.md new file mode 100644 index 0000000000..9addac7867 --- /dev/null +++ b/spring-ejb/spring-ejb-client/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Introduction to EJB JNDI Lookup on WildFly Application Server](https://www.baeldung.com/wildfly-ejb-jndi) From 92bbfccefb8eec933325326297aec59442cbde7e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:50:07 +0800 Subject: [PATCH 112/304] Create README.md --- spring-ejb/spring-ejb-remote/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-ejb/spring-ejb-remote/README.md diff --git a/spring-ejb/spring-ejb-remote/README.md b/spring-ejb/spring-ejb-remote/README.md new file mode 100644 index 0000000000..9addac7867 --- /dev/null +++ b/spring-ejb/spring-ejb-remote/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Introduction to EJB JNDI Lookup on WildFly Application Server](https://www.baeldung.com/wildfly-ejb-jndi) From bc6855e4e7bdc395cef4923f5d3bac78d2c76c37 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:51:42 +0800 Subject: [PATCH 113/304] Update README.md --- spring-core/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-core/README.md b/spring-core/README.md index 03e946eda4..1f3dcb783b 100644 --- a/spring-core/README.md +++ b/spring-core/README.md @@ -4,7 +4,7 @@ This module contains articles about core Spring functionality ### Relevant Articles: - [Wiring in Spring: @Autowired, @Resource and @Inject](https://www.baeldung.com/spring-annotations-resource-inject-autowire) -- [Constructor Injection in Spring with Lombok](httsp://www.baeldung.com/spring-injection-lombok) +- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok) - [Introduction to Spring’s StreamUtils](https://www.baeldung.com/spring-stream-utils) - [XML-Based Injection in Spring](https://www.baeldung.com/spring-xml-injection) - [A Quick Guide to the Spring @Lazy Annotation](https://www.baeldung.com/spring-lazy-annotation) From 0c5f5a3dc402bc8c62ede1234e400d1612936462 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:53:22 +0800 Subject: [PATCH 114/304] Update README.md --- java-collections-maps-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-collections-maps-2/README.md b/java-collections-maps-2/README.md index 0db83fbae7..8b33276f56 100644 --- a/java-collections-maps-2/README.md +++ b/java-collections-maps-2/README.md @@ -5,7 +5,7 @@ This module contains articles about Map data structures in Java. ### Relevant Articles: - [Map of Primitives in Java](https://www.baeldung.com/java-map-primitives) - [Copying a HashMap in Java](https://www.baeldung.com/java-copy-hashmap) -- [Guide to Java HashMap]() +- [A Guide to Java HashMap](https://www.baeldung.com/java-hashmap) - [Guide to WeakHashMap in Java](https://www.baeldung.com/java-weakhashmap) - [Map to String Conversion in Java](https://www.baeldung.com/java-map-to-string-conversion) - [Iterate over a Map in Java](https://www.baeldung.com/java-iterate-map) From 12a6e3d86210db7748432f08a0e384999a745d6b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:55:27 +0800 Subject: [PATCH 115/304] Update README.md --- core-java-modules/core-java-lang/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang/README.md b/core-java-modules/core-java-lang/README.md index bd24c2831f..c4a880310c 100644 --- a/core-java-modules/core-java-lang/README.md +++ b/core-java-modules/core-java-lang/README.md @@ -14,4 +14,5 @@ This module contains articles about core features in the Java language - [Retrieving a Class Name in Java](https://www.baeldung.com/java-class-name) - [Attaching Values to Java Enum](https://www.baeldung.com/java-enum-values) - [The Java continue and break Keywords](https://www.baeldung.com/java-continue-and-break) +- [A Guide to Java Enums](https://www.baeldung.com/a-guide-to-java-enums) - [[More --> ]](/core-java-modules/core-java-lang-2) From 47a1f27b97cc71fd0408dc4eaf94fd2bc12370c9 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:57:58 +0800 Subject: [PATCH 116/304] Update README.md --- core-java-modules/core-java-exceptions/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-exceptions/README.md b/core-java-modules/core-java-exceptions/README.md index ba327b06f2..54fb910492 100644 --- a/core-java-modules/core-java-exceptions/README.md +++ b/core-java-modules/core-java-exceptions/README.md @@ -12,4 +12,4 @@ This module contains articles about core java exceptions - [“Sneaky Throws” in Java](https://www.baeldung.com/java-sneaky-throws) - [The StackOverflowError in Java](https://www.baeldung.com/java-stack-overflow-error) - [Checked and Unchecked Exceptions in Java](https://www.baeldung.com/java-checked-unchecked-exceptions) - +- [Java – Try with Resources](https://www.baeldung.com/java-try-with-resources) From 8fe77a9e5fa0f492a5130545c082f2ebc2f4f5e4 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 19:59:57 +0800 Subject: [PATCH 117/304] Update README.md --- core-java-modules/core-java-lang/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang/README.md b/core-java-modules/core-java-lang/README.md index c4a880310c..9e98bb849b 100644 --- a/core-java-modules/core-java-lang/README.md +++ b/core-java-modules/core-java-lang/README.md @@ -15,4 +15,5 @@ This module contains articles about core features in the Java language - [Attaching Values to Java Enum](https://www.baeldung.com/java-enum-values) - [The Java continue and break Keywords](https://www.baeldung.com/java-continue-and-break) - [A Guide to Java Enums](https://www.baeldung.com/a-guide-to-java-enums) +- [Infinite Loops in Java](https://www.baeldung.com/infinite-loops-java) - [[More --> ]](/core-java-modules/core-java-lang-2) From c454bfd58c6720af830d397fa227358dc9d79894 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:01:43 +0800 Subject: [PATCH 118/304] Update README.md --- core-java-modules/core-java-exceptions/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-exceptions/README.md b/core-java-modules/core-java-exceptions/README.md index 54fb910492..1cd8411805 100644 --- a/core-java-modules/core-java-exceptions/README.md +++ b/core-java-modules/core-java-exceptions/README.md @@ -13,3 +13,4 @@ This module contains articles about core java exceptions - [The StackOverflowError in Java](https://www.baeldung.com/java-stack-overflow-error) - [Checked and Unchecked Exceptions in Java](https://www.baeldung.com/java-checked-unchecked-exceptions) - [Java – Try with Resources](https://www.baeldung.com/java-try-with-resources) +- [Java Global Exception Handler](https://www.baeldung.com/java-global-exception-handler) From e6d04b8624b5d6ab03d47a0f49da836d6de40f38 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:02:51 +0800 Subject: [PATCH 119/304] Update README.md --- core-java-modules/core-java-exceptions/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-exceptions/README.md b/core-java-modules/core-java-exceptions/README.md index 1cd8411805..6a32de8012 100644 --- a/core-java-modules/core-java-exceptions/README.md +++ b/core-java-modules/core-java-exceptions/README.md @@ -14,3 +14,4 @@ This module contains articles about core java exceptions - [Checked and Unchecked Exceptions in Java](https://www.baeldung.com/java-checked-unchecked-exceptions) - [Java – Try with Resources](https://www.baeldung.com/java-try-with-resources) - [Java Global Exception Handler](https://www.baeldung.com/java-global-exception-handler) +- [Common Java Exceptions](https://www.baeldung.com/java-common-exceptions) From 9c9363400e62690e75bd0a4bb7bd0ee7cc53d695 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:03:45 +0800 Subject: [PATCH 120/304] Update README.md --- core-java-modules/core-java-exceptions/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-exceptions/README.md b/core-java-modules/core-java-exceptions/README.md index 6a32de8012..4936c032c7 100644 --- a/core-java-modules/core-java-exceptions/README.md +++ b/core-java-modules/core-java-exceptions/README.md @@ -15,3 +15,4 @@ This module contains articles about core java exceptions - [Java – Try with Resources](https://www.baeldung.com/java-try-with-resources) - [Java Global Exception Handler](https://www.baeldung.com/java-global-exception-handler) - [Common Java Exceptions](https://www.baeldung.com/java-common-exceptions) +- [Throw Exception in Optional in Java 8](https://www.baeldung.com/java-optional-throw-exception) From 06679f56b258abfaf737a12d0fe326b49560bd85 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:06:52 +0800 Subject: [PATCH 121/304] Update README.md --- core-java-modules/core-java-exceptions/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-exceptions/README.md b/core-java-modules/core-java-exceptions/README.md index 4936c032c7..f7b0c37e73 100644 --- a/core-java-modules/core-java-exceptions/README.md +++ b/core-java-modules/core-java-exceptions/README.md @@ -16,3 +16,4 @@ This module contains articles about core java exceptions - [Java Global Exception Handler](https://www.baeldung.com/java-global-exception-handler) - [Common Java Exceptions](https://www.baeldung.com/java-common-exceptions) - [Throw Exception in Optional in Java 8](https://www.baeldung.com/java-optional-throw-exception) +- [How to Find an Exception’s Root Cause in Java](https://www.baeldung.com/java-exception-root-cause) From 0517a2f4278f985c4452c9d26f89ae4f65ea61f9 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:09:00 +0800 Subject: [PATCH 122/304] Update README.md --- core-java-modules/core-java-lang-oop-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-oop-3/README.md b/core-java-modules/core-java-lang-oop-3/README.md index bef0605577..f8efcb737f 100644 --- a/core-java-modules/core-java-lang-oop-3/README.md +++ b/core-java-modules/core-java-lang-oop-3/README.md @@ -14,4 +14,5 @@ This module contains articles about Object-oriented programming (OOP) in Java - [Java Classes and Objects](https://www.baeldung.com/java-classes-objects) - [Java Interfaces](https://www.baeldung.com/java-interfaces) - [Static and Dynamic Binding in Java](https://www.baeldung.com/java-static-dynamic-binding) +- [Methods in Java](https://www.baeldung.com/java-methods) - [[<-- Prev]](/core-java-modules/core-java-lang-oop-2) From 6e113fbb5f4b056bdf6f2eab98713e7add053937 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:10:10 +0800 Subject: [PATCH 123/304] Update README.md --- logging-modules/log4j2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/logging-modules/log4j2/README.md b/logging-modules/log4j2/README.md index dd326bc7a1..6a65ae9c02 100644 --- a/logging-modules/log4j2/README.md +++ b/logging-modules/log4j2/README.md @@ -5,3 +5,4 @@ - [Programmatic Configuration with Log4j 2](http://www.baeldung.com/log4j2-programmatic-config) - [Creating a Custom Log4j2 Appender](https://www.baeldung.com/log4j2-custom-appender) - [Get Log Output in JSON](http://www.baeldung.com/java-log-json-output) +- [System.out.println vs Loggers](https://www.baeldung.com/java-system-out-println-vs-loggers) From 414f7fd949b5ab0c845550e643bd015170a3da56 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:11:35 +0800 Subject: [PATCH 124/304] Create README.md --- logging-modules/flogger/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 logging-modules/flogger/README.md diff --git a/logging-modules/flogger/README.md b/logging-modules/flogger/README.md new file mode 100644 index 0000000000..ad7a25e24f --- /dev/null +++ b/logging-modules/flogger/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Flogger Fluent Logging](https://www.baeldung.com/flogger-logging) From 4ae6011742debc9c149f26636e854f6d94c849bd Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:13:10 +0800 Subject: [PATCH 125/304] Update README.md --- spring-5-reactive-client/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-5-reactive-client/README.md b/spring-5-reactive-client/README.md index 5a9a3f4e0e..303f86a9ef 100644 --- a/spring-5-reactive-client/README.md +++ b/spring-5-reactive-client/README.md @@ -8,3 +8,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles - [Simultaneous Spring WebClient Calls](https://www.baeldung.com/spring-webclient-simultaneous-calls) - [Logging Spring WebClient Calls](https://www.baeldung.com/spring-log-webclient-calls) +- [Mocking a WebClient in Spring](https://www.baeldung.com/spring-mocking-webclient) From e1680a387e466bcc64587348d96dd5feaffe13e1 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:14:21 +0800 Subject: [PATCH 126/304] Update README.md --- mapstruct/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mapstruct/README.md b/mapstruct/README.md index 3107e06190..c586267478 100644 --- a/mapstruct/README.md +++ b/mapstruct/README.md @@ -6,3 +6,4 @@ This module contains articles about MapStruct. - [Quick Guide to MapStruct](https://www.baeldung.com/mapstruct) - [Custom Mapper with MapStruct](https://www.baeldung.com/mapstruct-custom-mapper) - [Using Multiple Source Objects with MapStruct](https://www.baeldung.com/mapstruct-multiple-source-objects) +- [Ignoring Unmapped Properties with MapStruct](https://www.baeldung.com/mapstruct-ignore-unmapped-properties) From a6b064e665e8fce5096708a44ec0689b79d4fcb0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:16:16 +0800 Subject: [PATCH 127/304] Update README.md --- core-java-modules/core-java-networking-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-networking-2/README.md b/core-java-modules/core-java-networking-2/README.md index c384a28b64..7dc33b5e11 100644 --- a/core-java-modules/core-java-networking-2/README.md +++ b/core-java-modules/core-java-networking-2/README.md @@ -9,4 +9,5 @@ This module contains articles about networking in Java - [Using Curl in Java](https://www.baeldung.com/java-curl) - [Do a Simple HTTP Request in Java](http://www.baeldung.com/java-http-request) - [Sending Emails with Java](http://www.baeldung.com/java-email) +- [Authentication with HttpUrlConnection](https://www.baeldung.com/java-http-url-connection) - [[<-- Prev]](/core-java-modules/core-java-networking) From a0fb03031f284b5c4dd4656f3fd1e14b1919332b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:18:14 +0800 Subject: [PATCH 128/304] Create README.md --- spring-boot-data/src/main/java/com/baeldung/javers/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-boot-data/src/main/java/com/baeldung/javers/README.md diff --git a/spring-boot-data/src/main/java/com/baeldung/javers/README.md b/spring-boot-data/src/main/java/com/baeldung/javers/README.md new file mode 100644 index 0000000000..4f8dd4abff --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/javers/README.md @@ -0,0 +1,3 @@ +### Relevant Articles + +- [Using JaVers for Data Model Auditing in Spring Data](https://www.baeldung.com/spring-data-javers-audit) From ca29686b7c152429f74fb6ab80e362027b1b7e21 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:19:36 +0800 Subject: [PATCH 129/304] Update README.md --- xml/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/xml/README.md b/xml/README.md index 78ed3a52a9..367a0334f6 100644 --- a/xml/README.md +++ b/xml/README.md @@ -11,3 +11,4 @@ This module contains articles about eXtensible Markup Language (XML) - [Modifying an XML Attribute in Java](https://www.baeldung.com/java-modify-xml-attribute) - [Convert XML to HTML in Java](https://www.baeldung.com/java-convert-xml-to-html) - [Parsing an XML File Using StAX](https://www.baeldung.com/java-stax) +- [Parsing an XML File Using SAX Parser](https://www.baeldung.com/java-sax-parser) From 77264aa6f07013131a5ac244bd80b764bab3e9ee Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:20:45 +0800 Subject: [PATCH 130/304] Update README.md --- spring-mvc-simple-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-simple-2/README.md b/spring-mvc-simple-2/README.md index 63227ea069..09a2370f57 100644 --- a/spring-mvc-simple-2/README.md +++ b/spring-mvc-simple-2/README.md @@ -7,4 +7,5 @@ This module contains articles about Spring MVC - [A Custom Data Binder in Spring MVC](https://www.baeldung.com/spring-mvc-custom-data-binder) - [Validating Lists in a Spring Controller](https://www.baeldung.com/spring-validate-list-controller) - [Spring Validation Message Interpolation](https://www.baeldung.com/spring-validation-message-interpolation) +- [Using a Slash Character in Spring URLs](https://www.baeldung.com/spring-slash-character-in-url) - More articles: [[<-- prev]](/spring-mvc-simple) From 6fa36b1ecbb1e2e3fe2705986eb1128737d2c643 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:22:38 +0800 Subject: [PATCH 131/304] Create README.md --- linux-bash/text/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 linux-bash/text/README.md diff --git a/linux-bash/text/README.md b/linux-bash/text/README.md new file mode 100644 index 0000000000..e0ee0c1600 --- /dev/null +++ b/linux-bash/text/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Linux Commands – Remove All Text After X](https://www.baeldung.com/linux/remove-text-after-x-in-file) From a3992b3042dd13f494aa1a9cf9f5c825b19aaaef Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:28:55 +0800 Subject: [PATCH 132/304] Update README.md --- persistence-modules/hibernate-mapping/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/hibernate-mapping/README.md b/persistence-modules/hibernate-mapping/README.md index 3271f0c1b6..5bbdeecbea 100644 --- a/persistence-modules/hibernate-mapping/README.md +++ b/persistence-modules/hibernate-mapping/README.md @@ -8,3 +8,4 @@ This module contains articles about Object-relational Mapping (ORM) with Hiberna - [Difference Between @Size, @Length, and @Column(length=value)](https://www.baeldung.com/jpa-size-length-column-differences) - [Hibernate Validator Specific Constraints](https://www.baeldung.com/hibernate-validator-constraints) - [Hibernate One to Many Annotation Tutorial](http://www.baeldung.com/hibernate-one-to-many) +- [Hibernate @WhereJoinTable Annotation](https://www.baeldung.com/hibernate-wherejointable) From 271b3e4de437139282e5c36c75c16332b5ee9177 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:30:42 +0800 Subject: [PATCH 133/304] Update README.md --- core-java-modules/core-java-io-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-io-2/README.md b/core-java-modules/core-java-io-2/README.md index 2299320f32..f7a2cb2c0c 100644 --- a/core-java-modules/core-java-io-2/README.md +++ b/core-java-modules/core-java-io-2/README.md @@ -3,4 +3,4 @@ - [Create a File in a Specific Directory in Java](https://www.baeldung.com/java-create-file-in-directory) - [A Guide to the Java FileReader Class](https://www.baeldung.com/java-filereader) - +- [The Java File Class](https://www.baeldung.com/java-io-file) From a4c3c7914a08edfdef2d600f63733559f27a8629 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:33:56 +0800 Subject: [PATCH 134/304] Create README.md --- core-java-modules/core-java-security-manager/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 core-java-modules/core-java-security-manager/README.md diff --git a/core-java-modules/core-java-security-manager/README.md b/core-java-modules/core-java-security-manager/README.md new file mode 100644 index 0000000000..68dd9d5223 --- /dev/null +++ b/core-java-modules/core-java-security-manager/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +-[Intro to the Java SecurityManager](https://www.baeldung.com/java-security-manager) From 77afc8a81b158cf82a60c0745de60a357959feb2 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:34:10 +0800 Subject: [PATCH 135/304] Update README.md --- core-java-modules/core-java-security-manager/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-security-manager/README.md b/core-java-modules/core-java-security-manager/README.md index 68dd9d5223..a4abe7f80a 100644 --- a/core-java-modules/core-java-security-manager/README.md +++ b/core-java-modules/core-java-security-manager/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: --[Intro to the Java SecurityManager](https://www.baeldung.com/java-security-manager) +- [Intro to the Java SecurityManager](https://www.baeldung.com/java-security-manager) From 41f2c7eea18ab10788ff8ee0499790efd6af7a1b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:36:17 +0800 Subject: [PATCH 136/304] Update README.md --- core-kotlin-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-kotlin-2/README.md b/core-kotlin-2/README.md index ecf16c2c91..06dda396d9 100644 --- a/core-kotlin-2/README.md +++ b/core-kotlin-2/README.md @@ -12,4 +12,5 @@ This module contains articles about core Kotlin. - [Split a List into Parts in Kotlin](https://www.baeldung.com/kotlin-split-list-into-parts) - [String Comparison in Kotlin](https://www.baeldung.com/kotlin-string-comparison) - [Guide to JVM Platform Annotations in Kotlin](https://www.baeldung.com/kotlin-jvm-annotations) +- [Finding an Element in a List Using Kotlin](https://www.baeldung.com/kotlin-finding-element-in-list) - More articles: [[<-- prev]](/core-kotlin) From 9161a675b82d0717d5edf49a1198440805d61f79 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:37:44 +0800 Subject: [PATCH 137/304] Update README.md --- testing-modules/spring-testing/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/spring-testing/README.md b/testing-modules/spring-testing/README.md index 1b06c13953..2427dfabbe 100644 --- a/testing-modules/spring-testing/README.md +++ b/testing-modules/spring-testing/README.md @@ -6,3 +6,4 @@ - [How to Test the @Scheduled Annotation](https://www.baeldung.com/spring-testing-scheduled-annotation) - [Using SpringJUnit4ClassRunner with Parameterized](https://www.baeldung.com/springjunit4classrunner-parameterized) - [Override Properties in Spring’s Tests](https://www.baeldung.com/spring-tests-override-properties) +- [A Quick Guide to @DirtiesContext](https://www.baeldung.com/spring-dirtiescontext) From a658d67165a7617e05c92c58d99688aacd4ae046 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:38:55 +0800 Subject: [PATCH 138/304] Update README.md --- spring-mvc-simple-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-simple-2/README.md b/spring-mvc-simple-2/README.md index 09a2370f57..18e5dd369b 100644 --- a/spring-mvc-simple-2/README.md +++ b/spring-mvc-simple-2/README.md @@ -8,4 +8,5 @@ This module contains articles about Spring MVC - [Validating Lists in a Spring Controller](https://www.baeldung.com/spring-validate-list-controller) - [Spring Validation Message Interpolation](https://www.baeldung.com/spring-validation-message-interpolation) - [Using a Slash Character in Spring URLs](https://www.baeldung.com/spring-slash-character-in-url) +- [Using Enums as Request Parameters in Spring](https://www.baeldung.com/spring-enum-request-param) - More articles: [[<-- prev]](/spring-mvc-simple) From 112850073229cfed2c18b20b70b4f1a5a7b092f6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:40:19 +0800 Subject: [PATCH 139/304] Update README.md --- spring-cloud/spring-cloud-stream/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-cloud/spring-cloud-stream/README.md b/spring-cloud/spring-cloud-stream/README.md index fd1eeccfda..1fb0647ee3 100644 --- a/spring-cloud/spring-cloud-stream/README.md +++ b/spring-cloud/spring-cloud-stream/README.md @@ -4,3 +4,4 @@ This module contains articles about Spring Cloud Stream ## Relevant Articles - [Introduction to Spring Cloud Stream](http://www.baeldung.com/spring-cloud-stream) +- [Integrating Spring with AWS Kinesis](https://www.baeldung.com/spring-aws-kinesis) From 9549ba9a6e9f456c9e85be99511b551129859633 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:42:53 +0800 Subject: [PATCH 140/304] Update README.md --- spring-mvc-simple-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-simple-2/README.md b/spring-mvc-simple-2/README.md index 18e5dd369b..cff8891a1a 100644 --- a/spring-mvc-simple-2/README.md +++ b/spring-mvc-simple-2/README.md @@ -9,4 +9,5 @@ This module contains articles about Spring MVC - [Spring Validation Message Interpolation](https://www.baeldung.com/spring-validation-message-interpolation) - [Using a Slash Character in Spring URLs](https://www.baeldung.com/spring-slash-character-in-url) - [Using Enums as Request Parameters in Spring](https://www.baeldung.com/spring-enum-request-param) +- [Excluding URLs for a Filter in a Spring Web Application](https://www.baeldung.com/spring-exclude-filter) - More articles: [[<-- prev]](/spring-mvc-simple) From 201166f4a90462690d75acbec098da3fbfde3eba Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:44:36 +0800 Subject: [PATCH 141/304] Update README.md --- core-java-modules/core-java-io-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-io-2/README.md b/core-java-modules/core-java-io-2/README.md index f7a2cb2c0c..867b7ad732 100644 --- a/core-java-modules/core-java-io-2/README.md +++ b/core-java-modules/core-java-io-2/README.md @@ -4,3 +4,4 @@ - [Create a File in a Specific Directory in Java](https://www.baeldung.com/java-create-file-in-directory) - [A Guide to the Java FileReader Class](https://www.baeldung.com/java-filereader) - [The Java File Class](https://www.baeldung.com/java-io-file) +- [Java FileWriter](https://www.baeldung.com/java-filewriter) From 6c177407c845be2da94516f847eb6d44d4a36ff8 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:47:45 +0800 Subject: [PATCH 142/304] Update README.md --- java-collections-maps/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java-collections-maps/README.md b/java-collections-maps/README.md index 87fefe1b9d..dfd0d47dbc 100644 --- a/java-collections-maps/README.md +++ b/java-collections-maps/README.md @@ -4,7 +4,7 @@ This module contains articles about Map data structures in Java. ### Relevant Articles: - [Guide to the Guava BiMap](https://www.baeldung.com/guava-bimap) -- [The Java HashMap Under the Hood](https://www.baeldung.com/java-hashmap) +- [A Guide to Java HashMap](https://www.baeldung.com/java-hashmap) - [A Guide to LinkedHashMap in Java](https://www.baeldung.com/java-linked-hashmap) - [A Guide to TreeMap in Java](https://www.baeldung.com/java-treemap) - [How to Store Duplicate Keys in a Map in Java?](https://www.baeldung.com/java-map-duplicate-keys) @@ -13,4 +13,5 @@ This module contains articles about Map data structures in Java. - [Comparing Two HashMaps in Java](https://www.baeldung.com/java-compare-hashmaps) - [Immutable Map Implementations in Java](https://www.baeldung.com/java-immutable-maps) - [Guide to Apache Commons MultiValuedMap](https://www.baeldung.com/apache-commons-multi-valued-map) +- [The Java HashMap Under the Hood](https://www.baeldung.com/java-hashmap-advanced) - More articles: [[next -->]](/../java-collections-maps-2) From 149153e09ea587e4e356a5c37a0b3100d07d15d3 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:49:31 +0800 Subject: [PATCH 143/304] Update README.md --- algorithms-miscellaneous-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-3/README.md b/algorithms-miscellaneous-3/README.md index 1a113a4f89..93426b3e0d 100644 --- a/algorithms-miscellaneous-3/README.md +++ b/algorithms-miscellaneous-3/README.md @@ -17,4 +17,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g. - [Interpolation Search in Java](https://www.baeldung.com/java-interpolation-search) - [The K-Means Clustering Algorithm in Java](https://www.baeldung.com/java-k-means-clustering-algorithm) - [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) +- [Breadth-First Search Algorithm in Java](https://www.baeldung.com/java-breadth-first-search) - More articles: [[<-- prev]](/algorithms-miscellaneous-2) [[next -->]](/algorithms-miscellaneous-4) From 3ff80e5684a633e11aa2cf5ebbcc82005ccb77e2 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:50:36 +0800 Subject: [PATCH 144/304] Update README.md --- libraries-security/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries-security/README.md b/libraries-security/README.md index 68badcf12d..819bc866cf 100644 --- a/libraries-security/README.md +++ b/libraries-security/README.md @@ -9,3 +9,4 @@ This module contains articles about security libraries. - [Guide to Google Tink](https://www.baeldung.com/google-tink) - [Introduction to BouncyCastle with Java](https://www.baeldung.com/java-bouncy-castle) - [Intro to Jasypt](https://www.baeldung.com/jasypt) +- [Digital Signature in Java](https://www.baeldung.com/java-digital-signature) From 578ee20d24c66c1c6421f1ae78afeba693ca79b8 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:52:39 +0800 Subject: [PATCH 145/304] Update README.md --- libraries-2/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries-2/README.md b/libraries-2/README.md index fd1f73c386..95c454edbb 100644 --- a/libraries-2/README.md +++ b/libraries-2/README.md @@ -18,6 +18,7 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m - [Key Value Store with Chronicle Map](https://www.baeldung.com/java-chronicle-map) - [Guide to MapDB](https://www.baeldung.com/mapdb) - [A Guide to Apache Mesos](https://www.baeldung.com/apache-mesos) -- [JasperReports with Spring](https://www.baeldung.com/spring-jasper) +- [JasperReports with Spring](https://www.baeldung.com/spring-jasper)] +- [Jetty ReactiveStreams HTTP Client](https://www.baeldung.com/jetty-reactivestreams-http-client) - More articles [[<-- prev]](/libraries) From fb5a73f793bd8479c0fd8aa05bf8fd33c9dbf45e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:53:29 +0800 Subject: [PATCH 146/304] Update README.md --- spring-batch/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-batch/README.md b/spring-batch/README.md index 95abbaf931..9e09612490 100644 --- a/spring-batch/README.md +++ b/spring-batch/README.md @@ -7,3 +7,4 @@ This module contains articles about Spring Batch - [Spring Batch using Partitioner](https://www.baeldung.com/spring-batch-partitioner) - [Spring Batch – Tasklets vs Chunks](https://www.baeldung.com/spring-batch-tasklet-chunk) - [How to Trigger and Stop a Scheduled Spring Batch Job](https://www.baeldung.com/spring-batch-start-stop-job) +- [Configuring Skip Logic in Spring Batch](https://www.baeldung.com/spring-batch-skip-logic) From c840d817d8a31faa54dec2dad2ec26493de9932f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 20:55:06 +0800 Subject: [PATCH 147/304] Update README.md --- core-java-modules/core-java-collections-list-2/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-collections-list-2/README.md b/core-java-modules/core-java-collections-list-2/README.md index fada9d96ac..0d2da41b41 100644 --- a/core-java-modules/core-java-collections-list-2/README.md +++ b/core-java-modules/core-java-collections-list-2/README.md @@ -11,4 +11,5 @@ This module contains articles about the Java List collection - [Ways to Iterate Over a List in Java](https://www.baeldung.com/java-iterate-list) - [Flattening Nested Collections in Java](http://www.baeldung.com/java-flatten-nested-collections) - [Intersection of Two Lists in Java](https://www.baeldung.com/java-lists-intersection) -- [[<-- Prev]](/core-java-modules/core-java-collections-list)[[Next -->]](/core-java-modules/core-java-collections-list-3) \ No newline at end of file +- [Searching for a String in an ArrayList](https://www.baeldung.com/java-search-string-arraylist) +- [[<-- Prev]](/core-java-modules/core-java-collections-list)[[Next -->]](/core-java-modules/core-java-collections-list-3) From dcce44b543c5b7c98171b0455ed477eee31fc6c6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 21:14:53 +0800 Subject: [PATCH 148/304] Update README.md --- core-java-modules/core-java/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 436a481803..3826644b0c 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -41,7 +41,7 @@ - [Abstract Classes in Java](https://www.baeldung.com/java-abstract-class) - [Guide to Character Encoding](https://www.baeldung.com/java-char-encoding) - [Graphs in Java](https://www.baeldung.com/java-graphs) -- [Console I/O in Java](http://www.baeldung.com/java-console-input-output) +- [Read and Write User Input in Java](http://www.baeldung.com/java-console-input-output) - [Formatting with printf() in Java](https://www.baeldung.com/java-printstream-printf) - [Retrieve Fields from a Java Class Using Reflection](https://www.baeldung.com/java-reflection-class-fields) - [Introduction to Basic Syntax in Java](https://www.baeldung.com/java-syntax) From 1259bee61d09423c1e96b4bf89c39a5a77da905d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 18 Oct 2019 21:19:38 +0800 Subject: [PATCH 149/304] Update README.md --- core-java-modules/core-java-string-conversions-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-string-conversions-2/README.md b/core-java-modules/core-java-string-conversions-2/README.md index b4da1b8bad..afdd7e5760 100644 --- a/core-java-modules/core-java-string-conversions-2/README.md +++ b/core-java-modules/core-java-string-conversions-2/README.md @@ -5,5 +5,5 @@ This module contains articles about string conversions from/to another type. ### Relevant Articles: - [Java String Conversions](https://www.baeldung.com/java-string-conversions) - [Convert String to Byte Array and Reverse in Java](https://www.baeldung.com/java-string-to-byte-array) -- [Convert Char Array to String](https://www.baeldung.com/java-char-array-to-string) +- [Convert Character Array to String in Java](https://www.baeldung.com/java-char-array-to-string) - More articles: [[<-- prev]](/core-java-string-conversions) From f0df9a7998b9c02bf131e63b857c85f87fcfb665 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Fri, 18 Oct 2019 23:39:07 +0530 Subject: [PATCH 150/304] BAEL-17684 Pom properties cleanup --- ddd/pom.xml | 4 --- disruptor/pom.xml | 11 +-------- dozer/pom.xml | 1 - dubbo/pom.xml | 1 - ethereum/pom.xml | 3 --- flyway-cdi-extension/pom.xml | 3 --- google-web-toolkit/pom.xml | 1 - gson/pom.xml | 1 - guava-collections-map/pom.xml | 6 ----- guava-collections-set/pom.xml | 3 --- guava-collections/pom.xml | 2 -- guava-io/pom.xml | 1 - guava-modules/guava-18/pom.xml | 4 --- guava-modules/guava-19/pom.xml | 4 --- guava-modules/guava-21/pom.xml | 1 - guava/pom.xml | 4 --- hazelcast/pom.xml | 1 - httpclient-simple/pom.xml | 1 - httpclient/pom.xml | 45 ---------------------------------- hystrix/pom.xml | 14 ----------- 20 files changed, 1 insertion(+), 110 deletions(-) diff --git a/ddd/pom.xml b/ddd/pom.xml index 4ac65ea841..c249007ba4 100644 --- a/ddd/pom.xml +++ b/ddd/pom.xml @@ -3,7 +3,6 @@ 4.0.0 com.baeldung.ddd ddd - 0.0.1-SNAPSHOT ddd jar DDD series examples @@ -35,7 +34,6 @@ org.junit.platform junit-platform-launcher - ${junit-platform.version} test @@ -85,8 +83,6 @@ 1.0.1 - 2.22.0 - 2.0.6.RELEASE \ No newline at end of file diff --git a/disruptor/pom.xml b/disruptor/pom.xml index e1d78e7ed6..a4859d4bae 100644 --- a/disruptor/pom.xml +++ b/disruptor/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung disruptor 0.1.0-SNAPSHOT disruptor @@ -15,11 +14,6 @@ - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - com.lmax disruptor @@ -116,10 +110,7 @@ 3.3.6 - - 6.10 - 3.6.1 - + 2.4.3 3.0.2 1.4.4 diff --git a/dozer/pom.xml b/dozer/pom.xml index 8234eb4c79..c781962d83 100644 --- a/dozer/pom.xml +++ b/dozer/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung dozer 1.0 dozer diff --git a/dubbo/pom.xml b/dubbo/pom.xml index 9fe228bf89..947175b6a0 100644 --- a/dubbo/pom.xml +++ b/dubbo/pom.xml @@ -32,7 +32,6 @@ 2.5.7 3.4.11 0.10 - 2.19.1 diff --git a/ethereum/pom.xml b/ethereum/pom.xml index 80e1c04676..f4850df844 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -3,7 +3,6 @@ 4.0.0 com.baeldung.ethereum ethereum - 0.0.1-SNAPSHOT ethereum @@ -207,8 +206,6 @@ - UTF-8 - 8.5.4 1.5.0-RELEASE 3.3.1 1.5.6.RELEASE diff --git a/flyway-cdi-extension/pom.xml b/flyway-cdi-extension/pom.xml index e8b327e35f..49bd6bd9fd 100644 --- a/flyway-cdi-extension/pom.xml +++ b/flyway-cdi-extension/pom.xml @@ -3,7 +3,6 @@ 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"> 4.0.0 - com.baeldung flyway-cdi-extension 1.0-SNAPSHOT flyway-cdi-extension @@ -51,8 +50,6 @@ - 1.8 - 1.8 2.0.SP1 3.0.5.Final 5.1.4 diff --git a/google-web-toolkit/pom.xml b/google-web-toolkit/pom.xml index 0723cd3be2..8a7cb87701 100644 --- a/google-web-toolkit/pom.xml +++ b/google-web-toolkit/pom.xml @@ -5,7 +5,6 @@ 4.0.0 - com.baeldung google-web-toolkit 1.0-SNAPSHOT google-web-toolkit diff --git a/gson/pom.xml b/gson/pom.xml index 9d2cf630d0..4aa6c00458 100644 --- a/gson/pom.xml +++ b/gson/pom.xml @@ -2,7 +2,6 @@ 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"> 4.0.0 - com.baeldung gson 0.1-SNAPSHOT gson diff --git a/guava-collections-map/pom.xml b/guava-collections-map/pom.xml index 45bb6b8caa..21597d0e28 100644 --- a/guava-collections-map/pom.xml +++ b/guava-collections-map/pom.xml @@ -13,9 +13,6 @@ ../parent-java - - - guava-collections-map @@ -26,7 +23,4 @@ - - - \ No newline at end of file diff --git a/guava-collections-set/pom.xml b/guava-collections-set/pom.xml index 46dcae492d..640a28c4c1 100644 --- a/guava-collections-set/pom.xml +++ b/guava-collections-set/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung guava-collections-set 0.1.0-SNAPSHOT guava-collections-set @@ -28,8 +27,6 @@ - - 27.1-jre 3.6.1 diff --git a/guava-collections/pom.xml b/guava-collections/pom.xml index 8cdb086029..9dfcceaab8 100644 --- a/guava-collections/pom.xml +++ b/guava-collections/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung guava-collections 0.1.0-SNAPSHOT guava-collections @@ -54,7 +53,6 @@ - 24.0-jre 4.1 diff --git a/guava-io/pom.xml b/guava-io/pom.xml index 2a66baba80..aaaf7edd4e 100644 --- a/guava-io/pom.xml +++ b/guava-io/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung guava-io 0.1.0-SNAPSHOT guava-io diff --git a/guava-modules/guava-18/pom.xml b/guava-modules/guava-18/pom.xml index d55aa9ce82..199d735a41 100644 --- a/guava-modules/guava-18/pom.xml +++ b/guava-modules/guava-18/pom.xml @@ -13,8 +13,4 @@ ../../parent-java - - 18.0 - - \ No newline at end of file diff --git a/guava-modules/guava-19/pom.xml b/guava-modules/guava-19/pom.xml index 0548bb0c1f..c431f78cf7 100644 --- a/guava-modules/guava-19/pom.xml +++ b/guava-modules/guava-19/pom.xml @@ -13,8 +13,4 @@ ../../parent-java - - 19.0 - - \ No newline at end of file diff --git a/guava-modules/guava-21/pom.xml b/guava-modules/guava-21/pom.xml index bdb1058a48..150ce2d4d2 100644 --- a/guava-modules/guava-21/pom.xml +++ b/guava-modules/guava-21/pom.xml @@ -22,7 +22,6 @@ - 21.0 0.9.12 diff --git a/guava/pom.xml b/guava/pom.xml index 3a19901a02..fb8989111c 100644 --- a/guava/pom.xml +++ b/guava/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung guava 0.1.0-SNAPSHOT guava @@ -41,9 +40,6 @@ - - 24.0-jre - 3.6.1 diff --git a/hazelcast/pom.xml b/hazelcast/pom.xml index 705792ad05..9e0b0671d0 100644 --- a/hazelcast/pom.xml +++ b/hazelcast/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung hazelcast 0.0.1-SNAPSHOT hazelcast diff --git a/httpclient-simple/pom.xml b/httpclient-simple/pom.xml index b2b0f98dd1..183c4438de 100644 --- a/httpclient-simple/pom.xml +++ b/httpclient-simple/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung httpclient-simple 0.1-SNAPSHOT httpclient-simple diff --git a/httpclient/pom.xml b/httpclient/pom.xml index 8cd483cfc6..6316ee4eed 100644 --- a/httpclient/pom.xml +++ b/httpclient/pom.xml @@ -1,7 +1,6 @@ 4.0.0 - com.baeldung httpclient 0.1-SNAPSHOT httpclient @@ -48,11 +47,6 @@ httpmime ${httpclient.version} - - commons-codec - commons-codec - ${commons-codec.version} - org.apache.httpcomponents httpasyncclient @@ -82,51 +76,12 @@ - - - live - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - **/*ManualTest.java - - - **/*LiveTest.java - - - - - - - json - - - - - - - - - 19.0 - 1.10 4.1.4 2.5.1 4.5.8 - - 1.6.1 \ No newline at end of file diff --git a/hystrix/pom.xml b/hystrix/pom.xml index e08af2c40f..4aeb47f095 100644 --- a/hystrix/pom.xml +++ b/hystrix/pom.xml @@ -41,23 +41,11 @@ hystrix-metrics-event-stream ${hystrix-metrics-event-stream.version} - com.netflix.rxjava rxjava-core ${rxjava-core.version} - - org.hamcrest - hamcrest-all - ${hamcrest-all.version} - test - - - org.springframework - spring-test - test - @@ -65,9 +53,7 @@ 1.5.8 0.20.7 - 2.7 1.5.8 - 1.5.8 From 9405318805ceeb2e389ea497c3d178f7d2130b2d Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Fri, 18 Oct 2019 23:48:22 +0530 Subject: [PATCH 151/304] BAEL-17684 Pom properties cleanup --- disruptor/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/disruptor/pom.xml b/disruptor/pom.xml index a4859d4bae..213331f25c 100644 --- a/disruptor/pom.xml +++ b/disruptor/pom.xml @@ -14,6 +14,11 @@ + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + com.lmax disruptor From 88a83f5d2c0eb15ffd574ddb9b3ed929bf497694 Mon Sep 17 00:00:00 2001 From: Vivek Balasubramaniam Date: Sat, 19 Oct 2019 17:46:30 +0530 Subject: [PATCH 152/304] BAEL-3091: The Prototype Pattern in Java (Code review comments) --- .../src/main/java/com/baeldung/prototype/Tree.java | 8 ++++---- .../main/java/com/baeldung/prototype/TreeCloneable.java | 7 ------- .../com/baeldung/prototype/TreePrototypeUnitTest.java | 4 ++-- 3 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java index 242ed2176e..470704765c 100644 --- a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java +++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java @@ -1,6 +1,6 @@ package com.baeldung.prototype; -public class Tree implements TreeCloneable { +public class Tree implements Cloneable { private double mass; private double height; @@ -36,10 +36,10 @@ public class Tree implements TreeCloneable { } @Override - public TreeCloneable createA_Clone() { - TreeCloneable tree = null; + public Tree clone() { + Tree tree = null; try { - tree = (TreeCloneable) super.clone(); + tree = (Tree) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java deleted file mode 100644 index e554058624..0000000000 --- a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/TreeCloneable.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.baeldung.prototype; - -public interface TreeCloneable extends Cloneable { - - public TreeCloneable createA_Clone(); - -} diff --git a/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java index 7f260c52bf..0d06da53d6 100644 --- a/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java +++ b/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java @@ -12,10 +12,10 @@ public class TreePrototypeUnitTest { double height = 3.7; Position position = new Position(3, 7); Position otherPosition = new Position(4, 8); - + Tree tree = new Tree(mass, height); tree.setPosition(position); - Tree anotherTree = (Tree) tree.createA_Clone(); + Tree anotherTree = tree.clone(); anotherTree.setPosition(otherPosition); assertEquals(position, tree.getPosition()); From a5f90502fc8a584646102416fcb258bc13924d62 Mon Sep 17 00:00:00 2001 From: Vivek Balasubramaniam Date: Sat, 19 Oct 2019 18:00:56 +0530 Subject: [PATCH 153/304] Minor changes to the toString() method --- .../src/main/java/com/baeldung/prototype/Tree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java index 470704765c..f95d568647 100644 --- a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java +++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/Tree.java @@ -48,7 +48,7 @@ public class Tree implements Cloneable { @Override public String toString() { - return "SomeTree [mass=" + mass + ", height=" + height + ", position=" + position + "]"; + return "Tree [mass=" + mass + ", height=" + height + ", position=" + position + "]"; } } From 46fc338771866c1e38e279232d13685dc1dffd77 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Sat, 19 Oct 2019 20:34:19 +0800 Subject: [PATCH 154/304] Update README.md --- spring-boot-artifacts/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-boot-artifacts/README.md b/spring-boot-artifacts/README.md index 4025e43a65..876954e858 100644 --- a/spring-boot-artifacts/README.md +++ b/spring-boot-artifacts/README.md @@ -7,4 +7,5 @@ This module contains articles about configuring the Spring Boot build process. - [Create a Fat Jar App with Spring Boot](https://www.baeldung.com/deployable-fat-jar-spring-boot) - [Intro to Spring Boot Starters](https://www.baeldung.com/spring-boot-starters) - [Introduction to WebJars](https://www.baeldung.com/maven-webjars) - - [A Quick Guide to Maven Wrapper](https://www.baeldung.com/maven-wrapper) \ No newline at end of file + - [A Quick Guide to Maven Wrapper](https://www.baeldung.com/maven-wrapper) + - [Running a Spring Boot App with Maven vs an Executable War/Jar](https://www.baeldung.com/spring-boot-run-maven-vs-executable-jar) From 19811fdef9036a2a56d9ccb92112432efdcd63aa Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sat, 19 Oct 2019 15:52:22 +0200 Subject: [PATCH 155/304] #BAEL-10229 Remove the spring-boot-dependencies --- ethereum/pom.xml | 31 ++------------ parent-boot-2/pom.xml | 2 +- parent-kotlin/pom.xml | 16 +------- spring-5-webflux/pom.xml | 16 -------- spring-batch/pom.xml | 27 +----------- spring-boot-admin/pom.xml | 22 ++-------- .../greeter-spring-boot-sample-app/pom.xml | 17 +------- spring-boot-kotlin/pom.xml | 14 ------- .../spring-boot-with-custom-parent/pom.xml | 17 +------- spring-ejb/pom.xml | 4 +- spring-ejb/spring-ejb-client/pom.xml | 12 ------ spring-jinq/pom.xml | 17 +------- .../load-testing-comparison/pom.xml | 41 ++----------------- 13 files changed, 23 insertions(+), 213 deletions(-) diff --git a/ethereum/pom.xml b/ethereum/pom.xml index 80e1c04676..1086b09833 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -7,37 +7,18 @@ ethereum - parent-spring-5 + parent-boot-1 com.baeldung 0.0.1-SNAPSHOT - ../parent-spring-5 + ../parent-boot-1 - - - org.springframework.boot - spring-boot-starter - ${spring.boot.version} - - - - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-tomcat - ${spring.boot.version} - - org.springframework spring-core - ${spring.version} org.springframework @@ -114,12 +95,6 @@ - - org.springframework.boot - spring-boot-starter-test - test - ${spring.boot.version} - org.springframework spring-context @@ -211,7 +186,7 @@ 8.5.4 1.5.0-RELEASE 3.3.1 - 1.5.6.RELEASE + 5.1.9.RELEASE 2.21.0 2.4.0 1.2.3 diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index edc115d186..3d727a7467 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -78,6 +78,6 @@ 3.3.0 1.0.22.RELEASE - 2.1.7.RELEASE + 2.2.0.RELEASE diff --git a/parent-kotlin/pom.xml b/parent-kotlin/pom.xml index bda5fb70e7..910f97c4d4 100644 --- a/parent-kotlin/pom.xml +++ b/parent-kotlin/pom.xml @@ -9,8 +9,8 @@ com.baeldung - parent-modules - 1.0.0-SNAPSHOT + parent-boot-2 + 0.0.1-SNAPSHOT @@ -40,18 +40,6 @@ - - - - org.springframework.boot - spring-boot-dependencies - 2.2.0.M4 - pom - import - - - - org.jetbrains.kotlin diff --git a/spring-5-webflux/pom.xml b/spring-5-webflux/pom.xml index 6887f01753..485fd8f3bf 100644 --- a/spring-5-webflux/pom.xml +++ b/spring-5-webflux/pom.xml @@ -16,18 +16,6 @@ ../parent-boot-2 - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - - org.springframework.boot @@ -97,8 +85,4 @@ https://repo.spring.io/milestone - - - 2.2.0.M3 - diff --git a/spring-batch/pom.xml b/spring-batch/pom.xml index 48d3baeae3..c28d7d6c89 100644 --- a/spring-batch/pom.xml +++ b/spring-batch/pom.xml @@ -10,8 +10,8 @@ com.baeldung - parent-modules - 1.0.0-SNAPSHOT + parent-boot-2 + 0.0.1-SNAPSHOT @@ -75,43 +75,20 @@ ${opencsv.version} - - org.springframework.boot - spring-boot-starter-batch - ${spring.boot.version} - - org.hsqldb hsqldb - 2.5.0 runtime - - org.awaitility - awaitility - ${awaitility.version} - test - - - - org.springframework.boot - spring-boot-starter-test - ${spring.boot.version} - test - - 5.2.0.RELEASE 4.2.0.RELEASE - 2.1.9.RELEASE 3.15.1 4.1 2.3.1 - 3.1.1 diff --git a/spring-boot-admin/pom.xml b/spring-boot-admin/pom.xml index 1c933723e7..c553790359 100644 --- a/spring-boot-admin/pom.xml +++ b/spring-boot-admin/pom.xml @@ -8,8 +8,8 @@ com.baeldung - parent-modules - 1.0.0-SNAPSHOT + parent-boot-2 + 0.0.1-SNAPSHOT @@ -17,20 +17,4 @@ spring-boot-admin-client - - - - org.springframework.boot - spring-boot-dependencies - ${spring.boot.version} - pom - import - - - - - - 2.1.8.RELEASE - - - \ No newline at end of file + diff --git a/spring-boot-custom-starter/greeter-spring-boot-sample-app/pom.xml b/spring-boot-custom-starter/greeter-spring-boot-sample-app/pom.xml index 91cc41d669..1528853b0c 100644 --- a/spring-boot-custom-starter/greeter-spring-boot-sample-app/pom.xml +++ b/spring-boot-custom-starter/greeter-spring-boot-sample-app/pom.xml @@ -7,24 +7,12 @@ greeter-spring-boot-sample-app - spring-boot-custom-starter + parent-boot-1 com.baeldung 0.0.1-SNAPSHOT ../../spring-boot-custom-starter - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - - com.baeldung @@ -51,8 +39,7 @@ - 1.5.15.RELEASE 0.0.1-SNAPSHOT - \ No newline at end of file + diff --git a/spring-boot-kotlin/pom.xml b/spring-boot-kotlin/pom.xml index 25508c52b9..c024f3fda1 100644 --- a/spring-boot-kotlin/pom.xml +++ b/spring-boot-kotlin/pom.xml @@ -30,19 +30,6 @@ - - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - - spring-snapshots @@ -160,7 +147,6 @@ 1.0.0.M7 1.0.0.BUILD-SNAPSHOT 1.2.1 - 2.2.0.M2 diff --git a/spring-boot-parent/spring-boot-with-custom-parent/pom.xml b/spring-boot-parent/spring-boot-with-custom-parent/pom.xml index de2946fbb2..a64ebc246a 100644 --- a/spring-boot-parent/spring-boot-with-custom-parent/pom.xml +++ b/spring-boot-parent/spring-boot-with-custom-parent/pom.xml @@ -10,22 +10,10 @@ com.baeldung - spring-boot-parent - 1.0.0-SNAPSHOT + parent-boot-2 + 0.0.1-SNAPSHOT - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - - org.springframework.boot @@ -35,7 +23,6 @@ 1.8 - 2.1.5.RELEASE diff --git a/spring-ejb/pom.xml b/spring-ejb/pom.xml index 712bfc66ab..126bace9bd 100755 --- a/spring-ejb/pom.xml +++ b/spring-ejb/pom.xml @@ -10,8 +10,8 @@ com.baeldung - parent-modules - 1.0.0-SNAPSHOT + parent-boot-2 + 0.0.1-SNAPSHOT diff --git a/spring-ejb/spring-ejb-client/pom.xml b/spring-ejb/spring-ejb-client/pom.xml index e0348d5ae3..8d4cdd37e8 100644 --- a/spring-ejb/spring-ejb-client/pom.xml +++ b/spring-ejb/spring-ejb-client/pom.xml @@ -13,18 +13,6 @@ 1.0.0-SNAPSHOT - - - - org.springframework.boot - spring-boot-dependencies - 2.0.4.RELEASE - pom - import - - - - org.springframework.boot diff --git a/spring-jinq/pom.xml b/spring-jinq/pom.xml index f142b3ee2f..1661614fa0 100644 --- a/spring-jinq/pom.xml +++ b/spring-jinq/pom.xml @@ -9,8 +9,8 @@ com.baeldung - parent-modules - 1.0.0-SNAPSHOT + parent-boot-1 + 0.0.1-SNAPSHOT @@ -59,20 +59,7 @@ - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - - - 1.5.9.RELEASE 1.8.22 diff --git a/testing-modules/load-testing-comparison/pom.xml b/testing-modules/load-testing-comparison/pom.xml index 2c53657481..6e307a24ca 100644 --- a/testing-modules/load-testing-comparison/pom.xml +++ b/testing-modules/load-testing-comparison/pom.xml @@ -7,10 +7,10 @@ load-testing-comparison - parent-modules + parent-boot-2 com.baeldung - 1.0.0-SNAPSHOT - ../../pom.xml + 0.0.1-SNAPSHOT + ../../parent-boot-2 @@ -44,38 +44,6 @@ jackson-databind ${jackson.version} - - org.springframework.boot - spring-boot-starter - ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-data-jpa - ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-test - ${spring.boot.version} - test - - - com.h2database - h2 - ${h2.version} - - - org.projectlombok - lombok - ${lombok.version} - compile - @@ -144,7 +112,6 @@ 2.2.1 5.0 3.11 - 2.0.5.RELEASE - \ No newline at end of file + From 33a31701cd5d5b21ae64467cfc7d83b7ed1d87e5 Mon Sep 17 00:00:00 2001 From: fejera Date: Sat, 19 Oct 2019 16:43:11 +0200 Subject: [PATCH 156/304] cleaned up persistence.xml --- .../java-jpa-2/src/main/resources/META-INF/persistence.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml index 0602a82f6c..faf00e1b2b 100644 --- a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml @@ -144,8 +144,6 @@ - - From 0c379fd66d2bf3988a7b46b5a7962a73ed527fcc Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Sun, 20 Oct 2019 16:55:42 +0800 Subject: [PATCH 157/304] Update README.md --- spring-boot-deployment/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-boot-deployment/README.md b/spring-boot-deployment/README.md index 6171decf2d..b6aa468098 100644 --- a/spring-boot-deployment/README.md +++ b/spring-boot-deployment/README.md @@ -6,4 +6,5 @@ This module contains articles about deployment of a Spring Boot Application - [Deploy a Spring Boot WAR into a Tomcat Server](https://www.baeldung.com/spring-boot-war-tomcat-deploy) - [Spring Boot Console Application](https://www.baeldung.com/spring-boot-console-app) - [How to Configure Spring Boot Tomcat](https://www.baeldung.com/spring-boot-configure-tomcat) - - [Comparing Embedded Servlet Containers in Spring Boot](https://www.baeldung.com/spring-boot-servlet-containers) \ No newline at end of file + - [Comparing Embedded Servlet Containers in Spring Boot](https://www.baeldung.com/spring-boot-servlet-containers) + - [Graceful Shutdown of a Spring Boot Application](https://www.baeldung.com/spring-boot-graceful-shutdown) From 9946fa53a1e752f970c956779011225823939c0a Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Mon, 21 Oct 2019 00:17:18 +0530 Subject: [PATCH 158/304] BAEL-3143 - nextLine() method of java.util.Scanner class --- .../baeldung/scanner/JavaScannerUnitTest.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java diff --git a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java new file mode 100644 index 0000000000..ea80c7aef7 --- /dev/null +++ b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java @@ -0,0 +1,54 @@ +package com.baeldung.scanner; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.NoSuchElementException; +import java.util.Scanner; + +import static org.assertj.core.api.Assertions.fail; +import static org.junit.Assert.assertEquals; + +public class JavaScannerUnitTest { + + @Test + public void whenReadingLines_thenCorrect() { + String input = "Scanner\nTest\n"; + + byte[] byteArray = input.getBytes(StandardCharsets.UTF_8); + //@formatter:off + try (InputStream is = new ByteArrayInputStream(byteArray); + Scanner scanner = new Scanner(is)) { + + //@formatter:on + String result = scanner.nextLine() + " " + scanner.nextLine(); + + String expected = input.replace("\n", " ") + .trim(); + assertEquals(expected, result); + } catch (IOException e) { + fail(e.getMessage()); + } + } + + @Test(expected = NoSuchElementException.class) + public void whenReadingLinesFromStringContainingNoLines_thenThrowNoSuchElementException() { + String input = ""; + Scanner scanner = new Scanner(input); + String result = scanner.nextLine(); + scanner.close(); + } + + @Test(expected = IllegalStateException.class) + public void whenReadingLinesUsingClosedScanner_thenThrowIllegalStateException() { + String input = ""; + Scanner scanner = new Scanner(input); + scanner.close(); + String result = scanner.nextLine(); + } + + +} From f89232dd213d8ed73d4ce409b17d560ee20ff1eb Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Mon, 21 Oct 2019 15:31:19 +0200 Subject: [PATCH 159/304] sync with upstream/master --- annotations/README.md | 7 ++++++- osgi/README.md | 17 ++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/annotations/README.md b/annotations/README.md index 2b052803e6..ec4005fc5e 100644 --- a/annotations/README.md +++ b/annotations/README.md @@ -1,2 +1,7 @@ +## Annotations + +This module contains articles about Java annotations + ### Relevant Articles: -- [Java Annotation Processing and Creating a Builder](http://www.baeldung.com/java-annotation-processing-builder) + +- [Java Annotation Processing and Creating a Builder](https://www.baeldung.com/java-annotation-processing-builder) diff --git a/osgi/README.md b/osgi/README.md index ec355c9773..732f624302 100644 --- a/osgi/README.md +++ b/osgi/README.md @@ -17,9 +17,9 @@ Apache Felix ### Start -Download Apache Felix Framework Distribution +Download Apache Felix Framework Distribution from -org.apache.felix.main.distribution-5.6.8 +org.apache.felix.main.distribution-5.6.8 No! The Apache Karaf container is best. Download it from: @@ -33,12 +33,12 @@ Then run Unzip, pay attention to the files not being clipped(!). - system:exit - + system:exit + exit! shutdown -h - + or `^D` ### clean start @@ -69,7 +69,7 @@ can be logged to console ### Bundle deploy bundle:install mvn:com.baeldung/osgi-intro-sample-activator/1.0-SNAPSHOT - + install mvn:com.baeldung/osgi-intro-sample-service/1.0-SNAPSHOT install mvn:com.baeldung/osgi-intro-sample-client/1.0-SNAPSHOT @@ -88,4 +88,7 @@ Oxygen.1 Wed, 6 Sep 2017 -- 17:00 (-0400) org.eclipse.osgi_3.12.1.v20170821-1548.jar - = = NOT GOOD = = + = = NOT GOOD = = + + + From b03aa3f99feefb099c20b3bb2395c6a7548df8fc Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Mon, 21 Oct 2019 15:36:54 +0200 Subject: [PATCH 160/304] Add source code for article BAEL-3379 --- .../javaxval/messageinterpolator/Person.java | 30 ++++++++++ ...terMessageInterpolaterIntegrationTest.java | 58 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java create mode 100644 javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java diff --git a/javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java b/javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java new file mode 100644 index 0000000000..1b6f598b60 --- /dev/null +++ b/javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java @@ -0,0 +1,30 @@ +package org.baeldung.javaxval.messageinterpolator; + +import javax.validation.constraints.Min; +import javax.validation.constraints.Size; + +public class Person { + + @Size(min = 10, max = 200, message = "Name should be in-between {min} and {max} characters") + private String name; + + @Min(value = 18, message = "Age should not be less than {value} but it is ${validatedValue}") + private int age; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + +} diff --git a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java new file mode 100644 index 0000000000..877f8348d2 --- /dev/null +++ b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java @@ -0,0 +1,58 @@ +package org.baeldung.javaxval.messageinterpolator; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Set; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; + +import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; +import org.junit.BeforeClass; +import org.junit.Test; + +public class ParameterMessageInterpolaterIntegrationTest { + + private static Validator validator; + + @BeforeClass + public static void beforeClass() { + ValidatorFactory validatorFactory = Validation.byDefaultProvider() + .configure() + .messageInterpolator(new ParameterMessageInterpolator()) + .buildValidatorFactory(); + + validator = validatorFactory.getValidator(); + } + + @Test + public void ifNameLengthIsLess_nameValidationFails() { + Person person = new Person(); + person.setName("John Doe"); + person.setAge(18); + + Set> violations = validator.validate(person); + assertEquals(1, violations.size()); + + ConstraintViolation violation = violations.iterator().next(); + assertEquals("Name should be in-between 10 and 200 characters", violation.getMessage()); + } + + @Test + public void ifAgeIsLess_ageMinValidationFails() { + Person person = new Person(); + person.setName("John Stephaner Doe"); + person.setAge(16); + + Set> violations = validator.validate(person); + assertEquals(1, violations.size()); + + ConstraintViolation violation = violations.iterator().next(); + assertEquals("Age should not be less than 18 but it is ${validatedValue}", violation.getMessage()); + } + +} + + From 1fb34e3c6ae0a2562297a1414ece52f41b547898 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Mon, 21 Oct 2019 21:42:13 +0530 Subject: [PATCH 161/304] BAEL-17684 Pom properties cleanup - Reverted guava module changes --- guava-modules/guava-18/pom.xml | 4 ++++ guava-modules/guava-19/pom.xml | 4 ++++ guava-modules/guava-21/pom.xml | 1 + 3 files changed, 9 insertions(+) diff --git a/guava-modules/guava-18/pom.xml b/guava-modules/guava-18/pom.xml index 199d735a41..d55aa9ce82 100644 --- a/guava-modules/guava-18/pom.xml +++ b/guava-modules/guava-18/pom.xml @@ -13,4 +13,8 @@ ../../parent-java + + 18.0 + + \ No newline at end of file diff --git a/guava-modules/guava-19/pom.xml b/guava-modules/guava-19/pom.xml index c431f78cf7..0548bb0c1f 100644 --- a/guava-modules/guava-19/pom.xml +++ b/guava-modules/guava-19/pom.xml @@ -13,4 +13,8 @@ ../../parent-java + + 19.0 + + \ No newline at end of file diff --git a/guava-modules/guava-21/pom.xml b/guava-modules/guava-21/pom.xml index 150ce2d4d2..bdb1058a48 100644 --- a/guava-modules/guava-21/pom.xml +++ b/guava-modules/guava-21/pom.xml @@ -22,6 +22,7 @@ + 21.0 0.9.12 From 15bf90a2bed930d9403f2c066cc53021c143454f Mon Sep 17 00:00:00 2001 From: at508 Date: Mon, 21 Oct 2019 22:04:26 -0400 Subject: [PATCH 162/304] [BAEL-2998] - Fix jenkins tests --- testing-modules/spring-testing/pom.xml | 8 +++++++- .../dirtiescontext/DirtiesContextIntegrationTest.java | 2 ++ .../ProfilePropertySourceResolverIntegrationTest.java | 10 +++++++--- ...pringBootPropertySourceResolverIntegrationTest.java | 8 ++++++-- ...tResourcePropertySourceResolverIntegrationTest.java | 10 +++++++--- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/testing-modules/spring-testing/pom.xml b/testing-modules/spring-testing/pom.xml index 8a76dc903c..15431cfb77 100644 --- a/testing-modules/spring-testing/pom.xml +++ b/testing-modules/spring-testing/pom.xml @@ -84,6 +84,11 @@ ${junit.jupiter.version} test + + org.junit.platform + junit-platform-commons + ${junit.commons.version} + org.awaitility awaitility @@ -112,7 +117,8 @@ 2.0.0.0 3.1.6 - 5.4.0 + 5.5.0 + 1.5.2 5.1.4.RELEASE 4.0.1 2.1.1 diff --git a/testing-modules/spring-testing/src/test/java/com/baeldung/dirtiescontext/DirtiesContextIntegrationTest.java b/testing-modules/spring-testing/src/test/java/com/baeldung/dirtiescontext/DirtiesContextIntegrationTest.java index f3e7b8c228..7afd4a22d4 100644 --- a/testing-modules/spring-testing/src/test/java/com/baeldung/dirtiescontext/DirtiesContextIntegrationTest.java +++ b/testing-modules/spring-testing/src/test/java/com/baeldung/dirtiescontext/DirtiesContextIntegrationTest.java @@ -10,10 +10,12 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.MethodMode; import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; @TestMethodOrder(OrderAnnotation.class) @ExtendWith(SpringExtension.class) @SpringBootTest(classes = SpringDataRestApplication.class) +@EnableWebMvc class DirtiesContextIntegrationTest { @Autowired diff --git a/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/ProfilePropertySourceResolverIntegrationTest.java b/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/ProfilePropertySourceResolverIntegrationTest.java index 95d83420b7..815b628f0a 100644 --- a/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/ProfilePropertySourceResolverIntegrationTest.java +++ b/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/ProfilePropertySourceResolverIntegrationTest.java @@ -1,21 +1,25 @@ package com.baeldung.overrideproperties; -import com.baeldung.overrideproperties.resolver.PropertySourceResolver; +import static org.junit.Assert.assertEquals; + 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.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import static org.junit.Assert.assertEquals; +import com.baeldung.overrideproperties.resolver.PropertySourceResolver; @RunWith(SpringRunner.class) @SpringBootTest @ActiveProfiles("test") +@EnableWebMvc public class ProfilePropertySourceResolverIntegrationTest { - @Autowired private PropertySourceResolver propertySourceResolver; + @Autowired + private PropertySourceResolver propertySourceResolver; @Test public void shouldProfiledProperty_overridePropertyValues() { diff --git a/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/SpringBootPropertySourceResolverIntegrationTest.java b/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/SpringBootPropertySourceResolverIntegrationTest.java index 573a46dd5f..d00aa51e6c 100644 --- a/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/SpringBootPropertySourceResolverIntegrationTest.java +++ b/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/SpringBootPropertySourceResolverIntegrationTest.java @@ -1,18 +1,22 @@ package com.baeldung.overrideproperties; -import com.baeldung.overrideproperties.resolver.PropertySourceResolver; import org.junit.Assert; 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.web.servlet.config.annotation.EnableWebMvc; + +import com.baeldung.overrideproperties.resolver.PropertySourceResolver; @RunWith(SpringRunner.class) @SpringBootTest(properties = { "example.firstProperty=annotation" }) +@EnableWebMvc public class SpringBootPropertySourceResolverIntegrationTest { - @Autowired private PropertySourceResolver propertySourceResolver; + @Autowired + private PropertySourceResolver propertySourceResolver; @Test public void shouldSpringBootTestAnnotation_overridePropertyValues() { diff --git a/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/TestResourcePropertySourceResolverIntegrationTest.java b/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/TestResourcePropertySourceResolverIntegrationTest.java index c724713854..dc15851277 100644 --- a/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/TestResourcePropertySourceResolverIntegrationTest.java +++ b/testing-modules/spring-testing/src/test/java/com/baeldung/overrideproperties/TestResourcePropertySourceResolverIntegrationTest.java @@ -1,19 +1,23 @@ package com.baeldung.overrideproperties; -import com.baeldung.overrideproperties.resolver.PropertySourceResolver; +import static org.junit.Assert.assertEquals; + 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.web.servlet.config.annotation.EnableWebMvc; -import static org.junit.Assert.assertEquals; +import com.baeldung.overrideproperties.resolver.PropertySourceResolver; @RunWith(SpringRunner.class) @SpringBootTest +@EnableWebMvc public class TestResourcePropertySourceResolverIntegrationTest { - @Autowired private PropertySourceResolver propertySourceResolver; + @Autowired + private PropertySourceResolver propertySourceResolver; @Test public void shouldTestResourceFile_overridePropertyValues() { From b92b031867e8026cab1a361c5470d3189591fc18 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 22 Oct 2019 16:10:50 +0800 Subject: [PATCH 163/304] Update README.md --- algorithms-miscellaneous-4/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md index 93a9796092..0a2aa63a0c 100644 --- a/algorithms-miscellaneous-4/README.md +++ b/algorithms-miscellaneous-4/README.md @@ -7,4 +7,3 @@ - [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings) - [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters) - [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) -- [Interpolation Search in Java](https://www.baeldung.com/java-interpolation-search) From ec8d42826b4d2a23cfd4f3ae02e7d43b99fe281f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Tue, 22 Oct 2019 16:12:11 +0800 Subject: [PATCH 164/304] Update README.md --- algorithms-miscellaneous-4/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md index 0a2aa63a0c..a9d0dd4e5b 100644 --- a/algorithms-miscellaneous-4/README.md +++ b/algorithms-miscellaneous-4/README.md @@ -7,3 +7,4 @@ - [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings) - [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters) - [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) +- More articles: [[<-- prev]](/algorithms-miscellaneous-3) [[next -->]](/algorithms-miscellaneous-5) From 2468c93e64aa7eebb47ce4c90252318c529ff6c8 Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Tue, 22 Oct 2019 16:06:15 +0300 Subject: [PATCH 165/304] Move Existing Articles to core-groovy-collections Module --- core-groovy-collections/README.md | 4 +- .../com/baeldung/find/ListFindUnitTest.groovy | 6 +- .../com/baeldung/find/MapFindUnitTest.groovy | 84 +--------- .../groovy/com/baeldung/find}/Person.groovy | 2 +- .../com/baeldung/find/SetFindUnitTest.groovy | 4 +- .../iteratemap/IterateMapUnitTest.groovy | 87 ++++++++++ .../com/baeldung/lists/ListUnitTest.groovy | 4 +- .../com/baeldung/{map => maps}/MapTest.groovy | 2 +- core-groovy/README.md | 3 - .../groovy/com/baeldung/map/MapTest.groovy | 148 ------------------ 10 files changed, 102 insertions(+), 242 deletions(-) rename core-groovy/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy => core-groovy-collections/src/test/groovy/com/baeldung/find/ListFindUnitTest.groovy (95%) rename core-groovy/src/test/groovy/com/baeldung/map/MapUnitTest.groovy => core-groovy-collections/src/test/groovy/com/baeldung/find/MapFindUnitTest.groovy (53%) rename {core-groovy/src/main/groovy/com/baeldung => core-groovy-collections/src/test/groovy/com/baeldung/find}/Person.groovy (96%) rename core-groovy/src/test/groovy/com/baeldung/set/SetUnitTest.groovy => core-groovy-collections/src/test/groovy/com/baeldung/find/SetFindUnitTest.groovy (83%) create mode 100644 core-groovy-collections/src/test/groovy/com/baeldung/iteratemap/IterateMapUnitTest.groovy rename core-groovy/src/test/groovy/com/baeldung/lists/ListTest.groovy => core-groovy-collections/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy (98%) rename core-groovy-collections/src/test/groovy/com/baeldung/{map => maps}/MapTest.groovy (99%) delete mode 100644 core-groovy/src/test/groovy/com/baeldung/map/MapTest.groovy diff --git a/core-groovy-collections/README.md b/core-groovy-collections/README.md index 4afd214e7d..aae8be508e 100644 --- a/core-groovy-collections/README.md +++ b/core-groovy-collections/README.md @@ -5,4 +5,6 @@ This module contains articles about Groovy core collections ## Relevant articles: - [Maps in Groovy](https://www.baeldung.com/groovy-maps) - +- [Finding Elements in Collections in Groovy](https://www.baeldung.com/groovy-collections-find-elements) +- [Lists in Groovy](https://www.baeldung.com/groovy-lists) +- [A Quick Guide to Iterating a Map in Groovy](https://www.baeldung.com/groovy-map-iterating) diff --git a/core-groovy/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy b/core-groovy-collections/src/test/groovy/com/baeldung/find/ListFindUnitTest.groovy similarity index 95% rename from core-groovy/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy rename to core-groovy-collections/src/test/groovy/com/baeldung/find/ListFindUnitTest.groovy index 9617c099ce..82a2138be4 100644 --- a/core-groovy/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy +++ b/core-groovy-collections/src/test/groovy/com/baeldung/find/ListFindUnitTest.groovy @@ -1,11 +1,11 @@ -package com.baeldung.lists +package com.baeldung.find -import com.baeldung.Person +import com.baeldung.find.Person import org.junit.Test import static org.junit.Assert.* -class ListUnitTest { +class ListFindUnitTest { private final personList = [ new Person("Regina", "Fitzpatrick", 25), diff --git a/core-groovy/src/test/groovy/com/baeldung/map/MapUnitTest.groovy b/core-groovy-collections/src/test/groovy/com/baeldung/find/MapFindUnitTest.groovy similarity index 53% rename from core-groovy/src/test/groovy/com/baeldung/map/MapUnitTest.groovy rename to core-groovy-collections/src/test/groovy/com/baeldung/find/MapFindUnitTest.groovy index 0d6bbed04b..16e231182b 100644 --- a/core-groovy/src/test/groovy/com/baeldung/map/MapUnitTest.groovy +++ b/core-groovy-collections/src/test/groovy/com/baeldung/find/MapFindUnitTest.groovy @@ -1,11 +1,11 @@ -package com.baeldung.map +package com.baeldung.find -import com.baeldung.Person +import com.baeldung.find.Person import org.junit.Test import static org.junit.Assert.* -class MapUnitTest { +class MapFindUnitTest { private final personMap = [ Regina : new Person("Regina", "Fitzpatrick", 25), @@ -13,84 +13,6 @@ class MapUnitTest { Lucian : new Person("Lucian", "Walter", 30) ] - @Test - void whenUsingEach_thenMapIsIterated() { - def map = [ - 'FF0000' : 'Red', - '00FF00' : 'Lime', - '0000FF' : 'Blue', - 'FFFF00' : 'Yellow' - ] - - map.each { println "Hex Code: $it.key = Color Name: $it.value" } - } - - @Test - void whenUsingEachWithEntry_thenMapIsIterated() { - def map = [ - 'E6E6FA' : 'Lavender', - 'D8BFD8' : 'Thistle', - 'DDA0DD' : 'Plum', - ] - - map.each { entry -> println "Hex Code: $entry.key = Color Name: $entry.value" } - } - - @Test - void whenUsingEachWithKeyAndValue_thenMapIsIterated() { - def map = [ - '000000' : 'Black', - 'FFFFFF' : 'White', - '808080' : 'Gray' - ] - - map.each { key, val -> - println "Hex Code: $key = Color Name $val" - } - } - - @Test - void whenUsingEachWithIndexAndEntry_thenMapIsIterated() { - def map = [ - '800080' : 'Purple', - '4B0082' : 'Indigo', - '6A5ACD' : 'Slate Blue' - ] - - map.eachWithIndex { entry, index -> - def indent = ((index == 0 || index % 2 == 0) ? " " : "") - println "$indent Hex Code: $entry.key = Color Name: $entry.value" - } - } - - @Test - void whenUsingEachWithIndexAndKeyAndValue_thenMapIsIterated() { - def map = [ - 'FFA07A' : 'Light Salmon', - 'FF7F50' : 'Coral', - 'FF6347' : 'Tomato', - 'FF4500' : 'Orange Red' - ] - - map.eachWithIndex { key, val, index -> - def indent = ((index == 0 || index % 2 == 0) ? " " : "") - println "$indent Hex Code: $key = Color Name: $val" - } - } - - @Test - void whenUsingForLoop_thenMapIsIterated() { - def map = [ - '2E8B57' : 'Seagreen', - '228B22' : 'Forest Green', - '008000' : 'Green' - ] - - for (entry in map) { - println "Hex Code: $entry.key = Color Name: $entry.value" - } - } - @Test void whenMapContainsKeyElement_thenCheckReturnsTrue() { def map = [a: 'd', b: 'e', c: 'f'] diff --git a/core-groovy/src/main/groovy/com/baeldung/Person.groovy b/core-groovy-collections/src/test/groovy/com/baeldung/find/Person.groovy similarity index 96% rename from core-groovy/src/main/groovy/com/baeldung/Person.groovy rename to core-groovy-collections/src/test/groovy/com/baeldung/find/Person.groovy index 6a009aeee0..e65826363a 100644 --- a/core-groovy/src/main/groovy/com/baeldung/Person.groovy +++ b/core-groovy-collections/src/test/groovy/com/baeldung/find/Person.groovy @@ -1,4 +1,4 @@ -package com.baeldung +package com.baeldung.find class Person { private String firstname diff --git a/core-groovy/src/test/groovy/com/baeldung/set/SetUnitTest.groovy b/core-groovy-collections/src/test/groovy/com/baeldung/find/SetFindUnitTest.groovy similarity index 83% rename from core-groovy/src/test/groovy/com/baeldung/set/SetUnitTest.groovy rename to core-groovy-collections/src/test/groovy/com/baeldung/find/SetFindUnitTest.groovy index 1248c9ac91..d2d03d5427 100644 --- a/core-groovy/src/test/groovy/com/baeldung/set/SetUnitTest.groovy +++ b/core-groovy-collections/src/test/groovy/com/baeldung/find/SetFindUnitTest.groovy @@ -1,10 +1,10 @@ -package com.baeldung.set +package com.baeldung.find import org.junit.Test import static org.junit.Assert.assertTrue -class SetUnitTest { +class SetFindUnitTest { @Test void whenSetContainsElement_thenCheckReturnsTrue() { diff --git a/core-groovy-collections/src/test/groovy/com/baeldung/iteratemap/IterateMapUnitTest.groovy b/core-groovy-collections/src/test/groovy/com/baeldung/iteratemap/IterateMapUnitTest.groovy new file mode 100644 index 0000000000..970203ce85 --- /dev/null +++ b/core-groovy-collections/src/test/groovy/com/baeldung/iteratemap/IterateMapUnitTest.groovy @@ -0,0 +1,87 @@ +package com.baeldung.iteratemap + +import com.baeldung.find.Person +import org.junit.Test + +import static org.junit.Assert.* + +class IterateMapUnitTest { + + @Test + void whenUsingEach_thenMapIsIterated() { + def map = [ + 'FF0000' : 'Red', + '00FF00' : 'Lime', + '0000FF' : 'Blue', + 'FFFF00' : 'Yellow' + ] + + map.each { println "Hex Code: $it.key = Color Name: $it.value" } + } + + @Test + void whenUsingEachWithEntry_thenMapIsIterated() { + def map = [ + 'E6E6FA' : 'Lavender', + 'D8BFD8' : 'Thistle', + 'DDA0DD' : 'Plum', + ] + + map.each { entry -> println "Hex Code: $entry.key = Color Name: $entry.value" } + } + + @Test + void whenUsingEachWithKeyAndValue_thenMapIsIterated() { + def map = [ + '000000' : 'Black', + 'FFFFFF' : 'White', + '808080' : 'Gray' + ] + + map.each { key, val -> + println "Hex Code: $key = Color Name $val" + } + } + + @Test + void whenUsingEachWithIndexAndEntry_thenMapIsIterated() { + def map = [ + '800080' : 'Purple', + '4B0082' : 'Indigo', + '6A5ACD' : 'Slate Blue' + ] + + map.eachWithIndex { entry, index -> + def indent = ((index == 0 || index % 2 == 0) ? " " : "") + println "$indent Hex Code: $entry.key = Color Name: $entry.value" + } + } + + @Test + void whenUsingEachWithIndexAndKeyAndValue_thenMapIsIterated() { + def map = [ + 'FFA07A' : 'Light Salmon', + 'FF7F50' : 'Coral', + 'FF6347' : 'Tomato', + 'FF4500' : 'Orange Red' + ] + + map.eachWithIndex { key, val, index -> + def indent = ((index == 0 || index % 2 == 0) ? " " : "") + println "$indent Hex Code: $key = Color Name: $val" + } + } + + @Test + void whenUsingForLoop_thenMapIsIterated() { + def map = [ + '2E8B57' : 'Seagreen', + '228B22' : 'Forest Green', + '008000' : 'Green' + ] + + for (entry in map) { + println "Hex Code: $entry.key = Color Name: $entry.value" + } + } +} diff --git a/core-groovy/src/test/groovy/com/baeldung/lists/ListTest.groovy b/core-groovy-collections/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy similarity index 98% rename from core-groovy/src/test/groovy/com/baeldung/lists/ListTest.groovy rename to core-groovy-collections/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy index 7771028132..e4c0a0c177 100644 --- a/core-groovy/src/test/groovy/com/baeldung/lists/ListTest.groovy +++ b/core-groovy-collections/src/test/groovy/com/baeldung/lists/ListUnitTest.groovy @@ -1,9 +1,9 @@ -package com.baeldung.groovy.lists +package com.baeldung.lists import static groovy.test.GroovyAssert.* import org.junit.Test -class ListTest{ +class ListUnitTest { @Test void testCreateList() { diff --git a/core-groovy-collections/src/test/groovy/com/baeldung/map/MapTest.groovy b/core-groovy-collections/src/test/groovy/com/baeldung/maps/MapTest.groovy similarity index 99% rename from core-groovy-collections/src/test/groovy/com/baeldung/map/MapTest.groovy rename to core-groovy-collections/src/test/groovy/com/baeldung/maps/MapTest.groovy index c6105eb1c4..deb552c420 100644 --- a/core-groovy-collections/src/test/groovy/com/baeldung/map/MapTest.groovy +++ b/core-groovy-collections/src/test/groovy/com/baeldung/maps/MapTest.groovy @@ -1,4 +1,4 @@ -package com.baeldung.map; +package com.baeldung.maps; import static groovy.test.GroovyAssert.* import org.junit.Test diff --git a/core-groovy/README.md b/core-groovy/README.md index 0f45eed879..25a0aece3a 100644 --- a/core-groovy/README.md +++ b/core-groovy/README.md @@ -8,11 +8,8 @@ This module contains articles about core Groovy concepts - [Working with JSON in Groovy](https://www.baeldung.com/groovy-json) - [Reading a File in Groovy](https://www.baeldung.com/groovy-file-read) - [Types of Strings in Groovy](https://www.baeldung.com/groovy-strings) -- [A Quick Guide to Iterating a Map in Groovy](https://www.baeldung.com/groovy-map-iterating) - [An Introduction to Traits in Groovy](https://www.baeldung.com/groovy-traits) - [Closures in Groovy](https://www.baeldung.com/groovy-closures) -- [Finding Elements in Collections in Groovy](https://www.baeldung.com/groovy-collections-find-elements) -- [Lists in Groovy](https://www.baeldung.com/groovy-lists) - [Converting a String to a Date in Groovy](https://www.baeldung.com/groovy-string-to-date) - [Guide to I/O in Groovy](https://www.baeldung.com/groovy-io) - [[More -->]](/core-groovy-2) \ No newline at end of file diff --git a/core-groovy/src/test/groovy/com/baeldung/map/MapTest.groovy b/core-groovy/src/test/groovy/com/baeldung/map/MapTest.groovy deleted file mode 100644 index f1d528207f..0000000000 --- a/core-groovy/src/test/groovy/com/baeldung/map/MapTest.groovy +++ /dev/null @@ -1,148 +0,0 @@ -package com.baeldung.groovy.map; - -import static groovy.test.GroovyAssert.* -import org.junit.Test - -class MapTest{ - - @Test - void createMap() { - - def emptyMap = [:] - assertNotNull(emptyMap) - - assertTrue(emptyMap instanceof java.util.LinkedHashMap) - - def map = [name:"Jerry", age: 42, city: "New York"] - assertTrue(map.size() == 3) - } - - @Test - void addItemsToMap() { - - def map = [name:"Jerry"] - - map["age"] = 42 - - map.city = "New York" - - def hobbyLiteral = "hobby" - def hobbyMap = [(hobbyLiteral): "Singing"] - map.putAll(hobbyMap) - - assertTrue(map == [name:"Jerry", age: 42, city: "New York", hobby:"Singing"]) - assertTrue(hobbyMap.hobby == "Singing") - assertTrue(hobbyMap[hobbyLiteral] == "Singing") - - map.plus([1:20]) // returns new map - - map << [2:30] - - } - - @Test - void getItemsFromMap() { - - def map = [name:"Jerry", age: 42, city: "New York", hobby:"Singing"] - - assertTrue(map["name"] == "Jerry") - - assertTrue(map.name == "Jerry") - - def propertyAge = "age" - assertTrue(map[propertyAge] == 42) - } - - @Test - void removeItemsFromMap() { - - def map = [1:20, a:30, 2:42, 4:34, ba:67, 6:39, 7:49] - - def minusMap = map.minus([2:42, 4:34]); - assertTrue(minusMap == [1:20, a:30, ba:67, 6:39, 7:49]) - - minusMap.removeAll{it -> it.key instanceof String} - assertTrue( minusMap == [ 1:20, 6:39, 7:49]) - - minusMap.retainAll{it -> it.value %2 == 0} - assertTrue( minusMap == [1:20]) - } - - @Test - void iteratingOnMaps(){ - def map = [name:"Jerry", age: 42, city: "New York", hobby:"Singing"] - - map.each{ entry -> println "$entry.key: $entry.value" } - - map.eachWithIndex{ entry, i -> println "$i $entry.key: $entry.value" } - - map.eachWithIndex{ key, value, i -> println "$i $key: $value" } - } - - @Test - void filteringAndSearchingMaps(){ - def map = [name:"Jerry", age: 42, city: "New York", hobby:"Singing"] - - assertTrue(map.find{ it.value == "New York"}.key == "city") - - assertTrue(map.findAll{ it.value == "New York"} == [city : "New York"]) - - map.grep{it.value == "New York"}.each{ it -> assertTrue(it.key == "city" && it.value == "New York")} - - assertTrue(map.every{it -> it.value instanceof String} == false) - - assertTrue(map.any{it -> it.value instanceof String} == true) - } - - @Test - void collect(){ - - def map = [1: [name:"Jerry", age: 42, city: "New York"], - 2: [name:"Long", age: 25, city: "New York"], - 3: [name:"Dustin", age: 29, city: "New York"], - 4: [name:"Dustin", age: 34, city: "New York"]] - - def names = map.collect{entry -> entry.value.name} // returns only list - assertTrue(names == ["Jerry", "Long", "Dustin", "Dustin"]) - - def uniqueNames = map.collect([] as HashSet){entry -> entry.value.name} - assertTrue(uniqueNames == ["Jerry", "Long", "Dustin"] as Set) - - def idNames = map.collectEntries{key, value -> [key, value.name]} - assertTrue(idNames == [1:"Jerry", 2: "Long", 3:"Dustin", 4: "Dustin"]) - - def below30Names = map.findAll{it.value.age < 30}.collect{key, value -> value.name} - assertTrue(below30Names == ["Long", "Dustin"]) - - - } - - @Test - void group(){ - def map = [1:20, 2: 40, 3: 11, 4: 93] - - def subMap = map.groupBy{it.value % 2} - println subMap - assertTrue(subMap == [0:[1:20, 2:40 ], 1:[3:11, 4:93]]) - - def keySubMap = map.subMap([1, 2]) - assertTrue(keySubMap == [1:20, 2:40]) - - } - - @Test - void sorting(){ - def map = [ab:20, a: 40, cb: 11, ba: 93] - - def naturallyOrderedMap = map.sort() - assertTrue([a:40, ab:20, ba:93, cb:11] == naturallyOrderedMap) - - def compSortedMap = map.sort({ k1, k2 -> k1 <=> k2 } as Comparator) - assertTrue([a:40, ab:20, ba:93, cb:11] == compSortedMap) - - def cloSortedMap = map.sort({ it1, it2 -> it1.value <=> it1.value }) - assertTrue([cb:11, ab:20, a:40, ba:93] == cloSortedMap) - - } - -} From c43f5a542e760e453a986532ae9bb571bc72299a Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Tue, 22 Oct 2019 16:53:16 +0300 Subject: [PATCH 166/304] Split or move java-collections-conversions module --- java-collections-conversions-2/README.md | 7 ++++ java-collections-conversions-2/pom.xml | 36 +++++++++++++++++++ .../ArrayToStringUnitTest.java | 13 ++++--- java-collections-conversions/README.md | 2 +- java-collections-conversions/pom.xml | 10 ++++++ ...ava => CollectionToArrayListUnitTest.java} | 4 +-- .../ConvertIteratorToListServiceUnitTest.java | 2 +- ...WithDuplicatedIdToMapServiceUnitTest.java} | 2 +- .../JavaCollectionConversionUnitTest.java | 2 +- .../java/lists/ListToStringUnitTest.java} | 4 +-- pom.xml | 4 ++- 11 files changed, 70 insertions(+), 16 deletions(-) create mode 100644 java-collections-conversions-2/README.md create mode 100644 java-collections-conversions-2/pom.xml rename {java-collections-conversions/src/test/java/org => java-collections-conversions-2/src/test/java/com}/baeldung/convertarraytostring/ArrayToStringUnitTest.java (98%) rename java-collections-conversions/src/test/java/com/baeldung/convertcollectiontoarraylist/{FooUnitTest.java => CollectionToArrayListUnitTest.java} (97%) rename java-collections-conversions/src/test/java/com/baeldung/{convert/iteratortolist => convertiteratortolist}/ConvertIteratorToListServiceUnitTest.java (98%) rename java-collections-conversions/src/test/java/com/baeldung/convertlisttomap/{ConvertListWithDiplicatedIdToMapServiceUnitTest.java => ConvertListWithDuplicatedIdToMapServiceUnitTest.java} (96%) rename java-collections-conversions/src/test/java/{org => com}/baeldung/java/collections/JavaCollectionConversionUnitTest.java (99%) rename java-collections-conversions/src/test/java/{org/baeldung/java/lists/ListToSTring.java => com/baeldung/java/lists/ListToStringUnitTest.java} (91%) diff --git a/java-collections-conversions-2/README.md b/java-collections-conversions-2/README.md new file mode 100644 index 0000000000..761e56253e --- /dev/null +++ b/java-collections-conversions-2/README.md @@ -0,0 +1,7 @@ +## Java Collections Cookbooks and Examples + +This module contains articles about conversions among Collection types and arrays in Java. + +### Relevant Articles: +- [Array to String Conversions](https://www.baeldung.com/java-array-to-string) +- More articles: [[<-- prev]](../java-collections-conversions) \ No newline at end of file diff --git a/java-collections-conversions-2/pom.xml b/java-collections-conversions-2/pom.xml new file mode 100644 index 0000000000..72673527ac --- /dev/null +++ b/java-collections-conversions-2/pom.xml @@ -0,0 +1,36 @@ + + 4.0.0 + java-collections-conversions-2 + 0.1.0-SNAPSHOT + java-collections-conversions-2 + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + + java-collections-conversions-2 + + + src/main/resources + true + + + + + + + diff --git a/java-collections-conversions/src/test/java/org/baeldung/convertarraytostring/ArrayToStringUnitTest.java b/java-collections-conversions-2/src/test/java/com/baeldung/convertarraytostring/ArrayToStringUnitTest.java similarity index 98% rename from java-collections-conversions/src/test/java/org/baeldung/convertarraytostring/ArrayToStringUnitTest.java rename to java-collections-conversions-2/src/test/java/com/baeldung/convertarraytostring/ArrayToStringUnitTest.java index b563475997..73cf9d6baa 100644 --- a/java-collections-conversions/src/test/java/org/baeldung/convertarraytostring/ArrayToStringUnitTest.java +++ b/java-collections-conversions-2/src/test/java/com/baeldung/convertarraytostring/ArrayToStringUnitTest.java @@ -1,15 +1,14 @@ -package org.baeldung.convertarraytostring; +package com.baeldung.convertarraytostring; + +import com.google.common.base.Joiner; +import com.google.common.base.Splitter; +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import org.apache.commons.lang3.StringUtils; -import org.junit.Test; - -import com.google.common.base.Joiner; -import com.google.common.base.Splitter; - import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; diff --git a/java-collections-conversions/README.md b/java-collections-conversions/README.md index 6d4f6ddb3a..2d3aa41f2d 100644 --- a/java-collections-conversions/README.md +++ b/java-collections-conversions/README.md @@ -9,8 +9,8 @@ This module contains articles about conversions among Collection types and array - [Convert a Map to an Array, List or Set in Java](https://www.baeldung.com/convert-map-values-to-array-list-set) - [Converting a List to String in Java](https://www.baeldung.com/java-list-to-string) - [How to Convert List to Map in Java](https://www.baeldung.com/java-list-to-map) -- [Array to String Conversions](https://www.baeldung.com/java-array-to-string) - [Converting a Collection to ArrayList in Java](https://www.baeldung.com/java-convert-collection-arraylist) - [Java 8 Collectors toMap](https://www.baeldung.com/java-collectors-tomap) - [Converting Iterable to Collection in Java](https://www.baeldung.com/java-iterable-to-collection) - [Converting Iterator to List](https://www.baeldung.com/java-convert-iterator-to-list) +- More articles: [[next -->]](../java-collections-conversions-2) \ No newline at end of file diff --git a/java-collections-conversions/pom.xml b/java-collections-conversions/pom.xml index 24d918d105..b5ab4f841a 100644 --- a/java-collections-conversions/pom.xml +++ b/java-collections-conversions/pom.xml @@ -32,6 +32,16 @@ + + java-collections-conversions-2 + + + src/main/resources + true + + + + 4.1 3.6.1 diff --git a/java-collections-conversions/src/test/java/com/baeldung/convertcollectiontoarraylist/FooUnitTest.java b/java-collections-conversions/src/test/java/com/baeldung/convertcollectiontoarraylist/CollectionToArrayListUnitTest.java similarity index 97% rename from java-collections-conversions/src/test/java/com/baeldung/convertcollectiontoarraylist/FooUnitTest.java rename to java-collections-conversions/src/test/java/com/baeldung/convertcollectiontoarraylist/CollectionToArrayListUnitTest.java index 1de600aebf..ad2ab2a756 100644 --- a/java-collections-conversions/src/test/java/com/baeldung/convertcollectiontoarraylist/FooUnitTest.java +++ b/java-collections-conversions/src/test/java/com/baeldung/convertcollectiontoarraylist/CollectionToArrayListUnitTest.java @@ -14,10 +14,10 @@ import static org.junit.Assert.*; * * @author chris */ -public class FooUnitTest { +public class CollectionToArrayListUnitTest { private static Collection srcCollection = new HashSet<>(); - public FooUnitTest() { + public CollectionToArrayListUnitTest() { } @BeforeClass diff --git a/java-collections-conversions/src/test/java/com/baeldung/convert/iteratortolist/ConvertIteratorToListServiceUnitTest.java b/java-collections-conversions/src/test/java/com/baeldung/convertiteratortolist/ConvertIteratorToListServiceUnitTest.java similarity index 98% rename from java-collections-conversions/src/test/java/com/baeldung/convert/iteratortolist/ConvertIteratorToListServiceUnitTest.java rename to java-collections-conversions/src/test/java/com/baeldung/convertiteratortolist/ConvertIteratorToListServiceUnitTest.java index ced2ddcfc0..4d6cba7d27 100644 --- a/java-collections-conversions/src/test/java/com/baeldung/convert/iteratortolist/ConvertIteratorToListServiceUnitTest.java +++ b/java-collections-conversions/src/test/java/com/baeldung/convertiteratortolist/ConvertIteratorToListServiceUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.convert.iteratortolist; +package com.baeldung.convertiteratortolist; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; diff --git a/java-collections-conversions/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDiplicatedIdToMapServiceUnitTest.java b/java-collections-conversions/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDuplicatedIdToMapServiceUnitTest.java similarity index 96% rename from java-collections-conversions/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDiplicatedIdToMapServiceUnitTest.java rename to java-collections-conversions/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDuplicatedIdToMapServiceUnitTest.java index 6e766433d1..5e6828a3d5 100644 --- a/java-collections-conversions/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDiplicatedIdToMapServiceUnitTest.java +++ b/java-collections-conversions/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDuplicatedIdToMapServiceUnitTest.java @@ -11,7 +11,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasSize; -public class ConvertListWithDiplicatedIdToMapServiceUnitTest { +public class ConvertListWithDuplicatedIdToMapServiceUnitTest { List duplicatedIdList; private ConvertListToMapService convertListService = new ConvertListToMapService(); diff --git a/java-collections-conversions/src/test/java/org/baeldung/java/collections/JavaCollectionConversionUnitTest.java b/java-collections-conversions/src/test/java/com/baeldung/java/collections/JavaCollectionConversionUnitTest.java similarity index 99% rename from java-collections-conversions/src/test/java/org/baeldung/java/collections/JavaCollectionConversionUnitTest.java rename to java-collections-conversions/src/test/java/com/baeldung/java/collections/JavaCollectionConversionUnitTest.java index a5f684a141..4977c122e7 100644 --- a/java-collections-conversions/src/test/java/org/baeldung/java/collections/JavaCollectionConversionUnitTest.java +++ b/java-collections-conversions/src/test/java/com/baeldung/java/collections/JavaCollectionConversionUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.java.collections; +package com.baeldung.java.collections; import java.util.ArrayList; import java.util.Arrays; diff --git a/java-collections-conversions/src/test/java/org/baeldung/java/lists/ListToSTring.java b/java-collections-conversions/src/test/java/com/baeldung/java/lists/ListToStringUnitTest.java similarity index 91% rename from java-collections-conversions/src/test/java/org/baeldung/java/lists/ListToSTring.java rename to java-collections-conversions/src/test/java/com/baeldung/java/lists/ListToStringUnitTest.java index 3fc26bcb51..0fdc096d14 100644 --- a/java-collections-conversions/src/test/java/org/baeldung/java/lists/ListToSTring.java +++ b/java-collections-conversions/src/test/java/com/baeldung/java/lists/ListToStringUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.java.lists; +package com.baeldung.java.lists; import java.util.Arrays; import java.util.List; @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.junit.Test; -public class ListToSTring { +public class ListToStringUnitTest { @Test public void whenListToString_thenPrintDefault() { diff --git a/pom.xml b/pom.xml index 5404c908d3..d61d12ad4d 100644 --- a/pom.xml +++ b/pom.xml @@ -482,6 +482,7 @@ jackson-2 jackson-simple java-collections-conversions + java-collections-conversions-2 java-collections-maps java-collections-maps-2 java-jdi @@ -609,7 +610,7 @@ spring-boot-nashorn java-blockchain -wildfly + wildfly @@ -1241,6 +1242,7 @@ jackson-2 jackson-simple java-collections-conversions + java-collections-conversions-2 java-collections-maps java-collections-maps-2 java-jdi From a87822229a2247098752e0f59c7014b9e7c08bff Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Wed, 23 Oct 2019 00:17:07 +0530 Subject: [PATCH 167/304] BAEL-3143 - made the required changes --- .../baeldung/scanner/JavaScannerUnitTest.java | 42 +++++-------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java index ea80c7aef7..8bc859ca07 100644 --- a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java +++ b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java @@ -1,54 +1,34 @@ package com.baeldung.scanner; -import org.junit.Test; +import static org.junit.Assert.assertEquals; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; import java.util.NoSuchElementException; import java.util.Scanner; -import static org.assertj.core.api.Assertions.fail; -import static org.junit.Assert.assertEquals; +import org.junit.Test; public class JavaScannerUnitTest { @Test public void whenReadingLines_thenCorrect() { String input = "Scanner\nTest\n"; - - byte[] byteArray = input.getBytes(StandardCharsets.UTF_8); - //@formatter:off - try (InputStream is = new ByteArrayInputStream(byteArray); - Scanner scanner = new Scanner(is)) { - - //@formatter:on - String result = scanner.nextLine() + " " + scanner.nextLine(); - - String expected = input.replace("\n", " ") - .trim(); - assertEquals(expected, result); - } catch (IOException e) { - fail(e.getMessage()); + try (Scanner scanner = new Scanner(input)) { + assertEquals("Scanner", scanner.nextLine()); + assertEquals("Test", scanner.nextLine()); } } @Test(expected = NoSuchElementException.class) - public void whenReadingLinesFromStringContainingNoLines_thenThrowNoSuchElementException() { - String input = ""; - Scanner scanner = new Scanner(input); - String result = scanner.nextLine(); - scanner.close(); + public void whenReadingLines_thenThrowNoSuchElementException() { + try (Scanner scanner = new Scanner("")) { + String result = scanner.nextLine(); + } } @Test(expected = IllegalStateException.class) - public void whenReadingLinesUsingClosedScanner_thenThrowIllegalStateException() { - String input = ""; - Scanner scanner = new Scanner(input); + public void whenReadingLines_thenThrowIllegalStateException() { + Scanner scanner = new Scanner(""); scanner.close(); String result = scanner.nextLine(); } - - } From bcf119bf1a0c00c33418c7c0de3dc1c0ccd26cda Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 23 Oct 2019 06:50:50 +0530 Subject: [PATCH 168/304] Spring Integration Java DSL - Github Issue 7885 (#8060) * Spring Integration Java DSL - Github Issue 7885 - Fixed the bridge example * Spring Integration Java DSL - Github Issue 7885 - Fixed the bridge example --- .../java/com/baeldung/dsl/JavaDSLFileCopyConfig.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-integration/src/main/java/com/baeldung/dsl/JavaDSLFileCopyConfig.java b/spring-integration/src/main/java/com/baeldung/dsl/JavaDSLFileCopyConfig.java index 7e91345f04..e79eec3e83 100644 --- a/spring-integration/src/main/java/com/baeldung/dsl/JavaDSLFileCopyConfig.java +++ b/spring-integration/src/main/java/com/baeldung/dsl/JavaDSLFileCopyConfig.java @@ -16,8 +16,10 @@ import org.springframework.integration.core.MessageSource; import org.springframework.integration.dsl.IntegrationFlow; import org.springframework.integration.dsl.IntegrationFlows; import org.springframework.integration.dsl.Pollers; +import org.springframework.integration.dsl.channel.MessageChannels; import org.springframework.integration.file.FileReadingMessageSource; import org.springframework.integration.file.FileWritingMessageHandler; +import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandler; /** @@ -104,9 +106,14 @@ public class JavaDSLFileCopyConfig { return handler; } + @Bean + public MessageChannel holdingTank() { + return MessageChannels.queue().get(); + } + // @Bean public IntegrationFlow fileReader() { - return IntegrationFlows.from(sourceDirectory()) + return IntegrationFlows.from(sourceDirectory(), configurer -> configurer.poller(Pollers.fixedDelay(10))) .filter(onlyJpgs()) .channel("holdingTank") .get(); From dcfa9a1782b65eb6acb219efb40425b08b923d08 Mon Sep 17 00:00:00 2001 From: Kai Yuan Date: Tue, 15 Oct 2019 22:54:02 +0200 Subject: [PATCH 169/304] [BAEL-3343] hasNext() vs hasNextLine() in scanner demo --- .../scanner/HasNextVsHasNextLineDemo.java | 96 +++++++++++++++++++ .../main/resources/scanner/log4j.properties | 4 + 2 files changed, 100 insertions(+) create mode 100644 core-java-modules/core-java-io-2/src/main/java/com/baeldung/scanner/HasNextVsHasNextLineDemo.java create mode 100644 core-java-modules/core-java-io-2/src/main/resources/scanner/log4j.properties diff --git a/core-java-modules/core-java-io-2/src/main/java/com/baeldung/scanner/HasNextVsHasNextLineDemo.java b/core-java-modules/core-java-io-2/src/main/java/com/baeldung/scanner/HasNextVsHasNextLineDemo.java new file mode 100644 index 0000000000..8653b1e137 --- /dev/null +++ b/core-java-modules/core-java-io-2/src/main/java/com/baeldung/scanner/HasNextVsHasNextLineDemo.java @@ -0,0 +1,96 @@ +package com.baeldung.scanner; + +import lombok.extern.log4j.Log4j; +import org.apache.log4j.LogManager; +import org.apache.log4j.PropertyConfigurator; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.Scanner; + +@Log4j +public class HasNextVsHasNextLineDemo { + private static final String LINE = "----------------------------"; + private static final String END_LINE = "--------OUTPUT--END---------\n"; + + + private static final String INPUT = new StringBuilder() + .append("magic\tproject\n") + .append(" database: oracle\n") + .append("dependencies:\n") + .append("spring:foo:bar\n") + .append("\n").toString(); + + private static void hasNextBasic() { + printHeader("hasNext() Basic"); + Scanner scanner = new Scanner(INPUT); + while (scanner.hasNext()) { + log.info(scanner.next()); + } + log.info(END_LINE); + scanner.close(); + } + + private static void hasNextWithDelimiter() { + printHeader("hasNext() with delimiter"); + Scanner scanner = new Scanner(INPUT); + while (scanner.hasNext()) { + String token = scanner.next(); + if ("dependencies:".equals(token)) { + scanner.useDelimiter(":"); + } + log.info(token); + } + log.info(END_LINE); + scanner.close(); + } + + private static void hasNextWithDelimiterFixed() { + printHeader("hasNext() with delimiter FIX"); + Scanner scanner = new Scanner(INPUT); + while (scanner.hasNext()) { + String token = scanner.next(); + if ("dependencies:".equals(token)) { + scanner.useDelimiter(":|\\s+"); + } + log.info(token); + } + log.info(END_LINE); + scanner.close(); + } + + private static void addLineNumber() { + printHeader("add line number by hasNextLine() "); + Scanner scanner = new Scanner(INPUT); + int i = 0; + while (scanner.hasNextLine()) { + log.info(String.format("%d|%s", ++i, scanner.nextLine())); + } + log.info(END_LINE); + scanner.close(); + } + + private static void printHeader(String title) { + log.info(LINE); + log.info(title); + log.info(LINE); + } + + public static void main(String[] args) throws IOException { + setLogger(); + hasNextBasic(); + hasNextWithDelimiter(); + hasNextWithDelimiterFixed(); + addLineNumber(); + } + + //overwrite the logger config + private static void setLogger() throws IOException { + InputStream is = HasNextVsHasNextLineDemo.class.getResourceAsStream("/scanner/log4j.properties"); + Properties props = new Properties(); + props.load(is); + LogManager.resetConfiguration(); + PropertyConfigurator.configure(props); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-io-2/src/main/resources/scanner/log4j.properties b/core-java-modules/core-java-io-2/src/main/resources/scanner/log4j.properties new file mode 100644 index 0000000000..59cb116bff --- /dev/null +++ b/core-java-modules/core-java-io-2/src/main/resources/scanner/log4j.properties @@ -0,0 +1,4 @@ +log4j.rootLogger=INFO, A1 +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[DEMO]%m%n From 7edc71d8e14cf4844c865b84693a4346bec44775 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 23 Oct 2019 16:52:12 +0800 Subject: [PATCH 170/304] Update README.md --- algorithms-sorting/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-sorting/README.md b/algorithms-sorting/README.md index 8b801e4387..15a5ec6e02 100644 --- a/algorithms-sorting/README.md +++ b/algorithms-sorting/README.md @@ -16,4 +16,5 @@ This module contains articles about sorting algorithms. - [Selection Sort in Java](https://www.baeldung.com/java-selection-sort) - [Sorting Strings by Contained Numbers in Java](https://www.baeldung.com/java-sort-strings-contained-numbers) - [Radix Sort in Java](https://www.baeldung.com/java-radix-sort) +- [Sorting a String Alphabetically in Java](https://www.baeldung.com/java-sort-string-alphabetically) - [Bucket Sort in Java](https://www.baeldung.com/java-bucket-sort) From 73037b5e8b39b98c791ae7ec119f53a9552bd3e6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 23 Oct 2019 16:54:58 +0800 Subject: [PATCH 171/304] Update README.md --- algorithms-miscellaneous-4/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md index a9d0dd4e5b..b9f41cf3b0 100644 --- a/algorithms-miscellaneous-4/README.md +++ b/algorithms-miscellaneous-4/README.md @@ -1,4 +1,8 @@ -## Relevant articles: +## Algorithms - Miscellaneous + +This module contains articles about algorithms. Some classes of algorithms, e.g., sorting and genetic algorithms, have their own dedicated modules. + +### Relevant articles: - [Multi-Swarm Optimization Algorithm in Java](https://www.baeldung.com/java-multi-swarm-algorithm) - [String Search Algorithms for Large Texts](https://www.baeldung.com/java-full-text-search-algorithms) From 220b2d9010012f2f7bd51993064d9c4de2a78398 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 23 Oct 2019 16:56:38 +0800 Subject: [PATCH 172/304] Update README.md --- algorithms-miscellaneous-4/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md index b9f41cf3b0..df2eafb733 100644 --- a/algorithms-miscellaneous-4/README.md +++ b/algorithms-miscellaneous-4/README.md @@ -1,6 +1,6 @@ ## Algorithms - Miscellaneous -This module contains articles about algorithms. Some classes of algorithms, e.g., sorting and genetic algorithms, have their own dedicated modules. +This module contains articles about algorithms. Some classes of algorithms, e.g., [sorting](https://github.com/eugenp/tutorials/blob/algorithms-sorting) and [genetic algorithms](https://github.com/eugenp/tutorials/blob/algorithms-genetic), have their own dedicated modules. ### Relevant articles: From 1de7b016a87b375e4573661f880cfcd24265c3e2 Mon Sep 17 00:00:00 2001 From: Martin van Wingerden Date: Wed, 23 Oct 2019 11:04:40 +0200 Subject: [PATCH 173/304] [BAEL-3315] Added missing code snippets from the Java 8 Date/Time article Also: - formatted changed files with Eclipse profile - corrected failing test: givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix --- .../datetime/UseDateTimeFormatter.java | 21 ++++++++++ .../com/baeldung/datetime/UseLocalDate.java | 7 +++- .../baeldung/datetime/UseLocalDateTime.java | 4 ++ .../com/baeldung/datetime/UseLocalTime.java | 4 ++ .../baeldung/datetime/UseOffsetDateTime.java | 11 +++++ .../baeldung/datetime/UseZonedDateTime.java | 24 ++++++----- .../com/baeldung/date/DateDiffUnitTest.java | 11 ++--- ...DateTimeApiGeneralComparisonsUnitTest.java | 28 +++++++++---- .../dateapi/JavaDurationUnitTest.java | 35 ++++++++++++++-- .../baeldung/dateapi/JavaPeriodUnitTest.java | 41 +++++++++++++++---- .../UseDateTimeFormatterUnitTest.java | 36 ++++++++++++++++ .../datetime/UseLocalDateTimeUnitTest.java | 27 +++++++++++- .../datetime/UseLocalDateUnitTest.java | 29 ++++++++++++- .../datetime/UseLocalTimeUnitTest.java | 17 ++++++-- .../datetime/UseOffsetDateTimeUnitTest.java | 24 +++++++++++ .../datetime/UseToInstantUnitTest.java | 33 +++++++++++++++ .../datetime/UseZonedDateTimeUnitTest.java | 21 +++++++++- 17 files changed, 330 insertions(+), 43 deletions(-) create mode 100644 java-dates/src/main/java/com/baeldung/datetime/UseDateTimeFormatter.java create mode 100644 java-dates/src/main/java/com/baeldung/datetime/UseOffsetDateTime.java create mode 100644 java-dates/src/test/java/com/baeldung/datetime/UseDateTimeFormatterUnitTest.java create mode 100644 java-dates/src/test/java/com/baeldung/datetime/UseOffsetDateTimeUnitTest.java create mode 100644 java-dates/src/test/java/com/baeldung/datetime/UseToInstantUnitTest.java diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseDateTimeFormatter.java b/java-dates/src/main/java/com/baeldung/datetime/UseDateTimeFormatter.java new file mode 100644 index 0000000000..13a2ba6a1a --- /dev/null +++ b/java-dates/src/main/java/com/baeldung/datetime/UseDateTimeFormatter.java @@ -0,0 +1,21 @@ +package com.baeldung.datetime; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; +import java.util.Locale; + +public class UseDateTimeFormatter { + public String formatAsIsoDate(LocalDateTime localDateTime) { + return localDateTime.format(DateTimeFormatter.ISO_DATE); + } + + public String formatCustom(LocalDateTime localDateTime, String pattern) { + return localDateTime.format(DateTimeFormatter.ofPattern(pattern)); + } + + public String formatWithStyleAndLocale(LocalDateTime localDateTime, FormatStyle formatStyle, Locale locale) { + return localDateTime.format(DateTimeFormatter.ofLocalizedDateTime(formatStyle) + .withLocale(locale)); + } +} diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseLocalDate.java b/java-dates/src/main/java/com/baeldung/datetime/UseLocalDate.java index b380c04fc2..ec8dfa2fc4 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/UseLocalDate.java +++ b/java-dates/src/main/java/com/baeldung/datetime/UseLocalDate.java @@ -36,10 +36,15 @@ class UseLocalDate { } LocalDate getFirstDayOfMonth() { - LocalDate firstDayOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); + LocalDate firstDayOfMonth = LocalDate.now() + .with(TemporalAdjusters.firstDayOfMonth()); return firstDayOfMonth; } + boolean isLeapYear(LocalDate localDate) { + return localDate.isLeapYear(); + } + LocalDateTime getStartOfDay(LocalDate localDate) { LocalDateTime startofDay = localDate.atStartOfDay(); return startofDay; diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseLocalDateTime.java b/java-dates/src/main/java/com/baeldung/datetime/UseLocalDateTime.java index b2ff11ba16..267a9412eb 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/UseLocalDateTime.java +++ b/java-dates/src/main/java/com/baeldung/datetime/UseLocalDateTime.java @@ -2,6 +2,7 @@ package com.baeldung.datetime; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.ZoneOffset; import java.time.temporal.ChronoField; public class UseLocalDateTime { @@ -21,4 +22,7 @@ public class UseLocalDateTime { return endOfDate; } + LocalDateTime ofEpochSecond(int epochSecond, ZoneOffset zoneOffset) { + return LocalDateTime.ofEpochSecond(epochSecond, 0, zoneOffset); + } } diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseLocalTime.java b/java-dates/src/main/java/com/baeldung/datetime/UseLocalTime.java index 8d166c413f..876516e365 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/UseLocalTime.java +++ b/java-dates/src/main/java/com/baeldung/datetime/UseLocalTime.java @@ -9,6 +9,10 @@ public class UseLocalTime { return LocalTime.of(hour, min, seconds); } + LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min) { + return LocalTime.of(hour, min); + } + LocalTime getLocalTimeUsingParseMethod(String timeRepresentation) { return LocalTime.parse(timeRepresentation); } diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseOffsetDateTime.java b/java-dates/src/main/java/com/baeldung/datetime/UseOffsetDateTime.java new file mode 100644 index 0000000000..ed8499d6e0 --- /dev/null +++ b/java-dates/src/main/java/com/baeldung/datetime/UseOffsetDateTime.java @@ -0,0 +1,11 @@ +package com.baeldung.datetime; + +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; + +public class UseOffsetDateTime { + public OffsetDateTime offsetOfLocalDateTimeAndOffset(LocalDateTime localDateTime, ZoneOffset offset) { + return OffsetDateTime.of(localDateTime, offset); + } +} diff --git a/java-dates/src/main/java/com/baeldung/datetime/UseZonedDateTime.java b/java-dates/src/main/java/com/baeldung/datetime/UseZonedDateTime.java index 505bfa741f..a8948e5ce1 100644 --- a/java-dates/src/main/java/com/baeldung/datetime/UseZonedDateTime.java +++ b/java-dates/src/main/java/com/baeldung/datetime/UseZonedDateTime.java @@ -12,31 +12,35 @@ class UseZonedDateTime { return ZonedDateTime.of(localDateTime, zoneId); } + ZonedDateTime getZonedDateTimeUsingParseMethod(String parsableString) { + return ZonedDateTime.parse(parsableString); + } + ZonedDateTime getStartOfDay(LocalDate localDate, ZoneId zone) { - ZonedDateTime startofDay = localDate.atStartOfDay() + ZonedDateTime startOfDay = localDate.atStartOfDay() .atZone(zone); - return startofDay; + return startOfDay; } ZonedDateTime getStartOfDayShorthand(LocalDate localDate, ZoneId zone) { - ZonedDateTime startofDay = localDate.atStartOfDay(zone); - return startofDay; + ZonedDateTime startOfDay = localDate.atStartOfDay(zone); + return startOfDay; } ZonedDateTime getStartOfDayFromZonedDateTime(ZonedDateTime zonedDateTime) { - ZonedDateTime startofDay = zonedDateTime.toLocalDateTime() + ZonedDateTime startOfDay = zonedDateTime.toLocalDateTime() .toLocalDate() .atStartOfDay(zonedDateTime.getZone()); - return startofDay; + return startOfDay; } ZonedDateTime getStartOfDayAtMinTime(ZonedDateTime zonedDateTime) { - ZonedDateTime startofDay = zonedDateTime.with(ChronoField.HOUR_OF_DAY, 0); - return startofDay; + ZonedDateTime startOfDay = zonedDateTime.with(ChronoField.HOUR_OF_DAY, 0); + return startOfDay; } ZonedDateTime getStartOfDayAtMidnightTime(ZonedDateTime zonedDateTime) { - ZonedDateTime startofDay = zonedDateTime.with(ChronoField.NANO_OF_DAY, 0); - return startofDay; + ZonedDateTime startOfDay = zonedDateTime.with(ChronoField.NANO_OF_DAY, 0); + return startOfDay; } } diff --git a/java-dates/src/test/java/com/baeldung/date/DateDiffUnitTest.java b/java-dates/src/test/java/com/baeldung/date/DateDiffUnitTest.java index a35699e469..226556d4bb 100644 --- a/java-dates/src/test/java/com/baeldung/date/DateDiffUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/date/DateDiffUnitTest.java @@ -1,6 +1,6 @@ package com.baeldung.date; -import org.junit.Test; +import static org.junit.Assert.assertEquals; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -16,7 +16,7 @@ import java.util.Locale; import java.util.TimeZone; import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertEquals; +import org.junit.Test; public class DateDiffUnitTest { @@ -31,14 +31,14 @@ public class DateDiffUnitTest { assertEquals(diff, 6); } - + @Test public void givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix() { LocalDate now = LocalDate.now(); LocalDate sixDaysBehind = now.minusDays(6); Period period = Period.between(now, sixDaysBehind); - int diff = period.getDays(); + int diff = Math.abs(period.getDays()); assertEquals(diff, 6); } @@ -68,7 +68,8 @@ public class DateDiffUnitTest { public void givenTwoZonedDateTimesInJava8_whenDifferentiating_thenWeGetSix() { LocalDateTime ldt = LocalDateTime.now(); ZonedDateTime now = ldt.atZone(ZoneId.of("America/Montreal")); - ZonedDateTime sixDaysBehind = now.withZoneSameInstant(ZoneId.of("Asia/Singapore")).minusDays(6); + ZonedDateTime sixDaysBehind = now.withZoneSameInstant(ZoneId.of("Asia/Singapore")) + .minusDays(6); long diff = ChronoUnit.DAYS.between(sixDaysBehind, now); assertEquals(diff, 6); } diff --git a/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java b/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java index ff51476e7c..af72f9e58a 100644 --- a/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java @@ -1,12 +1,16 @@ package com.baeldung.date.comparison; -import org.junit.Test; - -import java.time.*; - import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import org.junit.Test; + public class Java8DateTimeApiGeneralComparisonsUnitTest { @Test @@ -54,10 +58,8 @@ public class Java8DateTimeApiGeneralComparisonsUnitTest { @Test public void givenZonedDateTimes_whenComparing_thenAssertsPass() { - ZonedDateTime timeInNewYork = ZonedDateTime.of(2019, 8, 10, 8, 0, 0, 0, - ZoneId.of("America/New_York")); - ZonedDateTime timeInBerlin = ZonedDateTime.of(2019, 8, 10, 14, 0, 0, 0, - ZoneId.of("Europe/Berlin")); + ZonedDateTime timeInNewYork = ZonedDateTime.of(2019, 8, 10, 8, 0, 0, 0, ZoneId.of("America/New_York")); + ZonedDateTime timeInBerlin = ZonedDateTime.of(2019, 8, 10, 14, 0, 0, 0, ZoneId.of("Europe/Berlin")); assertThat(timeInNewYork.isAfter(timeInBerlin), is(false)); assertThat(timeInNewYork.isBefore(timeInBerlin), is(false)); @@ -80,4 +82,14 @@ public class Java8DateTimeApiGeneralComparisonsUnitTest { assertThat(firstTime.compareTo(secondTime), is(-1)); } + + @Test + public void givenMinMaxLocalTimes_whenComparing_thenAssertsPass() { + LocalTime minTime = LocalTime.MIN; + LocalTime time = LocalTime.of(8, 30); + LocalTime maxTime = LocalTime.MAX; + + assertThat(minTime.isBefore(time), is(true)); + assertThat(time.isBefore(maxTime), is(true)); + } } \ No newline at end of file diff --git a/java-dates/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java b/java-dates/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java index db6b353ba6..be43fb609a 100644 --- a/java-dates/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/dateapi/JavaDurationUnitTest.java @@ -1,16 +1,39 @@ package com.baeldung.dateapi; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.time.Duration; import java.time.Instant; +import java.time.LocalTime; import java.time.temporal.ChronoUnit; import org.junit.Test; public class JavaDurationUnitTest { + @Test + public void givenATimePlus30Seconds_whenRequestingDuration_thenExpect30() { + LocalTime initialTime = LocalTime.of(6, 30, 0); + LocalTime finalTime = initialTime.plus(Duration.ofSeconds(30)); + + long seconds = Duration.between(initialTime, finalTime) + .getSeconds(); + + assertThat(seconds).isEqualTo(30); + } + + @Test + public void givenATimePlus30Seconds_whenRequestingSecondsBetween_thenExpect30() { + LocalTime initialTime = LocalTime.of(6, 30, 0); + LocalTime finalTime = initialTime.plus(Duration.ofSeconds(30)); + + long seconds = ChronoUnit.SECONDS.between(initialTime, finalTime); + + assertThat(seconds).isEqualTo(30); + } + @Test public void test2() { Instant start = Instant.parse("2017-10-03T10:15:30.00Z"); @@ -29,11 +52,15 @@ public class JavaDurationUnitTest { Duration fromMinutes = Duration.ofMinutes(60); assertEquals(1, fromMinutes.toHours()); - assertEquals(120, duration.plusSeconds(60).getSeconds()); - assertEquals(30, duration.minusSeconds(30).getSeconds()); + assertEquals(120, duration.plusSeconds(60) + .getSeconds()); + assertEquals(30, duration.minusSeconds(30) + .getSeconds()); - assertEquals(120, duration.plus(60, ChronoUnit.SECONDS).getSeconds()); - assertEquals(30, duration.minus(30, ChronoUnit.SECONDS).getSeconds()); + assertEquals(120, duration.plus(60, ChronoUnit.SECONDS) + .getSeconds()); + assertEquals(30, duration.minus(30, ChronoUnit.SECONDS) + .getSeconds()); Duration fromChar1 = Duration.parse("P1DT1H10M10.5S"); Duration fromChar2 = Duration.parse("PT10M"); diff --git a/java-dates/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java b/java-dates/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java index 81e9153a51..6dfbbe8c24 100644 --- a/java-dates/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/dateapi/JavaPeriodUnitTest.java @@ -1,18 +1,41 @@ package com.baeldung.dateapi; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.time.LocalDate; +import java.time.Period; +import java.time.temporal.ChronoUnit; + import org.apache.log4j.Logger; import org.junit.Test; -import java.time.LocalDate; -import java.time.Period; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - public class JavaPeriodUnitTest { private static final Logger LOG = Logger.getLogger(JavaPeriodUnitTest.class); + @Test + public void givenADatePlus5Days_whenRequestingPeriod_thenExpectFive() { + LocalDate initialDate = LocalDate.parse("2007-05-10"); + LocalDate finalDate = initialDate.plus(Period.ofDays(5)); + + int days = Period.between(initialDate, finalDate) + .getDays(); + + assertThat(days).isEqualTo(5); + } + + @Test + public void givenADatePlus5Days_whenRequestingDaysBetween_thenExpectFive() { + LocalDate initialDate = LocalDate.parse("2007-05-10"); + LocalDate finalDate = initialDate.plus(Period.ofDays(5)); + + long days = ChronoUnit.DAYS.between(initialDate, finalDate); + + assertThat(days).isEqualTo(5); + } + @Test public void whenTestPeriod_thenOk() { @@ -24,8 +47,10 @@ public class JavaPeriodUnitTest { LOG.info(String.format("Years:%d months:%d days:%d", period.getYears(), period.getMonths(), period.getDays())); assertFalse(period.isNegative()); - assertEquals(56, period.plusDays(50).getDays()); - assertEquals(9, period.minusMonths(2).getMonths()); + assertEquals(56, period.plusDays(50) + .getDays()); + assertEquals(9, period.minusMonths(2) + .getMonths()); Period fromUnits = Period.of(3, 10, 10); Period fromDays = Period.ofDays(50); diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseDateTimeFormatterUnitTest.java b/java-dates/src/test/java/com/baeldung/datetime/UseDateTimeFormatterUnitTest.java new file mode 100644 index 0000000000..797e0b954a --- /dev/null +++ b/java-dates/src/test/java/com/baeldung/datetime/UseDateTimeFormatterUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.datetime; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.LocalDateTime; +import java.time.Month; +import java.time.format.FormatStyle; +import java.util.Locale; + +import org.junit.Test; + +public class UseDateTimeFormatterUnitTest { + private final UseDateTimeFormatter subject = new UseDateTimeFormatter(); + private final LocalDateTime localDateTime = LocalDateTime.of(2015, Month.JANUARY, 25, 6, 30); + + @Test + public void givenALocalDate_whenFormattingAsIso_thenPass() { + String result = subject.formatAsIsoDate(localDateTime); + + assertThat(result).isEqualTo("2015-01-25"); + } + + @Test + public void givenALocalDate_whenFormattingWithPattern_thenPass() { + String result = subject.formatCustom(localDateTime, "yyyy/MM/dd"); + + assertThat(result).isEqualTo("2015/01/25"); + } + + @Test + public void givenALocalDate_whenFormattingWithStyleAndLocale_thenPass() { + String result = subject.formatWithStyleAndLocale(localDateTime, FormatStyle.MEDIUM, Locale.UK); + + assertThat(result).isEqualTo("25 Jan 2015, 06:30:00"); + } +} \ No newline at end of file diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java b/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java index 5709fc7209..2bbee16e25 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java @@ -7,12 +7,13 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Month; +import java.time.ZoneOffset; import org.junit.Test; public class UseLocalDateTimeUnitTest { - UseLocalDateTime useLocalDateTime = new UseLocalDateTime(); + private UseLocalDateTime useLocalDateTime = new UseLocalDateTime(); @Test public void givenString_whenUsingParse_thenLocalDateTime() { @@ -33,4 +34,28 @@ public class UseLocalDateTimeUnitTest { assertThat(endOfDayFromGivenDirectly.toLocalTime()).isEqualTo(LocalTime.MAX); assertThat(endOfDayFromGivenDirectly.toString()).isEqualTo("2018-06-23T23:59:59.999999999"); } + + @Test + public void givenLocalDateTimeInFebruary_whenRequestingMonth_thenMonthIsFebruary() { + LocalDateTime givenLocalDateTime = LocalDateTime.of(2015, Month.FEBRUARY, 20, 6, 30); + + assertThat(givenLocalDateTime.getMonth()).isEqualTo(Month.FEBRUARY); + } + + @Test + public void givenLocalDateTime_whenManipulating_thenResultIsAsExpected() { + LocalDateTime givenLocalDateTime = LocalDateTime.parse("2015-02-20T06:30:00"); + + LocalDateTime manipulatedLocalDateTime = givenLocalDateTime.plusDays(1); + manipulatedLocalDateTime = manipulatedLocalDateTime.minusHours(2); + + assertThat(manipulatedLocalDateTime).isEqualTo(LocalDateTime.of(2015, Month.FEBRUARY, 21, 4, 30)); + } + + @Test + public void whenRequestTimeFromEpoch_thenResultIsAsExpected() { + LocalDateTime result = useLocalDateTime.ofEpochSecond(1465817690, ZoneOffset.UTC); + + assertThat(result.toString()).isEqualTo("2016-06-13T11:34:50"); + } } diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java b/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java index bb9b60956d..fd22be9260 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java @@ -12,7 +12,7 @@ import org.junit.Test; public class UseLocalDateUnitTest { - UseLocalDate useLocalDate = new UseLocalDate(); + private UseLocalDate useLocalDate = new UseLocalDate(); @Test public void givenValues_whenUsingFactoryOf_thenLocalDate() { @@ -88,4 +88,31 @@ public class UseLocalDateUnitTest { assertThat(endOfDayWithMax.toString()).isEqualTo("2018-06-23T23:59:59.999999999"); } + @Test + public void givenTheYear2000_whenCheckingForLeapYear_thenReturnTrue() { + LocalDate given = LocalDate.parse("2000-06-23"); + + boolean leapYear = useLocalDate.isLeapYear(given); + + assertThat(leapYear).isEqualTo(true); + } + + @Test + public void givenTheYear2004_whenCheckingForLeapYear_thenReturnTrue() { + LocalDate given = LocalDate.parse("2004-06-23"); + + boolean leapYear = useLocalDate.isLeapYear(given); + + assertThat(leapYear).isEqualTo(true); + } + + @Test + public void givenTheYear2019_whenCheckingForLeapYear_thenReturnFalse() { + LocalDate given = LocalDate.parse("2019-06-23"); + + boolean leapYear = useLocalDate.isLeapYear(given); + + assertThat(leapYear).isEqualTo(false); + } + } diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java b/java-dates/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java index 996e200ae9..afee9126f9 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/datetime/UseLocalTimeUnitTest.java @@ -7,21 +7,30 @@ import org.junit.Test; public class UseLocalTimeUnitTest { - UseLocalTime useLocalTime = new UseLocalTime(); + private UseLocalTime useLocalTime = new UseLocalTime(); @Test public void givenValues_whenUsingFactoryOf_thenLocalTime() { - Assert.assertEquals("07:07:07", useLocalTime.getLocalTimeUsingFactoryOfMethod(7, 7, 7).toString()); + Assert.assertEquals("07:07:07", useLocalTime.getLocalTimeUsingFactoryOfMethod(7, 7, 7) + .toString()); + } + + @Test + public void givenValues_whenUsingFactoryOfWithoutSeconds_thenLocalTime() { + Assert.assertEquals("07:07", useLocalTime.getLocalTimeUsingFactoryOfMethod(7, 7) + .toString()); } @Test public void givenString_whenUsingParse_thenLocalTime() { - Assert.assertEquals("06:30", useLocalTime.getLocalTimeUsingParseMethod("06:30").toString()); + Assert.assertEquals("06:30", useLocalTime.getLocalTimeUsingParseMethod("06:30") + .toString()); } @Test public void givenTime_whenAddHour_thenLocalTime() { - Assert.assertEquals("07:30", useLocalTime.addAnHour(LocalTime.of(6, 30)).toString()); + Assert.assertEquals("07:30", useLocalTime.addAnHour(LocalTime.of(6, 30)) + .toString()); } @Test diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseOffsetDateTimeUnitTest.java b/java-dates/src/test/java/com/baeldung/datetime/UseOffsetDateTimeUnitTest.java new file mode 100644 index 0000000000..5b58dd3848 --- /dev/null +++ b/java-dates/src/test/java/com/baeldung/datetime/UseOffsetDateTimeUnitTest.java @@ -0,0 +1,24 @@ +package com.baeldung.datetime; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.LocalDateTime; +import java.time.Month; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; + +import org.junit.Test; + +public class UseOffsetDateTimeUnitTest { + private final UseOffsetDateTime subject = new UseOffsetDateTime(); + + @Test + public void givenAZoneOffSetAndLocalDateTime_whenCombing_thenValidResult() { + ZoneOffset offset = ZoneOffset.of("+02:00"); + LocalDateTime localDateTime = LocalDateTime.of(2015, Month.FEBRUARY, 20, 6, 30); + + OffsetDateTime result = subject.offsetOfLocalDateTimeAndOffset(localDateTime, offset); + + assertThat(result.toString()).isEqualTo("2015-02-20T06:30+02:00"); + } +} \ No newline at end of file diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseToInstantUnitTest.java b/java-dates/src/test/java/com/baeldung/datetime/UseToInstantUnitTest.java new file mode 100644 index 0000000000..78d9a647fe --- /dev/null +++ b/java-dates/src/test/java/com/baeldung/datetime/UseToInstantUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.datetime; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.LocalDateTime; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import org.junit.Test; + +public class UseToInstantUnitTest { + + private UseToInstant subject = new UseToInstant(); + + @Test + public void givenAGregorianCalenderDate_whenConvertingToLocalDate_thenAsExpected() { + GregorianCalendar givenCalender = new GregorianCalendar(2018, Calendar.JULY, 28); + + LocalDateTime localDateTime = subject.convertDateToLocalDate(givenCalender); + + assertThat(localDateTime).isEqualTo("2018-07-28T00:00:00"); + } + + @Test + public void givenADate_whenConvertingToLocalDate_thenAsExpected() { + Date givenDate = new Date(1465817690000L); + + LocalDateTime localDateTime = subject.convertDateToLocalDate(givenDate); + + assertThat(localDateTime).isEqualTo("2016-06-13T13:34:50"); + } +} \ No newline at end of file diff --git a/java-dates/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java b/java-dates/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java index f9b4008888..4a39f6056e 100644 --- a/java-dates/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java +++ b/java-dates/src/test/java/com/baeldung/datetime/UseZonedDateTimeUnitTest.java @@ -7,13 +7,14 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.Set; import org.junit.Assert; import org.junit.Test; public class UseZonedDateTimeUnitTest { - UseZonedDateTime zonedDateTime = new UseZonedDateTime(); + private UseZonedDateTime zonedDateTime = new UseZonedDateTime(); @Test public void givenZoneId_thenZonedDateTime() { @@ -22,6 +23,13 @@ public class UseZonedDateTimeUnitTest { Assert.assertEquals(zoneId, ZoneId.from(zonedDatetime)); } + @Test + public void whenRequestingZones_thenAtLeastOneIsReturned() { + Set allZoneIds = ZoneId.getAvailableZoneIds(); + + assertThat(allZoneIds.size()).isGreaterThan(1); + } + @Test public void givenLocalDateOrZoned_whenSettingStartOfDay_thenReturnMidnightInAllCases() { LocalDate given = LocalDate.parse("2018-06-23"); @@ -42,4 +50,15 @@ public class UseZonedDateTimeUnitTest { assertThat(startOfOfDayWithMethod.toLocalTime() .toString()).isEqualTo("00:00"); } + + @Test + public void givenAStringWithTimeZone_whenParsing_thenEqualsExpected() { + ZonedDateTime resultFromString = zonedDateTime.getZonedDateTimeUsingParseMethod("2015-05-03T10:15:30+01:00[Europe/Paris]"); + ZonedDateTime resultFromLocalDateTime = ZonedDateTime.of(2015, 5, 3, 11, 15, 30, 0, ZoneId.of("Europe/Paris")); + + assertThat(resultFromString.getZone()).isEqualTo(ZoneId.of("Europe/Paris")); + assertThat(resultFromLocalDateTime.getZone()).isEqualTo(ZoneId.of("Europe/Paris")); + + assertThat(resultFromString).isEqualTo(resultFromLocalDateTime); + } } From 546acf842fc4d542cfe7bf7d6092933acb1704d0 Mon Sep 17 00:00:00 2001 From: Martin van Wingerden Date: Wed, 23 Oct 2019 11:33:00 +0200 Subject: [PATCH 174/304] [BAEL-3289] Add missing code snippets from the Spring Scheduled article All the samples still existed with some slight variation, I updated where applicable Main thing is that the link in the article has to be corrected --- spring-scheduling/README.md | 1 + .../baeldung/scheduling/ScheduledAnnotationExample.java | 8 +++++--- .../src/main/resources/springScheduled-config.xml | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/spring-scheduling/README.md b/spring-scheduling/README.md index 72d5a7dc83..2e3bb2b5e5 100644 --- a/spring-scheduling/README.md +++ b/spring-scheduling/README.md @@ -1,5 +1,6 @@ ### Relevant articles: - [A Guide to the Spring Task Scheduler](http://www.baeldung.com/spring-task-scheduler) +- [The @Scheduled Annotation in Spring](https://www.baeldung.com/spring-scheduled-tasks) - [Guide to Spring Retry](http://www.baeldung.com/spring-retry) - [How To Do @Async in Spring](http://www.baeldung.com/spring-async) diff --git a/spring-scheduling/src/main/java/org/baeldung/scheduling/ScheduledAnnotationExample.java b/spring-scheduling/src/main/java/org/baeldung/scheduling/ScheduledAnnotationExample.java index 284bcf5e6a..23bbee3bc3 100644 --- a/spring-scheduling/src/main/java/org/baeldung/scheduling/ScheduledAnnotationExample.java +++ b/spring-scheduling/src/main/java/org/baeldung/scheduling/ScheduledAnnotationExample.java @@ -31,9 +31,10 @@ public class ScheduledAnnotationExample { System.out.println("Fixed rate task - " + System.currentTimeMillis() / 1000); } - @Scheduled(fixedDelay = 1000, initialDelay = 100) + @Scheduled(fixedDelay = 1000, initialDelay = 1000) public void scheduleFixedRateWithInitialDelayTask() { - System.out.println("Fixed delay task with one second initial delay - " + System.currentTimeMillis() / 1000); + long now = System.currentTimeMillis() / 1000; + System.out.println("Fixed rate task with one second initial delay - " + now); } /** @@ -41,7 +42,8 @@ public class ScheduledAnnotationExample { */ @Scheduled(cron = "0 15 10 15 * ?") public void scheduleTaskUsingCronExpression() { - System.out.println("schedule tasks using cron expressions - " + System.currentTimeMillis() / 1000); + long now = System.currentTimeMillis() / 1000; + System.out.println("schedule tasks using cron jobs - " + now); } @Scheduled(cron = "${cron.expression}") diff --git a/spring-scheduling/src/main/resources/springScheduled-config.xml b/spring-scheduling/src/main/resources/springScheduled-config.xml index d1ff9dc028..4078f535da 100644 --- a/spring-scheduling/src/main/resources/springScheduled-config.xml +++ b/spring-scheduling/src/main/resources/springScheduled-config.xml @@ -15,7 +15,7 @@ - + From a42fc708fb92127504c8eda61f8ec276fa2c5ffd Mon Sep 17 00:00:00 2001 From: Martin van Wingerden Date: Wed, 23 Oct 2019 12:04:31 +0200 Subject: [PATCH 175/304] [BAEL-3292] Add missing code snippets from the Java 8 groupingBy article The Tuple had to be changed because it required an equals/hashcode Also: formatted with eclipse profile --- .../java_8_features/groupingby/Tuple.java | 31 ++++++++----- .../Java8GroupingByCollectorUnitTest.java | 46 ++++++++++++++++--- 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/Tuple.java b/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/Tuple.java index 7a9f62341e..82a84bb2d6 100644 --- a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/Tuple.java +++ b/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/Tuple.java @@ -1,12 +1,12 @@ package com.baeldung.java_8_features.groupingby; -public class Tuple { +import java.util.Objects; + +public class Tuple { + private final BlogPostType type; + private final String author; - private BlogPostType type; - private String author; - public Tuple(BlogPostType type, String author) { - super(); this.type = type; this.author = author; } @@ -15,20 +15,27 @@ public class Tuple { return type; } - public void setType(BlogPostType type) { - this.type = type; - } - public String getAuthor() { return author; } - public void setAuthor(String author) { - this.author = author; + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Tuple tuple = (Tuple) o; + return type == tuple.type && author.equals(tuple.author); + } + + @Override + public int hashCode() { + return Objects.hash(type, author); } @Override public String toString() { - return "Tuple [type=" + type + ", author=" + author + ", getType()=" + getType() + ", getAuthor()=" + getAuthor() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; + return "Tuple{" + "type=" + type + ", author='" + author + '\'' + '}'; } } diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java_8_features/groupingby/Java8GroupingByCollectorUnitTest.java b/core-java-modules/core-java-8/src/test/java/com/baeldung/java_8_features/groupingby/Java8GroupingByCollectorUnitTest.java index 323586b85f..1da705294e 100644 --- a/core-java-modules/core-java-8/src/test/java/com/baeldung/java_8_features/groupingby/Java8GroupingByCollectorUnitTest.java +++ b/core-java-modules/core-java-8/src/test/java/com/baeldung/java_8_features/groupingby/Java8GroupingByCollectorUnitTest.java @@ -1,15 +1,32 @@ package com.baeldung.java_8_features.groupingby; -import com.baeldung.java_8_features.groupingby.BlogPost; -import com.baeldung.java_8_features.groupingby.BlogPostType; -import org.junit.Test; +import static java.util.Comparator.comparingInt; +import static java.util.stream.Collectors.averagingInt; +import static java.util.stream.Collectors.counting; +import static java.util.stream.Collectors.groupingBy; +import static java.util.stream.Collectors.groupingByConcurrent; +import static java.util.stream.Collectors.joining; +import static java.util.stream.Collectors.mapping; +import static java.util.stream.Collectors.maxBy; +import static java.util.stream.Collectors.summarizingInt; +import static java.util.stream.Collectors.summingInt; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toSet; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; -import java.util.*; +import java.util.Arrays; +import java.util.EnumMap; +import java.util.IntSummaryStatistics; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.concurrent.ConcurrentMap; -import static java.util.Comparator.comparingInt; -import static java.util.stream.Collectors.*; -import static org.junit.Assert.*; +import org.junit.Test; public class Java8GroupingByCollectorUnitTest { @@ -180,4 +197,19 @@ public class Java8GroupingByCollectorUnitTest { assertEquals(15, newsLikeStatistics.getMin()); } + @Test + public void givenAListOfPosts_whenGroupedByComplexMapKeyType_thenGetAMapBetweenTupleAndList() { + Map> postsPerTypeAndAuthor = posts.stream() + .collect(groupingBy(post -> new Tuple(post.getType(), post.getAuthor()))); + + List result = postsPerTypeAndAuthor.get(new Tuple(BlogPostType.GUIDE, "Author 1")); + + assertThat(result.size()).isEqualTo(1); + + BlogPost blogPost = result.get(0); + + assertThat(blogPost.getTitle()).isEqualTo("Programming guide"); + assertThat(blogPost.getType()).isEqualTo(BlogPostType.GUIDE); + assertThat(blogPost.getAuthor()).isEqualTo("Author 1"); + } } From f20d2a61947d13e2c7f02816eb03eb168b512ca4 Mon Sep 17 00:00:00 2001 From: Martin van Wingerden Date: Wed, 23 Oct 2019 13:27:02 +0200 Subject: [PATCH 176/304] [BAEL-3295] Add missing code snippets from the Spring Session article --- .../com/baeldung/session/bean/Constants.java | 5 +++ .../java/com/baeldung/session/bean/Foo.java | 29 ++++++++++++ .../security/config/SecSecurityConfig.java | 2 +- .../baeldung/session/web/FooController.java | 44 +++++++++++++++++++ .../session/web/SessionRestController.java | 4 +- .../src/main/resources/application.properties | 2 + .../src/main/resources/webSecurityConfig.xml | 5 +-- .../src/main/webapp/WEB-INF/web.xml | 3 +- 8 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 spring-security-mvc/src/main/java/com/baeldung/session/bean/Constants.java create mode 100644 spring-security-mvc/src/main/java/com/baeldung/session/bean/Foo.java create mode 100644 spring-security-mvc/src/main/java/com/baeldung/session/web/FooController.java diff --git a/spring-security-mvc/src/main/java/com/baeldung/session/bean/Constants.java b/spring-security-mvc/src/main/java/com/baeldung/session/bean/Constants.java new file mode 100644 index 0000000000..bf204c3b99 --- /dev/null +++ b/spring-security-mvc/src/main/java/com/baeldung/session/bean/Constants.java @@ -0,0 +1,5 @@ +package com.baeldung.session.bean; + +public class Constants { + public static final String FOO = "foo"; +} diff --git a/spring-security-mvc/src/main/java/com/baeldung/session/bean/Foo.java b/spring-security-mvc/src/main/java/com/baeldung/session/bean/Foo.java new file mode 100644 index 0000000000..c9c9c011d4 --- /dev/null +++ b/spring-security-mvc/src/main/java/com/baeldung/session/bean/Foo.java @@ -0,0 +1,29 @@ +package com.baeldung.session.bean; + +import static org.springframework.context.annotation.ScopedProxyMode.TARGET_CLASS; +import static org.springframework.web.context.WebApplicationContext.SCOPE_SESSION; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = SCOPE_SESSION, proxyMode = TARGET_CLASS) +public class Foo { + private final String created; + + public Foo() { + this.created = LocalDateTime.now() + .format(DateTimeFormatter.ISO_DATE_TIME); + } + + public Foo(Foo theFoo) { + this.created = theFoo.created; + } + + public String getCreated() { + return created; + } +} diff --git a/spring-security-mvc/src/main/java/com/baeldung/session/security/config/SecSecurityConfig.java b/spring-security-mvc/src/main/java/com/baeldung/session/security/config/SecSecurityConfig.java index 35b53a0e7f..9a4978c27e 100644 --- a/spring-security-mvc/src/main/java/com/baeldung/session/security/config/SecSecurityConfig.java +++ b/spring-security-mvc/src/main/java/com/baeldung/session/security/config/SecSecurityConfig.java @@ -38,7 +38,7 @@ public class SecSecurityConfig extends WebSecurityConfigurerAdapter { .csrf().disable() .authorizeRequests() .antMatchers("/anonymous*").anonymous() - .antMatchers("/login*","/invalidSession*", "/sessionExpired*").permitAll() + .antMatchers("/login*","/invalidSession*", "/sessionExpired*", "/foo/**").permitAll() .anyRequest().authenticated() .and() .formLogin() diff --git a/spring-security-mvc/src/main/java/com/baeldung/session/web/FooController.java b/spring-security-mvc/src/main/java/com/baeldung/session/web/FooController.java new file mode 100644 index 0000000000..7c3385dcbd --- /dev/null +++ b/spring-security-mvc/src/main/java/com/baeldung/session/web/FooController.java @@ -0,0 +1,44 @@ +package com.baeldung.session.web; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import com.baeldung.session.bean.Constants; +import com.baeldung.session.bean.Foo; + +@RestController +@RequestMapping(path = "/foo") +public class FooController { + + @Autowired + private Foo theFoo; + + @GetMapping(path = "set") + public void fooSet(HttpSession session) { + session.setAttribute(Constants.FOO, new Foo()); + } + + @GetMapping(path = "autowired") + public Foo getAutowired() { + return new Foo(theFoo); + } + + @GetMapping(path = "inject") + public Foo fooInject(HttpSession session) { + return (Foo) session.getAttribute(Constants.FOO); + } + + @GetMapping(path = "raw") + public Foo fromRaw() { + ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); + HttpSession session = attr.getRequest() + .getSession(true); + return (Foo) session.getAttribute(Constants.FOO); + } +} diff --git a/spring-security-mvc/src/main/java/com/baeldung/session/web/SessionRestController.java b/spring-security-mvc/src/main/java/com/baeldung/session/web/SessionRestController.java index 82199a9e4e..79f57246a9 100644 --- a/spring-security-mvc/src/main/java/com/baeldung/session/web/SessionRestController.java +++ b/spring-security-mvc/src/main/java/com/baeldung/session/web/SessionRestController.java @@ -3,15 +3,13 @@ package com.baeldung.session.web; import javax.servlet.http.HttpSession; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController public class SessionRestController { @GetMapping("/session-max-interval") - @ResponseBody - public String retrieveMaxSessionIncativeInterval(HttpSession session) { + public String retrieveMaxSessionInactiveInterval(HttpSession session) { return "Max Inactive Interval before Session expires: " + session.getMaxInactiveInterval(); } } diff --git a/spring-security-mvc/src/main/resources/application.properties b/spring-security-mvc/src/main/resources/application.properties index 56b2b7b123..6f0d0519ef 100644 --- a/spring-security-mvc/src/main/resources/application.properties +++ b/spring-security-mvc/src/main/resources/application.properties @@ -1,3 +1,5 @@ +spring.jackson.serialization.fail-on-empty-beans=false + server.servlet.session.timeout=65s spring.mvc.view.prefix=/WEB-INF/view/ diff --git a/spring-security-mvc/src/main/resources/webSecurityConfig.xml b/spring-security-mvc/src/main/resources/webSecurityConfig.xml index 42ff4c2186..e91755d394 100644 --- a/spring-security-mvc/src/main/resources/webSecurityConfig.xml +++ b/spring-security-mvc/src/main/resources/webSecurityConfig.xml @@ -7,7 +7,7 @@ http://www.springframework.org/schema/beans/spring-beans.xsd" > - + @@ -22,10 +22,9 @@ - - + diff --git a/spring-security-mvc/src/main/webapp/WEB-INF/web.xml b/spring-security-mvc/src/main/webapp/WEB-INF/web.xml index 2ef734441b..88087c92ed 100644 --- a/spring-security-mvc/src/main/webapp/WEB-INF/web.xml +++ b/spring-security-mvc/src/main/webapp/WEB-INF/web.xml @@ -8,13 +8,14 @@ 1 + COOKIE - org.baeldung.web.SessionListenerWithMetrics + com.baeldung.web.SessionListenerWithMetrics spring-data-neo4j @@ -60,7 +61,7 @@ spring-jpa spring-persistence-simple jpa-hibernate-cascade-type - r2dbc + r2dbc spring-boot-jdbi diff --git a/persistence-modules/spring-data-jpa-3/pom.xml b/persistence-modules/spring-data-jpa-3/pom.xml new file mode 100644 index 0000000000..f743fce2a3 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/pom.xml @@ -0,0 +1,78 @@ + + + + 4.0.0 + spring-data-jpa-3 + spring-data-jpa-3 + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../../parent-boot-2 + + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.postgresql + postgresql + ${postgresql.version} + + + + + org.testcontainers + junit-jupiter + ${testcontainers.version} + test + + + org.testcontainers + postgresql + ${testcontainers.version} + test + + + org.springframework.boot + spring-boot-starter-test + test + + + junit + junit + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.platform + junit-platform-launcher + ${junit-platform.version} + test + + + + + 1.12.2 + 42.2.8 + + + diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/Application.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/Application.java new file mode 100644 index 0000000000..c0490d50c6 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/Application.java @@ -0,0 +1,12 @@ +package com.baeldung; + +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/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/tx/Payment.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/tx/Payment.java new file mode 100644 index 0000000000..37f3d09381 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/tx/Payment.java @@ -0,0 +1,55 @@ +package com.baeldung.tx; + +import javax.persistence.*; + +@Entity +public class Payment { + + @Id + @GeneratedValue + private Long id; + + private Long amount; + + @Column(unique = true) + private String referenceNumber; + + @Enumerated(EnumType.STRING) + private State state; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAmount() { + return amount; + } + + public void setAmount(Long amount) { + this.amount = amount; + } + + public String getReferenceNumber() { + return referenceNumber; + } + + public void setReferenceNumber(String referenceNumber) { + this.referenceNumber = referenceNumber; + } + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + public enum State { + STARTED, FAILED, SUCCESSFUL + } +} diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java new file mode 100644 index 0000000000..62d64d4372 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java @@ -0,0 +1,171 @@ +package com.baeldung.tx; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.springframework.transaction.support.TransactionCallbackWithoutResult; +import org.springframework.transaction.support.TransactionTemplate; +import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import javax.persistence.EntityManager; + +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace.NONE; +import static org.springframework.transaction.annotation.Propagation.NOT_SUPPORTED; + +@DataJpaTest +@Testcontainers +@ActiveProfiles("test") +@AutoConfigureTestDatabase(replace = NONE) +@Transactional(propagation = NOT_SUPPORTED) +class ManualTransactionIntegrationTest { + + @Container + private static PostgreSQLContainer pg = initPostgres(); + + @Autowired + private PlatformTransactionManager transactionManager; + + @Autowired + private EntityManager entityManager; + + private TransactionTemplate transactionTemplate; + + @BeforeEach + void setUp() { + transactionTemplate = new TransactionTemplate(transactionManager); + } + + @AfterEach + void flushDb() { + transactionTemplate.execute(status -> entityManager + .createQuery("delete from Payment") + .executeUpdate()); + } + + @Test + void givenAPayment_WhenNotDuplicate_ThenShouldCommit() { + Long id = transactionTemplate.execute(status -> { + Payment payment = new Payment(); + payment.setAmount(1000L); + payment.setReferenceNumber("Ref-1"); + payment.setState(Payment.State.SUCCESSFUL); + + entityManager.persist(payment); + + return payment.getId(); + }); + + Payment payment = entityManager.find(Payment.class, id); + assertThat(payment).isNotNull(); + } + + @Test + void givenAPayment_WhenMarkAsRollback_ThenShouldRollback() { + transactionTemplate.execute(status -> { + Payment payment = new Payment(); + payment.setAmount(1000L); + payment.setReferenceNumber("Ref-1"); + payment.setState(Payment.State.SUCCESSFUL); + + entityManager.persist(payment); + status.setRollbackOnly(); + + return payment.getId(); + }); + + assertThat(entityManager + .createQuery("select p from Payment p") + .getResultList()).isEmpty(); + } + + @Test + void givenTwoPayments_WhenRefIsDuplicate_ThenShouldRollback() { + try { + transactionTemplate.execute(s -> { + Payment first = new Payment(); + first.setAmount(1000L); + first.setReferenceNumber("Ref-1"); + first.setState(Payment.State.SUCCESSFUL); + + Payment second = new Payment(); + second.setAmount(2000L); + second.setReferenceNumber("Ref-1"); + second.setState(Payment.State.SUCCESSFUL); + + entityManager.persist(first); + entityManager.persist(second); + + return "Ref-1"; + }); + } catch (Exception ignored) { + } + + assertThat(entityManager + .createQuery("select p from Payment p") + .getResultList()).isEmpty(); + } + + @Test + void givenAPayment_WhenNotExpectingAnyResult_ThenShouldCommit() { + transactionTemplate.execute(new TransactionCallbackWithoutResult() { + @Override + protected void doInTransactionWithoutResult(TransactionStatus status) { + Payment payment = new Payment(); + payment.setReferenceNumber("Ref-1"); + payment.setState(Payment.State.SUCCESSFUL); + + entityManager.persist(payment); + } + }); + + assertThat(entityManager + .createQuery("select p from Payment p") + .getResultList()).hasSize(1); + } + + @Test + void givenAPayment_WhenUsingTxManager_ThenShouldCommit() { + DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); + definition.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ); + definition.setTimeout(3); + + TransactionStatus status = transactionManager.getTransaction(definition); + try { + Payment payment = new Payment(); + payment.setReferenceNumber("Ref-1"); + payment.setState(Payment.State.SUCCESSFUL); + + entityManager.persist(payment); + transactionManager.commit(status); + } catch (Exception ex) { + transactionManager.rollback(status); + } + + assertThat(entityManager + .createQuery("select p from Payment p") + .getResultList()).hasSize(1); + } + + private static PostgreSQLContainer initPostgres() { + PostgreSQLContainer pg = new PostgreSQLContainer<>("postgres:11.1") + .withDatabaseName("baeldung") + .withUsername("test") + .withPassword("test"); + pg.setPortBindings(singletonList("54320:5432")); + + return pg; + } +} diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties new file mode 100644 index 0000000000..aa7093f751 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties @@ -0,0 +1,4 @@ +spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:postgresql://localhost:54320/baeldung +spring.datasource.username=test +spring.datasource.password=test From 14a1c803bfedef64c9015a362b21fd708d4607f0 Mon Sep 17 00:00:00 2001 From: Laurentiu Delcea Date: Thu, 24 Oct 2019 19:36:54 +0300 Subject: [PATCH 182/304] BAEL-3375 Working with Dates before Java 8 --- .../core-java-date-operations/pom.xml | 17 ++++++++++++ .../main/java/com/baeldung/sql/DateUtils.java | 21 +++++++++++++++ .../main/java/com/baeldung/sql/TimeUtils.java | 21 +++++++++++++++ .../java/com/baeldung/sql/TimestampUtils.java | 21 +++++++++++++++ .../com/baeldung/sql/DateUtilsUnitTest.java | 26 +++++++++++++++++++ .../com/baeldung/sql/TimeUtilsUnitTest.java | 26 +++++++++++++++++++ .../baeldung/sql/TimestampUtilsUnitTest.java | 26 +++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 core-java-modules/core-java-date-operations/pom.xml create mode 100644 core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/DateUtils.java create mode 100644 core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimeUtils.java create mode 100644 core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimestampUtils.java create mode 100644 core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/DateUtilsUnitTest.java create mode 100644 core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimeUtilsUnitTest.java create mode 100644 core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimestampUtilsUnitTest.java diff --git a/core-java-modules/core-java-date-operations/pom.xml b/core-java-modules/core-java-date-operations/pom.xml new file mode 100644 index 0000000000..f6e75ca518 --- /dev/null +++ b/core-java-modules/core-java-date-operations/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + core-java-date-operations + ${project.parent.version} + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/DateUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/DateUtils.java new file mode 100644 index 0000000000..265ae540aa --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/DateUtils.java @@ -0,0 +1,21 @@ +package com.baeldung.sql; + +import java.sql.Date; +import java.text.ParseException; +import java.text.SimpleDateFormat; + +public class DateUtils { + + public static Date getNow() { + return new Date(System.currentTimeMillis()); + } + + public static Date getDate(String dateAsString) { + return Date.valueOf(dateAsString); + } + + public static Date getDate(String dateAsString, String pattern) throws ParseException { + java.util.Date customUtilDate = new SimpleDateFormat(pattern).parse(dateAsString); + return new Date(customUtilDate.getTime()); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimeUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimeUtils.java new file mode 100644 index 0000000000..b0537e57e8 --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimeUtils.java @@ -0,0 +1,21 @@ +package com.baeldung.sql; + +import java.sql.Time; +import java.text.ParseException; +import java.text.SimpleDateFormat; + +public class TimeUtils { + + public static Time getNow() { + return new Time(System.currentTimeMillis()); + } + + public static Time getTime(String timeAsString) { + return Time.valueOf(timeAsString); + } + + public static Time getTime(String dateAsString, String pattern) throws ParseException { + java.util.Date customUtilDate = new SimpleDateFormat(pattern).parse(dateAsString); + return new Time(customUtilDate.getTime()); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimestampUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimestampUtils.java new file mode 100644 index 0000000000..3f4f83b792 --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimestampUtils.java @@ -0,0 +1,21 @@ +package com.baeldung.sql; + +import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; + +public class TimestampUtils { + + public static Timestamp getNow() { + return new Timestamp(System.currentTimeMillis()); + } + + public static Timestamp getTimestamp(String timestampAsString) { + return Timestamp.valueOf(timestampAsString); + } + + public static Timestamp getTimestamp(String dateAsString, String pattern) throws ParseException { + java.util.Date customUtilDate = new SimpleDateFormat(pattern).parse(dateAsString); + return new Timestamp(customUtilDate.getTime()); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/DateUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/DateUtilsUnitTest.java new file mode 100644 index 0000000000..964aeb4405 --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/DateUtilsUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.sql; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import java.text.ParseException; +import java.util.Date; + +public class DateUtilsUnitTest { + + @Test + public void givenCurrentDate_thenTodayIsReturned() { + assertEquals(DateUtils.getNow(), new Date()); + } + + @Test(expected = IllegalArgumentException.class) + public void givenDateAsString_whenPatternIsNotRespected_thenExceptionIsThrown() { + DateUtils.getDate("2020 01 01"); + } + + @Test + public void givenDateAndPattern_thenDateIsCorrectlyReturned() throws ParseException { + assertEquals(DateUtils.getDate("2020-01-01"), DateUtils.getDate("2020/01/01", "yyyy/MM/dd")); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimeUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimeUtilsUnitTest.java new file mode 100644 index 0000000000..ef4dea338a --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimeUtilsUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.sql; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import java.text.ParseException; +import java.util.Date; + +public class TimeUtilsUnitTest { + + @Test + public void givenCurrentTime_thenNowIsReturned() { + assertEquals(TimeUtils.getNow(), new Date()); + } + + @Test(expected = IllegalArgumentException.class) + public void givenTimeAsString_whenPatternIsNotRespected_thenExceptionIsThrown() { + TimeUtils.getTime("10 11 12"); + } + + @Test + public void givenTimeAndPattern_thenTimeIsCorrectlyReturned() throws ParseException { + assertEquals(TimeUtils.getTime("10:11:12"), TimeUtils.getTime("10 11 12", "hh mm ss")); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimestampUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimestampUtilsUnitTest.java new file mode 100644 index 0000000000..04925abc43 --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimestampUtilsUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.sql; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import java.text.ParseException; +import java.util.Date; + +public class TimestampUtilsUnitTest { + + @Test + public void givenCurrentTimestamp_thenNowIsReturned() { + assertEquals(TimestampUtils.getNow().toInstant(), new Date().toInstant()); + } + + @Test(expected = IllegalArgumentException.class) + public void givenTimestampAsString_whenPatternIsNotRespected_thenExceptionIsThrown() { + TimestampUtils.getTimestamp("2020/01/01 10:11-12"); + } + + @Test + public void givenTimestampAndPattern_thenTimestampIsCorrectlyReturned() throws ParseException { + assertEquals(TimestampUtils.getTimestamp("2020-01-01 10:11:12"), TimestampUtils.getTimestamp("2020/01/01 10:11-12", "yyyy/MM/dd hh:mm-ss")); + } +} \ No newline at end of file From 960bffd8290db43e6f2c8888a92676603a68b89c Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Thu, 24 Oct 2019 23:33:23 +0530 Subject: [PATCH 183/304] BAEL-18143 Fix spring-jooq issue related to dialect (#8061) - Updated SQLErrorCodeSQLExceptionTranslator to use dialect.thirdParty().springDbName() --- .../com/baeldung/jooq/introduction/ExceptionTranslator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-jooq/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java b/spring-jooq/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java index 8312f20c05..26c061e9cd 100644 --- a/spring-jooq/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java +++ b/spring-jooq/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java @@ -12,7 +12,7 @@ public class ExceptionTranslator extends DefaultExecuteListener { @Override public void exception(ExecuteContext context) { SQLDialect dialect = context.configuration().dialect(); - SQLExceptionTranslator translator = new SQLErrorCodeSQLExceptionTranslator(dialect.name()); + SQLExceptionTranslator translator = new SQLErrorCodeSQLExceptionTranslator(dialect.thirdParty().springDbName()); context.exception(translator.translate("Access database using jOOQ", context.sql(), context.sqlException())); } From d102bbe6cb28708e39cf66941398789168847daf Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Fri, 25 Oct 2019 14:23:39 +0530 Subject: [PATCH 184/304] -- Added partial line example --- .../java/com/baeldung/scanner/JavaScannerUnitTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java index 8bc859ca07..7c244803dd 100644 --- a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java +++ b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java @@ -18,6 +18,16 @@ public class JavaScannerUnitTest { } } + @Test + public void whenReadingPartialLines_thenCorrect() { + String input = "Scanner\n"; + try (Scanner scanner = new Scanner(input)) { + scanner.useDelimiter(""); + scanner.next(); + assertEquals("canner", scanner.nextLine()); + } + } + @Test(expected = NoSuchElementException.class) public void whenReadingLines_thenThrowNoSuchElementException() { try (Scanner scanner = new Scanner("")) { From f2a06c7c34c7ae787b30af4af3332cdf93dd8a36 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Fri, 25 Oct 2019 14:50:02 +0200 Subject: [PATCH 185/304] Multpile issues resolved - fix formatting issues - add email field to Person - add email validation test --- .../javaxval/messageinterpolator/Person.java | 44 +++++++---- ...terMessageInterpolaterIntegrationTest.java | 76 +++++++++++-------- 2 files changed, 72 insertions(+), 48 deletions(-) diff --git a/javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java b/javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java index 1b6f598b60..b9fcfdf4d4 100644 --- a/javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java +++ b/javaxval/src/main/java/org/baeldung/javaxval/messageinterpolator/Person.java @@ -1,30 +1,42 @@ package org.baeldung.javaxval.messageinterpolator; +import javax.validation.constraints.Email; import javax.validation.constraints.Min; import javax.validation.constraints.Size; public class Person { - @Size(min = 10, max = 200, message = "Name should be in-between {min} and {max} characters") - private String name; + @Size(min = 10, max = 100, message = "Name should be between {min} and {max} characters") + private String name; - @Min(value = 18, message = "Age should not be less than {value} but it is ${validatedValue}") - private int age; + @Min(value = 18, message = "Age should not be less than {value}") + private int age; + + @Email(message = "Email address should be in a correct format: ${validatedValue}") + private String email; - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public int getAge() { - return age; - } + public int getAge() { + return age; + } - public void setAge(int age) { - this.age = age; - } + public void setAge(int age) { + this.age = age; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } } diff --git a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java index 877f8348d2..9badd5d5a4 100644 --- a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java +++ b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java @@ -15,44 +15,56 @@ import org.junit.Test; public class ParameterMessageInterpolaterIntegrationTest { - private static Validator validator; + private static Validator validator; - @BeforeClass - public static void beforeClass() { - ValidatorFactory validatorFactory = Validation.byDefaultProvider() - .configure() - .messageInterpolator(new ParameterMessageInterpolator()) - .buildValidatorFactory(); - - validator = validatorFactory.getValidator(); - } + @BeforeClass + public static void beforeClass() { + ValidatorFactory validatorFactory = Validation.byDefaultProvider() + .configure() + .messageInterpolator(new ParameterMessageInterpolator()) + .buildValidatorFactory(); - @Test - public void ifNameLengthIsLess_nameValidationFails() { - Person person = new Person(); - person.setName("John Doe"); - person.setAge(18); + validator = validatorFactory.getValidator(); + } - Set> violations = validator.validate(person); - assertEquals(1, violations.size()); + @Test + public void ifNameLengthIsLess_nameValidationFails() { + Person person = new Person(); + person.setName("John Doe"); + person.setAge(18); - ConstraintViolation violation = violations.iterator().next(); - assertEquals("Name should be in-between 10 and 200 characters", violation.getMessage()); - } - - @Test - public void ifAgeIsLess_ageMinValidationFails() { - Person person = new Person(); - person.setName("John Stephaner Doe"); - person.setAge(16); + Set> violations = validator.validate(person); + assertEquals(1, violations.size()); - Set> violations = validator.validate(person); - assertEquals(1, violations.size()); + ConstraintViolation violation = violations.iterator().next(); + assertEquals("Name should be between 10 and 100 characters", violation.getMessage()); + } - ConstraintViolation violation = violations.iterator().next(); - assertEquals("Age should not be less than 18 but it is ${validatedValue}", violation.getMessage()); - } + @Test + public void ifAgeIsLess_ageMinValidationFails() { + Person person = new Person(); + person.setName("John Stephaner Doe"); + person.setAge(16); -} + Set> violations = validator.validate(person); + assertEquals(1, violations.size()); + ConstraintViolation violation = violations.iterator().next(); + assertEquals("Age should not be less than 18", violation.getMessage()); + } + + @Test + public void ifEmailIsMalformed_emailFormatValidationFails() { + Person person = new Person(); + person.setName("John Stephaner Doe"); + person.setAge(18); + person.setEmail("johndoe.dev"); + + Set> violations = validator.validate(person); + assertEquals(1, violations.size()); + + ConstraintViolation violation = violations.iterator().next(); + assertEquals("Email address should be in a correct format: ${validatedValue}", violation.getMessage()); + } +} \ No newline at end of file From 0e37289743159ed3c6a75b743a0159e619b7ac00 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 16:42:05 +0200 Subject: [PATCH 186/304] #BAEL-16633 split Core Java 9 module - Jigsaw --- core-java-modules/core-java-9-jigsaw/README.md | 11 +++++++++++ .../compile-simple-modules.sh | 0 .../compile-student-client.bat | 0 .../compile-student-model.bat | 0 .../compile-student-service-dbimpl.bat | 0 .../compile-student-service.bat | 0 .../run-simple-module-app.sh | 0 .../run-student-client.bat | 0 .../run-student-client.sh | 0 .../com/baeldung/student/client/StudentClient.java | 0 .../com.baeldung.student.client/module-info.java | 0 .../com/baeldung/student/model/Student.java | 0 .../com.baeldung.student.model/module-info.java | 0 .../student/service/dbimpl/StudentDbService.java | 0 .../module-info.java | 0 .../com/baeldung/student/service/StudentService.java | 0 .../com.baeldung.student.service/module-info.java | 0 .../com/baeldung/modules/hello/HelloInterface.java | 0 .../com/baeldung/modules/hello/HelloModules.java | 0 .../src/simple-modules/hello.modules/module-info.java | 0 .../main.app/com/baeldung/modules/main/MainApp.java | 0 .../src/simple-modules/main.app/module-info.java | 0 .../com/baeldung/java9/modules/ModuleAPIUnitTest.java | 0 core-java-modules/core-java-9/README.md | 3 --- 24 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 core-java-modules/core-java-9-jigsaw/README.md rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/compile-simple-modules.sh (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/compile-student-client.bat (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/compile-student-model.bat (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/compile-student-service-dbimpl.bat (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/compile-student-service.bat (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/run-simple-module-app.sh (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/run-student-client.bat (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/run-student-client.sh (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.client/com/baeldung/student/client/StudentClient.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.client/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.model/com/baeldung/student/model/Student.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.model/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.service.dbimpl/com/baeldung/student/service/dbimpl/StudentDbService.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.service.dbimpl/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.service/com/baeldung/student/service/StudentService.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/modules/com.baeldung.student.service/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloInterface.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloModules.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/simple-modules/hello.modules/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/simple-modules/main.app/com/baeldung/modules/main/MainApp.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/simple-modules/main.app/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-jigsaw}/src/test/java/com/baeldung/java9/modules/ModuleAPIUnitTest.java (100%) diff --git a/core-java-modules/core-java-9-jigsaw/README.md b/core-java-modules/core-java-9-jigsaw/README.md new file mode 100644 index 0000000000..b1a401d48c --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/README.md @@ -0,0 +1,11 @@ +## Core Java 9 + +This module contains articles about Project Jigsaw and the Java Platform Module System (JPMS), introduced with Java 9. + +### Relevant Articles: + +- [Introduction to Project Jigsaw](http://www.baeldung.com/project-jigsaw-java-modularity) +- [A Guide to Java 9 Modularity](https://www.baeldung.com/java-9-modularity) +- [Java 9 java.lang.Module API](https://www.baeldung.com/java-9-module-api) + + diff --git a/core-java-modules/core-java-9/compile-simple-modules.sh b/core-java-modules/core-java-9-jigsaw/compile-simple-modules.sh similarity index 100% rename from core-java-modules/core-java-9/compile-simple-modules.sh rename to core-java-modules/core-java-9-jigsaw/compile-simple-modules.sh diff --git a/core-java-modules/core-java-9/compile-student-client.bat b/core-java-modules/core-java-9-jigsaw/compile-student-client.bat similarity index 100% rename from core-java-modules/core-java-9/compile-student-client.bat rename to core-java-modules/core-java-9-jigsaw/compile-student-client.bat diff --git a/core-java-modules/core-java-9/compile-student-model.bat b/core-java-modules/core-java-9-jigsaw/compile-student-model.bat similarity index 100% rename from core-java-modules/core-java-9/compile-student-model.bat rename to core-java-modules/core-java-9-jigsaw/compile-student-model.bat diff --git a/core-java-modules/core-java-9/compile-student-service-dbimpl.bat b/core-java-modules/core-java-9-jigsaw/compile-student-service-dbimpl.bat similarity index 100% rename from core-java-modules/core-java-9/compile-student-service-dbimpl.bat rename to core-java-modules/core-java-9-jigsaw/compile-student-service-dbimpl.bat diff --git a/core-java-modules/core-java-9/compile-student-service.bat b/core-java-modules/core-java-9-jigsaw/compile-student-service.bat similarity index 100% rename from core-java-modules/core-java-9/compile-student-service.bat rename to core-java-modules/core-java-9-jigsaw/compile-student-service.bat diff --git a/core-java-modules/core-java-9/run-simple-module-app.sh b/core-java-modules/core-java-9-jigsaw/run-simple-module-app.sh similarity index 100% rename from core-java-modules/core-java-9/run-simple-module-app.sh rename to core-java-modules/core-java-9-jigsaw/run-simple-module-app.sh diff --git a/core-java-modules/core-java-9/run-student-client.bat b/core-java-modules/core-java-9-jigsaw/run-student-client.bat similarity index 100% rename from core-java-modules/core-java-9/run-student-client.bat rename to core-java-modules/core-java-9-jigsaw/run-student-client.bat diff --git a/core-java-modules/core-java-9/run-student-client.sh b/core-java-modules/core-java-9-jigsaw/run-student-client.sh similarity index 100% rename from core-java-modules/core-java-9/run-student-client.sh rename to core-java-modules/core-java-9-jigsaw/run-student-client.sh diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.client/com/baeldung/student/client/StudentClient.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.client/com/baeldung/student/client/StudentClient.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.client/com/baeldung/student/client/StudentClient.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.client/com/baeldung/student/client/StudentClient.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.client/module-info.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.client/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.client/module-info.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.client/module-info.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.model/com/baeldung/student/model/Student.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.model/com/baeldung/student/model/Student.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.model/com/baeldung/student/model/Student.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.model/com/baeldung/student/model/Student.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.model/module-info.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.model/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.model/module-info.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.model/module-info.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.service.dbimpl/com/baeldung/student/service/dbimpl/StudentDbService.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service.dbimpl/com/baeldung/student/service/dbimpl/StudentDbService.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.service.dbimpl/com/baeldung/student/service/dbimpl/StudentDbService.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service.dbimpl/com/baeldung/student/service/dbimpl/StudentDbService.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.service.dbimpl/module-info.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service.dbimpl/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.service.dbimpl/module-info.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service.dbimpl/module-info.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.service/com/baeldung/student/service/StudentService.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service/com/baeldung/student/service/StudentService.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.service/com/baeldung/student/service/StudentService.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service/com/baeldung/student/service/StudentService.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.student.service/module-info.java b/core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.student.service/module-info.java rename to core-java-modules/core-java-9-jigsaw/src/modules/com.baeldung.student.service/module-info.java diff --git a/core-java-modules/core-java-9/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloInterface.java b/core-java-modules/core-java-9-jigsaw/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloInterface.java similarity index 100% rename from core-java-modules/core-java-9/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloInterface.java rename to core-java-modules/core-java-9-jigsaw/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloInterface.java diff --git a/core-java-modules/core-java-9/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloModules.java b/core-java-modules/core-java-9-jigsaw/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloModules.java similarity index 100% rename from core-java-modules/core-java-9/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloModules.java rename to core-java-modules/core-java-9-jigsaw/src/simple-modules/hello.modules/com/baeldung/modules/hello/HelloModules.java diff --git a/core-java-modules/core-java-9/src/simple-modules/hello.modules/module-info.java b/core-java-modules/core-java-9-jigsaw/src/simple-modules/hello.modules/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/simple-modules/hello.modules/module-info.java rename to core-java-modules/core-java-9-jigsaw/src/simple-modules/hello.modules/module-info.java diff --git a/core-java-modules/core-java-9/src/simple-modules/main.app/com/baeldung/modules/main/MainApp.java b/core-java-modules/core-java-9-jigsaw/src/simple-modules/main.app/com/baeldung/modules/main/MainApp.java similarity index 100% rename from core-java-modules/core-java-9/src/simple-modules/main.app/com/baeldung/modules/main/MainApp.java rename to core-java-modules/core-java-9-jigsaw/src/simple-modules/main.app/com/baeldung/modules/main/MainApp.java diff --git a/core-java-modules/core-java-9/src/simple-modules/main.app/module-info.java b/core-java-modules/core-java-9-jigsaw/src/simple-modules/main.app/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/simple-modules/main.app/module-info.java rename to core-java-modules/core-java-9-jigsaw/src/simple-modules/main.app/module-info.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/modules/ModuleAPIUnitTest.java b/core-java-modules/core-java-9-jigsaw/src/test/java/com/baeldung/java9/modules/ModuleAPIUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/modules/ModuleAPIUnitTest.java rename to core-java-modules/core-java-9-jigsaw/src/test/java/com/baeldung/java9/modules/ModuleAPIUnitTest.java diff --git a/core-java-modules/core-java-9/README.md b/core-java-modules/core-java-9/README.md index f4939ae1e1..90a1b4ab16 100644 --- a/core-java-modules/core-java-9/README.md +++ b/core-java-modules/core-java-9/README.md @@ -6,7 +6,6 @@ This module contains articles about Java 9 core features - [Java 9 New Features](https://www.baeldung.com/new-java-9) - [New Stream Collectors in Java 9](http://www.baeldung.com/java9-stream-collectors) -- [Introduction to Project Jigsaw](http://www.baeldung.com/project-jigsaw-java-modularity) - [Java 9 Variable Handles Demystified](http://www.baeldung.com/java-variable-handles) - [Exploring the New HTTP Client in Java 9 and 11](http://www.baeldung.com/java-9-http-client) - [Method Handles in Java](http://www.baeldung.com/java-method-handles) @@ -25,7 +24,5 @@ This module contains articles about Java 9 core features - [Introduction to Java 9 StackWalking API](https://www.baeldung.com/java-9-stackwalking-api) - [Java 9 Convenience Factory Methods for Collections](https://www.baeldung.com/java-9-collections-factory-methods) - [Java 9 Stream API Improvements](https://www.baeldung.com/java-9-stream-api) -- [A Guide to Java 9 Modularity](https://www.baeldung.com/java-9-modularity) -- [Java 9 java.lang.Module API](https://www.baeldung.com/java-9-module-api) - [Java 9 Platform Logging API](https://www.baeldung.com/java-9-logging-api) - [Filtering a Stream of Optionals in Java](https://www.baeldung.com/java-filter-stream-of-optional) From 1df0f4add5056424fb759a872b9da5d1fe9be160 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 16:50:07 +0200 Subject: [PATCH 187/304] #BAEL-10229 fix relativePath of parent-kotlin --- parent-kotlin/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/parent-kotlin/pom.xml b/parent-kotlin/pom.xml index 910f97c4d4..1ca786c32f 100644 --- a/parent-kotlin/pom.xml +++ b/parent-kotlin/pom.xml @@ -11,6 +11,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT + ../parent-boot-2 From 3b5e2bca6996b3a2674dfb3c8a4b3e7f03a2305d Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 16:54:07 +0200 Subject: [PATCH 188/304] #BAEL-10229 fix version of parent-kotlin --- parent-kotlin/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/parent-kotlin/pom.xml b/parent-kotlin/pom.xml index 1ca786c32f..1cacd31e13 100644 --- a/parent-kotlin/pom.xml +++ b/parent-kotlin/pom.xml @@ -3,6 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 parent-kotlin + 1.0.0-SNAPSHOT parent-kotlin pom Parent for all kotlin modules From e7af68c1165e2421cad90c80579253422424345d Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 17:06:07 +0200 Subject: [PATCH 189/304] #BAEL-10229 try to fix the build (mostly, missing relativePath) --- jta/pom.xml | 6 ------ libraries-testing/pom.xml | 13 ------------- .../spring-boot-persistence-h2/pom.xml | 5 ----- spring-boot-properties/pom.xml | 5 ----- spring-ejb/pom.xml | 1 + 5 files changed, 1 insertion(+), 29 deletions(-) diff --git a/jta/pom.xml b/jta/pom.xml index b7e39c66e1..1e86a0144c 100644 --- a/jta/pom.xml +++ b/jta/pom.xml @@ -30,12 +30,6 @@ spring-boot-starter - - org.springframework.boot - spring-boot-starter-test - test - - org.hsqldb hsqldb diff --git a/libraries-testing/pom.xml b/libraries-testing/pom.xml index a2fbed31b2..86c9bd52e1 100644 --- a/libraries-testing/pom.xml +++ b/libraries-testing/pom.xml @@ -125,19 +125,6 @@ ${java-hamcrest.version} test - - - net.serenity-bdd - serenity-core - ${serenity.version} - test - - - org.asciidoctor - asciidoctorj - - - org.asciidoctor asciidoctor-maven-plugin diff --git a/persistence-modules/spring-boot-persistence-h2/pom.xml b/persistence-modules/spring-boot-persistence-h2/pom.xml index bd36a46144..30c727bfc8 100644 --- a/persistence-modules/spring-boot-persistence-h2/pom.xml +++ b/persistence-modules/spring-boot-persistence-h2/pom.xml @@ -26,11 +26,6 @@ com.h2database h2 - - org.springframework.boot - spring-boot-starter-test - test - diff --git a/spring-boot-properties/pom.xml b/spring-boot-properties/pom.xml index ccb9204d96..5e65aadc28 100644 --- a/spring-boot-properties/pom.xml +++ b/spring-boot-properties/pom.xml @@ -32,11 +32,6 @@ org.springframework.cloud spring-cloud-starter - - org.springframework.boot - spring-boot-starter-test - test - com.google.guava guava diff --git a/spring-ejb/pom.xml b/spring-ejb/pom.xml index 126bace9bd..587d626cac 100755 --- a/spring-ejb/pom.xml +++ b/spring-ejb/pom.xml @@ -12,6 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT + ../parent-boot-2 From 10c9a89f5e3767602bfc149b35911dccfcd5c6dd Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 17:14:35 +0200 Subject: [PATCH 190/304] #BAEL-10229 try and fix the build (Kotlin dependencies) --- spring-5-mvc/pom.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spring-5-mvc/pom.xml b/spring-5-mvc/pom.xml index be21db481a..86397f650d 100644 --- a/spring-5-mvc/pom.xml +++ b/spring-5-mvc/pom.xml @@ -46,14 +46,17 @@ org.jetbrains.kotlin kotlin-stdlib-jre8 + ${kotlin.version} org.jetbrains.kotlin kotlin-reflect + ${kotlin.version} com.fasterxml.jackson.module jackson-module-kotlin + ${jackson.version @@ -170,7 +173,8 @@ 2.9.0 - 1.1.2 + 2.9.9 + 1.2.71 com.baeldung.Spring5Application 4.5.8 From 1e92058f408ffb1a4ee525c3d3c0a6eed49f00e3 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 17:18:23 +0200 Subject: [PATCH 191/304] #BAEL-10229 try and fix the build (misspelled Jackson version) --- spring-5-mvc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-5-mvc/pom.xml b/spring-5-mvc/pom.xml index 86397f650d..7417f39c21 100644 --- a/spring-5-mvc/pom.xml +++ b/spring-5-mvc/pom.xml @@ -56,7 +56,7 @@ com.fasterxml.jackson.module jackson-module-kotlin - ${jackson.version + ${jackson.version} From 8c643f007f2cb26b958dfc13f2742306e75185e8 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 17:37:56 +0200 Subject: [PATCH 192/304] #BAEL-10229 try and fix the build (spring-ejb version) --- spring-ejb/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-ejb/pom.xml b/spring-ejb/pom.xml index 587d626cac..12c1d029ff 100755 --- a/spring-ejb/pom.xml +++ b/spring-ejb/pom.xml @@ -4,6 +4,7 @@ 4.0.0 com.baeldung.spring.ejb spring-ejb + 1.0.0-SNAPSHOT spring-ejb pom Spring EJB Tutorial From 0ec65d7bb83f856ed4009c053f8bc1ca1a4e71c3 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 17:50:12 +0200 Subject: [PATCH 193/304] #BAEL-10229 try and fix the build (xml-apis version) --- spring-rest-full/pom.xml | 4 +++- spring-rest-query-language/pom.xml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-rest-full/pom.xml b/spring-rest-full/pom.xml index 5bc3a70ed5..a2736ba03c 100644 --- a/spring-rest-full/pom.xml +++ b/spring-rest-full/pom.xml @@ -125,6 +125,7 @@ xml-apis xml-apis + ${xml-apis.version} org.javassist @@ -284,6 +285,7 @@ 1.4.9 + 1.4.01 19.0 @@ -294,4 +296,4 @@ 1.1.3 - \ No newline at end of file + diff --git a/spring-rest-query-language/pom.xml b/spring-rest-query-language/pom.xml index 7ee658d8ba..293bac9479 100644 --- a/spring-rest-query-language/pom.xml +++ b/spring-rest-query-language/pom.xml @@ -144,6 +144,7 @@ xml-apis xml-apis + ${xml-apis.version} org.javassist @@ -350,6 +351,7 @@ 1.4.9 3.21.0-GA + 1.4.01 19.0 @@ -359,4 +361,4 @@ 1.1.3 - \ No newline at end of file + From 11ddb0d216f7ad5b182f7b2f942d52cf6a9e6c72 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 17:57:56 +0200 Subject: [PATCH 194/304] #BAEL-10229 Restore parent-kotlin's parent (parent-modules) instead of parent-boot-2 --- parent-kotlin/pom.xml | 92 ++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 41 deletions(-) diff --git a/parent-kotlin/pom.xml b/parent-kotlin/pom.xml index 1cacd31e13..84844dbb8b 100644 --- a/parent-kotlin/pom.xml +++ b/parent-kotlin/pom.xml @@ -1,60 +1,70 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 parent-kotlin - 1.0.0-SNAPSHOT parent-kotlin pom Parent for all kotlin modules com.baeldung - parent-boot-2 - 0.0.1-SNAPSHOT - ../parent-boot-2 + parent-modules + 1.0.0-SNAPSHOT - - - jcenter - http://jcenter.bintray.com - - - kotlin-ktor - https://dl.bintray.com/kotlin/ktor/ - - - kotlin-eap - http://dl.bintray.com/kotlin/kotlin-eap - - - spring-milestone - Spring Milestone Repository - http://repo.spring.io/milestone - - - - - - kotlin-eap - http://dl.bintray.com/kotlin/kotlin-eap - - - + + + jcenter + http://jcenter.bintray.com + + + kotlin-ktor + https://dl.bintray.com/kotlin/ktor/ + + + kotlin-eap + http://dl.bintray.com/kotlin/kotlin-eap + + + spring-milestone + Spring Milestone Repository + http://repo.spring.io/milestone + + + + + + kotlin-eap + http://dl.bintray.com/kotlin/kotlin-eap + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.2.0.M4 + pom + import + + + + org.jetbrains.kotlin kotlin-stdlib-jdk8 - - - org.jetbrains.kotlin - kotlin-stdlib - + + + org.jetbrains.kotlin + kotlin-stdlib + org.jetbrains.kotlin kotlin-reflect - + org.jetbrains.kotlinx @@ -103,9 +113,9 @@ ${project.basedir}/src/main/java ${java.version} - - -Xjvm-default=enable - + + -Xjvm-default=enable + From 3fb88700d5c24af5f6cd796a0f8e98cc112b2c80 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 18:06:17 +0200 Subject: [PATCH 195/304] #BAEL-10229 Restore parent-kotlin's parent (parent-modules) instead of parent-boot-2 --- spring-boot-kotlin/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-boot-kotlin/pom.xml b/spring-boot-kotlin/pom.xml index c024f3fda1..ccb1585a75 100644 --- a/spring-boot-kotlin/pom.xml +++ b/spring-boot-kotlin/pom.xml @@ -68,7 +68,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} com.fasterxml.jackson.module From 98e139531374da7d755aa90b9db3484605b8fca6 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Fri, 25 Oct 2019 18:17:49 +0200 Subject: [PATCH 196/304] #BAEL-10229 Fix the build (restore spring-boot-* dependencies of ethereum module) --- ethereum/pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ethereum/pom.xml b/ethereum/pom.xml index d9712e53e0..e0666e49d8 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -13,6 +13,20 @@ + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + From bd32b8e8e8f419a0aa26284b72a34384b287ae6a Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Fri, 25 Oct 2019 22:29:54 +0330 Subject: [PATCH 197/304] Fixed the Broken Test. --- spring-mvc-simple-2/src/main/resources/application.properties | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-mvc-simple-2/src/main/resources/application.properties b/spring-mvc-simple-2/src/main/resources/application.properties index 709574239b..d29338d3d3 100644 --- a/spring-mvc-simple-2/src/main/resources/application.properties +++ b/spring-mvc-simple-2/src/main/resources/application.properties @@ -1 +1,3 @@ -spring.main.allow-bean-definition-overriding=true \ No newline at end of file +spring.main.allow-bean-definition-overriding=true +spring.mail.host=localhost +spring.mail.port=8025 \ No newline at end of file From 6b797bd5a724893abc73a4506323bfac686bdc66 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Fri, 25 Oct 2019 23:06:08 +0330 Subject: [PATCH 198/304] Fixed the Class Not Found Problem --- core-java-modules/core-java-io/pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml index c3c48ba679..3478f71286 100644 --- a/core-java-modules/core-java-io/pom.xml +++ b/core-java-modules/core-java-io/pom.xml @@ -50,6 +50,12 @@ jmimemagic ${jmime-magic.version} + + + com.sun.messaging.mq + fscontext + ${fscontext.version} + @@ -154,7 +160,7 @@ 1.18 0.1.5 3.1.0 - + 4.4.2 \ No newline at end of file From 496fb2c64b5261a167551a8c846dfd3554c4f07e Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Fri, 25 Oct 2019 23:46:30 +0330 Subject: [PATCH 199/304] Moved the User Model to its Package! --- spring-boot/src/main/java/org/baeldung/model/User.java | 2 +- .../src/main/java/org/baeldung/repository/UserRepository.java | 3 +-- .../baeldung/repository/UserRepositoryIntegrationTest.java | 4 +--- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/spring-boot/src/main/java/org/baeldung/model/User.java b/spring-boot/src/main/java/org/baeldung/model/User.java index 049b118b12..eb886338a0 100644 --- a/spring-boot/src/main/java/org/baeldung/model/User.java +++ b/spring-boot/src/main/java/org/baeldung/model/User.java @@ -1,4 +1,4 @@ -package org.baeldung.caching.model; +package org.baeldung.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; diff --git a/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java b/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java index 0113c4c5d4..752664cd5d 100644 --- a/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java +++ b/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java @@ -1,6 +1,6 @@ package org.baeldung.repository; -import org.baeldung.caching.model.User; +import org.baeldung.model.User; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -15,7 +15,6 @@ import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; -import java.util.stream.Stream; @Repository("userRepository") public interface UserRepository extends JpaRepository { diff --git a/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java index 54ce3b4bf3..ea7f118967 100644 --- a/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java +++ b/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java @@ -1,19 +1,17 @@ package org.baeldung.repository; import org.baeldung.boot.config.H2JpaConfig; -import org.baeldung.caching.model.User; +import org.baeldung.model.User; import org.junit.After; 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.transaction.annotation.Transactional; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; -import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; From 00b553acb73930ad98f074251b419f2ac099a0cd Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sat, 26 Oct 2019 00:02:43 +0330 Subject: [PATCH 200/304] Revert an unwanted file. --- spring-mvc-simple-2/src/main/resources/application.properties | 2 -- 1 file changed, 2 deletions(-) diff --git a/spring-mvc-simple-2/src/main/resources/application.properties b/spring-mvc-simple-2/src/main/resources/application.properties index d29338d3d3..e439ebd851 100644 --- a/spring-mvc-simple-2/src/main/resources/application.properties +++ b/spring-mvc-simple-2/src/main/resources/application.properties @@ -1,3 +1 @@ spring.main.allow-bean-definition-overriding=true -spring.mail.host=localhost -spring.mail.port=8025 \ No newline at end of file From 644d650e8d84efe1185199a4a1e062566e2e62b7 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sat, 26 Oct 2019 00:04:33 +0330 Subject: [PATCH 201/304] Removed the newline. --- spring-mvc-simple-2/src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-mvc-simple-2/src/main/resources/application.properties b/spring-mvc-simple-2/src/main/resources/application.properties index e439ebd851..709574239b 100644 --- a/spring-mvc-simple-2/src/main/resources/application.properties +++ b/spring-mvc-simple-2/src/main/resources/application.properties @@ -1 +1 @@ -spring.main.allow-bean-definition-overriding=true +spring.main.allow-bean-definition-overriding=true \ No newline at end of file From 2c422858c0649e20977342d920e032739207df02 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sat, 26 Oct 2019 07:24:43 +0330 Subject: [PATCH 202/304] Fixed the Unsatisfied Dependency Issue --- spring-mvc-simple-2/src/main/resources/application.properties | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-mvc-simple-2/src/main/resources/application.properties b/spring-mvc-simple-2/src/main/resources/application.properties index 709574239b..d29338d3d3 100644 --- a/spring-mvc-simple-2/src/main/resources/application.properties +++ b/spring-mvc-simple-2/src/main/resources/application.properties @@ -1 +1,3 @@ -spring.main.allow-bean-definition-overriding=true \ No newline at end of file +spring.main.allow-bean-definition-overriding=true +spring.mail.host=localhost +spring.mail.port=8025 \ No newline at end of file From b2cbfdc6865c928cea6bc42bab14fd0b9724e16d Mon Sep 17 00:00:00 2001 From: Josh Cummings Date: Sat, 26 Oct 2019 09:20:04 -0600 Subject: [PATCH 203/304] Restore sun.tools.version properti --- core-java-modules/core-java/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 800649c163..7f2694b346 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -455,5 +455,6 @@ 3.21.0-GA + 1.8.0 From 029084ae6c111064cc97adcbd4777b46726dcea4 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sat, 26 Oct 2019 20:52:13 +0530 Subject: [PATCH 204/304] [BAEL-18779] - Make sure the tutorials build doesn't generate any un-committed or un-ignored artifacts --- .gitignore | 8 +- apache-fop/src/test/resources/input.xml | 1674 ----------------- .../src/test/resources/output_herold.pdf | Bin 34733 -> 0 bytes .../src/test/resources/output_html2fo.pdf | Bin 14642 -> 0 bytes .../src/test/resources/output_jtidy.pdf | Bin 25904 -> 0 bytes 5 files changed, 7 insertions(+), 1675 deletions(-) delete mode 100644 apache-fop/src/test/resources/input.xml delete mode 100644 apache-fop/src/test/resources/output_herold.pdf delete mode 100644 apache-fop/src/test/resources/output_html2fo.pdf delete mode 100644 apache-fop/src/test/resources/output_jtidy.pdf diff --git a/.gitignore b/.gitignore index 90daf38dee..349efbcb67 100644 --- a/.gitignore +++ b/.gitignore @@ -84,4 +84,10 @@ software-security/sql-injection-samples/derby.log spring-soap/src/main/java/com/baeldung/springsoap/gen/ /report-*.json transaction.log -*-shell.log \ No newline at end of file +*-shell.log + +apache-cxf/cxf-aegis/baeldung.xml +apache-fop/src/test/resources/input.xml +apache-fop/src/test/resources/output_herold.pdf +apache-fop/src/test/resources/output_html2fo.pdf +apache-fop/src/test/resources/output_jtidy.pdf \ No newline at end of file diff --git a/apache-fop/src/test/resources/input.xml b/apache-fop/src/test/resources/input.xml deleted file mode 100644 index a8266f3f5c..0000000000 --- a/apache-fop/src/test/resources/input.xml +++ /dev/null @@ -1,1674 +0,0 @@ - -
- - Bootstrap a Web Application with Spring 4 - - - - - - Return to Content - - - - - - Contents - - - Table of Contents - - - 1. Overview - - - 2. The Maven pom.xml - - - 3. The Java based Web Configuration - - - 4. Conclusion - - - If you're new here, you may want to get my "REST APIs with Spring" eBook. Thanks for visiting! - - - -
- <anchor xml:id="Table_of_Contents"/><emphasis role="bold">Table of Contents</emphasis> - - - 1. Overview - - - 2. The Maven pom.xml - - -     2.1. Justification of the cglib dependency - - -     2.2. The cglib dependency in Spring 3.2 and beyond - - - 3. The Java based web configuration - - -    3.1. The web.xml - - - 4. Conclusion - - -
- <anchor xml:id="dbdoclet.1_Overview"/><emphasis role="bold">1. Overview</emphasis> - The tutorial illustrates how to Bootstrap a Web Application with Spring and also discusses how to make the jump from XML to Java without having to completely migrate the entire XML configuration. -
-
- <anchor xml:id="dbdoclet.2_The_Maven_pomxml"/><emphasis role="bold">2. The Maven pom.xml</emphasis> - <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</groupId> - <artifactId>rest</artifactId> - <version>0.0.1-SNAPSHOT</version> - <packaging>war</packaging> - - <dependencies> - - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-webmvc</artifactId> - <version>${spring.version}</version> - <exclusions> - <exclusion> - <artifactId>commons-logging</artifactId> - <groupId>commons-logging</groupId> - </exclusion> - </exclusions> - </dependency> - - </dependencies> - - <build> - <finalName>rest</finalName> - - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> - <configuration> - <source>1.6</source> - <target>1.6</target> - <encoding>UTF-8</encoding> - </configuration> - </plugin> - </plugins> - </build> - - <properties> - <spring.version>4.0.5.RELEASE</spring.version> - </properties> - -</project> -
- <emphasis role="bold">2.1. The cglib dependency before Spring 3.2</emphasis> - You may wonder why cglib is a dependency – it turns out there is a valid reason to include it – the entire configuration cannot function without it. If removed, Spring will throw: - Caused by: java.lang.IllegalStateException: CGLIB is required to process @Configuration classes. Either add CGLIB to the classpath or remove the following @Configuration bean definitions - The reason this happens is explained by the way Spring deals with @Configuration classes. These classes are effectively beans, and because of this they need to be aware of the Context, and respect scope and other bean semantics. This is achieved by dynamically creating a cglib proxy with this awareness for each @Configuration class, hence the cglib dependency. - Also, because of this, there are a few restrictions for Configuration annotated classes: - - - Configuration classes should not be final - - - They should have a constructor with no arguments - - -
-
- <emphasis role="bold">2.2. The cglib dependency in Spring 3.2 and beyond</emphasis> - Starting with Spring 3.2, it is no longer necessary to add cglib as an explicit dependency. This is because Spring is in now inlining cglib – which will ensure that all class based proxying functionality will work out of the box with Spring 3.2. - The new cglib code is placed under the Spring package: org.springframework.cglib (replacing the original net.sf.cglib). The reason for the package change is to avoid conflicts with any cglib versions already existing on the classpath. - Also, the new cglib 3.0 is now used, upgraded from the older 2.2 dependency (see this JIRA issue for more details). - Finally, now that Spring 4.0 is out in the wild, changes like this one (removing the cglib dependency) are to be expected with Java 8 just around the corner – you can watch this Spring Jira to keep track of the Spring support, and the Java 8 Resources page to keep tabs on the that. -
-
-
- <anchor xml:id="dbdoclet.3_The_Java_based_Web_Configuration"/><emphasis role="bold">3. The Java based Web Configuration</emphasis> - @Configuration -@ImportResource( { "classpath*:/rest_config.xml" } ) -@ComponentScan( basePackages = "org.rest" ) -@PropertySource({ "classpath:rest.properties", "classpath:web.properties" }) -public class AppConfig{ - - @Bean -   public static PropertySourcesPlaceholderConfigurer properties() { -   return new PropertySourcesPlaceholderConfigurer(); -   } -} - First, the @Configuration annotation – this is the main artifact used by the Java based Spring configuration; it is itself meta-annotated with @Component, which makes the annotated classes standard beans and as such, also candidates for component scanning. The main purpose of @Configuration classes is to be sources of bean definitions for the Spring IoC Container. For a more detailed description, see the official docs. - Then, @ImportResource is used to import the existing XML based Spring configuration. This may be configuration which is still being migrated from XML to Java, or simply legacy configuration that you wish to keep. Either way, importing it into the Container is essential for a successful migration, allowing small steps without to much risk. The equivalent XML annotation that is replaced is: - <import resource=”classpath*:/rest_config.xml” /> - Moving on to @ComponentScan – this configures the component scanning directive, effectively replacing the XML: - <context:component-scan base-package="org.rest" /> - As of Spring 3.1, the @Configuration are excluded from classpath scanning by default – see this JIRA issue. Before Spring 3.1 though, these classes should have been excluded explicitly: - excludeFilters = { @ComponentScan.Filter( Configuration.class ) } - The @Configuration classes should not be autodiscovered because they are already specified and used by the Container – allowing them to be rediscovered and introduced into the Spring context will result in the following error: - Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘webConfig’ for bean class [org.rest.spring.AppConfig] conflicts with existing, non-compatible bean definition of same name and class [org.rest.spring.AppConfig] - And finally, using the @Bean annotation to configure the properties support – PropertySourcesPlaceholderConfigurer is initialized in a @Bean annotated method, indicating it will produce a Spring bean managed by the Container. This new configuration has replaced the following XML: - <context:property-placeholder -location="classpath:persistence.properties, classpath:web.properties" -ignore-unresolvable="true"/> - For a more in depth discussion on why it was necessary to manually register the PropertySourcesPlaceholderConfigurer bean, see the Properties with Spring Tutorial. -
- <emphasis role="bold">3.1. The web.xml</emphasis> - <?xml version="1.0" encoding="UTF-8"?> -<web-app xmlns=" - http://java.sun.com/xml/ns/javaee" -     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" -     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -    xsi:schemaLocation=" - http://java.sun.com/xml/ns/javaee - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" -    id="rest" version="3.0"> - - <context-param> - <param-name>contextClass</param-name> - <param-value> - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - </param-value> - </context-param> - <context-param> - <param-name>contextConfigLocation</param-name> - <param-value>org.rest.spring.root</param-value> - </context-param> - <listener> - <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> - </listener> - - <servlet> - <servlet-name>rest</servlet-name> - <servlet-class> - org.springframework.web.servlet.DispatcherServlet - </servlet-class> - <init-param> - <param-name>contextClass</param-name> - <param-value> - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - </param-value> - </init-param> - <init-param> - <param-name>contextConfigLocation</param-name> - <param-value>org.rest.spring.rest</param-value> - </init-param> - <load-on-startup>1</load-on-startup> - </servlet> - <servlet-mapping> - <servlet-name>rest</servlet-name> - <url-pattern>/api/*</url-pattern> - </servlet-mapping> - - <welcome-file-list> - <welcome-file /> - </welcome-file-list> - -</web-app> - First, the root context is defined and configured to use AnnotationConfigWebApplicationContext instead of the default XmlWebApplicationContext. The newer AnnotationConfigWebApplicationContext accepts @Configuration annotated classes as input for the Container configuration and is needed in order to set up the Java based context. Unlike XmlWebApplicationContext, it assumes no default configuration class locations, so the “contextConfigLocation”init-param for the Servlet must be set. This will point to the java package where the @Configuration classes are located; the fully qualified name(s) of the classes are also supported. - Next, the DispatcherServlet is configured to use the same kind of context, with the only difference that it’s loading configuration classes out of a different package. - Other than this, the web.xml doesn’t really change from a XML to a Java based configuration. -
-
-
- <anchor xml:id="dbdoclet.4_Conclusion"/><emphasis role="bold">4. Conclusion</emphasis> - The presented approach allows for a smooth migration of the Spring configuration from XML to Java, mixing the old and the new. This is important for older projects, which may have a lot of XML based configuration that cannot be migrated all at once. - This way, in a migration, the XML beans can be ported in small increments. - In the next article on REST with Spring, I cover setting up MVC in the project, configuration of the HTTP status codes, payload marshalling and content negotiation. - The implementation of this Bootstrap a Spring Web App Tutorial can be downloaded as a working sample project. - This is an Eclipse based project, so it should be easy to import and run as it is. - -   - - - - - - - - - java, Spring - - - - - - - - - - - © 2014 Baeldung. All Rights Reserved. - - - - - - - -
-
-
- -
- - Build a REST API with Spring 4 and Java Config - - - - - - Return to Content - - - - - - Contents - - - Table of Contents - - - 1. Overview - - - 2. Understanding REST in Spring - - - 3. The Java configuration - - - 4. Testing the Spring context - - - 5. The Controller - - - 6. Mapping the HTTP response codes - - - 7. Additional Maven dependencies - - - 8. Conclusion - - - If you're new here, you may want to get my "REST APIs with Spring" eBook. Thanks for visiting! - - -   - -
- <anchor xml:id="Table_of_Contents"/><emphasis role="bold">Table of Contents</emphasis> - - - 1. Overview - - - 2. Understanding REST in Spring - - - 3. The Java configuration - - - 4. Testing the Spring context - - - 5. The Controller - - - 6. Mapping the HTTP response codes - - -     6.1. Unmapped requests - - -     6.2. Valid, mapped requests - - -     6.3. Client error - - -     6.4. Using @ExceptionHandler - - - 7. Additional Maven dependencies - - - 8. Conclusion - - -
- <anchor xml:id="dbdoclet.1_Overview"/><emphasis role="bold">1. Overview</emphasis> - This article shows how to set up REST in Spring – the Controller and HTTP response codes, configuration of payload marshalling and content negotiation. -
-
- <anchor xml:id="dbdoclet.2_Understanding_REST_in_Spring"/><emphasis role="bold">2. Understanding REST in Spring</emphasis> - The Spring framework supports 2 ways of creating RESTful services: - - - using MVC with ModelAndView - - - using HTTP message converters - - - The ModelAndView approach is older and much better documented, but also more verbose and configuration heavy. It tries to shoehorn the REST paradigm into the old model, which is not without problems. The Spring team understood this and provided first-class REST support starting with Spring 3.0. - The new approach, based on HttpMessageConverterand annotations, is much more lightweight and easy to implement. Configuration is minimal and it provides sensible defaults for what you would expect from a RESTful service. It is however newer and a a bit on the light side concerning documentation; what’s , the reference doesn’t go out of it’s way to make the distinction and the tradeoffs between the two approaches as clear as they should be. Nevertheless, this is the way RESTful services should be build after Spring 3.0. -
-
- <anchor xml:id="dbdoclet.3_The_Java_configuration"/><emphasis role="bold">3. The Java configuration</emphasis> - - @Configuration -@EnableWebMvc -public class WebConfig{ - // -} - The new @EnableWebMvc annotation does a number of useful things – specifically, in the case of REST, it detect the existence of Jackson and JAXB 2 on the classpath and automatically creates and registers default JSON and XML converters. The functionality of the annotation is equivalent to the XML version: - <mvc:annotation-driven /> - This is a shortcut, and though it may be useful in many situations, it’s not perfect. When more complex configuration is needed, remove the annotation and extend WebMvcConfigurationSupport directly. -
-
- <anchor xml:id="dbdoclet.4_Testing_the_Spring_context"/><emphasis role="bold">4. Testing the Spring context</emphasis> - Starting with Spring 3.1, we get first-class testing support for @Configuration classes: - @RunWith( SpringJUnit4ClassRunner.class ) -@ContextConfiguration( classes = { ApplicationConfig.class, PersistenceConfig.class }, - loader = AnnotationConfigContextLoader.class ) -public class SpringTest{ - - @Test - public void whenSpringContextIsInstantiated_thenNoExceptions(){ - // When - } -} - The Java configuration classes are simply specified with the @ContextConfiguration annotation and the new AnnotationConfigContextLoader loads the bean definitions from the @Configuration classes. - Notice that the WebConfig configuration class was not included in the test because it needs to run in a Servlet context, which is not provided. -
-
- <anchor xml:id="dbdoclet.5_The_Controller"/><emphasis role="bold">5. The Controller</emphasis> - The @Controller is the central artifact in the entire Web Tier of the RESTful API. For the purpose of this post, the controller is modeling a simple REST resource – Foo: - @Controller -@RequestMapping( value = "/foos" ) -class FooController{ - - @Autowired - IFooService service; - - @RequestMapping( method = RequestMethod.GET ) - @ResponseBody - public List< Foo > findAll(){ - return service.findAll(); - } - - @RequestMapping( value = "/{id}", method = RequestMethod.GET ) - @ResponseBody - public Foo findOne( @PathVariable( "id" ) Long id ){ - return RestPreconditions.checkFound( service.findOne( id ) ); - } - - @RequestMapping( method = RequestMethod.POST ) - @ResponseStatus( HttpStatus.CREATED ) - @ResponseBody - public Long create( @RequestBody Foo resource ){ - Preconditions.checkNotNull( resource ); - return service.create( resource ); - } - - @RequestMapping( value = "/{id}", method = RequestMethod.PUT ) - @ResponseStatus( HttpStatus.OK ) - public void update( @PathVariable( "id" ) Long id, @RequestBody Foo resource ){ - Preconditions.checkNotNull( resource ); - RestPreconditions.checkNotNull( service.getById( resource.getId() ) ); - service.update( resource ); - } - - @RequestMapping( value = "/{id}", method = RequestMethod.DELETE ) - @ResponseStatus( HttpStatus.OK ) - public void delete( @PathVariable( "id" ) Long id ){ - service.deleteById( id ); - } - -} - You may have noticed I’m using a very simple, guava style RestPreconditions utility: - public class RestPreconditions { - public static <T> T checkFound(final T resource) { - if (resource == null) { - throw new MyResourceNotFoundException(); - } - return resource; - } -} - The Controller implementation is non-public – this is because it doesn’t need to be. Usually the controller is the last in the chain of dependencies – it receives HTTP requests from the Spring front controller (the DispathcerServlet) and simply delegate them forward to a service layer. If there is no use case where the controller has to be injected or manipulated through a direct reference, then I prefer not to declare it as public. - The request mappings are straightforward – as with any controller, the actual value of the mapping as well as the HTTP method are used to determine the target method for the request. @RequestBody will bind the parameters of the method to the body of the HTTP request, whereas @ResponseBody does the same for the response and return type. They also ensure that the resource will be marshalled and unmarshalled using the correct HTTP converter. Content negotiation will take place to choose which one of the active converters will be used, based mostly on the Accept header, although other HTTP headers may be used to determine the representation as well. -
-
- <anchor xml:id="dbdoclet.6_Mapping_the_HTTP_response_codes"/><emphasis role="bold">6. Mapping the HTTP response codes</emphasis> - The status codes of the HTTP response are one of the most important parts of the REST service, and the subject can quickly become very complex. Getting these right can be what makes or breaks the service. -
- <emphasis role="bold">6.1. Unmapped requests</emphasis> - If Spring MVC receives a request which doesn’t have a mapping, it considers the request not to be allowed and returns a 405 METHOD NOT ALLOWED back to the client. It is also good practice to include the Allow HTTP header when returning a 405 to the client, in order to specify which operations are allowed. This is the standard behavior of Spring MVC and does not require any additional configuration. -
-
- <emphasis role="bold">6.2. Valid, mapped requests</emphasis> - For any request that does have a mapping, Spring MVC considers the request valid and responds with 200 OK if no other status code is specified otherwise. It is because of this that controller declares different @ResponseStatus for the create, update and delete actions but not for get, which should indeed return the default 200 OK. -
-
- <emphasis role="bold">6.3. Client error</emphasis> - In case of a client error, custom exceptions are defined and mapped to the appropriate error codes. Simply throwing these exceptions from any of the layers of the web tier will ensure Spring maps the corresponding status code on the HTTP response. - @ResponseStatus( value = HttpStatus.BAD_REQUEST ) -public class BadRequestException extends RuntimeException{ - // -} -@ResponseStatus( value = HttpStatus.NOT_FOUND ) -public class ResourceNotFoundException extends RuntimeException{ - // -} - These exceptions are part of the REST API and, as such, should only be used in the appropriate layers corresponding to REST; if for instance a DAO/DAL layer exist, it should not use the exceptions directly. Note also that these are not checked exceptions but runtime exceptions – in line with Spring practices and idioms. -
-
- <emphasis role="bold">6.4. Using @ExceptionHandler</emphasis> - Another option to map custom exceptions on specific status codes is to use the @ExceptionHandler annotation in the controller. The problem with that approach is that the annotation only applies to the controller in which it is defined, not to the entire Spring Container, which means that it needs to be declared in each controller individually. This quickly becomes cumbersome, especially in more complex applications which many controllers. There are a few JIRA issues opened with Spring at this time to handle this and other related limitations: SPR-8124, SPR-7278, SPR-8406. -
-
-
- <anchor xml:id="dbdoclet.7_Additional_Maven_dependencies"/><emphasis role="bold">7. Additional Maven dependencies</emphasis><emphasis role="bold"></emphasis> - In addition to the spring-webmvc dependency required for the standard web application, we’ll need to set up content marshalling and unmarshalling for the REST API: - <dependencies> - <dependency> -   <groupId>com.fasterxml.jackson.core</groupId> -    <artifactId>jackson-databind</artifactId> -   <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>javax.xml.bind</groupId> - <artifactId>jaxb-api</artifactId> - <version>${jaxb-api.version}</version> - <scope>runtime</scope> - </dependency> -</dependencies> - -<properties> - <jackson.version>2.4.0</jackson.version> - <jaxb-api.version>2.2.11</jaxb-api.version> -</properties> - These are the libraries used to convert the representation of the REST resource to either JSON or XML. -
-
- <anchor xml:id="dbdoclet.8_Conclusion"/><emphasis role="bold">8. Conclusion</emphasis> - This tutorial illustrated how to implement and configure a REST Service using Spring 4 and Java based configuration, discussing HTTP response codes, basic Content Negotiation and marshaling. - In the next articles of the series I will focus on Discoverability of the API, advanced content negotiation and working with additional representations of a Resource. - The implementation of this Spring REST API Tutorial can be downloaded as a working sample project. - This is an Eclipse based project, so it should be easy to import and run as it is. - - - - - - - - - - java, REST, Spring, testing - - - - - - - - - - - © 2014 Baeldung. All Rights Reserved. - - - - - - - - - -
-
-
- -
- - Spring Security for a REST API - - - - - - Return to Content - - - - - - Contents - - - Table of Contents - - - 1. Overview - - - 2. Spring Security in the web.xml - - - 3. The Security Configuration - - - 4. Maven and other trouble - - - 5. Conclusion - - - - - -
- <anchor xml:id="Table_of_Contents"/><emphasis role="bold">Table of Contents</emphasis> - - - 1. Overview - - - 2. Introducing Spring Security in the web.xml - - - 3. The Security Configuration - - -     3.1. The basics - - -     3.2. The Entry Point - - -     3.3. The Login - - -     3.4. Authentication should return 200 instead of 301 - - -     3.5. Failed Authentication should return 401 instead of 302 - - -     3.6. The Authentication Manager and Provider - - -     3.7. Finally – Authentication against the running REST Service - - - 4. Maven and other trouble - - - 5. Conclusion - - -
- <anchor xml:id="dbdoclet.1_Overview"/><emphasis role="bold">1. Overview</emphasis> - This tutorial shows how to Secure a REST Service using Spring and Spring Security 3.1 with Java based configuration. The article will focus on how to set up the Security Configuration specifically for the REST API using a Login and Cookie approach. -
-
- <anchor xml:id="dbdoclet.2_Spring_Security_in_the_webxml"/><emphasis role="bold">2. Spring Security in the web.xml</emphasis> - The architecture of Spring Security is based entirely on Servlet Filters and, as such, comes before Spring MVC in regards to the processing of HTTP requests. Keeping this in mind, to begin with, a filter needs to be declared in the web.xml of the application: - <filter> - <filter-name>springSecurityFilterChain</filter-name> - <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> -</filter> -<filter-mapping> - <filter-name>springSecurityFilterChain</filter-name> - <url-pattern>/*</url-pattern> -</filter-mapping> - The filter must necessarily be named ‘springSecurityFilterChain’  to match the default bean created by Spring Security in the container. - Note that the defined filter is not the actual class implementing the security logic but a DelegatingFilterProxy with the purpose of delegating the Filter’s methods to an internal bean. This is done so that the target bean can still benefit from the Spring context lifecycle and flexibility. - The URL pattern used to configure the Filter is /* even though the entire web service is mapped to /api/* so that the security configuration has the option to secure other possible mappings as well, if required. -
-
- <anchor xml:id="dbdoclet.3_The_Security_Configuration"/><emphasis role="bold">3. The Security Configuration</emphasis> - <?xml version="1.0" encoding="UTF-8"?> -<beans:beans - xmlns="http://www.springframework.org/schema/security" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:beans="http://www.springframework.org/schema/beans" - xmlns:sec="http://www.springframework.org/schema/security" - xsi:schemaLocation=" - http://www.springframework.org/schema/security - http://www.springframework.org/schema/security/spring-security-3.2.xsd - http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> - - <http entry-point-ref="restAuthenticationEntryPoint"> - <intercept-url pattern="/api/admin/**" access="ROLE_ADMIN"/> - - <form-login - authentication-success-handler-ref="mySuccessHandler" - authentication-failure-handler-ref="myFailureHandler" - /> - - <logout /> - </http> - - <beans:bean id="mySuccessHandler" - class="org.rest.security.MySavedRequestAwareAuthenticationSuccessHandler"/> - <beans:bean id="myFailureHandler" - class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"/> - - <authentication-manager alias="authenticationManager"> - <authentication-provider> - <user-service> - <user name="temporary" password="temporary" authorities="ROLE_ADMIN"/> - <user name="user" password="user" authorities="ROLE_USER"/> - </user-service> - </authentication-provider> - </authentication-manager> - -</beans:beans> - Most of the configuration is done using the security namespace – for this to be enabled, the schema locations must be defined and pointed to the correct 3.1 or 3.2 XSD versions. The namespace is designed so that it expresses the common uses of Spring Security while still providing hooks raw beans to accommodate more advanced scenarios. >> Signup for my upcoming Video Course on Building a REST API with Spring 4 -
- <emphasis role="bold">3.1. The <http> element</emphasis> - The <http> element is the main container element for HTTP security configuration. In the current implementation, it only secured a single mapping: /api/admin/**. Note that the mapping is relative to the root context of the web application, not to the rest Servlet; this is because the entire security configuration lives in the root Spring context and not in the child context of the Servlet. -
-
- <emphasis role="bold">3.2. The Entry Point</emphasis> - In a standard web application, the authentication process may be automatically triggered when the client tries to access a secured resource without being authenticated – this is usually done by redirecting to a login page so that the user can enter credentials. However, for a REST Web Service this behavior doesn’t make much sense – Authentication should only be done by a request to the correct URI and all other requests should simply fail with a 401 UNAUTHORIZED status code if the user is not authenticated. - Spring Security handles this automatic triggering of the authentication process with the concept of an Entry Point – this is a required part of the configuration, and can be injected via the entry-point-ref attribute of the <http> element. Keeping in mind that this functionality doesn’t make sense in the context of the REST Service, the new custom entry point is defined to simply return 401 whenever it is triggered: - @Component( "restAuthenticationEntryPoint" ) -public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint{ - - @Override - public void commence( HttpServletRequest request, HttpServletResponse response, - AuthenticationException authException ) throws IOException{ - response.sendError( HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized" ); - } -} - A quick sidenote here is that the 401 is sent without the WWW-Authenticate header, as required by the HTTP Spec – we can of course set the value manually if we need to. -
-
- <emphasis role="bold">3.3. The Login Form for REST</emphasis> - There are multiple ways to do Authentication for a REST API – one of the default Spring Security provides is Form Login – which uses an authentication processing filter – org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter. - The <form-login> element will create this filter and will also allow us to set our custom authentication success handler on it. This can also be done manually by using the <custom-filter> element to register a filter at the position FORM_LOGIN_FILTER – but the namespace support is flexible enough. - Note that for a standard web application, the auto-config attribute of the <http> element is shorthand syntax for some useful security configuration. While this may be appropriate for some very simple configurations, it doesn’t fit and should not be used for a REST API. -
-
- <emphasis role="bold">3.4. Authentication should return 200 instead of 301</emphasis> - By default, form login will answer a successful authentication request with a 301 MOVED PERMANENTLY status code; this makes sense in the context of an actual login form which needs to redirect after login. For a RESTful web service however, the desired response for a successful authentication should be 200 OK. - This is done by injecting a custom authentication success handler in the form login filter, to replace the default one. The new handler implements the exact same login as the default org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler with one notable difference – the redirect logic is removed: - public class MySavedRequestAwareAuthenticationSuccessHandler - extends SimpleUrlAuthenticationSuccessHandler { - - private RequestCache requestCache = new HttpSessionRequestCache(); - - @Override - public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, - Authentication authentication) throws ServletException, IOException { - SavedRequest savedRequest = requestCache.getRequest(request, response); - - if (savedRequest == null) { - clearAuthenticationAttributes(request); - return; - } - String targetUrlParam = getTargetUrlParameter(); - if (isAlwaysUseDefaultTargetUrl() || - (targetUrlParam != null && - StringUtils.hasText(request.getParameter(targetUrlParam)))) { - requestCache.removeRequest(request, response); - clearAuthenticationAttributes(request); - return; - } - - clearAuthenticationAttributes(request); - } - - public void setRequestCache(RequestCache requestCache) { - this.requestCache = requestCache; - } -} -
-
- <emphasis role="bold">3.5. Failed Authentication should return 401 instead of 302</emphasis> - Similarly – we configured the authentication failure handler – same way we did with the success handler. - Luckily – in this case, we don’t need to actually define a new class for this handler – the standard implementation – SimpleUrlAuthenticationFailureHandler – does just fine. - The only difference is that – now that we’re defining this explicitly in our XML config – it’s not going to get a default defaultFailureUrl from Spring – and so it won’t redirect. -
-
- <emphasis role="bold">3.6. The Authentication Manager and Provider</emphasis> - The authentication process uses an in-memory provider to perform authentication – this is meant to simplify the configuration as a production implementation of these artifacts is outside the scope of this post. -
-
- <emphasis role="bold">3.7 Finally – Authentication against the running REST Service</emphasis> - Now let’s see how we can authenticate against the REST API – the URL for login is /j_spring_security_check – and a simple curl command performing login would be: - curl -i -X POST -d j_username=user -d j_password=userPass -http://localhost:8080/spring-security-rest/j_spring_security_check - This request will return the Cookie which will then be used by any subsequent request against the REST Service. - We can use curl to authentication and store the cookie it receives in a file: - curl -i -X POST -d j_username=user -d j_password=userPass -c /opt/cookies.txt -http://localhost:8080/spring-security-rest/j_spring_security_check - Then we can use the cookie from the file to do further authenticated requests: - curl -i --header "Accept:application/json" -X GET -b /opt/cookies.txt -http://localhost:8080/spring-security-rest/api/foos - This authenticated request will correctly result in a 200 OK: - HTTP/1.1 200 OK -Server: Apache-Coyote/1.1 -Content-Type: application/json;charset=UTF-8 -Transfer-Encoding: chunked -Date: Wed, 24 Jul 2013 20:31:13 GMT - -[{"id":0,"name":"JbidXc"}] -
-
-
- <anchor xml:id="dbdoclet.4_Maven_and_other_trouble"/><emphasis role="bold">4. Maven and other trouble</emphasis> - The Spring core dependencies necessary for a web application and for the REST Service have been discussed in detail. For security, we’ll need to add: spring-security-web and spring-security-config – all of these have also been covered in the Maven for Spring Security tutorial. - It’s worth paying close attention to the way Maven will resolve the older Spring dependencies – the resolution strategy will start causing problems once the security artifacts are added to the pom. To address this problem, some of the core dependencies will need to be overridden in order to keep them at the right version. -
-
- <anchor xml:id="dbdoclet.5_Conclusion"/><emphasis role="bold">5. Conclusion</emphasis> - This post covered the basic security configuration and implementation for a RESTful Service using Spring Security 3.1, discussing the web.xml, the security configuration, the HTTP status codes for the authentication process and the Maven resolution of the security artifacts. - The implementation of this Spring Security REST Tutorial can be downloaded as a working sample project.This is an Eclipse based project, so it should be easy to import and run as it is. - - - - - - - - - - REST, security, Spring - - - - - - - - - - - © 2014 Baeldung. All Rights Reserved. - - - - - - - - - -
-
-
- -
- - Spring Security Basic Authentication - - - - - - Return to Content - - - - - - Contents - - - 1. Overview - - - 2. The Spring Security Configuration - - - 3. Consuming The Secured Application - - - 4. Further Configuration – The Entry Point - - - 5. The Maven Dependencies - - - 6. Conclusion - - - If you're new here, you may want to get my "REST APIs with Spring" eBook. Thanks for visiting! - - - -
- <anchor xml:id="dbdoclet.1_Overview"/><emphasis role="bold">1. Overview</emphasis> - This tutorial shows how to set up, configure and customize Basic Authentication with Spring. We’re going to built on top of the simple Spring MVC example, and secure the UI of the MVC application with the Basic Auth mechanism provided by Spring Security. -
- <anchor xml:id="dbdoclet.2_The_Spring_Security_Configuration"/><emphasis role="bold">2. The Spring Security Configuration</emphasis> - The Configuration for Spring Security is still XML: - <?xml version="1.0" encoding="UTF-8"?> -<beans:beans xmlns="http://www.springframework.org/schema/security" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:beans="http://www.springframework.org/schema/beans" - xsi:schemaLocation=" - http://www.springframework.org/schema/security - http://www.springframework.org/schema/security/spring-security-3.1.xsd - http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> - - <http use-expressions="true"> - <intercept-url pattern="/**" access="isAuthenticated()" /> - - <http-basic /> - </http> - - <authentication-manager> - <authentication-provider> - <user-service> - <user name="user1" password="user1Pass" authorities="ROLE_USER" /> - </user-service> - </authentication-provider> - </authentication-manager> - -</beans:beans> - This is one of the last pieces of configuration in Spring that still need XML – Java Configuration for Spring Security is still a work in progress. - What is relevant here is the <http-basic> element inside the main <http> element of the configuration – this is enough to enable Basic Authentication for the entire application. The Authentication Manager is not the focus of this tutorial, so we are using an in memory manager with the user and password defined in plaintext. - The web.xml of the web application enabling Spring Security has already been discussed in the Spring Logout tutorial. -
-
- <anchor xml:id="dbdoclet.3_Consuming_The_Secured_Application"/><emphasis role="bold">3. Consuming The Secured Application</emphasis> - The curl command is our go to tool for consuming the secured application. - First, let’s try to request the /homepage.html without providing any security credentials: - curl -i http://localhost:8080/spring-security-mvc-basic-auth/homepage.html - We get back the expected 401 Unauthorized and the Authentication Challenge: - HTTP/1.1 401 Unauthorized -Server: Apache-Coyote/1.1 -Set-Cookie: JSESSIONID=E5A8D3C16B65A0A007CFAACAEEE6916B; Path=/spring-security-mvc-basic-auth/; HttpOnly -WWW-Authenticate: Basic realm="Spring Security Application" -Content-Type: text/html;charset=utf-8 -Content-Length: 1061 -Date: Wed, 29 May 2013 15:14:08 GMT - The browser would interpret this challenge and prompt us for credentials with a simple dialog, but since we’re using curl, this isn’t the case. - Now, let’s request the same resource – the homepage – but provide the credentials to access it as well: - curl -i --user user1:user1Pass http://localhost:8080/spring-security-mvc-basic-auth/homepage.html - Now, the response from the server is 200 OK along with a Cookie: - HTTP/1.1 200 OK -Server: Apache-Coyote/1.1 -Set-Cookie: JSESSIONID=301225C7AE7C74B0892887389996785D; Path=/spring-security-mvc-basic-auth/; HttpOnly -Content-Type: text/html;charset=ISO-8859-1 -Content-Language: en-US -Content-Length: 90 -Date: Wed, 29 May 2013 15:19:38 GMT - From the browser, the application can be consumed normally – the only difference is that a login page is no longer a hard requirement since all browsers support Basic Authentication and use a dialog to prompt the user for credentials. -
-
- <anchor xml:id="dbdoclet.4_Further_Configuration_8211_The_Entry_Point"/><emphasis role="bold">4. Further Configuration – </emphasis><emphasis role="bold">The Entry Point</emphasis> - By default, the BasicAuthenticationEntryPoint provisioned by Spring Security returns a full html page for a 401 Unauthorized response back to the client. This html representation of the error renders well in a browser, but it not well suited for other scenarios, such as a REST API where a json representation may be preferred. - The namespace is flexible enough for this new requirement as well – to address this – the entry point can be overridden: - <http-basic entry-point-ref="myBasicAuthenticationEntryPoint" /> - The new entry point is defined as a standard bean: - @Component -public class MyBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint { - - @Override - public void commence - (HttpServletRequest request, HttpServletResponse response, AuthenticationException authEx) - throws IOException, ServletException { - response.addHeader("WWW-Authenticate", "Basic realm=\"" + getRealmName() + "\""); - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - PrintWriter writer = response.getWriter(); - writer.println("HTTP Status 401 - " + authEx.getMessage()); - } - - @Override - public void afterPropertiesSet() throws Exception { - setRealmName("Baeldung"); - super.afterPropertiesSet(); - } -} - By writing directly to the HTTP Response we now have full control over the format of the response body. -
-
- <anchor xml:id="dbdoclet.5_The_Maven_Dependencies"/><emphasis role="bold">5. The Maven Dependencies</emphasis> - The Maven dependencies for Spring Security have been discussed before in the Spring Security with Maven article – we will need both spring-security-web and spring-security-config available at runtime. -
-
- <anchor xml:id="dbdoclet.6_Conclusion"/><emphasis role="bold">6. Conclusion</emphasis> - In this example we secured an MVC application with Spring Security and Basic Authentication. We discussed the XML configuration and we consumed the application with simple curl commands. Finally took control of the exact error message format – moving from the standard HTML error page to a custom text or json format. - The implementation of this Spring tutorial can be found in the github project – this is an Eclipse based project, so it should be easy to import and run as it is. When the project runs locally, the sample html can be accessed at: - http://localhost:8080/spring-security-mvc-basic-auth/homepage.html - - - - - - - - - - security, Spring - - - - - - - - - - - © 2014 Baeldung. All Rights Reserved. - - - - - - - -
-
-
- -
- - Spring Security Digest Authentication - - - - - - Return to Content - - - - - - Contents - - - 1. Overview - - - 2. The Security XML Configuration - - - 3. Consuming the Secured Application - - - 4. The Maven Dependencies - - - 5. Conclusion - - - If you're new here, you may want to get my "REST APIs with Spring" eBook. Thanks for visiting! - - - -
- <anchor xml:id="dbdoclet.1_Overview"/><emphasis role="bold">1. Overview</emphasis> - This tutorial shows how to set up, configure and customize Digest Authentication with Spring. Similar to the previous article covering Basic Authentication, we’re going to built on top of the Spring MVC tutorial, and secure the application with the Digest Auth mechanism provided by Spring Security. -
- <anchor xml:id="dbdoclet.2_The_Security_XML_Configuration"/><emphasis role="bold">2. The Security XML Configuration</emphasis> - First thing to understand about the configuration is that, while Spring Security does have full out of the box support for the Digest authentication mechanism, this support is not as well integrated into the namespace as Basic Authentication was. - In this case, we need to manually define the raw beans that are going to make up the security configuration – the DigestAuthenticationFilter and the DigestAuthenticationEntryPoint: - <?xml version="1.0" encoding="UTF-8"?> -<beans:beans xmlns="http://www.springframework.org/schema/security" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:beans="http://www.springframework.org/schema/beans" - xsi:schemaLocation=" - http://www.springframework.org/schema/security - http://www.springframework.org/schema/security/spring-security-3.1.xsd - http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> - -    <beans:bean id="digestFilter" - class="org.springframework.security.web.authentication.www.DigestAuthenticationFilter"> -        <beans:property name="userDetailsService" ref="userService" /> -        <beans:property name="authenticationEntryPoint" ref="digestEntryPoint" /> -    </beans:bean> -    <beans:bean id="digestEntryPoint"  - class="org.springframework.security.web.authentication.www.DigestAuthenticationEntryPoint"> -        <beans:property name="realmName" value="Contacts Realm via Digest Authentication" /> -        <beans:property name="key" value="acegi" /> -    </beans:bean> - - <!-- the security namespace configuration --> - <http use-expressions="true" entry-point-ref="digestEntryPoint"> - <intercept-url pattern="/**" access="isAuthenticated()" /> - - <custom-filter ref="digestFilter" after="BASIC_AUTH_FILTER" /> - </http> - - <authentication-manager> - <authentication-provider> - <user-service id="userService"> - <user name="user1" password="user1Pass" authorities="ROLE_USER" /> - </user-service> - </authentication-provider> - </authentication-manager> - -</beans:beans> - Next, we need to integrate these beans into the overall security configuration – and in this case, the namespace is still flexible enough to allow us to do that. - The first part of this is pointing to the custom entry point bean, via the entry-point-ref attribute of the main <http> element. - The second part is adding the newly defined digest filter into the security filter chain. Since this filter is functionally equivalent to the BasicAuthenticationFilter, we are using the same relative position in the chain – this is specified by the BASIC_AUTH_FILTER alias in the overall Spring Security Standard Filters. - Finally, notice that the Digest Filter is configured to point to the user service bean – and here, the namespace is again very useful as it allows us to specify a bean name for the default user service created by the <user-service> element: - <user-service id="userService"> -
-
- <anchor xml:id="dbdoclet.3_Consuming_the_Secured_Application"/><emphasis role="bold">3. Consuming the Secured Application</emphasis> - We’re going to be using the curl command to consume the secured application and understand how a client can interact with it. - Let’s start by requesting the homepage – without providing security credentials in the request: - curl -i http://localhost/spring-security-mvc-digest-auth/homepage.html - As expected, we get back a response with a 401 Unauthorized status code: - HTTP/1.1 401 Unauthorized -Server: Apache-Coyote/1.1 -Set-Cookie: JSESSIONID=CF0233C...; Path=/spring-security-mvc-digest-auth/; HttpOnly -WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth", - nonce="MTM3MzYzODE2NTg3OTo3MmYxN2JkOWYxZTc4MzdmMzBiN2Q0YmY0ZTU0N2RkZg==" -Content-Type: text/html;charset=utf-8 -Content-Length: 1061 -Date: Fri, 12 Jul 2013 14:04:25 GMT - If this request were sent by the browser, the authentication challenge would prompt the user for credentials using a simple user/password dialog. - Let’s now provide the correct credentials and send the request again: - curl -i --digest --user - user1:user1Pass http://localhost/spring-security-mvc-digest-auth/homepage.html - Notice that we are enabling Digest Authentication for the curl command via the –digest flag. - The first response from the server will be the same – the 401 Unauthorized – but the challenge will now be interpreted and acted upon by a second request – which will succeed with a 200 OK: - HTTP/1.1 401 Unauthorized -Server: Apache-Coyote/1.1 -Set-Cookie: JSESSIONID=A961E0D...; Path=/spring-security-mvc-digest-auth/; HttpOnly -WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth", - nonce="MTM3MzYzODgyOTczMTo3YjM4OWQzMGU0YTgwZDg0YmYwZjRlZWJjMDQzZWZkOA==" -Content-Type: text/html;charset=utf-8 -Content-Length: 1061 -Date: Fri, 12 Jul 2013 14:15:29 GMT - -HTTP/1.1 200 OK -Server: Apache-Coyote/1.1 -Set-Cookie: JSESSIONID=55F996B...; Path=/spring-security-mvc-digest-auth/; HttpOnly -Content-Type: text/html;charset=ISO-8859-1 -Content-Language: en-US -Content-Length: 90 -Date: Fri, 12 Jul 2013 14:15:29 GMT - -<html> -<head></head> - -<body> - <h1>This is the homepage</h1> -</body> -</html> - A final note on this interaction is that a client can preemptively send the correct Authorization header with the first request, and thus entirely avoid the server security challenge and the second request. -
-
- <anchor xml:id="dbdoclet.4_The_Maven_Dependencies"/><emphasis role="bold">4. The Maven Dependencies</emphasis> - The security dependencies are discussed in depth in the Spring Security Maven tutorial. In short, we will need to define spring-security-web and spring-security-config as dependencies in our pom.xml. -
-
- <anchor xml:id="dbdoclet.5_Conclusion"/><emphasis role="bold">5. Conclusion</emphasis> - In this tutorial we introduce security into a simple Spring MVC project by leveraging the Digest Authentication support in the framework. - The implementation of these examples can be found in the github project – this is an Eclipse based project, so it should be easy to import and run as it is. - When the project runs locally, the homepage html can be accessed at (or, with minimal Tomcat configuration, on port 80): - http://localhost:8080/spring-security-mvc-digest-auth/homepage.html - Finally, there is no reason an application needs to choose between Basic and Digest authentication – both can be set up simultaneously on the same URI structure, in such a way that the client can pick between the two mechanisms when consuming the web application. - - - - - - - - - - security, Spring - - - - - - - - - - - © 2014 Baeldung. All Rights Reserved. - - - - - - - -
-
-
- -
- - Basic and Digest Authentication for a REST Service with Spring Security - - - - - - Return to Content - - - - - - Contents - - - Table of Contents - - - 1. Overview - - - 2. Configuration of Basic Authentication - - - 3. Configuration of Digest Authentication - - - 4. Supporting both authentication protocols in the same RESTful service - - - 5. Testing both scenarios - - - 6. Conclusion - - - If you're new here, you may want to get my "REST APIs with Spring" eBook. Thanks for visiting! - - - -
- <anchor xml:id="Table_of_Contents"/><emphasis role="bold">Table of Contents</emphasis> - - - 1. Overview - - - 2. Configuration of Basic Authentication - - -     2.1. Satisfying the stateless constraint – getting rid of sessions - - - 3. Configuration of Digest Authentication - - - 4. Supporting both authentication protocols in the same RESTful service - - -     4.1. Anonymous request - - -     4.2. Request with authentication credentials - - - 5. Testing both scenarios - - - 6. Conclusion - - -
- <anchor xml:id="dbdoclet.1_Overview"/><emphasis role="bold">1. Overview</emphasis> - This article discusses how to set up both Basic and Digest Authentication on the same URI structure of a REST API. In a previous article, we discussed another method of securing the REST Service – form based authentication, so Basic and Digest authentication is the natural alternative, as well as the more RESTful one. -
-
- <anchor xml:id="dbdoclet.2_Configuration_of_Basic_Authentication"/><emphasis role="bold">2. Configuration of Basic Authentication</emphasis> - The main reason that form based authentication is not ideal for a RESTful Service is that Spring Security will make use of Sessions – this is of course state on the server, so the statelessness constraints in REST is practically ignored. - We’ll start by setting up Basic Authentication – first we remove the old custom entry point and filter from the main <http> security element: - <http create-session="stateless"> - <intercept-url pattern="/api/admin/**" access="ROLE_ADMIN" /> - - <http-basic /> -</http> - Note how support for basic authentication has been added with a single configuration line – <http-basic /> – which handles the creation and wiring of both the BasicAuthenticationFilter and the BasicAuthenticationEntryPoint. -
- <emphasis role="bold">2.1. Satisfying the stateless constraint – getting rid of sessions</emphasis> - One of the main constraints of the RESTful architectural style is that the client-server communication is fully stateless, as the original dissertation reads: -
-     5.1.3 Stateless - We next add a constraint to the client-server interaction: communication must be stateless in nature, as in the client-stateless-server (CSS) style of Section 3.4.3 (Figure 5-3), such that each request from client to server must contain all of the information necessary to understand the request, and cannot take advantage of any stored context on the server. Session state is therefore kept entirely on the client. -
- The concept of Session on the server is one with a long history in Spring Security, and removing it entirely has been difficult until now, especially when configuration was done by using the namespace. However, Spring Security 3.1 augments the namespace configuration with a new stateless option for session creation, which effectively guarantees that no session will be created or used by Spring. What this new option does is completely removes all session related filters from the security filter chain, ensuring that authentication is performed for each request. -
-
-
- <anchor xml:id="dbdoclet.3_Configuration_of_Digest_Authentication"/><emphasis role="bold">3. Configuration of Digest Authentication</emphasis> - Starting with the previous configuration, the filter and entry point necessary to set up digest authentication will be defined as beans. Then, the digest entry point will override the one created by <http-basic> behind the scenes. Finally, the custom digest filter will be introduced in the security filter chain using the after semantics of the security namespace to position it directly after the basic authentication filter. - <http create-session="stateless" entry-point-ref="digestEntryPoint"> - <intercept-url pattern="/api/admin/**" access="ROLE_ADMIN" /> - - <http-basic /> - <custom-filter ref="digestFilter" after="BASIC_AUTH_FILTER" /> -</http> - -<beans:bean id="digestFilter" class= - "org.springframework.security.web.authentication.www.DigestAuthenticationFilter"> - <beans:property name="userDetailsService" ref="userService" /> - <beans:property name="authenticationEntryPoint" ref="digestEntryPoint" /> -</beans:bean> - -<beans:bean id="digestEntryPoint" class= - "org.springframework.security.web.authentication.www.DigestAuthenticationEntryPoint"> - <beans:property name="realmName" value="Contacts Realm via Digest Authentication"/> - <beans:property name="key" value="acegi" /> -</beans:bean> - -<authentication-manager> - <authentication-provider> - <user-service id="userService"> - <user name="eparaschiv" password="eparaschiv" authorities="ROLE_ADMIN" /> - <user name="user" password="user" authorities="ROLE_USER" /> - </user-service> - </authentication-provider> -</authentication-manager> - Unfortunately there is no support in the security namespace to automatically configure the digest authentication the way basic authentication can be configured with <http-basic>. Because of that, the necessary beans had to be defined and wired manually into the security configuration. -
-
- <anchor xml:id="dbdoclet.4_Supporting_both_authentication_protocols_in_the_same_RESTful_service"/><emphasis role="bold">4. Supporting both authentication protocols in the same RESTful service</emphasis> - Basic or Digest authentication alone can be easily implemented in Spring Security 3.x; it is supporting both of them for the same RESTful web service, on the same URI mappings that introduces a new level of complexity into the configuration and testing of the service. -
- <emphasis role="bold">4.1. Anonymous request</emphasis> - With both basic and digest filters in the security chain, the way a anonymous request – a request containing no authentication credentials (Authorization HTTP header) – is processed by Spring Security is – the two authentication filters will find no credentials and will continue execution of the filter chain. Then, seeing how the request wasn’t authenticated, an AccessDeniedException is thrown and caught in the ExceptionTranslationFilter, which commences the digest entry point, prompting the client for credentials. - The responsibilities of both the basic and digest filters are very narrow – they will continue to execute the security filter chain if they are unable to identify the type of authentication credentials in the request. It is because of this that Spring Security can have the flexibility to be configured with support for multiple authentication protocols on the same URI. - When a request is made containing the correct authentication credentials – either basic or digest – that protocol will be rightly used. However, for an anonymous request, the client will get prompted only for digest authentication credentials. This is because the digest entry point is configured as the main and single entry point of the Spring Security chain; as such digest authentication can be considered the default. -
-
- <emphasis role="bold">4.2. Request with authentication credentials</emphasis> - A request with credentials for Basic authentication will be identified by the Authorization header starting with the prefix “Basic”. When processing such a request, the credentials will be decoded in the basic authentication filter and the request will be authorized. Similarly, a request with credentials for Digest authentication will use the prefix “Digest”  for it’s Authorization header. -
-
-
- <anchor xml:id="dbdoclet.5_Testing_both_scenarios"/><emphasis role="bold">5. Testing both scenarios</emphasis> - The tests will consume the REST service by creating a new resource after authenticating with either basic or digest: - @Test -public void givenAuthenticatedByBasicAuth_whenAResourceIsCreated_then201IsReceived(){ - // Given - // When - Response response = given() - .auth().preemptive().basic( ADMIN_USERNAME, ADMIN_PASSWORD ) - .contentType( HttpConstants.MIME_JSON ).body( new Foo( randomAlphabetic( 6 ) ) ) - .post( paths.getFooURL() ); - - // Then - assertThat( response.getStatusCode(), is( 201 ) ); -} -@Test -public void givenAuthenticatedByDigestAuth_whenAResourceIsCreated_then201IsReceived(){ - // Given - // When - Response response = given() - .auth().digest( ADMIN_USERNAME, ADMIN_PASSWORD ) - .contentType( HttpConstants.MIME_JSON ).body( new Foo( randomAlphabetic( 6 ) ) ) - .post( paths.getFooURL() ); - - // Then - assertThat( response.getStatusCode(), is( 201 ) ); -} - Note that the test using basic authentication adds credentials to the request preemptively, regardless if the server has challenged for authentication or not. This is to ensure that the server doesn’t need to challenge the client for credentials, because if it did, the challenge would be for Digest credentials, since that is the default. -
-
- <anchor xml:id="dbdoclet.6_Conclusion"/><emphasis role="bold">6. Conclusion</emphasis> - This article covered the configuration and implementation of both Basic and Digest authentication for a RESTful service, using mostly Spring Security 3.0 namespace support as well as some new features added by Spring Security 3.1. - For the full implementation, check out the github project. - - - - - - - - - - REST, security, Spring - - - - - - - - - - - © 2014 Baeldung. All Rights Reserved. - - - - - - - -
-
-
diff --git a/apache-fop/src/test/resources/output_herold.pdf b/apache-fop/src/test/resources/output_herold.pdf deleted file mode 100644 index 1d23de7b616c734d4c3e85d71b628c6ef6600575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34733 zcmdSBWmsHI7Bz~y26uONcXto&G!opM;O_1OcPF?z!QCB#2MsQlWL}y1X72aQ{debA z_t{moYagjzYp;E($rMG!>6qwQVaUqLD=J}F2^k4(jXuHf^1?8PH~jhs3W|gu0S=B9wl;)J^h{JR42ll6CeFry|67;ePTog|8ae?8DMh)N8JSp_n3y@4 zxR{t(nQ0iADHs_ks9^Z{VE{HJzh-9pI|4#N26;jjnD-A^fQ^}xIUy6%d!zC%gSds2 z)BC&(;#Ti|MFGaPCV*c)9G%`{wuW)b%u06EP&vRK+H{n^H6SIjg7OS56a8a!3CF;%{0jR)Nwu%wsBd{Q4d??9t2Ue~9CEO{HFEGA=FCP%DjZLGvh6ZCS z%~Z$#=HO2n!!pI5}aSjvTq1|DABwYvdQt3~G5~u9&0t@I*Ebd!n zQlY`@J&PmL>^bgneUXG|3!IcosL#rj+8Ksw%sc?{B`Ngj8PTr^)F)IT9hmq=j|!_i zOA6;$1>UzY5HtX_bzpWy_Q4c0B%=rU8uOIakX=F*s#|shpfeJP?qjv|a|?=cV{^phF!<-@$bOt3gj7#pJun z-7AcTDYWZ&@;H;Wm6h)Y2dhx`IyhoNpBLYp?r|P>JlVs~d>9b>LUMZJOrkEv;ZP-Ib%^2T!``eE^QH(e4C!*=REGVpUvg$9$PiYk8wR+;j~ZMUBxB zIzHfZ5hV?vK|2_)psFGh1O-uqVEqDp4$Rx)@gtb1s+F;KntN03lS&? zch$pOgN+)XTmyazH2(#G)!%dq1|dM+4lWbopqtDNd=2Q%7cSDb*x*Au$Se|=ArZ4^ z5G#@QFj$>GE+INA##NAiE)*q#w7)VDGHFnDu6b})K>j=m&2P%oq(z6yOQTR1gvJ}?SI zKt#k&{XmAqw1H89#FvsV#Nre?@B?%nhcc+FKFPO~Bns6F>LO|@wCHazN!UsG)J>{Is-gV(3Vdg%~MVF5p zLais_OHLM~Oe4mmXE7(V@||Y+BH)gtks^%wSh<6Md?=)y2~oQl=0#E1l5G^2wso<FL2)zqv-HvNC-~#)PlaOv!xE-;%(O^paR%cV!6CwK!B2{|j0TL> z=BAi{=E0ir3qRzZP(Y$l!+Ob(`HaRUXTMvTeZ-|MN;~u@>9|R;RL+Q{3d=0!?9ZaC zB4bl*Q$JIgF|Dy5842TjV~%4uW7XOQv>NDG=xwxB8okNU$rj0M$tjfvG!!&`^YrCH zmJMGcz7DtcJfbJ`-xz&o(oPj&cgirxU}Mi>pR|gy-nDL8xn1^YaBLWDuxw~EQ>e`` z>l*A_eN~5)fvggV>iem=r|DDwapE}rr&r^=)$8ecy)BP2o(S$D&n>5qorB8=5V^yV10DM|E0IvcIrEz&xOZLd3nPNQ}_TkPyZRtTTvcQXxL zMO>pjJKC)1jcsPu_#6TF5cs$;5HS+j;@P~Di00eX||XYB(UXB*YaRj2!> zD*T}_T?%27z6=8#-FC4NL##2}^Ttl3g4a5d4~>!7@*v`|%OaBvcKa=bag%t^h%)U2>Ry;_p7*RuC- zu5z>Ta`IAno)g{-;z5rlsE~79-EtW0SI!QN^Zq$B!IgW)2;RDCMa7%O)P7hC1{8Vd^)vCv}vMW)-i7QS0efYz&Ko6=(D_bXsbx?GvAMWongc zo9`DqntnRtDB^(OK(J4&XnegihOXW-D%G_RJ9?5^lf&q$dn>ytSIAIdM@-~OI@|DH zCSGxHEFW5U*)Q9d`4-X?WOcGMv7}e`vLD@#he2(sK6gfXn)oA84MN>T4NKj+)I&e( zqj&ybTT$i5Vi)7H6Ww-Qbyv?HHkGrLG?kuB5;X@d9iP1=0xU!Z^u{*YJ7RG1ah^I& zz1P1Xf-1w0O1bT5YOUeVy|t*<&&or(d?k<~fh4 zUB&n2mCHJmKol_w{wy5_hhx>-(y-am;*j@Ws4 zZ2gqs_`ZqRj^%uPTN$Wbx7xmH?8M#@W+aA2{HH|55bj`f)Kiqcd)>vz@a$>vEXsgD`K!*; z*z>Y$m)q-%02U9|mCp0?Y;}g7dFRrd!|iBxX-#QJbzpUoeoFhaSN$8^iS=e%s%!r2 z!+GsFjev&N;Vb6Nvj4$4wHc&DM1&0;0VagMh^Vse zpR|@nbrl!0CZtrZ`65vE= z1TeF(;Uhk8>mnw!FySLsXOm-;vl9WBTS$6108~8WRgFC?jk!#S1^8iLc-^?&tnIAd zCnR*Uwz6^LcH<*9eCNvm?)UG%%nZc*FuV>XrrgS+;(v5`KjI@ccXG1hW?*o2b)|P@ zp|^D~V_@Rq;$mQAW?*Kfd+$N#=x*a==tgJbNb;u#QGlbdgN2>bFP{I8$xMv@a%AW1 zVD;OLi7^Af3SbSeadKpM&juKX34hIQXk_c`#7F$gm5DL8sjY*xp%cHMot>41vEeU= z40a}_ybOOg{qAOEXk+GVXa?X1*!*t$>-cx;`xOT8|4JL^n3(98IaQgsxS5!_f9DR| zjEuhr{O$t7%kV3Le~SK(EAmg4KhEbph`&zA#*zN_g`_vOwf+^|`^m8U`^mgFaQ~U@ z@c-w0i1*j%zdOP3{yr2H|08AMe^0Xh=<>Ji|3l30xBoxK>}F{99y8;=$NWBm`;Qz> z)z;SP|26FYv)}u}_CE5@hx=FJ_J6zl|JL^(!+%c<_-_XPQ_uf+Iey>O_ow>(ZZiC} z3f>R?T1f9pn2*@u_cHnSh0VnH*TVffjb!lo?O0QAa*%eS>YUcTM4ElQW)c*aBN60U*k;o7=5RkrtqZGO{-Jin;kJFb^Y0F zOx#p-V|K-j2rL>Sk6h@Bs%8Zj7m*n)>9urBt_vMiL}AI*h8Ds!5=P!cTM$5#to?`S zc-&6o_j$t>-m6j$KwLD(jtvm-DRpR$UXTcx4nv(+r0yn`#kFwQ>hyHIu!JpKIF1%7 zG;tDHHhT=sI`j*_LnMjGV)LN zN$N%|0x%67m)>!}zYo(Dpn(;&a1fD?Vg9Ybf&P4pu_XlhQq0YUR&1ug3V< zm+p)CmhXnZq>`eHbWnbbjc*EaTN1XhakQo(5RMJo$(Doy4*WVSrIR41!&ad4!HKTW z2_b!u#wMzTIaCnm6q!4E$3x9jvqhwlA`q`XSm|Sxs6*Lctp}P{%Gtc)a*#T&+BG^9 z=9y^n*P&5y_#bXE-{~zSX8gm$utW0-Rao;n=+)f0?SK~2alegETRVe$fBr&vn2`8D zz6-BVIWewFo5Cu3@3~=<07b2M*v)M{E==bj#Ba_!lGlC^0|pmZfTG3!y?^QsEiNWg zQs?SE8>Jg&94$fXi;k!|)EG?vbeZ|MXD5Y$PAwRsZ&2A<)q+VA`UrLw7!l;z+|N!2 zgMCVD^Y3oiSDc3*xaV;d>E)7UkGQ4LM#wPpm-CC)t!S<+)2>dHzP@xDAw#sueZ5)U zxCr6sR%Qpa*D+@qRF{~Mb#P%60T&$3_wz&AmX7e!=0L)1j~k{(w8>EgdDiHk9PHc+ zjN9h|{@BRw&ea!tW!*=m*cPw3@$LY(HTJN`^-)jruwJSL7vlvjRgj%LQr$etENi!&nTc}4m30cq%k**neMGQ7xFK?K%Kke(E-5SqeYd_7M#K$ zw07`&gSnhhNI?!U-0z^*n;W9a@m7vGuD2CPY1@ta~U;XZAp z6o!f~Qu(IQ+*3JHPSNOHP-jnZ2hO0n$I=NM->zO5!iMj~k^>Ts8K0NZRIDpJ3T?h0 z^H^uAuq=n-7Ax*XCp4a0oAsHt>L&Ar6w=XpG)WUGAF;ab7tq!<aSyxD3 znj{)@nXZEFy^4hS)2HrGd=)A6Q&i7m23`jS33`AM?RZ8Xg#bResgHIuh>uc^;G$pX zZfrPFZ_9`~B4-7!IycX~)lu^n>HGG)Jq_;S6rAA0$=R~JA>=9(564`XJAL0LNYVhw z3dNft&35bz+JsVv8v6yfG+5{Lb@k_J#K6ySONVH`Yf#bs7~`^RK2?lT{w{fViLBh# ztHV+HW_|v{a8M(vV$pT5e7yNHZc6i`EMQHjOVln=8KpW@e9h>SRgN~A6@ z0FC1jtM14LxPjipIO7!Jz}_g5S-$7#Ff5tvHu21ueWsjf>5OhZDi>nV0!`QCRUg|e zaHbsn0mJbdj?&5Pey?|#I@{XB-tL!ISCvvI<_vOHdP#Yhy?$bQ5t329j6;FukWk;q zEn|V<#pM*SCtAeKaA2q`CthI_Ic(79JjcHJ3=)Wegpk{V=I2qnNf>(abn!6-(Zk9~ z@2c4567RC1oDYNb=m#_Ku9oZ-#J2Wj<5vQb*Ne$x9w?T*7Xxwl@A<4tZCkHLQZFT> znq75oISyJQM&7hMS)Oo;B=c@vRRT+E0*a3uTCcfXRPsQFXAe{*Mich7RwnlJGCB zSH#xF=@-o;{Eg+xzjWR|S@~~4_?K$T%*Mt1m+=?p{$=E3|J(NKjDFdeI9S>L>iD0DF}* zSa%(`QsN>u!=Q#J$81EFqHD6#D<}nddb``F2yrB=kE31z@AY2%ZU5Q1F1tf_Onzgv ze`;i>lPzxhQ?m8LMQ;DB?D6QfkxVD9UOn4n1TCdodMsHX0v9aoD<*0r*dFLAfj3!% z08hbIb2LGQqPO5NE!-?K)$noJSQBu}NS8@ZuUu~*A-S1mPhaYO{D#*wORB}xTaQ6b zAe{1Va!^I?ReIOkc=MVOox^r=M*XavPPJ$tb~UJOzmGYu0z(|4Oz@C7Ct^E4)uwfW zcb>wWbIY~3U?+F&L2o4A`xar%?vL!wv2rhBO^XORBrb<5Q6^lbP`lkSnC-&r=@X)K zjRWk8IEp!VZR+gK`Sx_Y^Jry%dD(Y$I8IpN%MFnb@IDdDRSfO!U8b1eGk>UK5ut%H zxF3N@`*a;Dj%ym6d#<0d4}u@vSDg#GHc5JSWprA7{J779yjEty8P|lSQm7`wpoyi$ zE9qz$QhH!gP!)*~4(-tKf>NWJe#&%+D2)`HAj+%jS4f+cC$6LUKQOys*f&rSB&kF5 z_6O_2y{O~$9jO-3rP8UMBi`V6lPU+q?c+y~6<<&o`^Q zF7hZ$dH;}AO9E^HGFd^y4**iByJ}13GB|mvd9T@P@6`&2`y+SklvS`R@tT1#@9u&S zJlYska;D0jOK!`m8CKJ+ocSXTJc^LxZqVf@zZ{jJIl^JD&7WlvN+ht1R=UDJ%j(ME z32);aRVL@*7O(l*KEN?08JwwjITV0mxejR#JAm+irFP7&;ia%|{ceaSO9r7bSv%!8 zWvEAEgS$TKH98GH8m|LyT{AL0l;L9rEwZx3(*uiOoSJ^%zg=P(W3d)?!if5Teg-mG z7JKM|F=wmNTFaQb*AlyfDd~(b#_x&}k0JQ@%S2ICOK>U9T;*(n@WFOb2KythV+qEI zWR1R3P&cxfo?;iOyP@6GdL9BUTRjq?3bNmZSd_r8n9A5O8;k~#q=ZLVcC<2uV`s5sFMqb? zYfMjP@YU9c7QtwXOiokKKM&u4fdgk^E{YF~2q#N%T0sc$4L`VG)NfNObov=fqJ(3N z6hKp%=!NQ_?bYuPKCft%Z5-{`5* zEG(rTNr9mo?Yjkz)-qKq%F0dxM~%daKpoGkLUd68PNYJ>aT-2O_h!fiZijQ>sX4Br zUde6d>9Kq*u&fC%21)599~f-qC;z@OKa>$v2Gvl?wnfnmH3Gn{y{8TP!P#IR4>?*> zQz_lLzg@bfEZ9&fZFP;Hh)>Bja-@rNE!n_)4zy8*>$_bm3^a=cMVK+%q%()PSmzz9 z+t2hc_AyDXhBSM~BpX2GWFyN<{^)86MOfEtT`rOwMnF;n7?=;sUUvx|CQi!`-V^aX zVDBRUrtYa30+$;DMe6?r*793O{1?{p zr`pKG$;I^-8Tp%w{Y^%={#!C4)On(A;1zF*n+_(#`-oj$xk{eEDp$Z7LJ1k{ zPb*KUOhiSM#s1a->l-ilL3IaTc?G}yE@<5ro$Ks##(Q*hs2$a_80< z%P^yxHeT6{ya$vBRNT9H45Cw4Nx6iArF}M!JB-%Vev9B&A;+|eYt}FpR=N|`5fi}S z`nWa(EaWY%M)pKe;eX>;v;np4~r|E?Kc?j+%;;rkGHrES8{{b}Iy7sKto~ zu!saoKNwP!ue7E7oCN`qp&yJGVGD0sRR=Vt(vol9N(C(ml_mbH8jFj+(yUEfX4QX9 z`_^aVrFIrC`f+|#yuIAg>1(+YP6pIl3w@>+)X~L*$?e+nhvO%-Jb-E_^^}s`=1{|B z%v2wKy7ee)m&A(nVH2mmX`N_H(h)mjKAn5Psv}RVa3FrZEYx5q5x2e!tDjhoze;2R zarG#%3hQKo1pwY9$>=lwPzxKULlIwWRP#Yd?;WV{6SHj7Dx96-h|i)!x{w@Wp@AGd z=bcneHkp#HMnGBg=!%}z5kI9D6qUb(-)X0J9UTI9Uqxm|cV3C12_4P*GAXs{|xXpuV-(m|It`QE4C9ziKX@kCy-z0qt z*HWGa42EJWGN2oak{{<2a8Tx;FDlxc&@tr*4^~bAcg3uUH+E|5?29Z5Pjo|lT6Q%3 zy7f$k4nBp`BM*Y?eQFdSZuq*9rFOp*BZo^H7eVY{!x<~n&2B(gbg17U&}rDJpHf3} zH=x6<7ma1k&$fD~kgrTTFr+8jG3F6B5-$khlD^=jXA};!q!KIEgg%Hax5|1O-jq-F zo-v#kzt>X`P{v;#lIsnn86zIs3*AEN@|7N;W!DD$EVJbalg3j`5)IVPJ)z_W6A&Iz z;kQB{ux*%UD2r((llE;wf8r#jAc`@ufs4gg_Cq)WP<(2g-Q0j)49608>>Y`MHg8>gUGCA#57^~mYRW6Cp z`hDggYJ`5_lA>(Uny7l!gMpm>I%o;N|5L54k`}{QY)N-Mgg(EtTCX^%xPI*}VC6%~ zSNV`A5Ie7_HN``HVgpqOkN{VF=9CTrE_R2MAl#?GQG5;#s82gySSd1Kw&W$Q)CG$5 z%-%yJgXdb`XUW!xi1rM6!D5<0UANdAf!&0YI^ZvEMtHHS^8E$ffV98o&I^=w9}5v8 zKpjjAIS7`opu->##x17!B1H_7#P$Tnh(PAPK?Q=@(MC2?r>4W%mrtNS9O+ncbSrtf z!v5585h`YG3340SKc^pl37{!}{-UW3wjbIws|&Bj(SD0Z!ReaGX|!kz&d8$qV^-9E z^LPPSQR&NRKN#rUJ#!;6c{GYd<0Rp1|DD6fQ|YZXru=UMsTU#45Eq!H&!ihelUr$Q z0k~jI^<2)n?JY7vs|Ocww6le~aj4M8M%G>?`UNtod+QBN&3moia|CVdLOx9QoPx!V z+!@_49PN+B|3at#1AYIs688Ul&EOZT z{;Ov23siqg0qo42f1)q*FSX&9k(c)`^kx2CyZdj-1e(9l*JrVMX*z*d&HRFV_LCNe z{jAdtd)WSWqA^f0A#|K@RmtJ#;_=VtAX~u7UzpFFboP;IfI2(;biLD41urI1UiU-L zN!vz>(@p(t{m$k|7ePmvXfa$AV|0h@Qn+i8t#<{GOn( zdc*n_6F6W#cM9WY3HYs!#EgzSDA1>ZC1*^C7TI!Eq3jI#ch^)ZBBb!R33$rb&W0y3 z$wc51k6vvN8y@M7QTAWZbO<~Fjq0OP^2*;2fk(i7p^q=%+=KgwXx9=k3-{_zCfDem z-jAh|NGr#zCDlF(m^5g#ctM2lBr%EobjetEQEeNlaZJ~Ya8ylczc9l?{ptv(Jrhgp zeqC6B5c#P64unhgB+f()XF4I99L@|~SgXo&loj~1q^xCj{(@LO-b*3*x z^eEdUZz;@NPDXgL-PRkO@5Xc{R#T$A5o^RmCtd;K&PBte8-%+l!C`umg%51Sy`*D* zYm58C8s)B+?&*DOK2}9+hWHn2OEB!h78#UJ{U<-q8)P|B<9IhyGSygjdnd{C=_+l$BSuP|coZ9!_Z=gqGm2*1(wCZvbxMt9rOL83>)By* zC{1i8rX4p%yx>#m=-opU9gx*kwk*g-(X9eDVO8jgnk6DxnZfk!uMoyjH}O1Bhftp*#%*=7B>#p)2Qo*VNGFZTfE>JZSw zv(J(m6c+x1g$5WUPKO5-i2+0p2t_#4kr1WN6Xg!o4nA*;hzgKM8hhR_iYj4=aoz1X zjV`?&J-83Tx6x7GvJwJs(*(Fpv$zi8PPpsOdPO}bZmYAR%p3~oWG!}@vwMhKFJ`db zF>c~-;q3DSYLLdRel8-*>cgsn%-!yev@T_~tZ66uC>c4009C6i0jjksH9oIYD!a*= ziIgj=5>PN)mv5zAf!6Dt4)}&D5?SPWlXGHZ7@ltG3&Pnc9=PeC7GnlJ2`kRv{uq^! zt|5-}MY$iEEw-$O327AbyfOO2-JCEPs|{iwuu1faF=Gm%8)}~bXD-7|yl;w4XC?5? z`FwM|q(L)!_E$N5$Hx7v?-_X$3CWFA5xPx&xECzV@!;lwN(WTm+E;Js$2{-z+e$q9m!}`YvA2<(bul?^aM$NDnVYB^__Iy zKW6k?(e?@Ph3<2Hc*$zOaA3nJ9TV>~LUTdDm(aYpJ9l2cf|zcvwAxKxe@?BVnxl8h^ZfBAf{0^vSXXIbG@r1ObX}HAw zK&n3}n$u#qfsTfa`5gKa=qY_PlvgAzL^Bz%P6v|qe&G6!L4Tpav5I=hhHRBERRfwG zu1D#9Gx;sK@pDSk4=j^u^CakM##n4Brw+ey8ru{BGoKg2bD3q4u04*Eue4nm%sT2V z*GA2d7kvYMXm^;!mg6>hJGaYtA5)1)Jj7YDP^Xu3uub%uZ)4q|d$Ww^hH8{6B+_TM zr{L0e2DZN%>(4hagH-Rl=&^DzgQBm%;L2>bl4}S$%8$Xr9Usc}P2#3EvVZKtJ6u<+ zcXd(=5Xr)KY^Gjd4ZwRNV5l(WUznn*1F~vB!C+3lCAKbJGAwz)muK6s!_DG|=H_hX z$!n0`>F_Vw=b1ij5g~BMK7zp4J9wm7$w+!0> zUB#BuPyCKaa-=26H1E+z;DNUiV^x^0?KLHP6!qcI8#c5T0f3+~rZP4k$j7HYV3}=Q zr!uzl{E;sZsQCl;8aik|Nb?myt_0B{x>6LSZIvy_uz|M%5DVs^8KGM9XuZ6DW$Oh z()R?LBhllKH~C1Hlq-BnrjySnrt0l97Q{*08#B)(X3iZKBSR-|89}!qk5%ODizPmV zJGKNCHv<6MOh@&Gz6ufUJJREOf}NC{t1J_Q9HdWhqQULft@CstMKN)Ea7OjqvQ#>; zRj^Zu4{$b^+e{*yubU};#Gmi8nXhTn!iCsy1@PlL^7kFXK|&JkM76&0tXge}4|rC~ zEiDehtL`ush8?Jt5#B@TZ4@#M5x4HD5nsknZgyXePm8|@ytbqW2ukip6)O*u&=tmy z%BAH~eJLi3*$+!X8)Y2|(*bmuD0T8?C z+QYD!Ze&`iq&Z2ljf%@wGmtxjo(2(;IIrh+f4*kc6(Uhg}X*63`jJxSiS(mw4Lc1c<-Nva# zlJnv$o3Sp2zPhV^FuR;+ALR(tmge`p;IUI>0c9G2flEKt>^#5X7RO{0W6{++1+xP@ z*yRdzax@k~4(WT15_X$4Gzt2#UrkK?{O(aJWjZC#CyOpo`8=3alLSp#JK=>_fA~rS z&~O^KV%aol(=L!<`Y4Ihbkcp()=89s1p=1+K}$$jB<@qivS+4f5g9?1#x=X>Eo2Vy-Gd}Z-PG*o)e`MiRN5$fV0l-n5^jD>22aE-= z(ZG~q&#*-YeRPFc)Pv}Z=P@Thnb@D}kG+*E#rmdd`aCl5f=xgFP^xAPzckV9vyf_P zWl*Wfw3$Z8S1jGteI%I}OCjJ@*71PVjD%7&371+w1BQJMF*R&u;tU>8xEidVu_($0 z7oy6xPi-up-iwLhNSG5-7w2(QYx$~m;^eB_?7nK-tq)r)SG(aI5ZKHjcz{vhm74&F#gWL(3K5${g-z0>JanWq$R@dH)FP-(b5`g*HnPqI{MSAp zdTvlGO4s_x$)Q5uws{2ANB1$`4VW59_k~NDhFD#mA?O&}6VEPgDU4vwD}Q`%>+ekS zyy4zj9G)U`)#tZRPF%U#uAU;olwn{yYEr8lsL|M07GIhPrt0EQnBlS{p{mL$Ffj73 zTYh+?hjrjT%+vVl zykJburn>Pw2uL*DDNBbU!YMhN!asXbx55WZ7l6<8|(}k%=l62ssIXUrsF`_I*mJW`x+<+Ka z7IwwZ&;6m}oPX1Uzjckj>A`RD;J=^;8rHV&3c%|ReS3I_ zIbbcda|T@%!tphFk+`p65!NLU!g1yqCA2Lc@Hh@1H(g1|G?S&+R$JvQ0P!Er_uYTE z74S#XGG3k&y+IS>#LpiZ^O*`61ne$~WFt0OF5y>vvGI)E)?N=@Z@7@?42&XsX8$HZ z-j3Pf9fGLBXy5B%ayt+Lcn29qx%8lUg3o7s?iQ^*87_@o6{k3BHh zSfY+gw`cW|Ompg81;`geU|GH0W;MJaHw80lCS2WhWqc_lfho>-zUpT8%#(kY;P>FF zYz^zeEg(MkCX$Y3lG{TRljTc^Q&ZV8uY-=&p1uLsEcQYip(B#uynzRY7Ir{pTmBF@ z>euAy#2I+2+8$=Yjca|#|0M&cV-si05ImIs>|1Lwbm>?^Y(Fp4A#n6FyI>+&gN+lE zd2<~+^%bvb`$>N6xf@Kp=8gZ*N#?C-Tg8&zoe`cWfE;|OC-kwO>Rh00|BhELZuveu ziB%tH8;gktqLDVj8hrdZ!k=%bK#C&gLmfKTeM^dc$x5wf8F2MU-mqjQ=*aF#WPu$> z#ab)@qFLLI?o*BLr($sm{FN45q(j$`d!(F6dy#{h&KR0LZWI}M=p!LSOollq^ub9@ z)JP;~q0c+2-NBpk{gY&x7-#@7cgr!0Z2mU1h-E7smJ-H3W;LYihzUdX!UJw zavy`W-!+dyRFcoMEvKHS=AE9H@1#(pe8-$9Yp(Yv>YU2NNk<|f!!i_&@3vMYK}G<6 z<0~2R;Fo*>X51tNv67J}BL=b39$M=HlMF=gP%OSb)qsx8H)}(_psu2xqs*H$7#KB@ z`BvXdtd&-keVa@Je)Y}ywx=h)RP~5tQV%sKd-tc>t(4VTYd@N1^PI&A6uec?Jwt3i zt)@}>4{BVc;$pm3>?hH2R9yYM1Sc^q&1UNIs4%Z2rtq0h!5tVUDX7}mN?|0mNATVZ zvDL=FLpmYGZijg&+$rdjm#O6z9p9AdhM?V8Tq?$c;>qk2&#>7TP$TRs%7L%Wxu zH4%?|WK^Qq^C;f$QrBJR=wM&+Aa>V8<9 z9pvsp=30ms<;Q-GP0$j-qy5lHa4~MnXm!XNfsth+rm=XM_e9PhDQ;%aT98Cs##dZy zEmIFy%vFS>IWr*KpM5%HU2ad#$tj$kY}ob@^+D(h(&wMYSI;{GPvs-a8Kc)n1n2tM zdUBfzJ^~r->Dg}{xd+U`rTo%jZm7!I_2!-Rx;2!mnze_#nkiz!W#7ypIoYj48f1d4 zSKAC*c+?3GJ^74ncC18vKgK*zEzbligqm67XEmNs2ZnZ-I?BItRc%=cnTS;(6A3Dr zgTuJ5p^6xK9}>{2Xm@(JX@D>?Nv@8CX`q`(1g2Y6g(ptfuG-X6eZ|+-P}d>&3cj`v zI$jCalU!?3E=zz&9t^|~9(@EKrZohcSJ$d#lx03d_EJZ(*jBV|54T%t+yYFF>UX zBB_>HG>m+wJOspGWaC?-*;uLQ1-XTXagrWph`uHCpa>GoXJ_Tu?Umsbu6`2fYq=EM z3A2^W*PB(i-yAKxWqc;whgk8kYuH6?fuM9I(Ri*v`DHvDlpC2cn~jpWW73qO6Tulh z_6T_BI^A}m4Ps!9f1~Uix@vVZnokOU*Tyd{JPY^b!X3}Jkkv$XEg@uxK|%p-$W!6# zxv=I)9VK;M`t}LC7N=!fKc}@7rrtsnH`o30ZKuXEqpY%4SjRW-ueE-k^cTt$j^IhL zYzh^kcOnzv`d@N^gsA9G&o{of^2N194@H&omMU`oaK<@_8r;b*R=_{&s+>AZdz54S zU29+rWOd;9~o z_R1`59a-5}GIjm53clJa)8K25pDEG`#QX^--zpy6Iark~qHlTMf@^RMUhjyj8ql?- zCv4Vz!?VW?hDw}m&woJfKMT+QBgp*=lK&OC|16R-v2*^V-Lw2HSNw(CEWh6#{4bDO zUHcumQGM>JIS&&8oZ%RV$pE@aO>*I=0}G@-9u@C|k`6^v>007HP%OP8H{~~uFb7_P z;l!dMs_dA9EANo8J7Cao0f7uefjy*2$juBc2!6=ibgEKc&p??}5td}eKDAZQPVDUv z-M|2xd){FP)D8GfuYnY3MOF<2bDS#nPHY{kGuw?Rip`wfpIblO?7YbRlrR-IsEqh8 z3ov&2hzR{dTsX7)Qnm{_|n$A~$V?a=F-Iz~r?R z^EoGM>tQ%VKJ%Bh zG+YaNINgn-PcB?%Xg>c8t#RZuzGJU8g=b1vI0?mDaXU4$#dSh~SdTVJaZ_k@7dY^e z8pDNlq5N=@{1)c8K$XAji6^%dJqR0VR}dyjh4U?9_ntJXvjG?{2Rfe_{|oa{G#NON zlwi^baD8%oH)R;QTDq=?bN+Tdz4Y9d2_txdJV@ONMjk0K4iiaC6hllm_!Tqwv;}BY zuCZ&5|WY-Jx&Hv=^FiGrzCdzl9lnCZI(n|q*QT- znu@YHJf1M-r)Z1(B z0SE7d?R(_f&_?&8Xkxs94Fuf=LT>dSR&mRuM*K?Z4cpNC!Y;Eb7i@sYeCT;9JzRPh zVb1cDXMBmvzqkBT=6+PEi_n}4=-vs*Al-E2B*cRkOHWN~-Q&boqRUAM{s}>XEixN! z{LRiXSYC8PelEtFbvwJi4+fTAErk48Fx`pil}@e|>Z?b!lYPpMY5MdJBTpTNC7T1Z zRj56dz<{v>zOfaT!2$RmkaSQgVneO5+zazRX^%&1=`ZlDIyo?Ov`?FsphXt#`Pn$OCEC+IZ!@MEH@8;t0sr8l*T=Tri9skda$)tUID__&a@<@@z5iBU!g4i*tHSF?-6Nj1WE^=k^S5p^CzWq+4Unzh=tR^( z#uMZXnddB1N9^k1dph5@Zez(ukHx@hDq+NZR5&yBPI7eT#^M*LMU&KV?9v8@8f|D5 z8ZGf(VXz7W-)KCK5u&$D4xwyDw^q=up+zA0MoBH?An3(Zdzj;<8K}9l1Wh;L` zR9ByA;g(P*@XB!O59;E0WQ(DaYD}<=nj~?Qey*_xC(0em1zwIHM36+Ne1x#3b4wF9 zuo^y)VzM8pPGHc_WhSF{a?5NMX>Pq<-z&n?%-y}O3c^cR|a~9-Hq5YU8y0K;m z9I>5C>fnWq<5)|kU({rjr6%o=lmxD+j2%BJ3V^Hv+uqA}%Y1(geA82LYJFZou!P6A zRW{y1pVHwosk(Od{vJUc(n!(phwKEI(mGO%q@FgdOsMakH=mJCi|_+-3ui-n-_}YU zj|zwleptvcOjdMV_r`E_UiuC7FQ~aEV2-cC^`{2MxW`=C@nGBJ3|Q=Re7d;I%z%u( z<(ifX@6Vro`<9+1mmh7t+%LjTI|EBGCEGitNHktw9q2@zTg9ST8skNitYU-S%TVUD zK!G;8>~OnlAO_r^CzY$Gnj2#Ld5hEOfI#T>h-LWmMVSXJfLrv(Gs$oyUx1D+u*lLN zmp@kEq`^iqmmOU{3DbgY&o$(TduYe?HEz0{5UA(k`CIfuQcVdNmqxe z&p^m<=>DjNj<@ITJd*=~D^m3X8!6oZ7^3F7Rh@nE?U@@?X=s+aS`)*YP(>W%b2*G_ z=>qPH2X)`VZ(eGVyMV zOa`uDqL_yYM2NeoLRg=VW`!iv3PFyx40kur&aY{iu0bBEH(i2(skM8yOJX*}9tdG{ zRHcWSZ_TtVd{?&B|w6D&A6ceH9$F7%AiW^ zklP;tW&}sVfi%3uM}!PpgW5xyo^O(qK-r5aK%}%~RPp%Xl2zU2 z{$~q3E!DjeusYrOEjW`MjLccWA#i*4}DDP%gT-!X3SMp9jn>S8m(V{4+HC9MlntGI2U_`if9OFdNtzVaM z_Dwb5}#*KA`ug*vY9Jj(pa_!S$&x}XZhR^n3|Mf)K<6p_LU@IwXqhbz_5Ox`8` zGz#N|i$VEs!XwO+Cra60D<1Hz?Gw}%g3t05)3~`894#u@)%py}lm+a}$F|CV6DNi? z_VwXO5b_R}tO#wN`oc8^G#KK9> z{9eQSH-CR-Kfhj5`oo`%jjhvrcz^!;fUJd$CCvLqE@LM`?f<8_E02oec>Ynp@j%7I z8)I}6je>IQ&g?OZAn`CIW6gscd-T+0nn4$l}xF-TAWK}7;#38El~BBJ6E0x?(8GN5T0Dv33WDZb)TfDsnX(Zsmi zepV0Pj&<0pITa(~G2LmsZkU`jp9t>U-!wYi10!$|RrOYJYEC_j0mV+1nXy2qN zGr1f}%3P)XOfR{WelT8tmGKWq8oJ!*bOAh=fpvfF+q{0YHlf~ddI~5&l1cqTEB3F6Y1BEIs7X}tu zA162ly38CLPQ;-~0lCT(D_ai4{G-BBVr6qQ=^TuPU>K$$IEPJ=iinj>1_5LhmOW5( zf>{wjKHkd-#$jr57=y#f0MUs7Q$sop2T|a#xL~j-k+5)*R74~n)igQK^pAbRrbN=q z2}W=px)>h8hA5VgTfFI5Z6BlB7cI`UpmG28vNkLX!!A7{H+uxeA`wm)=sHbu=Q`q4sWAXWRbzODbJqG26Arnf!9@erwo^X{Aw|3(rzsPQR?H ztT)DEg5RT4*oGqkA&r{~k~{QnsHiwZ6yZI=0o*noqwViaHClfi<#?xS-oB`-xA|RQ z#@;pcQ+74!be>dhJW$fEmsTn$)6y!odRg|ap!C5J)3@&*`?Gn!-3zswmhzilYDs6* z&en6`jDyG3)ZDb=63exBcvprtYwc?C%(_3eF}hP!bz9l?$&2&`0-}~%A0Ok(0b}6B6?+X?x zchB_?Wx0#i9~qTxml06daI#j|{-=Jr)uBe7e`>;S;iiSnM)~=FmT?|{bW2XM_l1-I@vkh*R z&fn+ehD~>{wR$p+E%Nt0Uwqk5`|;;VCJ%#Kdd{0X^tZkqnq9px@A_=DC_5{*Z~C<- zr{8si?=N(UJ07+3X3hluy~r5nhO`3=`+UMVG6(wdp^hE*Gj>JqL^*z-kU z-Icn}ucbSC->4fYTASQ(Sm-E>NL8|!lswN^gj?QTt!vS4%%Y1ftsZ8v&zOaYeqTMo z!o--x5M5o3Ta*~HW?8013PlDY*Cf}m=IJ3bCoUJ3(=6R0h1muo8_Dlk9u~R?6H+%N zPdn`Top5Wae)6;!*A2qR)H%tqhh5hTV^W=yV<9bqsbwYF>l|4YlylJ2C?jQhwA;FXR(#fiX`&?UX?c$u`1_wZ zPg~h|DE8Wy;UgyBR<-ZcQ*E}^IUe-<{juCrgat4yPrAi&q?K=XJ`k#bTljaRi-Lp)%K2mt9>cBt#HJ_h6Eye$p zisc+zuE;sPX!&iskT%~ZWt|?WDc;q$QY-zf^Mm|@-o5O!tmknSlvX8i8a;mapxWX~QSs6Jz@PE=6ZH<7t6-bq!i zhO;A9+iHxus$uQ{|GQk6e(-;F5vkfpo#>W4;T2NLNp&Aab;$3lXCZY*T287vE`kmb zdwFp6lE^>sg>bg?7pwQ@>Y0R z_u?_Y3hOgfb`bh0P07ovM_qI4*mHH~wOM;AnkVgEFnOGMg4uC3C_&3DJb$;(;GtDg|B`F2%z0~qNJHE&-Xf6&tWs_U;UUA%Ae z0w4BxZJz$7Q|Qq1CaKahq-~SVmYHGiJVUtCv;X$KFzZ3qu7+&e2_Cn8Rg)F8*jupHZmmvY(DT}3xsKil+7O~iT8XnzCAGX~?4DVo zs)Db)x36}4KO7|1RC|mtPw)O>q6;9dj4p~c<;E>8UHP=`cJswwUQAi98+Xh%mOo`> zUAEP%6wa_$=~fmC^&Oi;>YjmJ%D0FOwQ4G1?@rgc?`k^fps{~==-J$toRnzpi3I|4 z>)ee9rmVm9}f80FTRP}-8s-fPzmLKbyhJN#z z3s}TX==X*g0PL-)&`W)-0>EA`+>HP`#uc?HCu;_nR<-pwFsi2CMu0^Gln+B@=AsLl zLpDlgJoy*IgD-5q8tJ;AaY!9lnbh}j67c*f@b3pGuC{7OY|A42q3ZdB_K~HJf4&gM zKjbVN+S3+WeyX7U=o&5i46CBXyrwoTkv#p%4>rN7n-9jA=|ns{V_n(l9YZU-b2{j|mc4ZnA|Qt5ywva4v54=UqGc9jwg(&F%SiGnXo0=_It46@g-&8DZqcXxl$|4EAB#C}WNNsj(x z*C(VNJTdI3W9gjHzfLdjdKFWp&eyxAzQ5(o+rU4U)u)UbB?zoxJUMYCuiK*5^k}Q@ zd%stkMo;zVaQIfxl(6|omzn<=^+$zK_Q_2mt*GD^SAP!1yyt{vSO3}5{-lWKpJ(mh z+1Zq{x!_rbUQN1Y-jmL!PabbfKe(mncOPr+y~z9p>rOk3DthyIi1pcpFOKrw-)=Y2 zQ=2q1A$Xw&-8w19EzONqd`+)lX;j1BrbM+U<-5gu-8{G6GCT4(vrNBkYNyC1?7(Z^ zb1|Qq-Wa`*Pq%*Mci~|ak)$3HmbyQ?z&#qKES}ku(6KMV(_+D*T^T-ZESIZvNRv1_k*?4WknxQUgni$Gz@)dfq`} zCFfygye_fQ*7$749nm(Um7lsyd;iC+bu~>V%i{!l6V!(7E<5*osPh^8i!E9sPFNqZ ze7JA#@tf!3V&~0VWon_P9@yB?t#93N$i_W7hTXp4oMv>o*_)Z?3u_K9d0~{noqP0+ zW9a6*REPN?)mksvh0SG!Wf|e6XJSM3WA99=YCUJ4bD!U{!Y%0B{g9}7*Cp+@(-NZM zB3l3C9W~!<=6}<)L+$wF2;Vzvy1G*$pO;OU8D+V~LN$Jpi_!A3lry!dc4MmpY_!Vr z?r2{BvWRyn^Y5?5rseghW?ihF-ko{gPA_;fXGXK*0^bme&34~cavuK?eI#c8y}X@! z9lMw>PAV5P8ICJ>=`n6ePPg+jJ>L@Z%D67~>mzoW)c-|K=ve;f!qhc|ZyIjyn0Ya= zCiI+2PIYUuU)&g{q7dz^)yEy)xP}~W7|Fh|B6xwl2P^aw-2!EcrhP90mG0dQ`>o@3 zeul5jjoONFX`Q^aW3+xKG5I3Ms{BrrnqEQn&!ORmy4PsOmtPEPfBN@}l-8F8TbLW2 zQ5Gg`yPcoznKh#PToQPy0TJ=F8<@jY%aZd>Aph7Z?0zcFXq{AO5>ID|% z1A)~q`6L-LP$Hd~=1Qa&5PryTjS{#g(IafC1~&Bqn|gutESM{ii*fj&Ug$rNpNzs& zCwBZl-i5RXInm%eRjNhkpwzy@OgU7`#SSwi*VCv)IFr?%od#Z-53UGtcbH!w-w&?9 zBAwX28{x=QxsD8Rr;{RaThisq1~)SJWEi+6cu-M*hozVogX%q*kS#G#4-v%#MkPUD zT+#){Mkxf46QPJZm;BfD)R(g@}@d=&*AVXM%?qbdLooPT)>d$oz2#2;Py6k%JA84D!Ju72pM9vLLpG@^mO(U>MTm5QrWGUc_-qL4msq z;D#I|XgwYoCf9`mxL!uC*u}v|fu^FkH->>__BNFTqZ|XKCIf0JH6xM148YR?iJirO zkS5BG>*EEYGH^%F;P5g){Gw6@nGm~1$_PP5O*-fzoujxeeoQFh@YNeYfE)mr{3#GX zSYskMVenc0>-k1iD|`&{^fsQ~oTS?7Ja>UjN$JY*D|`)tFWq5mq|>)}EUTJX@M+MT z+{-sL8pqxBv&v7jFAzT6bz@6iM`FHe;a62bddj|ICXV=gdh&)(YUbKq8LsR&O2uaE zh`;McYUO{fJpS#|Co^{Hwo@ zRM4j5KdRNOsC~F=`c9K%V1QJG27AF7CMI zFih1irD^%l6y-9VJ$pPJTxw8R=y`>?J&eaYG28S6ef#&KBs1s68808z{fPEweS6=d zV@!xm`d*@E;`1|pXJ{dtE?{>mGu|Dt{<~{wn=f(ihUcNo?R4deo<*I!qo!fHF(X0@ zw<~86lON;_*GuPqPT~|JA>wIYe089ky)f9(!ZPjnT0~_jr8z zCUO3`n&!sh9Mdw*)$GjYrB`zHo<8PQHxVD|_UMzDe;B>aoL3&5?v|#G=AsHc&+lx{t}ZU38>!d){d!W3F)>$IGJTlow-I=KtU>U~d8au0n`&3a zzuTsL_{w*q&K@2Tx5Z95sr1VjJoU%6khY1LXM4;)8D4e&Lh4_Y?8p1Gc{ZOp4mEmr z{K3L%uZjf2z?|ZQb(vFt*^$$pdU$G{y$iqX%kj4UqVYSw-+=!%_Nw>%ZS&QcCT4o` zras!str*f``P~^aANL25Mq}TPeXbd&uY>poIaS5J#1x5+1+RJT9RE-)@FE& zsrR~kx@jJ<;`L>dwc|YX%lLI}vww1953#$N)3dOaZD_`?z<=8D?wQJ4*DJoC{qba< z+M-_jQ;o^mnk4$23d%aUDQCExlW75erOZiTFwUY1qgs+*ZKQ+MV`W*bL zl*$SE6H1+|zKY7jyfku3qSJS1T~RTLt)gS^o}I-|x!_l`>HUxz*K%jsg(#c3Vt;P!o( zMh&dWC2*Sx-^phHjr%Z38dyyRPVNCtesIU0#sH=HVcImX3Mox77kKbI6>na@R`w|g zx>v>*_8|!T(S0v;C9M_w4Zi&wEU4K*Z}v2U)O;FwG@Uujk`V&XFw(qfkTZ{{-n>cD z#?5K##1i`Cb>I@XxDn=)hwVgox8BL!mqr1Q zm^DiFA8Az74jFwmjkHSAob@3`gftq8f?WtO$wG(*U)SdXMPVPJAen17axJ61>7ZRs|DA%!zK+65a{CG-z6YrryxJ-dLDthz{dhEo^+z2#n)0NXP&>i zpZW5|G)jW#b7IZ-fFE!JyT1o?37vdz6-||)hU5yuLf-)zqiC#;#wi-_qnQ-V?4wx} z&FZ7s6wU6VITX$5qX~*8`e-gibNgt>jzSEPz1@d@K|W5-N_3DFONrk9hsI_>{xr>* zMwQ_V0=X{HADU->85emOCCf0hB9bfviU9+X#B)%D+@z9akjO0kJvv4p@2KQ+EH>J! zDp7`G7;^ndl+kg5F2f6pK&Kr_J_qgxnR;0Sa=A)A$01Ovt7I9AK)w*kGJ=lMt0l|0 z99jM#-&Lj#E*JT6CEjH)IA~y&D1!wM8ptKe7?2e#%^&QILVi-o=iqiwnL3zs*l{BD z9E(7HYRPw*blE!CbhI%-@;MGuMg|Pz~}@DJV-tV=qsm8#?C>? zur*BjU0lX~F>qtb@XTPLtUjrFIq1SN=`u9ql`7++;ZCv)gdnZ=7%(WU&*1QsZ7<|` zO6wmuKTrfkst&e{{Q?Zh=skuJGB$%@Tp4@AaDZUxI&e(3-@qv?(_RRI$g~Y-$*~U> z+SM=74%pm}@|-2gpc%65;IPr`LgG1`PM|oKL>VBloHALQ#5i0TJjDpQ4A!AxLAqXy z0AWejOE6{YB>==^o@1i`lO)ds2dy8Z$^c-b%eZuzF$Lo?P>@gZT`qLGOc{>WXHw6x zWOb6umKl36E+J!sI0JUNNPQ2=Wa`Bk@V3lzOxSE8$qUY4$>0GFUOw4(IVkSg*A71) z9yoY?;3@z##WEKN{AhqQ)bz~I(^)`+zU!r6H?Ynk7?zhnQZ>$9wwSSG5w?iUVlQLp wFJ&)U25fRU3u*uU2suf!;BRswCoM3a@%7{R_>uD%uopI=^vyTRO!bxi59F|WJOBUy diff --git a/apache-fop/src/test/resources/output_html2fo.pdf b/apache-fop/src/test/resources/output_html2fo.pdf deleted file mode 100644 index 7c2b4a0c51550a3033d6489ea16e79f32b11584d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14642 zcmbumbwHF|6E{qEC@2Qu(k06VEZreUBi*%xEDJ14cY_EhN+^v=ihv*`2&jaBgn*Q! zq##n#;Jb@;-|G8(-tWgh%bA^X&iv-g%r$3cE_O|MMLsZ4fQ-Gc=wUIL000DVwz^6t zE>6ZThk{$8olyWT85c`ydpJN*Lld9}N4YsTBLQF_n464W6Xk54<;RJy=xyd9Y$>2yE?9PHeB>({U)d5g4%!eu*X@|B4 zK*5+VwXp<62Lu|kFTWxJv#vbc+SvwPdu^!Z)D|20=SjGv$WwHp8 zz+pflEA~Gn00Q z|CQbl=d7wqmnP`CcBw&tw1^{@uzN(Y)P84aUWm8sNsX?XsIECuZ?cudjR7}Tw~L?qi}mf_+q>{yqRQj-fo?p#`bJvYSYP$v&$DPVV87B8dbY86}0-3 znE4;ys*kxv+t<``6eD{$*xbOa;B2>`urr?_vw0+i2%JqGz`=36Y?jIwIFwL?vtU9T z)G{W8Xz|6-OxiAfzkX)7=k!Jb$4#53BO`P3^P?m?CiDt2frDSrJM??gzOZW_1Nf<5 zL}os}X?ywXwOZG5Ncnv$MIwf*c+1rwZc1 z@;BJ6NaVj1M1KJ-Yuvr#Sd$-n0hh0rDBmO(cV<2yD2E0&q15;p-r;zag`a@tySlT7 zy?1K9TwIv&4DUD@{6edlv-UKN(3z|B-z7qtN%n)|2UBwSRNL$sMsvV|wfIA&|-GZaRA z$hKWDUf@EXuf?I1^~_?nXV^RKL(B>y&26eJ#CduAuqR?#XPEc10jw%BOWBI9a(sJ^?2$Aq}FDa~ZOAQ`!yd_(T zqijZ%(jdTNaMc>q5k3Amee8N^ym%R;&sHV}4MmUrsnl;jlQO(g-g+7mCL@uqpK*w;?1 ziMvMaB*`-yCJfytNVr{bry?GG4IQ}|qRNq)An|I=hSVEcbH^{@;KqSsbfL|?Q~58i z7!~N;>(55(F5ZEd4a*O!c$cly%#zKrwkIcY>a6nQ@*qyfwUZ^DPrS!drIV{uP`Fi? zT_`)CR!FSFpC6}Hdg{tG{_soOIm-{yvMH{dEIgU0Hmg0TO$ojAL#}&O=AQ`*Oq||*sxtF@n`OQSZQlW3b#(+>^RiU|VU~zWw zR6)}qSFe3vb@rP2t?b33JJ~h5=`MF@^P2FQJ663lEGBijTbT;ee=5IUx@F2} z(5lTTYgf=^mL8DKZ7N|JIEEPG8H3i+`k*B=>e2NdeK&ok12LCwtqo@amS**Q>!No1);itt!UyTkYQ%ObEa9y5kzN zW=dN}+QIhPCQmu@mE#p?-`T#;x#_vqw&!hwZB;srI#*I}y_V>7>!j~2F}Ap9KzEMr z>BUC|&y(Vk9Fhc+l8Y^PIeCKzfJHKn6;EQGwAD84(cOBvX*CBnPLYG5Q!P>jVd=1L zM6A<$r>c>y;eZOaijE4$il=rOWtnyjEzd@e^odo7AIZhO_-r_17*MX)_2KSkzsdo` z(ehZivzRuc9K)d4mT-Uz%7aGiiD;}Cy%?v+py-5EuYu)5wTBx(`!mkTiNIEq@mkTE z%O=!MkEUDD9WG*%Fjy;sDp37>nx&_lXPj^SQv}c&`R1L38=Q%Vi6NdS{!)fwhIlte zw-!Hn3A!ZIth?@GUGwV!}JAO^@>)=}(Y4d!UgY@!bMkjO_H@Su&1`O{Q@gh6Phv`s(&tCcU z9&~A*IDfX5Z&N14&_I1?dn#qMboK6P>&dN?9V~lvnrGO6!ljeC_dRV4XX?2&xEype zDo|)ywA<#=+02ynvxX0yme+?=T#Z~qsvmhF{Lp?^4*F#$!o}#~*n~MwalSLLsm!b%=|*B{j8AypVPHk68#Qcsi;4us4v;x4)`mOy2pTX4Vj>#q>B(_zZb@3CCtlIu@> zkgR({FvTg+G>xyr_4V*gC^r?2(5!4t4C*PHz;3rrL%&I_y69~op%RWyY60k@n|K3w zS~7vz@Tr#Pz3c%h&&;kFwVRHVcUla8fXj8%Ck>Va>9Lh87&=ruwx4a|`J%h8PpfD5 z@W?WD?C!cC|6t3*kH9y4M!EuZU4f=5W!h!cJ8yleKD*Ov(i6}V!Ma8ao~&7umdscc zm^vsd?yJ31JJay^OW}HvM(Pz9^=*;FkK-Z3EF&nlqSm*EvxT!N?U7aCh^3*fA+yJa zvvDsO&+ypl_kUztzP)l=mq_13_nf{{fsc8*p8vg;r@6&?c^=jumrUzS^*w!8ki~t) zyv4p%mrCb7>I3~Rg*wPJn{|%Y)yLD{qu+mK>p%AH{(#QNre&smCL-|V(YWpW+#J3r zal6qZokPb?Q&_0}v$fsaqQqgN2}NgK2?8o*YKdLg;%I7QDAhKDC8NV(*UZxqkE_1Q z#Qj=B;Nd%OxtFdjofjAVWUo+*1}dSvY}Z5XWrr)0Vb3iUx}t020s zATJUVl~>ZECEV(T>O3bAJ;NLG2VLol8z02H#}5z6$RC}FGqW*WuA4y@+?yzCI3#Yp zFhZP0BnlKWU#Xo&J@9qunv5=D($_HGsPS0wnf$CGG&ga!?wtF^R&ki|Ug`r0sLxkw55$D+7g?P zUU9cV9}^AKRR5W=LXI=mpQ)+1louwOc7&q=R&YB9qy)>SrwuFs2O9|%eL*#lnu{FV z-a*L+1;65>u4C=vXf0yHA|**iChjHb<>cao*%096gh0B9dP%TYV)A9UDCU1GnV&_H zOdMrnE2=H8_>BcKl3=k%qg_P#`8_>7fu2yHGs=!1EFvPp4}$PRAbc1OJ~wY9+R}>; z>Bjnf1$nreHOj#Sjm`7FZf0ZsV<8uJ6ykUp8*6?z0`3GyqTTp0w*h_@0CsmvD`$7K z1PgX48*5QpXOxpATGGsq#5cwKgYpd)MwTDA zkZ!l@2Y+JBH4 zV+DVf*~`)eBQxlCnK3g&zg^{YoShN>SFwNP!`K{V=64&%-rxS0`hVm7I{kQK_}@(a z2j?HvaeS&6fVtgX`O5k8Y6`|)Kfm6N0sLP>fD97pjK;8j_kL9eq$3%>HryHw zFa`+1fG`mVKuACYCZC=3)576O=JuGknZtYjeUK-L*$gSpfGgCYYs zmRp;QUkSjkO!kjkG8p;~QT_tYAL0DG?Ee)U7zhZ02m^$mLYPk&Kp2Y-GZcUUAwsaf zLxYw2PiTH#`u|E2A<$RFLIjT$D-PtNxcJ}MiIk-~+TIx@0S5h1 z#Xlb#e+BHD#lVCFfMA#aKo|mqV1U7dp+Et!z~8AD3*b*G7XEJr!!Lyi*b*Xt1SRs1 zrT)SVz%Y!3fCK>FQ9&^01j3I03oNYoe}Dz~uYN7%A^{VG{s|W3|INF>P!S*u2EhEH z1%!Yh0I+~CPz3x}M|CXwpDEEV4r|Xlf6T-e+UmaPp z;g_n5*lO&0t6XdK<;A0BzdH{$Y?{@t@uZi??|u#}U;31pZYs6kdZPlgUc(q^ewltg zO;@D}xn4&@$eXJ3d&Th&P<{6t7^S-z!&Mf*zKz`;AAOA6e}igflqB{ZP=B3a%x|L{kfG4iC<&v=ZXlOQ5I|6 zF7=IvG=>8s1pt4zNl-rv!G+} z#5-^8TdY-kYgDiCydvJt<_%}^2@FY0P3^9LImZMVam z$~TjXdoVwM2~Y97mQ;Rj@c~|ItNaQE(DMmoBXvxXsyWR8l%KS2!r7aA8%627KETtE z?2C(jxIT)O#HE3_Huz}95b`(NAehK2I^D5OrX>x*S0>`gA_w4Q)r8z}I0~hTkCK^m zTqIWocMql};_NgUlL=^wcTc(Ez&bo{yL$+WSxQy3)^ z#A&Ulr~%>GyXP(z`ZVeW;3)Vf^S|Wb?(oatAPJmAJr{o3&be%c(>ke*H*zsUf7fj% zbhKKD9DM02?$w11rF~VMZCRTNJ1(xB%cN|DvvT$-U(3weI46w>U!h|~|isCZ5eB^gcp*g^;p?~>hC zRi)z5pgON|%JBYa4}A}3r$@N+!xoXI^oW~|#6E6Kk1{UOX&;O}RZZ;-v+49P)&soD z(XQ5sSz%aa+*CHZUdBw}y%5$&&I!AObZqs8lK>sM1t6u8-uCW#|Y@yJ5+y7PV7{ z>o4tyd!A@YUaJyzGEF0q!xY~!tC1>Gx+$yIn=mKZr;p6KB9V}gcT)cuQK%;`M2l_i ziJZygB^*idiC*ANGT%cx$~T6PNFtPsoO~;br-AC6u4oVg^11rE`TkHeHF1ap-d6v} zPIZ{*8&BDYJ_C9Pf30(!Q z=#_!=cqyA{(Ma>YLmqCV!UF?Wd877dVpKQq%alj#wO#7ZB%bQfG6Yg{J<`Ct zI;^pnqd~AJIZn@-Sus1ssj1TY>C5@RSNl6!u{j=yQvE*vg(F7^tr|kgR>#Mq&heX0 zP{bQeNf_G^AZ_wZAj9WszE3xCML)O(uLzKb?w`2dUB$cOr)QqNBJ@TuMOzH8;B)KY zoK_S4L8Uy6dV&qo{ zXMMgUYaf-FHRS^xYxS+#8{b^ovO5@LBq*IlH)MPo+ue^Jw4;UAtF_81_6V1lykEG@ z7%D@KIC?pfMO=m$M~zQ6@*d%L$*;atYaa`!JGM_vx6xj(>ZP4Vm_QJzs0CFn%BX!q?{U=?q9vz|=! zL5P7v#_f>uDm>Mr?opcF0P5>OtHmVrR*1oBw{prY(-q$nGrMK5=lHyUJ7ILvDxWTP z>$Aw{$X8Kaa;cz|7ncvBSL7+0zr20#7Hv9c-HJ4Z{=J9I8jf{jk3QG69cgjtOGG&8 zmZoIqRc00tLMYoJCd}-ehjP%?Amcd6 z1BvyuAHdmI(M1$Q&N-c>qXpiP0U0}%UOn-~bFjq* zM8f69F-O`i_AU^xb19m5$%X2p1@xND1L(ZB-@C!=b@js$2iE>t;L`}zs5*7FP(G7-F>s1(s5LI0+>ld_?le#r=! z^e)=m$PwgAY|ktj9ac|jul=O6w|oh?nQrb^U8}gk#Y~~F$T>V6d5R%J-6D%okHfh( z@M5YCprxEoR6fMP-ZCCHI+y(MNC~($Sz_|NyvPe@ZS7r^MbQ0;l+p{$s#*le3!lQ$ zPb*N3YxQKFm-Is{Gr@J^+W6iN5P`WG2`}y%0G?^e<)r4G+L`~rQjny!zZs#n&Cbn0 zQJrQWx*w&!Da3b7jGOU6;c&>4b}G<=Wq=TSHE-54d`Iw%Jr!U?1YAX-z~2}UY9 z0-ftUX4Co=jYL9vmz^Vbffem3D?Hrfci!FHm%C6>=R3lFX{yj8pIWs>IjbXIVvB`I zSe;?_=HLv%=q)wkDVioI++!qVtE-`Ttc`+{ZqT!O7Qf_hOgUU8l{W2(qdj>UuCn4z zp@q!*Oo1~*ZFVURF8H5ZukJaii;DN~&MvE&P;WKOuo=>4AQGRlR%s?$k~=gPu~ zm|lfeXSX_uOGI64Zhv3&k!ZW@0L%>;dPO66ej}!+zU6gWUE5hgi+mY)d$!n0uDVUv zed|qXO3M4pc%8w4s+g3CP+>m*W6{29?R$;d%@iyDJNRBGRsPm+-;ad-o{r{&W?w!< z%c$A1U0-FO)BuOJHs_W&Alq2QL6xk7AZ_EeM%Z@zyN5TP(q*iKCQykxxALr~i1eiRQfl#H{`d)^r6E#nL^$inVeWom zF&KL37QL_k@bVKl{ykaGlb!Cau%n7wsVN^1y^ij7yudk78ZP5Wj;&=JNU~Jyx&ck( zNK_Q;B)Xa`d+LrZ=ZAa)Bh~viWD%^#U)iWPb3_XL`mUE7M!T6ozHxJGphhhIGEk@ob0bOS5=FBpas1K(7Y1}I%1{8Fvc zI!(rPE0QPk!-c3|+RA>CQ;t07B%y*rn`Z>%%IXCEZzwYqIhIGumqcfvwgwe;%d@w_ zAJgMsdVBuHT(%5oinZLZ(B{5}IV9DDthcbKG5b8a*T#ILt{j*8=_5jLPG2PJZTvoW zk+JlWWTGgk#EvY{Q>qrx-Q06P9(-z@(ikMY+Z|CYk#2HLp4GhDqz@36oM>|Q^-FVM zT2#cLqSM6^^rc=nUhF+u&8$a{XSZ)}L-;*vozGkBeJ+VD(jIJlzM#<%JDV4=h4Ks` zo5?0+s7VC`g=H{xeG?T>Wp4X;d8?h9PC z*BUXF+SG}A&B%$vvuwXmkk)cVi>g47#*~^$#XX;=D7i7RLsogVKIw#7dwWiEzO$?N z3Sk_4HyD-7|HY@XaK0sT5C{^$rhkc`?tfwpL|c>FrJ;S{gE| zOUOld=2VEx`v&$_FJyCX4dKiF-osBT-_OM$<<`1fdTVIbCB@>U$T?+~&;7(@44{mz~ zj%}eC=X#7VU2z|e$ccg}$G%pIO91Iq7AI`iUd9ttPo!NIz9^J*#w(+PuQPpQuk3Wm zqxb!%i8$3huNS;ENv!jZdDnaM<<8elT;qLZL4&f-K? zuLxd}cL$539L0$t@yE;ok6)NkOg_1w~~ zR;ox=0pp`EALEN>o?nx{oI(}x{Kf*K)3l?OOo~2_z(jZ8UgbNDi=k(!w8aE@2w8T! z;SW*@4YKSn=?k-2Q?W-?M{3-wE*qoNyV0Uj_Nt?zJ%)H>Vs6Qj)BYT#GXLue5toR`CT(rcNw3YXJQ%Ba;vb#Irov*$W%Ok{k)DK6<)z7d^&G@n3e06 zHxOpS%tly`$9WMz@Ch|klSidJF@I+ruSL(TI=I!fv?0C%(SrZ*bHQLf9$kuCjH%>W zs(`WIM%H7mbVS$t8_x(Sz^#O40h7Ce_LEVH_VIKHyCznh5)qeP@2HeLqU9Hqs(!3I zFT_E>EZSzdsdIaM=s>*aB_EaJc6OkffSk(SwJg`xN(w#OkrKV&+@oHS^Evd)yyOv= z)V|OtQZ5|2?R+L)WSWTWW9g5BSP_s_4&m9d@<((bY~eYy@5Y`fNJB zR_);q;}sqIlNq-=6%L2u+IQPxo2_3>l$GIc-HPrd`5;E((*L>HNS=mwUa^;zhV%iISNnCUGnDohAz@CMHt&y#m5SQTHT4S{7+lwv{( zrR-U4=4Z7|_;f}m$B-bUL~%YP;W-D^Ap4!6yR=1Ibd93ObMmd1d;@nAX-Z8vE;J-0 zeHLQm?lkXA_BOjlXP?#-Rw`fOU%?l^8$Z+!u04mjPUi{yC^j*?wvUvJxi zLNZ>|XmkV&=ACrP)x9O6LYEhN+CR()zf59eHG$6dAZ@(ve9Y_V8&7eQXm`jm_RglV zr`8HD%1SIG2A}pz6~E5Zzq7+8AZc(e($ds^0?Hyh_o}%@l3}%w^Q%e?4f$BWxLUfwWKc!!U+Z=S`)73KPieQ&?vS`ZYj@wMt(D$lI)aW z`$Wb2@(73ePPp^N>xY}GhVJyIxksAX)h`a=^`?(ZZBIYD;vsg?5c!-BFUBtA1dro8 z^w9Zo$vjPQMz(RsBW?Ex?wT=6r@np@#@<3v-)Z38?)y6PQ|VNcAC;yTX(o4f?w$jA zh*I~D-&VwXr}bowW##<~<)nc1J%jk30`aTVV?4r;wx&2pW;*!L%e^P1OKT`GT^!m-fMe&_(i997_yMHU!(R;o6jk+iw z-u^a-#~z{DEN$%Yl{B-+iq_`!nB4KH#?CA4ErEV-_&4A2Sw-yE1@s7V&ls2p?%G~=E@U~30`lmTqq>xol)Vud?-#u zAQKVkJrX}W{vi5M46obb>s1|)Lwng8x7^qRf1@Gqr&_f);^FUoz4{9aBCbg2>9n17 zo_B1#ac@1*B(A7j_@mIH&mB~ULvtCQWP2Vo^$mFFb;Y1zTVW`RVR16R9_ePlVErcR z@U(~%L6lWZPAlfN{f3H9V;S#`R+yn}Z-@ZW#L5PF z0#jFt@`hjH-F_H=+`jw_`Cj`%X8DEGGeJ)#;^&PR;uS0@ckZ6pz4kEgSr@1=+4Lw* za0ls3nT7OBk=|X|8#A8y+`J_8p{Dp2C7sP9X9s5cV6iZOc#yPdL&m=ukI8QeCM(sQnR(oFPuRWQ#E3!4$(nDGu`{^YL z@gUrJW7PO_!d(>SVQ}+WG4Xi)!5(qL(9n_r!_GSBt_o zM;m=*kUCF2>WjZman6)(iA9h;ug9HnAg|w5LXFN^{wqr{pv#)4j9n=X7D>eG%RXP| zK04Fd!Ws03evj`pRAaK^t_^K6O#K{N_5vTbb&-LwWjD+STa?l!J1+fVKEAdmK)$j- zzOrBnhgg;$jbJ~kWY{(@ZMd7WJIWgF2KYJ`L;6}})x`8OVHwomHV&4u&RzgxY}H9n zL=e*~AqWr_00V`EMNF|Aawun)|H&YWfWvM6Cx;Ho!Rdc8Xj-B$jaq;ouTLDet+-+8 zy2seCLO3JQ*j6sUadAu=+iCK>^X>Sh3v4+WA}9j+LHw>?VVKAd+V@&BOi=JA1Uu{T3^cJIVo$!V(pbnD;vzkahrmeFvlr(#_#J;a_6@ zEEWH^jg;UB4>%grpZ51#{VWFmKW@dRVTEvTbw9R{?_mBnx}Rm@|JN;Loe?&F4e|G0 z2&_T7VLFza-LZy5#;@XF;|4H3F0leku{F|fos{1V1M>#akMowpG)ZDA!&t)cGCvJb z71R0$;QG<`$BkwA-f{-`>VV%SsajgW5pIC5-uO@R#F+5cW(n-vW83+U zG9N4PyB57ra9c7E04hud`tgV9V-UoEumyajfuT?=BLw2Ky<_ds* zmqh@CX}09z_2?+is3rGMa`1^W7BEQpwg?_~W5(Hr% zKmV3R5QJ&m_>~61Hpu+K2NA-!*Do}I-}NUbh-s$!l@Eq#H2jr@>D>E`CX9I+{hJT- zavs)iuzx@83UlUv;QP~DkzaKRhGH!1*Y%)a(689QP{=>e7mc#Sw9TNfZz5uxQrp=X z4fyf2QbyW3128gToEGz)vOK_894s#@1Omwl3ChYVKok^&<>f^LF|CO*@^XUmP&pwP oNx=U%%duNuaqxj-{SM=iZfHvs`q&e}P$94g89Tdzh9cSj0h3>wx&QzG diff --git a/apache-fop/src/test/resources/output_jtidy.pdf b/apache-fop/src/test/resources/output_jtidy.pdf deleted file mode 100644 index 1d9456122cf14bda4aa8c1b8fb0a619bb8d86c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25904 zcmdSBWk6Nk);3JHlyq*oVQ;#-yBm}S>27K129Xw|yE~=3yAkPB2W|+my{x~0)PNp!&eBrya-Gp4kiXpwhjPl zAv*&ja}$8Lf+9fO#KFA#1koTcDLU91I~$q&zpDIr$kQF722LgbYEf=xAcz$N zV&(*KftXo1>43~sKp+(j0zW^3iH-61H?#e+003Z;2e2SK{gE}XF>^8pFf%`0RQ_Hd zZeiv0^j;=$tEcCRni$y{n|yzUqtlbk)(CEC>2F;%Rd$H_)*R)pUXqho!Fj&P6$Fb# z%kxEA$VQC=14jptBV7xsR%93SD?`zQX;x^znGU5!4%=LPrVN#!U9$OcLNp`)^6F}J zY3YP`$17v)?yhy`A@bTC87#+FwhV}^4lYO?7eaR5id$*_1?dpX7o6y&FCQ3zjZK|~ zrY10kZaitEKat1JXQDV2Ou3~Tgz4$`s8FgUvpti$LwygR~i;`tk1nir!Xq)D5+-~um3 z=RRAd(O@EM-HW5qZ8>gny_ZC24jhws+U$p`OWOhSCCh!?Iq;$)@C87Lyk~Tf z5d%?qiX6$Y47zKzC#VN*eaGyK0^JlRIJFb)9OsbUfL%fru0wV-Q%q_4EeTUqd~108 z^Qq3>Z{flZb3N@eVzy?xVqbSMgf6}bSowTTngIi|l-5sW@R^S*2HVwz_3d2|u$ zQ+#_}`sob&W*qZ8jxyG`d2w-jXJ-lSt1iBnkk8zs(^vf4O;7f)qt{F*UBQ_jV@;)T z!kX->nX7XQ#ckMwhs=PFyxotSr{!Y?gq;c-;Wwo2qBUNFP}!>P&0@TMqA?VPaH5Ze zp^v~rg_LB=#)3#~v7rK`(<{`yxg7=D$R5ftW&t zG9Y0V4Pqtn?uV-KCjelvVxI;1XTeb;OZzL6ppgf?6|&4yE+8m+v!7+UtFue(gx3W2 zOxX23i8;Y7rUxt;5I(Q7se;A|vHB$wCtOq@c4wg-atjorKSx)h9i$iPv9Cf`(mH+x z(rW|-5-<`{r*1F`c{-gD{ejq zDlVZWxhC2v%qjT7UzRd8j&I1Qaz>3qqV|}8bnCMOZ-4vubQV?SaemCRU|wkR|KodR1l?9 zfuRz{6eK~DeVCh;g`|R3gqA4xS$R$wztF6Zj1_4l0!vaRKXI}x>)ANv4E3w(nd}*a z=~vTH#RI!=D+xrBV>w9^C{wnRYlR0zo`vT#97Xj-FVuWWvr0D#JLjk;%%>W%zR1UC z?G-0yHL6vsocm!(4=K~>(!H>(pVcabw@#@`W!GpHy{ov=Bh>6urV=(Q9Mw;Molc|2 zr{}X`wL-hX()8TJiBF-`srAT%>Z13u@YeAX`gZA3VPC+Y0Mvq$93d^vWHc$*2j~!d zrDzL$3A8ph#W88aTtHNT<0adCKfJMGkuxn$G1^$E#9)dO)7m! zM@8p1!&oe2SyLNc+uziAixuB}VYm&_c_+f|l=?E2jXj-x%qr6QlXd;#)xzr<$C{xU z%bI30h008`_TILoZyK;Nuw^2VU6)#0TCc0sNB2`Mz3OJHz8$Vq+wv$AiV)24Tyeg( zb8tcDspXF3!RMjkn&VzGoX|8Vkt;c8G{?40N@VQQU2WoSl-5OQ{|sHJE1 zXtjKy?C|rU3V%p+yF%!gFH;Z4VEy8CR%X_Vq8H(7Iqe@Fl^<2WcYWXcmV(zqI72r2 zjrhf%r|mFg&f$w9XrrnUUQo|7YZ5FILIe*ZE?_zMv<-Mo+>a`v;^8zgTnN3>(v+XS z-gtLfahh`4hjxWFM0$&*h)vGOS+TB`<7%w6)k=L%ZK0}A*&v3pTNWs{9r?k(4l1 z4>_Tv#~A!)R=d17$au?msz$40`D2v~Dq9}gw3AV$o#?!V{Dl07+@^dR8A63~$zsV= z)C%Ys|D8SXJ?Fi07Gahv6R*LD0juYmfl?nokcLr zjkRUeM^C0wxw7HwtVjK&Grl4|6g~|5=%Qxr7bE!cEyF@R3$eXBxn()*_NvFCvtor* z6?T*auEe8N{{_-T2gl;R*@w?XpJfJv>w~Ng=11rCs~$c_brWLKnrciRksl@;C#b<_ zxTxW3SQmP{NLTm%(A%6>s-Ev+babHCqNm~Nd2CZURZ3UtSuats}w}HrgkOU4U1o@o(Db`qvB83b#T~My($cyD$Ealipt07p?r?594)TvR^toj zJNKjMd*}N+?yC>?m5627QToPuhb>!9g&)=`+aF;2h!CIB#@0_E^7^;n-foX~A_qzbXyXsak4TGIC`;;cZWKb-i6Jy4$^@Kv5-9<(+n) zKmE`XZOu%z@P#BZ>zf23(F*=HvcLn)b^bM(SoA$5S?}qOeT-)8gO$y-haGmMi-%pjN>YKOCUprh4WfWEv2A2nx=e>11E#;gjB`Z(CJ5^rkw0Q87s>V#`=qz z@(Q>;v1v;aCxD@enS~7>=}B`tDZs**k5q$A4k%|QVq$I~>EU3a;vuhU`u}?|6DdCeuY<8Ex3Z}CUsaxd@sXN4 zIoWYDF}b?BGP<%b+B%pqfw;K1n1IYo%*+f=H5eS-ZJZ3;7;GHLem+6e#L>vX!p`YC z&;QrUjE(+&ke#!G)sM#*8!?$!nOK|HI5{#ssR1TZ!1uQs7}`2J@sWOil(7-FsjY*x zffK)hot>41k-_%|GT9lM@-qFp^rM=UfsL87ftd-v8-ufrrH!qt&5tU77yqdA)X*mU z-_-*H2*kk5sS4ua1~GI0kPzHJ;Ex-AR6*cn`fkWSocOC@{!#LmTTiz9?U#)s`Ha50SPgQ@$09gwg zO9Uom6C)>p4uFl75eQ&qXJ-Vm0a%z>7+INF0jwMxj373E-jm3Fs`1@6;P)TGwhqQm zs`eixLVzEZDk(l71*mrG1f-2eh|F_S%Yke#iK@o$a)8M}FT|Hya{2au5i z!~tLhu`_Z4IRPxJoQy1-T!5#xVFWRA{8^{`0Egdn$}gDsvrcifV=yqbws?w*4z{Ki zRwj&g=61hzlJg(E{Rce+VtyKLtWVByJ&nGnP67fMft;KGRv_CSkGt=#{BGQF{lk(! znMqGBTG>89-FMdn42-^`0N+!=6HffjQRaV6)IV^P8Td5(*#GvE?P-3oKMltJgP-61 z`Hi2<|D5JO*Pp)66XoBoJ^_9~yjxnXhMwaRJF3@Qd4q%*r8pQWx!<0XHb-RYUd~O$ z%r?m=q})gJzPN&z1ZBCU$5m*l&`fFO(#=o?xQ3ObRvyJnQ-98HdQC5~Vlm3iGELL4 zsx!B%&F1`(Mu->rNKfCHd5tC_NlEucZlvKyZ(H8l*&AV7C~Yexo8mXcGruoxkiAy2 zpvj)QVp;87uu++O@Y65(;3VcVwcI--hbKYTG&sbnzpyzVk@Cpx3Ce7RjK^yv-GPnL z4Nf^$iqA4${Mrk(tk_X=76IZeNVfhEl*?`B*&%5f2;{yHzk?>Wx@vftV#&yB&blnO z&;@LuLe+g`-ZdscytPYrJvFA(uOBzxn~W5b3oi#5H5YAr#XdIGjjU-G7X~c^7Tr>@ z(zdcvKKbrSD@8GZ+-IKG+ZTGY&i%@q!xg(7n?0ZKo2PWWNrnxUsyZ=mR=YTAhQYEB z+={`L{)dJd{^|Di{AWc55cR_D+9YdyH#Sh8J!RDfV7+tp=Ob54#k5Ut{4gh0SM^xU zRs8&8EU>9BMDh1BC)gP*D{Iv+>r98LEu#Ys(3>1U%y7=sn4Ea+{1`xw4C~FAGQsRV zFqPRsU);&%Xx3r zbz{}~Rcf&;sBZ5hu9p>)DxD?jPMqkO%TC4YowDT2n3D?&$0 zpWgAdF=5yv=t$-FFCh9B6z*7yp1Vm0=|o9?lmJaS01^ztM8A-+No-oFY%jbD3eYU< zK&g>M6jrestl_NydG#l+Q|lI{k~U<2;BnZE@|7;CTFT^{*EGED@Ha~B{-P-co0?gx z^VOdwDh52vogj8_7tNzr$!5jLo~Fr(NpC;1`X23>v7QiMK^oZ#hpGVcJiSe5>JD{} zWMrYGKHdljW!bqs0qb&Hr3w(J<97&O874j_8dip*Ag}Z&wGg3tw9L zin3>bEC^e%n4&f9@oMn%#nq0bYWoL=+DO9&hlg!zY@8@O*h3-90pZ-`Oor3FO36KE0>tF0WK>w2Q7~-QYU7q3&GKv3X+pMxMq@C zQ%r0z{E#_IaP>3K7g!^|6)JkAuQp!7XEbdWI=R7crHK-qTMOvL4>dKXKECi!6MQX> z%AYe6T)yX|_xW*V*pD;mdA6Nu1uM0J=uAV)3cbooL~*4mCMd)(BJj3hAlGEEM*hIN zbMZaq`SB8wV|jiiB=gq{W@smETkG`f2>}x)wt`xsah7ivw;FCmM!4Bjl(9>fjA!p` z?`ZD7+&161d#qfZUljRL`;rNwe64v+D`G2~e?Uu|e1nN4!2*4LcQ#EYV$cSh5PFLk z(J#264}@5o@e0^IavaASYizAtz^yj7kUL2gg%J0R4#f2%zr_nYfmK=0kGcxEtz`;A_34hoTgPVkZ-{?dq~`Q|e>9TGB*Cl-Y7(NZZz@A|IDvWG&#sb+v^}>-VwYJODJt6ynJAuRr>C2$ z^F~HoGU52TLgS4LH7370%;;@UfI1*d&AptvVXdcnr+Trw?ilMiFkTrv%zzt+B)QZj zN&pDQF{ZxcaG;RgLfw{n`(UZZdY$R$v@b#fG6^2qqw>IK7|#t?d$Wvf?4!5Yd25_% z=r{7JzEuqd#Tg{W7q_B7 zj7NMo0J-v;NYzlj+~Yj+g>{_guIulhnDL_DDNTNmQ&d`bp(#Yoo4~irzm3bV9x`x? zUT%i6Hku#(FoBPgH(_$yd4JSVJ2LT=ltD)U1dVn*elx@H06^x$;HS}MdcFU}C_$>S z%53H?d!J{?!!i8%F4#o*)TFxmVhjqBspn9|mozm_m7?KW7UHmVut)RI+Bz~-HwXKR zDa;h@(jAps>&6G`*EODUK13Xo93*u%lf0P<#K3j|o_1-|v4;{j+2Aw5PL8^RR0O!Y z{!0!6PkOo|sY1`RE=jk^&9I(hR&Y-KykrHx9bY%@r5fM*@u;~n%xVD}cHbxk$iowQ z=8Hugu7nURR4GyFPa`hf79`*? zOwKH8itVg5>$-)xB$xbr$a#&og8n)n9-S)mqn>8Z;3tzL{a~EXVqpxU@^RX$U4KH3 zSg{pBwKeY(7)&wGnkGoE5}dVDb@5}a<*SZ^CPs$0OX4@5<-KvQIPw} zEYpeWfCoVBE%OKQy6fK9#oMTCF<=u$q~<7koY%1ASV&Ij$z?(>biy<-TAAw5h90yr z&@R;}&dQ{Xq;`R1Yp4?a*T8aLXUg@&M1xp|d-XHXtrWDoi3*QkqH5!b7;!{U=s;X& z3wADH0jv|**l}6FNg@%E8D2#}Zv@vcEO&sLSf5Kq7{B~C=nB>9(C=~df38z9|B}f6 zC1~>tT>gck{{)wxYWe9rz%R`Br@s6PGg!VuB3C2>^mYYqDQEii=EA)eOY+|%BlhWhcYo4Z3TI5N}%Y!flLk=$6X)M(&_YR~uPe%rt zpkhbjE(emHkG`cU&!gJ0g$kc{s(eA_)#pGO?Kp@0&RT~zjB_WpE6?((Z=qH<&m?z~ zmcfC&+B#E@QtcL1Bd+JrwXvr!r{Fwn#oI{ZfOBMCz=}3rErZg&mr*T|GMPT}VIZ$P zT~|(l|6{zV*-_d~yd&Y<#|%rCbuD30r7if>8}(goH{#n!vs5=4Eh9G{kwAO`6ib4> zhE5Qc#9Qnp-39|=dea_5^JTPU1kPDU#)wP*=-%DNi?wL9N~eGedZsEr&Im)urR$e$ zA$Y}gY^Oqj+u8WZV^dxOMVOox3zA`8u|>`zsnabbCR*smOKK@4nkiITd`T3VhovKv z_ZikxuS{&Ln%|z>*-gWzL|Sy2F5KXI;=FyXt=lmIbQ3PgQvHjzy0R9J5i*nwG+L_%JC`G&3{;@kJVfXi)}1Q) zTMm4&q+(cjpik(zdmb9&yd{Oy9Y&K&+D1LNYMPQbmob;!6~>-tlOM;81JHa_nD~|) zj)cV8v?-3_Y88t89aL2Qk{M(FtIp$beo0ckvyG(`cjh(^@LPX=8cbJvFu!`Y&iYMBg8B6U`~PUHbO1%%ALlIhC5; zaJgig1?=+r4cAf7=S9z(-?Z*-rGtl_JQLp4=8c0RMS>yF*PT_X40=7XRo&=DdOFyG zU7Jn(*i(D2JXGa@ZOabkAvC9%S_N7ppz=AOL=e#wethU#!GqprF-+*AshWNjufEj>MsC%@Y4aFcy>lIz2a zK)~IVXvb1$qrh&IxzCa{BIZ=NMj^janTeJe=2iYsp!Zu>Yt^sPFQ^Ws3xyM9_Yv72 zmzKLeEUpj@M0>`#M*B%Y&`ac8935I+9p+k4*a;RzS9921tJ~1(WT07`0t4G^8DaiE9 zG9FpRsEs=&cVNoZF`Z1j;=Ym-z6=gRH-v^XOSX2lr5~(%B8%WTY9MIYnXi zsQM$Q75`0Eu6kp;&2 zJ^|dTuwBLmmXFW}uP&_ph_vFGC`;c+nVCkE!HH9ImQ+^BkE12bm3k_?O+J{1%x)9N z3O{T3EaATxWH%?iFe?ce6!@69uJb8%bdN>*R4>PKi`39{?Z(Lyo`8Gg25TpnM{#4k zFl(u|zvgRzh(R|44;WOS5KdqoAGg^MtvV*pDps>33`(m($m}3+5_3t1lu2MS`oIwG z%lnFs^WJ-{oN*CBXgZDbS+KgBfW%{Vw7*%LU}9v)pM;{MAVQrGtQ z)yY|lG@d43O9LC#SV8w1WBzF(=>4odrzL&u6SOXR+$F62*C9yVVUD>c&l3R-#l|`d zoHJ>;9t7Me=MX^wu&Nr3EQVkEaUD?wU}O0BcY$(MeM0N~ftv=h`yywVgVF14uL(X{ zQxR0=!UlSAup~stLr?GuW!Jm73KDy4PsP907rYbdo*2OvyO0A3@9=~S){8~!YVT9X1mbQBM+E}ri5gxU%)PU!^Zvt6 z1MLRr@fyEj3jcMw^cPe3*OKf%n8FVN@Lh(2I5;_fs!Nuidj0#t|4*jyLv{aWb(yZQ zbDZ(noK54TQl!YQa}S?ZXt8v{j0Gj7@<-ZTg_O}L1T$n! zqM@am&Bj(Y6rLkM`D7&5O9K1Z;}xDmM8{`p#NW^%K&Ycg;Nsn8FhK}&hWmn|;e_DO z_)FMN?+!nB(QB6~>rG>lM+8;$J5|cm24cKU%=`i>u1|b(*S_Hrk415hNS9n%Oe!Oz zNv&s`YgPWucP4e<=+zl`^2J*o2O;zR$bufKX-y2b1OyU@LBNIK@h2{1PgA*D>MU4( zS~%6G0rJIL#!u(tM?^z;>gXT}q{}X@28B>;v;?X^?Xv_Jrp>^)hA8=_P+D;{LNb}uFT3eaIkybT6-M5x-$kEictPDs~ zRYPvGwUmN%&=$fNe)}XYJ30gBwb(7}OBI!dd&&DM3Vmgp5dt)9~O%Ufe{{cA0Y5 zy5CW-L4&siS6*Hfsrwmjk#RQ|2XwH^Tb?<}`Nc!yM^q?svT9hue>(FDr_z#gj)gmK z#J2D5+IB&`pJHv8{)JpWk*@g=OnE82TD=|)zbX3sFOSJ%toShZ%5vxy!cgJ(I zlIu!Y&=qlr@I@^RCRnMx&Mr|DD!xrj)I>a&c;2FE<^0g7$Xt)<4^~X{@QJ>LYRZyD z@U8Mun5%ZbZQ#k_06t%|tVvMaaAH2bZ59Ru<=lU6lz=P7~OsKWm2HUqJawtg&wDkBeUa^SFn?j}>QRlaj8D7b5rSZj%kBa1PJnoR92upB| z98{dxjk?|vA#0r*FgrG3Pasy}&3-6*jKefsS!w;&qrzEm5Xptdsxa3&4!t{HOVRYO zP#>GLePgSPi6Szo(W~07Uhdf}ueq^EOV%rGDyH&&C!AMfp1Z4x&3^az=|C*_=cxP0 zmrF+vnaoom?0k)kZHLv1e6oZM^vAtu&xF@PQzI|#F1;j|vfEPtFTNt@IR=@cI8V~J zTei~p>@we2lc!Cxhwo5*oUbGKxT9p-z?yR^Y2?Up8I1z$>!W(kFJm z!lvt*!d(C~DZ&ofoTY}c;6N_umD#@k$WwoL6x1zd$`=$U_C?E=2Z(ZlSd*_QBNbi@{R_dG07Jfc)~Tn@8TT3M}4#@NmZg{@xwt-GwD zVH+16X1+BZr;2ylXY;l}`*r8ib>WwrsWAHe57iAmgb$9V24}>isfjNC9-Uc!?JoVd z>9`+Z_kS!Bviw{R1c6xo)^RMql@q#;GIaRT9RP)O;EBtGAxjRvGa21+jjMn@>Q4HyGC*KdzgTW{mwU!t?c?ONNW-wx z>-bmDG%bq6r=Viw+&2e04U4(%;67c#CQHm?lMsxS>1IK%Mjr!vnBt3jwlF;=wb@6Z zNw_%d82BAVq9L~3rQ)D6P)NdaJMK8G_?GhVp-VUKpy3%&!3W_C7~tqP0--CnG9sSK z;1peIHlA{Za}GKlYn>6f_Tot1@{PTEW-;B)*>e4bB)j|aiY6?nxk50hR7rPdvb?VPNql^?SH5dEHsdc)^NMg}QDn`MIaN>Z}+^M{h?;NICghvQ; zsd(G-=`9to8%iKaaqBaWcKHM(nRiEs7I9TaMrU?l8CtwZcg7@T3!|^C~tI=$B>~o;K1-{C$ zIrc#a$UM9YP+8dvRk^i-{Pi#j{&<^kAoh#*%5k(ppxvXB&K2z>?4?hG_&0wZ?;(~Xl%ex>tDgCjsA9xZ((DQw%;CGs zs5kgg%BRr`&mFo}Iit9fPhQk7duJS9hfJN7Fobc*GQEn}=Es4s;lFHKI zEMAPDCD)B;;G1LS8>78f&V?ZGIoMJl4bNgA$Dp9)G2Yp|yJz%TK5VPWiUvJXEYZy% zC&(E{+CC0ZJ{;}nUI;x%$gO-J4?WWPa}tSiOoSN(PsjLkvU+{hlsxEGIks5% zd?tcu`&Ig;yDQS2SpKk&$FkyVWW{QG%F4_u`V}ek zrUQ)}sc&lH%l;Ky6^`N{_Zzo)dQv|#)wr6=1u5qC-IkPl#6bmS%-=xj&mE|z+@=4H zjkv!B&kwBppOE@<=M2Qg!Sc7@`6cOoLFx~!^q(O${qOBGA-97V2z-h-bc$U0aVHsH zWSL6#<12#&SgmXZwyLc#CxQtD%Ivlrwdz=9Ln22b@gf0_KcyCByLzf*Q4h@xuK{J|Aw%;}34O_}nH* zIYw`Ed0e-&-8S)_dC5v*i1BBId>S`8_376cWB(%ke)d#|1Oj?H0LkbL1Vh#@vKY+$$eAX=z{OT5s$3ffq*=u@tp&41hkT+)zv1O@|U81Y;&C* z>?zs8k;YG6VZ=uC^%U|&wdYbc>l&Ey$}@&x?6sQP3fNP|Vfwnr1g>b8z#W3gK?umK zxdaHO=na=AiCZj3N1)9HJ5qxb$O1H6}VjAZ#-g z)8~JWG~e)UH16D5?|omxyzonT2IJb&=OpQ3YBVeG?3}T3?^RU8A<%QK>^`!POi%m6 z*4hmk1mruYg$y0!%jt(ZZP!HSRh@u4uG3%No~FlExN(xdQp)uVf7$O#ecJcozCSZU z_w{40%%%ny3DyX81*pD&A^%yG0X%mdOG{!lObUv1-Nvk8;u$!8!CgwN*;Wf87=;?b zn{YQ0gqD(hHpU_~{ngLKXP-dH;5ko_fc)lbW(k@q zpxf?0Azx#R9fVSz37}Te&69L|)BRlW%II85IkBiL3}Q8?4;|Sh5iV9*(N81~FBz+^ zF{=w^xCM0*+B^MA2gEnD3J<*x?$sS#~0w>B3+{&id z_W9wdk!wiS!s*{AV#)N|O#$p|13PKDRRiKX;Y=b7qzythRzlB#P0}iaitX>6Ji}Lw zULOYposD;X%Nq-piYrG+L)qJSZF%9Ur>-2;3&kynat?^8Sjzl{Q4lCSEoq;^ZZ1PT z{VIQhIC@_AHii;lhMP|Wgl4zs8##K-%G2EkMDYU@z>6qooG}S^#!;S#KD?uXKuCCv z*vAqf)VBeys<{r6SG!3~2gwJ+wh2>FC&Z4_`idYL`rTe`7|YmnxXRIEYU{V+{9|*h z0tFzVAd8*I6p}V#qS~H&`Ejb$1)PA~CdwM067cj@%e&?(CrF!DYrQDI{dzXm3VIt) zrKxrY>eH);4?({C42mQPlg_c9E%lJ8nJSf@5h21-J>1gh+rA|9lMjp?E=soo8n3qS z=+gpO3(MUFNdp(=>cjyu_w>0gkqdBPd1U&>SN23<`@nW|1|X5CegL2+5Kp>iF$3cZD1f`HX&(pL`|Tkz=;8rXHt zZ8x{B3x`N4V_>>AgN!?{eOzr9eIYwlQJi|0HRuqkFcrWUC7b-k?)_szYj>uc%myksfUcLXkHMljAXb}ZDQ zx~~sRu_f2c=(B|SKs5WcpIqeIiwBSO?Ox?KYPM(IBaRoSMgImEe{Qq=7XstIj@fA3y4-Dr$MFda1TNq% zKNfJ{6l%?J=0m|k^*$H&{6u4ayX(1qk`=u^R2C16cuDC6#1c*I*=SNKim?xklg_J} zcGsOwDk4~8aQq6EPO4YBHAWZ+1wuh25fmW0kn4$5eYu?|y((ZBB=HW1j&&J4r`YqN zl4E*jzIwjLC8u$9wn~`Jk*C&H!=Z3rw|Jju?2Osl-ZsFbiRoxbh&TYw&KwCgjlU*s zY}~26(kpCG4ZNDLL3q{<@6Br0-gZ%rz8VEBiI*B%-(}U{&`n7gwnJ&rb;H|%qQOf( zc~y!^E!sr9m$UP3Y%6Obp27XA#<*)3%zTG$5QJjw;3is;?t)Q{9Sg_Qxm7B>7!UT^ z{M?jYad8|>?)kZ2HfASqL$S=|f79F!Fa*B!92Po!{)ut)!2Z*M(^|>ydXjKN!zE~r zeX_S(K zJ_nl6XLV_`cxO@!y>!9cR@l}8TBEYW1~0kLbkk=E;Vr`nseyS zk$}N`q>m49Hk0Q&{46mS)+Ru0uhBkRNY~#so0V=>|5jEMnL!|nd{zo3)zK@dKex1d zvXKTC>b=g3bhTI3pIaeN&V%l)5R@yPOJlIZCsYxtJj84!_(3V!dpF_k;B>V{mC8VS z`$4HzvRg=)RTW~oM@r|`FD5gw7ri@4p^wRKkUi2sgm=nMT`%4EWV-huspN%mBesk0 zYtQ%f+n#J`(BpV^yQ;jMgmhWXWh~)tsDONuH!dN9&13{v9zwiuJw|z?uu3?nNhGXv zn_M|+D;iR#c_E_TD8JUciend#N1A`JBL-ebn<*mfzg;f2?u@30TowZeds)p{qTk-u z)NucKw=09- zu)hI#`O+T-*%KzbtCD&j=ukKtY|daX)fEL!gH1bPb}d<2v_YN2fAI)mb)(BEtLONBH^Hxz+rh_CJhhugCJ7V^D*{l~+y2Cnto zLWA6A3nT7hikx*V>Gdsp8>rj9F*axNK5{`}8=||<=XXf5?C_k2?@1TdjRbj=T;m8* zX~`_To35w&Opx}7I6$X4T*6+9o~zOI<1^F&h2$zlZ=>KR6lIX&XK_VM!q>lGgmBnf zk8&ui*$f({%+*oyI}2S})OQ@$rBhkF4v&M-E}m*_h)EQ``ZmnGUe%kzpK|NpJjO^R zx4>)Tm+}m%F6+jk@)Op{>UsQ!;17g|9&&30qR6KbzN?@f;(ZT=D7-2{M~JBhgpd9) zkDA_#SQO!MG?fc0r7F~~-^;H*Tp!f<-LWyl@B0+X`ZwY&_L-m)5x*V43UxkSeEreY zx#Tf<*_ThcEOqhiOe!beS_TMapjH5@754#g{s8OY-yxCpSC+wln^ydRb^k*v{y@4P zn`3Oizt3YnW#s%y5Bh6!jP*y>%72E$bd5EIB}vrRV=q9_V*3ntQ>&j9#TNZV)zY<7 zu85*M?T+Ls7%NqlpvG4oPSR_i*|(&2=m~yAW?A!MIUgx`F#71bImUFXV8xkJJP-{Z z)U$PD<>1xX(P7nAYY+?gNG(kf?dK>QnU#PCUX6MGWq*+Itf?@Lk_oY4o7dlBaVs^a zGN!}!>FDLuS)KX%9b{U0oEQ9K$8a8pSO%rcJ9W7XMr-d2s$qWFQM355{+#gTIF(p3 zj`w-41z$ALdLuw#_8}o}AM=YO^lNcoH%pvzwoNXv0%E;RXjpr zcb`%eCx1(6^F!70O9o%T7?fy{2YU`BO=9p0pYB*&V0vf6-&ZV z7u_N&S0#B`+a9e|BXY?z@?P? z#y+um(TDfof90{$KdrPm{RG~@%T!g5a&&oF%p^C%cyM*Rt3iwbZ9q`q!Oe!^%U%1T z{s7u$#RN{VSSj%v9{{yp!KKR<`r`{qRN~Ecgl-A*zT5Cp_8Y$})5=wwQ?T#}Z5-2) zl?L&KmJxo6XSh%`07b;tOI|FP(J33li{I3aM6yaxZ^l-xqkZ)p*FLGsHZh%^-NIoD zsjbeebZy-5-OlV>7wYl2e?>s$7Ea%U)Ge8&-u=j)9_XQE)60!WBh8H4@2s+oJ3Y{= ze;GP|2)&=698o_&rXFXKaR_T(zR{=@S1`Cz_C^9e92IW*!`&misB!}I;-YEnLay~8 zB5l??Jhjd7w9UpKG%{N1=srhUefE6*ZWc0Wdr`H_oRj-Fc(GOK=o-hmPpqtwJ=CHC z346?imN=uIroc4?IP#_Yz+2PhY*Wt|B?df@(T?8oPC1>bSClo)v0+=;<)|toz4jqP z(>@F)m0>#`1Ds{WmoBuT*oB$^3ahmeF`VPL`;EEWE^m2n;5~1~jeiree{M4U_o{A%QGRBv*S{>4N^Wb~asM-UTA zuMY5Zm4Dr6;?NSMKHARPb`as4Un0Zteiab2#lDT6c1iyMzBm(WuDC}cBIkM;no14M z237ltl=bakpmJ$#4w7mdeAIRFKG{-oX%Nv@R-sQ&j1zCp2cY;sv!TOKS)^0Xjm+7N z?Bu25&}*myx2eUxwhp5?;!=j1k{d{qY8FM0esO!)c$rQ&=YjzZPKln2@v3_& z{>H{fClUI7RvWf#YM48LikBF3Fll20cFlJW_LRLH!e=KXxNh$FmSxnkTmai;Ztvl` zn_~_hzRiLij*Z|m%vr8C%s>(q)xhj6GXINhjg5$P>5Pylh)Z;K0=+;*qtYJ#;iPhP z*I6xU9pI&k&8gxoPnrdLC3N74lv<}54&2Ttz|=w4=Q$CV%BIO~ zp%*9Js>LA@8@sH_!R;r_C0&lE9GBuW>9J(83fc#2iDj23Bdvsp%x-97fy|+C0CsHp zsE6uMk<4DRn97h%CjpX2!^NvC`vcIKg%^w#LJqN!I%y;sanBubm~!IC?nR*clnxpwy@(8o>=^-osLK6reVT}dHr0M0ns=97M$=k1ESButX-p+X`~ad?)6xJn@4 zaM;9@z5@~A^CG0JFVACmJ*ZS|a7ep&Se1U^9Erq={FD0|jKp}WH}@shCatZ3*ge~~ zpL~;vY%=gEg!5Gcb8!XwBBizHN8mVCG%osjd{%E1YJL;hey;WZ7e=-p$vpo|7<$S% z{ul4$Vg>#TY;3>S_Mc@%|1L3@?VoEre~=jbBki8!DGwOP1pqyzcmtoZte!HyL0o^7 z;Qhno-(&@|{X(HXa^<(4{F9phsVD4QKt^^h0OwO$H;@&;0R%B}{Glg5PQ?9tsyf?G z2>Qdcc@7pvW&rzBvOn`vdp{> zEWmHu_MaH~2W`v#G%%hVVdH%IbOs2(#mUJ2lqLU^>c;q#0r)3hXJGqrqUASk{hS8h zTlY`0ZBWv2d_5vN8X3iIt6w@&D-3zt&v;?duHe|D45tDN6S5 zlkyJ|GZHnIqLxKbz1Pak;o+fUk1j^)PlW};!Qe^z!B7HW%k$0hYKc4zJzc8&qjwUR zs_T|mV#o(qn~D_Dxt;eO?8uTk)^u)BDZ)(dQc*bkt!>-1R$6Z5s{%{e$IOfi8s#BK zBEsG&>yn3}l1^CFn)$SSow3ndQMLFq=-;YAYiwK9%a<2vLUXr}acZJY6#iyKpt9L} z-{A^HXTeINfqrBmwa8w}=78y&VKK4ou{uXPn3Ss{A|o99GMqNAUtYGaOftC?029&O zij_aQ3weQLMSGU(HM``?_mF85i!3p#8-cKuXp`NcuJ0048yy*-qoGC-NxXLqLA@R0 z?d;;WRr`=LFViL9ACjRWSl%3j2uI28eBHU2u-3U9!(LbIFfyj@4W@qSk55?f|5bDC z@lb7h{6wyjZl&@nY{@HRX3sk*nK7Q_{V0!8#v{W_Ly}UFPAN_4q=(Z>-K0~=qZC5A zqCAR-p)R2u@8jfp9Fn{C9z!$xe(pWz+`sPpGk#ycwSH^;)?UB0ervD!mS}&& zy`|nT|M>9eK5YxC;a-SjE3agv;C1cO?#a@D$3yr1_7snNYUX<-AJSEbE3>2fLXK(m z!M_aOJ@j;s+Dfm)U>ff8Zvh%f4&8TNO(A)ARgflRy7xeYPb??USnOOm1zt*g#{Z1wU! z&0W4B5N8Y-H`qHs!T1n?2vn$_qP@SpIat464I*%NOoVUi8mPCTaE#M=ah@ z@+(3T*Xf?(t6q|eJRMlB@=-muQrl;(%jr;MXCr1)QD9o$U>DS3PG5CQVDg0=T)xi} ze{(B*BnKuW%^I_;zC6Ni99Qz=89cxD#^AP3&%i_C)-yUS2U|%iUb5svNrzc38BWBm@f+bfzIdp&YHx+?p#-(G0-;Hl-vWE&R#9Gk5F-54pQ_+g$>{>R?F z8~4;Nn|eF)&m_ybY>VlBnA4P-eA9bmyGnP-QcKV5&mNgsf^$nMKD>@Rsp+QYuBY@O z`t=XV)Lj2E#oVC3UmAOx7^Ut}xWnyT`TTnk*2nei?X>KaJq$1GC=K;$?N)ml`8Lg^ zWbxrR9Xg3@QZbyKK6k9RvGR?>4USv;cMDuEHs&Wc9s>R-n zuOaz!u0?AaEpzXC$5CJOWI>Z&`pX{_3znA(Rx2$1UU{R-k&MsY+)345a8c!KseIeT z%xbN^LcxwTsUP;fCbMLCuSWG#%j=J3dDPz0PfRub$xhcQz)Yp&+=mULIr%kZs?U$f zy8Zf0E+R3}>YA*1^_HL(X@}%>`lQskwv_qXZ=X`pJ`h%U%LU3aL<+nD-|6WQiU7 ze9_;EdKSEM%(B;Ly5y|r?-F6NAdbyS9Z2)zXw8fChwKQf7E%4J)2L)X3g zT1kSs1SyUVzx2t*puCKbWeH)owaNF*77%^a3pU?3vF6+Ct2w;nfvZB5&K52?bzjLa ziy>zq<-gd};F-+9-oNhLdBw_ygYP)7s$sY(hZSg5HWA$Ue)uoapB_aLT~&QN4o26W z$Q<>gJZJJ3eu&lb&xeM~@-|pBrB+RJcyU#94Et@izNQ%8RWGQQPKlJd6%R*wtmvq4 zd%~4#buS<~-e&DOBCqc{E?8`1ymxGpt+$9v=RaHN#hu;P!0M-1>`@UJVu>G?!mqV^d*)n$^Lk={WW~!E{)qyXS#*(6Qxg*V^7KTMzr0 zho?aC3B8twd}2RdR)rc*$#%x1YSi=96hB9~Gz+#aJHN@DAM7!pzM$=jU|2Cb?zzbj z-8s9AShmhldPAYkmG5Pw*Q5<>%`MYwX?o_?C8Z%{Z%Uds;6C1Z?8R{BHj?u_t&{OA z-8-dm!x6hWBd#i}XGCmb1=qYX=fypVNvkU|og1JzG&q>GzrEjG5q6nZf3>=ZG;w7f zYuoj0#WmGMVMkjx&2rYTn6pQtR#9VPb%RpNqSzyKCv+b0jqWF8JLqPsj^_P%RDF+T zb55;6p-+uZhlYIn=J2EKrevqPHv@N6wkJ%Ojv2KWQzoTOEZH)S%?ZE)F5)6UH@;4C zBxKhJzR)vVIg)VWO+s(~%y1D9XZ8yJC+FHzWCUn`QFemqOHt^4L+sQ9-EE);-Bft` z-7i_>DPi^`-19L3qXFW8X+|yt#v=&A?T7pqGPYu|BUs^pmkxm~LIH(zP-p-IF8hUU z2n`Do0pI2}#LwCLebRGh}DO4h&xfY;8LnWcUH^K}x#WMNt9#uLZkOXvCNbAvN%zZ<-TPA5js}@j=4*KUK)icRPz61_^_~x0fYAJCOMzoEqq3KlLXbLg$T;OC98O z!Xyz?$0R_2KWmC9gb7kSVZ1^9LxRY{YzMJ`SmtqdI0GU}Ph-F#57_BKfEUfDzUg3k zup+~Sq$V6Thvy7fFIfP}5hh5s1xJLjHi&?$4^x%|j&>yLBO~jict3~~WUZ0FsDS@Z0waUN4GcyBe1VdB z6eKW+*GI);eL$ul;Y31@fKUsGVR#(iIF-O~R00xbB=m?lOj$e`oW@}E0H>h@hNmL0 zB*g0@kPx;baSTsIroT8wpkVxrClQdSD5-}8MR5$w0!*7Jc;x-Hq#kD6@Du_O(+?^c z<13&?mK+Z}m5TKhjfzBTal2G1##ewj5joNn(}Q6e=9vU~7`tF3G2;fxBDcN8>%+km zN&mq(0%k11ksC#_&4B+9^GpH^^X$SnY&-xM4bwL~4q4j7+ed&AvM5Om`Pr8QM!<|Y zOaLcP7(EhMaxB5jr+)Kng!6m>8zygR<#OV1!XaewMAs|pP=5|Iy+&CxAkVb~29AKI z;}~Qdg+{oX@&y0@ From f69f3de06ea8473f0a79b339c60559d7efab57f6 Mon Sep 17 00:00:00 2001 From: Josh Cummings Date: Sat, 26 Oct 2019 09:32:05 -0600 Subject: [PATCH 205/304] Reconcile changes that were moved to core-java-io --- core-java-modules/core-java/pom.xml | 70 +++-------------------------- 1 file changed, 5 insertions(+), 65 deletions(-) diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 7f2694b346..9d4bee081e 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -48,51 +48,6 @@ ${lombok.version} provided - - org.javamoney - moneta - ${javamoney.moneta.version} - - - com.sun.messaging.mq - fscontext - ${fscontext.version} - - - com.codepoetics - protonpack - ${protonpack.version} - - - one.util - streamex - ${streamex.version} - - - io.vavr - vavr - ${vavr.version} - - - org.openjdk.jmh - jmh-core - ${jmh-core.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh-generator-annprocess.version} - - - com.h2database - h2 - ${h2.version} - - - org.owasp.esapi - esapi - ${esapi.version} - org.assertj @@ -100,18 +55,10 @@ ${assertj-core.version} test - - org.javassist - javassist - ${javaassist.version} - - - com.sun - tools - ${sun.tools.version} - system - ${java.home}/../lib/tools.jar + org.javamoney + moneta + ${javamoney.moneta.version} @@ -437,24 +384,17 @@ 0.4 1.8.7 - 1.1 - 1.19 - 2.1.0.1 - 61.1 - 3.10.0 + 1.1 + 3.0.0-M1 3.0.2 1.4.4 3.1.1 2.0.3.RELEASE 1.6.0 - - - 3.21.0-GA - 1.8.0 From d6b68dec07255d393977b5a3fa288972e5daf48a Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 27 Oct 2019 01:07:52 +0530 Subject: [PATCH 206/304] [BAEL-18428] - Check modules that don't use our standard parents --- micronaut/pom.xml | 268 +++++++++--------- ...va => ConcreteGreetingClientUnitTest.java} | 2 +- ...tTest.java => GreetingClientUnitTest.java} | 2 +- persistence-modules/jnosql/pom.xml | 7 + quarkus/pom.xml | 220 +++++++------- 5 files changed, 259 insertions(+), 240 deletions(-) rename micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/{ConcreteGreetingClientTest.java => ConcreteGreetingClientUnitTest.java} (95%) rename micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/{GreetingClientTest.java => GreetingClientUnitTest.java} (94%) diff --git a/micronaut/pom.xml b/micronaut/pom.xml index 2a8d135483..02ac36218d 100644 --- a/micronaut/pom.xml +++ b/micronaut/pom.xml @@ -1,136 +1,142 @@ - 4.0.0 - com.baeldung.micronaut - micronaut - 0.1 - micronaut + 4.0.0 + com.baeldung.micronaut + micronaut + 0.1 + micronaut - - - - io.micronaut - bom - ${micronaut.version} - pom - import - - - - - - io.micronaut - http-client - compile - - - io.micronaut - http-server-netty - compile - - - io.micronaut - inject - compile - - - io.micronaut - runtime - compile - - - javax.annotation - javax.annotation-api - 1.3.2 - compile - - - io.micronaut - inject-java - provided - - - ch.qos.logback - logback-classic - 1.2.3 - runtime - - - junit - junit - 4.12 - test - - - io.projectreactor - reactor-core - 3.1.6.RELEASE - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.1.0 - - - package - - shade - - - - - ${exec.mainClass} - - - - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.6.0 - - java - - -classpath - - ${exec.mainClass} - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.7.0 - - ${jdk.version} - ${jdk.version} - - -parameters - - - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + io.micronaut - inject-java + bom ${micronaut.version} - - - - - - - - - - com.baeldung.micronaut.helloworld.server.ServerApplication - 1.0.0.RC2 - 1.8 - + pom + import + + + + + + io.micronaut + http-client + compile + + + io.micronaut + http-server-netty + compile + + + io.micronaut + inject + compile + + + io.micronaut + runtime + compile + + + javax.annotation + javax.annotation-api + 1.3.2 + compile + + + io.micronaut + inject-java + provided + + + ch.qos.logback + logback-classic + 1.2.3 + runtime + + + junit + junit + 4.12 + test + + + io.projectreactor + reactor-core + 3.1.6.RELEASE + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + ${exec.mainClass} + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + + -classpath + + ${exec.mainClass} + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + ${jdk.version} + ${jdk.version} + + -parameters + + + + io.micronaut + inject-java + ${micronaut.version} + + + + + + + + + + com.baeldung.micronaut.helloworld.server.ServerApplication + 1.0.0.RC2 + 1.8 + diff --git a/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientTest.java b/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientUnitTest.java similarity index 95% rename from micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientTest.java rename to micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientUnitTest.java index c8c1d6b12a..336374d5a6 100644 --- a/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientTest.java +++ b/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientUnitTest.java @@ -8,7 +8,7 @@ import org.junit.Test; import static junit.framework.TestCase.assertEquals; -public class ConcreteGreetingClientTest +public class ConcreteGreetingClientUnitTest { private EmbeddedServer server; private ConcreteGreetingClient client; diff --git a/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientTest.java b/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientUnitTest.java similarity index 94% rename from micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientTest.java rename to micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientUnitTest.java index 0f2ca460ac..c47fb3a31d 100644 --- a/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientTest.java +++ b/micronaut/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientUnitTest.java @@ -8,7 +8,7 @@ import org.junit.Test; import static junit.framework.TestCase.assertEquals; -public class GreetingClientTest { +public class GreetingClientUnitTest { private EmbeddedServer server; private GreetingClient client; diff --git a/persistence-modules/jnosql/pom.xml b/persistence-modules/jnosql/pom.xml index 513a447b91..91ceddaadd 100644 --- a/persistence-modules/jnosql/pom.xml +++ b/persistence-modules/jnosql/pom.xml @@ -9,6 +9,13 @@ jnosql pom + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + jnosql-diana jnosql-artemis diff --git a/quarkus/pom.xml b/quarkus/pom.xml index 5190d0932a..31e3c8f8a0 100644 --- a/quarkus/pom.xml +++ b/quarkus/pom.xml @@ -1,115 +1,121 @@ - 4.0.0 - com.baeldung.quarkus - quarkus - 1.0-SNAPSHOT - quarkus - - - 2.22.0 - 0.15.0 - 1.8 - UTF-8 - 1.8 - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + 4.0.0 + com.baeldung.quarkus + quarkus + 1.0-SNAPSHOT + quarkus + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + 2.22.0 + 0.15.0 + 1.8 + UTF-8 + 1.8 + + + + + io.quarkus + quarkus-bom + ${quarkus.version} + pom + import + + + - - io.quarkus - quarkus-bom - ${quarkus.version} - pom - import - - - - - - io.quarkus - quarkus-resteasy - - - io.quarkus - quarkus-junit5 - test - - - io.rest-assured - rest-assured - test - - - - - - io.quarkus - quarkus-maven-plugin - ${quarkus.version} - - - - build - - - - - - maven-surefire-plugin - ${surefire-plugin.version} - - - org.jboss.logmanager.LogManager - - - - - - - - native - - - native - - - - - + io.quarkus - quarkus-maven-plugin - ${quarkus.version} - - - - native-image - + quarkus-resteasy + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus.version} + + + + build + + + + + + maven-surefire-plugin + ${surefire-plugin.version} - true + + org.jboss.logmanager.LogManager + - - - - - maven-failsafe-plugin - ${surefire-plugin.version} - - - - integration-test - verify - - - - ${project.build.directory}/${project.build.finalName}-runner - - - - - + - - - + + + + native + + + native + + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus.version} + + + + native-image + + + true + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + + + + + + + + + From ed95ec46ee54184ff460213fe249aeb66a19f5ca Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sat, 26 Oct 2019 23:23:30 +0330 Subject: [PATCH 207/304] Refactored the packages. --- .../src/main/java/com/baeldung/{tx => model}/Payment.java | 2 +- .../java/com/baeldung/tx/ManualTransactionIntegrationTest.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) rename persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/{tx => model}/Payment.java (97%) diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/tx/Payment.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/Payment.java similarity index 97% rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/tx/Payment.java rename to persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/Payment.java index 37f3d09381..2c24e5777e 100644 --- a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/tx/Payment.java +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/Payment.java @@ -1,4 +1,4 @@ -package com.baeldung.tx; +package com.baeldung.model; import javax.persistence.*; diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java index 62d64d4372..a0a90ef5b6 100644 --- a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java @@ -1,5 +1,6 @@ package com.baeldung.tx; +import com.baeldung.model.Payment; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; From f22fddfdb38300388b89f974658ed0f36205d3eb Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 09:59:48 +0100 Subject: [PATCH 208/304] #BAEL-10229 Fix the build (specify the Spring version in the ethereum module and restore Spring Boot version 2.1.7 in the spring-boot-persistence module) --- ethereum/pom.xml | 1 + persistence-modules/spring-boot-persistence/pom.xml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/ethereum/pom.xml b/ethereum/pom.xml index e0666e49d8..f340c311a8 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -32,6 +32,7 @@ org.springframework spring-core + ${spring.version} org.springframework diff --git a/persistence-modules/spring-boot-persistence/pom.xml b/persistence-modules/spring-boot-persistence/pom.xml index c7cda07a1a..3ad925f16b 100644 --- a/persistence-modules/spring-boot-persistence/pom.xml +++ b/persistence-modules/spring-boot-persistence/pom.xml @@ -17,14 +17,17 @@ org.springframework.boot spring-boot-starter-web + ${spring-boot.version} org.springframework.boot spring-boot-starter-thymeleaf + ${spring-boot.version} org.springframework.boot spring-boot-starter-data-jpa + ${spring-boot.version} com.zaxxer @@ -35,6 +38,7 @@ org.springframework.boot spring-boot-starter-test + ${spring-boot.version} org.mockito @@ -99,6 +103,7 @@ 2.0.1.Final 10.13.1.1 2.3.4 + 2.1.7.RELEASE From 3d44723b9198ae87e292c974645ef515c3ca629a Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sun, 27 Oct 2019 12:30:41 +0330 Subject: [PATCH 209/304] Added a JUnit 5 extension to setup postgres --- .../java/com/baeldung/PostgresExtension.java | 32 +++++++++++++++++++ .../resources/application-test.properties | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java new file mode 100644 index 0000000000..3c5c7b002f --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java @@ -0,0 +1,32 @@ +package com.baeldung; + +import org.junit.jupiter.api.extension.AfterAllCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.testcontainers.containers.PostgreSQLContainer; + +/** + * A JUnit 5 extension responsible for setting up a Postgres instance before all + * tests and tearing it down after them. + */ +public class PostgresExtension implements BeforeAllCallback, AfterAllCallback { + + private PostgreSQLContainer postgres; + + @Override + public void beforeAll(ExtensionContext context) { + postgres = new PostgreSQLContainer<>("postgres:11.1") + .withDatabaseName("baeldung") + .withUsername("test") + .withExposedPorts(5432) + .withPassword("test"); + postgres.start(); + System.setProperty("TEST_PG_PORT", postgres.getFirstMappedPort() + ""); + } + + @Override + public void afterAll(ExtensionContext context) { + postgres.stop(); + System.clearProperty("TEST_PG_PORT"); + } +} diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties index aa7093f751..b583f03c67 100644 --- a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties +++ b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties @@ -1,4 +1,4 @@ spring.jpa.hibernate.ddl-auto=update -spring.datasource.url=jdbc:postgresql://localhost:54320/baeldung +spring.datasource.url=jdbc:postgresql://localhost:${TEST_PG_PORT}/baeldung spring.datasource.username=test spring.datasource.password=test From 9a5f59c2faf2ea28409500f848af22fe666ebdd7 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sun, 27 Oct 2019 12:31:13 +0330 Subject: [PATCH 210/304] Refactored the Transaction Template tests. --- .../tx/ManualTransactionIntegrationTest.java | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java index a0a90ef5b6..af55024b57 100644 --- a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java @@ -1,9 +1,11 @@ package com.baeldung.tx; +import com.baeldung.PostgresExtension; import com.baeldung.model.Payment; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; @@ -15,27 +17,20 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; -import org.testcontainers.containers.PostgreSQLContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; import javax.persistence.EntityManager; -import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace.NONE; import static org.springframework.transaction.annotation.Propagation.NOT_SUPPORTED; @DataJpaTest -@Testcontainers @ActiveProfiles("test") +@ExtendWith(PostgresExtension.class) @AutoConfigureTestDatabase(replace = NONE) @Transactional(propagation = NOT_SUPPORTED) class ManualTransactionIntegrationTest { - @Container - private static PostgreSQLContainer pg = initPostgres(); - @Autowired private PlatformTransactionManager transactionManager; @@ -160,13 +155,4 @@ class ManualTransactionIntegrationTest { .getResultList()).hasSize(1); } - private static PostgreSQLContainer initPostgres() { - PostgreSQLContainer pg = new PostgreSQLContainer<>("postgres:11.1") - .withDatabaseName("baeldung") - .withUsername("test") - .withPassword("test"); - pg.setPortBindings(singletonList("54320:5432")); - - return pg; - } } From efffd26f508c5966c80d789c22001f7f61808951 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sun, 27 Oct 2019 12:31:31 +0330 Subject: [PATCH 211/304] Added Sample Codes for OSIV --- persistence-modules/spring-data-jpa-3/pom.xml | 4 ++ .../main/java/com/baeldung/model/User.java | 42 ++++++++++++++ .../baeldung/repository/UserRepository.java | 17 ++++++ .../baeldung/service/SimpleUserService.java | 24 ++++++++ .../com/baeldung/service/UserService.java | 9 +++ .../com/baeldung/web/DetailedUserDto.java | 45 +++++++++++++++ .../java/com/baeldung/web/UserController.java | 27 +++++++++ .../osiv/UserControllerIntegrationTest.java | 57 +++++++++++++++++++ 8 files changed, 225 insertions(+) create mode 100644 persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/User.java create mode 100644 persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/UserRepository.java create mode 100644 persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/SimpleUserService.java create mode 100644 persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/UserService.java create mode 100644 persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/DetailedUserDto.java create mode 100644 persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/UserController.java create mode 100644 persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java diff --git a/persistence-modules/spring-data-jpa-3/pom.xml b/persistence-modules/spring-data-jpa-3/pom.xml index f743fce2a3..e4c83dac10 100644 --- a/persistence-modules/spring-data-jpa-3/pom.xml +++ b/persistence-modules/spring-data-jpa-3/pom.xml @@ -18,6 +18,10 @@ + + org.springframework.boot + spring-boot-starter-web + org.springframework.boot spring-boot-starter-data-jpa diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/User.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/User.java new file mode 100644 index 0000000000..94d0c023f2 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/User.java @@ -0,0 +1,42 @@ +package com.baeldung.model; + +import javax.persistence.*; +import java.util.Set; + +@Entity +@Table(name = "users") +public class User { + + @Id + @GeneratedValue + private Long id; + + private String username; + + @ElementCollection + private Set permissions; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public Set getPermissions() { + return permissions; + } + + public void setPermissions(Set permissions) { + this.permissions = permissions; + } +} diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/UserRepository.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/UserRepository.java new file mode 100644 index 0000000000..bb3ce781f6 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/UserRepository.java @@ -0,0 +1,17 @@ +package com.baeldung.repository; + +import com.baeldung.model.User; +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserRepository extends JpaRepository { + + @EntityGraph(attributePaths = "permissions") + Optional findDetailedByUsername(String username); + + Optional findSummaryByUsername(String username); + + Optional findByUsername(String username); +} diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/SimpleUserService.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/SimpleUserService.java new file mode 100644 index 0000000000..6782254f61 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/SimpleUserService.java @@ -0,0 +1,24 @@ +package com.baeldung.service; + +import com.baeldung.model.User; +import com.baeldung.repository.UserRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +@Service +public class SimpleUserService implements UserService { + + private final UserRepository userRepository; + + public SimpleUserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Override + @Transactional(readOnly = true) + public Optional findOne(String username) { + return userRepository.findDetailedByUsername(username); + } +} diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/UserService.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/UserService.java new file mode 100644 index 0000000000..11b3dc82ce --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/service/UserService.java @@ -0,0 +1,9 @@ +package com.baeldung.service; + +import com.baeldung.model.User; + +import java.util.Optional; + +public interface UserService { + Optional findOne(String username); +} diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/DetailedUserDto.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/DetailedUserDto.java new file mode 100644 index 0000000000..0d8fe02b91 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/DetailedUserDto.java @@ -0,0 +1,45 @@ +package com.baeldung.web; + +import com.baeldung.model.User; + +import java.util.Set; + +public class DetailedUserDto { + + private Long id; + private String username; + private Set permissions; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public Set getPermissions() { + return permissions; + } + + public void setPermissions(Set permissions) { + this.permissions = permissions; + } + + public static DetailedUserDto fromEntity(User user) { + DetailedUserDto detailed = new DetailedUserDto(); + detailed.setId(user.getId()); + detailed.setUsername(user.getUsername()); + detailed.setPermissions(user.getPermissions()); + + return detailed; + } +} diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/UserController.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/UserController.java new file mode 100644 index 0000000000..867d60cc2f --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/web/UserController.java @@ -0,0 +1,27 @@ +package com.baeldung.web; + +import com.baeldung.service.UserService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/users") +public class UserController { + + private final UserService userService; + + public UserController(UserService userService) { + this.userService = userService; + } + + @GetMapping("/{username}") + public ResponseEntity findOne(@PathVariable String username) { + return userService.findOne(username) + .map(DetailedUserDto::fromEntity) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); + } +} diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java new file mode 100644 index 0000000000..c05272b7b4 --- /dev/null +++ b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java @@ -0,0 +1,57 @@ +package com.baeldung.osiv; + +import com.baeldung.PostgresExtension; +import com.baeldung.model.User; +import com.baeldung.repository.UserRepository; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.Arrays; +import java.util.HashSet; + +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +@ActiveProfiles("test") +@ExtendWith(PostgresExtension.class) +class UserControllerIntegrationTest { + + @Autowired + private UserRepository userRepository; + + @Autowired + private MockMvc mockMvc; + + @BeforeEach + void setUp() { + User user = new User(); + user.setUsername("root"); + user.setPermissions(new HashSet<>(Arrays.asList("PERM_READ", "PERM_WRITE"))); + + userRepository.save(user); + } + + @Test + void givenTheUserExists_WhenOsivIsEnabled_ThenLazyInitWorkEverywhere() throws Exception { + mockMvc.perform(get("/users/root")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.username").value("root")) + .andExpect(jsonPath("$.permissions", containsInAnyOrder("PERM_READ", "PERM_WRITE"))); + } + + @AfterEach + void flushDb() { + userRepository.deleteAll(); + } +} From 72a602c9d86af0f43ae4d9c28c05889a549c42d0 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 10:08:55 +0100 Subject: [PATCH 212/304] #BAEL-10229 Fix the build (restore the Ethereum module as it was because it's mixing different Spring and Spring Boot versions) --- parent-boot-1/pom.xml | 233 +++++++++++++++++++++++++++++++++++------- 1 file changed, 195 insertions(+), 38 deletions(-) diff --git a/parent-boot-1/pom.xml b/parent-boot-1/pom.xml index 8f1af24466..df4703f1db 100644 --- a/parent-boot-1/pom.xml +++ b/parent-boot-1/pom.xml @@ -1,61 +1,218 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - parent-boot-1 - 0.0.1-SNAPSHOT - parent-boot-1 - pom - Parent for all Spring Boot 1.x modules + com.baeldung.ethereum + ethereum + ethereum + parent-spring-5 com.baeldung - parent-modules - 1.0.0-SNAPSHOT + 0.0.1-SNAPSHOT + ../parent-spring-5 - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - + + - io.rest-assured - rest-assured - ${rest-assured.version} + org.springframework.boot + spring-boot-starter + ${spring.boot.version} + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework.boot + spring-boot-starter-tomcat + ${spring.boot.version} + + + + + org.springframework + spring-core + ${spring.version} + + + org.springframework + spring-web + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + + + org.ethereum + ethereumj-core + ${ethereumj-core.version} + + + org.web3j + core + ${web3j.core.version} + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + + + javax.servlet + jstl + ${jstl.version} + + + javax.servlet + javax.servlet-api + ${javax.servlet-api.version} + + + javax.servlet.jsp.jstl + jstl-api + ${jstl.version} + + + javax.servlet.jsp + javax.servlet.jsp-api + ${javax.servlet.jsp-api.version} + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + org.springframework.boot spring-boot-starter-test test + ${spring.boot.version} + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-test + ${spring.version} + test + + + + + org.mockito + mockito-core + ${mockito.version} + + + org.hamcrest + hamcrest-core + + + test + + + junit + junit + ${junit.version} + test + + + org.hamcrest + hamcrest-core + + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + com.jayway.jsonpath + json-path + ${jsonpath.version} - - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot.version} - - ${start-class} - - - - - + ethereum + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-maven-plugin.version} + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + src/main/webapp + false + + + + + + Ethereum + Ethereum + https://dl.bintray.com/ethereum/maven/ + + + - 3.1.0 - 1.5.22.RELEASE + 1.5.0-RELEASE + 3.3.1 + 1.5.6.RELEASE + 2.21.0 + 2.4.0 + 1.2.3 + 1.7.25 + 2.0.4.RELEASE - From 62089a7abb94026c2ceaaf46979bf84edfbf498a Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Sun, 27 Oct 2019 11:09:34 +0200 Subject: [PATCH 213/304] Split or move java-streams module --- .../core-java-9-streams/README.md | 6 + core-java-modules/core-java-9-streams/pom.xml | 31 ++ .../streams}/breakforeach/CustomForEach.java | 2 +- .../breakforeach/CustomSpliterator.java | 2 +- .../breakforeach/CustomTakeWhile.java | 2 +- .../breakforeach/TakeWhileExample.java | 2 +- .../BreakFromStreamForEachUnitTest.java | 2 +- .../core-java-streams-2/README.md | 16 ++ .../core-java-streams-2}/pom.xml | 100 +++---- .../reduce/application/Application.java | 78 ++--- .../benchmarks/JMHStreamReduceBenchMark.java | 104 +++---- .../com/baeldung/reduce/entities/User.java | 50 ++-- .../reduce/utilities/NumberUtils.java | 104 +++---- .../streams}/MyImmutableListCollector.java | 2 +- .../src/main/resources/logback.xml | 0 .../IntStreamsConversionsUnitTest.java | 0 .../reduce}/StreamReduceUnitTest.java | 159 +++++----- .../java/com/baeldung/streams}/Detail.java | 2 +- .../Java8FindAnyFindFirstUnitTest.java | 2 +- .../streams/Java8StreamApiUnitTest.java | 3 +- .../streams}/Java8StreamsUnitTest.java | 3 +- .../com/baeldung/streams}/PeekUnitTest.java | 8 +- .../java/com/baeldung/streams}/Product.java | 2 +- .../baeldung/streams}/StreamAddUnitTest.java | 2 +- .../baeldung/streams}/StreamMapUnitTest.java | 5 +- .../streams}/StreamToImmutableUnitTest.java | 20 +- .../StreamOperateAndRemoveUnitTest.java | 12 +- .../core-java-streams-3/README.md | 11 + core-java-modules/core-java-streams-3/pom.xml | 53 ++++ .../streams}/forEach/ReverseList.java | 2 +- .../primitivestreams}/PrimitiveStreams.java | 2 +- .../src/main/resources/logback.xml | 13 + .../collectors/Java8CollectorsUnitTest.java | 2 +- .../StreamForEachIfElseUnitTest.java | 2 +- .../PrimitiveStreamsUnitTest.java | 8 +- .../core-java-streams}/.gitignore | 0 core-java-modules/core-java-streams/README.md | 19 +- core-java-modules/core-java-streams/pom.xml | 83 +++++- .../com/baeldung/stream/InfiniteStreams.java | 0 .../java/com/baeldung/stream/StreamApi.java | 0 .../com/baeldung/stream/StreamIndices.java | 0 .../com/baeldung/stream/filter/Customer.java | 0 .../baeldung/stream/sum/ArithmeticUtils.java | 16 +- .../java/com/baeldung/stream/sum/Item.java | 62 ++-- .../stream/sum/StreamSumCalculator.java | 118 ++++---- .../sum/StreamSumCalculatorWithObject.java | 76 ++--- .../IterableStreamConversionUnitTest.java | 2 +- .../protonpack/ProtonpackUnitTest.java | 0 .../stream/InfiniteStreamUnitTest.java | 0 .../baeldung/stream/StreamApiUnitTest.java | 0 .../stream/StreamIndicesUnitTest.java | 0 .../stream/SupplierStreamUnitTest.java | 68 ++--- .../stream/filter/StreamCountUnitTest.java | 0 .../stream/filter/StreamFilterUnitTest.java | 0 .../stream/sum/StreamSumUnitTest.java | 272 +++++++++--------- .../streamordering/BenchmarkManualTest.java | 0 .../StreamsOrderingUnitTest.java | 0 .../src/test/resources/.gitignore | 0 core-java-modules/core-java/README.md | 2 +- java-streams-2/README.md | 9 - .../com/baeldung/reduce/entities/User.java | 25 -- java-streams/README.md | 21 -- java-streams/pom.xml | 121 -------- .../reduce/application/Application.java | 70 ----- .../reduce/utilities/NumberUtils.java | 52 ---- .../reduce/tests/StreamReduceUnitTest.java | 79 ----- pom.xml | 20 +- 67 files changed, 881 insertions(+), 1046 deletions(-) create mode 100644 core-java-modules/core-java-9-streams/README.md create mode 100644 core-java-modules/core-java-9-streams/pom.xml rename {java-streams-2/src/main/java/com/baeldung => core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams}/breakforeach/CustomForEach.java (94%) rename {java-streams-2/src/main/java/com/baeldung => core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams}/breakforeach/CustomSpliterator.java (95%) rename {java-streams-2/src/main/java/com/baeldung => core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams}/breakforeach/CustomTakeWhile.java (90%) rename {java-streams-2/src/main/java/com/baeldung => core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams}/breakforeach/TakeWhileExample.java (94%) rename {java-streams-2/src/test/java/com/baeldung => core-java-modules/core-java-9-streams/src/test/java/com/baeldung/streams}/breakforeach/BreakFromStreamForEachUnitTest.java (96%) create mode 100644 core-java-modules/core-java-streams-2/README.md rename {java-streams-2 => core-java-modules/core-java-streams-2}/pom.xml (84%) rename {java-streams-2 => core-java-modules/core-java-streams-2}/src/main/java/com/baeldung/reduce/application/Application.java (97%) rename {java-streams-2 => core-java-modules/core-java-streams-2}/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java (97%) rename {java-streams => core-java-modules/core-java-streams-2}/src/main/java/com/baeldung/reduce/entities/User.java (94%) rename {java-streams-2 => core-java-modules/core-java-streams-2}/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java (97%) rename {java-streams/src/test/java/com/baeldung/stream/mycollectors => core-java-modules/core-java-streams-2/src/main/java/com/baeldung/streams}/MyImmutableListCollector.java (93%) rename {java-streams => core-java-modules/core-java-streams-2}/src/main/resources/logback.xml (100%) rename {java-streams-2 => core-java-modules/core-java-streams-2}/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java (100%) rename {java-streams-2/src/test/java/com/baeldung/reduce/tests => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/reduce}/StreamReduceUnitTest.java (95%) rename {java-streams/src/main/java/com/baeldung/java_8_features => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams}/Detail.java (85%) rename {java-streams/src/test/java/com/baeldung/java8 => core-java-modules/core-java-streams-2/src/test/java/com/baeldung}/streams/Java8FindAnyFindFirstUnitTest.java (97%) rename {java-streams/src/test/java/com/baeldung/java8 => core-java-modules/core-java-streams-2/src/test/java/com/baeldung}/streams/Java8StreamApiUnitTest.java (99%) rename {java-streams/src/test/java/com/baeldung/java8 => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams}/Java8StreamsUnitTest.java (97%) rename {java-streams/src/test/java/com/baeldung/stream => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams}/PeekUnitTest.java (98%) rename {java-streams/src/main/java/com/baeldung/stream => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams}/Product.java (96%) rename {java-streams/src/test/java/com/baeldung/stream => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams}/StreamAddUnitTest.java (97%) rename {java-streams/src/test/java/com/baeldung/stream => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams}/StreamMapUnitTest.java (96%) rename {java-streams/src/test/java/com/baeldung/stream => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams}/StreamToImmutableUnitTest.java (81%) rename {java-streams/src/test/java/com/baeldung/stream => core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/removeitem}/StreamOperateAndRemoveUnitTest.java (98%) create mode 100644 core-java-modules/core-java-streams-3/README.md create mode 100644 core-java-modules/core-java-streams-3/pom.xml rename core-java-modules/{core-java-streams/src/main/java/com/baeldung => core-java-streams-3/src/main/java/com/baeldung/streams}/forEach/ReverseList.java (98%) rename {java-streams/src/main/java/com/baeldung/stream => core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/primitivestreams}/PrimitiveStreams.java (90%) create mode 100644 core-java-modules/core-java-streams-3/src/main/resources/logback.xml rename core-java-modules/{core-java-streams/src/test/java/com/baeldung => core-java-streams-3/src/test/java/com/baeldung/streams}/collectors/Java8CollectorsUnitTest.java (99%) rename core-java-modules/{core-java-streams/src/test/java/com/baeldung/stream => core-java-streams-3/src/test/java/com/baeldung/streams}/conditional/StreamForEachIfElseUnitTest.java (96%) rename {java-streams/src/test/java/com/baeldung/stream => core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/primitivestreams}/PrimitiveStreamsUnitTest.java (98%) rename {java-streams => core-java-modules/core-java-streams}/.gitignore (100%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/InfiniteStreams.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/StreamApi.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/StreamIndices.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/filter/Customer.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java (94%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/sum/Item.java (94%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java (96%) rename {java-streams => core-java-modules/core-java-streams}/src/main/java/com/baeldung/stream/sum/StreamSumCalculatorWithObject.java (96%) rename {java-streams/src/test/java/com/baeldung/java => core-java-modules/core-java-streams/src/test/java/com/baeldung}/conversion/IterableStreamConversionUnitTest.java (96%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/protonpack/ProtonpackUnitTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/stream/StreamApiUnitTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/stream/StreamIndicesUnitTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/stream/SupplierStreamUnitTest.java (97%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/stream/filter/StreamCountUnitTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/stream/filter/StreamFilterUnitTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/stream/sum/StreamSumUnitTest.java (97%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/streamordering/BenchmarkManualTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/java/com/baeldung/streamordering/StreamsOrderingUnitTest.java (100%) rename {java-streams => core-java-modules/core-java-streams}/src/test/resources/.gitignore (100%) delete mode 100644 java-streams-2/README.md delete mode 100644 java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java delete mode 100644 java-streams/README.md delete mode 100644 java-streams/pom.xml delete mode 100644 java-streams/src/main/java/com/baeldung/reduce/application/Application.java delete mode 100644 java-streams/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java delete mode 100644 java-streams/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java diff --git a/core-java-modules/core-java-9-streams/README.md b/core-java-modules/core-java-9-streams/README.md new file mode 100644 index 0000000000..0ad8500689 --- /dev/null +++ b/core-java-modules/core-java-9-streams/README.md @@ -0,0 +1,6 @@ +## Core Java 9 streams + +This module contains articles about Java 9 streams + +### Relevant Articles: +- [How to Break from Java Stream forEach](https://www.baeldung.com/java-break-stream-foreach) diff --git a/core-java-modules/core-java-9-streams/pom.xml b/core-java-modules/core-java-9-streams/pom.xml new file mode 100644 index 0000000000..6e167caf9c --- /dev/null +++ b/core-java-modules/core-java-9-streams/pom.xml @@ -0,0 +1,31 @@ + + 4.0.0 + core-java-9-streams + 0.1.0-SNAPSHOT + core-java-9-streams + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + + + core-java-9-streams + + + src/main/resources + true + + + + + + + diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomForEach.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomForEach.java similarity index 94% rename from java-streams-2/src/main/java/com/baeldung/breakforeach/CustomForEach.java rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomForEach.java index 1f8866b16c..357571f092 100644 --- a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomForEach.java +++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomForEach.java @@ -1,4 +1,4 @@ -package com.baeldung.breakforeach; +package com.baeldung.streams.breakforeach; import java.util.Spliterator; import java.util.function.BiConsumer; diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomSpliterator.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomSpliterator.java similarity index 95% rename from java-streams-2/src/main/java/com/baeldung/breakforeach/CustomSpliterator.java rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomSpliterator.java index cfe4bedac3..1844a3dc37 100644 --- a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomSpliterator.java +++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomSpliterator.java @@ -1,4 +1,4 @@ -package com.baeldung.breakforeach; +package com.baeldung.streams.breakforeach; import java.util.Spliterator; import java.util.Spliterators; diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomTakeWhile.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomTakeWhile.java similarity index 90% rename from java-streams-2/src/main/java/com/baeldung/breakforeach/CustomTakeWhile.java rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomTakeWhile.java index 05574f9ae6..1852df3d9c 100644 --- a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomTakeWhile.java +++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomTakeWhile.java @@ -1,4 +1,4 @@ -package com.baeldung.breakforeach; +package com.baeldung.streams.breakforeach; import java.util.function.Predicate; import java.util.stream.Stream; diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/TakeWhileExample.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/TakeWhileExample.java similarity index 94% rename from java-streams-2/src/main/java/com/baeldung/breakforeach/TakeWhileExample.java rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/TakeWhileExample.java index 1838ae5fb7..3a16c9d691 100644 --- a/java-streams-2/src/main/java/com/baeldung/breakforeach/TakeWhileExample.java +++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/TakeWhileExample.java @@ -1,4 +1,4 @@ -package com.baeldung.breakforeach; +package com.baeldung.streams.breakforeach; import java.util.List; import java.util.stream.Stream; diff --git a/java-streams-2/src/test/java/com/baeldung/breakforeach/BreakFromStreamForEachUnitTest.java b/core-java-modules/core-java-9-streams/src/test/java/com/baeldung/streams/breakforeach/BreakFromStreamForEachUnitTest.java similarity index 96% rename from java-streams-2/src/test/java/com/baeldung/breakforeach/BreakFromStreamForEachUnitTest.java rename to core-java-modules/core-java-9-streams/src/test/java/com/baeldung/streams/breakforeach/BreakFromStreamForEachUnitTest.java index 23653c0a39..66d293b3fa 100644 --- a/java-streams-2/src/test/java/com/baeldung/breakforeach/BreakFromStreamForEachUnitTest.java +++ b/core-java-modules/core-java-9-streams/src/test/java/com/baeldung/streams/breakforeach/BreakFromStreamForEachUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.breakforeach; +package com.baeldung.streams.breakforeach; import org.junit.Test; diff --git a/core-java-modules/core-java-streams-2/README.md b/core-java-modules/core-java-streams-2/README.md new file mode 100644 index 0000000000..2ff95045c3 --- /dev/null +++ b/core-java-modules/core-java-streams-2/README.md @@ -0,0 +1,16 @@ +## Core Java streams + +This module contains articles about the Stream API in Java. + +### Relevant Articles: +- [The Java 8 Stream API Tutorial](https://www.baeldung.com/java-8-streams) +- [Introduction to Java 8 Streams](https://www.baeldung.com/java-8-streams-introduction) +- [Java 8 Stream findFirst() vs. findAny()](https://www.baeldung.com/java-stream-findfirst-vs-findany) +- [Guide to Stream.reduce()](https://www.baeldung.com/java-stream-reduce) +- [Java IntStream Conversions](https://www.baeldung.com/java-intstream-convert) +- [Java 8 Streams peek() API](https://www.baeldung.com/java-streams-peek-api) +- [Working With Maps Using Streams](https://www.baeldung.com/java-maps-streams) +- [Collect a Java Stream to an Immutable Collection](https://www.baeldung.com/java-stream-immutable-collection) +- [How to Add a Single Element to a Stream](https://www.baeldung.com/java-stream-append-prepend) +- [Operating on and Removing an Item from Stream](https://www.baeldung.com/java-use-remove-item-stream) +- More articles: [[<-- prev>]](/../core-java-streams) [[next -->]](/../core-java-streams-3) diff --git a/java-streams-2/pom.xml b/core-java-modules/core-java-streams-2/pom.xml similarity index 84% rename from java-streams-2/pom.xml rename to core-java-modules/core-java-streams-2/pom.xml index 4cebd44427..20c028edaa 100644 --- a/java-streams-2/pom.xml +++ b/core-java-modules/core-java-streams-2/pom.xml @@ -1,49 +1,53 @@ - - - 4.0.0 - com.baeldung.javastreams2 - java-streams-2 - 1.0 - java-streams-2 - jar - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - org.openjdk.jmh - jmh-core - ${jmh-core.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh-generator.version} - - - junit - junit - ${junit.version} - test - jar - - - org.assertj - assertj-core - ${assertj.version} - test - - - - - UTF-8 - 1.9 - 1.9 - 3.11.1 - + + + 4.0.0 + core-java-streams-2 + 1.0 + core-java-streams-2 + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + + + log4j + log4j + ${log4j.version} + + + junit + junit + ${junit.version} + test + jar + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + UTF-8 + 1.9 + 1.9 + 3.11.1 + \ No newline at end of file diff --git a/java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java similarity index 97% rename from java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java index 79c557524d..62d080c32c 100644 --- a/java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java +++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java @@ -1,39 +1,39 @@ -package com.baeldung.reduce.application; - -import com.baeldung.reduce.entities.User; -import com.baeldung.reduce.utilities.NumberUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class Application { - - public static void main(String[] args) { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - int result1 = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element); - System.out.println(result1); - - int result2 = numbers.stream().reduce(0, Integer::sum); - System.out.println(result2); - - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result3 = letters.stream().reduce("", (partialString, element) -> partialString + element); - System.out.println(result3); - - String result4 = letters.stream().reduce("", String::concat); - System.out.println(result4); - - String result5 = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase()); - System.out.println(result5); - - List users = Arrays.asList(new User("John", 30), new User("Julie", 35)); - int result6 = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - System.out.println(result6); - - String result7 = letters.parallelStream().reduce("", String::concat); - System.out.println(result7); - - int result8 = users.parallelStream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - System.out.println(result8); - } -} +package com.baeldung.reduce.application; + +import com.baeldung.reduce.entities.User; +import com.baeldung.reduce.utilities.NumberUtils; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Application { + + public static void main(String[] args) { + List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); + int result1 = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element); + System.out.println(result1); + + int result2 = numbers.stream().reduce(0, Integer::sum); + System.out.println(result2); + + List letters = Arrays.asList("a", "b", "c", "d", "e"); + String result3 = letters.stream().reduce("", (partialString, element) -> partialString + element); + System.out.println(result3); + + String result4 = letters.stream().reduce("", String::concat); + System.out.println(result4); + + String result5 = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase()); + System.out.println(result5); + + List users = Arrays.asList(new User("John", 30), new User("Julie", 35)); + int result6 = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); + System.out.println(result6); + + String result7 = letters.parallelStream().reduce("", String::concat); + System.out.println(result7); + + int result8 = users.parallelStream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); + System.out.println(result8); + } +} diff --git a/java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java similarity index 97% rename from java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java index af4a9276a9..ecb0347e96 100644 --- a/java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java +++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java @@ -1,52 +1,52 @@ -package com.baeldung.reduce.benchmarks; - -import com.baeldung.reduce.entities.User; -import java.util.ArrayList; -import java.util.List; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -@State(Scope.Thread) -@BenchmarkMode(Mode.AverageTime) -public class JMHStreamReduceBenchMark { - - private final List userList = createUsers(); - - public static void main(String[] args) throws RunnerException { - - Options options = new OptionsBuilder() - .include(JMHStreamReduceBenchMark.class.getSimpleName()).threads(1) - .forks(1).shouldFailOnError(true).shouldDoGC(true) - .jvmArgs("-server").build(); - new Runner(options).run(); - } - - private List createUsers() { - List users = new ArrayList<>(); - for (int i = 0; i <= 1000000; i++) { - users.add(new User("John" + i, i)); - } - return users; - } - - @Benchmark - public Integer executeReduceOnParallelizedStream() { - return this.userList - .parallelStream() - .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - } - - @Benchmark - public Integer executeReduceOnSequentialStream() { - return this.userList - .stream() - .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - } -} +package com.baeldung.reduce.benchmarks; + +import com.baeldung.reduce.entities.User; +import java.util.ArrayList; +import java.util.List; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +@State(Scope.Thread) +@BenchmarkMode(Mode.AverageTime) +public class JMHStreamReduceBenchMark { + + private final List userList = createUsers(); + + public static void main(String[] args) throws RunnerException { + + Options options = new OptionsBuilder() + .include(JMHStreamReduceBenchMark.class.getSimpleName()).threads(1) + .forks(1).shouldFailOnError(true).shouldDoGC(true) + .jvmArgs("-server").build(); + new Runner(options).run(); + } + + private List createUsers() { + List users = new ArrayList<>(); + for (int i = 0; i <= 1000000; i++) { + users.add(new User("John" + i, i)); + } + return users; + } + + @Benchmark + public Integer executeReduceOnParallelizedStream() { + return this.userList + .parallelStream() + .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); + } + + @Benchmark + public Integer executeReduceOnSequentialStream() { + return this.userList + .stream() + .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); + } +} diff --git a/java-streams/src/main/java/com/baeldung/reduce/entities/User.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java similarity index 94% rename from java-streams/src/main/java/com/baeldung/reduce/entities/User.java rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java index a17c6a02b6..6e0a529de6 100644 --- a/java-streams/src/main/java/com/baeldung/reduce/entities/User.java +++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java @@ -1,25 +1,25 @@ -package com.baeldung.reduce.entities; - -public class User { - - private final String name; - private final int age; - - public User(String name, int age) { - this.name = name; - this.age = age; - } - - public String getName() { - return name; - } - - public int getAge() { - return age; - } - - @Override - public String toString() { - return "User{" + "name=" + name + ", age=" + age + '}'; - } -} +package com.baeldung.reduce.entities; + +public class User { + + private final String name; + private final int age; + + public User(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + @Override + public String toString() { + return "User{" + "name=" + name + ", age=" + age + '}'; + } +} diff --git a/java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java similarity index 97% rename from java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java index a7a4b8df29..38d5b50120 100644 --- a/java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java +++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java @@ -1,52 +1,52 @@ -package com.baeldung.reduce.utilities; - -import java.util.List; -import java.util.function.BiFunction; -import java.util.logging.Level; -import java.util.logging.Logger; - -public abstract class NumberUtils { - - private static final Logger LOGGER = Logger.getLogger(NumberUtils.class.getName()); - - public static int divideListElements(List values, Integer divider) { - return values.stream() - .reduce(0, (a, b) -> { - try { - return a / divider + b / divider; - } catch (ArithmeticException e) { - LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero"); - } - return 0; - }); - } - - public static int divideListElementsWithExtractedTryCatchBlock(List values, int divider) { - return values.stream().reduce(0, (a, b) -> divide(a, divider) + divide(b, divider)); - } - - public static int divideListElementsWithApplyFunctionMethod(List values, int divider) { - BiFunction division = (a, b) -> a / b; - return values.stream().reduce(0, (a, b) -> applyFunction(division, a, divider) + applyFunction(division, b, divider)); - } - - private static int divide(int value, int factor) { - int result = 0; - try { - result = value / factor; - } catch (ArithmeticException e) { - LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero"); - } - return result; - } - - private static int applyFunction(BiFunction function, int a, int b) { - try { - return function.apply(a, b); - } - catch(Exception e) { - LOGGER.log(Level.INFO, "Exception thrown!"); - } - return 0; - } -} +package com.baeldung.reduce.utilities; + +import java.util.List; +import java.util.function.BiFunction; +import java.util.logging.Level; +import java.util.logging.Logger; + +public abstract class NumberUtils { + + private static final Logger LOGGER = Logger.getLogger(NumberUtils.class.getName()); + + public static int divideListElements(List values, Integer divider) { + return values.stream() + .reduce(0, (a, b) -> { + try { + return a / divider + b / divider; + } catch (ArithmeticException e) { + LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero"); + } + return 0; + }); + } + + public static int divideListElementsWithExtractedTryCatchBlock(List values, int divider) { + return values.stream().reduce(0, (a, b) -> divide(a, divider) + divide(b, divider)); + } + + public static int divideListElementsWithApplyFunctionMethod(List values, int divider) { + BiFunction division = (a, b) -> a / b; + return values.stream().reduce(0, (a, b) -> applyFunction(division, a, divider) + applyFunction(division, b, divider)); + } + + private static int divide(int value, int factor) { + int result = 0; + try { + result = value / factor; + } catch (ArithmeticException e) { + LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero"); + } + return result; + } + + private static int applyFunction(BiFunction function, int a, int b) { + try { + return function.apply(a, b); + } + catch(Exception e) { + LOGGER.log(Level.INFO, "Exception thrown!"); + } + return 0; + } +} diff --git a/java-streams/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/streams/MyImmutableListCollector.java similarity index 93% rename from java-streams/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/streams/MyImmutableListCollector.java index cf6b3601c3..6d515bfb46 100644 --- a/java-streams/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java +++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/streams/MyImmutableListCollector.java @@ -1,4 +1,4 @@ -package com.baeldung.stream.mycollectors; +package com.baeldung.streams; import java.util.ArrayList; import java.util.Collections; diff --git a/java-streams/src/main/resources/logback.xml b/core-java-modules/core-java-streams-2/src/main/resources/logback.xml similarity index 100% rename from java-streams/src/main/resources/logback.xml rename to core-java-modules/core-java-streams-2/src/main/resources/logback.xml diff --git a/java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java similarity index 100% rename from java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java diff --git a/java-streams-2/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/reduce/StreamReduceUnitTest.java similarity index 95% rename from java-streams-2/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/reduce/StreamReduceUnitTest.java index 564d614017..21eedf953e 100644 --- a/java-streams-2/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/reduce/StreamReduceUnitTest.java @@ -1,79 +1,80 @@ -package com.baeldung.reduce.tests; - -import com.baeldung.reduce.entities.User; -import com.baeldung.reduce.utilities.NumberUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import static org.assertj.core.api.Assertions.assertThat; -import org.junit.Test; - -public class StreamReduceUnitTest { - - @Test - public void givenIntegerList_whenReduceWithSumAccumulatorLambda_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - int result = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element); - assertThat(result).isEqualTo(21); - } - - @Test - public void givenIntegerList_whenReduceWithSumAccumulatorMethodReference_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - int result = numbers.stream().reduce(0, Integer::sum); - assertThat(result).isEqualTo(21); - } - - @Test - public void givenStringList_whenReduceWithConcatenatorAccumulatorLambda_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.stream().reduce("", (partialString, element) -> partialString + element); - assertThat(result).isEqualTo("abcde"); - } - - @Test - public void givenStringList_whenReduceWithConcatenatorAccumulatorMethodReference_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.stream().reduce("", String::concat); - assertThat(result).isEqualTo("abcde"); - } - - @Test - public void givenStringList_whenReduceWithUppercaseConcatenatorAccumulator_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase()); - assertThat(result).isEqualTo("ABCDE"); - } - - @Test - public void givenUserList_whenReduceWithAgeAccumulatorAndSumCombiner_thenCorrect() { - List users = Arrays.asList(new User("John", 30), new User("Julie", 35)); - int result = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - assertThat(result).isEqualTo(65); - } - - @Test - public void givenStringList_whenReduceWithParallelStream_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.parallelStream().reduce("", String::concat); - assertThat(result).isEqualTo("abcde"); - } - - @Test - public void givenNumberUtilsClass_whenCalledDivideListElements_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - assertThat(NumberUtils.divideListElements(numbers, 1)).isEqualTo(21); - } - - @Test - public void givenNumberUtilsClass_whenCalledDivideListElementsWithExtractedTryCatchBlock_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - assertThat(NumberUtils.divideListElementsWithExtractedTryCatchBlock(numbers, 1)).isEqualTo(21); - } - - @Test - public void givenStream_whneCalleddivideListElementsWithApplyFunctionMethod_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - assertThat(NumberUtils.divideListElementsWithApplyFunctionMethod(numbers, 1)).isEqualTo(21); - } -} +package com.baeldung.reduce; + +import com.baeldung.reduce.entities.User; +import com.baeldung.reduce.utilities.NumberUtils; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class StreamReduceUnitTest { + + @Test + public void givenIntegerList_whenReduceWithSumAccumulatorLambda_thenCorrect() { + List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); + int result = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element); + assertThat(result).isEqualTo(21); + } + + @Test + public void givenIntegerList_whenReduceWithSumAccumulatorMethodReference_thenCorrect() { + List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); + int result = numbers.stream().reduce(0, Integer::sum); + assertThat(result).isEqualTo(21); + } + + @Test + public void givenStringList_whenReduceWithConcatenatorAccumulatorLambda_thenCorrect() { + List letters = Arrays.asList("a", "b", "c", "d", "e"); + String result = letters.stream().reduce("", (partialString, element) -> partialString + element); + assertThat(result).isEqualTo("abcde"); + } + + @Test + public void givenStringList_whenReduceWithConcatenatorAccumulatorMethodReference_thenCorrect() { + List letters = Arrays.asList("a", "b", "c", "d", "e"); + String result = letters.stream().reduce("", String::concat); + assertThat(result).isEqualTo("abcde"); + } + + @Test + public void givenStringList_whenReduceWithUppercaseConcatenatorAccumulator_thenCorrect() { + List letters = Arrays.asList("a", "b", "c", "d", "e"); + String result = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase()); + assertThat(result).isEqualTo("ABCDE"); + } + + @Test + public void givenUserList_whenReduceWithAgeAccumulatorAndSumCombiner_thenCorrect() { + List users = Arrays.asList(new User("John", 30), new User("Julie", 35)); + int result = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); + assertThat(result).isEqualTo(65); + } + + @Test + public void givenStringList_whenReduceWithParallelStream_thenCorrect() { + List letters = Arrays.asList("a", "b", "c", "d", "e"); + String result = letters.parallelStream().reduce("", String::concat); + assertThat(result).isEqualTo("abcde"); + } + + @Test + public void givenNumberUtilsClass_whenCalledDivideListElements_thenCorrect() { + List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); + assertThat(NumberUtils.divideListElements(numbers, 1)).isEqualTo(21); + } + + @Test + public void givenNumberUtilsClass_whenCalledDivideListElementsWithExtractedTryCatchBlock_thenCorrect() { + List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); + assertThat(NumberUtils.divideListElementsWithExtractedTryCatchBlock(numbers, 1)).isEqualTo(21); + } + + @Test + public void givenStream_whneCalleddivideListElementsWithApplyFunctionMethod_thenCorrect() { + List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); + assertThat(NumberUtils.divideListElementsWithApplyFunctionMethod(numbers, 1)).isEqualTo(21); + } +} diff --git a/java-streams/src/main/java/com/baeldung/java_8_features/Detail.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Detail.java similarity index 85% rename from java-streams/src/main/java/com/baeldung/java_8_features/Detail.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Detail.java index 811937dba7..d2f5774b24 100644 --- a/java-streams/src/main/java/com/baeldung/java_8_features/Detail.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Detail.java @@ -1,4 +1,4 @@ -package com.baeldung.java_8_features; +package com.baeldung.streams; import java.util.Arrays; import java.util.List; diff --git a/java-streams/src/test/java/com/baeldung/java8/streams/Java8FindAnyFindFirstUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8FindAnyFindFirstUnitTest.java similarity index 97% rename from java-streams/src/test/java/com/baeldung/java8/streams/Java8FindAnyFindFirstUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8FindAnyFindFirstUnitTest.java index 5f52fe375e..934d7b3542 100644 --- a/java-streams/src/test/java/com/baeldung/java8/streams/Java8FindAnyFindFirstUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8FindAnyFindFirstUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.java8.streams; +package com.baeldung.streams; import org.junit.Test; diff --git a/java-streams/src/test/java/com/baeldung/java8/streams/Java8StreamApiUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamApiUnitTest.java similarity index 99% rename from java-streams/src/test/java/com/baeldung/java8/streams/Java8StreamApiUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamApiUnitTest.java index 75cfbc049f..c4e1f2b3cb 100644 --- a/java-streams/src/test/java/com/baeldung/java8/streams/Java8StreamApiUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamApiUnitTest.java @@ -1,6 +1,5 @@ -package com.baeldung.java8.streams; +package com.baeldung.streams; -import com.baeldung.stream.Product; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; diff --git a/java-streams/src/test/java/com/baeldung/java8/Java8StreamsUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamsUnitTest.java similarity index 97% rename from java-streams/src/test/java/com/baeldung/java8/Java8StreamsUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamsUnitTest.java index e40f9f9506..f46fa79b08 100644 --- a/java-streams/src/test/java/com/baeldung/java8/Java8StreamsUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamsUnitTest.java @@ -1,6 +1,5 @@ -package com.baeldung.java8; +package com.baeldung.streams; -import com.baeldung.java_8_features.Detail; import org.junit.Before; import org.junit.Test; diff --git a/java-streams/src/test/java/com/baeldung/stream/PeekUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/PeekUnitTest.java similarity index 98% rename from java-streams/src/test/java/com/baeldung/stream/PeekUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/PeekUnitTest.java index a3a2816e9c..97af4149d3 100644 --- a/java-streams/src/test/java/com/baeldung/stream/PeekUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/PeekUnitTest.java @@ -1,13 +1,13 @@ -package com.baeldung.stream; +package com.baeldung.streams; -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.StringWriter; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; public class PeekUnitTest { diff --git a/java-streams/src/main/java/com/baeldung/stream/Product.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Product.java similarity index 96% rename from java-streams/src/main/java/com/baeldung/stream/Product.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Product.java index e99a969b81..7883f055a1 100644 --- a/java-streams/src/main/java/com/baeldung/stream/Product.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Product.java @@ -1,4 +1,4 @@ -package com.baeldung.stream; +package com.baeldung.streams; import java.util.List; import java.util.stream.Stream; diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamAddUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java similarity index 97% rename from java-streams/src/test/java/com/baeldung/stream/StreamAddUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java index d0745b8bc9..1fada26de5 100644 --- a/java-streams/src/test/java/com/baeldung/stream/StreamAddUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.stream; +package com.baeldung.streams; import org.junit.Test; diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamMapUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamMapUnitTest.java similarity index 96% rename from java-streams/src/test/java/com/baeldung/stream/StreamMapUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamMapUnitTest.java index 5cb2a274d1..509a3a3569 100644 --- a/java-streams/src/test/java/com/baeldung/stream/StreamMapUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamMapUnitTest.java @@ -1,16 +1,13 @@ -package com.baeldung.stream; +package com.baeldung.streams; import org.junit.Before; import org.junit.Test; -import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamToImmutableUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamToImmutableUnitTest.java similarity index 81% rename from java-streams/src/test/java/com/baeldung/stream/StreamToImmutableUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamToImmutableUnitTest.java index bd540201d2..e5339d8327 100644 --- a/java-streams/src/test/java/com/baeldung/stream/StreamToImmutableUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamToImmutableUnitTest.java @@ -1,20 +1,12 @@ -package com.baeldung.stream; - -import static java.util.stream.Collectors.collectingAndThen; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toSet; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.IntStream; +package com.baeldung.streams; +import com.google.common.collect.ImmutableList; import org.junit.Test; -import com.baeldung.stream.mycollectors.MyImmutableListCollector; -import com.google.common.collect.ImmutableList; +import java.util.*; +import java.util.stream.IntStream; + +import static java.util.stream.Collectors.*; public class StreamToImmutableUnitTest { diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamOperateAndRemoveUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/removeitem/StreamOperateAndRemoveUnitTest.java similarity index 98% rename from java-streams/src/test/java/com/baeldung/stream/StreamOperateAndRemoveUnitTest.java rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/removeitem/StreamOperateAndRemoveUnitTest.java index c5aa9a1651..194d0bd4d6 100644 --- a/java-streams/src/test/java/com/baeldung/stream/StreamOperateAndRemoveUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/removeitem/StreamOperateAndRemoveUnitTest.java @@ -1,9 +1,4 @@ -package com.baeldung.stream; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Collectors; +package com.baeldung.streams.removeitem; import org.junit.Assert; import org.junit.Before; @@ -11,6 +6,11 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + public class StreamOperateAndRemoveUnitTest { private List itemList; diff --git a/core-java-modules/core-java-streams-3/README.md b/core-java-modules/core-java-streams-3/README.md new file mode 100644 index 0000000000..4b2c9ed94c --- /dev/null +++ b/core-java-modules/core-java-streams-3/README.md @@ -0,0 +1,11 @@ +## Core Java streams + +This module contains articles about the Stream API in Java. + +### Relevant Articles: +- [The Difference Between map() and flatMap()](https://www.baeldung.com/java-difference-map-and-flatmap) +- [How to Use if/else Logic in Java 8 Streams](https://www.baeldung.com/java-8-streams-if-else-logic) +- [The Difference Between Collection.stream().forEach() and Collection.forEach()](https://www.baeldung.com/java-collection-stream-foreach) +- [Guide to Java 8’s Collectors](https://www.baeldung.com/java-8-collectors) +- [Primitive Type Streams in Java 8](https://www.baeldung.com/java-8-primitive-streams) +- More articles: [[<-- prev>]](/../core-java-streams-2) \ No newline at end of file diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml new file mode 100644 index 0000000000..b5b21a4368 --- /dev/null +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + core-java-streams-3 + 0.1.0-SNAPSHOT + core-java-streams-3 + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + core-java-streams-3 + + + src/main/resources + true + + + + + + + 3.6.1 + + 2.22.1 + + diff --git a/core-java-modules/core-java-streams/src/main/java/com/baeldung/forEach/ReverseList.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/forEach/ReverseList.java similarity index 98% rename from core-java-modules/core-java-streams/src/main/java/com/baeldung/forEach/ReverseList.java rename to core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/forEach/ReverseList.java index b2ce77a9f6..c4128d9b72 100644 --- a/core-java-modules/core-java-streams/src/main/java/com/baeldung/forEach/ReverseList.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/forEach/ReverseList.java @@ -1,4 +1,4 @@ -package com.baeldung.forEach; +package com.baeldung.streams.forEach; import java.util.ArrayList; import java.util.Arrays; diff --git a/java-streams/src/main/java/com/baeldung/stream/PrimitiveStreams.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/primitivestreams/PrimitiveStreams.java similarity index 90% rename from java-streams/src/main/java/com/baeldung/stream/PrimitiveStreams.java rename to core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/primitivestreams/PrimitiveStreams.java index b0afb65a35..fb2001f10f 100644 --- a/java-streams/src/main/java/com/baeldung/stream/PrimitiveStreams.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/primitivestreams/PrimitiveStreams.java @@ -1,4 +1,4 @@ -package com.baeldung.stream; +package com.baeldung.streams.primitivestreams; import java.util.Arrays; import java.util.stream.IntStream; diff --git a/core-java-modules/core-java-streams-3/src/main/resources/logback.xml b/core-java-modules/core-java-streams-3/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/core-java-modules/core-java-streams-3/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/core-java-modules/core-java-streams/src/test/java/com/baeldung/collectors/Java8CollectorsUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/collectors/Java8CollectorsUnitTest.java similarity index 99% rename from core-java-modules/core-java-streams/src/test/java/com/baeldung/collectors/Java8CollectorsUnitTest.java rename to core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/collectors/Java8CollectorsUnitTest.java index e742635758..6afc9f4182 100644 --- a/core-java-modules/core-java-streams/src/test/java/com/baeldung/collectors/Java8CollectorsUnitTest.java +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/collectors/Java8CollectorsUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.collectors; +package com.baeldung.streams.collectors; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/conditional/StreamForEachIfElseUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conditional/StreamForEachIfElseUnitTest.java similarity index 96% rename from core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/conditional/StreamForEachIfElseUnitTest.java rename to core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conditional/StreamForEachIfElseUnitTest.java index b5d26eb6a8..a49a092864 100644 --- a/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/conditional/StreamForEachIfElseUnitTest.java +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conditional/StreamForEachIfElseUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.stream.conditional; +package com.baeldung.streams.conditional; import java.util.Arrays; import java.util.List; diff --git a/java-streams/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/primitivestreams/PrimitiveStreamsUnitTest.java similarity index 98% rename from java-streams/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java rename to core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/primitivestreams/PrimitiveStreamsUnitTest.java index 67954f0bba..18966425e4 100644 --- a/java-streams/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/primitivestreams/PrimitiveStreamsUnitTest.java @@ -1,14 +1,14 @@ -package com.baeldung.stream; +package com.baeldung.streams.primitivestreams; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import org.junit.Test; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class PrimitiveStreamsUnitTest { diff --git a/java-streams/.gitignore b/core-java-modules/core-java-streams/.gitignore similarity index 100% rename from java-streams/.gitignore rename to core-java-modules/core-java-streams/.gitignore diff --git a/core-java-modules/core-java-streams/README.md b/core-java-modules/core-java-streams/README.md index e97641c221..e556c231fe 100644 --- a/core-java-modules/core-java-streams/README.md +++ b/core-java-modules/core-java-streams/README.md @@ -1,9 +1,16 @@ -========= +## Core Java streams -## Core Java 8 Cookbooks and Examples +This module contains articles about the Stream API in Java. ### Relevant Articles: -- [The Difference Between map() and flatMap()](https://www.baeldung.com/java-difference-map-and-flatmap) -- [How to Use if/else Logic in Java 8 Streams](https://www.baeldung.com/java-8-streams-if-else-logic) -- [The Difference Between Collection.stream().forEach() and Collection.forEach()](https://www.baeldung.com/java-collection-stream-foreach) -- [Guide to Java 8’s Collectors](https://www.baeldung.com/java-8-collectors) \ No newline at end of file +- [Java 8 and Infinite Streams](https://www.baeldung.com/java-inifinite-streams) +- [How to Get the Last Element of a Stream in Java?](https://www.baeldung.com/java-stream-last-element) +- [“Stream has already been operated upon or closed” Exception in Java](https://www.baeldung.com/java-stream-operated-upon-or-closed-exception) +- [Iterable to Stream in Java](https://www.baeldung.com/java-iterable-to-stream) +- [How to Iterate Over a Stream With Indices](https://www.baeldung.com/java-stream-indices) +- [Stream Ordering in Java](https://www.baeldung.com/java-stream-ordering) +- [Introduction to Protonpack](https://www.baeldung.com/java-protonpack) +- [Java Stream Filter with Lambda Expression](https://www.baeldung.com/java-stream-filter-lambda) +- [Counting Matches on a Stream Filter](https://www.baeldung.com/java-stream-filter-count) +- [Summing Numbers with Java Streams](https://www.baeldung.com/java-stream-sum) +- More articles: [[next -->]](/../core-java-streams-2) \ No newline at end of file diff --git a/core-java-modules/core-java-streams/pom.xml b/core-java-modules/core-java-streams/pom.xml index 96d97f3759..9b68c8dded 100644 --- a/core-java-modules/core-java-streams/pom.xml +++ b/core-java-modules/core-java-streams/pom.xml @@ -14,6 +14,34 @@ + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + provided + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + log4j + log4j + ${log4j.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + org.assertj @@ -21,6 +49,36 @@ ${assertj.version} test + + com.codepoetics + protonpack + ${protonpack.version} + + + io.vavr + vavr + ${vavr.version} + + + one.util + streamex + ${streamex.version} + + + org.aspectj + aspectjrt + ${asspectj.version} + + + org.aspectj + aspectjweaver + ${asspectj.version} + + + pl.touk + throwing-function + ${throwing-function.version} + @@ -31,10 +89,33 @@ true + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + -parameters + + + + + 0.9.0 + 1.15 + 0.6.5 + 2.10 + 1.3 - 3.6.1 + 3.11.1 + 1.8.9 + 3.1 + 1.8 + 1.8 diff --git a/java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java similarity index 100% rename from java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java diff --git a/java-streams/src/main/java/com/baeldung/stream/StreamApi.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamApi.java similarity index 100% rename from java-streams/src/main/java/com/baeldung/stream/StreamApi.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamApi.java diff --git a/java-streams/src/main/java/com/baeldung/stream/StreamIndices.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamIndices.java similarity index 100% rename from java-streams/src/main/java/com/baeldung/stream/StreamIndices.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamIndices.java diff --git a/java-streams/src/main/java/com/baeldung/stream/filter/Customer.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/filter/Customer.java similarity index 100% rename from java-streams/src/main/java/com/baeldung/stream/filter/Customer.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/filter/Customer.java diff --git a/java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java similarity index 94% rename from java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java index 3170b1fb31..c44aaf8005 100644 --- a/java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java +++ b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java @@ -1,8 +1,8 @@ -package com.baeldung.stream.sum; - -public class ArithmeticUtils { - - public static int add(int a, int b) { - return a + b; - } -} +package com.baeldung.stream.sum; + +public class ArithmeticUtils { + + public static int add(int a, int b) { + return a + b; + } +} diff --git a/java-streams/src/main/java/com/baeldung/stream/sum/Item.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/Item.java similarity index 94% rename from java-streams/src/main/java/com/baeldung/stream/sum/Item.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/Item.java index 2f162d6eda..28a1737db8 100644 --- a/java-streams/src/main/java/com/baeldung/stream/sum/Item.java +++ b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/Item.java @@ -1,31 +1,31 @@ -package com.baeldung.stream.sum; - -public class Item { - - private int id; - private Integer price; - - public Item(int id, Integer price) { - super(); - this.id = id; - this.price = price; - } - - // Standard getters and setters - public long getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public Integer getPrice() { - return price; - } - - public void setPrice(Integer price) { - this.price = price; - } - -} +package com.baeldung.stream.sum; + +public class Item { + + private int id; + private Integer price; + + public Item(int id, Integer price) { + super(); + this.id = id; + this.price = price; + } + + // Standard getters and setters + public long getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Integer getPrice() { + return price; + } + + public void setPrice(Integer price) { + this.price = price; + } + +} diff --git a/java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java similarity index 96% rename from java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java index 2f63cf8629..ea6459d360 100644 --- a/java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java +++ b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java @@ -1,59 +1,59 @@ -package com.baeldung.stream.sum; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public class StreamSumCalculator { - - public static Integer getSumUsingCustomizedAccumulator(List integers) { - return integers.stream() - .reduce(0, ArithmeticUtils::add); - - } - - public static Integer getSumUsingJavaAccumulator(List integers) { - return integers.stream() - .reduce(0, Integer::sum); - - } - - public static Integer getSumUsingReduce(List integers) { - return integers.stream() - .reduce(0, (a, b) -> a + b); - - } - - public static Integer getSumUsingCollect(List integers) { - - return integers.stream() - .collect(Collectors.summingInt(Integer::intValue)); - - } - - public static Integer getSumUsingSum(List integers) { - - return integers.stream() - .mapToInt(Integer::intValue) - .sum(); - } - - public static Integer getSumOfMapValues(Map map) { - - return map.values() - .stream() - .mapToInt(Integer::valueOf) - .sum(); - } - - public static Integer getSumIntegersFromString(String str) { - - Integer sum = Arrays.stream(str.split(" ")) - .filter((s) -> s.matches("\\d+")) - .mapToInt(Integer::valueOf) - .sum(); - - return sum; - } -} +package com.baeldung.stream.sum; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class StreamSumCalculator { + + public static Integer getSumUsingCustomizedAccumulator(List integers) { + return integers.stream() + .reduce(0, ArithmeticUtils::add); + + } + + public static Integer getSumUsingJavaAccumulator(List integers) { + return integers.stream() + .reduce(0, Integer::sum); + + } + + public static Integer getSumUsingReduce(List integers) { + return integers.stream() + .reduce(0, (a, b) -> a + b); + + } + + public static Integer getSumUsingCollect(List integers) { + + return integers.stream() + .collect(Collectors.summingInt(Integer::intValue)); + + } + + public static Integer getSumUsingSum(List integers) { + + return integers.stream() + .mapToInt(Integer::intValue) + .sum(); + } + + public static Integer getSumOfMapValues(Map map) { + + return map.values() + .stream() + .mapToInt(Integer::valueOf) + .sum(); + } + + public static Integer getSumIntegersFromString(String str) { + + Integer sum = Arrays.stream(str.split(" ")) + .filter((s) -> s.matches("\\d+")) + .mapToInt(Integer::valueOf) + .sum(); + + return sum; + } +} diff --git a/java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculatorWithObject.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculatorWithObject.java similarity index 96% rename from java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculatorWithObject.java rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculatorWithObject.java index b83616928e..8a162429d2 100644 --- a/java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculatorWithObject.java +++ b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculatorWithObject.java @@ -1,38 +1,38 @@ -package com.baeldung.stream.sum; - -import java.util.List; -import java.util.stream.Collectors; - -public class StreamSumCalculatorWithObject { - - public static Integer getSumUsingCustomizedAccumulator(List items) { - return items.stream() - .map(x -> x.getPrice()) - .reduce(0, ArithmeticUtils::add); - } - - public static Integer getSumUsingJavaAccumulator(List items) { - return items.stream() - .map(x -> x.getPrice()) - .reduce(0, Integer::sum); - } - - public static Integer getSumUsingReduce(List items) { - return items.stream() - .map(item -> item.getPrice()) - .reduce(0, (a, b) -> a + b); - } - - public static Integer getSumUsingCollect(List items) { - return items.stream() - .map(x -> x.getPrice()) - .collect(Collectors.summingInt(Integer::intValue)); - } - - public static Integer getSumUsingSum(List items) { - return items.stream() - .mapToInt(x -> x.getPrice()) - .sum(); - } - -} +package com.baeldung.stream.sum; + +import java.util.List; +import java.util.stream.Collectors; + +public class StreamSumCalculatorWithObject { + + public static Integer getSumUsingCustomizedAccumulator(List items) { + return items.stream() + .map(x -> x.getPrice()) + .reduce(0, ArithmeticUtils::add); + } + + public static Integer getSumUsingJavaAccumulator(List items) { + return items.stream() + .map(x -> x.getPrice()) + .reduce(0, Integer::sum); + } + + public static Integer getSumUsingReduce(List items) { + return items.stream() + .map(item -> item.getPrice()) + .reduce(0, (a, b) -> a + b); + } + + public static Integer getSumUsingCollect(List items) { + return items.stream() + .map(x -> x.getPrice()) + .collect(Collectors.summingInt(Integer::intValue)); + } + + public static Integer getSumUsingSum(List items) { + return items.stream() + .mapToInt(x -> x.getPrice()) + .sum(); + } + +} diff --git a/java-streams/src/test/java/com/baeldung/java/conversion/IterableStreamConversionUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/conversion/IterableStreamConversionUnitTest.java similarity index 96% rename from java-streams/src/test/java/com/baeldung/java/conversion/IterableStreamConversionUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/conversion/IterableStreamConversionUnitTest.java index 99e8088054..f65f91a768 100644 --- a/java-streams/src/test/java/com/baeldung/java/conversion/IterableStreamConversionUnitTest.java +++ b/core-java-modules/core-java-streams/src/test/java/com/baeldung/conversion/IterableStreamConversionUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.java.conversion; +package com.baeldung.conversion; import org.junit.Assert; import org.junit.Test; diff --git a/java-streams/src/test/java/com/baeldung/protonpack/ProtonpackUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/protonpack/ProtonpackUnitTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/protonpack/ProtonpackUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/protonpack/ProtonpackUnitTest.java diff --git a/java-streams/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamApiUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/StreamApiUnitTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/stream/StreamApiUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/StreamApiUnitTest.java diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamIndicesUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/StreamIndicesUnitTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/stream/StreamIndicesUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/StreamIndicesUnitTest.java diff --git a/java-streams/src/test/java/com/baeldung/stream/SupplierStreamUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/SupplierStreamUnitTest.java similarity index 97% rename from java-streams/src/test/java/com/baeldung/stream/SupplierStreamUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/SupplierStreamUnitTest.java index a496e18b2d..69edc4f535 100644 --- a/java-streams/src/test/java/com/baeldung/stream/SupplierStreamUnitTest.java +++ b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/SupplierStreamUnitTest.java @@ -1,35 +1,35 @@ -package com.baeldung.stream; - -import static org.junit.Assert.fail; - -import java.util.Optional; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import org.junit.Test; - -public class SupplierStreamUnitTest { - - @Test(expected = IllegalStateException.class) - public void givenStream_whenStreamUsedTwice_thenThrowException() { - Stream stringStream = Stream.of("A", "B", "C", "D"); - Optional result1 = stringStream.findAny(); - System.out.println(result1.get()); - Optional result2 = stringStream.findFirst(); - System.out.println(result2.get()); - } - - @Test - public void givenStream_whenUsingSupplier_thenNoExceptionIsThrown() { - try { - Supplier> streamSupplier = () -> Stream.of("A", "B", "C", "D"); - Optional result1 = streamSupplier.get().findAny(); - System.out.println(result1.get()); - Optional result2 = streamSupplier.get().findFirst(); - System.out.println(result2.get()); - } catch (IllegalStateException e) { - fail(); - } - } - +package com.baeldung.stream; + +import static org.junit.Assert.fail; + +import java.util.Optional; +import java.util.function.Supplier; +import java.util.stream.Stream; + +import org.junit.Test; + +public class SupplierStreamUnitTest { + + @Test(expected = IllegalStateException.class) + public void givenStream_whenStreamUsedTwice_thenThrowException() { + Stream stringStream = Stream.of("A", "B", "C", "D"); + Optional result1 = stringStream.findAny(); + System.out.println(result1.get()); + Optional result2 = stringStream.findFirst(); + System.out.println(result2.get()); + } + + @Test + public void givenStream_whenUsingSupplier_thenNoExceptionIsThrown() { + try { + Supplier> streamSupplier = () -> Stream.of("A", "B", "C", "D"); + Optional result1 = streamSupplier.get().findAny(); + System.out.println(result1.get()); + Optional result2 = streamSupplier.get().findFirst(); + System.out.println(result2.get()); + } catch (IllegalStateException e) { + fail(); + } + } + } \ No newline at end of file diff --git a/java-streams/src/test/java/com/baeldung/stream/filter/StreamCountUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/filter/StreamCountUnitTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/stream/filter/StreamCountUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/filter/StreamCountUnitTest.java diff --git a/java-streams/src/test/java/com/baeldung/stream/filter/StreamFilterUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/filter/StreamFilterUnitTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/stream/filter/StreamFilterUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/filter/StreamFilterUnitTest.java diff --git a/java-streams/src/test/java/com/baeldung/stream/sum/StreamSumUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/sum/StreamSumUnitTest.java similarity index 97% rename from java-streams/src/test/java/com/baeldung/stream/sum/StreamSumUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/sum/StreamSumUnitTest.java index 46e1af9a4a..f03703154a 100644 --- a/java-streams/src/test/java/com/baeldung/stream/sum/StreamSumUnitTest.java +++ b/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/sum/StreamSumUnitTest.java @@ -1,136 +1,136 @@ -package com.baeldung.stream.sum; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Test; - -public class StreamSumUnitTest { - - @Test - public void givenListOfIntegersWhenSummingUsingCustomizedAccumulatorThenCorrectValueReturned() { - List integers = Arrays.asList(1, 2, 3, 4, 5); - Integer sum = StreamSumCalculator.getSumUsingCustomizedAccumulator(integers); - assertEquals(15, sum.intValue()); - - } - - @Test - public void givenListOfIntegersWhenSummingUsingJavaAccumulatorThenCorrectValueReturned() { - List integers = Arrays.asList(1, 2, 3, 4, 5); - Integer sum = StreamSumCalculator.getSumUsingJavaAccumulator(integers); - assertEquals(15, sum.intValue()); - } - - @Test - public void givenListOfIntegersWhenSummingUsingReduceThenCorrectValueReturned() { - List integers = Arrays.asList(1, 2, 3, 4, 5); - Integer sum = StreamSumCalculator.getSumUsingReduce(integers); - assertEquals(15, sum.intValue()); - } - - @Test - public void givenListOfIntegersWhenSummingUsingCollectThenCorrectValueReturned() { - List integers = Arrays.asList(1, 2, 3, 4, 5); - Integer sum = StreamSumCalculator.getSumUsingCollect(integers); - assertEquals(15, sum.intValue()); - } - - @Test - public void givenListOfIntegersWhenSummingUsingSumThenCorrectValueReturned() { - List integers = Arrays.asList(1, 2, 3, 4, 5); - Integer sum = StreamSumCalculator.getSumUsingSum(integers); - assertEquals(15, sum.intValue()); - } - - @Test - public void givenListOfItemsWhenSummingUsingCustomizedAccumulatorThenCorrectValueReturned() { - Item item1 = new Item(1, 10); - Item item2 = new Item(2, 15); - Item item3 = new Item(3, 25); - Item item4 = new Item(4, 40); - - List items = Arrays.asList(item1, item2, item3, item4); - - Integer sum = StreamSumCalculatorWithObject.getSumUsingCustomizedAccumulator(items); - assertEquals(90, sum.intValue()); - - } - - @Test - public void givenListOfItemsWhenSummingUsingJavaAccumulatorThenCorrectValueReturned() { - Item item1 = new Item(1, 10); - Item item2 = new Item(2, 15); - Item item3 = new Item(3, 25); - Item item4 = new Item(4, 40); - - List items = Arrays.asList(item1, item2, item3, item4); - - Integer sum = StreamSumCalculatorWithObject.getSumUsingJavaAccumulator(items); - assertEquals(90, sum.intValue()); - } - - @Test - public void givenListOfItemsWhenSummingUsingReduceThenCorrectValueReturned() { - Item item1 = new Item(1, 10); - Item item2 = new Item(2, 15); - Item item3 = new Item(3, 25); - Item item4 = new Item(4, 40); - - List items = Arrays.asList(item1, item2, item3, item4); - - Integer sum = StreamSumCalculatorWithObject.getSumUsingReduce(items); - assertEquals(90, sum.intValue()); - } - - @Test - public void givenListOfItemsWhenSummingUsingCollectThenCorrectValueReturned() { - Item item1 = new Item(1, 10); - Item item2 = new Item(2, 15); - Item item3 = new Item(3, 25); - Item item4 = new Item(4, 40); - - List items = Arrays.asList(item1, item2, item3, item4); - - Integer sum = StreamSumCalculatorWithObject.getSumUsingCollect(items); - assertEquals(90, sum.intValue()); - } - - @Test - public void givenListOfItemsWhenSummingUsingSumThenCorrectValueReturned() { - Item item1 = new Item(1, 10); - Item item2 = new Item(2, 15); - Item item3 = new Item(3, 25); - Item item4 = new Item(4, 40); - - List items = Arrays.asList(item1, item2, item3, item4); - - Integer sum = StreamSumCalculatorWithObject.getSumUsingSum(items); - assertEquals(90, sum.intValue()); - } - - @Test - public void givenMapWhenSummingThenCorrectValueReturned() { - Map map = new HashMap(); - map.put(1, 10); - map.put(2, 15); - map.put(3, 25); - map.put(4, 40); - - Integer sum = StreamSumCalculator.getSumOfMapValues(map); - assertEquals(90, sum.intValue()); - } - - @Test - public void givenStringWhenSummingThenCorrectValueReturned() { - String string = "Item1 10 Item2 25 Item3 30 Item4 45"; - - Integer sum = StreamSumCalculator.getSumIntegersFromString(string); - assertEquals(110, sum.intValue()); - } - -} +package com.baeldung.stream.sum; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +public class StreamSumUnitTest { + + @Test + public void givenListOfIntegersWhenSummingUsingCustomizedAccumulatorThenCorrectValueReturned() { + List integers = Arrays.asList(1, 2, 3, 4, 5); + Integer sum = StreamSumCalculator.getSumUsingCustomizedAccumulator(integers); + assertEquals(15, sum.intValue()); + + } + + @Test + public void givenListOfIntegersWhenSummingUsingJavaAccumulatorThenCorrectValueReturned() { + List integers = Arrays.asList(1, 2, 3, 4, 5); + Integer sum = StreamSumCalculator.getSumUsingJavaAccumulator(integers); + assertEquals(15, sum.intValue()); + } + + @Test + public void givenListOfIntegersWhenSummingUsingReduceThenCorrectValueReturned() { + List integers = Arrays.asList(1, 2, 3, 4, 5); + Integer sum = StreamSumCalculator.getSumUsingReduce(integers); + assertEquals(15, sum.intValue()); + } + + @Test + public void givenListOfIntegersWhenSummingUsingCollectThenCorrectValueReturned() { + List integers = Arrays.asList(1, 2, 3, 4, 5); + Integer sum = StreamSumCalculator.getSumUsingCollect(integers); + assertEquals(15, sum.intValue()); + } + + @Test + public void givenListOfIntegersWhenSummingUsingSumThenCorrectValueReturned() { + List integers = Arrays.asList(1, 2, 3, 4, 5); + Integer sum = StreamSumCalculator.getSumUsingSum(integers); + assertEquals(15, sum.intValue()); + } + + @Test + public void givenListOfItemsWhenSummingUsingCustomizedAccumulatorThenCorrectValueReturned() { + Item item1 = new Item(1, 10); + Item item2 = new Item(2, 15); + Item item3 = new Item(3, 25); + Item item4 = new Item(4, 40); + + List items = Arrays.asList(item1, item2, item3, item4); + + Integer sum = StreamSumCalculatorWithObject.getSumUsingCustomizedAccumulator(items); + assertEquals(90, sum.intValue()); + + } + + @Test + public void givenListOfItemsWhenSummingUsingJavaAccumulatorThenCorrectValueReturned() { + Item item1 = new Item(1, 10); + Item item2 = new Item(2, 15); + Item item3 = new Item(3, 25); + Item item4 = new Item(4, 40); + + List items = Arrays.asList(item1, item2, item3, item4); + + Integer sum = StreamSumCalculatorWithObject.getSumUsingJavaAccumulator(items); + assertEquals(90, sum.intValue()); + } + + @Test + public void givenListOfItemsWhenSummingUsingReduceThenCorrectValueReturned() { + Item item1 = new Item(1, 10); + Item item2 = new Item(2, 15); + Item item3 = new Item(3, 25); + Item item4 = new Item(4, 40); + + List items = Arrays.asList(item1, item2, item3, item4); + + Integer sum = StreamSumCalculatorWithObject.getSumUsingReduce(items); + assertEquals(90, sum.intValue()); + } + + @Test + public void givenListOfItemsWhenSummingUsingCollectThenCorrectValueReturned() { + Item item1 = new Item(1, 10); + Item item2 = new Item(2, 15); + Item item3 = new Item(3, 25); + Item item4 = new Item(4, 40); + + List items = Arrays.asList(item1, item2, item3, item4); + + Integer sum = StreamSumCalculatorWithObject.getSumUsingCollect(items); + assertEquals(90, sum.intValue()); + } + + @Test + public void givenListOfItemsWhenSummingUsingSumThenCorrectValueReturned() { + Item item1 = new Item(1, 10); + Item item2 = new Item(2, 15); + Item item3 = new Item(3, 25); + Item item4 = new Item(4, 40); + + List items = Arrays.asList(item1, item2, item3, item4); + + Integer sum = StreamSumCalculatorWithObject.getSumUsingSum(items); + assertEquals(90, sum.intValue()); + } + + @Test + public void givenMapWhenSummingThenCorrectValueReturned() { + Map map = new HashMap(); + map.put(1, 10); + map.put(2, 15); + map.put(3, 25); + map.put(4, 40); + + Integer sum = StreamSumCalculator.getSumOfMapValues(map); + assertEquals(90, sum.intValue()); + } + + @Test + public void givenStringWhenSummingThenCorrectValueReturned() { + String string = "Item1 10 Item2 25 Item3 30 Item4 45"; + + Integer sum = StreamSumCalculator.getSumIntegersFromString(string); + assertEquals(110, sum.intValue()); + } + +} diff --git a/java-streams/src/test/java/com/baeldung/streamordering/BenchmarkManualTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/streamordering/BenchmarkManualTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/streamordering/BenchmarkManualTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/streamordering/BenchmarkManualTest.java diff --git a/java-streams/src/test/java/com/baeldung/streamordering/StreamsOrderingUnitTest.java b/core-java-modules/core-java-streams/src/test/java/com/baeldung/streamordering/StreamsOrderingUnitTest.java similarity index 100% rename from java-streams/src/test/java/com/baeldung/streamordering/StreamsOrderingUnitTest.java rename to core-java-modules/core-java-streams/src/test/java/com/baeldung/streamordering/StreamsOrderingUnitTest.java diff --git a/java-streams/src/test/resources/.gitignore b/core-java-modules/core-java-streams/src/test/resources/.gitignore similarity index 100% rename from java-streams/src/test/resources/.gitignore rename to core-java-modules/core-java-streams/src/test/resources/.gitignore diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 41275f6367..54110d9362 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -7,7 +7,7 @@ - [How to Create an Executable JAR with Maven](http://www.baeldung.com/executable-jar-with-maven) - [Introduction to Nashorn](http://www.baeldung.com/java-nashorn) - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) -- [How to Add a Single Element to a Stream](http://www.baeldung.com/java-stream-append-prepend) +- [JVM Log Forging](http://www.baeldung.com/jvm-log-forging) - [How to Find all Getters Returning Null](http://www.baeldung.com/java-getters-returning-null) - [How to Get a Name of a Method Being Executed?](http://www.baeldung.com/java-name-of-executing-method) - [Introduction to Java Serialization](http://www.baeldung.com/java-serialization) diff --git a/java-streams-2/README.md b/java-streams-2/README.md deleted file mode 100644 index 66fbe69ed4..0000000000 --- a/java-streams-2/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## Java Streams Cookbooks and Examples - -This module contains articles about the Stream API in Java. - -### Relevant Articles: -- [Guide to Stream.reduce()](https://www.baeldung.com/java-stream-reduce) -- [How to Break from Java Stream forEach](https://www.baeldung.com/java-break-stream-foreach) -- [Java IntStream Conversions](https://www.baeldung.com/java-intstream-convert) -- More articles: [[<-- prev]](/java-streams) diff --git a/java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java b/java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java deleted file mode 100644 index a17c6a02b6..0000000000 --- a/java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.reduce.entities; - -public class User { - - private final String name; - private final int age; - - public User(String name, int age) { - this.name = name; - this.age = age; - } - - public String getName() { - return name; - } - - public int getAge() { - return age; - } - - @Override - public String toString() { - return "User{" + "name=" + name + ", age=" + age + '}'; - } -} diff --git a/java-streams/README.md b/java-streams/README.md deleted file mode 100644 index a57fdec7fa..0000000000 --- a/java-streams/README.md +++ /dev/null @@ -1,21 +0,0 @@ -## Java Streams Cookbooks and Examples - -This module contains articles about the Stream API in Java. - -### Relevant Articles: -- [The Java 8 Stream API Tutorial](https://www.baeldung.com/java-8-streams) -- [Introduction to Java 8 Streams](https://www.baeldung.com/java-8-streams-introduction) -- [Java 8 and Infinite Streams](https://www.baeldung.com/java-inifinite-streams) -- [Java 8 Stream findFirst() vs. findAny()](https://www.baeldung.com/java-stream-findfirst-vs-findany) -- [How to Get the Last Element of a Stream in Java?](https://www.baeldung.com/java-stream-last-element) -- [“Stream has already been operated upon or closed” Exception in Java](https://www.baeldung.com/java-stream-operated-upon-or-closed-exception) -- [Iterable to Stream in Java](https://www.baeldung.com/java-iterable-to-stream) -- [How to Iterate Over a Stream With Indices](https://www.baeldung.com/java-stream-indices) -- [Primitive Type Streams in Java 8](https://www.baeldung.com/java-8-primitive-streams) -- [Stream Ordering in Java](https://www.baeldung.com/java-stream-ordering) -- [Introduction to Protonpack](https://www.baeldung.com/java-protonpack) -- [Java Stream Filter with Lambda Expression](https://www.baeldung.com/java-stream-filter-lambda) -- [Counting Matches on a Stream Filter](https://www.baeldung.com/java-stream-filter-count) -- [Java 8 Streams peek() API](https://www.baeldung.com/java-streams-peek-api) -- [Working With Maps Using Streams](https://www.baeldung.com/java-maps-streams) -- More articles: [[next -->]](/java-streams-2) diff --git a/java-streams/pom.xml b/java-streams/pom.xml deleted file mode 100644 index bd0123e01d..0000000000 --- a/java-streams/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ - - 4.0.0 - java-streams - 0.1.0-SNAPSHOT - java-streams - jar - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - - org.openjdk.jmh - jmh-core - ${jmh-core.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh-generator.version} - provided - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - log4j - log4j - ${log4j.version} - - - org.projectlombok - lombok - ${lombok.version} - provided - - - - org.assertj - assertj-core - ${assertj.version} - test - - - com.codepoetics - protonpack - ${protonpack.version} - - - io.vavr - vavr - ${vavr.version} - - - one.util - streamex - ${streamex.version} - - - org.aspectj - aspectjrt - ${asspectj.version} - - - org.aspectj - aspectjweaver - ${asspectj.version} - - - pl.touk - throwing-function - ${throwing-function.version} - - - - - java-streams - - - src/main/resources - true - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source} - ${maven.compiler.target} - -parameters - - - - - - - - 0.9.0 - 1.15 - 0.6.5 - 2.10 - 1.3 - - 3.11.1 - 1.8.9 - 3.1 - 1.8 - 1.8 - - diff --git a/java-streams/src/main/java/com/baeldung/reduce/application/Application.java b/java-streams/src/main/java/com/baeldung/reduce/application/Application.java deleted file mode 100644 index b101c86780..0000000000 --- a/java-streams/src/main/java/com/baeldung/reduce/application/Application.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.baeldung.reduce.application; - -import com.baeldung.reduce.entities.User; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.Warmup; - -public class Application { - - public static void main(String[] args) throws Exception { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - int result1 = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element); - System.out.println(result1); - - int result2 = numbers.stream().reduce(0, Integer::sum); - System.out.println(result2); - - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result3 = letters.stream().reduce("", (partialString, element) -> partialString + element); - System.out.println(result3); - - String result4 = letters.stream().reduce("", String::concat); - System.out.println(result4); - - String result5 = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase()); - System.out.println(result5); - - List users = Arrays.asList(new User("John", 30), new User("Julie", 35)); - int result6 = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - System.out.println(result6); - - String result7 = letters.parallelStream().reduce("", String::concat); - System.out.println(result7); - - int result8 = users.parallelStream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - System.out.println(result8); - - org.openjdk.jmh.Main.main(args); - - } - - @Benchmark - @Fork(value = 1, warmups = 2) - @Warmup(iterations = 2) - @BenchmarkMode(Mode.AverageTime) - public void executeReduceOnParallelizedStream() { - List userList = new ArrayList<>(); - for (int i = 0; i <= 1000000; i++) { - userList.add(new User("John" + i, i)); - } - userList.parallelStream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - } - - @Benchmark - @Fork(value = 1, warmups = 2) - @Warmup(iterations = 2) - @BenchmarkMode(Mode.AverageTime) - public void executeReduceOnSequentialStream() { - List userList = new ArrayList<>(); - for (int i = 0; i <= 1000000; i++) { - userList.add(new User("John" + i, i)); - } - userList.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - } -} diff --git a/java-streams/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java b/java-streams/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java deleted file mode 100644 index 8b4af2cbe2..0000000000 --- a/java-streams/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.reduce.utilities; - -import java.util.List; -import java.util.function.BiFunction; -import java.util.logging.Level; -import java.util.logging.Logger; - -public abstract class NumberUtils { - - private static final Logger LOGGER = Logger.getLogger(NumberUtils.class.getName()); - - public static int divideListElements(List values, Integer divider) { - return values.stream() - .reduce(0, (a, b) -> { - try { - return a / divider + b / divider; - } catch (ArithmeticException e) { - LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero"); - } - return 0; - }); - } - - public static int divideListElementsWithExtractedTryCatchBlock(List values, int divider) { - return values.stream().reduce(0, (a, b) -> divide(a, divider) + divide(b, divider)); - } - - public static int divideListElementsWithApplyFunctionMethod(List values, int divider) { - BiFunction division = (a, b) -> a / b; - return values.stream().reduce(0, (a, b) -> applyFunction(division, a, divider) + applyFunction(division, b, divider)); - } - - private static int divide(int value, int factor) { - int result = 0; - try { - result = value / factor; - } catch (ArithmeticException e) { - LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero"); - } - return result; - } - - private static int applyFunction(BiFunction function, int a, int b) { - try { - return function.apply(a, b); - } - catch(Exception e) { - LOGGER.log(Level.INFO, "Exception occurred!"); - } - return 0; - } -} diff --git a/java-streams/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java b/java-streams/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java deleted file mode 100644 index 8e2ff7bf22..0000000000 --- a/java-streams/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.baeldung.reduce.tests; - -import com.baeldung.reduce.entities.User; -import com.baeldung.reduce.utilities.NumberUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import static org.assertj.core.api.Assertions.assertThat; -import org.junit.Test; - -public class StreamReduceUnitTest { - - @Test - public void givenIntegerList_whenReduceWithSumAccumulatorLambda_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - int result = numbers.stream().reduce(0, (a, b) -> a + b); - assertThat(result).isEqualTo(21); - } - - @Test - public void givenIntegerList_whenReduceWithSumAccumulatorMethodReference_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - int result = numbers.stream().reduce(0, Integer::sum); - assertThat(result).isEqualTo(21); - } - - @Test - public void givenStringList_whenReduceWithConcatenatorAccumulatorLambda_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.stream().reduce("", (a, b) -> a + b); - assertThat(result).isEqualTo("abcde"); - } - - @Test - public void givenStringList_whenReduceWithConcatenatorAccumulatorMethodReference_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.stream().reduce("", String::concat); - assertThat(result).isEqualTo("abcde"); - } - - @Test - public void givenStringList_whenReduceWithUppercaseConcatenatorAccumulator_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.stream().reduce("", (a, b) -> a.toUpperCase() + b.toUpperCase()); - assertThat(result).isEqualTo("ABCDE"); - } - - @Test - public void givenUserList_whenReduceWithAgeAccumulatorAndSumCombiner_thenCorrect() { - List users = Arrays.asList(new User("John", 30), new User("Julie", 35)); - int result = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum); - assertThat(result).isEqualTo(65); - } - - @Test - public void givenStringList_whenReduceWithParallelStream_thenCorrect() { - List letters = Arrays.asList("a", "b", "c", "d", "e"); - String result = letters.parallelStream().reduce("", String::concat); - assertThat(result).isEqualTo("abcde"); - } - - @Test - public void givenNumberUtilsClass_whenCalledDivideListElements_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - assertThat(NumberUtils.divideListElements(numbers, 1)).isEqualTo(21); - } - - @Test - public void givenNumberUtilsClass_whenCalledDivideListElementsWithExtractedTryCatchBlock_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - assertThat(NumberUtils.divideListElementsWithExtractedTryCatchBlock(numbers, 1)).isEqualTo(21); - } - - @Test - public void givenStream_whneCalleddivideListElementsWithApplyFunctionMethod_thenCorrect() { - List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); - assertThat(NumberUtils.divideListElementsWithApplyFunctionMethod(numbers, 1)).isEqualTo(21); - } -} diff --git a/pom.xml b/pom.xml index f9e45f5c93..8ec64309ee 100644 --- a/pom.xml +++ b/pom.xml @@ -381,7 +381,7 @@ cloud-foundry-uaa/cf-uaa-oauth2-client cloud-foundry-uaa/cf-uaa-oauth2-resource-server code-generation - core-groovy + core-groovy core-groovy-2 core-groovy-collections @@ -391,6 +391,9 @@ core-java-modules/core-java-8-2 core-java-modules/core-java-annotations core-java-modules/core-java-streams + core-java-modules/core-java-streams-2 + core-java-modules/core-java-streams-3 + core-java-modules/core-java-function core-java-modules/core-java-lang-math @@ -500,8 +503,6 @@ java-numbers-2 java-rmi java-spi - java-streams - java-strings java-strings-2 java-strings-3 @@ -1152,7 +1153,7 @@ cloud-foundry-uaa/cf-uaa-oauth2-client cloud-foundry-uaa/cf-uaa-oauth2-resource-server code-generation - core-groovy + core-groovy core-groovy-2 core-groovy-collections @@ -1161,6 +1162,9 @@ core-java-modules/core-java-8-2 core-java-modules/core-java-annotations core-java-modules/core-java-streams + core-java-modules/core-java-streams-2 + core-java-modules/core-java-streams-3 + core-java-modules/core-java-function core-java-modules/core-java-lang-math @@ -1204,9 +1208,9 @@ core-java-modules/core-java-perf core-java-modules/core-java-sun core-java-modules/core-java-string-conversions - core-java-modules/core-java-string-conversions-2 - core-java-modules/core-java-string-apis - core-scala + core-java-modules/core-java-string-conversions-2 + core-java-modules/core-java-string-apis + core-scala couchbase custom-pmd @@ -1266,8 +1270,6 @@ java-numbers-2 java-rmi java-spi - java-streams - java-strings java-strings-2 java-strings-3 From 9872d61b55e7d011c5e76ec09669d2387248edd5 Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Fri, 18 Oct 2019 17:53:04 +0300 Subject: [PATCH 214/304] Move articles out of java-strings part3 --- .../core-java-string-algorithms-2/README.md | 16 ++++ .../core-java-string-algorithms-2/pom.xml | 67 +++++++++++++++++ .../addchar}/AppendCharAtPositionX.java | 2 +- .../baeldung}/padding/StringPaddingUtil.java | 2 +- .../removelastchar}/StringHelper.java | 2 +- .../RemoveLeadingAndTrailingZeroes.java | 5 +- .../ReplaceCharacterInString.java | 2 +- .../com/baeldung}/wordcount/WordCounter.java | 2 +- .../AppendCharAtPositionXUnitTest.java | 2 +- .../StringContainingCharactersUnitTest.java | 2 +- .../StringFromPrimitiveArrayUnitTest.java | 2 +- .../padding/StringPaddingUtilUnitTest.java | 2 +- .../RemoveLastCharUnitTest.java | 10 +-- ...emoveLeadingAndTrailingZeroesUnitTest.java | 10 +-- .../ReplaceCharInStringUnitTest.java | 3 +- .../StringReplaceAndRemoveUnitTest.java | 4 +- .../StringDiffBenchmarkUnitTest.java | 0 .../stringdiff/StringDiffUnitTest.java | 0 .../wordcount/WordCountUnitTest.java | 2 +- .../core-java-string-algorithms/README.md | 16 ++++ .../core-java-string-algorithms/pom.xml | 73 +++++++++++++++++++ .../com/baeldung/matchwords}/MatchWords.java | 10 +-- .../com/baeldung/palindrom}/Palindrome.java | 2 +- .../java/com/baeldung/pangram}/Pangram.java | 2 +- .../RemoveDuplicateFromString.java | 2 +- .../repetition/SubstringRepetition.java | 2 +- .../reverse/ReverseStringExamples.java | 2 +- .../com/baeldung}/searching/WordIndexer.java | 2 +- ...emovingStopwordsPerformanceComparison.java | 13 +--- .../src/main/resources/english_stopwords.txt | 0 .../src/main/resources/shakespeare-hamlet.txt | 0 .../CountCharsExampleUnitTest.java | 2 +- .../matchwords}/MatchWordsUnitTest.java | 2 +- .../palindrom}/PalindromeUnitTest.java | 2 +- .../baeldung/pangram}/PangramUnitTest.java | 5 +- .../RemoveDuplicateFromStringUnitTest.java | 2 +- .../RemovingEmojiFromStringUnitTest.java | 9 +-- .../SubstringRepetitionUnitTest.java | 8 +- .../ReverseStringExamplesUnitTest.java | 2 +- .../searching/WordIndexerUnitTest.java | 2 +- .../stopwords}/RemoveStopwordsUnitTest.java | 8 +- java-strings-2/README.md | 10 --- java-strings-3/README.md | 2 - java-strings-ops/README.md | 4 - java-strings-ops/pom.xml | 2 +- java-strings/README.md | 4 - pom.xml | 4 + 47 files changed, 237 insertions(+), 90 deletions(-) create mode 100644 core-java-modules/core-java-string-algorithms-2/README.md create mode 100644 core-java-modules/core-java-string-algorithms-2/pom.xml rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/addchar}/AppendCharAtPositionX.java (97%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung}/padding/StringPaddingUtil.java (96%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/removelastchar}/StringHelper.java (95%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung}/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java (97%) rename {java-strings/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/replacechar}/ReplaceCharacterInString.java (96%) rename {java-strings-3/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung}/wordcount/WordCounter.java (97%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/addchar}/AppendCharAtPositionXUnitTest.java (99%) rename {java-strings/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/containchar}/StringContainingCharactersUnitTest.java (99%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/join}/StringFromPrimitiveArrayUnitTest.java (99%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung}/padding/StringPaddingUtilUnitTest.java (98%) rename java-strings-ops/src/test/java/com/baeldung/string/StringHelperUnitTest.java => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/removelastchar/RemoveLastCharUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung}/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java (99%) rename {java-strings/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replacechar}/ReplaceCharInStringUnitTest.java (92%) rename {java-strings/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replaceremove}/StringReplaceAndRemoveUnitTest.java (98%) rename {java-strings-3 => core-java-modules/core-java-string-algorithms-2}/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java (100%) rename {java-strings-3 => core-java-modules/core-java-string-algorithms-2}/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java (100%) rename {java-strings-3/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung}/wordcount/WordCountUnitTest.java (97%) create mode 100644 core-java-modules/core-java-string-algorithms/README.md create mode 100644 core-java-modules/core-java-string-algorithms/pom.xml rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/matchwords}/MatchWords.java (92%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/palindrom}/Palindrome.java (98%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/pangram}/Pangram.java (98%) rename {java-strings-2/src/main/java/com/baeldung/stringduplicates => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/removeduplicates}/RemoveDuplicateFromString.java (98%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung}/repetition/SubstringRepetition.java (94%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung}/reverse/ReverseStringExamples.java (97%) rename {java-strings/src/main/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung}/searching/WordIndexer.java (96%) rename {java-strings-2/src/main/java/com/baeldung/string/performance => core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/stopwords}/RemovingStopwordsPerformanceComparison.java (82%) rename {java-strings-2 => core-java-modules/core-java-string-algorithms}/src/main/resources/english_stopwords.txt (100%) rename {java-strings-2 => core-java-modules/core-java-string-algorithms}/src/main/resources/shakespeare-hamlet.txt (100%) rename {java-strings-ops/src/test/java/com/baeldung/java/countingChars => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/countingchars}/CountCharsExampleUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/matchwords}/MatchWordsUnitTest.java (98%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/palindrom}/PalindromeUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/pangram}/PangramUnitTest.java (97%) rename {java-strings-2/src/test/java/com/baeldung/stringduplicates => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeduplicates}/RemoveDuplicateFromStringUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeemojis}/RemovingEmojiFromStringUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung}/repetition/SubstringRepetitionUnitTest.java (93%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung}/reverse/ReverseStringExamplesUnitTest.java (98%) rename {java-strings/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung}/searching/WordIndexerUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/stopwords}/RemoveStopwordsUnitTest.java (98%) diff --git a/core-java-modules/core-java-string-algorithms-2/README.md b/core-java-modules/core-java-string-algorithms-2/README.md new file mode 100644 index 0000000000..2cd64e1920 --- /dev/null +++ b/core-java-modules/core-java-string-algorithms-2/README.md @@ -0,0 +1,16 @@ +## Java String Algorithms + +This module contains articles about string-related algorithms. + +### Relevant Articles: +- [How to Remove the Last Character of a String?](https://www.baeldung.com/java-remove-last-character-of-string) +- [Add a Character to a String at a Given Position](https://www.baeldung.com/java-add-character-to-string) +- [Java Check a String for Lowercase/Uppercase Letter, Special Character and Digit](https://www.baeldung.com/java-lowercase-uppercase-special-character-digit-regex) +- [Remove or Replace Part of a String in Java](https://www.baeldung.com/java-remove-replace-string-part) +- [Replace a Character at a Specific Index in a String in Java](https://www.baeldung.com/java-replace-character-at-index) +- [Join Array of Primitives with Separator in Java](https://www.baeldung.com/java-join-primitive-array) +- [Pad a String with Zeros or Spaces in Java](https://www.baeldung.com/java-pad-string) +- [Remove Leading and Trailing Characters from a String](https://www.baeldung.com/java-remove-trailing-characters) +- [Counting Words in a String](https://www.baeldung.com/java-word-counting) +- [Finding the Difference Between Two Strings](https://www.baeldung.com/java-difference-between-two-strings) +- More articles: [[<-- prev]](../core-java-string-algorithms) diff --git a/core-java-modules/core-java-string-algorithms-2/pom.xml b/core-java-modules/core-java-string-algorithms-2/pom.xml new file mode 100644 index 0000000000..5b0e710bb8 --- /dev/null +++ b/core-java-modules/core-java-string-algorithms-2/pom.xml @@ -0,0 +1,67 @@ + + 4.0.0 + core-java-string-algorithms-2 + 0.1.0-SNAPSHOT + jar + core-java-string-algorithms-2 + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + com.google.guava + guava + ${guava.version} + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-core.version} + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.bitbucket.cowwoc + diff-match-patch + ${diff-match-path.version} + test + + + + + core-java-string-algorithms-2 + + + src/main/resources + true + + + + + + 3.8.1 + 3.6.1 + 1.2 + + + diff --git a/java-strings-ops/src/main/java/com/baeldung/string/AppendCharAtPositionX.java b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/addchar/AppendCharAtPositionX.java similarity index 97% rename from java-strings-ops/src/main/java/com/baeldung/string/AppendCharAtPositionX.java rename to core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/addchar/AppendCharAtPositionX.java index ad203ab348..92bb9a9832 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/AppendCharAtPositionX.java +++ b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/addchar/AppendCharAtPositionX.java @@ -1,7 +1,7 @@ /** * */ -package com.baeldung.string; +package com.baeldung.addchar; /** * @author swpraman diff --git a/java-strings-2/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/padding/StringPaddingUtil.java similarity index 96% rename from java-strings-2/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java rename to core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/padding/StringPaddingUtil.java index 80d05bb42a..1de82620c0 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java +++ b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/padding/StringPaddingUtil.java @@ -1,4 +1,4 @@ -package com.baeldung.string.padding; +package com.baeldung.padding; public class StringPaddingUtil { diff --git a/java-strings-ops/src/main/java/com/baeldung/string/StringHelper.java b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/removelastchar/StringHelper.java similarity index 95% rename from java-strings-ops/src/main/java/com/baeldung/string/StringHelper.java rename to core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/removelastchar/StringHelper.java index dac0d1272e..ebcc283851 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/StringHelper.java +++ b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/removelastchar/StringHelper.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.removelastchar; import java.util.Optional; diff --git a/java-strings-2/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java similarity index 97% rename from java-strings-2/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java rename to core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java index c9d748e897..386d34e0ac 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java +++ b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java @@ -1,9 +1,8 @@ -package com.baeldung.string.removeleadingtrailingchar; +package com.baeldung.removeleadingtrailingchar; -import org.apache.commons.lang3.StringUtils; - import com.google.common.base.CharMatcher; +import org.apache.commons.lang3.StringUtils; public class RemoveLeadingAndTrailingZeroes { diff --git a/java-strings/src/main/java/com/baeldung/string/ReplaceCharacterInString.java b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/replacechar/ReplaceCharacterInString.java similarity index 96% rename from java-strings/src/main/java/com/baeldung/string/ReplaceCharacterInString.java rename to core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/replacechar/ReplaceCharacterInString.java index 2cc67f0b51..29fb28a85b 100644 --- a/java-strings/src/main/java/com/baeldung/string/ReplaceCharacterInString.java +++ b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/replacechar/ReplaceCharacterInString.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.replacechar; public class ReplaceCharacterInString { diff --git a/java-strings-3/src/main/java/com/baeldung/string/wordcount/WordCounter.java b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/wordcount/WordCounter.java similarity index 97% rename from java-strings-3/src/main/java/com/baeldung/string/wordcount/WordCounter.java rename to core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/wordcount/WordCounter.java index 30275773a6..9963c3486b 100644 --- a/java-strings-3/src/main/java/com/baeldung/string/wordcount/WordCounter.java +++ b/core-java-modules/core-java-string-algorithms-2/src/main/java/com/baeldung/wordcount/WordCounter.java @@ -1,4 +1,4 @@ -package com.baeldung.string.wordcount; +package com.baeldung.wordcount; import java.util.StringTokenizer; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/addchar/AppendCharAtPositionXUnitTest.java similarity index 99% rename from java-strings-ops/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/addchar/AppendCharAtPositionXUnitTest.java index 7c5409fe29..e850cf1954 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/addchar/AppendCharAtPositionXUnitTest.java @@ -1,7 +1,7 @@ /** * */ -package com.baeldung.string; +package com.baeldung.addchar; import static org.junit.Assert.assertEquals; diff --git a/java-strings/src/test/java/com/baeldung/string/StringContainingCharactersUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/containchar/StringContainingCharactersUnitTest.java similarity index 99% rename from java-strings/src/test/java/com/baeldung/string/StringContainingCharactersUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/containchar/StringContainingCharactersUnitTest.java index be79103e6b..3b0e545584 100644 --- a/java-strings/src/test/java/com/baeldung/string/StringContainingCharactersUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/containchar/StringContainingCharactersUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.containchar; import org.junit.Test; diff --git a/java-strings-2/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/join/StringFromPrimitiveArrayUnitTest.java similarity index 99% rename from java-strings-2/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/join/StringFromPrimitiveArrayUnitTest.java index c93089e543..f6c9141c3f 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/join/StringFromPrimitiveArrayUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.join; import com.google.common.base.Joiner; import com.google.common.primitives.Chars; diff --git a/java-strings-2/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/padding/StringPaddingUtilUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/padding/StringPaddingUtilUnitTest.java index f6a077a88e..d8ef500b30 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/padding/StringPaddingUtilUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.padding; +package com.baeldung.padding; import com.google.common.base.Strings; import org.apache.commons.lang3.StringUtils; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/StringHelperUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/removelastchar/RemoveLastCharUnitTest.java similarity index 98% rename from java-strings-ops/src/test/java/com/baeldung/string/StringHelperUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/removelastchar/RemoveLastCharUnitTest.java index eb86e84905..e88158deb9 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/StringHelperUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/removelastchar/RemoveLastCharUnitTest.java @@ -1,12 +1,12 @@ -package com.baeldung.string; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; +package com.baeldung.removelastchar; import org.apache.commons.lang3.StringUtils; import org.junit.Test; -public class StringHelperUnitTest { +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class RemoveLastCharUnitTest { public static final String TEST_STRING = "abcdef"; public static final String NULL_STRING = null; diff --git a/java-strings-2/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java similarity index 99% rename from java-strings-2/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java index 55f932fea1..5dec58eea9 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java @@ -1,13 +1,13 @@ -package com.baeldung.string.removeleadingtrailingchar; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.stream.Stream; +package com.baeldung.removeleadingtrailingchar; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; + public class RemoveLeadingAndTrailingZeroesUnitTest { public static Stream leadingZeroTestProvider() { diff --git a/java-strings/src/test/java/com/baeldung/string/ReplaceCharInStringUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replacechar/ReplaceCharInStringUnitTest.java similarity index 92% rename from java-strings/src/test/java/com/baeldung/string/ReplaceCharInStringUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replacechar/ReplaceCharInStringUnitTest.java index c234c6953c..1e33a7f09d 100644 --- a/java-strings/src/test/java/com/baeldung/string/ReplaceCharInStringUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replacechar/ReplaceCharInStringUnitTest.java @@ -1,8 +1,9 @@ -package com.baeldung.string; +package com.baeldung.replacechar; import org.junit.Test; import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class ReplaceCharInStringUnitTest { private ReplaceCharacterInString characterInString = new ReplaceCharacterInString(); diff --git a/java-strings/src/test/java/com/baeldung/string/StringReplaceAndRemoveUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replaceremove/StringReplaceAndRemoveUnitTest.java similarity index 98% rename from java-strings/src/test/java/com/baeldung/string/StringReplaceAndRemoveUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replaceremove/StringReplaceAndRemoveUnitTest.java index 4d2b54241b..fe71aa6974 100644 --- a/java-strings/src/test/java/com/baeldung/string/StringReplaceAndRemoveUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/replaceremove/StringReplaceAndRemoveUnitTest.java @@ -1,7 +1,7 @@ -package com.baeldung.string; +package com.baeldung.replaceremove; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.StringUtils; import org.junit.Test; import static org.junit.Assert.assertFalse; diff --git a/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java similarity index 100% rename from java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java diff --git a/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java similarity index 100% rename from java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java diff --git a/java-strings-3/src/test/java/com/baeldung/string/wordcount/WordCountUnitTest.java b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/wordcount/WordCountUnitTest.java similarity index 97% rename from java-strings-3/src/test/java/com/baeldung/string/wordcount/WordCountUnitTest.java rename to core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/wordcount/WordCountUnitTest.java index fdd045978f..bdfee61d5a 100644 --- a/java-strings-3/src/test/java/com/baeldung/string/wordcount/WordCountUnitTest.java +++ b/core-java-modules/core-java-string-algorithms-2/src/test/java/com/baeldung/wordcount/WordCountUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.wordcount; +package com.baeldung.wordcount; import static org.junit.Assert.assertEquals; diff --git a/core-java-modules/core-java-string-algorithms/README.md b/core-java-modules/core-java-string-algorithms/README.md new file mode 100644 index 0000000000..70a4b5ffaf --- /dev/null +++ b/core-java-modules/core-java-string-algorithms/README.md @@ -0,0 +1,16 @@ +## Java String Algorithms + +This module contains articles about string-related algorithms. + +### Relevant Articles: +- [Check If a String Is a Palindrome](https://www.baeldung.com/java-palindrome) +- [Count Occurrences of a Char in a String](https://www.baeldung.com/java-count-chars) +- [Using indexOf to Find All Occurrences of a Word in a String](https://www.baeldung.com/java-indexOf-find-string-occurrences) +- [Removing Stopwords from a String in Java](https://www.baeldung.com/java-string-remove-stopwords) +- [Removing Repeated Characters from a String](https://www.baeldung.com/java-remove-repeated-char) +- [How to Reverse a String in Java](https://www.baeldung.com/java-reverse-string) +- [Check If a String Is a Pangram in Java](https://www.baeldung.com/java-string-pangram) +- [Check If a String Contains Multiple Keywords](https://www.baeldung.com/string-contains-multiple-words) +- [Checking If a String Is a Repeated Substring](https://www.baeldung.com/java-repeated-substring) +- [Remove Emojis from a Java String](https://www.baeldung.com/java-string-remove-emojis) +- More articles: [[next -->]](../core-java-string-algorithms-2) diff --git a/core-java-modules/core-java-string-algorithms/pom.xml b/core-java-modules/core-java-string-algorithms/pom.xml new file mode 100644 index 0000000000..f1b7499b6d --- /dev/null +++ b/core-java-modules/core-java-string-algorithms/pom.xml @@ -0,0 +1,73 @@ + + 4.0.0 + core-java-string-algorithms + 0.1.0-SNAPSHOT + jar + core-java-string-algorithms + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + com.google.guava + guava + ${guava.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.ahocorasick + ahocorasick + ${ahocorasick.version} + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-core.version} + + + com.vdurmont + emoji-java + ${emoji-java.version} + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + core-java-string-algorithms + + + src/main/resources + true + + + + + + 3.8.1 + 27.0.1-jre + 0.4.0 + 3.6.1 + 4.0.0 + + + diff --git a/java-strings-2/src/main/java/com/baeldung/string/MatchWords.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/matchwords/MatchWords.java similarity index 92% rename from java-strings-2/src/main/java/com/baeldung/string/MatchWords.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/matchwords/MatchWords.java index 0cad52c320..b5b7e92d8e 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/MatchWords.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/matchwords/MatchWords.java @@ -1,14 +1,12 @@ -package com.baeldung.string; +package com.baeldung.matchwords; import org.ahocorasick.trie.Emit; -import org.ahocorasick.trie.Token; import org.ahocorasick.trie.Trie; -import java.util.*; -import java.util.function.Function; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; public class MatchWords { diff --git a/java-strings-ops/src/main/java/com/baeldung/string/Palindrome.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/palindrom/Palindrome.java similarity index 98% rename from java-strings-ops/src/main/java/com/baeldung/string/Palindrome.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/palindrom/Palindrome.java index 97d4d36d07..4a98e6583a 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/Palindrome.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/palindrom/Palindrome.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.palindrom; import java.util.stream.IntStream; diff --git a/java-strings-2/src/main/java/com/baeldung/string/Pangram.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/pangram/Pangram.java similarity index 98% rename from java-strings-2/src/main/java/com/baeldung/string/Pangram.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/pangram/Pangram.java index c09b0c1d29..ca2a44280c 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/Pangram.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/pangram/Pangram.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.pangram; import java.util.Arrays; import java.util.Map; diff --git a/java-strings-2/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/removeduplicates/RemoveDuplicateFromString.java similarity index 98% rename from java-strings-2/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/removeduplicates/RemoveDuplicateFromString.java index d8fd9c4b14..a000f4dbd6 100644 --- a/java-strings-2/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/removeduplicates/RemoveDuplicateFromString.java @@ -1,4 +1,4 @@ -package com.baeldung.stringduplicates; +package com.baeldung.removeduplicates; import java.util.Arrays; import java.util.HashSet; diff --git a/java-strings-2/src/main/java/com/baeldung/string/repetition/SubstringRepetition.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/repetition/SubstringRepetition.java similarity index 94% rename from java-strings-2/src/main/java/com/baeldung/string/repetition/SubstringRepetition.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/repetition/SubstringRepetition.java index 466ce9146b..6715367a19 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/repetition/SubstringRepetition.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/repetition/SubstringRepetition.java @@ -1,4 +1,4 @@ -package com.baeldung.string.repetition; +package com.baeldung.repetition; public class SubstringRepetition { diff --git a/java-strings-2/src/main/java/com/baeldung/string/reverse/ReverseStringExamples.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/reverse/ReverseStringExamples.java similarity index 97% rename from java-strings-2/src/main/java/com/baeldung/string/reverse/ReverseStringExamples.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/reverse/ReverseStringExamples.java index 1a58d09598..5236f14ccd 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/reverse/ReverseStringExamples.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/reverse/ReverseStringExamples.java @@ -1,4 +1,4 @@ -package com.baeldung.string.reverse; +package com.baeldung.reverse; import org.apache.commons.lang3.StringUtils; diff --git a/java-strings/src/main/java/com/baeldung/string/searching/WordIndexer.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/searching/WordIndexer.java similarity index 96% rename from java-strings/src/main/java/com/baeldung/string/searching/WordIndexer.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/searching/WordIndexer.java index 1bcad6dd32..c7550f8e16 100644 --- a/java-strings/src/main/java/com/baeldung/string/searching/WordIndexer.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/searching/WordIndexer.java @@ -1,4 +1,4 @@ -package com.baeldung.string.searching; +package com.baeldung.searching; import java.util.ArrayList; import java.util.List; diff --git a/java-strings-2/src/main/java/com/baeldung/string/performance/RemovingStopwordsPerformanceComparison.java b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/stopwords/RemovingStopwordsPerformanceComparison.java similarity index 82% rename from java-strings-2/src/main/java/com/baeldung/string/performance/RemovingStopwordsPerformanceComparison.java rename to core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/stopwords/RemovingStopwordsPerformanceComparison.java index 5b455459cd..7df64de3f1 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/performance/RemovingStopwordsPerformanceComparison.java +++ b/core-java-modules/core-java-string-algorithms/src/main/java/com/baeldung/stopwords/RemovingStopwordsPerformanceComparison.java @@ -1,4 +1,6 @@ -package com.baeldung.string.performance; +package com.baeldung.stopwords; + +import org.openjdk.jmh.annotations.*; import java.io.IOException; import java.nio.file.Files; @@ -9,15 +11,6 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; - @Fork(value = 3, warmups = 1) @State(Scope.Benchmark) diff --git a/java-strings-2/src/main/resources/english_stopwords.txt b/core-java-modules/core-java-string-algorithms/src/main/resources/english_stopwords.txt similarity index 100% rename from java-strings-2/src/main/resources/english_stopwords.txt rename to core-java-modules/core-java-string-algorithms/src/main/resources/english_stopwords.txt diff --git a/java-strings-2/src/main/resources/shakespeare-hamlet.txt b/core-java-modules/core-java-string-algorithms/src/main/resources/shakespeare-hamlet.txt similarity index 100% rename from java-strings-2/src/main/resources/shakespeare-hamlet.txt rename to core-java-modules/core-java-string-algorithms/src/main/resources/shakespeare-hamlet.txt diff --git a/java-strings-ops/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/countingchars/CountCharsExampleUnitTest.java similarity index 98% rename from java-strings-ops/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/countingchars/CountCharsExampleUnitTest.java index d58684445b..8a5f1181b5 100644 --- a/java-strings-ops/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/countingchars/CountCharsExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.java.countingChars; +package com.baeldung.countingchars; import static org.junit.Assert.assertEquals; diff --git a/java-strings-2/src/test/java/com/baeldung/string/MatchWordsUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/matchwords/MatchWordsUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/string/MatchWordsUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/matchwords/MatchWordsUnitTest.java index 385aadaa5d..9ff1066a12 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/MatchWordsUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/matchwords/MatchWordsUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.matchwords; import org.junit.Test; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/PalindromeUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/palindrom/PalindromeUnitTest.java similarity index 98% rename from java-strings-ops/src/test/java/com/baeldung/string/PalindromeUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/palindrom/PalindromeUnitTest.java index 8dea72d8ca..43334ad0fd 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/PalindromeUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/palindrom/PalindromeUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.palindrom; import static org.junit.Assert.assertTrue; diff --git a/java-strings-2/src/test/java/com/baeldung/string/PangramUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/pangram/PangramUnitTest.java similarity index 97% rename from java-strings-2/src/test/java/com/baeldung/string/PangramUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/pangram/PangramUnitTest.java index 36e603b535..b081a425e2 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/PangramUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/pangram/PangramUnitTest.java @@ -1,8 +1,9 @@ -package com.baeldung.string; +package com.baeldung.pangram; + +import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import org.junit.Test; public class PangramUnitTest { diff --git a/java-strings-2/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeduplicates/RemoveDuplicateFromStringUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeduplicates/RemoveDuplicateFromStringUnitTest.java index 895ecc4a3b..2372a5e569 100644 --- a/java-strings-2/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeduplicates/RemoveDuplicateFromStringUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.stringduplicates; +package com.baeldung.removeduplicates; import org.junit.Assert; import org.junit.Before; diff --git a/java-strings-2/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeemojis/RemovingEmojiFromStringUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeemojis/RemovingEmojiFromStringUnitTest.java index 8688f9dcf5..2c5f83400e 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/removeemojis/RemovingEmojiFromStringUnitTest.java @@ -1,13 +1,12 @@ -package com.baeldung.string; +package com.baeldung.removeemojis; -import static org.junit.Assert.assertEquals; +import com.vdurmont.emoji.EmojiParser; +import org.junit.Test; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.junit.Test; - -import com.vdurmont.emoji.EmojiParser; +import static org.junit.Assert.assertEquals; public class RemovingEmojiFromStringUnitTest { String text = "la conférence, commencera à 10 heures 😅"; diff --git a/java-strings-2/src/test/java/com/baeldung/string/repetition/SubstringRepetitionUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/repetition/SubstringRepetitionUnitTest.java similarity index 93% rename from java-strings-2/src/test/java/com/baeldung/string/repetition/SubstringRepetitionUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/repetition/SubstringRepetitionUnitTest.java index f382a24a7f..5ecb7315c2 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/repetition/SubstringRepetitionUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/repetition/SubstringRepetitionUnitTest.java @@ -1,10 +1,10 @@ -package com.baeldung.string.repetition; - -import static com.baeldung.string.repetition.SubstringRepetition.*; -import static org.junit.Assert.*; +package com.baeldung.repetition; import org.junit.Test; +import static com.baeldung.repetition.SubstringRepetition.*; +import static org.junit.Assert.*; + public class SubstringRepetitionUnitTest { private String validString = "aa"; diff --git a/java-strings-2/src/test/java/com/baeldung/string/reverse/ReverseStringExamplesUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/reverse/ReverseStringExamplesUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/string/reverse/ReverseStringExamplesUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/reverse/ReverseStringExamplesUnitTest.java index 020ead02db..c122163174 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/reverse/ReverseStringExamplesUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/reverse/ReverseStringExamplesUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.reverse; +package com.baeldung.reverse; import org.apache.commons.lang3.StringUtils; import org.junit.Test; diff --git a/java-strings/src/test/java/com/baeldung/string/searching/WordIndexerUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/searching/WordIndexerUnitTest.java similarity index 98% rename from java-strings/src/test/java/com/baeldung/string/searching/WordIndexerUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/searching/WordIndexerUnitTest.java index f3f76db01f..774d5a2121 100644 --- a/java-strings/src/test/java/com/baeldung/string/searching/WordIndexerUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/searching/WordIndexerUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.searching; +package com.baeldung.searching; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/java-strings-2/src/test/java/com/baeldung/string/RemoveStopwordsUnitTest.java b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/stopwords/RemoveStopwordsUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/string/RemoveStopwordsUnitTest.java rename to core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/stopwords/RemoveStopwordsUnitTest.java index edda2ec9d7..d90a70a9f5 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/RemoveStopwordsUnitTest.java +++ b/core-java-modules/core-java-string-algorithms/src/test/java/com/baeldung/stopwords/RemoveStopwordsUnitTest.java @@ -1,6 +1,7 @@ -package com.baeldung.string; +package com.baeldung.stopwords; -import static org.junit.Assert.assertEquals; +import org.junit.BeforeClass; +import org.junit.Test; import java.io.IOException; import java.nio.file.Files; @@ -10,8 +11,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.junit.BeforeClass; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class RemoveStopwordsUnitTest { final String original = "The quick brown fox jumps over the lazy dog"; diff --git a/java-strings-2/README.md b/java-strings-2/README.md index ced813163d..b97df7c969 100644 --- a/java-strings-2/README.md +++ b/java-strings-2/README.md @@ -6,22 +6,12 @@ This module contains articles about strings in Java. - [Java Localization – Formatting Messages](https://www.baeldung.com/java-localization-messages-formatting) - [Check If a String Contains a Substring](https://www.baeldung.com/java-string-contains-substring) -- [Removing Stopwords from a String in Java](https://www.baeldung.com/java-string-remove-stopwords) - [Java – Generate Random String](https://www.baeldung.com/java-random-string) - [Java Base64 Encoding and Decoding](https://www.baeldung.com/java-base64-encode-and-decode) -- [Removing Repeated Characters from a String](https://www.baeldung.com/java-remove-repeated-char) -- [Join Array of Primitives with Separator in Java](https://www.baeldung.com/java-join-primitive-array) -- [Pad a String with Zeros or Spaces in Java](https://www.baeldung.com/java-pad-string) -- [Remove Emojis from a Java String](https://www.baeldung.com/java-string-remove-emojis) -- [Remove Leading and Trailing Characters from a String](https://www.baeldung.com/java-remove-trailing-characters) - [Concatenating Strings In Java](https://www.baeldung.com/java-strings-concatenation) - [Java String Interview Questions and Answers](https://www.baeldung.com/java-string-interview-questions) -- [Check if a String is a Pangram in Java](https://www.baeldung.com/java-string-pangram) -- [Check If a String Contains Multiple Keywords](https://www.baeldung.com/string-contains-multiple-words) - [Checking for Empty or Blank Strings in Java](https://www.baeldung.com/java-blank-empty-strings) - [String Initialization in Java](https://www.baeldung.com/java-string-initialization) - [Java Multi-line String](https://www.baeldung.com/java-multiline-string) -- [Checking If a String Is a Repeated Substring](https://www.baeldung.com/java-repeated-substring) -- [How to Reverse a String in Java](https://www.baeldung.com/java-reverse-string) - [String toLowerCase and toUpperCase Methods in Java](https://www.baeldung.com/java-string-convert-case) - More articles: [[<-- prev>]](/java-strings) [[next -->]](/java-strings-3) diff --git a/java-strings-3/README.md b/java-strings-3/README.md index 6276dfc621..721ea5523b 100644 --- a/java-strings-3/README.md +++ b/java-strings-3/README.md @@ -4,6 +4,4 @@ This module contains articles about strings in Java. ### Relevant Articles: - [Java String equalsIgnoreCase()](https://www.baeldung.com/java-string-equalsignorecase) -- [Finding the Difference Between Two Strings](https://www.baeldung.com/java-difference-between-two-strings) -- [Counting Words in a String](https://www.baeldung.com/java-word-counting) - More articles: [[<-- prev>]](/java-strings-2) diff --git a/java-strings-ops/README.md b/java-strings-ops/README.md index 1300cf028e..e35a3808f0 100644 --- a/java-strings-ops/README.md +++ b/java-strings-ops/README.md @@ -3,13 +3,9 @@ This module contains articles about operations on strings in Java. ### Relevant Articles: -- [Check If a String Is a Palindrome](https://www.baeldung.com/java-palindrome) - [Comparing Strings in Java](https://www.baeldung.com/java-compare-strings) - [Check If a String Is Numeric in Java](https://www.baeldung.com/java-check-string-number) - [Get Substring from String in Java](https://www.baeldung.com/java-substring) -- [How to Remove the Last Character of a String?](https://www.baeldung.com/java-remove-last-character-of-string) -- [Add a Character to a String at a Given Position](https://www.baeldung.com/java-add-character-to-string) -- [Count Occurrences of a Char in a String](https://www.baeldung.com/java-count-chars) - [Guide to Java String Pool](https://www.baeldung.com/java-string-pool) - [Split a String in Java](https://www.baeldung.com/java-split-string) - [Common String Operations in Java](https://www.baeldung.com/java-string-operations) diff --git a/java-strings-ops/pom.xml b/java-strings-ops/pom.xml index b6a7ea2728..ebed216c2b 100644 --- a/java-strings-ops/pom.xml +++ b/java-strings-ops/pom.xml @@ -90,9 +90,9 @@ 3.8.1 + 27.0.1-jre 3.6.1 - 27.0.1-jre 5.3.1 diff --git a/java-strings/README.md b/java-strings/README.md index 17b74231a4..e2ffbe6453 100644 --- a/java-strings/README.md +++ b/java-strings/README.md @@ -6,11 +6,7 @@ This module contains articles about strings in Java. - [String Operations with Java Streams](https://www.baeldung.com/java-stream-operations-on-strings) - [Use char[] Array Over a String for Manipulating Passwords in Java?](https://www.baeldung.com/java-storing-passwords) - [Compact Strings in Java 9](https://www.baeldung.com/java-9-compact-string) -- [Java Check a String for Lowercase/Uppercase Letter, Special Character and Digit](https://www.baeldung.com/java-lowercase-uppercase-special-character-digit-regex) - [String Not Empty Test Assertions in Java](https://www.baeldung.com/java-assert-string-not-empty) - [String Performance Hints](https://www.baeldung.com/java-string-performance) -- [Using indexOf to Find All Occurrences of a Word in a String](https://www.baeldung.com/java-indexOf-find-string-occurrences) - [Adding a Newline Character to a String in Java](https://www.baeldung.com/java-string-newline) -- [Remove or Replace Part of a String in Java](https://www.baeldung.com/java-remove-replace-string-part) -- [Replace a Character at a Specific Index in a String in Java](https://www.baeldung.com/java-replace-character-at-index) - More articles: [[next -->]](/java-strings-2) diff --git a/pom.xml b/pom.xml index f9e45f5c93..58a6d8bee0 100644 --- a/pom.xml +++ b/pom.xml @@ -437,6 +437,8 @@ core-java-modules/core-java-sun core-java-modules/core-java-string-conversions core-java-modules/core-java-string-conversions-2 + core-java-modules/core-java-string-algorithms + core-java-modules/core-java-string-algorithms-2 core-java-modules/core-java-string-apis core-java-modules/core-java core-java-modules/core-java-jvm @@ -1205,6 +1207,8 @@ core-java-modules/core-java-sun core-java-modules/core-java-string-conversions core-java-modules/core-java-string-conversions-2 + core-java-modules/core-java-string-algorithms + core-java-modules/core-java-string-algorithms-2 core-java-modules/core-java-string-apis core-scala couchbase From 5d45197cbaab6fe64734e4050bcf78e525d019d1 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 10:17:16 +0100 Subject: [PATCH 215/304] Revert "#BAEL-10229 Fix the build (restore the Ethereum module as it was because it's mixing different Spring and Spring Boot versions)" This reverts commit 72a602c9 --- parent-boot-1/pom.xml | 233 +++++++----------------------------------- 1 file changed, 38 insertions(+), 195 deletions(-) diff --git a/parent-boot-1/pom.xml b/parent-boot-1/pom.xml index df4703f1db..8f1af24466 100644 --- a/parent-boot-1/pom.xml +++ b/parent-boot-1/pom.xml @@ -1,218 +1,61 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.ethereum - ethereum - ethereum + parent-boot-1 + 0.0.1-SNAPSHOT + parent-boot-1 + pom + Parent for all Spring Boot 1.x modules - parent-spring-5 com.baeldung - 0.0.1-SNAPSHOT - ../parent-spring-5 + parent-modules + 1.0.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + - - - org.springframework.boot - spring-boot-starter - ${spring.boot.version} + io.rest-assured + rest-assured + ${rest-assured.version} - - - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-tomcat - ${spring.boot.version} - - - - - org.springframework - spring-core - ${spring.version} - - - org.springframework - spring-web - ${spring.version} - - - org.springframework - spring-webmvc - ${spring.version} - - - - - org.ethereum - ethereumj-core - ${ethereumj-core.version} - - - org.web3j - core - ${web3j.core.version} - - - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - - - javax.servlet - jstl - ${jstl.version} - - - javax.servlet - javax.servlet-api - ${javax.servlet-api.version} - - - javax.servlet.jsp.jstl - jstl-api - ${jstl.version} - - - javax.servlet.jsp - javax.servlet.jsp-api - ${javax.servlet.jsp-api.version} - - - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - org.springframework.boot spring-boot-starter-test test - ${spring.boot.version} - - - org.springframework - spring-context - ${spring.version} - - - org.springframework - spring-test - ${spring.version} - test - - - - - org.mockito - mockito-core - ${mockito.version} - - - org.hamcrest - hamcrest-core - - - test - - - junit - junit - ${junit.version} - test - - - org.hamcrest - hamcrest-core - - - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - com.jayway.jsonpath - json-path - ${jsonpath.version} - ethereum - - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot-maven-plugin.version} - - - org.apache.maven.plugins - maven-war-plugin - 3.0.0 - - src/main/webapp - false - - - + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + ${start-class} + + + + + - - - Ethereum - Ethereum - https://dl.bintray.com/ethereum/maven/ - - - - 1.5.0-RELEASE - 3.3.1 - 1.5.6.RELEASE - 2.21.0 - 2.4.0 - 1.2.3 - 1.7.25 - 2.0.4.RELEASE + 3.1.0 + 1.5.22.RELEASE + From 5227348692bfef0ea6eef2223a80e343e583aea4 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 10:17:53 +0100 Subject: [PATCH 216/304] #BAEL-10229 Fix the build (restore the Ethereum module as it was because it's mixing different Spring and Spring Boot versions) --- ethereum/pom.xml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/ethereum/pom.xml b/ethereum/pom.xml index f340c311a8..148909e787 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -1,31 +1,35 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.ethereum ethereum ethereum - parent-boot-1 + parent-spring-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-1 + ../parent-spring-5 + org.springframework.boot spring-boot-starter + ${spring.boot.version} org.springframework.boot spring-boot-starter-web + ${spring.boot.version} org.springframework.boot spring-boot-starter-tomcat + ${spring.boot.version} @@ -109,6 +113,12 @@ + + org.springframework.boot + spring-boot-starter-test + test + ${spring.boot.version} + org.springframework spring-context @@ -198,12 +208,11 @@ 1.5.0-RELEASE 3.3.1 - 5.1.9.RELEASE + 1.5.6.RELEASE 2.21.0 2.4.0 1.2.3 1.7.25 2.0.4.RELEASE - From c862b5880a8a3715c396a0604c9ab0acbd309ec8 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 27 Oct 2019 12:00:33 +0100 Subject: [PATCH 217/304] [BAEL-3348] Smallest missing positive integer in an array --- .../SmallestMissingPositiveInteger.java | 37 ++++++++ .../SmallestMissingPositiveIntegerTest.java | 88 +++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java create mode 100644 algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java new file mode 100644 index 0000000000..b08eea2a66 --- /dev/null +++ b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java @@ -0,0 +1,37 @@ +package com.baeldung.algorithms.smallestinteger; + +import java.util.Arrays; + +public class SmallestMissingPositiveInteger { + public static int searchInSortedArray(int[] input) { + for (int i = 0; i < input.length; i++) { + if (i != input[i]) { + return i; + } + } + + return input.length; + } + + public static int searchInUnsortedArraySortingFirst(int[] input) { + Arrays.sort(input); + return searchInSortedArray(input); + } + + public static int searchInUnsortedArrayBooleanArray(int[] input) { + boolean[] flags = new boolean[input.length]; + for (int number : input) { + if (number < flags.length) { + flags[number] = true; + } + } + + for (int i = 0; i < flags.length; i++) { + if (!flags[i]) { + return i; + } + } + + return flags.length; + } +} diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java new file mode 100644 index 0000000000..74195f13c8 --- /dev/null +++ b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java @@ -0,0 +1,88 @@ +package com.baeldung.algorithms.smallestinteger; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class SmallestMissingPositiveIntegerTest { + @Test + void givenArrayWithThreeMissing_whenSearchInSortedArray_thenThree() { + int[] input = new int[] {0, 1, 2, 4, 5}; + + int result = SmallestMissingPositiveInteger.searchInSortedArray(input); + + assertThat(result).isEqualTo(3); + } + + @Test + void givenArrayWithOneAndThreeMissing_whenSearchInSortedArray_thenOne() { + int[] input = new int[] {0, 2, 4, 5}; + + int result = SmallestMissingPositiveInteger.searchInSortedArray(input); + + assertThat(result).isEqualTo(1); + } + + @Test + void givenArrayWithoutMissingInteger_whenSearchInSortedArray_thenArrayLength() { + int[] input = new int[] {0, 1, 2, 3, 4, 5}; + + int result = SmallestMissingPositiveInteger.searchInSortedArray(input); + + assertThat(result).isEqualTo(input.length); + } + + @Test + void givenArrayWithThreeMissing_whenSearchInUnsortedArraySortingFirst_thenThree() { + int[] input = new int[] {1, 4, 0, 5, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArraySortingFirst(input); + + assertThat(result).isEqualTo(3); + } + + @Test + void givenArrayWithOneAndThreeMissing_whenSearchInUnsortedArraySortingFirst_thenOne() { + int[] input = new int[] {4, 2, 0, 5}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArraySortingFirst(input); + + assertThat(result).isEqualTo(1); + } + + @Test + void givenArrayWithoutMissingInteger_whenSearchInUnsortedArraySortingFirst_thenArrayLength() { + int[] input = new int[] {4, 5, 1, 3, 0, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArraySortingFirst(input); + + assertThat(result).isEqualTo(input.length); + } + + @Test + void givenArrayWithThreeMissing_whenSearchInUnsortedArrayBooleanArray_thenThree() { + int[] input = new int[] {1, 4, 0, 5, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArrayBooleanArray(input); + + assertThat(result).isEqualTo(3); + } + + @Test + void givenArrayWithOneAndThreeMissing_whenSearchInUnsortedArrayBooleanArray_thenOne() { + int[] input = new int[] {4, 2, 0, 5}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArrayBooleanArray(input); + + assertThat(result).isEqualTo(1); + } + + @Test + void givenArrayWithoutMissingInteger_whenSearchInUnsortedArrayBooleanArray_thenArrayLength() { + int[] input = new int[] {4, 5, 1, 3, 0, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArrayBooleanArray(input); + + assertThat(result).isEqualTo(input.length); + } +} \ No newline at end of file From b0ecd1a0ae310c0f68ba791fb3d9abbe5ffc73e0 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 27 Oct 2019 12:05:32 +0100 Subject: [PATCH 218/304] [BAEL-3348] Fixed unit test name --- ...gerTest.java => SmallestMissingPositiveIntegerUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/{SmallestMissingPositiveIntegerTest.java => SmallestMissingPositiveIntegerUnitTest.java} (98%) diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java similarity index 98% rename from algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java rename to algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java index 74195f13c8..8bb7151b41 100644 --- a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java +++ b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -class SmallestMissingPositiveIntegerTest { +class SmallestMissingPositiveIntegerUnitTest { @Test void givenArrayWithThreeMissing_whenSearchInSortedArray_thenThree() { int[] input = new int[] {0, 1, 2, 4, 5}; From cb07514d3cad05fd422d837bdcec1f2a00732baf Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 27 Oct 2019 19:47:01 +0530 Subject: [PATCH 219/304] [BAEL-16045] - Moved code to java-string-2 --- .../src/test/java/com/baeldung/random/JavaRandomUnitTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/random/JavaRandomUnitTest.java (100%) diff --git a/java-strings/src/test/java/com/baeldung/random/JavaRandomUnitTest.java b/java-strings-2/src/test/java/com/baeldung/random/JavaRandomUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/random/JavaRandomUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/random/JavaRandomUnitTest.java From 7f3f518117b29711826bc58677570f7e7dcd35d3 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 27 Oct 2019 19:52:36 +0530 Subject: [PATCH 220/304] [BAEL-14274] - Reverted the rename of EventWithFormat to Event --- .../jackson/date/{Event.java => EventWithFormat.java} | 6 +++--- .../baeldung/jackson/test/JacksonAnnotationUnitTest.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename jackson-simple/src/test/java/com/baeldung/jackson/date/{Event.java => EventWithFormat.java} (77%) diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/date/Event.java b/jackson-simple/src/test/java/com/baeldung/jackson/date/EventWithFormat.java similarity index 77% rename from jackson-simple/src/test/java/com/baeldung/jackson/date/Event.java rename to jackson-simple/src/test/java/com/baeldung/jackson/date/EventWithFormat.java index fb19f44a42..607e694cef 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/date/Event.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/date/EventWithFormat.java @@ -4,17 +4,17 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; -public class Event { +public class EventWithFormat { public String name; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") public Date eventDate; - public Event() { + public EventWithFormat() { super(); } - public Event(final String name, final Date eventDate) { + public EventWithFormat(final String name, final Date eventDate) { this.name = name; this.eventDate = eventDate; } diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java index e63208d860..ee11f8f20e 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/test/JacksonAnnotationUnitTest.java @@ -32,7 +32,7 @@ import com.baeldung.jackson.bidirection.ItemWithIdentity; import com.baeldung.jackson.bidirection.ItemWithRef; import com.baeldung.jackson.bidirection.UserWithIdentity; import com.baeldung.jackson.bidirection.UserWithRef; -import com.baeldung.jackson.date.Event; +import com.baeldung.jackson.date.EventWithFormat; import com.baeldung.jackson.date.EventWithSerializer; import com.baeldung.jackson.dtos.MyMixInForIgnoreType; import com.baeldung.jackson.dtos.withEnum.DistanceEnumWithValue; @@ -270,7 +270,7 @@ public class JacksonAnnotationUnitTest { final String toParse = "20-12-2014 02:30:00"; final Date date = df.parse(toParse); - final Event event = new Event("party", date); + final EventWithFormat event = new EventWithFormat("party", date); final String result = new ObjectMapper().writeValueAsString(event); assertThat(result, containsString(toParse)); From 0eaee4015aa7b1d26a519cb16f169cb947b70314 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 27 Oct 2019 20:24:22 +0530 Subject: [PATCH 221/304] [BAEL-16045] - Moved code to spring-security-rest-basic-auth --- .../java/com/baeldung/oauth2/LoginController.java | 12 ------------ .../org/baeldung/web/controller/BarController.java | 13 +++++++++++++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java index ea4650ab02..e2629053f1 100644 --- a/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java +++ b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java @@ -1,10 +1,8 @@ package com.baeldung.oauth2; -import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; -import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ResolvableType; import org.springframework.http.HttpEntity; @@ -73,14 +71,4 @@ public class LoginController { return "loginSuccess"; } - - public HttpHeaders createHeaders(String username, String password){ - return new HttpHeaders() {{ - String auth = username + ":" + password; - byte[] encodedAuth = Base64.encodeBase64( - auth.getBytes(Charset.forName("US-ASCII")) ); - String authHeader = "Basic " + new String( encodedAuth ); - set( "Authorization", authHeader ); - }}; - } } diff --git a/spring-security-rest-basic-auth/src/main/java/org/baeldung/web/controller/BarController.java b/spring-security-rest-basic-auth/src/main/java/org/baeldung/web/controller/BarController.java index 2bc314baa2..5f32b9f73b 100644 --- a/spring-security-rest-basic-auth/src/main/java/org/baeldung/web/controller/BarController.java +++ b/spring-security-rest-basic-auth/src/main/java/org/baeldung/web/controller/BarController.java @@ -1,8 +1,12 @@ package org.baeldung.web.controller; +import java.nio.charset.Charset; + +import org.apache.commons.codec.binary.Base64; import org.baeldung.web.dto.Bar; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,4 +32,13 @@ public class BarController { return new Bar(); } + public HttpHeaders createHeaders(String username, String password){ + return new HttpHeaders() {{ + String auth = username + ":" + password; + byte[] encodedAuth = Base64.encodeBase64( + auth.getBytes(Charset.forName("US-ASCII")) ); + String authHeader = "Basic " + new String( encodedAuth ); + set( "Authorization", authHeader ); + }}; + } } From 05d0730b346085eebdb96c35effc2d8a021e7fba Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 27 Oct 2019 20:45:01 +0530 Subject: [PATCH 222/304] [BAEL-16045] - Moved code to core-java-exceptions --- .../main/java/com/baeldung/trywithresource/AutoCloseableMain.java | 0 .../com/baeldung/trywithresource/AutoCloseableResourcesFirst.java | 0 .../baeldung/trywithresource/AutoCloseableResourcesSecond.java | 0 .../src/main/java/com/baeldung/trywithresource/MyResource.java | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename core-java-modules/{core-java => core-java-exceptions}/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java (100%) rename core-java-modules/{core-java => core-java-exceptions}/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java (100%) rename core-java-modules/{core-java => core-java-exceptions}/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java (100%) rename core-java-modules/{core-java => core-java-exceptions}/src/main/java/com/baeldung/trywithresource/MyResource.java (100%) diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java b/core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java rename to core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/AutoCloseableMain.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java b/core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java rename to core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesFirst.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java b/core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java rename to core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/AutoCloseableResourcesSecond.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/MyResource.java b/core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/MyResource.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/trywithresource/MyResource.java rename to core-java-modules/core-java-exceptions/src/main/java/com/baeldung/trywithresource/MyResource.java From a3bc4d2820dcc6e828144d9e370cf77e79f31732 Mon Sep 17 00:00:00 2001 From: Mona Mohamadinia Date: Sun, 27 Oct 2019 20:39:48 +0330 Subject: [PATCH 223/304] Added the sample codes --- .../random/LegacyRandomDateTimes.java | 19 ++++++++++ .../com/baeldung/random/RandomDateTimes.java | 27 ++++++++++++++ .../java/com/baeldung/random/RandomDates.java | 20 +++++++++++ .../java/com/baeldung/random/RandomTimes.java | 19 ++++++++++ .../random/LegacyRandomDateTimesUnitTest.java | 36 +++++++++++++++++++ .../random/RandomDateTimesUnitTest.java | 27 ++++++++++++++ .../baeldung/random/RandomDatesUnitTest.java | 27 ++++++++++++++ .../baeldung/random/RandomTimesUnitTest.java | 20 +++++++++++ 8 files changed, 195 insertions(+) create mode 100644 core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/LegacyRandomDateTimes.java create mode 100644 core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDateTimes.java create mode 100644 core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDates.java create mode 100644 core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomTimes.java create mode 100644 core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/LegacyRandomDateTimesUnitTest.java create mode 100644 core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDateTimesUnitTest.java create mode 100644 core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDatesUnitTest.java create mode 100644 core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomTimesUnitTest.java diff --git a/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/LegacyRandomDateTimes.java b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/LegacyRandomDateTimes.java new file mode 100644 index 0000000000..3f965dbac7 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/LegacyRandomDateTimes.java @@ -0,0 +1,19 @@ +package com.baeldung.random; + +import java.util.Date; +import java.util.concurrent.ThreadLocalRandom; + +public class LegacyRandomDateTimes { + + public static Date between(Date startInclusive, Date endExclusive) { + long startMillis = startInclusive.getTime(); + long endMillis = endExclusive.getTime(); + long randomMillisSinceEpoch = ThreadLocalRandom.current().nextLong(startMillis, endMillis); + + return new Date(randomMillisSinceEpoch); + } + + public static Date timestamp() { + return new Date(ThreadLocalRandom.current().nextInt() * 1000L); + } +} diff --git a/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDateTimes.java b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDateTimes.java new file mode 100644 index 0000000000..a40299e515 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDateTimes.java @@ -0,0 +1,27 @@ +package com.baeldung.random; + +import java.time.Instant; +import java.util.concurrent.ThreadLocalRandom; + +public class RandomDateTimes { + + public static Instant timestamp() { + return Instant.ofEpochSecond(ThreadLocalRandom.current().nextInt()); + } + + public static Instant between(Instant startInclusive, Instant endExclusive) { + long startSeconds = startInclusive.getEpochSecond(); + long endSeconds = endExclusive.getEpochSecond(); + long random = ThreadLocalRandom.current().nextLong(startSeconds, endSeconds); + + return Instant.ofEpochSecond(random); + } + + public static Instant after(Instant startInclusive) { + return between(startInclusive, Instant.MAX); + } + + public static Instant before(Instant upperExclusive) { + return between(Instant.MIN, upperExclusive); + } +} diff --git a/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDates.java b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDates.java new file mode 100644 index 0000000000..f0b76873f9 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomDates.java @@ -0,0 +1,20 @@ +package com.baeldung.random; + +import java.time.LocalDate; +import java.util.concurrent.ThreadLocalRandom; + +public class RandomDates { + + public static LocalDate between(LocalDate startInclusive, LocalDate endExclusive) { + long startEpochDay = startInclusive.toEpochDay(); + long endEpochDay = endExclusive.toEpochDay(); + long randomDay = ThreadLocalRandom.current().nextLong(startEpochDay, endEpochDay); + + return LocalDate.ofEpochDay(randomDay); + } + + public static LocalDate date() { + int hundredYears = 100 * 365; + return LocalDate.ofEpochDay(ThreadLocalRandom.current().nextInt(-hundredYears, hundredYears)); + } +} diff --git a/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomTimes.java b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomTimes.java new file mode 100644 index 0000000000..92818b2390 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/main/java/com/baeldung/random/RandomTimes.java @@ -0,0 +1,19 @@ +package com.baeldung.random; + +import java.time.LocalTime; +import java.util.concurrent.ThreadLocalRandom; + +public class RandomTimes { + + public static LocalTime between(LocalTime startTime, LocalTime endTime) { + int startSeconds = startTime.toSecondOfDay(); + int endSeconds = endTime.toSecondOfDay(); + int randomTime = ThreadLocalRandom.current().nextInt(startSeconds, endSeconds); + + return LocalTime.ofSecondOfDay(randomTime); + } + + public static LocalTime time() { + return between(LocalTime.MIN, LocalTime.MAX); + } +} diff --git a/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/LegacyRandomDateTimesUnitTest.java b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/LegacyRandomDateTimesUnitTest.java new file mode 100644 index 0000000000..26fcaa942f --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/LegacyRandomDateTimesUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.random; + +import org.junit.jupiter.api.RepeatedTest; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; + +class LegacyRandomDateTimesUnitTest { + + private static final Date MIN_DATE = new Date(Long.MIN_VALUE); + private static final Date MAX_DATE = new Date(Long.MAX_VALUE); + + @RepeatedTest(100) + void givenARange_WhenGenTimestamp_ShouldBeInRange() { + long aDay = TimeUnit.DAYS.toMillis(1); + long now = new Date().getTime(); + + Date hundredYearsAgo = new Date(now - aDay * 365 * 100); + Date tenDaysAgo = new Date(now - aDay * 10); + + Date random = LegacyRandomDateTimes.between(hundredYearsAgo, tenDaysAgo); + assertThat(random).isBetween(hundredYearsAgo, tenDaysAgo); + } + + @RepeatedTest(100) + void givenNoRange_WhenGenTimestamp_ShouldGenerateRandomTimestamps() { + Date random = LegacyRandomDateTimes.timestamp(); + + assertThat(random) + .isNotNull() + .isBetween(MIN_DATE, MAX_DATE); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDateTimesUnitTest.java b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDateTimesUnitTest.java new file mode 100644 index 0000000000..c801afa4e2 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDateTimesUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.random; + +import org.junit.jupiter.api.RepeatedTest; + +import java.time.Duration; +import java.time.Instant; + +import static org.assertj.core.api.Assertions.assertThat; + +class RandomDateTimesUnitTest { + + @RepeatedTest(100) + void givenNoRange_WhenGenTimestamp_ShouldGenerateRandomTimestamps() { + Instant random = RandomDateTimes.timestamp(); + + assertThat(random).isBetween(Instant.MIN, Instant.MAX); + } + + @RepeatedTest(100) + void givenARange_WhenGenTimestamp_ShouldBeInRange() { + Instant hundredYearsAgo = Instant.now().minus(Duration.ofDays(100 * 365)); + Instant tenDaysAgo = Instant.now().minus(Duration.ofDays(10)); + + Instant random = RandomDateTimes.between(hundredYearsAgo, tenDaysAgo); + assertThat(random).isBetween(hundredYearsAgo, tenDaysAgo); + } +} diff --git a/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDatesUnitTest.java b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDatesUnitTest.java new file mode 100644 index 0000000000..6005cf93c2 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomDatesUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.random; + +import org.junit.jupiter.api.RepeatedTest; + +import java.time.LocalDate; +import java.time.Month; + +import static org.assertj.core.api.Assertions.assertThat; + +class RandomDatesUnitTest { + + @RepeatedTest(100) + void givenNoRange_WhenGenDate_ShouldGenerateRandomDates() { + LocalDate randomDay = RandomDates.date(); + + assertThat(randomDay).isAfter(LocalDate.MIN).isBefore(LocalDate.MAX); + } + + @RepeatedTest(100) + void givenARange_WhenGenDate_ShouldBeInRange() { + LocalDate start = LocalDate.of(1989, Month.OCTOBER, 14); + LocalDate end = LocalDate.now(); + + LocalDate random = RandomDates.between(start, end); + assertThat(random).isAfter(start).isBefore(end); + } +} diff --git a/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomTimesUnitTest.java b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomTimesUnitTest.java new file mode 100644 index 0000000000..a346d0df20 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8/src/test/java/com/baeldung/random/RandomTimesUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung.random; + +import org.junit.jupiter.api.RepeatedTest; + +import java.time.LocalTime; + +import static org.assertj.core.api.Assertions.assertThat; + +class RandomTimesUnitTest { + + @RepeatedTest(100) + void givenARange_WhenGenTime_ShouldBeInRange() { + LocalTime morning = LocalTime.of(8, 30); + LocalTime randomTime = RandomTimes.between(LocalTime.MIDNIGHT, morning); + + assertThat(randomTime) + .isAfter(LocalTime.MIDNIGHT).isBefore(morning) + .isAfter(LocalTime.MIN).isBefore(LocalTime.MAX); + } +} From 35c94d9962183403b43339e1d8d53e9034bf2ee5 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 27 Oct 2019 23:43:47 +0530 Subject: [PATCH 224/304] [BAEL-16045] - Renamed UserServiceIntegrationUnitTest to UserServiceUnitTest --- ...ServiceIntegrationUnitTest.java => UserServiceUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename spring-mockito/src/test/java/com/baeldung/{UserServiceIntegrationUnitTest.java => UserServiceUnitTest.java} (95%) diff --git a/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationUnitTest.java b/spring-mockito/src/test/java/com/baeldung/UserServiceUnitTest.java similarity index 95% rename from spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationUnitTest.java rename to spring-mockito/src/test/java/com/baeldung/UserServiceUnitTest.java index 573a37a9a4..11c7b4d8a8 100644 --- a/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationUnitTest.java +++ b/spring-mockito/src/test/java/com/baeldung/UserServiceUnitTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @ActiveProfiles("test") @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = MocksApplication.class) -public class UserServiceIntegrationUnitTest { +public class UserServiceUnitTest { @Autowired private UserService userService; From 0d0b9735cec6c4ef95f2cc0f09e65f144e2108c8 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Mon, 28 Oct 2019 00:23:41 +0330 Subject: [PATCH 225/304] Shouldn't drop a non-existent table! --- .../java/com/baeldung/hibernate/CustomClassIntegrationTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-modules/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java b/persistence-modules/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java index e64e836924..699890c457 100644 --- a/persistence-modules/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java +++ b/persistence-modules/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java @@ -26,7 +26,6 @@ public class CustomClassIntegrationTest { public void setUp() throws IOException { session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); - session.createNativeQuery("delete from manager").executeUpdate(); session.createNativeQuery("delete from department").executeUpdate(); Department department = new Department("Sales"); DeptEmployee employee = new DeptEmployee("John Smith", "001", department); From 34ec8097350b8edd3f77be5465aedb00c426f1ac Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 22:12:26 +0100 Subject: [PATCH 226/304] #BAEL-10229 Restore Spring Boot version to 2.1.x in parent-boot-2 --- parent-boot-2/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index 3d727a7467..fe272b56a3 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -78,6 +78,6 @@ 3.3.0 1.0.22.RELEASE - 2.2.0.RELEASE + 2.1.9.RELEASE From 55a5731992f7bdbf03c13ae09f036081b8e306a9 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 22:38:49 +0100 Subject: [PATCH 227/304] #BAEL-10229 Fix Boot version of spring-5-webflux --- spring-5-webflux/pom.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spring-5-webflux/pom.xml b/spring-5-webflux/pom.xml index 485fd8f3bf..91272593d3 100644 --- a/spring-5-webflux/pom.xml +++ b/spring-5-webflux/pom.xml @@ -16,6 +16,18 @@ ../parent-boot-2 + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + org.springframework.boot @@ -85,4 +97,8 @@ https://repo.spring.io/milestone + + + 2.2.0.RELEASE + From 5ec76df699f369a950cd3d24db1f580b7bba3996 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Mon, 28 Oct 2019 01:11:36 +0330 Subject: [PATCH 228/304] Asserting the Received Messages --- .../logback/MapAppenderIntegrationTest.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java index 20366a229d..a86bad4c3e 100644 --- a/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java +++ b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java @@ -1,33 +1,40 @@ package com.baeldung.logback; import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; import org.junit.Before; import org.junit.Test; import org.slf4j.LoggerFactory; +import java.util.List; + +import static java.util.stream.Collectors.toList; +import static org.hamcrest.Matchers.hasItems; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; public class MapAppenderIntegrationTest { private Logger rootLogger; @Before - public void setUp() throws Exception { + public void setUp() { rootLogger = (Logger) LoggerFactory.getLogger("ROOT"); } @Test - public void whenLoggerEmitsLoggingEvent_thenAppenderReceivesEvent() throws Exception { + public void whenLoggerEmitsLoggingEvent_thenAppenderReceivesEvent() { rootLogger.info("Test from {}", this.getClass().getSimpleName()); MapAppender appender = (MapAppender) rootLogger.getAppender("map"); - assertEquals(appender.getEventMap().size(), 1); + + List messages = appender.getEventMap().values().stream().map(ILoggingEvent::getMessage).collect(toList()); + assertThat(messages, hasItems("Test from {}")); } @Test - public void givenNoPrefixSet_whenLoggerEmitsEvent_thenAppenderReceivesNoEvent() throws Exception { + public void givenNoPrefixSet_whenLoggerEmitsEvent_thenAppenderReceivesNoEvent() { rootLogger.info("Test from {}", this.getClass().getSimpleName()); MapAppender appender = (MapAppender) rootLogger.getAppender("badMap"); assertEquals(appender.getEventMap().size(), 0); } - } From 961cc0e02bab203acaf674a6cc817c60a7ad51e5 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 22:57:15 +0100 Subject: [PATCH 229/304] #BAEL-10229 Fix spring-5-webflux usage of RSocketRequester --- .../com/baeldung/spring/rsocket/client/ClientConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java b/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java index 7dd3591cd6..abfe2e7807 100644 --- a/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java @@ -25,6 +25,6 @@ public class ClientConfiguration { @Bean RSocketRequester rSocketRequester(RSocketStrategies rSocketStrategies) { - return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, rSocketStrategies); + return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, MimeTypeUtils.APPLICATION_JSON, rSocketStrategies); } } From 6b8f82198997c270c3f2ddedf5f05595d7354790 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 23:22:42 +0100 Subject: [PATCH 230/304] #BAEL-10229 Fix spring-5-webflux usage of RSocketRequester --- ...MarketDataRestControllerIntegrationTest.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java index ff00d5ec24..538d74dc92 100644 --- a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java +++ b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java @@ -34,15 +34,12 @@ public class MarketDataRestControllerIntegrationTest { @Mock private RequestSpec requestSpec; - @Mock - private ResponseSpec responseSpec; - @Test public void whenInitiatesRequest_ThenGetsResponse() throws Exception { when(rSocketRequester.route("currentMarketData")).thenReturn(requestSpec); - when(requestSpec.data(any())).thenReturn(responseSpec); + when(requestSpec.data(any())).thenReturn(requestSpec); MarketData marketData = new MarketData("X", 1); - when(responseSpec.retrieveMono(MarketData.class)).thenReturn(Mono.just(marketData)); + when(requestSpec.retrieveMono(MarketData.class)).thenReturn(Mono.just(marketData)); testClient.get() .uri("/current/{stock}", "X") @@ -56,8 +53,8 @@ public class MarketDataRestControllerIntegrationTest { @Test public void whenInitiatesFireAndForget_ThenGetsNoResponse() throws Exception { when(rSocketRequester.route("collectMarketData")).thenReturn(requestSpec); - when(requestSpec.data(any())).thenReturn(responseSpec); - when(responseSpec.send()).thenReturn(Mono.empty()); + when(requestSpec.data(any())).thenReturn(requestSpec); + when(requestSpec.send()).thenReturn(Mono.empty()); testClient.get() .uri("/collect") @@ -70,10 +67,10 @@ public class MarketDataRestControllerIntegrationTest { @Test public void whenInitiatesRequest_ThenGetsStream() throws Exception { when(rSocketRequester.route("feedMarketData")).thenReturn(requestSpec); - when(requestSpec.data(any())).thenReturn(responseSpec); + when(requestSpec.data(any())).thenReturn(requestSpec); MarketData firstMarketData = new MarketData("X", 1); MarketData secondMarketData = new MarketData("X", 2); - when(responseSpec.retrieveFlux(MarketData.class)).thenReturn(Flux.just(firstMarketData, secondMarketData)); + when(requestSpec.retrieveFlux(MarketData.class)).thenReturn(Flux.just(firstMarketData, secondMarketData)); FluxExchangeResult result = testClient.get() .uri("/feed/{stock}", "X") @@ -89,4 +86,4 @@ public class MarketDataRestControllerIntegrationTest { .thenCancel() .verify(); } -} \ No newline at end of file +} From c65ae953066cc4afa23381173d6c45f6280c55f8 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 23:23:05 +0100 Subject: [PATCH 231/304] #BAEL-10229 Fix spring-5-webflux usage of RSocketRequester --- .../rsocket/client/MarketDataRestControllerIntegrationTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java index 538d74dc92..d22832b0fb 100644 --- a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java +++ b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/client/MarketDataRestControllerIntegrationTest.java @@ -13,7 +13,6 @@ import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.messaging.rsocket.RSocketRequester; import org.springframework.messaging.rsocket.RSocketRequester.RequestSpec; -import org.springframework.messaging.rsocket.RSocketRequester.ResponseSpec; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.reactive.server.FluxExchangeResult; import org.springframework.test.web.reactive.server.WebTestClient; From 995d208d7389692d84c41f79d8ceed74f4cbb46a Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Sun, 27 Oct 2019 23:30:05 +0100 Subject: [PATCH 232/304] #BAEL-10229 Fix spring-5-webflux usage of RSocketRequester --- .../rsocket/server/MarketDataRSocketControllerLiveTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java index dcf3b82730..40ddc732ac 100644 --- a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java +++ b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java @@ -92,7 +92,7 @@ public class MarketDataRSocketControllerLiveTest { @Bean @Lazy RSocketRequester rSocketRequester(RSocketStrategies rSocketStrategies) { - return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, rSocketStrategies); + return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, MimeTypeUtils.APPLICATION_JSON, rSocketStrategies); } } -} \ No newline at end of file +} From e6a3c4c631f18161eddb3cb83843eabd16d10c3d Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Mon, 28 Oct 2019 00:01:49 +0100 Subject: [PATCH 233/304] #BAEL-10229 Fix the build (spring-batch) --- spring-batch/pom.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-batch/pom.xml b/spring-batch/pom.xml index c28d7d6c89..e6d7cee6f2 100644 --- a/spring-batch/pom.xml +++ b/spring-batch/pom.xml @@ -12,6 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT + ../parent-boot-2 @@ -75,12 +76,23 @@ ${opencsv.version} + + org.springframework.boot + spring-boot-starter-batch + + org.hsqldb hsqldb runtime - + + + org.awaitility + awaitility + ${awaitility.version} + test + @@ -89,6 +101,7 @@ 3.15.1 4.1 2.3.1 + 3.1.1 From 3b8a395136e8ede2fa2e6296916249f01bf2bddf Mon Sep 17 00:00:00 2001 From: Mike Baranski Date: Sun, 27 Oct 2019 23:28:57 -0400 Subject: [PATCH 234/304] Bael 3058 - Remove hibernate parameters directory (#8071) * [BAEL-3058] Demonstrate named query * [BAEL-3058] Demonstrate the wrong way to do it, change to Junit 4 style test with annotations * Fix tab -> space and indentation * Moved hibernate-parameters to persistence-modules directory per request * Update persistence-modules/hibernate-parameters/pom.xml Co-Authored-By: KevinGilmore * Update persistence-modules/hibernate-parameters/pom.xml Co-Authored-By: KevinGilmore * Update persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/NamedParameterUnitTest.java Co-Authored-By: KevinGilmore * Update persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/NamedParameterUnitTest.java Co-Authored-By: KevinGilmore * Set version and add jar packaging * [BAEL-3058] Refactor package location * [BAEL-3058] Fixed based on PR 8011 comments - rename module, update deps and move resources/sources * Fix module name * [BAEL-3058] Remove hibernate-parameters directory --- .../hibernate-parameters/pom.xml | 52 -------------- .../hibernate_parameters/Event.hbm.xml | 15 ---- .../baeldung/hibernate_parameters/Event.java | 30 -------- .../NamedParameterUnitTest.java | 72 ------------------- .../src/test/resources/hibernate.cfg.xml | 28 -------- 5 files changed, 197 deletions(-) delete mode 100644 persistence-modules/hibernate-parameters/pom.xml delete mode 100644 persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.hbm.xml delete mode 100644 persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.java delete mode 100644 persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/NamedParameterUnitTest.java delete mode 100644 persistence-modules/hibernate-parameters/src/test/resources/hibernate.cfg.xml diff --git a/persistence-modules/hibernate-parameters/pom.xml b/persistence-modules/hibernate-parameters/pom.xml deleted file mode 100644 index b744e181da..0000000000 --- a/persistence-modules/hibernate-parameters/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - com.baeldung - hibernate-parameters - 0.1-SNAPSHOT - hibernate-parameters - jar - Hibernate tutorial illustrating the use of named parameters - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - - - - - org.hibernate - hibernate-core - 5.4.4.Final - - - - com.h2database - h2 - 1.4.196 - - - - - - - false - src/test/java - - **/*.xml - - - - src/test/resources - - - - - - true - - - diff --git a/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.hbm.xml b/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.hbm.xml deleted file mode 100644 index 4055718776..0000000000 --- a/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.hbm.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - diff --git a/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.java b/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.java deleted file mode 100644 index f44b1bfd8a..0000000000 --- a/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/Event.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.hibernate_parameters; - -public class Event { - private Long id; - - private String title; - - public Event() { - } - - public Event(String title) { - this.title = title; - } - - public Long getId() { - return id; - } - - private void setId(Long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } -} \ No newline at end of file diff --git a/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/NamedParameterUnitTest.java b/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/NamedParameterUnitTest.java deleted file mode 100644 index 23854dc393..0000000000 --- a/persistence-modules/hibernate-parameters/src/test/java/com/baeldung/hibernate_parameters/NamedParameterUnitTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.baeldung.hibernate_parameters; - -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.boot.MetadataSources; -import org.hibernate.boot.registry.StandardServiceRegistry; -import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.query.Query; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; - -public class NamedParameterUnitTest { - private SessionFactory sessionFactory; - - @Before - public void setUp() throws Exception { - final StandardServiceRegistry registry = new StandardServiceRegistryBuilder() - .configure() - .build(); - try { - sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory(); - Session session = sessionFactory.openSession(); - session.beginTransaction(); - session.save(new Event("Event 1")); - session.save(new Event("Event 2")); - session.getTransaction().commit(); - session.close(); - } catch (Exception e) { - StandardServiceRegistryBuilder.destroy(registry); - } - } - - @After - public void tearDown() throws Exception { - if (sessionFactory != null) { - sessionFactory.close(); - } - } - - @Test - public void whenNamedParameterProvided_thenCorrect() { - Session session = sessionFactory.openSession(); - session.beginTransaction(); - Query query = session.createQuery("from Event E WHERE E.title = :eventTitle", Event.class); - - // This binds the value "Event1" to the parameter :eventTitle - query.setParameter("eventTitle", "Event 1"); - - assertEquals(1, query.list().size()); - session.getTransaction().commit(); - session.close(); - } - - @Test(expected = org.hibernate.QueryException.class) - public void whenNamedParameterMissing_thenThrowsQueryException() { - Session session = sessionFactory.openSession(); - session.beginTransaction(); - Query query = session.createQuery("from Event E WHERE E.title = :eventTitle", Event.class); - - try { - query.list(); - fail("We are expecting an exception!"); - } finally { - session.getTransaction().commit(); - session.close(); - } - } -} diff --git a/persistence-modules/hibernate-parameters/src/test/resources/hibernate.cfg.xml b/persistence-modules/hibernate-parameters/src/test/resources/hibernate.cfg.xml deleted file mode 100644 index 480baae4c1..0000000000 --- a/persistence-modules/hibernate-parameters/src/test/resources/hibernate.cfg.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - org.h2.Driver - jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE - sa - - - 1 - - org.hibernate.dialect.H2Dialect - - org.hibernate.cache.internal.NoCacheProvider - - true - - create - - - - - - \ No newline at end of file From ffe54857cb310aec6a170babfe4cd98c5f92e750 Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Sun, 25 Aug 2019 21:44:14 -0400 Subject: [PATCH 235/304] :arrow_up: BAEL-3237 Upgrade AutoValue --- code-generation/pom.xml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code-generation/pom.xml b/code-generation/pom.xml index b52e558b53..91ce0a4639 100644 --- a/code-generation/pom.xml +++ b/code-generation/pom.xml @@ -12,10 +12,16 @@ + + com.google.auto.value + auto-value-annotations + ${auto-value.version} + com.google.auto.value auto-value ${auto-value.version} + provided com.google.auto.factory @@ -43,9 +49,9 @@ - 1.3 - 1.0-beta5 - 1.0-rc5 + 1.6.6 + 1.0-beta6 + 1.0-rc6 4.2.0 From 9059f4a2c29c439875d1564ddc01ee8db3722674 Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Sat, 7 Sep 2019 14:40:24 -0400 Subject: [PATCH 236/304] :sparkles: BAEL-3237 AutoValue Builder with defensive copies --- .../java/com/baeldung/autovalue/Person.java | 38 +++++++++++++++++++ .../baeldung/autovalue/PersonUnitTest.java | 37 ++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 code-generation/src/main/java/com/baeldung/autovalue/Person.java create mode 100644 code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/Person.java b/code-generation/src/main/java/com/baeldung/autovalue/Person.java new file mode 100644 index 0000000000..a5fb684596 --- /dev/null +++ b/code-generation/src/main/java/com/baeldung/autovalue/Person.java @@ -0,0 +1,38 @@ +package com.baeldung.autovalue; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class Person { + + public abstract String name(); + + public abstract List favoriteMovies(); + + public static Builder builder() { + return new AutoValue_Person.Builder(); + } + + @AutoValue.Builder + public static abstract class Builder { + + public abstract Builder name(String value); + + public abstract Builder favoriteMovies(List value); + + abstract List favoriteMovies(); + + abstract Person autoBuild(); + + public Person build() { + List favoriteMovies = favoriteMovies(); + List copy = Collections.unmodifiableList(new ArrayList<>(favoriteMovies)); + favoriteMovies(copy); + return autoBuild(); + } + } +} diff --git a/code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java b/code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java new file mode 100644 index 0000000000..fce12edafe --- /dev/null +++ b/code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java @@ -0,0 +1,37 @@ +package com.baeldung.autovalue; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; + +/** + * Unit Test which verifies that the {@link Person} value object creates defensive copies of its favoriteMovies list. + */ +public class PersonUnitTest { + + @Test + public void givenNewPerson_whenModifyOriginalList_thenValueObjectIsNotAlsoModified() { + // GIVEN new Person + List originalFavoriteMoviesList = new ArrayList(); + originalFavoriteMoviesList.add("Training Day"); + originalFavoriteMoviesList.add("Fast and the Furious"); + Person person = Person.builder() + .name("Dan") + .favoriteMovies(originalFavoriteMoviesList) + .build(); + + // WHEN modify original list + originalFavoriteMoviesList.add("Friday"); + + // THEN Person remains unaffected + assertFalse(person.favoriteMovies() + .contains("Friday")); + assertEquals(2, person.favoriteMovies() + .size()); + } + +} From d009d17347d354d18702656f8dbe66c7fed56135 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Mon, 28 Oct 2019 09:53:40 +0330 Subject: [PATCH 237/304] Fixed the Concurrent Modifications By introducing a new logger for the broken test. --- .../baeldung/logback/MapAppenderIntegrationTest.java | 12 ++++++------ .../logback/src/test/resources/logback-test.xml | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java index a86bad4c3e..ae0eec727f 100644 --- a/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java +++ b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java @@ -15,17 +15,17 @@ import static org.junit.Assert.assertThat; public class MapAppenderIntegrationTest { - private Logger rootLogger; + private Logger logger; @Before public void setUp() { - rootLogger = (Logger) LoggerFactory.getLogger("ROOT"); + logger = (Logger) LoggerFactory.getLogger(MapAppenderIntegrationTest.class); } @Test public void whenLoggerEmitsLoggingEvent_thenAppenderReceivesEvent() { - rootLogger.info("Test from {}", this.getClass().getSimpleName()); - MapAppender appender = (MapAppender) rootLogger.getAppender("map"); + logger.info("Test from {}", this.getClass().getSimpleName()); + MapAppender appender = (MapAppender) logger.getAppender("map"); List messages = appender.getEventMap().values().stream().map(ILoggingEvent::getMessage).collect(toList()); assertThat(messages, hasItems("Test from {}")); @@ -33,8 +33,8 @@ public class MapAppenderIntegrationTest { @Test public void givenNoPrefixSet_whenLoggerEmitsEvent_thenAppenderReceivesNoEvent() { - rootLogger.info("Test from {}", this.getClass().getSimpleName()); - MapAppender appender = (MapAppender) rootLogger.getAppender("badMap"); + logger.info("Test from {}", this.getClass().getSimpleName()); + MapAppender appender = (MapAppender) logger.getAppender("badMap"); assertEquals(appender.getEventMap().size(), 0); } } diff --git a/logging-modules/logback/src/test/resources/logback-test.xml b/logging-modules/logback/src/test/resources/logback-test.xml index df81f18cc2..89c0124738 100644 --- a/logging-modules/logback/src/test/resources/logback-test.xml +++ b/logging-modules/logback/src/test/resources/logback-test.xml @@ -28,4 +28,9 @@ + + + + + \ No newline at end of file From 43cf1cb4f9d53b235385f8ce4164595960e2ba6c Mon Sep 17 00:00:00 2001 From: Kaushik Bagchi Date: Mon, 28 Oct 2019 10:39:09 +0100 Subject: [PATCH 238/304] changes for using arrays --- .../lists/client/EmployeeClient.java | 82 ++++++++++++++----- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java b/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java index 191719b084..a01aedb7d7 100644 --- a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java +++ b/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java @@ -1,24 +1,30 @@ package com.baeldung.resttemplate.lists.client; -import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.*; -import org.springframework.web.client.RestTemplate; - import com.baeldung.resttemplate.lists.dto.Employee; import com.baeldung.resttemplate.lists.dto.EmployeeList; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.List; +import static java.util.Arrays.asList; + /** * Application that shows how to use Lists with RestTemplate. */ -public class EmployeeClient -{ - public static void main(String[] args) - { +public class EmployeeClient { + public static void main(String[] args) { EmployeeClient employeeClient = new EmployeeClient(); + System.out.println("Calling GET using arrays"); + employeeClient.getAllEmployeesAsArray(); + + System.out.println("Calling GET for entity using arrays"); + employeeClient.getForEntityEmployeesAsArray(); + System.out.println("Calling GET using ParameterizedTypeReference"); employeeClient.getAllEmployeesUsingParameterizedTypeReference(); @@ -32,13 +38,48 @@ public class EmployeeClient employeeClient.createEmployeesUsingWrapperClass(); } - public EmployeeClient() - { + public EmployeeClient() { } - public List getAllEmployeesUsingParameterizedTypeReference() - { + public Employee[] getForEntityEmployeesAsArray() { + + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity response = + restTemplate.getForEntity( + "http://localhost:8082/spring-rest/employees/", + Employee[].class); + + Employee[] employees = response.getBody(); + + assert employees != null; + asList(employees).forEach(System.out::println); + + return employees; + + } + + public Employee[] getAllEmployeesAsArray() { + + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity response = + restTemplate.exchange( + "http://localhost:8082/spring-rest/employees/", + HttpMethod.GET, + null, Employee[].class); + + Employee[] employees = response.getBody(); + + assert employees != null; + asList(employees).forEach(System.out::println); + + return employees; + + } + + public List getAllEmployeesUsingParameterizedTypeReference() { RestTemplate restTemplate = new RestTemplate(); ResponseEntity> response = @@ -46,17 +87,18 @@ public class EmployeeClient "http://localhost:8082/spring-rest/employees/", HttpMethod.GET, null, - new ParameterizedTypeReference>(){}); + new ParameterizedTypeReference>() { + }); List employees = response.getBody(); - employees.forEach(e -> System.out.println(e)); + assert employees != null; + employees.forEach(System.out::println); return employees; } - public List getAllEmployeesUsingWrapperClass() - { + public List getAllEmployeesUsingWrapperClass() { RestTemplate restTemplate = new RestTemplate(); EmployeeList response = @@ -66,13 +108,12 @@ public class EmployeeClient List employees = response.getEmployees(); - employees.forEach(e -> System.out.println(e)); + employees.forEach(System.out::println); return employees; } - public void createEmployeesUsingLists() - { + public void createEmployeesUsingLists() { RestTemplate restTemplate = new RestTemplate(); List newEmployees = new ArrayList<>(); @@ -85,8 +126,7 @@ public class EmployeeClient ResponseEntity.class); } - public void createEmployeesUsingWrapperClass() - { + public void createEmployeesUsingWrapperClass() { RestTemplate restTemplate = new RestTemplate(); List newEmployees = new ArrayList<>(); From 98d4f930a533a32a22a7901617a6a31402cba8ba Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Mon, 28 Oct 2019 11:00:25 +0100 Subject: [PATCH 239/304] #BAEL-10229 Restore the spring-ejb pom as it's using a version of Spring Boot that is too different from the one in parent-boot-2. --- spring-ejb/pom.xml | 6 +++--- spring-ejb/spring-ejb-client/pom.xml | 20 ++++++++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/spring-ejb/pom.xml b/spring-ejb/pom.xml index 12c1d029ff..4422223c6f 100755 --- a/spring-ejb/pom.xml +++ b/spring-ejb/pom.xml @@ -11,9 +11,9 @@ com.baeldung - parent-boot-2 - 0.0.1-SNAPSHOT - ../parent-boot-2 + parent-modules + 1.0.0-SNAPSHOT + ../ diff --git a/spring-ejb/spring-ejb-client/pom.xml b/spring-ejb/spring-ejb-client/pom.xml index 8d4cdd37e8..2dd3120532 100644 --- a/spring-ejb/spring-ejb-client/pom.xml +++ b/spring-ejb/spring-ejb-client/pom.xml @@ -12,7 +12,19 @@ spring-ejb 1.0.0-SNAPSHOT - + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + org.springframework.boot @@ -49,9 +61,13 @@ org.springframework.boot spring-boot-maven-plugin - 2.0.4.RELEASE + ${spring-boot.version} + + 2.0.4.RELEASE + + From b0af74ef81778533021ebc22b052b9ca9a33f258 Mon Sep 17 00:00:00 2001 From: Kaushik Bagchi Date: Mon, 28 Oct 2019 18:00:42 +0100 Subject: [PATCH 240/304] updated as per Sam's comment --- .../lists/client/EmployeeClient.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java b/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java index a01aedb7d7..49e375f9cc 100644 --- a/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java +++ b/spring-rest/src/main/java/com/baeldung/resttemplate/lists/client/EmployeeClient.java @@ -19,9 +19,6 @@ public class EmployeeClient { public static void main(String[] args) { EmployeeClient employeeClient = new EmployeeClient(); - System.out.println("Calling GET using arrays"); - employeeClient.getAllEmployeesAsArray(); - System.out.println("Calling GET for entity using arrays"); employeeClient.getForEntityEmployeesAsArray(); @@ -60,24 +57,6 @@ public class EmployeeClient { } - public Employee[] getAllEmployeesAsArray() { - - RestTemplate restTemplate = new RestTemplate(); - - ResponseEntity response = - restTemplate.exchange( - "http://localhost:8082/spring-rest/employees/", - HttpMethod.GET, - null, Employee[].class); - - Employee[] employees = response.getBody(); - - assert employees != null; - asList(employees).forEach(System.out::println); - - return employees; - - } public List getAllEmployeesUsingParameterizedTypeReference() { RestTemplate restTemplate = new RestTemplate(); From d9babf5ec62773f1196b866df670e1bec2adfba6 Mon Sep 17 00:00:00 2001 From: Jonathan Cook Date: Mon, 28 Oct 2019 19:27:28 +0100 Subject: [PATCH 241/304] Update README.md Update readme for BAEL-2939 --- persistence-modules/java-jpa-2/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/persistence-modules/java-jpa-2/README.md b/persistence-modules/java-jpa-2/README.md index 1b4a175008..ea5f9a424f 100644 --- a/persistence-modules/java-jpa-2/README.md +++ b/persistence-modules/java-jpa-2/README.md @@ -10,4 +10,5 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [Types of JPA Queries](https://www.baeldung.com/jpa-queries) - [JPA/Hibernate Projections](https://www.baeldung.com/jpa-hibernate-projections) - [Combining JPA And/Or Criteria Predicates](https://www.baeldung.com/jpa-and-or-criteria-predicates) -- More articles: [[<-- prev]](/java-jpa) \ No newline at end of file +- [JPA Annotation for the PostgreSQL TEXT Type](https://www.baeldung.com/jpa-annotation-postgresql-text-type) +- More articles: [[<-- prev]](/java-jpa) From 1a54cd7d4d23d35f92874799949fc5d9de660f17 Mon Sep 17 00:00:00 2001 From: Jonathan Cook Date: Mon, 28 Oct 2019 19:30:56 +0100 Subject: [PATCH 242/304] Update README.md Update Readme for BAEL-3322 --- testing-modules/mocks/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/mocks/README.md b/testing-modules/mocks/README.md index 3baefe072b..fc7ec49e8b 100644 --- a/testing-modules/mocks/README.md +++ b/testing-modules/mocks/README.md @@ -9,3 +9,4 @@ - [JMockit Advanced Usage](http://www.baeldung.com/jmockit-advanced-usage) - [Introduction to Jukito](http://www.baeldung.com/jukito) - [A Guide to JavaFaker](https://www.baeldung.com/java-faker) +- [File System Mocking with Jimfs](https://www.baeldung.com/jimfs-file-system-mocking) From 3b56518706026b1baeda72898eff233c1b7438aa Mon Sep 17 00:00:00 2001 From: Jonathan Cook Date: Mon, 28 Oct 2019 19:34:08 +0100 Subject: [PATCH 243/304] Update README.md update readme for BAEL-3089 --- persistence-modules/java-jpa-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/java-jpa-2/README.md b/persistence-modules/java-jpa-2/README.md index ea5f9a424f..14433f8fc8 100644 --- a/persistence-modules/java-jpa-2/README.md +++ b/persistence-modules/java-jpa-2/README.md @@ -11,4 +11,5 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [JPA/Hibernate Projections](https://www.baeldung.com/jpa-hibernate-projections) - [Combining JPA And/Or Criteria Predicates](https://www.baeldung.com/jpa-and-or-criteria-predicates) - [JPA Annotation for the PostgreSQL TEXT Type](https://www.baeldung.com/jpa-annotation-postgresql-text-type) +- [Mapping a Single Entity to Multiple Tables in JPA](https://www.baeldung.com/jpa-mapping-single-entity-to-multiple-tables) - More articles: [[<-- prev]](/java-jpa) From d3ada85115e10237917468b20ef4294b7c5de61b Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Mon, 28 Oct 2019 22:12:19 +0330 Subject: [PATCH 244/304] Switch from Postgres to H2 --- persistence-modules/spring-data-jpa-3/pom.xml | 22 +++---------- .../java/com/baeldung/PostgresExtension.java | 32 ------------------- .../osiv/UserControllerIntegrationTest.java | 3 -- .../tx/ManualTransactionIntegrationTest.java | 6 ---- .../resources/application-test.properties | 3 -- 5 files changed, 5 insertions(+), 61 deletions(-) delete mode 100644 persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java diff --git a/persistence-modules/spring-data-jpa-3/pom.xml b/persistence-modules/spring-data-jpa-3/pom.xml index e4c83dac10..32f81d5745 100644 --- a/persistence-modules/spring-data-jpa-3/pom.xml +++ b/persistence-modules/spring-data-jpa-3/pom.xml @@ -27,24 +27,13 @@ spring-boot-starter-data-jpa - org.postgresql - postgresql - ${postgresql.version} + com.h2database + h2 + runtime + ${h2.version} - - org.testcontainers - junit-jupiter - ${testcontainers.version} - test - - - org.testcontainers - postgresql - ${testcontainers.version} - test - org.springframework.boot spring-boot-starter-test @@ -75,8 +64,7 @@ - 1.12.2 - 42.2.8 + 1.4.200 diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java deleted file mode 100644 index 3c5c7b002f..0000000000 --- a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/PostgresExtension.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung; - -import org.junit.jupiter.api.extension.AfterAllCallback; -import org.junit.jupiter.api.extension.BeforeAllCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.testcontainers.containers.PostgreSQLContainer; - -/** - * A JUnit 5 extension responsible for setting up a Postgres instance before all - * tests and tearing it down after them. - */ -public class PostgresExtension implements BeforeAllCallback, AfterAllCallback { - - private PostgreSQLContainer postgres; - - @Override - public void beforeAll(ExtensionContext context) { - postgres = new PostgreSQLContainer<>("postgres:11.1") - .withDatabaseName("baeldung") - .withUsername("test") - .withExposedPorts(5432) - .withPassword("test"); - postgres.start(); - System.setProperty("TEST_PG_PORT", postgres.getFirstMappedPort() + ""); - } - - @Override - public void afterAll(ExtensionContext context) { - postgres.stop(); - System.clearProperty("TEST_PG_PORT"); - } -} diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java index c05272b7b4..ba94fc111b 100644 --- a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java @@ -1,12 +1,10 @@ package com.baeldung.osiv; -import com.baeldung.PostgresExtension; import com.baeldung.model.User; import com.baeldung.repository.UserRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @@ -24,7 +22,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @SpringBootTest @AutoConfigureMockMvc @ActiveProfiles("test") -@ExtendWith(PostgresExtension.class) class UserControllerIntegrationTest { @Autowired diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java index af55024b57..1ce8e91ec5 100644 --- a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java @@ -1,13 +1,10 @@ package com.baeldung.tx; -import com.baeldung.PostgresExtension; import com.baeldung.model.Payment; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.PlatformTransactionManager; @@ -21,13 +18,10 @@ import org.springframework.transaction.support.TransactionTemplate; import javax.persistence.EntityManager; import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace.NONE; import static org.springframework.transaction.annotation.Propagation.NOT_SUPPORTED; @DataJpaTest @ActiveProfiles("test") -@ExtendWith(PostgresExtension.class) -@AutoConfigureTestDatabase(replace = NONE) @Transactional(propagation = NOT_SUPPORTED) class ManualTransactionIntegrationTest { diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties index b583f03c67..207de2e8ec 100644 --- a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties +++ b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties @@ -1,4 +1 @@ spring.jpa.hibernate.ddl-auto=update -spring.datasource.url=jdbc:postgresql://localhost:${TEST_PG_PORT}/baeldung -spring.datasource.username=test -spring.datasource.password=test From 8aaa2cef99d78435aad1f0a643863ce5585e89ff Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Mon, 28 Oct 2019 23:33:43 +0330 Subject: [PATCH 245/304] Fixed the Integrations Tests in spring-boot-data --- .../java/com/baeldung/disableautoconfig/SpringDataJPA.java | 3 +++ .../com/baeldung/disableautoconfig/SpringDataMongoDB.java | 4 +++- .../java/com/baeldung/disableautoconfig/SpringDataRedis.java | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataJPA.java b/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataJPA.java index 8e4ee76a25..87656f66a6 100644 --- a/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataJPA.java +++ b/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataJPA.java @@ -1,12 +1,15 @@ package com.baeldung.disableautoconfig; +import org.javers.spring.boot.sql.JaversSqlAutoConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, + JaversSqlAutoConfiguration.class, SpringDataWebAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) public class SpringDataJPA { diff --git a/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataMongoDB.java b/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataMongoDB.java index 865c137a8d..0845acee6e 100644 --- a/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataMongoDB.java +++ b/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataMongoDB.java @@ -3,9 +3,11 @@ package com.baeldung.disableautoconfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; +import org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) +@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class, + SpringDataWebAutoConfiguration.class}) public class SpringDataMongoDB { public static void main(String[] args) { diff --git a/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataRedis.java b/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataRedis.java index 9ec831c446..cd8cb0de09 100644 --- a/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataRedis.java +++ b/spring-boot-data/src/main/java/com/baeldung/disableautoconfig/SpringDataRedis.java @@ -4,8 +4,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration; +import org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration; -@SpringBootApplication(exclude = {RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class}) +@SpringBootApplication(exclude = {RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class, + SpringDataWebAutoConfiguration.class}) public class SpringDataRedis { public static void main(String[] args) { From 9002da9c61ab9809a200d253bdffb9f11583f326 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Mon, 28 Oct 2019 23:52:57 +0330 Subject: [PATCH 246/304] Fixed the Integrations Tests in jee-kotlin --- .../com/baeldung/jeekotlin/StudentResourceIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jee-kotlin/src/test/kotlin/com/baeldung/jeekotlin/StudentResourceIntegrationTest.java b/jee-kotlin/src/test/kotlin/com/baeldung/jeekotlin/StudentResourceIntegrationTest.java index b91b47cb1f..d48a3a96da 100644 --- a/jee-kotlin/src/test/kotlin/com/baeldung/jeekotlin/StudentResourceIntegrationTest.java +++ b/jee-kotlin/src/test/kotlin/com/baeldung/jeekotlin/StudentResourceIntegrationTest.java @@ -36,7 +36,7 @@ public class StudentResourceIntegrationTest { .withMavenCentralRepo(true) .withClassPathResolution(true) .loadPomFromFile("pom.xml") - .resolve("org.jetbrains.kotlin:kotlin-stdlib") + .resolve("org.jetbrains.kotlin:kotlin-stdlib:1.3.41") .withTransitivity() .as(JavaArchive.class); From 096ce9d045e8179d4d44319e392ad7804e094de2 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Tue, 29 Oct 2019 00:02:53 +0100 Subject: [PATCH 247/304] #BAEL-10229 Restore removed dependencies from load-testing-comparison module. --- .../load-testing-comparison/pom.xml | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/testing-modules/load-testing-comparison/pom.xml b/testing-modules/load-testing-comparison/pom.xml index 6e307a24ca..8441eb3db7 100644 --- a/testing-modules/load-testing-comparison/pom.xml +++ b/testing-modules/load-testing-comparison/pom.xml @@ -34,16 +34,32 @@ scala-library ${scala.version} - - - - - com.fasterxml.jackson.core jackson-databind ${jackson.version} + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + + + org.projectlombok + lombok + compile + @@ -111,7 +127,6 @@ 3.2.2 2.2.1 5.0 - 3.11 From c8d8972a56ced8b22b9bbeba74fc6e395cb45b58 Mon Sep 17 00:00:00 2001 From: Yavuz Tas <12643010+yavuztas@users.noreply.github.com> Date: Tue, 29 Oct 2019 10:01:58 +0100 Subject: [PATCH 248/304] Update javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java update to use the givenX_whenY_thenZ naming convention for tests Co-Authored-By: KevinGilmore --- .../ParameterMessageInterpolaterIntegrationTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java index 9badd5d5a4..bd2f508784 100644 --- a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java +++ b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java @@ -28,7 +28,7 @@ public class ParameterMessageInterpolaterIntegrationTest { } @Test - public void ifNameLengthIsLess_nameValidationFails() { + public void givenNameLengthLessThanMin_whenValidate_thenValidationFails() { Person person = new Person(); person.setName("John Doe"); person.setAge(18); @@ -67,4 +67,4 @@ public class ParameterMessageInterpolaterIntegrationTest { assertEquals("Email address should be in a correct format: ${validatedValue}", violation.getMessage()); } -} \ No newline at end of file +} From 2f989fb4354469ca28aece46b91429018c782dfe Mon Sep 17 00:00:00 2001 From: Yavuz Tas <12643010+yavuztas@users.noreply.github.com> Date: Tue, 29 Oct 2019 10:02:16 +0100 Subject: [PATCH 249/304] Update javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java update to use the givenX_whenY_thenZ naming convention for tests Co-Authored-By: KevinGilmore --- .../ParameterMessageInterpolaterIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java index bd2f508784..15c451348e 100644 --- a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java +++ b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java @@ -41,7 +41,7 @@ public class ParameterMessageInterpolaterIntegrationTest { } @Test - public void ifAgeIsLess_ageMinValidationFails() { + public void givenAgeIsLessThanMin_whenValidate_thenValidationFails() { Person person = new Person(); person.setName("John Stephaner Doe"); person.setAge(16); From 8582a17ca369f8ee8590805d540ad9456ee0ca5e Mon Sep 17 00:00:00 2001 From: Yavuz Tas <12643010+yavuztas@users.noreply.github.com> Date: Tue, 29 Oct 2019 10:02:27 +0100 Subject: [PATCH 250/304] Update javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java update to use the givenX_whenY_thenZ naming convention for tests Co-Authored-By: KevinGilmore --- .../ParameterMessageInterpolaterIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java index 15c451348e..6ecb916ab4 100644 --- a/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java +++ b/javaxval/src/test/java/org/baeldung/javaxval/messageinterpolator/ParameterMessageInterpolaterIntegrationTest.java @@ -54,7 +54,7 @@ public class ParameterMessageInterpolaterIntegrationTest { } @Test - public void ifEmailIsMalformed_emailFormatValidationFails() { + public void givenEmailIsMalformed_whenValidate_thenValidationFails() { Person person = new Person(); person.setName("John Stephaner Doe"); person.setAge(18); From 83b589738740fe5e71e76926a0cd1f6c9dc32a7a Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Tue, 29 Oct 2019 13:58:21 +0100 Subject: [PATCH 251/304] #BAEL-16633 split Core Java 9 module - new Java 9 features --- core-java-modules/core-java-9-jigsaw/pom.xml | 35 +++++++++ .../core-java-9-new-features/README.md | 14 ++++ .../compile-aot.sh | 0 .../compile-httpclient.bat | 0 .../core-java-9-new-features/pom.xml | 73 +++++++++++++++++++ .../run-aot.sh | 0 .../run-httpclient.bat | 0 .../baeldung/java9/aot/JaotCompilation.java | 0 .../java9/stackwalker/StackWalkerDemo.java | 0 .../java9/streams.reactive/EndSubscriber.java | 0 .../streams.reactive/TransformProcessor.java | 0 .../com/baeldung/multireleaseapp/App.java | 0 .../baeldung/multireleaseapp/DateHelper.java | 0 .../baeldung/multireleaseapp/DateHelper.java | 0 .../httpclient/HttpClientExample.java | 0 .../com.baeldung.httpclient/module-info.java | 0 .../com/baeldung/logging/app/MainApp.java | 0 .../com.baeldung.logging.app/module-info.java | 0 .../baeldung/logging/slf4j/Slf4jLogger.java | 0 .../logging/slf4j/Slf4jLoggerFinder.java | 0 .../module-info.java | 0 .../com/baeldung/logging/ConsoleLogger.java | 0 .../baeldung/logging/CustomLoggerFinder.java | 0 .../com.baeldung.logging/module-info.java | 0 .../java9/MultiResultionImageUnitTest.java | 0 .../java9/OptionalToStreamUnitTest.java | 0 .../java9/httpclient/HttpClientTest.java | 0 .../java9/httpclient/HttpRequestTest.java | 0 .../java9/httpclient/HttpResponseTest.java | 0 .../java9/language/DiamondUnitTest.java | 0 .../language/PrivateInterfaceUnitTest.java | 0 .../language/TryWithResourcesUnitTest.java | 0 .../java9/varhandles/VariableHandlesTest.java | 0 core-java-modules/core-java-9/README.md | 8 -- .../core-java-9/src/main/java/.gitignore | 13 ---- pom.xml | 5 +- 36 files changed, 124 insertions(+), 24 deletions(-) create mode 100644 core-java-modules/core-java-9-jigsaw/pom.xml create mode 100644 core-java-modules/core-java-9-new-features/README.md rename core-java-modules/{core-java-9 => core-java-9-new-features}/compile-aot.sh (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/compile-httpclient.bat (100%) create mode 100644 core-java-modules/core-java-9-new-features/pom.xml rename core-java-modules/{core-java-9 => core-java-9-new-features}/run-aot.sh (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/run-httpclient.bat (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/java9/aot/JaotCompilation.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/java9/streams.reactive/EndSubscriber.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/java9/streams.reactive/TransformProcessor.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/multireleaseapp/App.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/multireleaseapp/DateHelper.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java9/com/baeldung/multireleaseapp/DateHelper.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.httpclient/com/baeldung/httpclient/HttpClientExample.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.httpclient/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging.app/com/baeldung/logging/app/MainApp.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging.app/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLogger.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLoggerFinder.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging.slf4j/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging/com/baeldung/logging/ConsoleLogger.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging/com/baeldung/logging/CustomLoggerFinder.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/modules/com.baeldung.logging/module-info.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/MultiResultionImageUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/OptionalToStreamUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/httpclient/HttpClientTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/httpclient/HttpRequestTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/httpclient/HttpResponseTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/language/DiamondUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/language/PrivateInterfaceUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/language/TryWithResourcesUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/varhandles/VariableHandlesTest.java (100%) delete mode 100644 core-java-modules/core-java-9/src/main/java/.gitignore diff --git a/core-java-modules/core-java-9-jigsaw/pom.xml b/core-java-modules/core-java-9-jigsaw/pom.xml new file mode 100644 index 0000000000..8194ae9d00 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + core-java-9-jigsaw + 0.2-SNAPSHOT + core-java-9 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + + core-java-9-jigsaw + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + 1.9 + 1.9 + + + diff --git a/core-java-modules/core-java-9-new-features/README.md b/core-java-modules/core-java-9-new-features/README.md new file mode 100644 index 0000000000..d547b9a221 --- /dev/null +++ b/core-java-modules/core-java-9-new-features/README.md @@ -0,0 +1,14 @@ +## Core Java 9 + +This module contains articles about core Java features that have been introduced in Java 9. + +### Relevant Articles: + +- [Java 9 New Features](https://www.baeldung.com/new-java-9) +- [Java 9 Variable Handles Demystified](http://www.baeldung.com/java-variable-handles) +- [Exploring the New HTTP Client in Java 9 and 11](http://www.baeldung.com/java-9-http-client) +- [Multi-Release Jar Files](https://www.baeldung.com/java-multi-release-jar) +- [Ahead of Time Compilation (AoT)](https://www.baeldung.com/ahead-of-time-compilation) +- [Introduction to Java 9 StackWalking API](https://www.baeldung.com/java-9-stackwalking-api) +- [Java 9 Platform Logging API](https://www.baeldung.com/java-9-logging-api) +- [Java 9 Reactive Streams](https://www.baeldung.com/java-9-reactive-streams) diff --git a/core-java-modules/core-java-9/compile-aot.sh b/core-java-modules/core-java-9-new-features/compile-aot.sh similarity index 100% rename from core-java-modules/core-java-9/compile-aot.sh rename to core-java-modules/core-java-9-new-features/compile-aot.sh diff --git a/core-java-modules/core-java-9/compile-httpclient.bat b/core-java-modules/core-java-9-new-features/compile-httpclient.bat similarity index 100% rename from core-java-modules/core-java-9/compile-httpclient.bat rename to core-java-modules/core-java-9-new-features/compile-httpclient.bat diff --git a/core-java-modules/core-java-9-new-features/pom.xml b/core-java-modules/core-java-9-new-features/pom.xml new file mode 100644 index 0000000000..aee289c79f --- /dev/null +++ b/core-java-modules/core-java-9-new-features/pom.xml @@ -0,0 +1,73 @@ + + 4.0.0 + core-java-9 + 0.2-SNAPSHOT + core-java-9 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + + + com.jayway.awaitility + awaitility + ${awaitility.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + com.google.guava + guava + ${guava.version} + + + org.junit.platform + junit-platform-runner + ${junit.platform.version} + test + + + + + core-java-9 + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + + apache.snapshots + http://repository.apache.org/snapshots/ + + + + + + 3.10.0 + 1.2.0 + 1.7.0 + 1.9 + 1.9 + 25.1-jre + + + diff --git a/core-java-modules/core-java-9/run-aot.sh b/core-java-modules/core-java-9-new-features/run-aot.sh similarity index 100% rename from core-java-modules/core-java-9/run-aot.sh rename to core-java-modules/core-java-9-new-features/run-aot.sh diff --git a/core-java-modules/core-java-9/run-httpclient.bat b/core-java-modules/core-java-9-new-features/run-httpclient.bat similarity index 100% rename from core-java-modules/core-java-9/run-httpclient.bat rename to core-java-modules/core-java-9-new-features/run-httpclient.bat diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/java9/aot/JaotCompilation.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/aot/JaotCompilation.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/java9/aot/JaotCompilation.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/aot/JaotCompilation.java diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/java9/streams.reactive/EndSubscriber.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/streams.reactive/EndSubscriber.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/java9/streams.reactive/EndSubscriber.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/streams.reactive/EndSubscriber.java diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/java9/streams.reactive/TransformProcessor.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/streams.reactive/TransformProcessor.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/java9/streams.reactive/TransformProcessor.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/streams.reactive/TransformProcessor.java diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/multireleaseapp/App.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/multireleaseapp/App.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/multireleaseapp/App.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/multireleaseapp/App.java diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/multireleaseapp/DateHelper.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/multireleaseapp/DateHelper.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/multireleaseapp/DateHelper.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/multireleaseapp/DateHelper.java diff --git a/core-java-modules/core-java-9/src/main/java9/com/baeldung/multireleaseapp/DateHelper.java b/core-java-modules/core-java-9-new-features/src/main/java9/com/baeldung/multireleaseapp/DateHelper.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java9/com/baeldung/multireleaseapp/DateHelper.java rename to core-java-modules/core-java-9-new-features/src/main/java9/com/baeldung/multireleaseapp/DateHelper.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.httpclient/com/baeldung/httpclient/HttpClientExample.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.httpclient/com/baeldung/httpclient/HttpClientExample.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.httpclient/com/baeldung/httpclient/HttpClientExample.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.httpclient/com/baeldung/httpclient/HttpClientExample.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.httpclient/module-info.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.httpclient/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.httpclient/module-info.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.httpclient/module-info.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging.app/com/baeldung/logging/app/MainApp.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.app/com/baeldung/logging/app/MainApp.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging.app/com/baeldung/logging/app/MainApp.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.app/com/baeldung/logging/app/MainApp.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging.app/module-info.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.app/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging.app/module-info.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.app/module-info.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLogger.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLogger.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLogger.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLogger.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLoggerFinder.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLoggerFinder.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLoggerFinder.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.slf4j/com/baeldung/logging/slf4j/Slf4jLoggerFinder.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging.slf4j/module-info.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.slf4j/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging.slf4j/module-info.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging.slf4j/module-info.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging/com/baeldung/logging/ConsoleLogger.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging/com/baeldung/logging/ConsoleLogger.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging/com/baeldung/logging/ConsoleLogger.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging/com/baeldung/logging/ConsoleLogger.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging/com/baeldung/logging/CustomLoggerFinder.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging/com/baeldung/logging/CustomLoggerFinder.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging/com/baeldung/logging/CustomLoggerFinder.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging/com/baeldung/logging/CustomLoggerFinder.java diff --git a/core-java-modules/core-java-9/src/modules/com.baeldung.logging/module-info.java b/core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging/module-info.java similarity index 100% rename from core-java-modules/core-java-9/src/modules/com.baeldung.logging/module-info.java rename to core-java-modules/core-java-9-new-features/src/modules/com.baeldung.logging/module-info.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageUnitTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/MultiResultionImageUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageUnitTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/MultiResultionImageUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamUnitTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/OptionalToStreamUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamUnitTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/OptionalToStreamUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/httpclient/HttpClientTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/httpclient/HttpClientTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/httpclient/HttpClientTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/httpclient/HttpClientTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/httpclient/HttpRequestTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/httpclient/HttpRequestTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/httpclient/HttpRequestTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/httpclient/HttpRequestTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/httpclient/HttpResponseTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/httpclient/HttpResponseTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/httpclient/HttpResponseTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/httpclient/HttpResponseTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/DiamondUnitTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/language/DiamondUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/DiamondUnitTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/language/DiamondUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceUnitTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/language/PrivateInterfaceUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceUnitTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/language/PrivateInterfaceUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesUnitTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/language/TryWithResourcesUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesUnitTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/language/TryWithResourcesUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/varhandles/VariableHandlesTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/varhandles/VariableHandlesTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/varhandles/VariableHandlesTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/varhandles/VariableHandlesTest.java diff --git a/core-java-modules/core-java-9/README.md b/core-java-modules/core-java-9/README.md index 90a1b4ab16..34a02d46e1 100644 --- a/core-java-modules/core-java-9/README.md +++ b/core-java-modules/core-java-9/README.md @@ -4,25 +4,17 @@ This module contains articles about Java 9 core features ### Relevant Articles: -- [Java 9 New Features](https://www.baeldung.com/new-java-9) - [New Stream Collectors in Java 9](http://www.baeldung.com/java9-stream-collectors) -- [Java 9 Variable Handles Demystified](http://www.baeldung.com/java-variable-handles) -- [Exploring the New HTTP Client in Java 9 and 11](http://www.baeldung.com/java-9-http-client) - [Method Handles in Java](http://www.baeldung.com/java-method-handles) - [Introduction to Chronicle Queue](http://www.baeldung.com/java-chronicle-queue) - [Optional orElse Optional](http://www.baeldung.com/java-optional-or-else-optional) - [Iterate Through a Range of Dates in Java](https://www.baeldung.com/java-iterate-date-range) - [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap) - [Immutable Set in Java](https://www.baeldung.com/java-immutable-set) -- [Multi-Release Jar Files](https://www.baeldung.com/java-multi-release-jar) -- [Ahead of Time Compilation (AoT)](https://www.baeldung.com/ahead-of-time-compilation) - [Java 9 Process API Improvements](https://www.baeldung.com/java-9-process-api) - [Java 9 java.util.Objects Additions](https://www.baeldung.com/java-9-objects-new) -- [Java 9 Reactive Streams](https://www.baeldung.com/java-9-reactive-streams) - [Java 9 Optional API Additions](https://www.baeldung.com/java-9-optional) - [Java 9 CompletableFuture API Improvements](https://www.baeldung.com/java-9-completablefuture) -- [Introduction to Java 9 StackWalking API](https://www.baeldung.com/java-9-stackwalking-api) - [Java 9 Convenience Factory Methods for Collections](https://www.baeldung.com/java-9-collections-factory-methods) - [Java 9 Stream API Improvements](https://www.baeldung.com/java-9-stream-api) -- [Java 9 Platform Logging API](https://www.baeldung.com/java-9-logging-api) - [Filtering a Stream of Optionals in Java](https://www.baeldung.com/java-filter-stream-of-optional) diff --git a/core-java-modules/core-java-9/src/main/java/.gitignore b/core-java-modules/core-java-9/src/main/java/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/core-java-modules/core-java-9/src/main/java/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/pom.xml b/pom.xml index 14eb9e842e..8dbf232e50 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,3 @@ - @@ -406,7 +405,7 @@ --> core-java-modules/core-java-text core-java-modules/core-java-lambdas - + core-java-modules/core-java-arrays core-java-modules/core-java-arrays-2 @@ -1178,7 +1177,7 @@ core-java-modules/core-java-time-measurements --> core-java-modules/core-java-text - + core-java-modules/core-java-arrays core-java-modules/core-java-arrays-2 From fabf0993f6a62d426814272a9cb7aed64bcd2f4c Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Tue, 29 Oct 2019 15:30:01 +0100 Subject: [PATCH 252/304] #BAEL-16633 split Core Java 9 module - improved features --- .../core-java-9-improvements/README.md | 17 +++++ .../core-java-9-improvements/pom.xml | 73 +++++++++++++++++++ .../com/baeldung/java9/Java9OptionalTest.java | 0 .../future/CompletableFutureUnitTest.java | 0 .../language/Java9ObjectsAPIUnitTest.java | 0 .../ListFactoryMethodsUnitTest.java | 0 .../MapFactoryMethodsUnitTest.java | 0 .../SetFactoryMethodsUnitTest.java | 0 .../stream/CollectorImprovementUnitTest.java | 0 .../stream/StreamFeaturesUnitTest.java | 0 .../compile-modules.sh | 0 .../logging.sh | 0 .../mods/logback.xml | 0 .../core-java-9-new-features/pom.xml | 17 +---- .../java9/language/PrivateInterface.java | 0 .../reactive/BaeldungBatchSubscriberImpl.java | 0 .../reactive/BaeldungSubscriberImpl.java | 0 ...ungBatchSubscriberImplIntegrationTest.java | 0 ...BaeldungSubscriberImplIntegrationTest.java | 0 .../stackwalker/StackWalkerDemoUnitTest.java | 0 .../streams.reactive/ReactiveStreamsTest.java | 0 core-java-modules/core-java-9/.gitignore | 13 ---- core-java-modules/core-java-9/README.md | 10 +-- .../test/java/com/baeldung/java9/README.MD | 2 - 24 files changed, 95 insertions(+), 37 deletions(-) create mode 100644 core-java-modules/core-java-9-improvements/README.md create mode 100644 core-java-modules/core-java-9-improvements/pom.xml rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/Java9OptionalTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/concurrent/future/CompletableFutureUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/language/Java9ObjectsAPIUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/language/collections/ListFactoryMethodsUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/language/collections/MapFactoryMethodsUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/language/collections/SetFactoryMethodsUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/language/stream/CollectorImprovementUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-improvements}/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/compile-modules.sh (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/logging.sh (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/mods/logback.xml (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/java9/language/PrivateInterface.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImpl.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/main/java/com/baeldung/java9/reactive/BaeldungSubscriberImpl.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImplIntegrationTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/reactive/BaeldungSubscriberImplIntegrationTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoUnitTest.java (100%) rename core-java-modules/{core-java-9 => core-java-9-new-features}/src/test/java/com/baeldung/java9/streams.reactive/ReactiveStreamsTest.java (100%) delete mode 100644 core-java-modules/core-java-9/.gitignore delete mode 100644 core-java-modules/core-java-9/src/test/java/com/baeldung/java9/README.MD diff --git a/core-java-modules/core-java-9-improvements/README.md b/core-java-modules/core-java-9-improvements/README.md new file mode 100644 index 0000000000..b0baccba7f --- /dev/null +++ b/core-java-modules/core-java-9-improvements/README.md @@ -0,0 +1,17 @@ +## Core Java 9 + +This module contains articles about the improvements to core Java features introduced with Java 9. + +### Relevant Articles: + +- [New Stream Collectors in Java 9](http://www.baeldung.com/java9-stream-collectors) +- [Java 9 Optional API Additions](https://www.baeldung.com/java-9-optional) +- [Java 9 Convenience Factory Methods for Collections](https://www.baeldung.com/java-9-collections-factory-methods) +- [Java 9 Stream API Improvements](https://www.baeldung.com/java-9-stream-api) +- [Java 9 java.util.Objects Additions](https://www.baeldung.com/java-9-objects-new) +- [Java 9 CompletableFuture API Improvements](https://www.baeldung.com/java-9-completablefuture) + +#### Relevant articles not in this module: + +- [Java 9 Process API Improvements](https://www.baeldung.com/java-9-process-api) (see the [core-java-os](/core-java-os) module) + diff --git a/core-java-modules/core-java-9-improvements/pom.xml b/core-java-modules/core-java-9-improvements/pom.xml new file mode 100644 index 0000000000..aee289c79f --- /dev/null +++ b/core-java-modules/core-java-9-improvements/pom.xml @@ -0,0 +1,73 @@ + + 4.0.0 + core-java-9 + 0.2-SNAPSHOT + core-java-9 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + + + com.jayway.awaitility + awaitility + ${awaitility.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + com.google.guava + guava + ${guava.version} + + + org.junit.platform + junit-platform-runner + ${junit.platform.version} + test + + + + + core-java-9 + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + + apache.snapshots + http://repository.apache.org/snapshots/ + + + + + + 3.10.0 + 1.2.0 + 1.7.0 + 1.9 + 1.9 + 25.1-jre + + + diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/Java9OptionalTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/Java9OptionalTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/concurrent/future/CompletableFutureUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/concurrent/future/CompletableFutureUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/concurrent/future/CompletableFutureUnitTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/concurrent/future/CompletableFutureUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/Java9ObjectsAPIUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/Java9ObjectsAPIUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/Java9ObjectsAPIUnitTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/Java9ObjectsAPIUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/collections/ListFactoryMethodsUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/collections/ListFactoryMethodsUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/collections/ListFactoryMethodsUnitTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/collections/ListFactoryMethodsUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/collections/MapFactoryMethodsUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/collections/MapFactoryMethodsUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/collections/MapFactoryMethodsUnitTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/collections/MapFactoryMethodsUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/collections/SetFactoryMethodsUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/collections/SetFactoryMethodsUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/collections/SetFactoryMethodsUnitTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/collections/SetFactoryMethodsUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/stream/CollectorImprovementUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/stream/CollectorImprovementUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/stream/CollectorImprovementUnitTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/stream/CollectorImprovementUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesUnitTest.java rename to core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesUnitTest.java diff --git a/core-java-modules/core-java-9/compile-modules.sh b/core-java-modules/core-java-9-new-features/compile-modules.sh similarity index 100% rename from core-java-modules/core-java-9/compile-modules.sh rename to core-java-modules/core-java-9-new-features/compile-modules.sh diff --git a/core-java-modules/core-java-9/logging.sh b/core-java-modules/core-java-9-new-features/logging.sh similarity index 100% rename from core-java-modules/core-java-9/logging.sh rename to core-java-modules/core-java-9-new-features/logging.sh diff --git a/core-java-modules/core-java-9/mods/logback.xml b/core-java-modules/core-java-9-new-features/mods/logback.xml similarity index 100% rename from core-java-modules/core-java-9/mods/logback.xml rename to core-java-modules/core-java-9-new-features/mods/logback.xml diff --git a/core-java-modules/core-java-9-new-features/pom.xml b/core-java-modules/core-java-9-new-features/pom.xml index aee289c79f..cfdbb285d4 100644 --- a/core-java-modules/core-java-9-new-features/pom.xml +++ b/core-java-modules/core-java-9-new-features/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - core-java-9 + core-java-9-new-features 0.2-SNAPSHOT core-java-9 @@ -13,23 +13,12 @@ - - com.jayway.awaitility - awaitility - ${awaitility.version} - test - org.assertj assertj-core ${assertj.version} test - - com.google.guava - guava - ${guava.version} - org.junit.platform junit-platform-runner @@ -39,7 +28,7 @@ - core-java-9 + core-java-9-new-features org.apache.maven.plugins @@ -64,10 +53,8 @@ 3.10.0 1.2.0 - 1.7.0 1.9 1.9 - 25.1-jre diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/language/PrivateInterface.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/language/PrivateInterface.java diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImpl.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImpl.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImpl.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImpl.java diff --git a/core-java-modules/core-java-9/src/main/java/com/baeldung/java9/reactive/BaeldungSubscriberImpl.java b/core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/reactive/BaeldungSubscriberImpl.java similarity index 100% rename from core-java-modules/core-java-9/src/main/java/com/baeldung/java9/reactive/BaeldungSubscriberImpl.java rename to core-java-modules/core-java-9-new-features/src/main/java/com/baeldung/java9/reactive/BaeldungSubscriberImpl.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImplIntegrationTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImplIntegrationTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImplIntegrationTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/reactive/BaeldungBatchSubscriberImplIntegrationTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/reactive/BaeldungSubscriberImplIntegrationTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/reactive/BaeldungSubscriberImplIntegrationTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/reactive/BaeldungSubscriberImplIntegrationTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/reactive/BaeldungSubscriberImplIntegrationTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoUnitTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoUnitTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoUnitTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/streams.reactive/ReactiveStreamsTest.java b/core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/streams.reactive/ReactiveStreamsTest.java similarity index 100% rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/streams.reactive/ReactiveStreamsTest.java rename to core-java-modules/core-java-9-new-features/src/test/java/com/baeldung/java9/streams.reactive/ReactiveStreamsTest.java diff --git a/core-java-modules/core-java-9/.gitignore b/core-java-modules/core-java-9/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/core-java-modules/core-java-9/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/core-java-modules/core-java-9/README.md b/core-java-modules/core-java-9/README.md index 34a02d46e1..94f480db67 100644 --- a/core-java-modules/core-java-9/README.md +++ b/core-java-modules/core-java-9/README.md @@ -4,17 +4,13 @@ This module contains articles about Java 9 core features ### Relevant Articles: -- [New Stream Collectors in Java 9](http://www.baeldung.com/java9-stream-collectors) - [Method Handles in Java](http://www.baeldung.com/java-method-handles) - [Introduction to Chronicle Queue](http://www.baeldung.com/java-chronicle-queue) - [Optional orElse Optional](http://www.baeldung.com/java-optional-or-else-optional) - [Iterate Through a Range of Dates in Java](https://www.baeldung.com/java-iterate-date-range) - [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap) - [Immutable Set in Java](https://www.baeldung.com/java-immutable-set) -- [Java 9 Process API Improvements](https://www.baeldung.com/java-9-process-api) -- [Java 9 java.util.Objects Additions](https://www.baeldung.com/java-9-objects-new) -- [Java 9 Optional API Additions](https://www.baeldung.com/java-9-optional) -- [Java 9 CompletableFuture API Improvements](https://www.baeldung.com/java-9-completablefuture) -- [Java 9 Convenience Factory Methods for Collections](https://www.baeldung.com/java-9-collections-factory-methods) -- [Java 9 Stream API Improvements](https://www.baeldung.com/java-9-stream-api) - [Filtering a Stream of Optionals in Java](https://www.baeldung.com/java-filter-stream-of-optional) + +Note: also contains part of the code for the article +[How to Filter a Collection in Java](https://www.baeldung.com/java-collection-filtering). diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/README.MD b/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/README.MD deleted file mode 100644 index 2f44a2336b..0000000000 --- a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/README.MD +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Artiles: -- [Filtering a Stream of Optionals in Java](http://www.baeldung.com/java-filter-stream-of-optional) From cd3b139feff57712384b2d9d95719a5021a8b1ec Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Tue, 29 Oct 2019 18:56:57 +0330 Subject: [PATCH 253/304] Disabling the Wildfly Remote Profile --- jee-kotlin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jee-kotlin/pom.xml b/jee-kotlin/pom.xml index 17163ba23c..60765f6bc2 100644 --- a/jee-kotlin/pom.xml +++ b/jee-kotlin/pom.xml @@ -230,7 +230,7 @@ - wildfly-remote-arquillian + wildfly-remote-arquillian-disabled org.jboss.resteasy From e8a597b5e991c067e7cf058bc9967ab09ec95a91 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Wed, 30 Oct 2019 00:07:04 +0530 Subject: [PATCH 254/304] - Updated test names to reflect what it is testing --- .../test/java/com/baeldung/scanner/JavaScannerUnitTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java index 7c244803dd..5b304284b2 100644 --- a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java +++ b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java @@ -29,14 +29,15 @@ public class JavaScannerUnitTest { } @Test(expected = NoSuchElementException.class) - public void whenReadingLines_thenThrowNoSuchElementException() { + + public void givenNoNewLine_whenReadingNextLine_thenThrowNoSuchElementException() { try (Scanner scanner = new Scanner("")) { String result = scanner.nextLine(); } } @Test(expected = IllegalStateException.class) - public void whenReadingLines_thenThrowIllegalStateException() { + public void givenScannerIsClosed_whenReadingNextLine_thenThrowIllegalStateException() { Scanner scanner = new Scanner(""); scanner.close(); String result = scanner.nextLine(); From 3d73ba4f8ea21171e0fe4c2c05dd11a8959386d7 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Wed, 30 Oct 2019 00:44:25 +0330 Subject: [PATCH 255/304] Fixed the Max Memory Limit for the Embedded Redis Server --- .../redis/template/RedisKeyCommandsIntegrationTest.java | 2 +- .../redis/template/RedisTemplateListOpsIntegrationTest.java | 2 +- .../redis/template/RedisTemplateValueOpsIntegrationTest.java | 2 +- .../spring/data/redis/RedisMessageListenerIntegrationTest.java | 2 +- .../data/redis/repo/StudentRepositoryIntegrationTest.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisKeyCommandsIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisKeyCommandsIntegrationTest.java index 1333f94653..af790c99b7 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisKeyCommandsIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisKeyCommandsIntegrationTest.java @@ -38,7 +38,7 @@ public class RedisKeyCommandsIntegrationTest { @BeforeClass public static void startRedisServer() throws IOException { - redisServer = new RedisServerBuilder().port(6379).setting("maxheap 256M").build(); + redisServer = new RedisServerBuilder().port(6379).setting("maxmemory 256M").build(); redisServer.start(); } diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java index 88c4fa6eed..58846d7c27 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java @@ -36,7 +36,7 @@ public class RedisTemplateListOpsIntegrationTest { @BeforeClass public static void startRedisServer() throws IOException { - redisServer = new RedisServerBuilder().port(6379).setting("maxheap 128M").build(); + redisServer = new RedisServerBuilder().port(6379).setting("maxmemory 128M").build(); redisServer.start(); } diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateValueOpsIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateValueOpsIntegrationTest.java index afa5267582..5d12f90f34 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateValueOpsIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateValueOpsIntegrationTest.java @@ -38,7 +38,7 @@ public class RedisTemplateValueOpsIntegrationTest { @BeforeClass public static void startRedisServer() throws IOException { - redisServer = new RedisServerBuilder().port(6379).setting("maxheap 256M").build(); + redisServer = new RedisServerBuilder().port(6379).setting("maxmemory 256M").build(); redisServer.start(); } diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java index 1c69b63c09..b2862e26c3 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java @@ -33,7 +33,7 @@ public class RedisMessageListenerIntegrationTest { @BeforeClass public static void startRedisServer() throws IOException { - redisServer = new RedisServerBuilder().port(6379).setting("maxheap 256M").build(); + redisServer = new RedisServerBuilder().port(6379).setting("maxmemory 256M").build(); redisServer.start(); } diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java index b1a36475c3..24191a42b9 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java @@ -34,7 +34,7 @@ public class StudentRepositoryIntegrationTest { @BeforeClass public static void startRedisServer() throws IOException { - redisServer = new RedisServerBuilder().port(6379).setting("maxheap 128M").build(); + redisServer = new RedisServerBuilder().port(6379).setting("maxmemory 128M").build(); redisServer.start(); } From f0a3af9187b46eed372d7d2130501d0ba63a728f Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Wed, 30 Oct 2019 01:10:19 +0330 Subject: [PATCH 256/304] Fixed the Integrations Tests in spring-data-rest-querydsl --- .../baeldung/springdatarestquerydsl/IntegrationTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-data-rest-querydsl/src/test/java/com/baeldung/springdatarestquerydsl/IntegrationTest.java b/spring-data-rest-querydsl/src/test/java/com/baeldung/springdatarestquerydsl/IntegrationTest.java index ef86c2f36d..2d3dbc4c74 100644 --- a/spring-data-rest-querydsl/src/test/java/com/baeldung/springdatarestquerydsl/IntegrationTest.java +++ b/spring-data-rest-querydsl/src/test/java/com/baeldung/springdatarestquerydsl/IntegrationTest.java @@ -36,17 +36,17 @@ public class IntegrationTest { @Test public void givenRequestHasBeenMade_whenQueryOverNameAttribute_thenGetJohn() throws Exception { // Get John - mockMvc.perform(get("/personQuery?name=John")).andExpect(status().isOk()).andExpect(content().contentType(contentType)) + mockMvc.perform(get("/users?name=John")).andExpect(status().isOk()).andExpect(content().contentType(contentType)) .andExpect(jsonPath("$", hasSize(1))).andExpect(jsonPath("$[0].name", is("John"))) .andExpect(jsonPath("$[0].address.address", is("Fake Street 1"))) - .andExpect(jsonPath("$[0].address.country", is("Fake Country"))); + .andExpect(jsonPath("$[0].address.country", is("Spain"))); } @Test public void givenRequestHasBeenMade_whenQueryOverNameAttribute_thenGetLisa() throws Exception { // Get Lisa - mockMvc.perform(get("/personQuery?name=Lisa")).andExpect(status().isOk()).andExpect(content().contentType(contentType)) + mockMvc.perform(get("/users?name=Lisa")).andExpect(status().isOk()).andExpect(content().contentType(contentType)) .andExpect(jsonPath("$", hasSize(1))).andExpect(jsonPath("$[0].name", is("Lisa"))) .andExpect(jsonPath("$[0].address.address", is("Real Street 1"))) - .andExpect(jsonPath("$[0].address.country", is("Real Country"))); + .andExpect(jsonPath("$[0].address.country", is("Germany"))); } } From 5914a5195a1567e14c9b62f948d77a732d8d11d5 Mon Sep 17 00:00:00 2001 From: Fred Date: Tue, 29 Oct 2019 21:34:29 -0300 Subject: [PATCH 257/304] Customizing the Result of JPA Queries with Aggregation Functions Module (#7977) * Customizing the Result of JPA Queries with Aggregation Functions Module * *Code fix for the PR #7977 * *Inclusion of a method and tests for queries returning Object[] for PR #7977 * *Assertions update PR #7977 * *Adjust in the integration tests PR #7977 --- .../baeldung/aggregation/model/Comment.java | 85 ++++++++++++++ .../com/baeldung/aggregation/model/Post.java | 75 ++++++++++++ .../model/custom/CommentCount.java | 27 +++++ .../model/custom/ICommentCount.java | 8 ++ .../repository/CommentRepository.java | 27 +++++ .../SpringDataAggregateIntegrationTest.java | 107 ++++++++++++++++++ .../test/resources/test-aggregation-data.sql | 7 ++ 7 files changed, 336 insertions(+) create mode 100644 persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Comment.java create mode 100644 persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Post.java create mode 100644 persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java create mode 100644 persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java create mode 100644 persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java create mode 100644 persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java create mode 100644 persistence-modules/spring-data-jpa-2/src/test/resources/test-aggregation-data.sql diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Comment.java b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Comment.java new file mode 100644 index 0000000000..26c2373cbe --- /dev/null +++ b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Comment.java @@ -0,0 +1,85 @@ +package com.baeldung.aggregation.model; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import java.util.Objects; + +@Entity +public class Comment { + @Id + private Integer id; + private Integer year; + private boolean approved; + private String content; + @ManyToOne + private Post post; + + public Comment() { + } + + public Comment(int id, int year, boolean approved, String content, Post post) { + this.id = id; + this.year = year; + this.approved = approved; + this.content = content; + this.post = post; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } + + public boolean isApproved() { + return approved; + } + + public void setApproved(boolean approved) { + this.approved = approved; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Post getPost() { + return post; + } + + public void setPost(Post post) { + this.post = post; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Comment)) { + return false; + } + Comment comment = (Comment) o; + return getId().equals(comment.getId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId()); + } +} diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Post.java b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Post.java new file mode 100644 index 0000000000..f396e080ae --- /dev/null +++ b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Post.java @@ -0,0 +1,75 @@ +package com.baeldung.aggregation.model; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import java.util.List; +import java.util.Objects; + +@Entity +public class Post { + @Id + private Integer id; + private String title; + private String content; + @OneToMany(mappedBy = "post") + private List comments; + + public Post() { + } + + public Post(Integer id, String title, String content) { + this.id = id; + this.title = title; + this.content = content; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public List getComments() { + return comments; + } + + public void setComments(List comments) { + this.comments = comments; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Post)) { + return false; + } + Post post = (Post) o; + return getId().equals(post.getId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId()); + } +} diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java new file mode 100644 index 0000000000..510b52a47c --- /dev/null +++ b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java @@ -0,0 +1,27 @@ +package com.baeldung.aggregation.model.custom; + +public class CommentCount { + private Integer year; + private Long total; + + public CommentCount(Integer year, Long total) { + this.year = year; + this.total = total; + } + + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } + + public Long getTotal() { + return total; + } + + public void setTotal(Long total) { + this.total = total; + } +} diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java new file mode 100644 index 0000000000..acb25cfd49 --- /dev/null +++ b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java @@ -0,0 +1,8 @@ +package com.baeldung.aggregation.model.custom; + +public interface ICommentCount { + + Integer getYearComment(); + + Long getTotalComment(); +} diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java new file mode 100644 index 0000000000..89e9345e94 --- /dev/null +++ b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java @@ -0,0 +1,27 @@ +package com.baeldung.aggregation.repository; + +import com.baeldung.aggregation.model.Comment; +import com.baeldung.aggregation.model.custom.CommentCount; +import com.baeldung.aggregation.model.custom.ICommentCount; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CommentRepository extends JpaRepository { + + @Query("SELECT c.year, COUNT(c.year) FROM Comment AS c GROUP BY c.year ORDER BY c.year DESC") + List countTotalCommentsByYear(); + + @Query("SELECT new com.baeldung.aggregation.model.custom.CommentCount(c.year, COUNT(c.year)) FROM Comment AS c GROUP BY c.year ORDER BY c.year DESC") + List countTotalCommentsByYearClass(); + + @Query("SELECT c.year AS yearComment, COUNT(c.year) AS totalComment FROM Comment AS c GROUP BY c.year ORDER BY c.year DESC") + List countTotalCommentsByYearInterface(); + + @Query(value = "SELECT c.year AS yearComment, COUNT(c.*) AS totalComment FROM comment AS c GROUP BY c.year ORDER BY c.year DESC", nativeQuery = true) + List countTotalCommentsByYearNative(); + +} diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java b/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java new file mode 100644 index 0000000000..779ade7a3f --- /dev/null +++ b/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java @@ -0,0 +1,107 @@ +package com.baeldung.aggregation; + +import com.baeldung.aggregation.model.custom.CommentCount; +import com.baeldung.aggregation.model.custom.ICommentCount; +import com.baeldung.aggregation.repository.CommentRepository; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(SpringRunner.class) +@DataJpaTest + +@Sql(scripts = "/test-aggregation-data.sql") +public class SpringDataAggregateIntegrationTest { + + @Autowired + private CommentRepository commentRepository; + + @Test + public void whenQueryWithAggregation_thenReturnResult() { + List commentCountsByYear = commentRepository.countTotalCommentsByYear(); + + Object[] countYear2019 = commentCountsByYear.get(0); + + assertThat(countYear2019[0], is(Integer.valueOf(2019))); + assertThat(countYear2019[1], is(1l)); + + Object[] countYear2018 = commentCountsByYear.get(1); + + assertThat(countYear2018[0], is(Integer.valueOf(2018))); + assertThat(countYear2018[1], is(2l)); + + Object[] countYear2017 = commentCountsByYear.get(2); + + assertThat(countYear2017[0], is(Integer.valueOf(2017))); + assertThat(countYear2017[1], is(1l)); + } + + @Test + public void whenQueryWithAggregation_thenReturnCustomResult() { + List commentCountsByYear = commentRepository.countTotalCommentsByYearClass(); + + CommentCount countYear2019 = commentCountsByYear.get(0); + + assertThat(countYear2019.getYear(), is(Integer.valueOf(2019))); + assertThat(countYear2019.getTotal(), is(1l)); + + CommentCount countYear2018 = commentCountsByYear.get(1); + + assertThat(countYear2018.getYear(), is(Integer.valueOf(2018))); + assertThat(countYear2018.getTotal(), is(2l)); + + CommentCount countYear2017 = commentCountsByYear.get(2); + + assertThat(countYear2017.getYear(), is(Integer.valueOf(2017))); + assertThat(countYear2017.getTotal(), is(1l)); + } + + @Test + public void whenQueryWithAggregation_thenReturnInterfaceResult() { + List commentCountsByYear = commentRepository.countTotalCommentsByYearInterface(); + + ICommentCount countYear2019 = commentCountsByYear.get(0); + + assertThat(countYear2019.getYearComment(), is(Integer.valueOf(2019))); + assertThat(countYear2019.getTotalComment(), is(1l)); + + ICommentCount countYear2018 = commentCountsByYear.get(1); + + assertThat(countYear2018.getYearComment(), is(Integer.valueOf(2018))); + assertThat(countYear2018.getTotalComment(), is(2l)); + + ICommentCount countYear2017 = commentCountsByYear.get(2); + + assertThat(countYear2017.getYearComment(), is(Integer.valueOf(2017))); + assertThat(countYear2017.getTotalComment(), is(1l)); + } + + @Test + public void whenNativeQueryWithAggregation_thenReturnInterfaceResult() { + List commentCountsByYear = commentRepository.countTotalCommentsByYearNative(); + + ICommentCount countYear2019 = commentCountsByYear.get(0); + + assertThat(countYear2019.getYearComment(), is(Integer.valueOf(2019))); + assertThat(countYear2019.getTotalComment(), is(1l)); + + ICommentCount countYear2018 = commentCountsByYear.get(1); + + assertThat(countYear2018.getYearComment(), is(Integer.valueOf(2018))); + assertThat(countYear2018.getTotalComment(), is(2l)); + + ICommentCount countYear2017 = commentCountsByYear.get(2); + + assertThat(countYear2017.getYearComment(), is(Integer.valueOf(2017))); + assertThat(countYear2017.getTotalComment(), is(1l)); + } + +} diff --git a/persistence-modules/spring-data-jpa-2/src/test/resources/test-aggregation-data.sql b/persistence-modules/spring-data-jpa-2/src/test/resources/test-aggregation-data.sql new file mode 100644 index 0000000000..12409a124e --- /dev/null +++ b/persistence-modules/spring-data-jpa-2/src/test/resources/test-aggregation-data.sql @@ -0,0 +1,7 @@ +INSERT INTO post (id, title, content) VALUES (1, 'Comment 1', 'Content 1'); +INSERT INTO post (id, title, content) VALUES (2, 'Comment 2', 'Content 2'); +INSERT INTO post (id, title, content) VALUES (3, 'Comment 3', 'Content 3'); +INSERT INTO comment (id, year, approved, content, post_id) VALUES (1, 2019, false, 'Comment 1', 1); +INSERT INTO comment (id, year, approved, content, post_id) VALUES (2, 2018, true, 'Comment 2', 1); +INSERT INTO comment (id, year, approved, content, post_id) VALUES (3, 2018, true, 'Comment 3', 2); +INSERT INTO comment (id, year, approved, content, post_id) VALUES (4, 2017, false, 'Comment 4', 3); \ No newline at end of file From ff853f6be4f279d12a8b16ecb6fcecd1875eb15e Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Wed, 30 Oct 2019 08:08:48 +0330 Subject: [PATCH 258/304] Wait a little bit longer. --- .../spring/data/redis/RedisMessageListenerIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java index b2862e26c3..6f9e6a8757 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java @@ -46,7 +46,7 @@ public class RedisMessageListenerIntegrationTest { public void testOnMessage() throws Exception { String message = "Message " + UUID.randomUUID(); redisMessagePublisher.publish(message); - Thread.sleep(100); + Thread.sleep(1000); assertTrue(RedisMessageSubscriber.messageList.get(0).contains(message)); } } \ No newline at end of file From 9acdcc5f4182725787ecefea6af987ba2555b028 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 21:46:45 +0800 Subject: [PATCH 259/304] Update README.md --- algorithms-miscellaneous-5/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-5/README.md b/algorithms-miscellaneous-5/README.md index 7a8f2e0a36..598fbab8b5 100644 --- a/algorithms-miscellaneous-5/README.md +++ b/algorithms-miscellaneous-5/README.md @@ -8,4 +8,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g. - [Converting Between Byte Arrays and Hexadecimal Strings in Java](https://www.baeldung.com/java-byte-arrays-hex-strings) - [Reversing a Binary Tree in Java](https://www.baeldung.com/java-reversing-a-binary-tree) - [Find If Two Numbers Are Relatively Prime in Java](https://www.baeldung.com/java-two-relatively-prime-numbers) +- [Knapsack Problem Implementation in Java](https://www.baeldung.com/java-knapsack) - More articles: [[<-- prev]](/../algorithms-miscellaneous-4) From b8e2d034c6108dabcabce1f833faef23a10e03f0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 21:48:57 +0800 Subject: [PATCH 260/304] Update README.md --- persistence-modules/spring-persistence-simple/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-persistence-simple/README.md b/persistence-modules/spring-persistence-simple/README.md index 8e55a59c7c..db0d0ce83c 100644 --- a/persistence-modules/spring-persistence-simple/README.md +++ b/persistence-modules/spring-persistence-simple/README.md @@ -12,6 +12,7 @@ - [Introduction to Spring Data JPA](http://www.baeldung.com/the-persistence-layer-with-spring-data-jpa) - [Spring Data JPA @Query](http://www.baeldung.com/spring-data-jpa-query) - [Spring JDBC](https://www.baeldung.com/spring-jdbc-jdbctemplate) +- [Transaction Propagation and Isolation in Spring @Transactional](https://www.baeldung.com/spring-transactional-propagation-isolation) ### Eclipse Config After importing the project into Eclipse, you may see the following error: From 66258f8f68cb5c94f3b9e617c393c7673bce2635 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 21:51:03 +0800 Subject: [PATCH 261/304] Update README.md --- patterns/design-patterns-creational/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/patterns/design-patterns-creational/README.md b/patterns/design-patterns-creational/README.md index 99b9b39787..026115a6d6 100644 --- a/patterns/design-patterns-creational/README.md +++ b/patterns/design-patterns-creational/README.md @@ -6,4 +6,5 @@ - [Double-Checked Locking with Singleton](https://www.baeldung.com/java-singleton-double-checked-locking) - [Java Constructors vs Static Factory Methods](https://www.baeldung.com/java-constructors-vs-static-factory-methods) - [Automatic Generation of the Builder Pattern with FreeBuilder](https://www.baeldung.com/java-builder-pattern-freebuilder) -- [How to Replace Many if Statements in Java](https://www.baeldung.com/java-replace-if-statements) \ No newline at end of file +- [How to Replace Many if Statements in Java](https://www.baeldung.com/java-replace-if-statements) +- [Prototype Pattern in Java](https://www.baeldung.com/java-pattern-prototype) From 24c73df5938108803e9da87a1b4c3e47b9eb01a2 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 21:52:40 +0800 Subject: [PATCH 262/304] Update README.md --- spring-cloud/spring-cloud-zuul-fallback/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud/spring-cloud-zuul-fallback/README.md b/spring-cloud/spring-cloud-zuul-fallback/README.md index 2f13c1923b..de5cfcef4b 100644 --- a/spring-cloud/spring-cloud-zuul-fallback/README.md +++ b/spring-cloud/spring-cloud-zuul-fallback/README.md @@ -1,2 +1,2 @@ ### Relevant Articles: -- [Fallback for Zuul Route](TODO) +- [Fallback for Zuul Route](https://www.baeldung.com/spring-zuul-fallback-route) From 1e9ec7d03ab2cb8b22a0d34e7d521b7808c43ca3 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 21:55:26 +0800 Subject: [PATCH 263/304] Update README.md --- core-java-modules/core-java-lang-syntax-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-syntax-2/README.md b/core-java-modules/core-java-lang-syntax-2/README.md index a3b11865af..538a29181a 100644 --- a/core-java-modules/core-java-lang-syntax-2/README.md +++ b/core-java-modules/core-java-lang-syntax-2/README.md @@ -11,4 +11,5 @@ This module contains articles about Java syntax - [Java Double Brace Initialization](https://www.baeldung.com/java-double-brace-initialization) - [The Java Native Keyword and Methods](https://www.baeldung.com/java-native) - [Variable Scope in Java](https://www.baeldung.com/java-variable-scope) +- [Java ‘protected’ Access Modifier](https://www.baeldung.com/java-protected-access-modifier) - [[<-- Prev]](/core-java-modules/core-java-lang-syntax) From b0280d5326b50b21a0cd6039cba4fd1875a68ca7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 21:58:08 +0800 Subject: [PATCH 264/304] Update README.md --- core-java-modules/core-java-arrays-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-arrays-2/README.md b/core-java-modules/core-java-arrays-2/README.md index 5fa2f2bf4c..a78b3327b6 100644 --- a/core-java-modules/core-java-arrays-2/README.md +++ b/core-java-modules/core-java-arrays-2/README.md @@ -12,4 +12,5 @@ This module contains articles about Java arrays - [Intersection Between two Integer Arrays](https://www.baeldung.com/java-array-intersection) - [Removing an Element from an Array in Java](https://www.baeldung.com/java-array-remove-element) - [Removing the First Element of an Array](https://www.baeldung.com/java-array-remove-first-element) +- [Adding an Element to a Java Array vs an ArrayList](https://www.baeldung.com/java-add-element-to-array-vs-list) - [[<-- Prev]](/core-java-modules/core-java-arrays) From 3668446122465f72cecd4fa612beac42f9d643f7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:00:58 +0800 Subject: [PATCH 265/304] Update README.md --- testing-modules/spring-testing/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/spring-testing/README.md b/testing-modules/spring-testing/README.md index 2427dfabbe..a4de9c5c57 100644 --- a/testing-modules/spring-testing/README.md +++ b/testing-modules/spring-testing/README.md @@ -7,3 +7,4 @@ - [Using SpringJUnit4ClassRunner with Parameterized](https://www.baeldung.com/springjunit4classrunner-parameterized) - [Override Properties in Spring’s Tests](https://www.baeldung.com/spring-tests-override-properties) - [A Quick Guide to @DirtiesContext](https://www.baeldung.com/spring-dirtiescontext) +- [The Spring TestExecutionListener](https://www.baeldung.com/spring-testexecutionlistener) From 0d2f5128c8847ee3695dc762fae23792bcf27329 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:03:55 +0800 Subject: [PATCH 266/304] Update README.MD --- spring-boot-di/README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-di/README.MD b/spring-boot-di/README.MD index 6e2c495b88..cbd42c5609 100644 --- a/spring-boot-di/README.MD +++ b/spring-boot-di/README.MD @@ -8,3 +8,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: - [Spring Component Scanning](https://www.baeldung.com/spring-component-scanning) +- [Spring @ComponentScan – Filter Types](https://www.baeldung.com/spring-componentscan-filter-type) From b44be5310c3c47acce70c5c1d47919471f591edc Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:05:20 +0800 Subject: [PATCH 267/304] Update README.md --- spring-integration/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-integration/README.md b/spring-integration/README.md index 2e719a8674..ad46082a04 100644 --- a/spring-integration/README.md +++ b/spring-integration/README.md @@ -7,6 +7,7 @@ This module contains articles about Spring Integration - [Security In Spring Integration](https://www.baeldung.com/spring-integration-security) - [Spring Integration Java DSL](https://www.baeldung.com/spring-integration-java-dsl) - [Using Subflows in Spring Integration](https://www.baeldung.com/spring-integration-subflows) +- [Transaction Support in Spring Integration](https://www.baeldung.com/spring-integration-transaction) ### Running the Sample Executing the `mvn exec:java` maven command (either from the command line or from an IDE) will start up the application. Follow the command prompt for further instructions. From 0362cd3fe4c2dd45ee8a0371310b223a2fac1723 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:06:32 +0800 Subject: [PATCH 268/304] Update README.md --- spring-thymeleaf-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-thymeleaf-2/README.md b/spring-thymeleaf-2/README.md index e7f0c60add..fa871465f9 100644 --- a/spring-thymeleaf-2/README.md +++ b/spring-thymeleaf-2/README.md @@ -4,3 +4,4 @@ - [Changing the Thymeleaf Template Directory in Spring Boot](https://www.baeldung.com/spring-thymeleaf-template-directory) - [Spring Request Parameters with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-request-parameters) - [Thymeleaf lists Utility Object](https://www.baeldung.com/thymeleaf-lists-utility) +- [Spring Path Variables with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-path-variables) From 9a47ef56185b3728e34fc2bca7fa54fdd1ac9d3b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:08:08 +0800 Subject: [PATCH 269/304] Update README.md --- spring-boot-configuration/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-configuration/README.md b/spring-boot-configuration/README.md index c449538a9d..af634aa5f4 100644 --- a/spring-boot-configuration/README.md +++ b/spring-boot-configuration/README.md @@ -3,3 +3,4 @@ This module contains articles about Spring Boot Configuration. ### Relevant Articles: +- [Unable to Find @SpringBootConfiguration with @DataJpaTest](https://www.baeldung.com/spring-boot-unable-to-find-springbootconfiguration-with-datajpatest) From 1783752602e94833622fd9dfdf4b7581551477c0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:10:23 +0800 Subject: [PATCH 270/304] Create README.md --- wildfly/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 wildfly/README.md diff --git a/wildfly/README.md b/wildfly/README.md new file mode 100644 index 0000000000..42d45a6618 --- /dev/null +++ b/wildfly/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +-[How to Set Up a WildFly Server](https://www.baeldung.com/wildfly-server-setup) From 9a68ef93854b7f70397e114d898cd3690ce667a6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:10:40 +0800 Subject: [PATCH 271/304] Update README.md --- wildfly/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wildfly/README.md b/wildfly/README.md index 42d45a6618..54d7d68691 100644 --- a/wildfly/README.md +++ b/wildfly/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: --[How to Set Up a WildFly Server](https://www.baeldung.com/wildfly-server-setup) +- [How to Set Up a WildFly Server](https://www.baeldung.com/wildfly-server-setup) From a26d825963e48357349ce3019b11c8538ed1dc86 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 30 Oct 2019 22:12:05 +0800 Subject: [PATCH 272/304] Update README.md --- javaxval/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javaxval/README.md b/javaxval/README.md index c2c392b276..33ce4eae5b 100644 --- a/javaxval/README.md +++ b/javaxval/README.md @@ -9,4 +9,4 @@ This module contains articles about Bean Validation. - [Difference Between @NotNull, @NotEmpty, and @NotBlank Constraints in Bean Validation](https://www.baeldung.com/java-bean-validation-not-null-empty-blank) - [Javax BigDecimal Validation](https://www.baeldung.com/javax-bigdecimal-validation) - [Grouping Javax Validation Constraints](https://www.baeldung.com/javax-validation-groups) -- [Javax Validations for Enums](https://www.baeldung.com/javax-validations-enums) +- [Validations for Enum Types](https://www.baeldung.com/javax-validations-enums) From 236261536d75c1062950d8e54fb18eda2aace176 Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Wed, 30 Oct 2019 16:51:30 +0200 Subject: [PATCH 273/304] Split or move spring-thymeleaf module --- spring-thymeleaf-2/README.md | 10 ++++++++ spring-thymeleaf-2/pom.xml | 22 ++++++++++++++++++ .../arrays}/ThymeleafArrayController.java | 2 +- .../BooleanExpressionsController.java | 2 +- .../thymeleaf/customhtml}/Course.java | 2 +- .../CourseRegistrationController.java | 8 +++---- .../ParticipantController.java | 2 +- .../main/resources/templates}/booleans.html | 0 .../main/resources/templates/continents.html | 0 .../templates}/courseRegistration.html | 0 spring-thymeleaf/.gitignore | 1 - spring-thymeleaf/README.md | 6 ----- spring-thymeleaf/pom.xml | 21 ----------------- ...rkingWithArraysInThymeleafApplication.java | 12 ---------- .../src/main/webapp/WEB-INF/views/home.html | 3 --- .../SpringContextIntegrationTest.java | 13 +++++------ .../thymeleaf}/SpringContextTest.java | 13 +++++------ .../csrf/CsrfEnabledIntegrationTest.java | 23 +++++++++---------- 18 files changed, 62 insertions(+), 78 deletions(-) rename {spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller => spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/arrays}/ThymeleafArrayController.java (92%) rename {spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller => spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/booleanexpressions}/BooleanExpressionsController.java (96%) rename {spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model => spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml}/Course.java (95%) rename {spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller => spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml}/CourseRegistrationController.java (83%) rename spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/{controller => requestparameters}/ParticipantController.java (94%) rename {spring-thymeleaf/src/main/webapp/WEB-INF/views => spring-thymeleaf-2/src/main/resources/templates}/booleans.html (100%) rename {spring-thymeleaf => spring-thymeleaf-2}/src/main/resources/templates/continents.html (100%) rename {spring-thymeleaf/src/main/webapp/WEB-INF/views => spring-thymeleaf-2/src/main/resources/templates}/courseRegistration.html (100%) delete mode 100644 spring-thymeleaf/.gitignore delete mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java rename spring-thymeleaf/src/test/java/{org/baeldung => com/baeldung/thymeleaf}/SpringContextIntegrationTest.java (95%) rename spring-thymeleaf/src/test/java/{org/baeldung => com/baeldung/thymeleaf}/SpringContextTest.java (95%) rename spring-thymeleaf/src/test/java/{org/baeldung => com/baeldung/thymeleaf}/security/csrf/CsrfEnabledIntegrationTest.java (98%) diff --git a/spring-thymeleaf-2/README.md b/spring-thymeleaf-2/README.md index e7f0c60add..9f727f30ca 100644 --- a/spring-thymeleaf-2/README.md +++ b/spring-thymeleaf-2/README.md @@ -1,6 +1,16 @@ +## Spring Thymeleaf + +This module contains articles about Spring with Thymeleaf + ## Relevant Articles: - [Working with Enums in Thymeleaf](https://www.baeldung.com/thymeleaf-enums) - [Changing the Thymeleaf Template Directory in Spring Boot](https://www.baeldung.com/spring-thymeleaf-template-directory) - [Spring Request Parameters with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-request-parameters) - [Thymeleaf lists Utility Object](https://www.baeldung.com/thymeleaf-lists-utility) +- [Working with Arrays in Thymeleaf](https://www.baeldung.com/thymeleaf-arrays) +- [Spring Path Variables with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-path-variables) +- [Working with Boolean in Thymeleaf](https://www.baeldung.com/thymeleaf-boolean) +- [Working With Custom HTML Attributes in Thymeleaf](https://www.baeldung.com/thymeleaf-custom-html-attributes) +- [How to Create an Executable JAR with Maven](https://www.baeldung.com/executable-jar-with-maven) +- [[<-- prev]](/spring-thymeleaf) \ No newline at end of file diff --git a/spring-thymeleaf-2/pom.xml b/spring-thymeleaf-2/pom.xml index d31e5fa7f6..d53bb8ab1a 100644 --- a/spring-thymeleaf-2/pom.xml +++ b/spring-thymeleaf-2/pom.xml @@ -35,6 +35,27 @@ org.apache.maven.plugins maven-war-plugin + + + org.apache.tomcat.maven + tomcat7-maven-plugin + ${tomcat7-maven-plugin.version} + + + tomcat-run + + exec-war-only + + package + + / + false + webapp.jar + utf-8 + + + + spring-thymeleaf-2 @@ -42,5 +63,6 @@ 1.8 1.8 + 2.2 diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/arrays/ThymeleafArrayController.java similarity index 92% rename from spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java rename to spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/arrays/ThymeleafArrayController.java index 8276cc4376..d137cbdf94 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java +++ b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/arrays/ThymeleafArrayController.java @@ -1,4 +1,4 @@ -package com.baeldung.thymeleaf.controller; +package com.baeldung.thymeleaf.arrays; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/BooleanExpressionsController.java b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/booleanexpressions/BooleanExpressionsController.java similarity index 96% rename from spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/BooleanExpressionsController.java rename to spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/booleanexpressions/BooleanExpressionsController.java index 3a640e1499..e43e08334a 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/BooleanExpressionsController.java +++ b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/booleanexpressions/BooleanExpressionsController.java @@ -1,4 +1,4 @@ -package com.baeldung.thymeleaf.controller; +package com.baeldung.thymeleaf.booleanexpressions; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Course.java b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml/Course.java similarity index 95% rename from spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Course.java rename to spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml/Course.java index df2e9cd097..9bf8e5e52c 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Course.java +++ b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml/Course.java @@ -1,4 +1,4 @@ -package com.baeldung.thymeleaf.model; +package com.baeldung.thymeleaf.customhtml; import java.util.Date; diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/CourseRegistrationController.java b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml/CourseRegistrationController.java similarity index 83% rename from spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/CourseRegistrationController.java rename to spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml/CourseRegistrationController.java index 2d2b5906e1..06e81ecba8 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/CourseRegistrationController.java +++ b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/customhtml/CourseRegistrationController.java @@ -1,4 +1,4 @@ -package com.baeldung.thymeleaf.controller; +package com.baeldung.thymeleaf.customhtml; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -6,8 +6,6 @@ import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import com.baeldung.thymeleaf.model.Course; - /** * Handles requests for the student model. * @@ -18,13 +16,13 @@ public class CourseRegistrationController { @RequestMapping(value = "/registerCourse", method = RequestMethod.POST) public String register(@ModelAttribute Course course, Model model) { model.addAttribute("successMessage", "You have successfully registered for course: " + course.getName() + "."); - return "courseRegistration.html"; + return "templates/courseRegistration.html"; } @RequestMapping(value = "/registerCourse", method = RequestMethod.GET) public String register(Model model) { model.addAttribute("course", new Course()); - return "courseRegistration.html"; + return "templates/courseRegistration.html"; } } diff --git a/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/requestparameters/ParticipantController.java similarity index 94% rename from spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java rename to spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/requestparameters/ParticipantController.java index 9a354e709c..faa4ae0cf9 100644 --- a/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java +++ b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/requestparameters/ParticipantController.java @@ -1,4 +1,4 @@ -package com.baeldung.thymeleaf.controller; +package com.baeldung.thymeleaf.requestparameters; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/booleans.html b/spring-thymeleaf-2/src/main/resources/templates/booleans.html similarity index 100% rename from spring-thymeleaf/src/main/webapp/WEB-INF/views/booleans.html rename to spring-thymeleaf-2/src/main/resources/templates/booleans.html diff --git a/spring-thymeleaf/src/main/resources/templates/continents.html b/spring-thymeleaf-2/src/main/resources/templates/continents.html similarity index 100% rename from spring-thymeleaf/src/main/resources/templates/continents.html rename to spring-thymeleaf-2/src/main/resources/templates/continents.html diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/courseRegistration.html b/spring-thymeleaf-2/src/main/resources/templates/courseRegistration.html similarity index 100% rename from spring-thymeleaf/src/main/webapp/WEB-INF/views/courseRegistration.html rename to spring-thymeleaf-2/src/main/resources/templates/courseRegistration.html diff --git a/spring-thymeleaf/.gitignore b/spring-thymeleaf/.gitignore deleted file mode 100644 index b83d22266a..0000000000 --- a/spring-thymeleaf/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/spring-thymeleaf/README.md b/spring-thymeleaf/README.md index 329ef8580c..a5c6791609 100644 --- a/spring-thymeleaf/README.md +++ b/spring-thymeleaf/README.md @@ -9,16 +9,11 @@ This module contains articles about Spring with Thymeleaf - [Spring and Thymeleaf 3: Expressions](https://www.baeldung.com/spring-thymeleaf-3-expressions) - [Spring MVC + Thymeleaf 3.0: New Features](https://www.baeldung.com/spring-thymeleaf-3) - [How to Work with Dates in Thymeleaf](https://www.baeldung.com/dates-in-thymeleaf) -- [How to Create an Executable JAR with Maven](https://www.baeldung.com/executable-jar-with-maven) -- [Working with Boolean in Thymeleaf](https://www.baeldung.com/thymeleaf-boolean) - [Working with Fragments in Thymeleaf](https://www.baeldung.com/spring-thymeleaf-fragments) - [Conditionals in Thymeleaf](https://www.baeldung.com/spring-thymeleaf-conditionals) - [Iteration in Thymeleaf](https://www.baeldung.com/thymeleaf-iteration) -- [Working With Arrays in Thymeleaf](https://www.baeldung.com/thymeleaf-arrays) - [Spring with Thymeleaf Pagination for a List](https://www.baeldung.com/spring-thymeleaf-pagination) - [Working with Select and Option in Thymeleaf](https://www.baeldung.com/thymeleaf-select-option) -- [Working With Custom HTML Attributes in Thymeleaf](https://www.baeldung.com/thymeleaf-custom-html-attributes) -- [Spring Request Parameters with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-request-parameters) - [[next -->]](/spring-thymeleaf-2) ### Build the Project @@ -35,7 +30,6 @@ Access the pages using the URLs: - http://localhost:8082/spring-thymeleaf/ - http://localhost:8082/spring-thymeleaf/addStudent/ - http://localhost:8082/spring-thymeleaf/listStudents/ - - http://localhost:8082/spring-thymeleaf/booleans/ The first URL is the home page of the application. The home page has links to the second and third pages. diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index cdc2ed25ae..d260a78d76 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -141,26 +141,6 @@ - - org.apache.tomcat.maven - tomcat7-maven-plugin - ${tomcat7-maven-plugin.version} - - - tomcat-run - - exec-war-only - - package - - / - false - webapp.jar - utf-8 - - - - @@ -174,7 +154,6 @@ 1.6.1 - 2.2 diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java deleted file mode 100644 index bce0660fda..0000000000 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -// package com.baeldung.thymeleaf; - -// import org.springframework.boot.SpringApplication; -// import org.springframework.boot.autoconfigure.SpringBootApplication; - -// @SpringBootApplication -// public class WorkingWithArraysInThymeleafApplication { - -// public static void main(String[] args) { -// SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); -// } -// } diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/home.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/home.html index 25ff6a19bb..b458f7270c 100644 --- a/spring-thymeleaf/src/main/webapp/WEB-INF/views/home.html +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/home.html @@ -24,9 +24,6 @@ - - - diff --git a/spring-thymeleaf/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/SpringContextIntegrationTest.java similarity index 95% rename from spring-thymeleaf/src/test/java/org/baeldung/SpringContextIntegrationTest.java rename to spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/SpringContextIntegrationTest.java index c7a0b4fc60..9a066b3101 100644 --- a/spring-thymeleaf/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/SpringContextIntegrationTest.java @@ -1,15 +1,14 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; +package com.baeldung.thymeleaf; import com.baeldung.thymeleaf.config.InitSecurity; import com.baeldung.thymeleaf.config.WebApp; import com.baeldung.thymeleaf.config.WebMVCConfig; import com.baeldung.thymeleaf.config.WebMVCSecurity; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration diff --git a/spring-thymeleaf/src/test/java/org/baeldung/SpringContextTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/SpringContextTest.java similarity index 95% rename from spring-thymeleaf/src/test/java/org/baeldung/SpringContextTest.java rename to spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/SpringContextTest.java index 1ff1c52c68..cbd3f85b48 100644 --- a/spring-thymeleaf/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/SpringContextTest.java @@ -1,15 +1,14 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; +package com.baeldung.thymeleaf; import com.baeldung.thymeleaf.config.InitSecurity; import com.baeldung.thymeleaf.config.WebApp; import com.baeldung.thymeleaf.config.WebMVCConfig; import com.baeldung.thymeleaf.config.WebMVCSecurity; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration diff --git a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/security/csrf/CsrfEnabledIntegrationTest.java similarity index 98% rename from spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java rename to spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/security/csrf/CsrfEnabledIntegrationTest.java index 4f6480e3b2..a7c9fb4ae4 100644 --- a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/security/csrf/CsrfEnabledIntegrationTest.java @@ -1,12 +1,9 @@ -package org.baeldung.security.csrf; - -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import javax.servlet.Filter; +package com.baeldung.thymeleaf.security.csrf; +import com.baeldung.thymeleaf.config.InitSecurity; +import com.baeldung.thymeleaf.config.WebApp; +import com.baeldung.thymeleaf.config.WebMVCConfig; +import com.baeldung.thymeleaf.config.WebMVCSecurity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,10 +18,12 @@ import org.springframework.test.web.servlet.request.RequestPostProcessor; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import com.baeldung.thymeleaf.config.InitSecurity; -import com.baeldung.thymeleaf.config.WebApp; -import com.baeldung.thymeleaf.config.WebMVCConfig; -import com.baeldung.thymeleaf.config.WebMVCSecurity; +import javax.servlet.Filter; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration From ba50a42d437290dc0453c9d7f11a755c947c1b04 Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Tue, 29 Oct 2019 14:54:28 +0200 Subject: [PATCH 274/304] Move articles out of java-strings part4 --- .../core-java-string-operations-2/README.md | 11 ++ .../core-java-string-operations-2/pom.xml | 81 +++++++++ .../emptystrings/EmptyStringCheck.java | 2 +- .../emptystrings/Java5EmptyStringCheck.java | 2 +- .../PlainJavaBlankStringCheck.java | 2 +- .../SomeClassWithValidations.java | 2 +- .../changecase/ToLowerCaseUnitTest.java | 58 +++---- .../changecase/ToUpperCaseUnitTest.java | 58 +++---- .../emptystrings/EmptyStringsUnitTest.java | 18 +- .../StringEqualsIgnoreCaseUnitTest.java | 2 +- .../StringInitializationUnitTest.java | 6 +- .../StringConcatenationUnitTest.java | 2 +- .../core-java-string-operations/README.md | 16 ++ .../core-java-string-operations/pom.xml | 66 +++++++ .../com/baeldung}/isnumeric/Benchmarking.java | 2 +- .../isnumeric/CheckIntegerInput.java | 2 +- .../com/baeldung}/isnumeric/IsNumeric.java | 2 +- .../baeldung}/isnumeric/IsNumericDriver.java | 2 +- .../newline/AddingNewLineToString.java | 2 +- .../streamoperations}/JoinerSplitter.java | 2 +- .../SubstringSearchPerformanceComparison.java | 15 +- .../java/com/baeldung}/tostring/Customer.java | 2 +- .../tostring/CustomerArrayToString.java | 2 +- .../CustomerComplexObjectToString.java | 2 +- .../tostring/CustomerPrimitiveToString.java | 2 +- .../tostring/CustomerReflectionToString.java | 2 +- .../CustomerWrapperCollectionToString.java | 2 +- .../java/com/baeldung}/tostring/Order.java | 2 +- .../src/main/resources/log4j.properties | 8 + .../ApacheCommonsEncodeDecodeUnitTest.java | 0 .../Java8EncodeDecodeUnitTest.java | 0 .../StringToByteArrayUnitTest.java | 9 +- .../isnumeric/CoreJavaIsNumericUnitTest.java | 2 +- .../NumberUtilsIsCreatableUnitTest.java | 2 +- .../NumberUtilsIsParsableUnitTest.java | 2 +- .../isnumeric/RegularExpressionsUnitTest.java | 2 +- .../StringUtilsIsNumericSpaceUnitTest.java | 2 +- .../StringUtilsIsNumericUnitTest.java | 2 +- .../com/baeldung/split}/SplitUnitTest.java | 2 +- .../JoinerSplitterUnitTest.java | 2 +- .../StringComparisonUnitTest.java | 2 +- .../substring}/SubstringUnitTest.java | 2 +- .../SubstringSearchUnitTest.java | 8 +- .../CustomerArrayToStringUnitTest.java | 2 +- ...CustomerComplexObjectToStringUnitTest.java | 2 +- .../CustomerPrimitiveToStringUnitTest.java | 2 +- ...omerWrapperCollectionToStringUnitTest.java | 2 +- java-strings-2/README.md | 8 +- java-strings-3/README.md | 10 -- java-strings-3/pom.xml | 161 ------------------ java-strings-3/src/main/resources/.gitignore | 13 -- java-strings-3/src/test/resources/.gitignore | 13 -- java-strings-ops/README.md | 6 - java-strings/README.md | 2 - pom.xml | 6 +- 55 files changed, 299 insertions(+), 340 deletions(-) create mode 100644 core-java-modules/core-java-string-operations-2/README.md create mode 100644 core-java-modules/core-java-string-operations-2/pom.xml rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung}/emptystrings/EmptyStringCheck.java (75%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung}/emptystrings/Java5EmptyStringCheck.java (76%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung}/emptystrings/PlainJavaBlankStringCheck.java (77%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung}/emptystrings/SomeClassWithValidations.java (87%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung}/changecase/ToLowerCaseUnitTest.java (91%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung}/changecase/ToUpperCaseUnitTest.java (91%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung}/emptystrings/EmptyStringsUnitTest.java (96%) rename {java-strings-3/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung}/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java (94%) rename {java-strings-2 => core-java-modules/core-java-string-operations-2}/src/test/java/com/baeldung/initialization/StringInitializationUnitTest.java (91%) rename {java-strings-2/src/test/java/com/baeldung => core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/stringconcatenation}/StringConcatenationUnitTest.java (98%) create mode 100644 core-java-modules/core-java-string-operations/README.md create mode 100644 core-java-modules/core-java-string-operations/pom.xml rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/isnumeric/Benchmarking.java (98%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/isnumeric/CheckIntegerInput.java (92%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/isnumeric/IsNumeric.java (96%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/isnumeric/IsNumericDriver.java (96%) rename {java-strings/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/newline/AddingNewLineToString.java (98%) rename {java-strings/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung/streamoperations}/JoinerSplitter.java (96%) rename {java-strings-2/src/main/java/com/baeldung/string/search/performance => core-java-modules/core-java-string-operations/src/main/java/com/baeldung/substringsearch}/SubstringSearchPerformanceComparison.java (79%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/tostring/Customer.java (91%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/tostring/CustomerArrayToString.java (92%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/tostring/CustomerComplexObjectToString.java (91%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/tostring/CustomerPrimitiveToString.java (91%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/tostring/CustomerReflectionToString.java (95%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/tostring/CustomerWrapperCollectionToString.java (95%) rename {java-strings-ops/src/main/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/main/java/com/baeldung}/tostring/Order.java (95%) create mode 100644 core-java-modules/core-java-string-operations/src/main/resources/log4j.properties rename {java-strings-2 => core-java-modules/core-java-string-operations}/src/test/java/com/baeldung/base64encodinganddecoding/ApacheCommonsEncodeDecodeUnitTest.java (100%) rename {java-strings-2 => core-java-modules/core-java-string-operations}/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java (100%) rename {java-strings-2 => core-java-modules/core-java-string-operations}/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java (99%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/isnumeric/CoreJavaIsNumericUnitTest.java (95%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/isnumeric/NumberUtilsIsCreatableUnitTest.java (96%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/isnumeric/NumberUtilsIsParsableUnitTest.java (96%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/isnumeric/RegularExpressionsUnitTest.java (93%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/isnumeric/StringUtilsIsNumericSpaceUnitTest.java (95%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/isnumeric/StringUtilsIsNumericUnitTest.java (95%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung/split}/SplitUnitTest.java (98%) rename {java-strings/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung/streamoperations}/JoinerSplitterUnitTest.java (98%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung/stringcomparison}/StringComparisonUnitTest.java (99%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substring}/SubstringUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string/search => core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substringsearch}/SubstringSearchUnitTest.java (98%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/tostring/CustomerArrayToStringUnitTest.java (95%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/tostring/CustomerComplexObjectToStringUnitTest.java (95%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/tostring/CustomerPrimitiveToStringUnitTest.java (94%) rename {java-strings-ops/src/test/java/com/baeldung/string => core-java-modules/core-java-string-operations/src/test/java/com/baeldung}/tostring/CustomerWrapperCollectionToStringUnitTest.java (96%) delete mode 100644 java-strings-3/README.md delete mode 100644 java-strings-3/pom.xml delete mode 100644 java-strings-3/src/main/resources/.gitignore delete mode 100644 java-strings-3/src/test/resources/.gitignore diff --git a/core-java-modules/core-java-string-operations-2/README.md b/core-java-modules/core-java-string-operations-2/README.md new file mode 100644 index 0000000000..50f40ac2af --- /dev/null +++ b/core-java-modules/core-java-string-operations-2/README.md @@ -0,0 +1,11 @@ +## Java String Operations + +This module contains articles about string operations. + +### Relevant Articles: +- [Concatenating Strings In Java](https://www.baeldung.com/java-strings-concatenation) +- [Checking for Empty or Blank Strings in Java](https://www.baeldung.com/java-blank-empty-strings) +- [String Initialization in Java](https://www.baeldung.com/java-string-initialization) +- [String toLowerCase and toUpperCase Methods in Java](https://www.baeldung.com/java-string-convert-case) +- [Java String equalsIgnoreCase()](https://www.baeldung.com/java-string-equalsignorecase) +- More articles: [[<-- prev]](../core-java-string-operations) diff --git a/core-java-modules/core-java-string-operations-2/pom.xml b/core-java-modules/core-java-string-operations-2/pom.xml new file mode 100644 index 0000000000..95aeec8fcb --- /dev/null +++ b/core-java-modules/core-java-string-operations-2/pom.xml @@ -0,0 +1,81 @@ + + 4.0.0 + core-java-string-operations-2 + 0.1.0-SNAPSHOT + jar + core-java-string-operations-2 + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + javax.validation + validation-api + ${validation-api.version} + + + com.google.guava + guava + ${guava.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.hibernate.validator + hibernate-validator + ${hibernate-validator.version} + + + javax.el + javax.el-api + ${javax.el-api.version} + + + org.glassfish.web + javax.el + ${javax.el.version} + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + core-java-string-operations-2 + + + src/main/resources + true + + + + + + 3.6.1 + 2.0.0.Final + 3.8.1 + 27.0.1-jre + 6.0.2.Final + 3.0.0 + 2.2.6 + + + diff --git a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/EmptyStringCheck.java b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/EmptyStringCheck.java similarity index 75% rename from java-strings-2/src/main/java/com/baeldung/string/emptystrings/EmptyStringCheck.java rename to core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/EmptyStringCheck.java index 6d3234a4ec..85689eff99 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/EmptyStringCheck.java +++ b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/EmptyStringCheck.java @@ -1,4 +1,4 @@ -package com.baeldung.string.emptystrings; +package com.baeldung.emptystrings; class EmptyStringCheck { diff --git a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/Java5EmptyStringCheck.java b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/Java5EmptyStringCheck.java similarity index 76% rename from java-strings-2/src/main/java/com/baeldung/string/emptystrings/Java5EmptyStringCheck.java rename to core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/Java5EmptyStringCheck.java index 096b83acea..0c7997c075 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/Java5EmptyStringCheck.java +++ b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/Java5EmptyStringCheck.java @@ -1,4 +1,4 @@ -package com.baeldung.string.emptystrings; +package com.baeldung.emptystrings; class Java5EmptyStringCheck { diff --git a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/PlainJavaBlankStringCheck.java b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/PlainJavaBlankStringCheck.java similarity index 77% rename from java-strings-2/src/main/java/com/baeldung/string/emptystrings/PlainJavaBlankStringCheck.java rename to core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/PlainJavaBlankStringCheck.java index 26e281c9b7..315ce4613a 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/PlainJavaBlankStringCheck.java +++ b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/PlainJavaBlankStringCheck.java @@ -1,4 +1,4 @@ -package com.baeldung.string.emptystrings; +package com.baeldung.emptystrings; class PlainJavaBlankStringCheck { diff --git a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/SomeClassWithValidations.java b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/SomeClassWithValidations.java similarity index 87% rename from java-strings-2/src/main/java/com/baeldung/string/emptystrings/SomeClassWithValidations.java rename to core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/SomeClassWithValidations.java index 8c484efb43..058d53ba82 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/emptystrings/SomeClassWithValidations.java +++ b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/emptystrings/SomeClassWithValidations.java @@ -1,4 +1,4 @@ -package com.baeldung.string.emptystrings; +package com.baeldung.emptystrings; import javax.validation.constraints.Pattern; diff --git a/java-strings-2/src/test/java/com/baeldung/string/changecase/ToLowerCaseUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/changecase/ToLowerCaseUnitTest.java similarity index 91% rename from java-strings-2/src/test/java/com/baeldung/string/changecase/ToLowerCaseUnitTest.java rename to core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/changecase/ToLowerCaseUnitTest.java index c395b61068..4826ba2ef7 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/changecase/ToLowerCaseUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/changecase/ToLowerCaseUnitTest.java @@ -1,29 +1,29 @@ -package com.baeldung.string.changecase; - -import static org.junit.Assert.assertEquals; - -import java.util.Locale; - -import org.junit.Test; - -public class ToLowerCaseUnitTest { - - private static final Locale TURKISH = new Locale("tr"); - private String name = "John Doe"; - private String foreignUppercase = "\u0049"; - - @Test - public void givenMixedCaseString_WhenToLowerCase_ThenResultIsLowerCase() { - assertEquals("john doe", name.toLowerCase()); - } - - @Test - public void givenForeignString_WhenToLowerCaseWithoutLocale_ThenResultIsLowerCase() { - assertEquals("\u0069", foreignUppercase.toLowerCase()); - } - - @Test - public void givenForeignString_WhenToLowerCaseWithLocale_ThenResultIsLowerCase() { - assertEquals("\u0131", foreignUppercase.toLowerCase(TURKISH)); - } -} +package com.baeldung.changecase; + +import org.junit.Test; + +import java.util.Locale; + +import static org.junit.Assert.assertEquals; + +public class ToLowerCaseUnitTest { + + private static final Locale TURKISH = new Locale("tr"); + private String name = "John Doe"; + private String foreignUppercase = "\u0049"; + + @Test + public void givenMixedCaseString_WhenToLowerCase_ThenResultIsLowerCase() { + assertEquals("john doe", name.toLowerCase()); + } + + @Test + public void givenForeignString_WhenToLowerCaseWithoutLocale_ThenResultIsLowerCase() { + assertEquals("\u0069", foreignUppercase.toLowerCase()); + } + + @Test + public void givenForeignString_WhenToLowerCaseWithLocale_ThenResultIsLowerCase() { + assertEquals("\u0131", foreignUppercase.toLowerCase(TURKISH)); + } +} diff --git a/java-strings-2/src/test/java/com/baeldung/string/changecase/ToUpperCaseUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/changecase/ToUpperCaseUnitTest.java similarity index 91% rename from java-strings-2/src/test/java/com/baeldung/string/changecase/ToUpperCaseUnitTest.java rename to core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/changecase/ToUpperCaseUnitTest.java index 1807f854b2..ab740f19b1 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/changecase/ToUpperCaseUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/changecase/ToUpperCaseUnitTest.java @@ -1,29 +1,29 @@ -package com.baeldung.string.changecase; - -import static org.junit.Assert.assertEquals; - -import java.util.Locale; - -import org.junit.Test; - -public class ToUpperCaseUnitTest { - - private static final Locale TURKISH = new Locale("tr"); - private String name = "John Doe"; - private String foreignLowercase = "\u0069"; - - @Test - public void givenMixedCaseString_WhenToUpperCase_ThenResultIsUpperCase() { - assertEquals("JOHN DOE", name.toUpperCase()); - } - - @Test - public void givenForeignString_WhenToUpperCaseWithoutLocale_ThenResultIsUpperCase() { - assertEquals("\u0049", foreignLowercase.toUpperCase()); - } - - @Test - public void givenForeignString_WhenToUpperCaseWithLocale_ThenResultIsUpperCase() { - assertEquals("\u0130", foreignLowercase.toUpperCase(TURKISH)); - } -} +package com.baeldung.changecase; + +import org.junit.Test; + +import java.util.Locale; + +import static org.junit.Assert.assertEquals; + +public class ToUpperCaseUnitTest { + + private static final Locale TURKISH = new Locale("tr"); + private String name = "John Doe"; + private String foreignLowercase = "\u0069"; + + @Test + public void givenMixedCaseString_WhenToUpperCase_ThenResultIsUpperCase() { + assertEquals("JOHN DOE", name.toUpperCase()); + } + + @Test + public void givenForeignString_WhenToUpperCaseWithoutLocale_ThenResultIsUpperCase() { + assertEquals("\u0049", foreignLowercase.toUpperCase()); + } + + @Test + public void givenForeignString_WhenToUpperCaseWithLocale_ThenResultIsUpperCase() { + assertEquals("\u0130", foreignLowercase.toUpperCase(TURKISH)); + } +} diff --git a/java-strings-2/src/test/java/com/baeldung/string/emptystrings/EmptyStringsUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/emptystrings/EmptyStringsUnitTest.java similarity index 96% rename from java-strings-2/src/test/java/com/baeldung/string/emptystrings/EmptyStringsUnitTest.java rename to core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/emptystrings/EmptyStringsUnitTest.java index 96b1d681dd..d772c38341 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/emptystrings/EmptyStringsUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/emptystrings/EmptyStringsUnitTest.java @@ -1,21 +1,17 @@ -package com.baeldung.string.emptystrings; +package com.baeldung.emptystrings; -import static org.hamcrest.Matchers.iterableWithSize; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -import java.util.Set; +import com.google.common.base.Strings; +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; +import java.util.Set; -import org.apache.commons.lang3.StringUtils; -import org.junit.Test; - -import com.google.common.base.Strings; +import static org.hamcrest.Matchers.iterableWithSize; +import static org.junit.Assert.*; public class EmptyStringsUnitTest { diff --git a/java-strings-3/src/test/java/com/baeldung/string/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java similarity index 94% rename from java-strings-3/src/test/java/com/baeldung/string/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java rename to core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java index 5aab63db94..14fbf20c1d 100644 --- a/java-strings-3/src/test/java/com/baeldung/string/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.equalsIgnoreCase; +package com.baeldung.equalsIgnoreCase; import org.apache.commons.lang3.StringUtils; import org.junit.Test; diff --git a/java-strings-2/src/test/java/com/baeldung/initialization/StringInitializationUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/initialization/StringInitializationUnitTest.java similarity index 91% rename from java-strings-2/src/test/java/com/baeldung/initialization/StringInitializationUnitTest.java rename to core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/initialization/StringInitializationUnitTest.java index 50d9a2b058..02beaa690a 100644 --- a/java-strings-2/src/test/java/com/baeldung/initialization/StringInitializationUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/initialization/StringInitializationUnitTest.java @@ -1,11 +1,9 @@ package com.baeldung.initialization; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; - import org.junit.Test; +import static org.junit.Assert.*; + public class StringInitializationUnitTest { private String fieldString; diff --git a/java-strings-2/src/test/java/com/baeldung/StringConcatenationUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/stringconcatenation/StringConcatenationUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/StringConcatenationUnitTest.java rename to core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/stringconcatenation/StringConcatenationUnitTest.java index c25d4ce8f9..9a444e8229 100644 --- a/java-strings-2/src/test/java/com/baeldung/StringConcatenationUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/stringconcatenation/StringConcatenationUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.stringconcatenation; import org.junit.Test; diff --git a/core-java-modules/core-java-string-operations/README.md b/core-java-modules/core-java-string-operations/README.md new file mode 100644 index 0000000000..18a2649a6a --- /dev/null +++ b/core-java-modules/core-java-string-operations/README.md @@ -0,0 +1,16 @@ +## Java String Operations + +This module contains articles about string operations. + +### Relevant Articles: +- [Comparing Strings in Java](https://www.baeldung.com/java-compare-strings) +- [Check If a String Is Numeric in Java](https://www.baeldung.com/java-check-string-number) +- [Get Substring from String in Java](https://www.baeldung.com/java-substring) +- [Split a String in Java](https://www.baeldung.com/java-split-string) +- [Common String Operations in Java](https://www.baeldung.com/java-string-operations) +- [Java toString() Method](https://www.baeldung.com/java-tostring) +- [String Operations with Java Streams](https://www.baeldung.com/java-stream-operations-on-strings) +- [Adding a Newline Character to a String in Java](https://www.baeldung.com/java-string-newline) +- [Check If a String Contains a Substring](https://www.baeldung.com/java-string-contains-substring) +- [Java Base64 Encoding and Decoding](https://www.baeldung.com/java-base64-encode-and-decode) +- More articles: [[next -->]](../core-java-string-operations-2) diff --git a/core-java-modules/core-java-string-operations/pom.xml b/core-java-modules/core-java-string-operations/pom.xml new file mode 100644 index 0000000000..fdddd99433 --- /dev/null +++ b/core-java-modules/core-java-string-operations/pom.xml @@ -0,0 +1,66 @@ + + 4.0.0 + core-java-string-operations + 0.1.0-SNAPSHOT + jar + core-java-string-operations + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + log4j + log4j + ${log4j.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + core-java-string-operations + + + src/main/resources + true + + + + + + 3.8.1 + 3.6.1 + 1.10 + + + diff --git a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/Benchmarking.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/Benchmarking.java similarity index 98% rename from java-strings-ops/src/main/java/com/baeldung/string/isnumeric/Benchmarking.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/Benchmarking.java index c4e2742da6..97e7a46757 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/Benchmarking.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/Benchmarking.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import java.util.concurrent.TimeUnit; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/CheckIntegerInput.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/CheckIntegerInput.java similarity index 92% rename from java-strings-ops/src/main/java/com/baeldung/string/isnumeric/CheckIntegerInput.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/CheckIntegerInput.java index 2785df0c9b..6c08615c74 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/CheckIntegerInput.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/CheckIntegerInput.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import java.util.Scanner; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/IsNumeric.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/IsNumeric.java similarity index 96% rename from java-strings-ops/src/main/java/com/baeldung/string/isnumeric/IsNumeric.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/IsNumeric.java index 508cedd168..6eed0d777d 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/IsNumeric.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/IsNumeric.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/IsNumericDriver.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/IsNumericDriver.java similarity index 96% rename from java-strings-ops/src/main/java/com/baeldung/string/isnumeric/IsNumericDriver.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/IsNumericDriver.java index bb3c96c06e..a6c5449696 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/isnumeric/IsNumericDriver.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/isnumeric/IsNumericDriver.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import org.apache.log4j.Logger; diff --git a/java-strings/src/main/java/com/baeldung/string/newline/AddingNewLineToString.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/newline/AddingNewLineToString.java similarity index 98% rename from java-strings/src/main/java/com/baeldung/string/newline/AddingNewLineToString.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/newline/AddingNewLineToString.java index 48b71eed12..f701ab2e45 100644 --- a/java-strings/src/main/java/com/baeldung/string/newline/AddingNewLineToString.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/newline/AddingNewLineToString.java @@ -1,4 +1,4 @@ -package com.baeldung.string.newline; +package com.baeldung.newline; public class AddingNewLineToString { diff --git a/java-strings/src/main/java/com/baeldung/string/JoinerSplitter.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/streamoperations/JoinerSplitter.java similarity index 96% rename from java-strings/src/main/java/com/baeldung/string/JoinerSplitter.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/streamoperations/JoinerSplitter.java index cdbba1ef53..8a105188ad 100644 --- a/java-strings/src/main/java/com/baeldung/string/JoinerSplitter.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/streamoperations/JoinerSplitter.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.streamoperations; import java.util.Arrays; import java.util.List; diff --git a/java-strings-2/src/main/java/com/baeldung/string/search/performance/SubstringSearchPerformanceComparison.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/substringsearch/SubstringSearchPerformanceComparison.java similarity index 79% rename from java-strings-2/src/main/java/com/baeldung/string/search/performance/SubstringSearchPerformanceComparison.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/substringsearch/SubstringSearchPerformanceComparison.java index bf33c47a7e..92aef0b879 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/search/performance/SubstringSearchPerformanceComparison.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/substringsearch/SubstringSearchPerformanceComparison.java @@ -1,18 +1,11 @@ -package com.baeldung.string.search.performance; +package com.baeldung.substringsearch; + +import org.apache.commons.lang3.StringUtils; +import org.openjdk.jmh.annotations.*; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; -import org.apache.commons.lang3.StringUtils; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; - /** * Based on https://github.com/tedyoung/indexof-contains-benchmark */ diff --git a/java-strings-ops/src/main/java/com/baeldung/string/tostring/Customer.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/Customer.java similarity index 91% rename from java-strings-ops/src/main/java/com/baeldung/string/tostring/Customer.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/Customer.java index 7ab3936cb9..16e2b05a7c 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/tostring/Customer.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/Customer.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; public class Customer { private String firstName; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerArrayToString.java similarity index 92% rename from java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerArrayToString.java index 391ced61d3..c942f978da 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerArrayToString.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; import java.util.Arrays; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerComplexObjectToString.java similarity index 91% rename from java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerComplexObjectToString.java index ae3d999b12..3ca11779c4 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerComplexObjectToString.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; public class CustomerComplexObjectToString extends Customer { private Order order; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerPrimitiveToString.java similarity index 91% rename from java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerPrimitiveToString.java index 01fe4c8b09..38555aa236 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerPrimitiveToString.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; public class CustomerPrimitiveToString extends Customer { private long balance; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerReflectionToString.java similarity index 95% rename from java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerReflectionToString.java index 2a9e3700ec..ad0c57351a 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerReflectionToString.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; import java.util.List; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerWrapperCollectionToString.java similarity index 95% rename from java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerWrapperCollectionToString.java index b3ff97dc07..7b7d9e4e7d 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/CustomerWrapperCollectionToString.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; import java.util.List; diff --git a/java-strings-ops/src/main/java/com/baeldung/string/tostring/Order.java b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/Order.java similarity index 95% rename from java-strings-ops/src/main/java/com/baeldung/string/tostring/Order.java rename to core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/Order.java index 58e0fcce5a..85a5dd169f 100644 --- a/java-strings-ops/src/main/java/com/baeldung/string/tostring/Order.java +++ b/core-java-modules/core-java-string-operations/src/main/java/com/baeldung/tostring/Order.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; public class Order { diff --git a/core-java-modules/core-java-string-operations/src/main/resources/log4j.properties b/core-java-modules/core-java-string-operations/src/main/resources/log4j.properties new file mode 100644 index 0000000000..2ea9fa9209 --- /dev/null +++ b/core-java-modules/core-java-string-operations/src/main/resources/log4j.properties @@ -0,0 +1,8 @@ +# Root logger option +log4j.rootLogger=DEBUG, stdout + +# Redirect log messages to console +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/java-strings-2/src/test/java/com/baeldung/base64encodinganddecoding/ApacheCommonsEncodeDecodeUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/ApacheCommonsEncodeDecodeUnitTest.java similarity index 100% rename from java-strings-2/src/test/java/com/baeldung/base64encodinganddecoding/ApacheCommonsEncodeDecodeUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/ApacheCommonsEncodeDecodeUnitTest.java diff --git a/java-strings-2/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java similarity index 100% rename from java-strings-2/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java diff --git a/java-strings-2/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java similarity index 99% rename from java-strings-2/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java index e2bb7bb64d..6f8a17e316 100644 --- a/java-strings-2/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java @@ -1,16 +1,15 @@ package com.baeldung.base64encodinganddecoding; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import org.junit.Test; +import javax.xml.bind.DatatypeConverter; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Base64; -import javax.xml.bind.DatatypeConverter; - -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class StringToByteArrayUnitTest { diff --git a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/CoreJavaIsNumericUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/CoreJavaIsNumericUnitTest.java similarity index 95% rename from java-strings-ops/src/test/java/com/baeldung/string/isnumeric/CoreJavaIsNumericUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/CoreJavaIsNumericUnitTest.java index 6228fdb5af..6c03b00e69 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/CoreJavaIsNumericUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/CoreJavaIsNumericUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/NumberUtilsIsCreatableUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/NumberUtilsIsCreatableUnitTest.java similarity index 96% rename from java-strings-ops/src/test/java/com/baeldung/string/isnumeric/NumberUtilsIsCreatableUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/NumberUtilsIsCreatableUnitTest.java index 346248cb40..3b88721ad4 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/NumberUtilsIsCreatableUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/NumberUtilsIsCreatableUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/NumberUtilsIsParsableUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/NumberUtilsIsParsableUnitTest.java similarity index 96% rename from java-strings-ops/src/test/java/com/baeldung/string/isnumeric/NumberUtilsIsParsableUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/NumberUtilsIsParsableUnitTest.java index fa2f2aec6d..6b96a6efa1 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/NumberUtilsIsParsableUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/NumberUtilsIsParsableUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/RegularExpressionsUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/RegularExpressionsUnitTest.java similarity index 93% rename from java-strings-ops/src/test/java/com/baeldung/string/isnumeric/RegularExpressionsUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/RegularExpressionsUnitTest.java index 0f7f0eb081..04f3de8dc5 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/RegularExpressionsUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/RegularExpressionsUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/StringUtilsIsNumericSpaceUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/StringUtilsIsNumericSpaceUnitTest.java similarity index 95% rename from java-strings-ops/src/test/java/com/baeldung/string/isnumeric/StringUtilsIsNumericSpaceUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/StringUtilsIsNumericSpaceUnitTest.java index 05651cc567..0c5e52580f 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/StringUtilsIsNumericSpaceUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/StringUtilsIsNumericSpaceUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/StringUtilsIsNumericUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/StringUtilsIsNumericUnitTest.java similarity index 95% rename from java-strings-ops/src/test/java/com/baeldung/string/isnumeric/StringUtilsIsNumericUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/StringUtilsIsNumericUnitTest.java index cae08874da..660426cdbb 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/isnumeric/StringUtilsIsNumericUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/isnumeric/StringUtilsIsNumericUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.isnumeric; +package com.baeldung.isnumeric; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/SplitUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/split/SplitUnitTest.java similarity index 98% rename from java-strings-ops/src/test/java/com/baeldung/string/SplitUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/split/SplitUnitTest.java index 1936bfb6fb..eaa61e5041 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/SplitUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/split/SplitUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.split; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings/src/test/java/com/baeldung/string/JoinerSplitterUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/streamoperations/JoinerSplitterUnitTest.java similarity index 98% rename from java-strings/src/test/java/com/baeldung/string/JoinerSplitterUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/streamoperations/JoinerSplitterUnitTest.java index a9488e27a4..2a0f03d3a8 100644 --- a/java-strings/src/test/java/com/baeldung/string/JoinerSplitterUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/streamoperations/JoinerSplitterUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.streamoperations; import org.junit.Test; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/StringComparisonUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/stringcomparison/StringComparisonUnitTest.java similarity index 99% rename from java-strings-ops/src/test/java/com/baeldung/string/StringComparisonUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/stringcomparison/StringComparisonUnitTest.java index 5339a0c72e..0bab708fde 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/StringComparisonUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/stringcomparison/StringComparisonUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.stringcomparison; import static org.assertj.core.api.Assertions.assertThat; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/SubstringUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substring/SubstringUnitTest.java similarity index 98% rename from java-strings-ops/src/test/java/com/baeldung/string/SubstringUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substring/SubstringUnitTest.java index eb397f2a3f..00340ba7cc 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/SubstringUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substring/SubstringUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.substring; import java.util.Scanner; import java.util.regex.Matcher; diff --git a/java-strings-2/src/test/java/com/baeldung/string/search/SubstringSearchUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substringsearch/SubstringSearchUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/string/search/SubstringSearchUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substringsearch/SubstringSearchUnitTest.java index 293e6d2125..c641ccbe07 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/search/SubstringSearchUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/substringsearch/SubstringSearchUnitTest.java @@ -1,12 +1,12 @@ -package com.baeldung.string.search; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; +package com.baeldung.substringsearch; import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * BAEL-2832: Different ways to check if a Substring could be found in a String. */ diff --git a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerArrayToStringUnitTest.java similarity index 95% rename from java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerArrayToStringUnitTest.java index ced8b15f2e..a754ed3c68 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerArrayToStringUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerComplexObjectToStringUnitTest.java similarity index 95% rename from java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerComplexObjectToStringUnitTest.java index 564fde8766..1b26d3e0a2 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerComplexObjectToStringUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerPrimitiveToStringUnitTest.java similarity index 94% rename from java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerPrimitiveToStringUnitTest.java index f585a8a26c..a21ab1616f 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerPrimitiveToStringUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerWrapperCollectionToStringUnitTest.java similarity index 96% rename from java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java rename to core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerWrapperCollectionToStringUnitTest.java index 9b3f8a1a6f..da4937ccdd 100644 --- a/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/tostring/CustomerWrapperCollectionToStringUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.string.tostring; +package com.baeldung.tostring; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/java-strings-2/README.md b/java-strings-2/README.md index b97df7c969..ecbdb7def9 100644 --- a/java-strings-2/README.md +++ b/java-strings-2/README.md @@ -5,13 +5,7 @@ This module contains articles about strings in Java. ### Relevant Articles: - [Java Localization – Formatting Messages](https://www.baeldung.com/java-localization-messages-formatting) -- [Check If a String Contains a Substring](https://www.baeldung.com/java-string-contains-substring) - [Java – Generate Random String](https://www.baeldung.com/java-random-string) -- [Java Base64 Encoding and Decoding](https://www.baeldung.com/java-base64-encode-and-decode) -- [Concatenating Strings In Java](https://www.baeldung.com/java-strings-concatenation) - [Java String Interview Questions and Answers](https://www.baeldung.com/java-string-interview-questions) -- [Checking for Empty or Blank Strings in Java](https://www.baeldung.com/java-blank-empty-strings) -- [String Initialization in Java](https://www.baeldung.com/java-string-initialization) - [Java Multi-line String](https://www.baeldung.com/java-multiline-string) -- [String toLowerCase and toUpperCase Methods in Java](https://www.baeldung.com/java-string-convert-case) -- More articles: [[<-- prev>]](/java-strings) [[next -->]](/java-strings-3) +- More articles: [[<-- prev>]](/java-strings) diff --git a/java-strings-3/README.md b/java-strings-3/README.md deleted file mode 100644 index 642752182f..0000000000 --- a/java-strings-3/README.md +++ /dev/null @@ -1,10 +0,0 @@ -## Java Strings Cookbooks and Examples - -This module contains articles about strings in Java. - -### Relevant Articles: -- [Java String equalsIgnoreCase()](https://www.baeldung.com/java-string-equalsignorecase) -- [Finding the Difference Between Two Strings in Java](https://www.baeldung.com/java-difference-between-two-strings) -- [Counting Words in a String](https://www.baeldung.com/java-word-counting) -- [Convert Character Array to String in Java](https://www.baeldung.com/java-char-array-to-string) -- More articles: [[<-- prev>]](/java-strings-2) diff --git a/java-strings-3/pom.xml b/java-strings-3/pom.xml deleted file mode 100644 index 4589780c15..0000000000 --- a/java-strings-3/pom.xml +++ /dev/null @@ -1,161 +0,0 @@ - - 4.0.0 - java-strings-3 - 0.1.0-SNAPSHOT - jar - java-strings-3 - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - org.openjdk.jmh - jmh-core - ${jmh-core.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh-core.version} - - - com.ibm.icu - icu4j - ${icu4j.version} - - - com.google.guava - guava - ${guava.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - commons-io - commons-io - ${commons-io.version} - - - commons-codec - commons-codec - ${commons-codec.version} - - - junit - junit - ${junit.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - org.assertj - assertj-core - ${assertj.version} - test - - - org.bitbucket.cowwoc - diff-match-patch - 1.2 - test - - - - - org.passay - passay - ${passay.version} - - - org.apache.commons - commons-text - ${commons-text.version} - - - com.vdurmont - emoji-java - ${emoji-java.version} - - - org.ahocorasick - ahocorasick - ${ahocorasick.version} - - - javax.validation - validation-api - ${validation-api.version} - - - org.hibernate.validator - hibernate-validator - ${hibernate-validator.version} - - - javax.el - javax.el-api - ${javax.el-api.version} - - - org.glassfish.web - javax.el - ${javax.el.version} - - - - - java-strings-3 - - - src/main/resources - true - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - -parameters - - - - - - - 3.8.1 - 1.10 - 1.3.1 - - 3.6.1 - 4.0.0 - 0.4.0 - 61.1 - 28.0-jre - 1.4 - 2.0.0.Final - 6.0.2.Final - 3.0.0 - 2.2.6 - - - \ No newline at end of file diff --git a/java-strings-3/src/main/resources/.gitignore b/java-strings-3/src/main/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/java-strings-3/src/main/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/java-strings-3/src/test/resources/.gitignore b/java-strings-3/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/java-strings-3/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/java-strings-ops/README.md b/java-strings-ops/README.md index e35a3808f0..4c618585f3 100644 --- a/java-strings-ops/README.md +++ b/java-strings-ops/README.md @@ -3,10 +3,4 @@ This module contains articles about operations on strings in Java. ### Relevant Articles: -- [Comparing Strings in Java](https://www.baeldung.com/java-compare-strings) -- [Check If a String Is Numeric in Java](https://www.baeldung.com/java-check-string-number) -- [Get Substring from String in Java](https://www.baeldung.com/java-substring) - [Guide to Java String Pool](https://www.baeldung.com/java-string-pool) -- [Split a String in Java](https://www.baeldung.com/java-split-string) -- [Common String Operations in Java](https://www.baeldung.com/java-string-operations) -- [Java toString() Method](https://www.baeldung.com/java-tostring) diff --git a/java-strings/README.md b/java-strings/README.md index e2ffbe6453..4668ad014e 100644 --- a/java-strings/README.md +++ b/java-strings/README.md @@ -3,10 +3,8 @@ This module contains articles about strings in Java. ### Relevant Articles: -- [String Operations with Java Streams](https://www.baeldung.com/java-stream-operations-on-strings) - [Use char[] Array Over a String for Manipulating Passwords in Java?](https://www.baeldung.com/java-storing-passwords) - [Compact Strings in Java 9](https://www.baeldung.com/java-9-compact-string) - [String Not Empty Test Assertions in Java](https://www.baeldung.com/java-assert-string-not-empty) - [String Performance Hints](https://www.baeldung.com/java-string-performance) -- [Adding a Newline Character to a String in Java](https://www.baeldung.com/java-string-newline) - More articles: [[next -->]](/java-strings-2) diff --git a/pom.xml b/pom.xml index 14eb9e842e..f5776731c9 100644 --- a/pom.xml +++ b/pom.xml @@ -440,6 +440,8 @@ core-java-modules/core-java-sun core-java-modules/core-java-string-conversions core-java-modules/core-java-string-conversions-2 + core-java-modules/core-java-string-operations + core-java-modules/core-java-string-operations-2 core-java-modules/core-java-string-algorithms core-java-modules/core-java-string-algorithms-2 core-java-modules/core-java-string-apis @@ -507,7 +509,6 @@ java-spi java-strings java-strings-2 - java-strings-3 java-strings-ops java-vavr-stream java-websocket @@ -1211,6 +1212,8 @@ core-java-modules/core-java-sun core-java-modules/core-java-string-conversions core-java-modules/core-java-string-conversions-2 + core-java-modules/core-java-string-operations + core-java-modules/core-java-string-operations-2 core-java-modules/core-java-string-algorithms core-java-modules/core-java-string-algorithms-2 core-java-modules/core-java-string-apis @@ -1276,7 +1279,6 @@ java-spi java-strings java-strings-2 - java-strings-3 java-strings-ops java-vavr-stream java-websocket From 53887eb8528431d74114421e07ca18a1d70217ea Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 30 Oct 2019 22:49:34 +0530 Subject: [PATCH 275/304] BAEL-18211 Fix the integrations tests in spring-5-data-reactive - Several fixes to fix the project setup in case of multiple spring data reactive repositories and fix assertion failures --- .../r2dbc/configuration/R2DBCConfiguration.java | 2 +- .../main/java/com/baeldung/r2dbc/model/Player.java | 2 ++ .../r2dbc/R2dbcApplicationIntegrationTest.java | 12 ++++++------ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/configuration/R2DBCConfiguration.java b/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/configuration/R2DBCConfiguration.java index 17eac7fee2..54f06d9c6c 100644 --- a/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/configuration/R2DBCConfiguration.java +++ b/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/configuration/R2DBCConfiguration.java @@ -8,7 +8,7 @@ import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration; import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories; @Configuration -//@EnableR2dbcRepositories(basePackages = "com.baeldung.r2dbc.repository") +@EnableR2dbcRepositories(basePackages = "com.baeldung.r2dbc.repository") public class R2DBCConfiguration extends AbstractR2dbcConfiguration { @Bean public H2ConnectionFactory connectionFactory() { diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/model/Player.java b/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/model/Player.java index 1926997e97..1e28cb3d07 100644 --- a/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/model/Player.java +++ b/spring-5-data-reactive/src/main/java/com/baeldung/r2dbc/model/Player.java @@ -4,10 +4,12 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; +import org.springframework.data.relational.core.mapping.Table; @Data @NoArgsConstructor @AllArgsConstructor +@Table public class Player { @Id Integer id; diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/r2dbc/R2dbcApplicationIntegrationTest.java b/spring-5-data-reactive/src/test/java/com/baeldung/r2dbc/R2dbcApplicationIntegrationTest.java index a31ef4458d..ffd2e98f8e 100644 --- a/spring-5-data-reactive/src/test/java/com/baeldung/r2dbc/R2dbcApplicationIntegrationTest.java +++ b/spring-5-data-reactive/src/test/java/com/baeldung/r2dbc/R2dbcApplicationIntegrationTest.java @@ -111,12 +111,12 @@ public class R2dbcApplicationIntegrationTest { private void insertPlayers() { List players = Arrays.asList( - new Player(1, "Kaka", 37), - new Player(2, "Messi", 32), - new Player(3, "Mbappé", 20), - new Player(4, "CR7", 34), - new Player(5, "Lewandowski", 30), - new Player(6, "Cavani", 32) + new Player(null, "Kaka", 37), + new Player(null, "Messi", 32), + new Player(null, "Mbappé", 20), + new Player(null, "CR7", 34), + new Player(null, "Lewandowski", 30), + new Player(null, "Cavani", 32) ); playerRepository.saveAll(players).subscribe(); From 7e5dfdcf45e837247ea21cdfb465edbce1749237 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Thu, 31 Oct 2019 00:48:17 +0330 Subject: [PATCH 276/304] Disabling the Fork Option Each test setups a Redis server before test class and tears it down after them. Since each Redis server listens on port 6379, we can't let them to listen to the same port with parallel options. --- persistence-modules/spring-data-redis/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/persistence-modules/spring-data-redis/pom.xml b/persistence-modules/spring-data-redis/pom.xml index 4ae8ac0a87..cd8c729844 100644 --- a/persistence-modules/spring-data-redis/pom.xml +++ b/persistence-modules/spring-data-redis/pom.xml @@ -87,7 +87,8 @@ ${maven-surefire-plugin.version} true - true + false + 0 -Xmx1024m From 5be2b72eff7d670cd4b5a59bcfad2b5b2a0fe4d0 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Thu, 31 Oct 2019 00:49:42 +0330 Subject: [PATCH 277/304] Fixed failing connection. --- .../SpringContextIntegrationTest.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextIntegrationTest.java index e093892365..f5c8177cbe 100644 --- a/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextIntegrationTest.java @@ -1,16 +1,35 @@ package org.baeldung; +import com.baeldung.spring.data.redis.config.RedisConfig; +import org.junit.AfterClass; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import redis.embedded.RedisServerBuilder; -import com.baeldung.spring.data.redis.config.RedisConfig; +import static org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_CLASS; @RunWith(SpringJUnit4ClassRunner.class) +@DirtiesContext(classMode = BEFORE_CLASS) @ContextConfiguration(classes = RedisConfig.class) public class SpringContextIntegrationTest { + private static redis.embedded.RedisServer redisServer; + + @BeforeClass + public static void startRedisServer() { + redisServer = new RedisServerBuilder().port(6379).setting("maxmemory 256M").build(); + redisServer.start(); + } + + @AfterClass + public static void stopRedisServer() { + redisServer.stop(); + } + @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { } From 97d0a7373ba2cfa5cb647d2f9e88e857fbc66fee Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Thu, 31 Oct 2019 01:16:28 +0330 Subject: [PATCH 278/304] Added the Missing CSV Files --- libraries-data-io/src/main/resources/csv/twoColumn.csv | 5 +++++ libraries-data-io/src/main/resources/csv/writtenAll.csv | 0 libraries-data-io/src/main/resources/csv/writtenBean.csv | 0 libraries-data-io/src/main/resources/csv/writtenOneByOne.csv | 0 4 files changed, 5 insertions(+) create mode 100644 libraries-data-io/src/main/resources/csv/twoColumn.csv create mode 100644 libraries-data-io/src/main/resources/csv/writtenAll.csv create mode 100644 libraries-data-io/src/main/resources/csv/writtenBean.csv create mode 100644 libraries-data-io/src/main/resources/csv/writtenOneByOne.csv diff --git a/libraries-data-io/src/main/resources/csv/twoColumn.csv b/libraries-data-io/src/main/resources/csv/twoColumn.csv new file mode 100644 index 0000000000..56d8fa1901 --- /dev/null +++ b/libraries-data-io/src/main/resources/csv/twoColumn.csv @@ -0,0 +1,5 @@ +colA, ColB +A, B +C, D +G, G +G, F \ No newline at end of file diff --git a/libraries-data-io/src/main/resources/csv/writtenAll.csv b/libraries-data-io/src/main/resources/csv/writtenAll.csv new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libraries-data-io/src/main/resources/csv/writtenBean.csv b/libraries-data-io/src/main/resources/csv/writtenBean.csv new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libraries-data-io/src/main/resources/csv/writtenOneByOne.csv b/libraries-data-io/src/main/resources/csv/writtenOneByOne.csv new file mode 100644 index 0000000000..e69de29bb2 From d800702e47f10504366664fe26058c3fe8db13fa Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Thu, 31 Oct 2019 02:08:44 +0330 Subject: [PATCH 279/304] Fixed the Dependency Conflict Issue --- spring-jersey/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-jersey/pom.xml b/spring-jersey/pom.xml index e053ee7b4b..cf80ac4069 100644 --- a/spring-jersey/pom.xml +++ b/spring-jersey/pom.xml @@ -222,12 +222,12 @@ - 2.27 + 2.29.1 1.6.1 4.4.9 4.5.5 4.0.0 - 1.58 + 2.25.1 3.10.0 1.5.10.RELEASE From 03679107fd87e4ad8341ebe01b9875753c939491 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Thu, 31 Oct 2019 15:04:40 +0330 Subject: [PATCH 280/304] Using blocking queue for pub-sub --- .../redis/queue/RedisMessageSubscriber.java | 8 +++---- .../RedisMessageListenerIntegrationTest.java | 21 ++++++++----------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java index 849e1fb59f..86656f4ffc 100644 --- a/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java +++ b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java @@ -4,16 +4,16 @@ import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; @Service public class RedisMessageSubscriber implements MessageListener { - public static List messageList = new ArrayList(); + public static BlockingQueue messages = new ArrayBlockingQueue(100); public void onMessage(final Message message, final byte[] pattern) { - messageList.add(message.toString()); + messages.add(message.toString()); System.out.println("Message received: " + new String(message.getBody())); } } \ No newline at end of file diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java index 6f9e6a8757..92c796bb36 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java @@ -1,10 +1,8 @@ package com.baeldung.spring.data.redis; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.UUID; - +import com.baeldung.spring.data.redis.config.RedisConfig; +import com.baeldung.spring.data.redis.queue.RedisMessagePublisher; +import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -14,13 +12,13 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import com.baeldung.spring.data.redis.config.RedisConfig; -import com.baeldung.spring.data.redis.queue.RedisMessagePublisher; -import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber; - import redis.embedded.RedisServerBuilder; +import java.io.IOException; +import java.util.UUID; + +import static org.junit.Assert.assertTrue; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = RedisConfig.class) @DirtiesContext(classMode = ClassMode.BEFORE_CLASS) @@ -46,7 +44,6 @@ public class RedisMessageListenerIntegrationTest { public void testOnMessage() throws Exception { String message = "Message " + UUID.randomUUID(); redisMessagePublisher.publish(message); - Thread.sleep(1000); - assertTrue(RedisMessageSubscriber.messageList.get(0).contains(message)); + assertTrue(RedisMessageSubscriber.messages.take().contains(message)); } } \ No newline at end of file From 3cf31474b6dcf209623ca3793a1b0ce310ddfdbb Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Thu, 31 Oct 2019 16:42:52 +0330 Subject: [PATCH 281/304] Making Wiremock to Listen to a Random Port --- .../ClientOrchestrationIntegrationTest.java | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/spring-jersey/src/test/java/com/baeldung/clientrx/ClientOrchestrationIntegrationTest.java b/spring-jersey/src/test/java/com/baeldung/clientrx/ClientOrchestrationIntegrationTest.java index 990279a481..8f40636d01 100644 --- a/spring-jersey/src/test/java/com/baeldung/clientrx/ClientOrchestrationIntegrationTest.java +++ b/spring-jersey/src/test/java/com/baeldung/clientrx/ClientOrchestrationIntegrationTest.java @@ -41,9 +41,9 @@ public class ClientOrchestrationIntegrationTest { private Client client = ClientBuilder.newClient(); - private WebTarget userIdService = client.target("http://localhost:8080/id-service/ids"); - private WebTarget nameService = client.target("http://localhost:8080/name-service/users/{userId}/name"); - private WebTarget hashService = client.target("http://localhost:8080/hash-service/{rawValue}"); + private WebTarget userIdService = client.target("http://localhost:{port}/id-service/ids"); + private WebTarget nameService = client.target("http://localhost:{port}/name-service/users/{userId}/name"); + private WebTarget hashService = client.target("http://localhost:{port}/hash-service/{rawValue}"); private Logger logger = LoggerFactory.getLogger(ClientOrchestrationIntegrationTest.class); @@ -54,7 +54,7 @@ public class ClientOrchestrationIntegrationTest { private List expectedHashValues = Arrays.asList("roht1", "kluh2", "WodiwKcalb3", "RehtnapKclab4", "kciteht5", "eyekwah6"); @Rule - public WireMockRule wireMockServer = new WireMockRule(); + public WireMockRule wireMockServer = new WireMockRule(0); @Before public void setup() { @@ -83,19 +83,19 @@ public class ClientOrchestrationIntegrationTest { final CountDownLatch completionTracker = new CountDownLatch(expectedHashValues.size()); // used to keep track of the progress of the subsequent calls - userIdService.request().accept(MediaType.APPLICATION_JSON).async().get(new InvocationCallback>() { + getUserIdService().request().accept(MediaType.APPLICATION_JSON).async().get(new InvocationCallback>() { @Override public void completed(List employeeIds) { logger.info("[CallbackExample] id-service result: {}", employeeIds); employeeIds.forEach((id) -> { // for each employee ID, get the name - nameService.resolveTemplate("userId", id).request().async().get(new InvocationCallback() { + getNameService().resolveTemplate("userId", id).request().async().get(new InvocationCallback() { @Override public void completed(String response) { logger.info("[CallbackExample] name-service result: {}", response); - hashService.resolveTemplate("rawValue", response + id).request().async().get(new InvocationCallback() { + getHashService().resolveTemplate("rawValue", response + id).request().async().get(new InvocationCallback() { @Override public void completed(String response) { logger.info("[CallbackExample] hash-service result: {}", response); @@ -144,7 +144,7 @@ public class ClientOrchestrationIntegrationTest { final CountDownLatch completionTracker = new CountDownLatch(expectedHashValues.size()); // used to keep track of the progress of the subsequent calls - CompletionStage> userIdStage = userIdService.request().accept(MediaType.APPLICATION_JSON).rx().get(new GenericType>() { + CompletionStage> userIdStage = getUserIdService().request().accept(MediaType.APPLICATION_JSON).rx().get(new GenericType>() { }).exceptionally((throwable) -> { logger.warn("[CompletionStageExample] An error has occurred"); return null; @@ -153,11 +153,11 @@ public class ClientOrchestrationIntegrationTest { userIdStage.thenAcceptAsync(employeeIds -> { logger.info("[CompletionStageExample] id-service result: {}", employeeIds); employeeIds.forEach((Long id) -> { - CompletableFuture completable = nameService.resolveTemplate("userId", id).request().rx().get(String.class).toCompletableFuture(); + CompletableFuture completable = getNameService().resolveTemplate("userId", id).request().rx().get(String.class).toCompletableFuture(); completable.thenAccept((String userName) -> { logger.info("[CompletionStageExample] name-service result: {}", userName); - hashService.resolveTemplate("rawValue", userName + id).request().rx().get(String.class).toCompletableFuture().thenAcceptAsync(hashValue -> { + getHashService().resolveTemplate("rawValue", userName + id).request().rx().get(String.class).toCompletableFuture().thenAcceptAsync(hashValue -> { logger.info("[CompletionStageExample] hash-service result: {}", hashValue); receivedHashValues.add(hashValue); completionTracker.countDown(); @@ -191,18 +191,18 @@ public class ClientOrchestrationIntegrationTest { final CountDownLatch completionTracker = new CountDownLatch(expectedHashValues.size()); // used to keep track of the progress of the subsequent calls - Observable> observableUserIdService = userIdService.register(RxObservableInvokerProvider.class).request().accept(MediaType.APPLICATION_JSON).rx(RxObservableInvoker.class).get(new GenericType>() { + Observable> observableUserIdService = getUserIdService().register(RxObservableInvokerProvider.class).request().accept(MediaType.APPLICATION_JSON).rx(RxObservableInvoker.class).get(new GenericType>() { }).asObservable(); observableUserIdService.subscribe((List employeeIds) -> { logger.info("[ObservableExample] id-service result: {}", employeeIds); - Observable.from(employeeIds).subscribe(id -> nameService.register(RxObservableInvokerProvider.class).resolveTemplate("userId", id).request().rx(RxObservableInvoker.class).get(String.class).asObservable() // gotten the name for the given + Observable.from(employeeIds).subscribe(id -> getNameService().register(RxObservableInvokerProvider.class).resolveTemplate("userId", id).request().rx(RxObservableInvoker.class).get(String.class).asObservable() // gotten the name for the given // userId .doOnError((throwable) -> { logger.warn("[ObservableExample] An error has occurred in the username request step {}", throwable.getMessage()); }).subscribe(userName -> { logger.info("[ObservableExample] name-service result: {}", userName); - hashService.register(RxObservableInvokerProvider.class).resolveTemplate("rawValue", userName + id).request().rx(RxObservableInvoker.class).get(String.class).asObservable() // gotten the hash value for + getHashService().register(RxObservableInvokerProvider.class).resolveTemplate("rawValue", userName + id).request().rx(RxObservableInvoker.class).get(String.class).asObservable() // gotten the hash value for // userId+username .doOnError((throwable) -> { logger.warn("[ObservableExample] An error has occurred in the hashing request step {}", throwable.getMessage()); @@ -233,18 +233,18 @@ public class ClientOrchestrationIntegrationTest { final CountDownLatch completionTracker = new CountDownLatch(expectedHashValues.size()); // used to keep track of the progress of the subsequent calls - Flowable> userIdFlowable = userIdService.register(RxFlowableInvokerProvider.class).request().rx(RxFlowableInvoker.class).get(new GenericType>() { + Flowable> userIdFlowable = getUserIdService().register(RxFlowableInvokerProvider.class).request().rx(RxFlowableInvoker.class).get(new GenericType>() { }); userIdFlowable.subscribe((List employeeIds) -> { logger.info("[FlowableExample] id-service result: {}", employeeIds); Flowable.fromIterable(employeeIds).subscribe(id -> { - nameService.register(RxFlowableInvokerProvider.class).resolveTemplate("userId", id).request().rx(RxFlowableInvoker.class).get(String.class) // gotten the name for the given userId + getNameService().register(RxFlowableInvokerProvider.class).resolveTemplate("userId", id).request().rx(RxFlowableInvoker.class).get(String.class) // gotten the name for the given userId .doOnError((throwable) -> { logger.warn("[FlowableExample] An error has occurred in the username request step {}", throwable.getMessage()); }).subscribe(userName -> { logger.info("[FlowableExample] name-service result: {}", userName); - hashService.register(RxFlowableInvokerProvider.class).resolveTemplate("rawValue", userName + id).request().rx(RxFlowableInvoker.class).get(String.class) // gotten the hash value for userId+username + getHashService().register(RxFlowableInvokerProvider.class).resolveTemplate("rawValue", userName + id).request().rx(RxFlowableInvoker.class).get(String.class) // gotten the hash value for userId+username .doOnError((throwable) -> { logger.warn(" [FlowableExample] An error has occurred in the hashing request step!", throwable); }).subscribe(hashValue -> { @@ -269,4 +269,20 @@ public class ClientOrchestrationIntegrationTest { assertThat(receivedHashValues).containsAll(expectedHashValues); } + private int getPort() { + return wireMockServer.port(); + } + + private WebTarget getUserIdService() { + return userIdService.resolveTemplate("port", getPort()); + } + + private WebTarget getNameService() { + return nameService.resolveTemplate("port", getPort()); + } + + private WebTarget getHashService() { + return hashService.resolveTemplate("port", getPort()); + } + } From 0bb74e4d9bb6c3169d0cfb673ae519abcd715237 Mon Sep 17 00:00:00 2001 From: Laurentiu Date: Thu, 31 Oct 2019 21:18:02 +0200 Subject: [PATCH 282/304] BAEL-3375 Working with Dates before Java 8 --- .../{sql => legacy/sqlpackage}/DateUtils.java | 2 +- .../{sql => legacy/sqlpackage}/TimeUtils.java | 2 +- .../sqlpackage}/TimestampUtils.java | 2 +- .../legacy/utilpackage/CalendarUtils.java | 15 ++++++++++++ .../legacy/utilpackage/DateUtils.java | 20 ++++++++++++++++ .../sqlpackage}/DateUtilsUnitTest.java | 2 +- .../sqlpackage}/TimeUtilsUnitTest.java | 2 +- .../sqlpackage}/TimestampUtilsUnitTest.java | 4 ++-- .../utilpackage/CalendarUtilsUnitTest.java | 18 +++++++++++++++ .../legacy/utilpackage/DateUtilsUnitTest.java | 23 +++++++++++++++++++ core-java-modules/pom.xml | 1 + 11 files changed, 84 insertions(+), 7 deletions(-) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{sql => legacy/sqlpackage}/DateUtils.java (93%) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{sql => legacy/sqlpackage}/TimeUtils.java (93%) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{sql => legacy/sqlpackage}/TimestampUtils.java (93%) create mode 100644 core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/CalendarUtils.java create mode 100644 core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/DateUtils.java rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{sql => legacy/sqlpackage}/DateUtilsUnitTest.java (94%) rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{sql => legacy/sqlpackage}/TimeUtilsUnitTest.java (94%) rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{sql => legacy/sqlpackage}/TimestampUtilsUnitTest.java (85%) create mode 100644 core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/CalendarUtilsUnitTest.java create mode 100644 core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/DateUtilsUnitTest.java diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/DateUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/DateUtils.java similarity index 93% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/DateUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/DateUtils.java index 265ae540aa..b430c1cb17 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/DateUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/DateUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.sql; +package com.baeldung.legacy.sqlpackage; import java.sql.Date; import java.text.ParseException; diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimeUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimeUtils.java similarity index 93% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimeUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimeUtils.java index b0537e57e8..352a04b23b 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimeUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimeUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.sql; +package com.baeldung.legacy.sqlpackage; import java.sql.Time; import java.text.ParseException; diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimestampUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimestampUtils.java similarity index 93% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimestampUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimestampUtils.java index 3f4f83b792..350eb71497 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/sql/TimestampUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimestampUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.sql; +package com.baeldung.legacy.sqlpackage; import java.sql.Timestamp; import java.text.ParseException; diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/CalendarUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/CalendarUtils.java new file mode 100644 index 0000000000..cea7936004 --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/CalendarUtils.java @@ -0,0 +1,15 @@ +package com.baeldung.legacy.utilpackage; + +import java.text.ParseException; +import java.util.Calendar; +import java.util.Date; + +public class CalendarUtils { + + public static Calendar getPlusDays(Date date, int amount) throws ParseException { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_YEAR, amount); + return calendar; + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/DateUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/DateUtils.java new file mode 100644 index 0000000000..5eb98e0d74 --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/DateUtils.java @@ -0,0 +1,20 @@ +package com.baeldung.legacy.utilpackage; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateUtils { + + public static Date getNow() { + return new Date(); + } + + public static Date getDate(long millis) { + return new Date(millis); + } + + public static Date getDate(String dateAsString, String pattern) throws ParseException { + return new SimpleDateFormat(pattern).parse(dateAsString); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/DateUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/DateUtilsUnitTest.java similarity index 94% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/DateUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/DateUtilsUnitTest.java index 964aeb4405..73eda5a9dd 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/DateUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/DateUtilsUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.sql; +package com.baeldung.legacy.sqlpackage; import static org.junit.Assert.assertEquals; diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimeUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimeUtilsUnitTest.java similarity index 94% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimeUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimeUtilsUnitTest.java index ef4dea338a..9519122e92 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimeUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimeUtilsUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.sql; +package com.baeldung.legacy.sqlpackage; import static org.junit.Assert.assertEquals; diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimestampUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimestampUtilsUnitTest.java similarity index 85% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimestampUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimestampUtilsUnitTest.java index 04925abc43..d48560624d 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/sql/TimestampUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimestampUtilsUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.sql; +package com.baeldung.legacy.sqlpackage; import static org.junit.Assert.assertEquals; @@ -11,7 +11,7 @@ public class TimestampUtilsUnitTest { @Test public void givenCurrentTimestamp_thenNowIsReturned() { - assertEquals(TimestampUtils.getNow().toInstant(), new Date().toInstant()); + assertEquals(TimestampUtils.getNow().getTime(), new Date().getTime()); } @Test(expected = IllegalArgumentException.class) diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/CalendarUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/CalendarUtilsUnitTest.java new file mode 100644 index 0000000000..db029153ee --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/CalendarUtilsUnitTest.java @@ -0,0 +1,18 @@ +package com.baeldung.legacy.utilpackage; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import java.text.ParseException; +import java.util.Date; + +public class CalendarUtilsUnitTest { + + @Test + public void givenDateAndDaysToAdd_thenCalendarIsCorrectlyReturned() throws ParseException { + Date initialDate = DateUtils.getDate("2020/01/01", "yyyy/MM/dd"); + Date expectedDate= DateUtils.getDate("2020/01/11", "yyyy/MM/dd"); + assertEquals(expectedDate, CalendarUtils.getPlusDays(initialDate, 10).getTime()); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/DateUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/DateUtilsUnitTest.java new file mode 100644 index 0000000000..432aa1ecfc --- /dev/null +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/DateUtilsUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.legacy.utilpackage; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import java.text.ParseException; +import java.util.Date; + +public class DateUtilsUnitTest { + + @Test + public void givenTimeMillis_thenDateIsReturned() { + Date now = DateUtils.getNow(); + assertEquals(DateUtils.getDate(now.getTime()), now); + } + + @Test + public void givenDateAndPattern_thenDateIsCorrectlyReturned() throws ParseException { + long milliseconds = new Date(2020 - 1900, 0, 1).getTime(); + assertEquals(DateUtils.getDate(milliseconds), DateUtils.getDate("2020/01/01", "yyyy/MM/dd")); + } +} \ No newline at end of file diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 68ece1c473..16ec19835a 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -19,6 +19,7 @@ core-java-lang-operators core-java-networking-2 core-java-security-manager + core-java-date-operations From 874e64761a6658493f8576692c5a4667ac591f7e Mon Sep 17 00:00:00 2001 From: dupirefr Date: Fri, 1 Nov 2019 00:35:30 +0100 Subject: [PATCH 283/304] [BAEL-3348] Moved code to algorithm-4 --- .../smallestinteger/SmallestMissingPositiveInteger.java | 0 .../smallestinteger/SmallestMissingPositiveIntegerUnitTest.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {algorithms-miscellaneous-3 => algorithms-miscellaneous-4}/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java (100%) rename {algorithms-miscellaneous-3 => algorithms-miscellaneous-4}/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java (100%) diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java similarity index 100% rename from algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java similarity index 100% rename from algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java From 7e084e2721a6b8ea88ee133602eb48d876bac882 Mon Sep 17 00:00:00 2001 From: Eric Martin Date: Thu, 31 Oct 2019 20:40:42 -0500 Subject: [PATCH 284/304] Revert "BAEL-3275: Using blocking queue for pub-sub" --- .../redis/queue/RedisMessageSubscriber.java | 8 +++---- .../RedisMessageListenerIntegrationTest.java | 21 +++++++++++-------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java index 86656f4ffc..849e1fb59f 100644 --- a/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java +++ b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java @@ -4,16 +4,16 @@ import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.stereotype.Service; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingQueue; +import java.util.ArrayList; +import java.util.List; @Service public class RedisMessageSubscriber implements MessageListener { - public static BlockingQueue messages = new ArrayBlockingQueue(100); + public static List messageList = new ArrayList(); public void onMessage(final Message message, final byte[] pattern) { - messages.add(message.toString()); + messageList.add(message.toString()); System.out.println("Message received: " + new String(message.getBody())); } } \ No newline at end of file diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java index 92c796bb36..6f9e6a8757 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java @@ -1,8 +1,10 @@ package com.baeldung.spring.data.redis; -import com.baeldung.spring.data.redis.config.RedisConfig; -import com.baeldung.spring.data.redis.queue.RedisMessagePublisher; -import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.UUID; + import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -12,13 +14,13 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.spring.data.redis.config.RedisConfig; +import com.baeldung.spring.data.redis.queue.RedisMessagePublisher; +import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber; + import redis.embedded.RedisServerBuilder; -import java.io.IOException; -import java.util.UUID; - -import static org.junit.Assert.assertTrue; - @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = RedisConfig.class) @DirtiesContext(classMode = ClassMode.BEFORE_CLASS) @@ -44,6 +46,7 @@ public class RedisMessageListenerIntegrationTest { public void testOnMessage() throws Exception { String message = "Message " + UUID.randomUUID(); redisMessagePublisher.publish(message); - assertTrue(RedisMessageSubscriber.messages.take().contains(message)); + Thread.sleep(1000); + assertTrue(RedisMessageSubscriber.messageList.get(0).contains(message)); } } \ No newline at end of file From 979d4f94d0cd7c8c9016bd77adcca5975e519081 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sat, 2 Nov 2019 02:32:28 +0330 Subject: [PATCH 285/304] Dedicated H2 Db --- .../src/test/resources/application-test.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties index 207de2e8ec..f9497c8f37 100644 --- a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties +++ b/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties @@ -1 +1,2 @@ spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:h2:mem:jpa3 \ No newline at end of file From 1431f2333743ad6741a8a819228e3d70af64c2d0 Mon Sep 17 00:00:00 2001 From: Eric Martin Date: Fri, 1 Nov 2019 23:48:07 -0500 Subject: [PATCH 286/304] Update JavaScannerUnitTest.java --- .../src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java index 5b304284b2..471c0ea1c7 100644 --- a/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java +++ b/core-java-modules/core-java-io-2/src/test/java/com/baeldung/scanner/JavaScannerUnitTest.java @@ -29,7 +29,6 @@ public class JavaScannerUnitTest { } @Test(expected = NoSuchElementException.class) - public void givenNoNewLine_whenReadingNextLine_thenThrowNoSuchElementException() { try (Scanner scanner = new Scanner("")) { String result = scanner.nextLine(); From f35c61c56a551549fa1298410834c09d8bb40e7a Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Sat, 2 Nov 2019 12:38:21 +0000 Subject: [PATCH 287/304] [BAEL-16658] Split rxjava (& rxjava-2) by subject --- pom.xml | 12 +- rxjava-2/README.md | 14 - rxjava-2/pom.xml | 53 -- rxjava-core/README.md | 16 + rxjava-core/pom.xml | 46 ++ .../com/baeldung/rxjava/ComputeFunction.java | 0 .../rxjava/ConnectableObservableImpl.java | 0 .../com/baeldung/rxjava/ObservableImpl.java | 0 .../baeldung/rxjava/ResourceManagement.java | 0 .../java/com/baeldung/rxjava/SingleImpl.java | 0 .../java/com/baeldung/rxjava/SubjectImpl.java | 0 .../src/main/resources/logback.xml | 0 .../baeldung/rxjava/CompletableUnitTest.java | 0 .../ConnectableObservableIntegrationTest.java | 0 .../com/baeldung/rxjava/MaybeUnitTest.java | 0 .../baeldung/rxjava/ObservableUnitTest.java | 0 .../rxjava/ResourceManagementUnitTest.java | 0 ...RxJavaBackpressureLongRunningUnitTest.java | 0 .../rxjava/RxJavaHooksManualTest.java | 168 +++--- .../baeldung/rxjava/RxJavaHooksUnitTest.java | 488 +++++++++--------- .../com/baeldung/rxjava/RxJavaUnitTest.java | 0 .../baeldung/rxjava/SchedulersLiveTest.java | 0 .../com/baeldung/rxjava/SingleUnitTest.java | 0 .../com/baeldung/rxjava/SubjectUnitTest.java | 0 .../ExceptionHandlingIntegrationTest.java | 0 .../onerror/OnErrorRetryIntegrationTest.java | 0 rxjava-libraries/README.md | 10 + rxjava-libraries/pom.xml | 59 +++ .../java/com/baeldung/rxjava/RandomRelay.java | 0 .../com/baeldung/rxjava/jdbc/Connector.java | 0 .../com/baeldung/rxjava/jdbc/Employee.java | 0 .../com/baeldung/rxjava/jdbc/Manager.java | 0 .../java/com/baeldung/rxjava/jdbc/Utils.java | 0 .../rxjava/FlowableIntegrationTest.java | 0 .../rxjava/RxRelayIntegrationTest.java | 0 .../jdbc/AutomapClassIntegrationTest.java | 0 .../jdbc/AutomapInterfaceIntegrationTest.java | 0 .../jdbc/BasicQueryTypesIntegrationTest.java | 0 .../jdbc/InsertBlobIntegrationTest.java | 0 .../jdbc/InsertClobIntegrationTest.java | 0 .../jdbc/ReturnKeysIntegrationTest.java | 0 .../jdbc/TransactionIntegrationTest.java | 0 .../src/test/resources/actual_clob | 0 .../src/test/resources/expected_clob | 0 rxjava-observables/README.md | 11 + rxjava-observables/pom.xml | 41 ++ .../rxjava/MultipleSubscribersColdObs.java | 0 .../rxjava/MultipleSubscribersHotObs.java | 0 .../combine/ObservableCombineUnitTest.java | 0 .../RxJavaFilterOperatorsIntegrationTest.java | 0 .../RxJavaSkipOperatorsIntegrationTest.java | 0 ...TimeFilteringOperatorsIntegrationTest.java | 0 .../operators/RxStringOperatorsUnitTest.java | 0 rxjava-operators/README.md | 12 + {rxjava => rxjava-operators}/pom.xml | 54 +- .../rxjava/operator/ToCleanString.java | 0 .../baeldung/rxjava/operator/ToLength.java | 0 ...yncAndSyncToObservableIntegrationTest.java | 214 ++++---- .../rxjava/RxJavaCustomOperatorUnitTest.java | 0 .../UtilityOperatorsIntegrationTest.java | 0 .../RxAggregateOperatorsUnitTest.java | 0 .../RxFlatmapAndSwitchmapUnitTest.java | 0 .../RxMathematicalOperatorsUnitTest.java | 0 rxjava/README.md | 20 - rxjava/src/main/resources/logback.xml | 13 - 65 files changed, 661 insertions(+), 570 deletions(-) delete mode 100644 rxjava-2/README.md delete mode 100644 rxjava-2/pom.xml create mode 100644 rxjava-core/README.md create mode 100644 rxjava-core/pom.xml rename {rxjava => rxjava-core}/src/main/java/com/baeldung/rxjava/ComputeFunction.java (100%) rename {rxjava => rxjava-core}/src/main/java/com/baeldung/rxjava/ConnectableObservableImpl.java (100%) rename {rxjava => rxjava-core}/src/main/java/com/baeldung/rxjava/ObservableImpl.java (100%) rename {rxjava => rxjava-core}/src/main/java/com/baeldung/rxjava/ResourceManagement.java (100%) rename {rxjava => rxjava-core}/src/main/java/com/baeldung/rxjava/SingleImpl.java (100%) rename {rxjava => rxjava-core}/src/main/java/com/baeldung/rxjava/SubjectImpl.java (100%) rename {rxjava-2 => rxjava-core}/src/main/resources/logback.xml (100%) rename {rxjava-2 => rxjava-core}/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java (100%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/ConnectableObservableIntegrationTest.java (100%) rename {rxjava-2 => rxjava-core}/src/test/java/com/baeldung/rxjava/MaybeUnitTest.java (100%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/ObservableUnitTest.java (100%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/ResourceManagementUnitTest.java (100%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/RxJavaBackpressureLongRunningUnitTest.java (100%) rename {rxjava-2 => rxjava-core}/src/test/java/com/baeldung/rxjava/RxJavaHooksManualTest.java (96%) rename {rxjava-2 => rxjava-core}/src/test/java/com/baeldung/rxjava/RxJavaHooksUnitTest.java (96%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/RxJavaUnitTest.java (100%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/SchedulersLiveTest.java (100%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/SingleUnitTest.java (100%) rename {rxjava => rxjava-core}/src/test/java/com/baeldung/rxjava/SubjectUnitTest.java (100%) rename {rxjava-2 => rxjava-core}/src/test/java/com/baeldung/rxjava/onerror/ExceptionHandlingIntegrationTest.java (100%) rename {rxjava-2 => rxjava-core}/src/test/java/com/baeldung/rxjava/onerror/OnErrorRetryIntegrationTest.java (100%) create mode 100644 rxjava-libraries/README.md create mode 100644 rxjava-libraries/pom.xml rename {rxjava-2 => rxjava-libraries}/src/main/java/com/baeldung/rxjava/RandomRelay.java (100%) rename {rxjava => rxjava-libraries}/src/main/java/com/baeldung/rxjava/jdbc/Connector.java (100%) rename {rxjava => rxjava-libraries}/src/main/java/com/baeldung/rxjava/jdbc/Employee.java (100%) rename {rxjava => rxjava-libraries}/src/main/java/com/baeldung/rxjava/jdbc/Manager.java (100%) rename {rxjava => rxjava-libraries}/src/main/java/com/baeldung/rxjava/jdbc/Utils.java (100%) rename {rxjava-2 => rxjava-libraries}/src/test/java/com/baeldung/rxjava/FlowableIntegrationTest.java (100%) rename {rxjava-2 => rxjava-libraries}/src/test/java/com/baeldung/rxjava/RxRelayIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/java/com/baeldung/rxjava/jdbc/AutomapClassIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/java/com/baeldung/rxjava/jdbc/AutomapInterfaceIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/java/com/baeldung/rxjava/jdbc/BasicQueryTypesIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/java/com/baeldung/rxjava/jdbc/InsertBlobIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/java/com/baeldung/rxjava/jdbc/InsertClobIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/java/com/baeldung/rxjava/jdbc/ReturnKeysIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/java/com/baeldung/rxjava/jdbc/TransactionIntegrationTest.java (100%) rename {rxjava => rxjava-libraries}/src/test/resources/actual_clob (100%) rename {rxjava => rxjava-libraries}/src/test/resources/expected_clob (100%) create mode 100644 rxjava-observables/README.md create mode 100644 rxjava-observables/pom.xml rename {rxjava => rxjava-observables}/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java (100%) rename {rxjava => rxjava-observables}/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java (100%) rename {rxjava => rxjava-observables}/src/test/java/com/baeldung/rxjava/combine/ObservableCombineUnitTest.java (100%) rename {rxjava => rxjava-observables}/src/test/java/com/baeldung/rxjava/filters/RxJavaFilterOperatorsIntegrationTest.java (100%) rename {rxjava => rxjava-observables}/src/test/java/com/baeldung/rxjava/filters/RxJavaSkipOperatorsIntegrationTest.java (100%) rename {rxjava => rxjava-observables}/src/test/java/com/baeldung/rxjava/filters/RxJavaTimeFilteringOperatorsIntegrationTest.java (100%) rename {rxjava => rxjava-observables}/src/test/java/com/baeldung/rxjava/operators/RxStringOperatorsUnitTest.java (100%) create mode 100644 rxjava-operators/README.md rename {rxjava => rxjava-operators}/pom.xml (66%) rename {rxjava => rxjava-operators}/src/main/java/com/baeldung/rxjava/operator/ToCleanString.java (100%) rename {rxjava => rxjava-operators}/src/main/java/com/baeldung/rxjava/operator/ToLength.java (100%) rename {rxjava-2 => rxjava-operators}/src/test/java/com/baeldung/rxjava/AsyncAndSyncToObservableIntegrationTest.java (96%) rename {rxjava => rxjava-operators}/src/test/java/com/baeldung/rxjava/RxJavaCustomOperatorUnitTest.java (100%) rename {rxjava => rxjava-operators}/src/test/java/com/baeldung/rxjava/UtilityOperatorsIntegrationTest.java (100%) rename {rxjava => rxjava-operators}/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsUnitTest.java (100%) rename {rxjava-2 => rxjava-operators}/src/test/java/com/baeldung/rxjava/operators/RxFlatmapAndSwitchmapUnitTest.java (100%) rename {rxjava => rxjava-operators}/src/test/java/com/baeldung/rxjava/operators/RxMathematicalOperatorsUnitTest.java (100%) delete mode 100644 rxjava/README.md delete mode 100644 rxjava/src/main/resources/logback.xml diff --git a/pom.xml b/pom.xml index f5776731c9..1cf3eac3ba 100644 --- a/pom.xml +++ b/pom.xml @@ -603,8 +603,10 @@ rule-engines rsocket - rxjava - rxjava-2 + rxjava-core + rxjava-observables + rxjava-operators + rxjava-libraries software-security/sql-injection-samples tensorflow-java @@ -1369,8 +1371,10 @@ rule-engines rsocket - rxjava - rxjava-2 + rxjava-core + rxjava-observables + rxjava-operators + rxjava-libraries oauth2-framework-impl spf4j spring-boot-performance diff --git a/rxjava-2/README.md b/rxjava-2/README.md deleted file mode 100644 index 87f606a323..0000000000 --- a/rxjava-2/README.md +++ /dev/null @@ -1,14 +0,0 @@ -## RxJava - -This module contains articles about RxJava. - -### Relevant articles: - -- [RxJava and Error Handling](https://www.baeldung.com/rxjava-error-handling) -- [RxJava 2 – Flowable](https://www.baeldung.com/rxjava-2-flowable) -- [RxJava Maybe](https://www.baeldung.com/rxjava-maybe) -- [Introduction to RxRelay for RxJava](https://www.baeldung.com/rx-relay) -- [Combining RxJava Completables](https://www.baeldung.com/rxjava-completable) -- [Converting Synchronous and Asynchronous APIs to Observables using RxJava2](https://www.baeldung.com/rxjava-apis-to-observables) -- [RxJava Hooks](https://www.baeldung.com/rxjava-hooks) -- More articles: [[<-- prev]](/rxjava) diff --git a/rxjava-2/pom.xml b/rxjava-2/pom.xml deleted file mode 100644 index 47d16ec8dd..0000000000 --- a/rxjava-2/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - 4.0.0 - rxjava-2 - rxjava-2 - 1.0-SNAPSHOT - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - io.reactivex.rxjava2 - rxjava - ${rx.java2.version} - - - com.jayway.awaitility - awaitility - ${awaitility.version} - - - org.assertj - assertj-core - ${assertj.version} - - - com.jakewharton.rxrelay2 - rxrelay - ${rxrelay.version} - - - - com.github.akarnokd - rxjava2-extensions - ${rxjava2.ext.version} - - - - - 3.8.0 - 2.2.2 - 1.7.0 - 2.0.0 - 0.20.4 - - \ No newline at end of file diff --git a/rxjava-core/README.md b/rxjava-core/README.md new file mode 100644 index 0000000000..2773bd9423 --- /dev/null +++ b/rxjava-core/README.md @@ -0,0 +1,16 @@ +## RxJava + +This module contains articles about RxJava. + +### Relevant articles: + +- [Dealing with Backpressure with RxJava](https://www.baeldung.com/rxjava-backpressure) +- [How to Test RxJava?](https://www.baeldung.com/rxjava-testing) +- [Introduction to RxJava](https://www.baeldung.com/rx-java) +- [Schedulers in RxJava](https://www.baeldung.com/rxjava-schedulers) +- [Difference Between Flatmap and Switchmap in RxJava](https://www.baeldung.com/rxjava-flatmap-switchmap) +- [RxJava and Error Handling](https://www.baeldung.com/rxjava-error-handling) +- [RxJava Maybe](https://www.baeldung.com/rxjava-maybe) +- [Combining RxJava Completables](https://www.baeldung.com/rxjava-completable) +- [RxJava Hooks](https://www.baeldung.com/rxjava-hooks) +- More articles: [[next -->]](/rxjava-2) diff --git a/rxjava-core/pom.xml b/rxjava-core/pom.xml new file mode 100644 index 0000000000..401ad83808 --- /dev/null +++ b/rxjava-core/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + rxjava-core + 1.0-SNAPSHOT + rxjava-core + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + io.reactivex + rxjava + ${rx.java.version} + + + io.reactivex.rxjava2 + rxjava + ${rx.java2.version} + + + com.jayway.awaitility + awaitility + ${awaitility.version} + + + org.assertj + assertj-core + ${assertj.version} + + + + + 3.8.0 + 1.2.5 + 1.7.0 + 2.2.2 + + + \ No newline at end of file diff --git a/rxjava/src/main/java/com/baeldung/rxjava/ComputeFunction.java b/rxjava-core/src/main/java/com/baeldung/rxjava/ComputeFunction.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/ComputeFunction.java rename to rxjava-core/src/main/java/com/baeldung/rxjava/ComputeFunction.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/ConnectableObservableImpl.java b/rxjava-core/src/main/java/com/baeldung/rxjava/ConnectableObservableImpl.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/ConnectableObservableImpl.java rename to rxjava-core/src/main/java/com/baeldung/rxjava/ConnectableObservableImpl.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/ObservableImpl.java b/rxjava-core/src/main/java/com/baeldung/rxjava/ObservableImpl.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/ObservableImpl.java rename to rxjava-core/src/main/java/com/baeldung/rxjava/ObservableImpl.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/ResourceManagement.java b/rxjava-core/src/main/java/com/baeldung/rxjava/ResourceManagement.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/ResourceManagement.java rename to rxjava-core/src/main/java/com/baeldung/rxjava/ResourceManagement.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/SingleImpl.java b/rxjava-core/src/main/java/com/baeldung/rxjava/SingleImpl.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/SingleImpl.java rename to rxjava-core/src/main/java/com/baeldung/rxjava/SingleImpl.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/SubjectImpl.java b/rxjava-core/src/main/java/com/baeldung/rxjava/SubjectImpl.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/SubjectImpl.java rename to rxjava-core/src/main/java/com/baeldung/rxjava/SubjectImpl.java diff --git a/rxjava-2/src/main/resources/logback.xml b/rxjava-core/src/main/resources/logback.xml similarity index 100% rename from rxjava-2/src/main/resources/logback.xml rename to rxjava-core/src/main/resources/logback.xml diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java similarity index 100% rename from rxjava-2/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/ConnectableObservableIntegrationTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/ConnectableObservableIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/ConnectableObservableIntegrationTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/ConnectableObservableIntegrationTest.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/MaybeUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/MaybeUnitTest.java similarity index 100% rename from rxjava-2/src/test/java/com/baeldung/rxjava/MaybeUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/MaybeUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/ObservableUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/ObservableUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/ObservableUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/ObservableUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/ResourceManagementUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/ResourceManagementUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/ResourceManagementUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/ResourceManagementUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/RxJavaBackpressureLongRunningUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaBackpressureLongRunningUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/RxJavaBackpressureLongRunningUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaBackpressureLongRunningUnitTest.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/RxJavaHooksManualTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaHooksManualTest.java similarity index 96% rename from rxjava-2/src/test/java/com/baeldung/rxjava/RxJavaHooksManualTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaHooksManualTest.java index b79fa9af22..f71d9e8839 100644 --- a/rxjava-2/src/test/java/com/baeldung/rxjava/RxJavaHooksManualTest.java +++ b/rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaHooksManualTest.java @@ -1,84 +1,84 @@ -package com.baeldung.rxjava; - -import static org.junit.Assert.assertTrue; - -import org.junit.After; -import org.junit.Test; - -import io.reactivex.Observable; -import io.reactivex.plugins.RxJavaPlugins; -import io.reactivex.schedulers.Schedulers; - -public class RxJavaHooksManualTest { - - private boolean initHookCalled = false; - private boolean hookCalled = false; - - @Test - public void givenIOScheduler_whenCalled_shouldExecuteTheHooks() { - - RxJavaPlugins.setInitIoSchedulerHandler((scheduler) -> { - initHookCalled = true; - return scheduler.call(); - }); - - RxJavaPlugins.setIoSchedulerHandler((scheduler) -> { - hookCalled = true; - return scheduler; - }); - - Observable.range(1, 10) - .map(v -> v * 2) - .subscribeOn(Schedulers.io()) - .test(); - assertTrue(hookCalled && initHookCalled); - } - - @Test - public void givenNewThreadScheduler_whenCalled_shouldExecuteTheHook() { - - RxJavaPlugins.setInitNewThreadSchedulerHandler((scheduler) -> { - initHookCalled = true; - return scheduler.call(); - }); - - RxJavaPlugins.setNewThreadSchedulerHandler((scheduler) -> { - hookCalled = true; - return scheduler; - }); - - Observable.range(1, 15) - .map(v -> v * 2) - .subscribeOn(Schedulers.newThread()) - .test(); - assertTrue(hookCalled && initHookCalled); - } - - @Test - public void givenSingleScheduler_whenCalled_shouldExecuteTheHooks() { - - RxJavaPlugins.setInitSingleSchedulerHandler((scheduler) -> { - initHookCalled = true; - return scheduler.call(); - }); - - RxJavaPlugins.setSingleSchedulerHandler((scheduler) -> { - hookCalled = true; - return scheduler; - }); - - Observable.range(1, 10) - .map(v -> v * 2) - .subscribeOn(Schedulers.single()) - .test(); - assertTrue(hookCalled && initHookCalled); - - } - - @After - public void reset() { - hookCalled = false; - initHookCalled = false; - RxJavaPlugins.reset(); - } -} +package com.baeldung.rxjava; + +import static org.junit.Assert.assertTrue; + +import org.junit.After; +import org.junit.Test; + +import io.reactivex.Observable; +import io.reactivex.plugins.RxJavaPlugins; +import io.reactivex.schedulers.Schedulers; + +public class RxJavaHooksManualTest { + + private boolean initHookCalled = false; + private boolean hookCalled = false; + + @Test + public void givenIOScheduler_whenCalled_shouldExecuteTheHooks() { + + RxJavaPlugins.setInitIoSchedulerHandler((scheduler) -> { + initHookCalled = true; + return scheduler.call(); + }); + + RxJavaPlugins.setIoSchedulerHandler((scheduler) -> { + hookCalled = true; + return scheduler; + }); + + Observable.range(1, 10) + .map(v -> v * 2) + .subscribeOn(Schedulers.io()) + .test(); + assertTrue(hookCalled && initHookCalled); + } + + @Test + public void givenNewThreadScheduler_whenCalled_shouldExecuteTheHook() { + + RxJavaPlugins.setInitNewThreadSchedulerHandler((scheduler) -> { + initHookCalled = true; + return scheduler.call(); + }); + + RxJavaPlugins.setNewThreadSchedulerHandler((scheduler) -> { + hookCalled = true; + return scheduler; + }); + + Observable.range(1, 15) + .map(v -> v * 2) + .subscribeOn(Schedulers.newThread()) + .test(); + assertTrue(hookCalled && initHookCalled); + } + + @Test + public void givenSingleScheduler_whenCalled_shouldExecuteTheHooks() { + + RxJavaPlugins.setInitSingleSchedulerHandler((scheduler) -> { + initHookCalled = true; + return scheduler.call(); + }); + + RxJavaPlugins.setSingleSchedulerHandler((scheduler) -> { + hookCalled = true; + return scheduler; + }); + + Observable.range(1, 10) + .map(v -> v * 2) + .subscribeOn(Schedulers.single()) + .test(); + assertTrue(hookCalled && initHookCalled); + + } + + @After + public void reset() { + hookCalled = false; + initHookCalled = false; + RxJavaPlugins.reset(); + } +} diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/RxJavaHooksUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaHooksUnitTest.java similarity index 96% rename from rxjava-2/src/test/java/com/baeldung/rxjava/RxJavaHooksUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaHooksUnitTest.java index dd4287a4a9..cea6cc70f6 100644 --- a/rxjava-2/src/test/java/com/baeldung/rxjava/RxJavaHooksUnitTest.java +++ b/rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaHooksUnitTest.java @@ -1,244 +1,244 @@ -package com.baeldung.rxjava; - -import static org.junit.Assert.assertTrue; - -import org.junit.After; -import org.junit.Test; - -import io.reactivex.Completable; -import io.reactivex.Flowable; -import io.reactivex.Maybe; -import io.reactivex.Observable; -import io.reactivex.Single; -import io.reactivex.flowables.ConnectableFlowable; -import io.reactivex.observables.ConnectableObservable; -import io.reactivex.plugins.RxJavaPlugins; -import io.reactivex.schedulers.Schedulers; - -public class RxJavaHooksUnitTest { - - private boolean initHookCalled = false; - private boolean hookCalled = false; - - @Test - public void givenObservable_whenError_shouldExecuteTheHook() { - RxJavaPlugins.setErrorHandler(throwable -> { - hookCalled = true; - }); - - Observable.error(new IllegalStateException()) - .subscribe(); - assertTrue(hookCalled); - } - - @Test - public void givenCompletable_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnCompletableAssembly(completable -> { - hookCalled = true; - return completable; - }); - Completable.fromSingle(Single.just(1)); - assertTrue(hookCalled); - } - - @Test - public void givenCompletable_whenSubscribed_shouldExecuteTheHook() { - - RxJavaPlugins.setOnCompletableSubscribe((completable, observer) -> { - hookCalled = true; - return observer; - }); - - Completable.fromSingle(Single.just(1)) - .test(); - assertTrue(hookCalled); - } - - @Test - public void givenObservable_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnObservableAssembly(observable -> { - hookCalled = true; - return observable; - }); - - Observable.range(1, 10); - assertTrue(hookCalled); - } - - @Test - public void givenObservable_whenSubscribed_shouldExecuteTheHook() { - - RxJavaPlugins.setOnObservableSubscribe((observable, observer) -> { - hookCalled = true; - return observer; - }); - - Observable.range(1, 10) - .test(); - assertTrue(hookCalled); - } - - @Test - public void givenConnectableObservable_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnConnectableObservableAssembly(connectableObservable -> { - hookCalled = true; - return connectableObservable; - }); - - ConnectableObservable.range(1, 10) - .publish() - .connect(); - assertTrue(hookCalled); - } - - @Test - public void givenFlowable_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnFlowableAssembly(flowable -> { - hookCalled = true; - return flowable; - }); - - Flowable.range(1, 10); - assertTrue(hookCalled); - } - - @Test - public void givenFlowable_whenSubscribed_shouldExecuteTheHook() { - - RxJavaPlugins.setOnFlowableSubscribe((flowable, observer) -> { - hookCalled = true; - return observer; - }); - - Flowable.range(1, 10) - .test(); - assertTrue(hookCalled); - } - - @Test - public void givenConnectableFlowable_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnConnectableFlowableAssembly(connectableFlowable -> { - hookCalled = true; - return connectableFlowable; - }); - - ConnectableFlowable.range(1, 10) - .publish() - .connect(); - assertTrue(hookCalled); - } - - @Test - public void givenParallel_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnParallelAssembly(parallelFlowable -> { - hookCalled = true; - return parallelFlowable; - }); - - Flowable.range(1, 10) - .parallel(); - assertTrue(hookCalled); - } - - @Test - public void givenMaybe_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnMaybeAssembly(maybe -> { - hookCalled = true; - return maybe; - }); - - Maybe.just(1); - assertTrue(hookCalled); - } - - @Test - public void givenMaybe_whenSubscribed_shouldExecuteTheHook() { - - RxJavaPlugins.setOnMaybeSubscribe((maybe, observer) -> { - hookCalled = true; - return observer; - }); - - Maybe.just(1) - .test(); - assertTrue(hookCalled); - } - - @Test - public void givenSingle_whenAssembled_shouldExecuteTheHook() { - - RxJavaPlugins.setOnSingleAssembly(single -> { - hookCalled = true; - return single; - }); - - Single.just(1); - assertTrue(hookCalled); - } - - @Test - public void givenSingle_whenSubscribed_shouldExecuteTheHook() { - - RxJavaPlugins.setOnSingleSubscribe((single, observer) -> { - hookCalled = true; - return observer; - }); - - Single.just(1) - .test(); - assertTrue(hookCalled); - } - - @Test - public void givenAnyScheduler_whenCalled_shouldExecuteTheHook() { - - RxJavaPlugins.setScheduleHandler((runnable) -> { - hookCalled = true; - return runnable; - }); - - Observable.range(1, 10) - .map(v -> v * 2) - .subscribeOn(Schedulers.single()) - .test(); - hookCalled = false; - Observable.range(1, 10) - .map(v -> v * 2) - .subscribeOn(Schedulers.computation()) - .test(); - assertTrue(hookCalled); - } - - @Test - public void givenComputationScheduler_whenCalled_shouldExecuteTheHooks() { - - RxJavaPlugins.setInitComputationSchedulerHandler((scheduler) -> { - initHookCalled = true; - return scheduler.call(); - }); - RxJavaPlugins.setComputationSchedulerHandler((scheduler) -> { - hookCalled = true; - return scheduler; - }); - - Observable.range(1, 10) - .map(v -> v * 2) - .subscribeOn(Schedulers.computation()) - .test(); - assertTrue(hookCalled && initHookCalled); - } - - @After - public void reset() { - initHookCalled = false; - hookCalled = false; - RxJavaPlugins.reset(); - } -} +package com.baeldung.rxjava; + +import static org.junit.Assert.assertTrue; + +import org.junit.After; +import org.junit.Test; + +import io.reactivex.Completable; +import io.reactivex.Flowable; +import io.reactivex.Maybe; +import io.reactivex.Observable; +import io.reactivex.Single; +import io.reactivex.flowables.ConnectableFlowable; +import io.reactivex.observables.ConnectableObservable; +import io.reactivex.plugins.RxJavaPlugins; +import io.reactivex.schedulers.Schedulers; + +public class RxJavaHooksUnitTest { + + private boolean initHookCalled = false; + private boolean hookCalled = false; + + @Test + public void givenObservable_whenError_shouldExecuteTheHook() { + RxJavaPlugins.setErrorHandler(throwable -> { + hookCalled = true; + }); + + Observable.error(new IllegalStateException()) + .subscribe(); + assertTrue(hookCalled); + } + + @Test + public void givenCompletable_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnCompletableAssembly(completable -> { + hookCalled = true; + return completable; + }); + Completable.fromSingle(Single.just(1)); + assertTrue(hookCalled); + } + + @Test + public void givenCompletable_whenSubscribed_shouldExecuteTheHook() { + + RxJavaPlugins.setOnCompletableSubscribe((completable, observer) -> { + hookCalled = true; + return observer; + }); + + Completable.fromSingle(Single.just(1)) + .test(); + assertTrue(hookCalled); + } + + @Test + public void givenObservable_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnObservableAssembly(observable -> { + hookCalled = true; + return observable; + }); + + Observable.range(1, 10); + assertTrue(hookCalled); + } + + @Test + public void givenObservable_whenSubscribed_shouldExecuteTheHook() { + + RxJavaPlugins.setOnObservableSubscribe((observable, observer) -> { + hookCalled = true; + return observer; + }); + + Observable.range(1, 10) + .test(); + assertTrue(hookCalled); + } + + @Test + public void givenConnectableObservable_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnConnectableObservableAssembly(connectableObservable -> { + hookCalled = true; + return connectableObservable; + }); + + ConnectableObservable.range(1, 10) + .publish() + .connect(); + assertTrue(hookCalled); + } + + @Test + public void givenFlowable_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnFlowableAssembly(flowable -> { + hookCalled = true; + return flowable; + }); + + Flowable.range(1, 10); + assertTrue(hookCalled); + } + + @Test + public void givenFlowable_whenSubscribed_shouldExecuteTheHook() { + + RxJavaPlugins.setOnFlowableSubscribe((flowable, observer) -> { + hookCalled = true; + return observer; + }); + + Flowable.range(1, 10) + .test(); + assertTrue(hookCalled); + } + + @Test + public void givenConnectableFlowable_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnConnectableFlowableAssembly(connectableFlowable -> { + hookCalled = true; + return connectableFlowable; + }); + + ConnectableFlowable.range(1, 10) + .publish() + .connect(); + assertTrue(hookCalled); + } + + @Test + public void givenParallel_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnParallelAssembly(parallelFlowable -> { + hookCalled = true; + return parallelFlowable; + }); + + Flowable.range(1, 10) + .parallel(); + assertTrue(hookCalled); + } + + @Test + public void givenMaybe_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnMaybeAssembly(maybe -> { + hookCalled = true; + return maybe; + }); + + Maybe.just(1); + assertTrue(hookCalled); + } + + @Test + public void givenMaybe_whenSubscribed_shouldExecuteTheHook() { + + RxJavaPlugins.setOnMaybeSubscribe((maybe, observer) -> { + hookCalled = true; + return observer; + }); + + Maybe.just(1) + .test(); + assertTrue(hookCalled); + } + + @Test + public void givenSingle_whenAssembled_shouldExecuteTheHook() { + + RxJavaPlugins.setOnSingleAssembly(single -> { + hookCalled = true; + return single; + }); + + Single.just(1); + assertTrue(hookCalled); + } + + @Test + public void givenSingle_whenSubscribed_shouldExecuteTheHook() { + + RxJavaPlugins.setOnSingleSubscribe((single, observer) -> { + hookCalled = true; + return observer; + }); + + Single.just(1) + .test(); + assertTrue(hookCalled); + } + + @Test + public void givenAnyScheduler_whenCalled_shouldExecuteTheHook() { + + RxJavaPlugins.setScheduleHandler((runnable) -> { + hookCalled = true; + return runnable; + }); + + Observable.range(1, 10) + .map(v -> v * 2) + .subscribeOn(Schedulers.single()) + .test(); + hookCalled = false; + Observable.range(1, 10) + .map(v -> v * 2) + .subscribeOn(Schedulers.computation()) + .test(); + assertTrue(hookCalled); + } + + @Test + public void givenComputationScheduler_whenCalled_shouldExecuteTheHooks() { + + RxJavaPlugins.setInitComputationSchedulerHandler((scheduler) -> { + initHookCalled = true; + return scheduler.call(); + }); + RxJavaPlugins.setComputationSchedulerHandler((scheduler) -> { + hookCalled = true; + return scheduler; + }); + + Observable.range(1, 10) + .map(v -> v * 2) + .subscribeOn(Schedulers.computation()) + .test(); + assertTrue(hookCalled && initHookCalled); + } + + @After + public void reset() { + initHookCalled = false; + hookCalled = false; + RxJavaPlugins.reset(); + } +} diff --git a/rxjava/src/test/java/com/baeldung/rxjava/RxJavaUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/RxJavaUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/RxJavaUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/SchedulersLiveTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/SchedulersLiveTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/SchedulersLiveTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/SchedulersLiveTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/SingleUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/SingleUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/SingleUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/SingleUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/SubjectUnitTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/SubjectUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/SubjectUnitTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/SubjectUnitTest.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/onerror/ExceptionHandlingIntegrationTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/onerror/ExceptionHandlingIntegrationTest.java similarity index 100% rename from rxjava-2/src/test/java/com/baeldung/rxjava/onerror/ExceptionHandlingIntegrationTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/onerror/ExceptionHandlingIntegrationTest.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/onerror/OnErrorRetryIntegrationTest.java b/rxjava-core/src/test/java/com/baeldung/rxjava/onerror/OnErrorRetryIntegrationTest.java similarity index 100% rename from rxjava-2/src/test/java/com/baeldung/rxjava/onerror/OnErrorRetryIntegrationTest.java rename to rxjava-core/src/test/java/com/baeldung/rxjava/onerror/OnErrorRetryIntegrationTest.java diff --git a/rxjava-libraries/README.md b/rxjava-libraries/README.md new file mode 100644 index 0000000000..ac8aac6908 --- /dev/null +++ b/rxjava-libraries/README.md @@ -0,0 +1,10 @@ +## RxJava Libraries + + This module contains articles about RxJava libraries + +### Related Articles: + +- [RxJava 2 – Flowable](https://www.baeldung.com/rxjava-2-flowable) +- [Introduction to RxRelay for RxJava](https://www.baeldung.com/rx-relay) +- [Introduction to rxjava-jdbc](https://www.baeldung.com/rxjava-jdbc) + diff --git a/rxjava-libraries/pom.xml b/rxjava-libraries/pom.xml new file mode 100644 index 0000000000..541d9116c8 --- /dev/null +++ b/rxjava-libraries/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + rxjava-libraries + 1.0-SNAPSHOT + rxjava-libraries + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + io.reactivex + rxjava + ${rx.java.version} + + + io.reactivex.rxjava2 + rxjava + ${rx.java2.version} + + + com.jakewharton.rxrelay2 + rxrelay + ${rxrelay.version} + + + com.github.davidmoten + rxjava-jdbc + ${rx.java.jdbc.version} + + + com.h2database + h2 + ${h2.version} + runtime + + + org.assertj + assertj-core + ${assertj.version} + + + + + + 0.7.11 + 1.2.5 + 2.0.0 + 2.2.2 + 3.8.0 + + + \ No newline at end of file diff --git a/rxjava-2/src/main/java/com/baeldung/rxjava/RandomRelay.java b/rxjava-libraries/src/main/java/com/baeldung/rxjava/RandomRelay.java similarity index 100% rename from rxjava-2/src/main/java/com/baeldung/rxjava/RandomRelay.java rename to rxjava-libraries/src/main/java/com/baeldung/rxjava/RandomRelay.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/jdbc/Connector.java b/rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Connector.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/jdbc/Connector.java rename to rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Connector.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/jdbc/Employee.java b/rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Employee.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/jdbc/Employee.java rename to rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Employee.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/jdbc/Manager.java b/rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Manager.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/jdbc/Manager.java rename to rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Manager.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/jdbc/Utils.java b/rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Utils.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/jdbc/Utils.java rename to rxjava-libraries/src/main/java/com/baeldung/rxjava/jdbc/Utils.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/FlowableIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/FlowableIntegrationTest.java similarity index 100% rename from rxjava-2/src/test/java/com/baeldung/rxjava/FlowableIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/FlowableIntegrationTest.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/RxRelayIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/RxRelayIntegrationTest.java similarity index 100% rename from rxjava-2/src/test/java/com/baeldung/rxjava/RxRelayIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/RxRelayIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/jdbc/AutomapClassIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/AutomapClassIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/jdbc/AutomapClassIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/AutomapClassIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/jdbc/AutomapInterfaceIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/AutomapInterfaceIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/jdbc/AutomapInterfaceIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/AutomapInterfaceIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/jdbc/BasicQueryTypesIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/BasicQueryTypesIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/jdbc/BasicQueryTypesIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/BasicQueryTypesIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/jdbc/InsertBlobIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/InsertBlobIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/jdbc/InsertBlobIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/InsertBlobIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/jdbc/InsertClobIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/InsertClobIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/jdbc/InsertClobIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/InsertClobIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/jdbc/ReturnKeysIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/ReturnKeysIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/jdbc/ReturnKeysIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/ReturnKeysIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/jdbc/TransactionIntegrationTest.java b/rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/TransactionIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/jdbc/TransactionIntegrationTest.java rename to rxjava-libraries/src/test/java/com/baeldung/rxjava/jdbc/TransactionIntegrationTest.java diff --git a/rxjava/src/test/resources/actual_clob b/rxjava-libraries/src/test/resources/actual_clob similarity index 100% rename from rxjava/src/test/resources/actual_clob rename to rxjava-libraries/src/test/resources/actual_clob diff --git a/rxjava/src/test/resources/expected_clob b/rxjava-libraries/src/test/resources/expected_clob similarity index 100% rename from rxjava/src/test/resources/expected_clob rename to rxjava-libraries/src/test/resources/expected_clob diff --git a/rxjava-observables/README.md b/rxjava-observables/README.md new file mode 100644 index 0000000000..3bec990012 --- /dev/null +++ b/rxjava-observables/README.md @@ -0,0 +1,11 @@ +## RxJava Observables + + This module contains articles about RxJava Observables + +### Related Articles: + +- [Combining Observables in RxJava](https://www.baeldung.com/rxjava-combine-observables) +- [RxJava One Observable, Multiple Subscribers](https://www.baeldung.com/rxjava-multiple-subscribers-observable) +- [RxJava StringObservable](https://www.baeldung.com/rxjava-string) +- [Filtering Observables in RxJava](https://www.baeldung.com/rxjava-filtering) + diff --git a/rxjava-observables/pom.xml b/rxjava-observables/pom.xml new file mode 100644 index 0000000000..c2bf0bcd88 --- /dev/null +++ b/rxjava-observables/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + rxjava-observables + 1.0-SNAPSHOT + rxjava-observables + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + io.reactivex + rxjava + ${rx.java.version} + + + io.reactivex + rxjava-string + ${rx.java.string.version} + + + org.assertj + assertj-core + ${assertj.version} + + + + + + 1.1.1 + 1.2.5 + 3.8.0 + + + \ No newline at end of file diff --git a/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java b/rxjava-observables/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java rename to rxjava-observables/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java b/rxjava-observables/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java rename to rxjava-observables/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/combine/ObservableCombineUnitTest.java b/rxjava-observables/src/test/java/com/baeldung/rxjava/combine/ObservableCombineUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/combine/ObservableCombineUnitTest.java rename to rxjava-observables/src/test/java/com/baeldung/rxjava/combine/ObservableCombineUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/filters/RxJavaFilterOperatorsIntegrationTest.java b/rxjava-observables/src/test/java/com/baeldung/rxjava/filters/RxJavaFilterOperatorsIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/filters/RxJavaFilterOperatorsIntegrationTest.java rename to rxjava-observables/src/test/java/com/baeldung/rxjava/filters/RxJavaFilterOperatorsIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/filters/RxJavaSkipOperatorsIntegrationTest.java b/rxjava-observables/src/test/java/com/baeldung/rxjava/filters/RxJavaSkipOperatorsIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/filters/RxJavaSkipOperatorsIntegrationTest.java rename to rxjava-observables/src/test/java/com/baeldung/rxjava/filters/RxJavaSkipOperatorsIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/filters/RxJavaTimeFilteringOperatorsIntegrationTest.java b/rxjava-observables/src/test/java/com/baeldung/rxjava/filters/RxJavaTimeFilteringOperatorsIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/filters/RxJavaTimeFilteringOperatorsIntegrationTest.java rename to rxjava-observables/src/test/java/com/baeldung/rxjava/filters/RxJavaTimeFilteringOperatorsIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/operators/RxStringOperatorsUnitTest.java b/rxjava-observables/src/test/java/com/baeldung/rxjava/operators/RxStringOperatorsUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/operators/RxStringOperatorsUnitTest.java rename to rxjava-observables/src/test/java/com/baeldung/rxjava/operators/RxStringOperatorsUnitTest.java diff --git a/rxjava-operators/README.md b/rxjava-operators/README.md new file mode 100644 index 0000000000..293d310bbd --- /dev/null +++ b/rxjava-operators/README.md @@ -0,0 +1,12 @@ +## RxJava Operators + + This module contains articles about RxJava Operators + +### Related Articles: + +- [Mathematical and Aggregate Operators in RxJava](https://www.baeldung.com/rxjava-math) +- [Observable Utility Operators in RxJava](https://www.baeldung.com/rxjava-observable-operators) +- [Implementing Custom Operators in RxJava](https://www.baeldung.com/rxjava-custom-operators) +- [Converting Synchronous and Asynchronous APIs to Observables using RxJava2](https://www.baeldung.com/rxjava-apis-to-observables) + + diff --git a/rxjava/pom.xml b/rxjava-operators/pom.xml similarity index 66% rename from rxjava/pom.xml rename to rxjava-operators/pom.xml index 85106d1127..8064613f45 100644 --- a/rxjava/pom.xml +++ b/rxjava-operators/pom.xml @@ -1,11 +1,11 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - rxjava + rxjava-operators 1.0-SNAPSHOT - rxjava - + rxjava-operators + com.baeldung parent-java @@ -19,48 +19,40 @@ rxjava ${rx.java.version} - - io.reactivex - rxjava-math - ${rx.java.math.version} + io.reactivex.rxjava2 + rxjava + ${rx.java2.version} - + - io.reactivex - rxjava-string - ${rx.java.string.version} - - - - com.jayway.awaitility - awaitility - ${awaitility.version} - - - com.github.davidmoten - rxjava-jdbc - ${rx.java.jdbc.version} - - - com.h2database - h2 - ${h2.version} - runtime + com.github.akarnokd + rxjava2-extensions + ${rxjava2.ext.version} org.assertj assertj-core ${assertj.version} + + io.reactivex + rxjava-math + ${rx.java.math.version} + + + com.jayway.awaitility + awaitility + ${awaitility.version} + + 0.20.4 + 2.2.2 3.8.0 1.2.5 - 0.7.11 1.0.0 - 1.1.1 1.7.0 diff --git a/rxjava/src/main/java/com/baeldung/rxjava/operator/ToCleanString.java b/rxjava-operators/src/main/java/com/baeldung/rxjava/operator/ToCleanString.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/operator/ToCleanString.java rename to rxjava-operators/src/main/java/com/baeldung/rxjava/operator/ToCleanString.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/operator/ToLength.java b/rxjava-operators/src/main/java/com/baeldung/rxjava/operator/ToLength.java similarity index 100% rename from rxjava/src/main/java/com/baeldung/rxjava/operator/ToLength.java rename to rxjava-operators/src/main/java/com/baeldung/rxjava/operator/ToLength.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/AsyncAndSyncToObservableIntegrationTest.java b/rxjava-operators/src/test/java/com/baeldung/rxjava/AsyncAndSyncToObservableIntegrationTest.java similarity index 96% rename from rxjava-2/src/test/java/com/baeldung/rxjava/AsyncAndSyncToObservableIntegrationTest.java rename to rxjava-operators/src/test/java/com/baeldung/rxjava/AsyncAndSyncToObservableIntegrationTest.java index 90f4fe94ae..2842fab80e 100644 --- a/rxjava-2/src/test/java/com/baeldung/rxjava/AsyncAndSyncToObservableIntegrationTest.java +++ b/rxjava-operators/src/test/java/com/baeldung/rxjava/AsyncAndSyncToObservableIntegrationTest.java @@ -1,107 +1,107 @@ -package com.baeldung.rxjava; - -import static org.junit.Assert.assertEquals; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -import org.junit.Test; - -import hu.akarnokd.rxjava2.async.AsyncObservable; -import io.reactivex.Observable; - -public class AsyncAndSyncToObservableIntegrationTest { - - AtomicInteger counter = new AtomicInteger(); - Callable callable = () -> counter.incrementAndGet(); - - /* Method will execute every time it gets subscribed*/ - @Test - public void givenSyncMethod_whenConvertedWithFromCallable_thenReturnObservable() { - - Observable source = Observable.fromCallable(callable); - - for (int i = 1; i < 5; i++) { - source.test() - .awaitDone(5, TimeUnit.SECONDS) - .assertResult(i); - - assertEquals(i, counter.get()); - } - } - - /* Method will execute only once and cache its result.*/ - @Test - public void givenSyncMethod_whenConvertedWithStart_thenReturnObservable() { - - Observable source = AsyncObservable.start(callable); - - for (int i = 1; i < 5; i++) { - source.test() - .awaitDone(5, TimeUnit.SECONDS) - .assertResult(1); - - assertEquals(1, counter.get()); - } - } - - /* Method will execute only once and cache its result.*/ - @Test - public void givenAsyncMethod_whenConvertedWithFromFuture_thenRetrunObservble() { - - ExecutorService executor = Executors.newSingleThreadExecutor(); - Future future = executor.submit(callable); - Observable source = Observable.fromFuture(future); - - for (int i = 1; i < 5; i++) { - source.test() - .awaitDone(5, TimeUnit.SECONDS) - .assertResult(1); - - assertEquals(1, counter.get()); - } - - executor.shutdown(); - } - - /* Method will execute every time it gets subscribed*/ - @Test - public void givenAsyncMethod_whenConvertedWithStartFuture_thenRetrunObservble() { - - ExecutorService executor = Executors.newSingleThreadExecutor(); - Observable source = AsyncObservable.startFuture(() -> executor.submit(callable)); - - for (int i = 1; i < 5; i++) { - source.test() - .awaitDone(5, TimeUnit.SECONDS) - .assertResult(i); - - assertEquals(i, counter.get()); - } - - executor.shutdown(); - } - - /*Method will execute only once and cache its result.*/ - @Test - public void givenAsyncMethod_whenConvertedWithDeferFuture_thenRetrunObservble() { - List list = Arrays.asList(new Integer[] { counter.incrementAndGet(), counter.incrementAndGet(), counter.incrementAndGet() }); - ExecutorService exec = Executors.newSingleThreadExecutor(); - Callable> callable = () -> Observable.fromIterable(list); - Observable source = AsyncObservable.deferFuture(() -> exec.submit(callable)); - for (int i = 1; i < 4; i++) { - source.test() - .awaitDone(5, TimeUnit.SECONDS) - .assertResult(1, 2, 3); - } - - exec.shutdown(); - } - -} +package com.baeldung.rxjava; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.Test; + +import hu.akarnokd.rxjava2.async.AsyncObservable; +import io.reactivex.Observable; + +public class AsyncAndSyncToObservableIntegrationTest { + + AtomicInteger counter = new AtomicInteger(); + Callable callable = () -> counter.incrementAndGet(); + + /* Method will execute every time it gets subscribed*/ + @Test + public void givenSyncMethod_whenConvertedWithFromCallable_thenReturnObservable() { + + Observable source = Observable.fromCallable(callable); + + for (int i = 1; i < 5; i++) { + source.test() + .awaitDone(5, TimeUnit.SECONDS) + .assertResult(i); + + assertEquals(i, counter.get()); + } + } + + /* Method will execute only once and cache its result.*/ + @Test + public void givenSyncMethod_whenConvertedWithStart_thenReturnObservable() { + + Observable source = AsyncObservable.start(callable); + + for (int i = 1; i < 5; i++) { + source.test() + .awaitDone(5, TimeUnit.SECONDS) + .assertResult(1); + + assertEquals(1, counter.get()); + } + } + + /* Method will execute only once and cache its result.*/ + @Test + public void givenAsyncMethod_whenConvertedWithFromFuture_thenRetrunObservble() { + + ExecutorService executor = Executors.newSingleThreadExecutor(); + Future future = executor.submit(callable); + Observable source = Observable.fromFuture(future); + + for (int i = 1; i < 5; i++) { + source.test() + .awaitDone(5, TimeUnit.SECONDS) + .assertResult(1); + + assertEquals(1, counter.get()); + } + + executor.shutdown(); + } + + /* Method will execute every time it gets subscribed*/ + @Test + public void givenAsyncMethod_whenConvertedWithStartFuture_thenRetrunObservble() { + + ExecutorService executor = Executors.newSingleThreadExecutor(); + Observable source = AsyncObservable.startFuture(() -> executor.submit(callable)); + + for (int i = 1; i < 5; i++) { + source.test() + .awaitDone(5, TimeUnit.SECONDS) + .assertResult(i); + + assertEquals(i, counter.get()); + } + + executor.shutdown(); + } + + /*Method will execute only once and cache its result.*/ + @Test + public void givenAsyncMethod_whenConvertedWithDeferFuture_thenRetrunObservble() { + List list = Arrays.asList(new Integer[] { counter.incrementAndGet(), counter.incrementAndGet(), counter.incrementAndGet() }); + ExecutorService exec = Executors.newSingleThreadExecutor(); + Callable> callable = () -> Observable.fromIterable(list); + Observable source = AsyncObservable.deferFuture(() -> exec.submit(callable)); + for (int i = 1; i < 4; i++) { + source.test() + .awaitDone(5, TimeUnit.SECONDS) + .assertResult(1, 2, 3); + } + + exec.shutdown(); + } + +} diff --git a/rxjava/src/test/java/com/baeldung/rxjava/RxJavaCustomOperatorUnitTest.java b/rxjava-operators/src/test/java/com/baeldung/rxjava/RxJavaCustomOperatorUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/RxJavaCustomOperatorUnitTest.java rename to rxjava-operators/src/test/java/com/baeldung/rxjava/RxJavaCustomOperatorUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/UtilityOperatorsIntegrationTest.java b/rxjava-operators/src/test/java/com/baeldung/rxjava/UtilityOperatorsIntegrationTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/UtilityOperatorsIntegrationTest.java rename to rxjava-operators/src/test/java/com/baeldung/rxjava/UtilityOperatorsIntegrationTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsUnitTest.java b/rxjava-operators/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsUnitTest.java rename to rxjava-operators/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsUnitTest.java diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/operators/RxFlatmapAndSwitchmapUnitTest.java b/rxjava-operators/src/test/java/com/baeldung/rxjava/operators/RxFlatmapAndSwitchmapUnitTest.java similarity index 100% rename from rxjava-2/src/test/java/com/baeldung/rxjava/operators/RxFlatmapAndSwitchmapUnitTest.java rename to rxjava-operators/src/test/java/com/baeldung/rxjava/operators/RxFlatmapAndSwitchmapUnitTest.java diff --git a/rxjava/src/test/java/com/baeldung/rxjava/operators/RxMathematicalOperatorsUnitTest.java b/rxjava-operators/src/test/java/com/baeldung/rxjava/operators/RxMathematicalOperatorsUnitTest.java similarity index 100% rename from rxjava/src/test/java/com/baeldung/rxjava/operators/RxMathematicalOperatorsUnitTest.java rename to rxjava-operators/src/test/java/com/baeldung/rxjava/operators/RxMathematicalOperatorsUnitTest.java diff --git a/rxjava/README.md b/rxjava/README.md deleted file mode 100644 index c9308ddcc6..0000000000 --- a/rxjava/README.md +++ /dev/null @@ -1,20 +0,0 @@ -## RxJava - -This module contains articles about RxJava. - -### Relevant articles: - -- [Dealing with Backpressure with RxJava](https://www.baeldung.com/rxjava-backpressure) -- [How to Test RxJava?](https://www.baeldung.com/rxjava-testing) -- [Implementing Custom Operators in RxJava](https://www.baeldung.com/rxjava-custom-operators) -- [Introduction to RxJava](https://www.baeldung.com/rx-java) -- [Observable Utility Operators in RxJava](https://www.baeldung.com/rxjava-observable-operators) -- [Introduction to rxjava-jdbc](https://www.baeldung.com/rxjava-jdbc) -- [Schedulers in RxJava](https://www.baeldung.com/rxjava-schedulers) -- [Mathematical and Aggregate Operators in RxJava](https://www.baeldung.com/rxjava-math) -- [Combining Observables in RxJava](https://www.baeldung.com/rxjava-combine-observables) -- [RxJava StringObservable](https://www.baeldung.com/rxjava-string) -- [Filtering Observables in RxJava](https://www.baeldung.com/rxjava-filtering) -- [RxJava One Observable, Multiple Subscribers](https://www.baeldung.com/rxjava-multiple-subscribers-observable) -- [Difference Between Flatmap and Switchmap in RxJava](https://www.baeldung.com/rxjava-flatmap-switchmap) -- More articles: [[next -->]](/rxjava-2) diff --git a/rxjava/src/main/resources/logback.xml b/rxjava/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/rxjava/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 From 599df3c7069d0c8b26b08a0dc135110a4a980fcb Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Sat, 2 Nov 2019 13:10:11 +0000 Subject: [PATCH 288/304] [BAEL-18364] - moved the findBugs link to testing-modules/testing-libraries, and copied over the sample code from the article --- spring-resttemplate/README.md | 1 - testing-modules/testing-libraries/README.md | 1 + testing-modules/testing-libraries/pom.xml | 7 ++ .../web/controller/SimplePostController.java | 74 +++++++++++++++++++ .../com/baeldung/sampleapp/web/dto/Foo.java | 42 +++++++++++ 5 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java create mode 100644 testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java diff --git a/spring-resttemplate/README.md b/spring-resttemplate/README.md index 1fba4bc242..054071a4df 100644 --- a/spring-resttemplate/README.md +++ b/spring-resttemplate/README.md @@ -16,5 +16,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Using the Spring RestTemplate Interceptor](https://www.baeldung.com/spring-rest-template-interceptor) - [Uploading MultipartFile with Spring RestTemplate](https://www.baeldung.com/spring-rest-template-multipart-upload) - [Get and Post Lists of Objects with RestTemplate](https://www.baeldung.com/spring-rest-template-list) -- [Introduction to FindBugs](https://www.baeldung.com/intro-to-findbugs) - [Copy of RestTemplate Post Request with JSON](https://www.baeldung.com/spring-resttemplate-post-json-test) diff --git a/testing-modules/testing-libraries/README.md b/testing-modules/testing-libraries/README.md index d41c85679a..d76b7b1308 100644 --- a/testing-modules/testing-libraries/README.md +++ b/testing-modules/testing-libraries/README.md @@ -7,5 +7,6 @@ - [Cucumber Java 8 Support](http://www.baeldung.com/cucumber-java-8-support) - [Introduction to Lambda Behave](http://www.baeldung.com/lambda-behave) - [Introduction to CheckStyle](https://www.baeldung.com/checkstyle-java) +- [Introduction to FindBugs](https://www.baeldung.com/intro-to-findbugs) diff --git a/testing-modules/testing-libraries/pom.xml b/testing-modules/testing-libraries/pom.xml index c9d6049530..0838e81d14 100644 --- a/testing-modules/testing-libraries/pom.xml +++ b/testing-modules/testing-libraries/pom.xml @@ -35,6 +35,13 @@ ${cucumber.version} test + + + org.springframework.boot + spring-boot-starter-web + 2.2.0.RELEASE + + diff --git a/testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java b/testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java new file mode 100644 index 0000000000..7b57d35088 --- /dev/null +++ b/testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java @@ -0,0 +1,74 @@ +package com.baeldung.sampleapp.web.controller; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import com.baeldung.sampleapp.web.dto.Foo; + +// used to test HttpClientPostingTest +@RestController +public class SimplePostController { + + @RequestMapping(value = "/users", method = RequestMethod.POST) + public String postUser(@RequestParam final String username, @RequestParam final String password) { + return "Success" + username; + } + + @RequestMapping(value = "/users/detail", method = RequestMethod.POST) + public String postUserDetail(@RequestBody final Foo entity) { + return "Success" + entity.getId(); + } + + @RequestMapping(value = "/users/multipart", method = RequestMethod.POST) + public String uploadFile(@RequestParam final String username, @RequestParam final String password, @RequestParam("file") final MultipartFile file) { + if (!file.isEmpty()) { + try { + final DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH.mm.ss"); + final String fileName = dateFormat.format(new Date()); + final File fileServer = new File(fileName); + fileServer.createNewFile(); + final byte[] bytes = file.getBytes(); + final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(fileServer)); + stream.write(bytes); + stream.close(); + return "You successfully uploaded " + username; + } catch (final Exception e) { + return "You failed to upload " + e.getMessage(); + } + } else { + return "You failed to upload because the file was empty."; + } + } + + @RequestMapping(value = "/users/upload", method = RequestMethod.POST) + public String postMultipart(@RequestParam("file") final MultipartFile file) { + if (!file.isEmpty()) { + try { + final DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH.mm.ss"); + final String fileName = dateFormat.format(new Date()); + final File fileServer = new File(fileName); + fileServer.createNewFile(); + final byte[] bytes = file.getBytes(); + final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(fileServer)); + stream.write(bytes); + stream.close(); + return "You successfully uploaded "; + } catch (final Exception e) { + return "You failed to upload " + e.getMessage(); + } + } else { + return "You failed to upload because the file was empty."; + } + } +} diff --git a/testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java b/testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java new file mode 100644 index 0000000000..de1d76ed92 --- /dev/null +++ b/testing-modules/testing-libraries/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java @@ -0,0 +1,42 @@ +package com.baeldung.sampleapp.web.dto; + +public class Foo { + private long id; + private String name; + + public Foo() { + super(); + } + + public Foo(final String name) { + super(); + + this.name = name; + } + + public Foo(final long id, final String name) { + super(); + + this.id = id; + this.name = name; + } + + // API + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + +} \ No newline at end of file From 1c32e17e0ea2480e27ec267f9e3b7670b32f7453 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sat, 2 Nov 2019 18:28:52 +0330 Subject: [PATCH 289/304] Fixed the Port Already in Use Issue --- .../com/baeldung/hystrix/SpringAndHystrixIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hystrix/src/test/java/com/baeldung/hystrix/SpringAndHystrixIntegrationTest.java b/hystrix/src/test/java/com/baeldung/hystrix/SpringAndHystrixIntegrationTest.java index 004314b0ed..c8910878a9 100644 --- a/hystrix/src/test/java/com/baeldung/hystrix/SpringAndHystrixIntegrationTest.java +++ b/hystrix/src/test/java/com/baeldung/hystrix/SpringAndHystrixIntegrationTest.java @@ -13,7 +13,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, classes = AppConfig.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = AppConfig.class) public class SpringAndHystrixIntegrationTest { @Autowired From aa9806dc0b0992e105b87c70d04e8bb328ce8392 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Sat, 2 Nov 2019 18:47:30 +0330 Subject: [PATCH 290/304] Fixed the Port Already in Use Issue --- .../protobuf/ApplicationIntegrationTest.java | 31 +++++++++++-------- .../SpringContextIntegrationTest.java | 5 ++- .../java/org/baeldung/SpringContextTest.java | 5 ++- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java index f0e2473ec4..df750db1db 100644 --- a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java +++ b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java @@ -1,11 +1,7 @@ package com.baeldung.protobuf; -import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; - +import com.baeldung.protobuf.BaeldungTraining.Course; +import com.googlecode.protobuf.format.JsonFormat; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; @@ -15,33 +11,38 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.http.ResponseEntity; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.client.RestTemplate; -import com.baeldung.protobuf.BaeldungTraining.Course; -import com.googlecode.protobuf.format.JsonFormat; +import java.io.IOException; +import java.io.InputStream; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThat; @DirtiesContext @RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.DEFINED_PORT) +@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT) public class ApplicationIntegrationTest { - private static final String COURSE1_URL = "http://localhost:8080/courses/1"; - @Autowired private RestTemplate restTemplate; + @LocalServerPort + private int port; + @Test public void whenUsingRestTemplate_thenSucceed() { - ResponseEntity course = restTemplate.getForEntity(COURSE1_URL, Course.class); + ResponseEntity course = restTemplate.getForEntity(getUrl(), Course.class); assertResponse(course.toString()); } @Test public void whenUsingHttpClient_thenSucceed() throws IOException { - InputStream responseStream = executeHttpRequest(COURSE1_URL); + InputStream responseStream = executeHttpRequest(getUrl()); String jsonOutput = convertProtobufMessageStreamToJsonString(responseStream); assertResponse(jsonOutput); } @@ -74,4 +75,8 @@ public class ApplicationIntegrationTest { assertThat(response, containsString("number")); assertThat(response, containsString("type")); } + + private String getUrl() { + return "http://localhost:" + port + "/courses/1"; + } } \ No newline at end of file diff --git a/spring-protobuf/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-protobuf/src/test/java/org/baeldung/SpringContextIntegrationTest.java index 6d021eb400..8315d0ff6c 100644 --- a/spring-protobuf/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ b/spring-protobuf/src/test/java/org/baeldung/SpringContextIntegrationTest.java @@ -1,16 +1,15 @@ package org.baeldung; +import com.baeldung.protobuf.Application; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; -import com.baeldung.protobuf.Application; - @DirtiesContext @RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) +@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SpringContextIntegrationTest { @Test diff --git a/spring-protobuf/src/test/java/org/baeldung/SpringContextTest.java b/spring-protobuf/src/test/java/org/baeldung/SpringContextTest.java index 4f655277b7..62a708b60a 100644 --- a/spring-protobuf/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-protobuf/src/test/java/org/baeldung/SpringContextTest.java @@ -1,16 +1,15 @@ package org.baeldung; +import com.baeldung.protobuf.Application; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; -import com.baeldung.protobuf.Application; - @DirtiesContext @RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) +@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SpringContextTest { @Test From a15d1ef54ed64b4ad704cde0e1e8213aa9fb5352 Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Sat, 2 Nov 2019 18:58:17 +0200 Subject: [PATCH 291/304] Move articles out of java-strings part5 --- .../baeldung/stringapi}/StringUnitTest.java | 9 +- core-java-modules/core-java-strings/README.md | 14 ++ core-java-modules/core-java-strings/pom.xml | 60 +++++++ .../compactstring/CompactStringDemo.java | 7 +- .../java/com/baeldung/localization/App.java | 0 .../com/baeldung/localization/ICUFormat.java | 4 +- .../baeldung/localization/JavaSEFormat.java | 0 .../baeldung/localization/Localization.java | 0 .../baeldung}/multiline/MultiLineString.java | 8 +- .../stringperformance}/StringPerformance.java | 2 +- .../src/main/resources/formats_en.properties | 0 .../src/main/resources/formats_fr.properties | 0 .../src/main/resources/formats_it.properties | 0 .../src/main/resources/formats_pl.properties | 0 .../src/main/resources/logback.xml | 0 .../src/main/resources/messages_en.properties | 0 .../src/main/resources/messages_fr.properties | 0 .../src/main/resources/messages_it.properties | 0 .../src/main/resources/messages_pl.properties | 0 .../src/main/resources/stephenking.txt | 0 .../PasswordStoreExamplesUnitTest.java | 0 .../baeldung}/interview/LocaleUnitTest.java | 7 +- .../interview/StringAnagramUnitTest.java | 6 +- .../interview/StringChangeCaseUnitTest.java | 6 +- .../StringCountOccurrencesUnitTest.java | 6 +- .../interview/StringFormatUnitTest.java | 6 +- .../interview/StringInternUnitTest.java | 6 +- .../interview/StringJoinerUnitTest.java | 9 +- .../interview/StringPalindromeUnitTest.java | 6 +- .../interview/StringReverseUnitTest.java | 6 +- .../interview/StringSplitUnitTest.java | 3 +- .../interview/StringToByteArrayUnitTest.java | 6 +- .../interview/StringToCharArrayUnitTest.java | 6 +- .../interview/StringToIntegerUnitTest.java | 3 +- .../localization/ICUFormatUnitTest.java | 8 +- .../multiline/MultiLineStringUnitTest.java | 5 +- .../randomstrings/RandomStringsUnitTest.java | 72 ++++++++ .../StringNotEmptyUnitTest.java | 19 +-- .../stringpool/StringPoolUnitTest.java | 0 .../baeldung/random/JavaRandomUnitTest.java | 61 ------- java-strings-2/README.md | 11 -- java-strings-2/pom.xml | 155 ------------------ java-strings-2/src/test/resources/.gitignore | 13 -- java-strings-ops/README.md | 6 - java-strings-ops/pom.xml | 99 ----------- .../src/main/resources/log4j.properties | 8 - .../src/main/resources/logback.xml | 13 -- .../src/test/resources/.gitignore | 13 -- java-strings/README.md | 10 -- java-strings/pom.xml | 117 ------------- java-strings/src/main/resources/data.csv | 3 - java-strings/src/main/resources/logback.xml | 13 -- .../baeldung/CharArrayToStringUnitTest.java | 62 ------- .../baeldung/StringToCharArrayUnitTest.java | 20 --- java-strings/src/test/resources/.gitignore | 13 -- pom.xml | 8 +- 56 files changed, 214 insertions(+), 695 deletions(-) rename {java-strings/src/test/java/com/baeldung/string => core-java-modules/core-java-string-apis/src/test/java/com/baeldung/stringapi}/StringUnitTest.java (96%) create mode 100644 core-java-modules/core-java-strings/README.md create mode 100644 core-java-modules/core-java-strings/pom.xml rename {java-strings => core-java-modules/core-java-strings}/src/main/java/com/baeldung/java9/compactstring/CompactStringDemo.java (97%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/java/com/baeldung/localization/App.java (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/java/com/baeldung/localization/ICUFormat.java (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/java/com/baeldung/localization/JavaSEFormat.java (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/java/com/baeldung/localization/Localization.java (100%) rename {java-strings-2/src/main/java/com/baeldung/string => core-java-modules/core-java-strings/src/main/java/com/baeldung}/multiline/MultiLineString.java (98%) rename {java-strings/src/main/java/com/baeldung/string => core-java-modules/core-java-strings/src/main/java/com/baeldung/stringperformance}/StringPerformance.java (99%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/formats_en.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/formats_fr.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/formats_it.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/formats_pl.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/logback.xml (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/messages_en.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/messages_fr.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/messages_it.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/messages_pl.properties (100%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/main/resources/stephenking.txt (100%) rename {java-strings => core-java-modules/core-java-strings}/src/test/java/com/baeldung/chararraypassword/PasswordStoreExamplesUnitTest.java (100%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/LocaleUnitTest.java (93%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringAnagramUnitTest.java (94%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringChangeCaseUnitTest.java (92%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringCountOccurrencesUnitTest.java (94%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringFormatUnitTest.java (90%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringInternUnitTest.java (91%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringJoinerUnitTest.java (91%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringPalindromeUnitTest.java (95%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringReverseUnitTest.java (88%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringSplitUnitTest.java (95%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringToByteArrayUnitTest.java (95%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringToCharArrayUnitTest.java (91%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/interview/StringToIntegerUnitTest.java (89%) rename {java-strings-2 => core-java-modules/core-java-strings}/src/test/java/com/baeldung/localization/ICUFormatUnitTest.java (98%) rename {java-strings-2/src/test/java/com/baeldung/string => core-java-modules/core-java-strings/src/test/java/com/baeldung}/multiline/MultiLineStringUnitTest.java (85%) create mode 100644 core-java-modules/core-java-strings/src/test/java/com/baeldung/randomstrings/RandomStringsUnitTest.java rename java-strings/src/test/java/com/baeldung/string/StringEmptyUnitTest.java => core-java-modules/core-java-strings/src/test/java/com/baeldung/stringnotempty/StringNotEmptyUnitTest.java (81%) rename {java-strings-ops => core-java-modules/core-java-strings}/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java (100%) rename {java-strings-2 => java-numbers}/src/test/java/com/baeldung/random/JavaRandomUnitTest.java (69%) delete mode 100644 java-strings-2/README.md delete mode 100755 java-strings-2/pom.xml delete mode 100644 java-strings-2/src/test/resources/.gitignore delete mode 100644 java-strings-ops/README.md delete mode 100644 java-strings-ops/pom.xml delete mode 100644 java-strings-ops/src/main/resources/log4j.properties delete mode 100644 java-strings-ops/src/main/resources/logback.xml delete mode 100644 java-strings-ops/src/test/resources/.gitignore delete mode 100644 java-strings/README.md delete mode 100755 java-strings/pom.xml delete mode 100644 java-strings/src/main/resources/data.csv delete mode 100644 java-strings/src/main/resources/logback.xml delete mode 100644 java-strings/src/test/java/com/baeldung/CharArrayToStringUnitTest.java delete mode 100644 java-strings/src/test/java/com/baeldung/StringToCharArrayUnitTest.java delete mode 100644 java-strings/src/test/resources/.gitignore diff --git a/java-strings/src/test/java/com/baeldung/string/StringUnitTest.java b/core-java-modules/core-java-string-apis/src/test/java/com/baeldung/stringapi/StringUnitTest.java similarity index 96% rename from java-strings/src/test/java/com/baeldung/string/StringUnitTest.java rename to core-java-modules/core-java-string-apis/src/test/java/com/baeldung/stringapi/StringUnitTest.java index 0d4fd6eff9..5c1fe2fbda 100644 --- a/java-strings/src/test/java/com/baeldung/string/StringUnitTest.java +++ b/core-java-modules/core-java-string-apis/src/test/java/com/baeldung/stringapi/StringUnitTest.java @@ -1,16 +1,13 @@ -package com.baeldung.string; +package com.baeldung.stringapi; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import org.junit.Test; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.util.IllegalFormatException; import java.util.regex.PatternSyntaxException; -import org.junit.Test; +import static org.junit.Assert.*; public class StringUnitTest { diff --git a/core-java-modules/core-java-strings/README.md b/core-java-modules/core-java-strings/README.md new file mode 100644 index 0000000000..4a418db29f --- /dev/null +++ b/core-java-modules/core-java-strings/README.md @@ -0,0 +1,14 @@ +## Java Strings + +This module contains articles about strings in Java. + +### Relevant Articles: +- [Use char[] Array over a String for Manipulating Passwords in Java?](https://www.baeldung.com/java-storing-passwords) +- [Compact Strings in Java 9](https://www.baeldung.com/java-9-compact-string) +- [String Not Empty Test Assertions in Java](https://www.baeldung.com/java-assert-string-not-empty) +- [String Performance Hints](https://www.baeldung.com/java-string-performance) +- [Java Localization – Formatting Messages](https://www.baeldung.com/java-localization-messages-formatting) +- [Java – Generate Random String](https://www.baeldung.com/java-random-string) +- [Java String Interview Questions and Answers](https://www.baeldung.com/java-string-interview-questions) +- [Java Multi-line String](https://www.baeldung.com/java-multiline-string) +- [Guide to Java String Pool](https://www.baeldung.com/java-string-pool) diff --git a/core-java-modules/core-java-strings/pom.xml b/core-java-modules/core-java-strings/pom.xml new file mode 100644 index 0000000000..6a80886549 --- /dev/null +++ b/core-java-modules/core-java-strings/pom.xml @@ -0,0 +1,60 @@ + + 4.0.0 + core-java-strings + 0.1.0-SNAPSHOT + jar + core-java-strings + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + + + com.ibm.icu + icu4j + ${icu4j.version} + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + core-java-strings + + + src/main/resources + true + + + + + + 3.6.1 + 61.1 + + + diff --git a/java-strings/src/main/java/com/baeldung/java9/compactstring/CompactStringDemo.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/java9/compactstring/CompactStringDemo.java similarity index 97% rename from java-strings/src/main/java/com/baeldung/java9/compactstring/CompactStringDemo.java rename to core-java-modules/core-java-strings/src/main/java/com/baeldung/java9/compactstring/CompactStringDemo.java index cb24511f72..eae75eaa2b 100644 --- a/java-strings/src/main/java/com/baeldung/java9/compactstring/CompactStringDemo.java +++ b/core-java-modules/core-java-strings/src/main/java/com/baeldung/java9/compactstring/CompactStringDemo.java @@ -1,9 +1,10 @@ package com.baeldung.java9.compactstring; import java.util.List; -import static java.util.stream.Collectors.toList; import java.util.stream.IntStream; +import static java.util.stream.Collectors.toList; + public class CompactStringDemo { public static void main(String[] args) { @@ -11,14 +12,14 @@ public class CompactStringDemo { List strings = IntStream.rangeClosed(1, 10_000_000) .mapToObj(Integer::toString).collect(toList()); long totalTime = System.currentTimeMillis() - startTime; - System.out.println("Generated " + strings.size() + " strings in " + System.out.println("Generated " + strings.size() + " strings in " + totalTime + " ms."); startTime = System.currentTimeMillis(); String appended = (String) strings.stream().limit(100_000) .reduce("", (left, right) -> left.toString() + right.toString()); totalTime = System.currentTimeMillis() - startTime; - System.out.println("Created string of length " + appended.length() + System.out.println("Created string of length " + appended.length() + " in " + totalTime + " ms."); } } diff --git a/java-strings-2/src/main/java/com/baeldung/localization/App.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/App.java similarity index 100% rename from java-strings-2/src/main/java/com/baeldung/localization/App.java rename to core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/App.java diff --git a/java-strings-2/src/main/java/com/baeldung/localization/ICUFormat.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/ICUFormat.java similarity index 100% rename from java-strings-2/src/main/java/com/baeldung/localization/ICUFormat.java rename to core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/ICUFormat.java index f7bc357933..c82af30c87 100644 --- a/java-strings-2/src/main/java/com/baeldung/localization/ICUFormat.java +++ b/core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/ICUFormat.java @@ -1,11 +1,11 @@ package com.baeldung.localization; +import com.ibm.icu.text.MessageFormat; + import java.util.List; import java.util.Locale; import java.util.ResourceBundle; -import com.ibm.icu.text.MessageFormat; - public class ICUFormat { public static String getLabel(Locale locale, Object[] data) { diff --git a/java-strings-2/src/main/java/com/baeldung/localization/JavaSEFormat.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/JavaSEFormat.java similarity index 100% rename from java-strings-2/src/main/java/com/baeldung/localization/JavaSEFormat.java rename to core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/JavaSEFormat.java diff --git a/java-strings-2/src/main/java/com/baeldung/localization/Localization.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/Localization.java similarity index 100% rename from java-strings-2/src/main/java/com/baeldung/localization/Localization.java rename to core-java-modules/core-java-strings/src/main/java/com/baeldung/localization/Localization.java diff --git a/java-strings-2/src/main/java/com/baeldung/string/multiline/MultiLineString.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/multiline/MultiLineString.java similarity index 98% rename from java-strings-2/src/main/java/com/baeldung/string/multiline/MultiLineString.java rename to core-java-modules/core-java-strings/src/main/java/com/baeldung/multiline/MultiLineString.java index 1bde2dcb63..987bc751cd 100644 --- a/java-strings-2/src/main/java/com/baeldung/string/multiline/MultiLineString.java +++ b/core-java-modules/core-java-strings/src/main/java/com/baeldung/multiline/MultiLineString.java @@ -1,4 +1,7 @@ -package com.baeldung.string.multiline; +package com.baeldung.multiline; + +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableList; import java.io.IOException; import java.io.PrintWriter; @@ -6,9 +9,6 @@ import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Paths; -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; - public class MultiLineString { String newLine = System.getProperty("line.separator"); diff --git a/java-strings/src/main/java/com/baeldung/string/StringPerformance.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/stringperformance/StringPerformance.java similarity index 99% rename from java-strings/src/main/java/com/baeldung/string/StringPerformance.java rename to core-java-modules/core-java-strings/src/main/java/com/baeldung/stringperformance/StringPerformance.java index 3b0c32991c..8e9d3afdde 100644 --- a/java-strings/src/main/java/com/baeldung/string/StringPerformance.java +++ b/core-java-modules/core-java-strings/src/main/java/com/baeldung/stringperformance/StringPerformance.java @@ -1,4 +1,4 @@ -package com.baeldung.string; +package com.baeldung.stringperformance; import com.google.common.base.Splitter; import org.apache.commons.lang3.StringUtils; diff --git a/java-strings-2/src/main/resources/formats_en.properties b/core-java-modules/core-java-strings/src/main/resources/formats_en.properties similarity index 100% rename from java-strings-2/src/main/resources/formats_en.properties rename to core-java-modules/core-java-strings/src/main/resources/formats_en.properties diff --git a/java-strings-2/src/main/resources/formats_fr.properties b/core-java-modules/core-java-strings/src/main/resources/formats_fr.properties similarity index 100% rename from java-strings-2/src/main/resources/formats_fr.properties rename to core-java-modules/core-java-strings/src/main/resources/formats_fr.properties diff --git a/java-strings-2/src/main/resources/formats_it.properties b/core-java-modules/core-java-strings/src/main/resources/formats_it.properties similarity index 100% rename from java-strings-2/src/main/resources/formats_it.properties rename to core-java-modules/core-java-strings/src/main/resources/formats_it.properties diff --git a/java-strings-2/src/main/resources/formats_pl.properties b/core-java-modules/core-java-strings/src/main/resources/formats_pl.properties similarity index 100% rename from java-strings-2/src/main/resources/formats_pl.properties rename to core-java-modules/core-java-strings/src/main/resources/formats_pl.properties diff --git a/java-strings-2/src/main/resources/logback.xml b/core-java-modules/core-java-strings/src/main/resources/logback.xml similarity index 100% rename from java-strings-2/src/main/resources/logback.xml rename to core-java-modules/core-java-strings/src/main/resources/logback.xml diff --git a/java-strings-2/src/main/resources/messages_en.properties b/core-java-modules/core-java-strings/src/main/resources/messages_en.properties similarity index 100% rename from java-strings-2/src/main/resources/messages_en.properties rename to core-java-modules/core-java-strings/src/main/resources/messages_en.properties diff --git a/java-strings-2/src/main/resources/messages_fr.properties b/core-java-modules/core-java-strings/src/main/resources/messages_fr.properties similarity index 100% rename from java-strings-2/src/main/resources/messages_fr.properties rename to core-java-modules/core-java-strings/src/main/resources/messages_fr.properties diff --git a/java-strings-2/src/main/resources/messages_it.properties b/core-java-modules/core-java-strings/src/main/resources/messages_it.properties similarity index 100% rename from java-strings-2/src/main/resources/messages_it.properties rename to core-java-modules/core-java-strings/src/main/resources/messages_it.properties diff --git a/java-strings-2/src/main/resources/messages_pl.properties b/core-java-modules/core-java-strings/src/main/resources/messages_pl.properties similarity index 100% rename from java-strings-2/src/main/resources/messages_pl.properties rename to core-java-modules/core-java-strings/src/main/resources/messages_pl.properties diff --git a/java-strings-2/src/main/resources/stephenking.txt b/core-java-modules/core-java-strings/src/main/resources/stephenking.txt similarity index 100% rename from java-strings-2/src/main/resources/stephenking.txt rename to core-java-modules/core-java-strings/src/main/resources/stephenking.txt diff --git a/java-strings/src/test/java/com/baeldung/chararraypassword/PasswordStoreExamplesUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/chararraypassword/PasswordStoreExamplesUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/chararraypassword/PasswordStoreExamplesUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/chararraypassword/PasswordStoreExamplesUnitTest.java diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/LocaleUnitTest.java similarity index 93% rename from java-strings-2/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/LocaleUnitTest.java index 1d221056fd..5655d2536d 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/LocaleUnitTest.java @@ -1,11 +1,12 @@ -package com.baeldung.string.interview; +package com.baeldung.interview; + +import org.junit.Test; import java.math.BigDecimal; import java.text.NumberFormat; import java.util.Locale; -import static org.junit.Assert.assertEquals; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class LocaleUnitTest { @Test diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringAnagramUnitTest.java similarity index 94% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringAnagramUnitTest.java index aadfade737..8f3bacc267 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringAnagramUnitTest.java @@ -1,10 +1,10 @@ -package com.baeldung.string.interview; +package com.baeldung.interview; -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Test; import java.util.Arrays; -import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; public class StringAnagramUnitTest { public boolean isAnagram(String s1, String s2) { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringChangeCaseUnitTest.java similarity index 92% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringChangeCaseUnitTest.java index 2c7ec500fe..4c3815a2e4 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringChangeCaseUnitTest.java @@ -1,9 +1,9 @@ -package com.baeldung.string.interview; - -import static org.junit.Assert.assertEquals; +package com.baeldung.interview; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class StringChangeCaseUnitTest { @Test public void givenString_whenChangingToUppercase_thenCaseChanged() { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringCountOccurrencesUnitTest.java similarity index 94% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringCountOccurrencesUnitTest.java index 6c17643ac8..cb92c06d32 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringCountOccurrencesUnitTest.java @@ -1,9 +1,9 @@ -package com.baeldung.string.interview; - -import static org.junit.Assert.assertEquals; +package com.baeldung.interview; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class StringCountOccurrencesUnitTest { public int countOccurrences(String s, char c) { int count = 0; diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringFormatUnitTest.java similarity index 90% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringFormatUnitTest.java index 787017791c..8492db0dc0 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringFormatUnitTest.java @@ -1,9 +1,9 @@ -package com.baeldung.string.interview; - -import static org.junit.Assert.assertEquals; +package com.baeldung.interview; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class StringFormatUnitTest { @Test public void givenString_whenUsingStringFormat_thenStringFormatted() { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringInternUnitTest.java similarity index 91% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringInternUnitTest.java index c5bffb7573..3092a72399 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringInternUnitTest.java @@ -1,9 +1,9 @@ -package com.baeldung.string.interview; - -import static org.assertj.core.api.Assertions.assertThat; +package com.baeldung.interview; import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; + public class StringInternUnitTest { @Test public void whenCallingStringIntern_thenStringsInterned() { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringJoinerUnitTest.java similarity index 91% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringJoinerUnitTest.java index d44c7478e4..b5556f588c 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringJoinerUnitTest.java @@ -1,10 +1,11 @@ -package com.baeldung.string.interview; - -import java.util.StringJoiner; -import static org.junit.Assert.assertEquals; +package com.baeldung.interview; import org.junit.Test; +import java.util.StringJoiner; + +import static org.junit.Assert.assertEquals; + public class StringJoinerUnitTest { @Test public void whenUsingStringJoiner_thenStringsJoined() { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringPalindromeUnitTest.java similarity index 95% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringPalindromeUnitTest.java index 79ed14cd99..760939932a 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringPalindromeUnitTest.java @@ -1,9 +1,9 @@ -package com.baeldung.string.interview; - -import static org.assertj.core.api.Assertions.assertThat; +package com.baeldung.interview; import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; + public class StringPalindromeUnitTest { public boolean isPalindrome(String text) { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringReverseUnitTest.java similarity index 88% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringReverseUnitTest.java index bb9b45dc97..484a6d0d68 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringReverseUnitTest.java @@ -1,9 +1,9 @@ -package com.baeldung.string.interview; - -import static org.junit.Assert.assertEquals; +package com.baeldung.interview; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class StringReverseUnitTest { @Test public void whenUsingInbuildMethods_thenStringReversed() { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringSplitUnitTest.java similarity index 95% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringSplitUnitTest.java index e1cea62462..5aff593e3e 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringSplitUnitTest.java @@ -1,7 +1,8 @@ -package com.baeldung.string.interview; +package com.baeldung.interview; import org.apache.commons.lang3.StringUtils; import org.junit.Test; + import static org.junit.Assert.assertArrayEquals; public class StringSplitUnitTest { diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToByteArrayUnitTest.java similarity index 95% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToByteArrayUnitTest.java index aee4eedcd6..90c5ca25c2 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToByteArrayUnitTest.java @@ -1,11 +1,11 @@ -package com.baeldung.string.interview; +package com.baeldung.interview; -import static org.junit.Assert.assertArrayEquals; +import org.junit.Test; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; -import org.junit.Test; +import static org.junit.Assert.assertArrayEquals; public class StringToByteArrayUnitTest { @Test diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToCharArrayUnitTest.java similarity index 91% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToCharArrayUnitTest.java index 1322d0fa82..5ebd7448f1 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToCharArrayUnitTest.java @@ -1,10 +1,10 @@ -package com.baeldung.string.interview; +package com.baeldung.interview; -import static org.junit.Assert.assertEquals; +import org.junit.Test; import java.util.Arrays; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class StringToCharArrayUnitTest { @Test diff --git a/java-strings-2/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToIntegerUnitTest.java similarity index 89% rename from java-strings-2/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToIntegerUnitTest.java index a905438a84..24a715dc75 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/interview/StringToIntegerUnitTest.java @@ -1,6 +1,7 @@ -package com.baeldung.string.interview; +package com.baeldung.interview; import org.junit.Test; + import static org.assertj.core.api.Assertions.assertThat; public class StringToIntegerUnitTest { diff --git a/java-strings-2/src/test/java/com/baeldung/localization/ICUFormatUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/localization/ICUFormatUnitTest.java similarity index 98% rename from java-strings-2/src/test/java/com/baeldung/localization/ICUFormatUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/localization/ICUFormatUnitTest.java index 2c8f9b47f3..3c5c5fcb55 100644 --- a/java-strings-2/src/test/java/com/baeldung/localization/ICUFormatUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/localization/ICUFormatUnitTest.java @@ -1,12 +1,10 @@ package com.baeldung.localization; -import static org.junit.Assert.assertEquals; - -import java.util.Locale; - import org.junit.Test; -import com.baeldung.localization.ICUFormat; +import java.util.Locale; + +import static org.junit.Assert.assertEquals; public class ICUFormatUnitTest { diff --git a/java-strings-2/src/test/java/com/baeldung/string/multiline/MultiLineStringUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/multiline/MultiLineStringUnitTest.java similarity index 85% rename from java-strings-2/src/test/java/com/baeldung/string/multiline/MultiLineStringUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/multiline/MultiLineStringUnitTest.java index 3ebee9b5d1..04d318c71b 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/multiline/MultiLineStringUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/multiline/MultiLineStringUnitTest.java @@ -1,11 +1,10 @@ -package com.baeldung.string.multiline; +package com.baeldung.multiline; import org.junit.Test; -import static org.junit.Assert.assertEquals; import java.io.IOException; -import com.baeldung.string.multiline.MultiLineString; +import static org.junit.Assert.assertEquals; public class MultiLineStringUnitTest { diff --git a/core-java-modules/core-java-strings/src/test/java/com/baeldung/randomstrings/RandomStringsUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/randomstrings/RandomStringsUnitTest.java new file mode 100644 index 0000000000..2806635d03 --- /dev/null +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/randomstrings/RandomStringsUnitTest.java @@ -0,0 +1,72 @@ +package com.baeldung.randomstrings; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.Charset; +import java.util.Random; + +public class RandomStringsUnitTest { + + private static final Logger LOG = LoggerFactory.getLogger(RandomStringsUnitTest.class); + + @Test + public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() { + final byte[] array = new byte[7]; // length is bounded by 7 + new Random().nextBytes(array); + final String generatedString = new String(array, Charset.forName("UTF-8")); + + LOG.debug(generatedString); + } + + @Test + public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() { + final int leftLimit = 97; // letter 'a' + final int rightLimit = 122; // letter 'z' + final int targetStringLength = 10; + final Random random = new Random(); + final StringBuilder buffer = new StringBuilder(targetStringLength); + + for (int i = 0; i < targetStringLength; i++) { + final int randomLimitedInt = leftLimit + (int) (random.nextFloat() * (rightLimit - leftLimit + 1)); + buffer.append((char) randomLimitedInt); + } + final String generatedString = buffer.toString(); + + LOG.debug(generatedString); + } + + @Test + public void givenUsingApache_whenGeneratingRandomString_thenCorrect() { + final String generatedString = RandomStringUtils.random(10); + + LOG.debug(generatedString); + } + + @Test + public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect() { + final String generatedString = RandomStringUtils.randomAlphabetic(10); + + LOG.debug(generatedString); + } + + @Test + public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect() { + final String generatedString = RandomStringUtils.randomAlphanumeric(10); + + LOG.debug(generatedString); + } + + @Test + public void givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect() { + final int length = 10; + final boolean useLetters = true; + final boolean useNumbers = false; + final String generatedString = RandomStringUtils.random(length, useLetters, useNumbers); + + LOG.debug(generatedString); + } + +} diff --git a/java-strings/src/test/java/com/baeldung/string/StringEmptyUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/stringnotempty/StringNotEmptyUnitTest.java similarity index 81% rename from java-strings/src/test/java/com/baeldung/string/StringEmptyUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/stringnotempty/StringNotEmptyUnitTest.java index 17b13f89de..482105cc40 100644 --- a/java-strings/src/test/java/com/baeldung/string/StringEmptyUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/stringnotempty/StringNotEmptyUnitTest.java @@ -1,21 +1,16 @@ -package com.baeldung.string; - -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.text.IsEmptyString.isEmptyOrNullString; -import static org.hamcrest.text.IsEmptyString.isEmptyString; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; +package com.baeldung.stringnotempty; +import com.google.common.base.Strings; import org.apache.commons.lang3.StringUtils; import org.assertj.core.api.Assertions; import org.junit.Test; -import com.google.common.base.Strings; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.text.IsEmptyString.isEmptyOrNullString; +import static org.hamcrest.text.IsEmptyString.isEmptyString; +import static org.junit.Assert.*; -public class StringEmptyUnitTest { +public class StringNotEmptyUnitTest { private String text = "baeldung"; diff --git a/java-strings-ops/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java similarity index 100% rename from java-strings-ops/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java rename to core-java-modules/core-java-strings/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java diff --git a/java-strings-2/src/test/java/com/baeldung/random/JavaRandomUnitTest.java b/java-numbers/src/test/java/com/baeldung/random/JavaRandomUnitTest.java similarity index 69% rename from java-strings-2/src/test/java/com/baeldung/random/JavaRandomUnitTest.java rename to java-numbers/src/test/java/com/baeldung/random/JavaRandomUnitTest.java index 2273dfda13..de37b8d1e3 100644 --- a/java-strings-2/src/test/java/com/baeldung/random/JavaRandomUnitTest.java +++ b/java-numbers/src/test/java/com/baeldung/random/JavaRandomUnitTest.java @@ -1,12 +1,10 @@ package com.baeldung.random; -import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.math3.random.RandomDataGenerator; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.nio.charset.Charset; import java.util.Random; public class JavaRandomUnitTest { @@ -155,63 +153,4 @@ public class JavaRandomUnitTest { LOG.debug("{}", generatedDouble); } - // tests - random String - - @Test - public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() { - final byte[] array = new byte[7]; // length is bounded by 7 - new Random().nextBytes(array); - final String generatedString = new String(array, Charset.forName("UTF-8")); - - LOG.debug(generatedString); - } - - @Test - public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() { - final int leftLimit = 97; // letter 'a' - final int rightLimit = 122; // letter 'z' - final int targetStringLength = 10; - final Random random = new Random(); - final StringBuilder buffer = new StringBuilder(targetStringLength); - - for (int i = 0; i < targetStringLength; i++) { - final int randomLimitedInt = leftLimit + (int) (random.nextFloat() * (rightLimit - leftLimit + 1)); - buffer.append((char) randomLimitedInt); - } - final String generatedString = buffer.toString(); - - LOG.debug(generatedString); - } - - @Test - public void givenUsingApache_whenGeneratingRandomString_thenCorrect() { - final String generatedString = RandomStringUtils.random(10); - - LOG.debug(generatedString); - } - - @Test - public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect() { - final String generatedString = RandomStringUtils.randomAlphabetic(10); - - LOG.debug(generatedString); - } - - @Test - public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect() { - final String generatedString = RandomStringUtils.randomAlphanumeric(10); - - LOG.debug(generatedString); - } - - @Test - public void givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect() { - final int length = 10; - final boolean useLetters = true; - final boolean useNumbers = false; - final String generatedString = RandomStringUtils.random(length, useLetters, useNumbers); - - LOG.debug(generatedString); - } - } diff --git a/java-strings-2/README.md b/java-strings-2/README.md deleted file mode 100644 index ecbdb7def9..0000000000 --- a/java-strings-2/README.md +++ /dev/null @@ -1,11 +0,0 @@ -## Java Strings Cookbooks and Examples - -This module contains articles about strings in Java. - -### Relevant Articles: - -- [Java Localization – Formatting Messages](https://www.baeldung.com/java-localization-messages-formatting) -- [Java – Generate Random String](https://www.baeldung.com/java-random-string) -- [Java String Interview Questions and Answers](https://www.baeldung.com/java-string-interview-questions) -- [Java Multi-line String](https://www.baeldung.com/java-multiline-string) -- More articles: [[<-- prev>]](/java-strings) diff --git a/java-strings-2/pom.xml b/java-strings-2/pom.xml deleted file mode 100755 index be47b1ec89..0000000000 --- a/java-strings-2/pom.xml +++ /dev/null @@ -1,155 +0,0 @@ - - 4.0.0 - java-strings-2 - 0.1.0-SNAPSHOT - jar - java-strings-2 - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - org.openjdk.jmh - jmh-core - ${jmh-core.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh-core.version} - - - com.ibm.icu - icu4j - ${icu4j.version} - - - com.google.guava - guava - ${guava.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - commons-io - commons-io - ${commons-io.version} - - - commons-codec - commons-codec - ${commons-codec.version} - - - junit - junit - ${junit.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - org.assertj - assertj-core - ${assertj.version} - test - - - - - org.passay - passay - ${passay.version} - - - org.apache.commons - commons-text - ${commons-text.version} - - - com.vdurmont - emoji-java - ${emoji-java.version} - - - org.ahocorasick - ahocorasick - ${ahocorasick.version} - - - javax.validation - validation-api - ${validation-api.version} - - - org.hibernate.validator - hibernate-validator - ${hibernate-validator.version} - - - javax.el - javax.el-api - ${javax.el-api.version} - - - org.glassfish.web - javax.el - ${javax.el.version} - - - - - java-strings-2 - - - src/main/resources - true - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - -parameters - - - - - - - 3.8.1 - 1.10 - 1.3.1 - - 3.6.1 - 4.0.0 - 0.4.0 - 61.1 - 28.0-jre - 1.4 - 2.0.0.Final - 6.0.2.Final - 3.0.0 - 2.2.6 - - - \ No newline at end of file diff --git a/java-strings-2/src/test/resources/.gitignore b/java-strings-2/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/java-strings-2/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/java-strings-ops/README.md b/java-strings-ops/README.md deleted file mode 100644 index 4c618585f3..0000000000 --- a/java-strings-ops/README.md +++ /dev/null @@ -1,6 +0,0 @@ -## Java Strings Cookbooks and Examples - -This module contains articles about operations on strings in Java. - -### Relevant Articles: -- [Guide to Java String Pool](https://www.baeldung.com/java-string-pool) diff --git a/java-strings-ops/pom.xml b/java-strings-ops/pom.xml deleted file mode 100644 index ebed216c2b..0000000000 --- a/java-strings-ops/pom.xml +++ /dev/null @@ -1,99 +0,0 @@ - - 4.0.0 - com.baeldung - java-strings-ops - 0.1.0-SNAPSHOT - jar - java-strings-ops - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - log4j - log4j - ${log4j.version} - - - - org.assertj - assertj-core - ${assertj.version} - test - - - org.openjdk.jmh - jmh-core - ${jmh-core.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh-generator.version} - - - com.google.guava - guava - ${guava.version} - - - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter-api.version} - test - - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - - - java-strings-ops - - - src/main/resources - true - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - -parameters - - - - - - - - 3.8.1 - 27.0.1-jre - - 3.6.1 - 5.3.1 - - - diff --git a/java-strings-ops/src/main/resources/log4j.properties b/java-strings-ops/src/main/resources/log4j.properties deleted file mode 100644 index 2ea9fa9209..0000000000 --- a/java-strings-ops/src/main/resources/log4j.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Root logger option -log4j.rootLogger=DEBUG, stdout - -# Redirect log messages to console -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Target=System.out -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/java-strings-ops/src/main/resources/logback.xml b/java-strings-ops/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/java-strings-ops/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/java-strings-ops/src/test/resources/.gitignore b/java-strings-ops/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/java-strings-ops/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/java-strings/README.md b/java-strings/README.md deleted file mode 100644 index 4668ad014e..0000000000 --- a/java-strings/README.md +++ /dev/null @@ -1,10 +0,0 @@ -## Java Strings Cookbooks and Examples - -This module contains articles about strings in Java. - -### Relevant Articles: -- [Use char[] Array Over a String for Manipulating Passwords in Java?](https://www.baeldung.com/java-storing-passwords) -- [Compact Strings in Java 9](https://www.baeldung.com/java-9-compact-string) -- [String Not Empty Test Assertions in Java](https://www.baeldung.com/java-assert-string-not-empty) -- [String Performance Hints](https://www.baeldung.com/java-string-performance) -- More articles: [[next -->]](/java-strings-2) diff --git a/java-strings/pom.xml b/java-strings/pom.xml deleted file mode 100755 index 42a57bfb42..0000000000 --- a/java-strings/pom.xml +++ /dev/null @@ -1,117 +0,0 @@ - - 4.0.0 - com.baeldung - java-strings - 0.1.0-SNAPSHOT - jar - java-strings - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - commons-io - commons-io - ${commons-io.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - log4j - log4j - ${log4j.version} - - - commons-codec - commons-codec - ${commons-codec.version} - - - - org.assertj - assertj-core - ${assertj.version} - test - - - org.openjdk.jmh - jmh-core - ${jmh-core.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh-generator.version} - - - com.ibm.icu - icu4j - ${icu4j.version} - - - com.google.guava - guava - ${guava.version} - - - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter-api.version} - test - - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - - - java-strings - - - src/main/resources - true - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - -parameters - - - - - - - - 3.8.1 - 1.10 - - 3.6.1 - 61.1 - 27.0.1-jre - 5.3.1 - 1.4 - - - diff --git a/java-strings/src/main/resources/data.csv b/java-strings/src/main/resources/data.csv deleted file mode 100644 index ec4ac10443..0000000000 --- a/java-strings/src/main/resources/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -1|IND|India -2|MY|Malaysia -3|AU|Australia diff --git a/java-strings/src/main/resources/logback.xml b/java-strings/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/java-strings/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/java-strings/src/test/java/com/baeldung/CharArrayToStringUnitTest.java b/java-strings/src/test/java/com/baeldung/CharArrayToStringUnitTest.java deleted file mode 100644 index 3488f8b390..0000000000 --- a/java-strings/src/test/java/com/baeldung/CharArrayToStringUnitTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung; - -import static org.junit.Assert.*; - -import org.junit.Test; - -public class CharArrayToStringUnitTest { - - @Test - public void givenCharArray_whenCallingStringConstructor_shouldConvertToString() { - char[] charArray = { 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r' }; - String result = new String(charArray); - String expectedValue = "character"; - - assertEquals(expectedValue, result); - } - - @Test - public void givenCharArray_whenCallingStringConstructorWithOffsetAndLength_shouldConvertToString() { - char[] charArray = { 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r' }; - String result = new String(charArray, 4, 3); - String expectedValue = "act"; - - assertEquals(expectedValue, result); - } - - @Test - public void givenCharArray_whenCallingStringCopyValueOf_shouldConvertToString() { - char[] charArray = { 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r' }; - String result = String.copyValueOf(charArray); - String expectedValue = "character"; - - assertEquals(expectedValue, result); - } - - @Test - public void givenCharArray_whenCallingStringCopyValueOfWithOffsetAndLength_shouldConvertToString() { - char[] charArray = { 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r' }; - String result = String.copyValueOf(charArray, 0, 4); - String expectedValue = "char"; - - assertEquals(expectedValue, result); - } - - @Test - public void givenCharArray_whenCallingStringValueOf_shouldConvertToString() { - char[] charArray = { 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r' }; - String result = String.valueOf(charArray); - String expectedValue = "character"; - - assertEquals(expectedValue, result); - } - - @Test - public void givenCharArray_whenCallingStringValueOfWithOffsetAndLength_shouldConvertToString() { - char[] charArray = { 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r' }; - String result = String.valueOf(charArray, 3, 4); - String expectedValue = "ract"; - - assertEquals(expectedValue, result); - } -} diff --git a/java-strings/src/test/java/com/baeldung/StringToCharArrayUnitTest.java b/java-strings/src/test/java/com/baeldung/StringToCharArrayUnitTest.java deleted file mode 100644 index cd996e58e2..0000000000 --- a/java-strings/src/test/java/com/baeldung/StringToCharArrayUnitTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung; - -import static org.junit.Assert.*; - -import org.junit.Test; - -public class StringToCharArrayUnitTest { - - @Test - public void givenString_whenCallingStringToCharArray_shouldConvertToCharArray() { - String givenString = "characters"; - - char[] result = givenString.toCharArray(); - - char[] expectedCharArray = { 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', 's' }; - - assertArrayEquals(expectedCharArray, result); - } - -} diff --git a/java-strings/src/test/resources/.gitignore b/java-strings/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/java-strings/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/pom.xml b/pom.xml index f5776731c9..d2433d11b3 100644 --- a/pom.xml +++ b/pom.xml @@ -445,6 +445,7 @@ core-java-modules/core-java-string-algorithms core-java-modules/core-java-string-algorithms-2 core-java-modules/core-java-string-apis + core-java-modules/core-java-strings core-java-modules/core-java core-java-modules/core-java-jvm core-scala @@ -507,9 +508,6 @@ java-numbers-2 java-rmi java-spi - java-strings - java-strings-2 - java-strings-ops java-vavr-stream java-websocket javafx @@ -1217,6 +1215,7 @@ core-java-modules/core-java-string-algorithms core-java-modules/core-java-string-algorithms-2 core-java-modules/core-java-string-apis + core-java-modules/core-java-strings core-scala couchbase custom-pmd @@ -1277,9 +1276,6 @@ java-numbers-2 java-rmi java-spi - java-strings - java-strings-2 - java-strings-ops java-vavr-stream java-websocket javafx From 6436440cb68e227cf42fee14db7f38f7e89969ee Mon Sep 17 00:00:00 2001 From: Alexander Molochko Date: Sat, 2 Nov 2019 23:57:12 +0300 Subject: [PATCH 292/304] Fix issues, segregate configurations --- .../errorhandling/ErrorHandlingApp.java | 1 + .../DLXCustomAmqpConfiguration.java | 22 ++++-- .../DLXParkingLotAmqpConfiguration.java | 22 ++++-- ...talExceptionStrategyAmqpConfiguration.java | 17 +++-- ...ListenerErrorHandlerAmqpConfiguration.java | 15 +++- ...va => RoutingKeyDLQAmqpConfiguration.java} | 24 +++++-- .../SimpleDLQAmqpConfiguration.java | 19 +++-- .../consumer/DLQCustomAmqpContainer.java | 35 +++++++++ .../consumer/MessagesConsumer.java | 72 ++++++++----------- .../consumer/ParkingLotDLQAmqpContainer.java | 43 +++++++++++ .../consumer/RoutingDLQAmqpContainer.java | 33 +++++++++ .../consumer/SimpleDLQAmqpContainer.java | 31 ++++++++ .../src/main/resources/application.properties | 4 +- 13 files changed, 267 insertions(+), 71 deletions(-) rename spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/{DLXDefaultAmqpConfiguration.java => RoutingKeyDLQAmqpConfiguration.java} (50%) create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/DLQCustomAmqpContainer.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/ParkingLotDLQAmqpContainer.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/RoutingDLQAmqpContainer.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/SimpleDLQAmqpContainer.java diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java index c006684083..72a9ec8ad7 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/ErrorHandlingApp.java @@ -11,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class ErrorHandlingApp { + @Autowired MessageProducer messageProducer; diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java index ba358cba52..708b08476d 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXCustomAmqpConfiguration.java @@ -1,19 +1,31 @@ package com.baeldung.springamqp.errorhandling.configuration; -import org.springframework.amqp.core.*; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.FanoutExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; -import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.*; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES_DLQ; -//@Configuration +@Configuration +@ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "dlx-custom") public class DLXCustomAmqpConfiguration { public static final String DLX_EXCHANGE_MESSAGES = QUEUE_MESSAGES + ".dlx"; @Bean Queue messagesQueue() { return QueueBuilder.durable(QUEUE_MESSAGES) - .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) - .build(); + .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) + .build(); } @Bean diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java index c11914605b..bff325e657 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXParkingLotAmqpConfiguration.java @@ -1,11 +1,23 @@ package com.baeldung.springamqp.errorhandling.configuration; -import org.springframework.amqp.core.*; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.FanoutExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; -import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.*; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES_DLQ; -//@Configuration +@Configuration +@ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "parking-lot-dlx") public class DLXParkingLotAmqpConfiguration { public static final String DLX_EXCHANGE_MESSAGES = QUEUE_MESSAGES + ".dlx"; public static final String QUEUE_PARKING_LOT = QUEUE_MESSAGES + ".parking-lot"; @@ -29,8 +41,8 @@ public class DLXParkingLotAmqpConfiguration { @Bean Queue messagesQueue() { return QueueBuilder.durable(QUEUE_MESSAGES) - .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) - .build(); + .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) + .build(); } @Bean diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java index 3447c70420..dcd76d7f72 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/FatalExceptionStrategyAmqpConfiguration.java @@ -1,12 +1,17 @@ package com.baeldung.springamqp.errorhandling.configuration; import com.baeldung.springamqp.errorhandling.errorhandler.CustomFatalExceptionStrategy; -import org.springframework.amqp.core.*; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler; import org.springframework.amqp.rabbit.listener.FatalExceptionStrategy; import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.ErrorHandler; @@ -15,11 +20,15 @@ import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpC import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES; @Configuration +@ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "fatal-error-strategy") public class FatalExceptionStrategyAmqpConfiguration { @Bean - public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory, - SimpleRabbitListenerContainerFactoryConfigurer configurer) { + public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory( + ConnectionFactory connectionFactory, + SimpleRabbitListenerContainerFactoryConfigurer configurer) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); configurer.configure(factory, connectionFactory); factory.setErrorHandler(errorHandler()); @@ -39,7 +48,7 @@ public class FatalExceptionStrategyAmqpConfiguration { @Bean Queue messagesQueue() { return QueueBuilder.durable(QUEUE_MESSAGES) - .build(); + .build(); } @Bean diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java index 5c0c0afaaf..8990381da2 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/ListenerErrorHandlerAmqpConfiguration.java @@ -1,17 +1,26 @@ package com.baeldung.springamqp.errorhandling.configuration; import com.baeldung.springamqp.errorhandling.errorhandler.CustomErrorHandler; -import org.springframework.amqp.core.*; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.util.ErrorHandler; import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES; -//@Configuration +@Configuration +@ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "listener-error") public class ListenerErrorHandlerAmqpConfiguration { @Bean @@ -31,7 +40,7 @@ public class ListenerErrorHandlerAmqpConfiguration { @Bean Queue messagesQueue() { return QueueBuilder.durable(QUEUE_MESSAGES) - .build(); + .build(); } @Bean diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXDefaultAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/RoutingKeyDLQAmqpConfiguration.java similarity index 50% rename from spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXDefaultAmqpConfiguration.java rename to spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/RoutingKeyDLQAmqpConfiguration.java index 6e576109f7..defabed306 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/DLXDefaultAmqpConfiguration.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/RoutingKeyDLQAmqpConfiguration.java @@ -1,19 +1,31 @@ package com.baeldung.springamqp.errorhandling.configuration; -import org.springframework.amqp.core.*; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.FanoutExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; -import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.*; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES_DLQ; -//@Configuration -public class DLXDefaultAmqpConfiguration { +@Configuration +@ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "routing-dlq") +public class RoutingKeyDLQAmqpConfiguration { public static final String DLX_EXCHANGE_MESSAGES = QUEUE_MESSAGES + ".dlx"; @Bean Queue messagesQueue() { return QueueBuilder.durable(QUEUE_MESSAGES) - .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) - .build(); + .withArgument("x-dead-letter-exchange", DLX_EXCHANGE_MESSAGES) + .build(); } @Bean diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java index 26da2d59ba..ea129986ca 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/configuration/SimpleDLQAmqpConfiguration.java @@ -1,9 +1,18 @@ package com.baeldung.springamqp.errorhandling.configuration; -import org.springframework.amqp.core.*; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; -//@Configuration +@Configuration +@ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "simple-dlq") public class SimpleDLQAmqpConfiguration { public static final String QUEUE_MESSAGES = "baeldung-messages-queue"; public static final String QUEUE_MESSAGES_DLQ = QUEUE_MESSAGES + ".dlq"; @@ -12,9 +21,9 @@ public class SimpleDLQAmqpConfiguration { @Bean Queue messagesQueue() { return QueueBuilder.durable(QUEUE_MESSAGES) - .withArgument("x-dead-letter-exchange", "") - .withArgument("x-dead-letter-routing-key", QUEUE_MESSAGES_DLQ) - .build(); + .withArgument("x-dead-letter-exchange", "") + .withArgument("x-dead-letter-routing-key", QUEUE_MESSAGES_DLQ) + .build(); } @Bean diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/DLQCustomAmqpContainer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/DLQCustomAmqpContainer.java new file mode 100644 index 0000000000..62907abee9 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/DLQCustomAmqpContainer.java @@ -0,0 +1,35 @@ +package com.baeldung.springamqp.errorhandling.consumer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES_DLQ; +import static com.baeldung.springamqp.errorhandling.consumer.MessagesConsumer.HEADER_X_RETRIES_COUNT; + +public class DLQCustomAmqpContainer { + private static final Logger log = LoggerFactory.getLogger(DLQCustomAmqpContainer.class); + private final RabbitTemplate rabbitTemplate; + public static final int MAX_RETRIES_COUNT = 2; + + public DLQCustomAmqpContainer(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + @RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessagesRetryHeaders(Message failedMessage) { + Integer retriesCnt = (Integer) failedMessage.getMessageProperties().getHeaders().get(HEADER_X_RETRIES_COUNT); + if (retriesCnt == null) + retriesCnt = 1; + if (retriesCnt > MAX_RETRIES_COUNT) { + log.info("Discarding message"); + return; + } + log.info("Retrying message for the {} time", retriesCnt); + failedMessage.getMessageProperties().getHeaders().put(HEADER_X_RETRIES_COUNT, ++retriesCnt); + rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java index 3af9a84678..17b65c58da 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/MessagesConsumer.java @@ -7,15 +7,14 @@ import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.stereotype.Service; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; -import static com.baeldung.springamqp.errorhandling.configuration.DLXParkingLotAmqpConfiguration.EXCHANGE_PARKING_LOT; -import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; - -@Service +@Configuration public class MessagesConsumer { public static final String HEADER_X_RETRIES_COUNT = "x-retries-count"; - public static final int MAX_RETRIES_COUNT = 1; + private static final Logger log = LoggerFactory.getLogger(MessagesConsumer.class); private final RabbitTemplate rabbitTemplate; @@ -25,51 +24,40 @@ public class MessagesConsumer { } @RabbitListener(queues = SimpleDLQAmqpConfiguration.QUEUE_MESSAGES) - public void receiveMessage(final Message message) throws BusinessException { + public void receiveMessage(Message message) throws BusinessException { log.info("Received message: {}", message.toString()); throw new BusinessException(); } - //@RabbitListener(queues = DLXCustomAmqpConfiguration.QUEUE_MESSAGES_DLQ) - public void processFailedMessages(final Message message) { - log.info("Received failed message: {}", message.toString()); + @Bean + @ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "simple-dlq") + public SimpleDLQAmqpContainer simpleAmqpContainer() { + return new SimpleDLQAmqpContainer(rabbitTemplate); } - //@RabbitListener(queues = QUEUE_MESSAGES_DLQ) - public void processFailedMessagesRequeue(final Message failedMessage) { - log.info("Received failed message, requeueing: {}", failedMessage.toString()); - rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + @Bean + @ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "routing-dlq") + public RoutingDLQAmqpContainer routingDLQAmqpContainer() { + return new RoutingDLQAmqpContainer(rabbitTemplate); } - //@RabbitListener(queues = QUEUE_MESSAGES_DLQ) - public void processFailedMessagesRetryHeaders(final Message failedMessage) { - Integer retriesCnt = (Integer) failedMessage.getMessageProperties().getHeaders().get(HEADER_X_RETRIES_COUNT); - if (retriesCnt == null) retriesCnt = 0; - log.info("Retrying message for the {} time", retriesCnt); - if (retriesCnt > MAX_RETRIES_COUNT) { - log.info("Discarding message"); - return; - } - failedMessage.getMessageProperties().getHeaders().put(HEADER_X_RETRIES_COUNT, ++retriesCnt); - rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + @Bean + @ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "dlx-custom") + public DLQCustomAmqpContainer dlqAmqpContainer() { + return new DLQCustomAmqpContainer(rabbitTemplate); } - // @RabbitListener(queues = QUEUE_MESSAGES_DLQ) - public void processFailedMessagesRetryWithParkingLot(final Message failedMessage) { - Integer retriesCnt = (Integer) failedMessage.getMessageProperties().getHeaders().get(HEADER_X_RETRIES_COUNT); - if (retriesCnt == null) retriesCnt = 0; - log.info("Retrying message for the {} time", retriesCnt); - if (retriesCnt > MAX_RETRIES_COUNT) { - log.info("Sending message to the parking lot queue"); - rabbitTemplate.send(EXCHANGE_PARKING_LOT, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); - return; - } - failedMessage.getMessageProperties().getHeaders().put(HEADER_X_RETRIES_COUNT, ++retriesCnt); - rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); - } - - //@RabbitListener(queues = QUEUE_PARKING_LOT) - public void processParkingLotQueue(final Message failedMessage) { - log.info("Received message in parking lot queue"); + @Bean + @ConditionalOnProperty( + value = "amqp.configuration.current", + havingValue = "parking-lot-dlx") + public ParkingLotDLQAmqpContainer parkingLotDLQAmqpContainer() { + return new ParkingLotDLQAmqpContainer(rabbitTemplate); } } \ No newline at end of file diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/ParkingLotDLQAmqpContainer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/ParkingLotDLQAmqpContainer.java new file mode 100644 index 0000000000..34dccd408a --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/ParkingLotDLQAmqpContainer.java @@ -0,0 +1,43 @@ +package com.baeldung.springamqp.errorhandling.consumer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; + +import static com.baeldung.springamqp.errorhandling.configuration.DLXParkingLotAmqpConfiguration.EXCHANGE_PARKING_LOT; +import static com.baeldung.springamqp.errorhandling.configuration.DLXParkingLotAmqpConfiguration.QUEUE_PARKING_LOT; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES_DLQ; +import static com.baeldung.springamqp.errorhandling.consumer.MessagesConsumer.HEADER_X_RETRIES_COUNT; + +public class ParkingLotDLQAmqpContainer { + private static final Logger log = LoggerFactory.getLogger(ParkingLotDLQAmqpContainer.class); + private final RabbitTemplate rabbitTemplate; + public static final int MAX_RETRIES_COUNT = 2; + + public ParkingLotDLQAmqpContainer(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + @RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessagesRetryWithParkingLot(Message failedMessage) { + Integer retriesCnt = (Integer) failedMessage.getMessageProperties().getHeaders().get(HEADER_X_RETRIES_COUNT); + if (retriesCnt == null) + retriesCnt = 1; + if (retriesCnt > MAX_RETRIES_COUNT) { + log.info("Sending message to the parking lot queue"); + rabbitTemplate.send(EXCHANGE_PARKING_LOT, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + return; + } + log.info("Retrying message for the {} time", retriesCnt); + failedMessage.getMessageProperties().getHeaders().put(HEADER_X_RETRIES_COUNT, ++retriesCnt); + rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + } + + @RabbitListener(queues = QUEUE_PARKING_LOT) + public void processParkingLotQueue(Message failedMessage) { + log.info("Received message in parking lot queue {}", failedMessage.toString()); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/RoutingDLQAmqpContainer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/RoutingDLQAmqpContainer.java new file mode 100644 index 0000000000..fedce76880 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/RoutingDLQAmqpContainer.java @@ -0,0 +1,33 @@ +package com.baeldung.springamqp.errorhandling.consumer; + +import com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration; +import com.baeldung.springamqp.errorhandling.errorhandler.BusinessException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES_DLQ; + +public class RoutingDLQAmqpContainer { + private static final Logger log = LoggerFactory.getLogger(RoutingDLQAmqpContainer.class); + private final RabbitTemplate rabbitTemplate; + + public RoutingDLQAmqpContainer(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + @RabbitListener(queues = SimpleDLQAmqpConfiguration.QUEUE_MESSAGES) + public void receiveMessage(Message message) throws BusinessException { + log.info("Received message: {}", message.toString()); + throw new BusinessException(); + } + + @RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessagesRequeue(Message failedMessage) { + log.info("Received failed message, requeueing: {}", failedMessage.toString()); + rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/SimpleDLQAmqpContainer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/SimpleDLQAmqpContainer.java new file mode 100644 index 0000000000..6f9da7b587 --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/errorhandling/consumer/SimpleDLQAmqpContainer.java @@ -0,0 +1,31 @@ +package com.baeldung.springamqp.errorhandling.consumer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; + +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.EXCHANGE_MESSAGES; +import static com.baeldung.springamqp.errorhandling.configuration.SimpleDLQAmqpConfiguration.QUEUE_MESSAGES_DLQ; + +public class SimpleDLQAmqpContainer { + private static final Logger log = LoggerFactory.getLogger(SimpleDLQAmqpContainer.class); + private final RabbitTemplate rabbitTemplate; + + public SimpleDLQAmqpContainer(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + @RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessages(Message message) { + log.info("Received failed message: {}", message.toString()); + } + + @RabbitListener(queues = QUEUE_MESSAGES_DLQ) + public void processFailedMessagesRequeue(Message failedMessage) { + log.info("Received failed message, requeueing: {}", failedMessage.toString()); + log.info("Received failed message, requeueing: {}", failedMessage.getMessageProperties().getReceivedRoutingKey()); + rabbitTemplate.send(EXCHANGE_MESSAGES, failedMessage.getMessageProperties().getReceivedRoutingKey(), failedMessage); + } +} diff --git a/spring-amqp/src/main/resources/application.properties b/spring-amqp/src/main/resources/application.properties index 1353a0e447..c0c1cf1b47 100644 --- a/spring-amqp/src/main/resources/application.properties +++ b/spring-amqp/src/main/resources/application.properties @@ -1 +1,3 @@ -spring.rabbitmq.listener.simple.default-requeue-rejected=false \ No newline at end of file +spring.rabbitmq.listener.simple.default-requeue-rejected=false +spring.main.allow-bean-definition-overriding=true +amqp.configuration.current=parking-lot-dlx \ No newline at end of file From a0840471bbe29956ae605da1bc3e7fbbf9240d48 Mon Sep 17 00:00:00 2001 From: Jonathan Cook Date: Sun, 3 Nov 2019 10:20:18 +0100 Subject: [PATCH 293/304] BAEL-3372 - Guide to Linux jq command for JSON formatting --- linux-bash/json/src/main/bash/fruit.json | 1 + linux-bash/json/src/main/bash/fruits.json | 17 ++++++ linux-bash/json/src/main/bash/jq.sh | 56 ++++++++++++++++++++ linux-bash/json/src/main/bash/wikipedia.json | 22 ++++++++ 4 files changed, 96 insertions(+) create mode 100644 linux-bash/json/src/main/bash/fruit.json create mode 100644 linux-bash/json/src/main/bash/fruits.json create mode 100755 linux-bash/json/src/main/bash/jq.sh create mode 100644 linux-bash/json/src/main/bash/wikipedia.json diff --git a/linux-bash/json/src/main/bash/fruit.json b/linux-bash/json/src/main/bash/fruit.json new file mode 100644 index 0000000000..392d2290ae --- /dev/null +++ b/linux-bash/json/src/main/bash/fruit.json @@ -0,0 +1 @@ +{"fruit":{"name":"apple","color":"green","price":1.20}} diff --git a/linux-bash/json/src/main/bash/fruits.json b/linux-bash/json/src/main/bash/fruits.json new file mode 100644 index 0000000000..114a9a35cc --- /dev/null +++ b/linux-bash/json/src/main/bash/fruits.json @@ -0,0 +1,17 @@ +[ + { + "name": "apple", + "color": "green", + "price": 1.2 + }, + { + "name": "banana", + "color": "yellow", + "price": 0.5 + }, + { + "name": "kiwi", + "color": "green", + "price": 1.25 + } +] diff --git a/linux-bash/json/src/main/bash/jq.sh b/linux-bash/json/src/main/bash/jq.sh new file mode 100755 index 0000000000..786be304db --- /dev/null +++ b/linux-bash/json/src/main/bash/jq.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +#3.1. Beautify JSON +echo '{"fruit":{"name":"apple","color":"green","price":1.20}}' | jq '.' +jq '.' fruit.json +curl http://api.open-notify.org/iss-now.json | jq '.' + +#3.2. Accessing Properties +jq '.fruit' fruit.json +jq '.fruit.color' fruit.json +jq '.fruit.color,.fruit.price' fruit.json +echo '{ "with space": "hello" }' | jq '."with space"' + +#4.1. Iteration +echo '["x","y","z"]' | jq '.[]' +jq '.[] | .name' fruits.json +jq '.[].name' fruits.json + +#4.2. Accessing By Index +jq '.[1].price' fruits.json + +#4.3. Slicing +echo '[1,2,3,4,5,6,7,8,9,10]' | jq '.[6:9]' +echo '[1,2,3,4,5,6,7,8,9,10]' | jq '.[:6]' | jq '.[-2:]' + +#5.1. Getting Keys +jq '.fruit | keys' fruit.json + +#5.2. Returning the Length +jq '.fruit | length' fruit.json +jq '.fruit.name | length' fruit.json + +#5.3. Mapping Values +jq 'map(has("name"))' fruits.json +jq 'map(.price+2)' fruits.json + +#5.4. Min and Max +jq '[.[].price] | min' fruits.json +jq '[.[].price] | max' fruits.json + +#5.5. Selecting Values +jq '.[] | select(.price>0.5)' fruits.json +jq '.[] | select(.color=="yellow")' fruits.json +jq '.[] | select(.color=="yellow" and .price>=0.5)' fruits.json + +#5.6. Support For RegEx +jq '.[] | select(.name|test("^a.")) | .price' fruits.json + +#5.7. Find Unique Values +jq 'map(.color) | unique' fruits.json + +#5.8. Deleting Keys From JSON +jq 'del(.fruit.name)' fruit.json + +# 6. Transforming +jq '.query.pages | [.[] | map(.) | .[] | {page_title: .title, page_description: .extract}]' wikipedia.json diff --git a/linux-bash/json/src/main/bash/wikipedia.json b/linux-bash/json/src/main/bash/wikipedia.json new file mode 100644 index 0000000000..180b160bcc --- /dev/null +++ b/linux-bash/json/src/main/bash/wikipedia.json @@ -0,0 +1,22 @@ +{ + "query": { + "pages": [ + { + "21721040": { + "pageid": 21721040, + "ns": 0, + "title": "Stack Overflow", + "extract": "Some interesting text about Stack Overflow" + } + }, + { + "21721041": { + "pageid": 21721041, + "ns": 0, + "title": "Baeldung", + "extract": "A great place to learn about Java" + } + } + ] + } +} From cc96439315536d174b08e429a66e7097098cb78c Mon Sep 17 00:00:00 2001 From: Jonathan Cook Date: Sun, 3 Nov 2019 16:54:32 +0100 Subject: [PATCH 294/304] BAEL-3372 - Guide to Linux jq command for JSON formatting (#8138) * BAEL-3132 - Linux Commands - Loop Through Directories/Folders * BAEL-3132 - Linux Commands - Loop Through Directories/Folders - update pom description. * BAEL-3132 - Linux Commands - Loop Through Directories/Folders - Add another example using find exec. * BAEL-3132 - Linux Commands - Loop Through Directories/Folders * BAEL-3110 - Linux Commands - Remove All Text After X * BAEL-3372 - Guide to Linux jq command for JSON formatting --- linux-bash/json/src/main/bash/fruit.json | 1 + linux-bash/json/src/main/bash/fruits.json | 17 ++++++ linux-bash/json/src/main/bash/jq.sh | 56 ++++++++++++++++++++ linux-bash/json/src/main/bash/wikipedia.json | 22 ++++++++ 4 files changed, 96 insertions(+) create mode 100644 linux-bash/json/src/main/bash/fruit.json create mode 100644 linux-bash/json/src/main/bash/fruits.json create mode 100755 linux-bash/json/src/main/bash/jq.sh create mode 100644 linux-bash/json/src/main/bash/wikipedia.json diff --git a/linux-bash/json/src/main/bash/fruit.json b/linux-bash/json/src/main/bash/fruit.json new file mode 100644 index 0000000000..392d2290ae --- /dev/null +++ b/linux-bash/json/src/main/bash/fruit.json @@ -0,0 +1 @@ +{"fruit":{"name":"apple","color":"green","price":1.20}} diff --git a/linux-bash/json/src/main/bash/fruits.json b/linux-bash/json/src/main/bash/fruits.json new file mode 100644 index 0000000000..114a9a35cc --- /dev/null +++ b/linux-bash/json/src/main/bash/fruits.json @@ -0,0 +1,17 @@ +[ + { + "name": "apple", + "color": "green", + "price": 1.2 + }, + { + "name": "banana", + "color": "yellow", + "price": 0.5 + }, + { + "name": "kiwi", + "color": "green", + "price": 1.25 + } +] diff --git a/linux-bash/json/src/main/bash/jq.sh b/linux-bash/json/src/main/bash/jq.sh new file mode 100755 index 0000000000..786be304db --- /dev/null +++ b/linux-bash/json/src/main/bash/jq.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +#3.1. Beautify JSON +echo '{"fruit":{"name":"apple","color":"green","price":1.20}}' | jq '.' +jq '.' fruit.json +curl http://api.open-notify.org/iss-now.json | jq '.' + +#3.2. Accessing Properties +jq '.fruit' fruit.json +jq '.fruit.color' fruit.json +jq '.fruit.color,.fruit.price' fruit.json +echo '{ "with space": "hello" }' | jq '."with space"' + +#4.1. Iteration +echo '["x","y","z"]' | jq '.[]' +jq '.[] | .name' fruits.json +jq '.[].name' fruits.json + +#4.2. Accessing By Index +jq '.[1].price' fruits.json + +#4.3. Slicing +echo '[1,2,3,4,5,6,7,8,9,10]' | jq '.[6:9]' +echo '[1,2,3,4,5,6,7,8,9,10]' | jq '.[:6]' | jq '.[-2:]' + +#5.1. Getting Keys +jq '.fruit | keys' fruit.json + +#5.2. Returning the Length +jq '.fruit | length' fruit.json +jq '.fruit.name | length' fruit.json + +#5.3. Mapping Values +jq 'map(has("name"))' fruits.json +jq 'map(.price+2)' fruits.json + +#5.4. Min and Max +jq '[.[].price] | min' fruits.json +jq '[.[].price] | max' fruits.json + +#5.5. Selecting Values +jq '.[] | select(.price>0.5)' fruits.json +jq '.[] | select(.color=="yellow")' fruits.json +jq '.[] | select(.color=="yellow" and .price>=0.5)' fruits.json + +#5.6. Support For RegEx +jq '.[] | select(.name|test("^a.")) | .price' fruits.json + +#5.7. Find Unique Values +jq 'map(.color) | unique' fruits.json + +#5.8. Deleting Keys From JSON +jq 'del(.fruit.name)' fruit.json + +# 6. Transforming +jq '.query.pages | [.[] | map(.) | .[] | {page_title: .title, page_description: .extract}]' wikipedia.json diff --git a/linux-bash/json/src/main/bash/wikipedia.json b/linux-bash/json/src/main/bash/wikipedia.json new file mode 100644 index 0000000000..180b160bcc --- /dev/null +++ b/linux-bash/json/src/main/bash/wikipedia.json @@ -0,0 +1,22 @@ +{ + "query": { + "pages": [ + { + "21721040": { + "pageid": 21721040, + "ns": 0, + "title": "Stack Overflow", + "extract": "Some interesting text about Stack Overflow" + } + }, + { + "21721041": { + "pageid": 21721041, + "ns": 0, + "title": "Baeldung", + "extract": "A great place to learn about Java" + } + } + ] + } +} From 2d2c4b3a552fefafbbd0e8d3a9b2c4646dc73f03 Mon Sep 17 00:00:00 2001 From: Jonathan Cook Date: Mon, 4 Nov 2019 18:05:45 +0100 Subject: [PATCH 295/304] BAEL-3375 - Get the current Date in Java (non Java 8) --- .../{legacy/utilpackage => datetime}/CalendarUtils.java | 2 +- .../{legacy/utilpackage => datetime}/DateUtils.java | 2 +- .../{legacy/sqlpackage => datetime/sql}/DateUtils.java | 2 +- .../{legacy/sqlpackage => datetime/sql}/TimeUtils.java | 2 +- .../sqlpackage => datetime/sql}/TimestampUtils.java | 2 +- .../utilpackage => datetime}/CalendarUtilsUnitTest.java | 7 +++++-- .../utilpackage => datetime}/DateUtilsUnitTest.java | 6 ++++-- .../sqlpackage => datetime/sql}/DateUtilsUnitTest.java | 4 +++- .../sqlpackage => datetime/sql}/TimeUtilsUnitTest.java | 4 +++- .../sql}/TimestampUtilsUnitTest.java | 7 +++++-- 10 files changed, 25 insertions(+), 13 deletions(-) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{legacy/utilpackage => datetime}/CalendarUtils.java (90%) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{legacy/utilpackage => datetime}/DateUtils.java (91%) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{legacy/sqlpackage => datetime/sql}/DateUtils.java (93%) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{legacy/sqlpackage => datetime/sql}/TimeUtils.java (93%) rename core-java-modules/core-java-date-operations/src/main/java/com/baeldung/{legacy/sqlpackage => datetime/sql}/TimestampUtils.java (93%) rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{legacy/utilpackage => datetime}/CalendarUtilsUnitTest.java (74%) rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{legacy/utilpackage => datetime}/DateUtilsUnitTest.java (82%) rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{legacy/sqlpackage => datetime/sql}/DateUtilsUnitTest.java (89%) rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{legacy/sqlpackage => datetime/sql}/TimeUtilsUnitTest.java (89%) rename core-java-modules/core-java-date-operations/src/test/java/com/baeldung/{legacy/sqlpackage => datetime/sql}/TimestampUtilsUnitTest.java (80%) diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/CalendarUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/CalendarUtils.java similarity index 90% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/CalendarUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/CalendarUtils.java index cea7936004..ab1550fd90 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/CalendarUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/CalendarUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.legacy.utilpackage; +package com.baeldung.datetime; import java.text.ParseException; import java.util.Calendar; diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/DateUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/DateUtils.java similarity index 91% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/DateUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/DateUtils.java index 5eb98e0d74..34f799d3f4 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/utilpackage/DateUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/DateUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.legacy.utilpackage; +package com.baeldung.datetime; import java.text.ParseException; import java.text.SimpleDateFormat; diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/DateUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/DateUtils.java similarity index 93% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/DateUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/DateUtils.java index b430c1cb17..1b4e825df8 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/DateUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/DateUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.legacy.sqlpackage; +package com.baeldung.datetime.sql; import java.sql.Date; import java.text.ParseException; diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimeUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/TimeUtils.java similarity index 93% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimeUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/TimeUtils.java index 352a04b23b..3fa1ffdef8 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimeUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/TimeUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.legacy.sqlpackage; +package com.baeldung.datetime.sql; import java.sql.Time; import java.text.ParseException; diff --git a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimestampUtils.java b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/TimestampUtils.java similarity index 93% rename from core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimestampUtils.java rename to core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/TimestampUtils.java index 350eb71497..02a928daa7 100644 --- a/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/legacy/sqlpackage/TimestampUtils.java +++ b/core-java-modules/core-java-date-operations/src/main/java/com/baeldung/datetime/sql/TimestampUtils.java @@ -1,4 +1,4 @@ -package com.baeldung.legacy.sqlpackage; +package com.baeldung.datetime.sql; import java.sql.Timestamp; import java.text.ParseException; diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/CalendarUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/CalendarUtilsUnitTest.java similarity index 74% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/CalendarUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/CalendarUtilsUnitTest.java index db029153ee..0060162ffb 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/CalendarUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/CalendarUtilsUnitTest.java @@ -1,9 +1,12 @@ -package com.baeldung.legacy.utilpackage; +package com.baeldung.datetime; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import org.junit.Test; +import com.baeldung.datetime.CalendarUtils; +import com.baeldung.datetime.DateUtils; + import java.text.ParseException; import java.util.Date; diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/DateUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/DateUtilsUnitTest.java similarity index 82% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/DateUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/DateUtilsUnitTest.java index 432aa1ecfc..62a0fc0b4b 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/utilpackage/DateUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/DateUtilsUnitTest.java @@ -1,9 +1,11 @@ -package com.baeldung.legacy.utilpackage; +package com.baeldung.datetime; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import org.junit.Test; +import com.baeldung.datetime.DateUtils; + import java.text.ParseException; import java.util.Date; diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/DateUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/DateUtilsUnitTest.java similarity index 89% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/DateUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/DateUtilsUnitTest.java index 73eda5a9dd..a04f64f6dd 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/DateUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/DateUtilsUnitTest.java @@ -1,9 +1,11 @@ -package com.baeldung.legacy.sqlpackage; +package com.baeldung.datetime.sql; import static org.junit.Assert.assertEquals; import org.junit.Test; +import com.baeldung.datetime.sql.DateUtils; + import java.text.ParseException; import java.util.Date; diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimeUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/TimeUtilsUnitTest.java similarity index 89% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimeUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/TimeUtilsUnitTest.java index 9519122e92..6b49558f1b 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimeUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/TimeUtilsUnitTest.java @@ -1,9 +1,11 @@ -package com.baeldung.legacy.sqlpackage; +package com.baeldung.datetime.sql; import static org.junit.Assert.assertEquals; import org.junit.Test; +import com.baeldung.datetime.sql.TimeUtils; + import java.text.ParseException; import java.util.Date; diff --git a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimestampUtilsUnitTest.java b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/TimestampUtilsUnitTest.java similarity index 80% rename from core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimestampUtilsUnitTest.java rename to core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/TimestampUtilsUnitTest.java index d48560624d..2faf8fab0e 100644 --- a/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/legacy/sqlpackage/TimestampUtilsUnitTest.java +++ b/core-java-modules/core-java-date-operations/src/test/java/com/baeldung/datetime/sql/TimestampUtilsUnitTest.java @@ -1,9 +1,11 @@ -package com.baeldung.legacy.sqlpackage; +package com.baeldung.datetime.sql; import static org.junit.Assert.assertEquals; import org.junit.Test; +import com.baeldung.datetime.sql.TimestampUtils; + import java.text.ParseException; import java.util.Date; @@ -11,7 +13,8 @@ public class TimestampUtilsUnitTest { @Test public void givenCurrentTimestamp_thenNowIsReturned() { - assertEquals(TimestampUtils.getNow().getTime(), new Date().getTime()); + assertEquals(TimestampUtils.getNow() + .getTime(), new Date().getTime()); } @Test(expected = IllegalArgumentException.class) From 0d25f15db76eb19da22c752d0d4e748a95018730 Mon Sep 17 00:00:00 2001 From: Macieg Date: Tue, 5 Nov 2019 02:40:19 +0100 Subject: [PATCH 296/304] BAEL-3400 (#8113) * BAEL-3400 * BALE-3400 | moved to algorithm-miscellaneous-5 * BAEL-3400 | added modifiers --- .../src/test/resources/graph.png | Bin 9637 -> 10454 bytes .../BalancedBinaryTree.java | 33 +++++++++ .../algorithms/balancedbinarytree/Tree.java | 34 +++++++++ .../BalancedBinaryTreeUnitTest.java | 26 +++++++ .../BinaryTreeDataProvider.java | 69 ++++++++++++++++++ 5 files changed, 162 insertions(+) create mode 100644 algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbinarytree/BalancedBinaryTree.java create mode 100644 algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbinarytree/Tree.java create mode 100644 algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbinarytree/BalancedBinaryTreeUnitTest.java create mode 100644 algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbinarytree/BinaryTreeDataProvider.java diff --git a/algorithms-miscellaneous-2/src/test/resources/graph.png b/algorithms-miscellaneous-2/src/test/resources/graph.png index 7165a517824fec3ed31dea351d9b37dc4176b875..12af62c131e254c7c054c1710262f3c678dc5b7a 100644 GIT binary patch literal 10454 zcmZv?Wmr^S_%1vk(jldkjDR#KAq_(_N=iyeDBY=2LrB*MQj*drDcwVdw1BjLbT!3^MBuSuIqf54}137YdyX0=Uyw~r8<;^kd6=p0+GCUuAl`1VTAy{SNPb#KOJ@5 z5+D#q#tQ{moe#5n8D1}`XEHYq(l#SLOdb^!ZYXMaXpD5JUPv#HkCRJDoj{?8*nMe} z(<+lhy_vJ`jU}*}=2uZ#Irr_pg)pyaF>B?7h(exF;5 z!z&k=mUxwA4p!RL7Osq{tq$$-1oBtKtV*_P|%Z?VJEyC505`gvTg ztC3-6x7Rg(uYP@e1d?F}{<4Q0x9UCcZR-6pcQk5<#0L>v^@RxQpOEiy?f5Pa?nO4@ zL9k_lAa2~=v| zT_s)aM9r2WnfO&E%|n@dDOc9_Fj;ui6In2|u=?Xg=o$Vs~?^a`vJ z9TU;Id$PBI=~BMu=JvpMRkfAdTc&PvEMU-*2*oc!+T%F)@XXP|)lgPN&MJ4VU#B3T zb3-sG`SmEfICc6(#49ZwJ2fXSYhR_#K=-W@NvtUqVltxG@~;_81l0AX@yBBkb(lf> z9qw1Lm?uwoIK=xdb`LOQltGwG)1-GiV)M`tk`*PNl=ve3{D%XFaqcu3qfU#I=un@D z)zgxEjIjK;u#lj2J^R%=UTu(&e7gUW@maB4Db*LNYVuOsXDVPXHm6IT<{BRytVa*Q z3(>^9%@KOwJ4$s0e-9kMBc zwcb$dNnZ|U zrO`4*l1i#&`PucFP8TDD^D_<@(-rC+x^iwVjZkkkhj+oL_j=-64`2B7vYdC8Q)Ei| zS$(J|s7*dcTv(}ue zEVhW=8HuY66^D(kgnbcH#eg6#V zqH6S|%FTFnSEvag=De85)IqFqjs1`FO>zvK)n7jawni$`5w@Gq$3o0{gZJXJS_H0l zv&^e8Wd$*|tfzXDsS-~t`B_rDK7=t;ub44BJiq*=!=GgWE0^X(!92%1)!&&Z?sO2;YY$|<9?E7&!5U^99&r9hZ_wqPknGKnE+sD& zBAmG(;5Zak@X@g;H_H+%}}=R`bA_!@)_NWUC9VfbNcpL zqd51@yDTjh;&eXPV=erS0$VR7x}45f#8Fmdq>7yiWcG>>y{3eu zrX(z()ha&F!sER*(pZ<KB?^pD$SCWFWQu3`vmgdJOaT{_@p^_g;uWN&TmYqQhO5X7< z9)&B?h_*wSL)vQp7T98>5P5HlG?L?t9J4lb;(uKJ;&QwE0|6$}x>>MorAIAAjAeD|-vA;6QiZ$4dCAR;5{UPd5X`C2ppa-cJ8U zh7bO2LBkD>GZP>23oAv(>l-~;O-Q?>U?AaIusKrxE&APw_T6$&tJ{p^9k;E_YxIxR zGwH|y2g`+=#SioP+A=y{#`xbyHc6i=o9t1(M#PQ%9nFd4g!k_W)g{i)Vm5l%vOB1O3pOqzTWxTWS7CH^!g9JgtMrZbn-BXVzQe)%@R%oM~uS zRw2gC5hufZk`BGuR0W}A@C8>JF~uZn^!ZVQs$R!?GFE!D&Cd2y0|Yp2a!v_C!5K_H zg+0CJk5Vs_+PHwGOaJW2nWlW1r*vM@E^>g;bsdj(nSMV*%}TaT0-bp3`y+&!L#lYt zmq0yOuVk{L@rG_s7WI5JNpHGkNGjE7pr{(PGpBZ%i!8yjclDtPEq92!)+q z*^Pgs<2m|Ls+89F)qPxptU(v*m~P*H#ysb`J|J&obKEkg___mAaNonv+t*P!W2`Xm zzDMho0WxW%qo@e~4zv#5h0lbr>a(94(Z3VvZKsr0plF>B?{kFKU0bmJNKSpSt5bYX znGp#6L;WuEx()-oj*)KkSk1uqFCP^|skfq}c~Uhb#IvK+ote&3swsNl3LT7{1dRqy zcE35JGo5s14Q50i?Up!s_q`+hsHS^?_gkajLG5V{UK*^rZ-YrODGYfbFH(09Bla-< zL4H|_Th(=4m{V%HhDsiFb&BsH;k4iN^Span+6W`WY*=Ta|s+Dwf=o@o&{69yYOvcunwNk0RQ= z)4#p~dHs>)sC=K;`G8&#Bsu~88zK`bu#%e=H$$x_G0$a_inm?bP`=KlAY|u9f86@8`ETu9J&H03-_^sjsxOHtaOUw;a&G1b<_Xfc?Dw?_u1@?~@0!$|;LaGl3l5A901rBBIx>msygVO@m8<&)}c{_+cvxXo&>? zcK={o8}yJI1cC&?L7+o&U!4E&+`rcVp2G(Hdwm$k3K3^CRB2-Pad&=O)VG28(T@ci zX+LIPoB$lZ>NpbYcyR^`f_7Z4sV6T9j`<|=lF0C)dQAB6#>)UJ7*=r< z_9I(ds1>Q{FPc;v%q8j9x)d0q%iBwQSq zP4tNTbJ^TBcf}7;X%I!;kCXlzB1JYqQ&cN&o;0*4^Js68+jl@LpR8Gdoq!41~fBBbJE9zYEIi z`AqQoWk<{IF@y!|g`4QM$r3ah)`!0HNKG!DZtI*_TZAOW?%N6*GW_b9?^U?B9bib0 z(Cv;V#xPKxJm#?4oT9nb(_)Hjq3&xJF2qmalvHg@tO>O)oslVj5A=v!U!I8-p*<}h zgL~t5`ZsLe-|Sin2MeV2^}AO}jM2{eX()=U1d`yvUH8!%tohNU+!V_V19~2K8L~mI zCcr8+22cMSpw&=8sK37`@||uB6kub|uC!OR{$5hz`w zw+&|@U;+{^S823%OyNPM&U`@@P<$BkJ!x1@hKrLbXzeEBB;XE6CV(X6xpigmW8Y`b zzFQK}RiDMMD1cl@<>dMah{k^QL!ZL>&^~vQ&HqS)hMTv9e;#qqLL0@TjDqw3-mu^h zf?}2Wj_OXMUli(aZBd1IT7JWd2y_H7#5}`uWL;%hy}@!Jb&!*&frl#99FB!nK$+(K zPQLL+e8p;$HN7tEJr-h9d(w>!sz^QRH#lE% zJs3@RrcxAd^JwnrZ;WY; znUC^76{O~FHuAkiT~XiTKU_{zS&V$u0@SY{JqN|`T+wP>#C<{~_g#5{`iQnI92#$D z#i}V~anPb)2lV4K-)4&_nH-6LJ`@TV^@m#F;FaNP>c7 ze)jD%K@yD#f4X6`VAWKh7unyy7WQWYHt`=Fe4piKNV{Y||EcW^`b4_==)5Gl`F?<2 ze^H5p>>Lnc;liN7+$Xy^X=@fXA4p(a3KuVy-&8Wrsojv zBl-PBl${u0g|_ekhtJ1`Xi3!b4}}kbthpzjYxrdy>2)|pL_184)8=}}zhT_nF7&+5 z2`Y-s%Cf^CEe)Y#_|l$=ky-AO>K%at=3^L3Jd7ynXcKevgPq?l8=J)qc0EUf0u)_7t!xZI<@Uk$H+K}E&_7T1e?2C6}$@RZg*i)tW+nf<|s^rx#^5-DJCOtjQW$sS>w(qY2N#yIpTanJd^ z@&M-#L(48}EW>VDpp;;78=m2B13fd}zKKeJmwoOK&0?EGs5@srx`3Ci987#TAumVU zfoOIYimF{Noph-E3m*^iGGwJIBC&^;Pzy&~PevkJOarIvajA%s#b7snkDL9!`?yfZ z5+ltt5vzVR={e%X&G0FAog?ozK(-7&pE`Z{9LQSN=7hU-5J0=bE})J?Z6sy#$7*PI zA2s}Vk9c%JCK|B9fY9<)7@GZ@O$~h4(D^>rloRksXS09o3AqdbQc0Klv1!TQ8{#+= zUS&b{+XTNtu4O6lYZQKi|0C1j8eDfSRH92O7i)T6V}%OA+rR+n{iO5C^uZh$0pu^v zLi)|ifY5=<(SWzrjfzPt&fDHOpS1NjS0%akr2(<}qNbzu2xkG)uBBIM`3BERe|pg2 zU5M@+KO_$W1hfbiIO*V0%y3L;BmfrlOKr^LIBC*0xK*j|jYHtj%B$zGrVSA9K;TQs z%gH;D|LPN<3a23A@EX`1B1f)jdkH1|60t{Uff)=aD(5&w@2nhfo}B9blypR-(5>DC zPQ0{=1>es3JTA)hj4H|Xi(_OdR^pox2H+FU*{hzJ_m8d1(?j42{1CCGsd5?$g~SMkxL zJ{(iANW9RrKq}~Da|O7YogiDvlek?N0dWbaC;@~(B~eZ%N?Ym_w}v$G?s-Xn7)JmU zSn8&IViy4iMhuX(k~Y|2NBjYFt~43LPe3+6Fh`cRBf!wHP+(8ePN+w%b1yG+wdn=} z&2$zKI3j2Wg-CJ(>tZp;UMxNK+jv<2GWga&ViN*y8Zfbe1QWOwPgPU~fXdI=2v{pe zc!@=`LZL)Mfx3q-(69g7Zs901E0Z-gI6^Vy!gNwHdKPs4Mp@#(we_BwGqUeZ#kzEb z#MlRGbczQSo)(?~(Ma^zBw1@=R$2Jl2n(76NU#N)C?BQ+=d8_8+ z2VWdWC3PfI`I0~+yBhkD-5ve0E+rsbD%pWDrg$AdUBTcFgr_bRc!neirNO4^2#o{66Y`PdNA(M z;-={}c`jVbW6|w2UJ8z^Z^^N5JX0+AZ9ye%v-40_j;5$SqNB<@1ab9@r#NpR$A6R3 zPzLkUCf8I5VmnXjHrtH3!do!bk0TQsT7K0`JdNKEi=pTHW>yKEjpQtLH8h5X+20Vva{d4-0F0c4P!tHDyZRTL7+7 zPr1-A%qzcu=8kVLM+!IcpI+s|B`LSkZW%keN~zm5p7*d@I}RRM+sqbNnM4k5&ef>C znBe&crAjf?!#f%>yfd2H9Mi_JQ}L*1bM zEUl9{_MFHZUg6xtvy-g{CXu{C(naR4y#^O)PKd6i-YGg<^6Vbb{6RU5@Ktm`L(MBR zV;6fWc2TgPOOB?Jk1KqiTHwmt-doI?Jaq5M8^N)TXvz3t@w&-;;rc@EV zCvt3lBh57jjhdf7NXhLZu1);4&e7WiLsN41O&O0wde-U%#FuuyG9dfT`6{}hax@O9 zD|I=NIAS)v?V{qlC)(e9!vc5xJl+YJWB#MPCfjmKo3pdJ+iMpz<>7_Vq$*Dxgj7oy zi2A%G%N9xm%ilI&3d-33MsZb2{&kMtvGw$5+t;@Hw}9VuID-P)?6Y2HTd)6?6up~Kt{*!v#=N`Kcz*73E8OU-^>@~CM>z9cU?u3 zMx|&CnIPHR|JF&E6uy>V{Ban!XKvO6S6D~#a>1S61uDz+zRW7~TVRR14!PB1)S30( z(^SH)#2=aekyB;606C=wRvFt#mV9dUt9`=N$4=Oh$CuXd*}-DYaroI7P?j>y%`)IT zKaZk#;CgjSFhjN8W`EH?76ajkTgUsp%IX!GdCC5B|BT=vza4wjWypkq;FmsqIQ7X5 zFV{$ch|=I*VyJiskFP~9U&S!gfm1V14936qCByVo)W@22(&sS@O(R@x-q!x%9m(rx z`9-UgXG8;7{)f8QP3H}3IrlfLOKnaJt{)UP_-~hMQhg^<9P+HJz73T?5j|W14dech z|6(P4R)GqaxzH$zlPu)^PQjii&4rD}?Df-C&fDYw=*mVKOrwa^<(l5XNj~fOnH;az z_K&J`j);N-lv?UI%UeMnWhYCaS^j&a9Dv|Gna)nmsqA|A?}+cH_*sli#rGZOtqWH@ zDse``#uxjwY5M*^z0njtzPT4`+;m?IJC(3zs;p1*yGT*UY2Jl-IAE}M(k2raWN1x; zSIb6->U~1q*J;up7pHGF^Z(fc#*Nu)(W!cJ^j%IG2=geEmMFzzQy8l^Yp5wkzhm3Cxefuvu=lv+k6aA9DW1R)CK4Lw% zBL9KZ(!WyWm-SLUgRaFv2=^+}>z16+{xV(ndD)vPtJKPbMC3{rD4n4(Y=R$5O^(Jg zo%d7v(MCFqK~fHtFhSL?JUkH0((~(LiOxBck~#BSr;J5Sc^L0y#mYcp+}B$^XNa{{ z(t<+}@{wDJ-b1%PXt1H;Zm`NV>t@al_QMt;dG4 zzmk_fC%nTAoT~uLY=cWF?4~0i>x>DVE9BuQz-t;l@I=&o2y@HNC=`}MMf*a`@6q^= zgxH_C)8ZPJW<5+ad^;eQFWm9_`oR}e-Cet0%_*63(;z=%8r=J9NOD}|)3K;YkB`NW zRNiOH!JrJ&(Wh_4{F6fi^Wm9H#8lfXQ$fj&oH)S#{Ce}wgUCZ=2=aMjw8pTw^^pIP zT%W83bK}pD8Zu1)+(&@QnXX8x1* z3|xf(+<&7&-QZ6OusPPf%hM=ZT$;3EwOCGKwT=UOb^%uDLq; zz~zgh_tgnIZ6b6q_JlxNglT{P9GG06@+vg+5bPfO&xMB+I_xqJs{thUeGh2UCUAXm zRNLGznX>s&SF97E^5$Z&?ec8E(PnhN?)Brd(8XE-&AQSKpEhvFy#95V?lN55sShnd znzRB}ca{Zu1T#wPm4oF7nqH<=q`5B=KYUMZR7y}(;N$E+1P-uhqb#BDfV&k!81&nn zPm#4xQ?F!igVl`IaDh4P0-iiGOI}g{0%LKTH(-FQ;!A8dxittDcQ$GF)}eBv|K<}p z$7xcx>qGJif+W=Yi=p0BOl@anQr}T0w9R`uXE^1;ndRRDX+^ThsIb5}agDj>$b(y3 zOosun)tC&ha+=h?0|BSt?1p|q_1c~21^jy;_I$>7uqgglVD8gO7(76V{P%S)ez@X4 z0m5V!NG!s6{@GNNuy$H-9UYaIZ%vE~49wkpnEIxLY!LNeu~Tj8^eYh0OZSR)WG|+H zhDImEE0`E$g=vSjX}+BLXjx7#uB1s%|8M#9t08}ZYHW=QN1R)YTqrvFp2N;Sc5kJ2 zhf;N@e$rN`hTh)QMs-2*%-L3HgOd@o=EC1;{Q=w_J zSY$`+Aox#%fqRv+xCcNTt`C}0DBVGW>B-4h&+&+019nKF=o3rkjsz*yfNt=>@A ztV@e+J~t!C@YJ57>;lN`$2dO4@QX>ewP$f}1Py2GUf${?W60t72T`FX{U?C{jK$gE zhS_huRIXPvh&BCTpoqlp10|uzlpU5(&*rXrzFB%K$&ugM@{{+|&;x+TyPZK8$Sq`M zf4AFp-s8d9kMMvAayJY>OkZa_6boNN{y3!c#aRU;1=9X-DyTkjE;|@Y0EvHi=WIef zRBzNz#ZM%2II1-A1wH!iD_RJ4WniNq&&9}iGX~(A#lHbLXlx1y63ypHso^|p7TRry z1_WU3pd9?jA~=64)4-62cNoWP)_?(eeK%=xre63rJ75HNqZm3H6f?hp9yh3{xdJ+3 z7qw-UM{kQhvRrs!97e^ZiRx$}>OBqd8y644E^3>;{iSg5jB4#l4Z%7w)FdXzMZ}t7JmOZc$ zdop$v1HxHH=+;j6gebOT+*E_NGopgMqni6}1- z6*zY&Hw{eF_yg4MGCE(J`jAFxk1T+$w)c#R=Y2eY%Vtrx;@u7naGy>S19B#a3xTCwKzulrUe1zmsr-A2lWy= zQZWx!wtwhJ1NEQ8Gqw*q&UUDbS4m}r=Jz(>i(hea`~Cor1?w?cwgdUC?hi3EZl|3hVrRElu^6|0nu0 zPZ9gtC^Vn4a&9XZX!~8MfnfgaZQ+ol)L78#f(XO>BvhElb|2j!6oXw6m0<_K+vots zNvQ!-B*9zVn@z@X)%*K}m(|k%c));}^D(}*$k-x4$EzyEo@fHeAq+SD$(;pU;;F~A zqg5;rf@=(u#t!a^f96K^JuT?j&thFgs*&d0LE>{fbn6-|N-DLrua6Vmy)gg?DmQ=o zC&0W?*#-AJQz_iV)s4BOeP6ttW)qk%Qn6ed$@n!~RdWR-&p)yC-0T2z?k?}DiJ)rV zF+e?XV3fY~0{Jw~aV(JTo#$hj?%WW& zO_~~X^3&~P{l$AHNGxBRE<={m`ne%%%W0dbFOt9YDhIUX0Gf#(4sL_Cy#WXqfGd&X z?mxenQMcWgk%ZZ{S`f4W^+Kw~Lk&K5Kg9)pxjDB}v*T|!_Rh|;bbqCNjm>{n?2sxM zI5{&TIad;X<+zx5xa zbB%63Zj|fX_`rZ72KccDYVD7y%VRSC`0v~G+|2<90Y5o#LN4120rC`>Z;R!>m%F>U zzhW&BuQ7*bM*ePBEr`MLn?Hxp7ZES2F{={(nWiYNtjN9WW zqQCJ*jo4ZbCc4|)t}9xOxDTf8=_%|S_Uk`4p2vs_>e!;(Z`Ek?f*6vAO+i&(aQ54( zYM2;d_zIheR&LcDKL4M)8)KujSzeBQAvbO;*MvP)fRl`uSY|8#_YDfN`+MkQK-PcL z2|<+AwTQ^XwJu05fmpzrLUPpEwfUgHpWmqOA&Cm|x~6IV4V-~+IZmM(&_UO3unTE> zL#vU!Yt-b??yJhkwB=hP7hZAvz1EB$n40q+W{k+IrSL&+rd?pZ*W2R$Q#>B-wAe2N z+_&NWax>v!UTEl-yhki~T(;bvOxohP{t;0y1e~F77WSH8I8mn3b^ibC>u^jiO)2_b1tr$NtaLz_TyT|L6HzHv^vf zpD_4;zPud_T)_J;X8zB?*O!|gY** bjv*WVR4N1mQKkd;6+tf))fLL*%!2+GWIx3h literal 9637 zcmZ{KS6EX~)2@mlhzJ3dCIkpgY0{+ysR0oXM0!z*bdV-35T%A1L8W(4RC)(#BE1uk zjvyVRh8hA%{vE&X;ymX+=OPz-ueE2*nwj;^JF^n`L>oqZjrrPz3m2$0)K&B@T(}qp z{0u2B0dIcRcF111!0oJ|qNwjXy`2&8Sl_sLmp|n(&-?cWU0l2wJvJU59tk}IJ@}>7 zRp90Ov@^qk8P|p(FVt^&Yn`khRq2uGn%`B$m&l4a7s*uMId7t{N-8S)?FkW$E8N0Y zZqkAj=brbN9tOEjHS}Hj_WIV*WWe?=uk7z%-(0qv*p9wdAG?)SYsI?YH~a>gr&FiN zGwGG8-VV7u|4B@A>D?cDz2Gm#a*>0%bxqQDBkvE{O2CjrfG1UyU>=GBosELqha^Fj z^b|)u-CP6o(l#JU;_DFb^cyH==rHUM#Bm4;RH4X0twWU7Av9-vrQ;s zmIQngVw$BwpfEocIzl1+$%o9x+@SuTd%Ycfu+kSiBw!I=X74x4@V2LGgrA2e%OA%D z>*8I~a}}U|5Emk3oWbaKh|7aUAKg$yr%XKBsgSJR&6`bKz;?eY(;?dZnP~~9l_YK> zxVCT@e|&Nh{DYxXh4&PAqRF*lE_fb4@G+PN*S#jU#TL}1kkjP(WMEJk)zy6cQ4qc_ zL~`cafWuzcnzjer>RLpZ^m;&H9Mo4le{1yk)deQS*G2^<$GWd=hgNk61D)iP*%XH+ zjSG-&nyzRg!fuLR?cNAH5AwG`fx~uf!fgZw<$Z42nK}u18>H1gJ+^`{v&Aas*VotAPGZICAZ#7>xD)W((e)Uq|f{ zYKVju2GQsPmV)w6=~^^?LG$0`xs`U4{@Cyjwdae)K2G)(ZQ#2BRr!IFv%QaT;>BZed)~S7K-%ycb2$yvg@ZS5zwYVN(RJiPu~Z`K_w@PuXPzZVwSRtx z{t_K8E$wu==kmNML(ZS^tQ|()u#E%VKhFZXIQc&9$B!c z3^XzmZP~0@G5S_7GIa@v=w$}~Kp`tP`)|7|i{rZFn1_yazS*WL79fMge4`L5s z5#683!c=Txk2aOT(zaw?*^&adv9NwCsd>bQIt9JiNAD8jmtG0HCg?$rXZJgZug77P zTA|yo{8?F|Dzl?S<|Q&d6fwJZti5bgmd&CKy3Ydk$Xji0(AHRSzf!GbKIwTp<`ls& z5m^wJKSwUY0`0WFdo;^^GM|-^=xVSFDJc0eBZA&9D-3#JI3?|I(VgSvVC_9O?+1rJ z$LsFEg9Ab~9pg5i$XD)?vCo~vGqbciV=t4dOTS+woN}%wH{0Y-_nI^f{UcXS)l|%`xZ-Sz|~AReGsAP87zlJ zDihVVG}v4ddtlkf`Qr6rmI2!fJZ>0v!{vE18U#4Lb(cUsz2AK<;U3+J!IDLmH#nC( z4?91tRR>Ag@tf}VjHbmxurp9{`+;({LszpwEem&d_{8z?LOha|SJ_RIp*&Mf9nM6I$juPe<1VKY2sIIgd zW}RdGyn0>9D%v9PXAy>3Z&Ja-kKR0TY=P-fZ%QF`E-#&Tkx{<$WT5v;Y~^2yxu1Q{ zgumZEaCsePi?|xmB_B|{@gA%_09~B7E}4SgtPmUBkTo2@9cd7|bEuCm2g;aU>0KoU zN0K?4A9rP4jrg>^Ighb zPxaA~oLkt0t=3odCylId;#l<%fzRe@iq!z_FD_o0#o6ePe+bv@v{^pj@`=Hmt8>DP z%+dkA=EN+!(mgm39?>1gva7%@)HM-P0bNcvuwv-3y;Nfxx-*af5eA^VevTq=IpoOE zvYc*r$l?M`Lxjk=ZarICqC>!gH!((~!)oi0(vmE}A};vNEQ7w9MP_4FEsg-Mc~zy` z??B@`fy+xr=O3Ht)=ub^zz&P2oMm(q3Y?+P#e=y2kOhiB6);E%jE05M;*kF@E`dYR z{u>^K4PyEDYOZT!PUdP$1+_Hr{nZcAl8I9XgK`zY19l-_mepvCmCE1t)Kck>!b0r_ zV9=_!U%$FsARf%V{`;tHpMk%Sb>K@DUMOx*?IBVvd6c|C$AHq(Sx4aD3;!#x_Y9&b zi2)2Ll+pYtnL(ZRcvXb2Uq^-A;nTwjGaQ)81**7V?L8d*T@JmMyUeCLWq4H1vNvA| zoy8q77fcZ!=^wjn*Z2=O;P_H)WXGG9|K<*I5&!0q4r!JXr)ynx$vaQhQW>T}#W5_Ec*& zaOvwrH27zAFF{_he`2nmPJ+Mp)F=8Iv;?ZE1z=_tX~DT93_`0Vn^c{EE2XWZ=btt?u>Hx^3ItbL;D?~2#( z0jg;|)|wjM>c{--@tuJ^+9E!}$V*;Ps#4P-s`vNw_Wv|s0T)O2Bn`tZ;FUWGlxUu_ z1h>Uazx&mn^JaqIrY%BZ9F`A3YK|}5xw~ID9`V zfupGMy3R2~SXh0#AR>85Nj!L+FFzR(BrYvOy??fTs#8u}r~l}DIn@4b!nC&gZ+{!- zUYWpw=(GfFJBi*ch!+Krl&wkX--lwnnl(NT)6eZ|U+7(Kv}THrk1fWv5q)Dg&qLDJMgd3LLJm$Kzcmh50p4LkjFh{z!jXnX?59tMksv zl`h)R{-E!ZDmaHFa&S3avz%7R>@#4vS>M?ak^BKMafgGdc0KRHTDuv6XF$X;xw{+m z(bz~h9QUhi&C3?r&~eIhc9vqUjyp}jfa)U`JKexmDFUjX{alb0)_HrXXiNtz9Z?tN z1+$W#q359DX!&M6SdH6&@B)!tI+q#iQB*(L#-oaK;(M=L$lM?i^o=JrD=Rs;QHUq2 z9HC^UJo_*&+C6+cFu$E3Q4z$-fx8rPJ;Lc|6sG;eV4j<&+I>!eW6_vQkydj_ab>#)^vSmStaUB3=W%I9*93rIxjOobP9z|95FGeu9fbQWBpTjc-1*pj%0>08P>F6rWP@`3>XP=*0n#d>Hd7aTA>_LtijHIC)O zbmw2IQBW#ETgO{?AeRgAYqT(Lu6rjJODvjtN(yKG;o* z9P3c5uh*=LcM6A~GB;n9uybT8$4Rg8Q2za6^O7tLA|m=d?!Swh9b_@yY3jnRU_cMo zC?r6)4S!P2v?rShIp1=U(cCLj`hBKu99Ow`43X5b66Zo!6{qTv zc+UZZ72h%v)3=(pCd~FS+NAXdb(@srQ!CnKQ^PqfEp039XF0An^7SiI=pgLlbH+{b zrl04Z`@w&WovBnb^K%?- z%Q)!6JhhO$rp*fAW9HMic8}8vo-~vVt06rn?T}gr&q}4P*1oMqis_`(gWgq5F6AA& zuC)CAkG{>pMc!)Hqd$lQod)L1A^y6av9pN8hxB~i0E}lpmPBQ0JCLU_9s`(-3nE|2 zq$Tsp?QOfJvHB*YlMwm%kUB2v*lc2!-(6CRZcR(>EUX;Cd6BLQ8@mYca#FUAW<2Bd zhwU)7=)w=r3;c+5T@WOQLWfU6y>XH&@CMTv@AuE&%1zHdGcQQX?4Kda5xJHhs>w@l z&WkApX{mMF07wckqvG0k7im##x8W)HyaCZ*WJ&{1FCT2H8)DyMH zd+co<|5DFnXaX%T9(Vtx*`&>vS+>W;FSfGm zvr=W{JI}Yp6H$P+-|K4FS1~MHoo;4ec{^Z~&C?+*$Lc)%7-UUU>5I{kGp`i8x=nIA z*~@vGA97;HI^umj{p8|<0CIQsH}@n@#Xax{0d^u0!?aXDl4-&v`t{O)C=iBiiEnz! zq)B3nwN7ncN2`oXkMmV)A$afs*!Qks#bUx7AxOK;NMrp$63F zI!WC3R%?OqWAyT`!|%y(V8E^Qf>t|L#74|lH~D%d0(6#i#w4n;ls@QaqmTjhk3`}% z&tv3sZ2|Z>i%7%&ELo&UBo92?U!dlPlpImVRfr>#BBh^&WwqV(q>l~;zA(b}cAo^& zf(f^oN*!QXkN&!fp7uPVO zup1B4j93DHmmPeIOezNsBqPGyQ&=+uni>Kmv$hgh<;IxgE^vx|D~r~8o*$?j5w{iz zbJ+FYVt9Sa)Nq#`&`n(UL?#0L2!M1oUr7`JD)pZ!ywe-VWzYNrglNzK zkg8wAWI;Wy`>Syt&rgmIjj-?7`s1cLl{@Usr)*D*nGfUdsjy25l!Q(&M+VgE!D+Op z9$EE=LiM6WcU$sn-hWb@?RaMkKRR}P-LwHISV$$dZ{N`_T}sG5jE_c6D)7qC)eZwG zEN5ni00J~ywjwiOa*uT)ybr5{l&7Pra!|KJk@#JpD$Ql5$|-8ryiO$f+brUM(DO4T zJ@v+%CDK4&AOG%?B3KalYfIK%0|av|<3lK!VbxJwmS7la`r{Nj^cvQb&J@AO(t@ z$D>{Ho$o~+YiLYQ-3Jy;vN#e$w(+)FMsK2U7JhNZZ$CIz6$2b3Q+9!@Alj0+pRHx} z#A~&h?zpdUg6_^Z@@d=on=f)7+s@bQ5i}$mEi?(uK<=mX9_hD-uhb>rV=uC=X9@JH>;YMQ1?6SY27)*jw znRP=dMF=@v)&O;%se0&apNRb=uC4iQ9CmR=w5HwSX}wqw^2v#1#HXBIOoh)MjqXf= z{36tMo2E1*J};wQ{#BY+j-Eqs<-DrexU*J)apN$Z{y0)OJr=X8eecKHCw;Z4VEF(= z%s>sz_#NfN9I;QG4wN3aFJ*t(?p2gm!&V5y>Yba%yIV{(Y|R`if-P9X23?)s&|UEM z5W@Oi9QWXh!SVUwkytOAC=ZO6<`ZMc@dnEsZ^_OU8*k1Vp+KL=N)=DW6?Ev5;BFF} z4pj=kIk!1%THgA#Sc5g&46NZ@=5!woI!MpD@66QJ061XCNB4)Q=xB7!yv5iZL%0&) ziNtt!*{txbBCN>AAdC`e5lN$6Y1z(QB`SUBYxMqurK-!6fxqA_G}Xu(Wk-L`ftopf zazERWDQbxu*S0sfrSqeK@#~9-!*o+gx12N9+lIm8iOIUV!!XCV=)`Z0PHUr9aSV%s zHnCCv*~G!A{UBpYrQnnMBB%OZqcNj&T!-j*&y_D_!Mz5XD()`(5g7~}ec9`e8{27r zug+_0X)Uc$xHXk;4X>PsODkCVJ-GaR<%W*hiaTo!VRJ>$m!G3LCK02p`Dz???Vtmj zAye|_ks{<+QRts+-9IILU&;blYm|M&ujE@lw$KX%BeHAd&gTDDH>P$~F7#t$>zpjl*{gAeV-8p;etX1B3}1U%xjQKhmhE~r z4;bHK=vYbf)c|arK8NW+x~mJZF1A?y$*oXZgk$uqprR5uvIi_Vkt1>wwrIzq9i4{h z$iVhu&xcd=8qXycgX>gTWV2;s6Bo)9cFQ=X6-sd9!ppvgaB0CMbmE_2ls-XVO2Jj9 z<;rhPuT)&b9RYTZfBsy&YO}T=$K4?+D&+sLx0vsXcH?=UkB0B&Y4qgZi5Cu)c4C>` zUp#!@QnE~29Y*#}?aIgjvQb-mLF&R)ml@z(;oHY2UcR$H-=H#WKAnDj*_F~`kfD|R zjzn?e&5uovo~a4JSr8DMQXyGT59qS1rTu8GaOOZ!j|o z>ywbHT}8~aU9@TUw|$TspGX^+JCf#f#FE3^-Du%rp!*bnz*1K2qEk18?!`;pmqe9{ z?Tfj;#9%79hhfc%0^+R_#Mn2zj0!m@I3>8omKLDwx@f1@t9$YA!}!+#cpa^$5>=>v zDBcG-N;kxSba3i3zB0!;@Hiv}sGgtS8ikqIc{rLBotEw^N~u_S9YHZPQiW!?C_sKe zQFGtds~725L7v~PeGGWe6sM{P-XJeWiiQa9d&jk#;K|yo1*mcAQumLAx#Kl%VN*2v zR+joUAWf~4EjIeILG6qRf%%5v0!xF?{15ht0Hdr%PsmHD#t*~TBFYgCb$W2rGY#+t z0rs&RLCMI-_LS($4>U{|Itknl&92?lQRh93Z+@|5IpO7Hdj7K{7eSK9r4#aU%d!B; z!Y;g8TgJBz`6_cBgWtRXu#i`7t=RUbK&IxR1m1uisJCPL{x%o^L_nX!*lB$1bl0!A zH;@;`Koj0=Y}l)FqqIwgveUmK~v`Obc32c1xFun>P0_2wj zt_hCL9VH)NHz20~YZ3Rle$|LMRkeS~4xk_jS?w|YRY!q6QpPu@Rr;4KSpqZK9C7MF zjAs*~y(ak6XRLsox@m2ae#4?^<}AB=7EK_6CqmzN0B-V38O(I0%DWpGy54luCbS}is2LP# zu^bRpM`>*H;H}qiRe*2nE4Ih8kZ6b+45*X~uH!D-76;8`J_5%x-G5B`ewuL#1HJmx ziE$+#)y;oL{cC3}XUA-N?jFygP}$f_r5{rolv5$E=yb@BIHw{&{0VqX#aTLI47p1# z^GM*@F1ywF+W;zG(zF`B_XSv5ec?A3O&;pAJ!&YaPXfqNyfo0u@D@3J|8!J<8pUaK z&RALwcv@6ynAWD9pE>h0sh})gdd!MLPLhR4U@6F?ItlU-NDNrJ)LM5K)_xJqd(RIR zv-ZU5TpSvx@+*#KF9V>N{Ufi0M@NU0tfL=renuhbkrG57u0*k$+ZMplA#p0Cr;!>@ zMCCA;(_MX&qbw$G|C67Uqf)KuC~M5T zM6UyM5*9LOflu90&w;igoQ2xrrbE4t?oFU^wk0?MYnR%Kip*|6v@6WUc+^cu_ZujJ zL0KFxV@qP{B=5_;oK$-7PA^sosZ(eh04Rk56*_Xg{KYcf4P0uxupzCU8;OoW;#po* z<;ED1KmveE6?)_(0*Gq0hSW6k*I=f3-!IAhrz0>Ge!g;qa`7q6)#BLZIG~Q*c)bYxlC zt%xE8-iGkR6;X8HY(5E2pYljVsyqnLOzg(z@$SQX>K8^OK$i(*o;%w*J9lK13i|SaVS_Tz zhC*daLG-KAE)&pZOaBIlZxR)iyhZ!5;KYyE9cEP60z{MdBVa!v7vtvE@X^({e^I!j zThh4hHHQe8uofXx3od*f3gr~5)WHOfZ)`mU>XeMJZvT7~l55>-00CNBGr=E%;-i{d zb&0Pkn|GW$)x`u#E<<~T8itsGS^D|OX?wrt;*Cm@=x>VZ2+c)YHmNk;egF+pVE- z+&h$HyVqH7ez&ARau#8CvZ^3Z;%8@P$E@F?}1)|y z1LyiE;&*owW6iF2NQ}=3s_dK+$TMH-@ah7gk^%Ird{T2@F5tMz1u22!{g|?RQ0N*) zbH|whh{FGTDa0Z;4}W&}an>Vgxa0ix;1VwY@TqaGn!ZY3M>I{a2hI@!OIB;rZ{B(0)!$rd!t^eR{rb2At(n0m;?Cl3F#sU z%K6`C(mZT8tbAd+D6!U_`N6xB!*kf^{9v`re_z^xO2z$qvpo7)ix3?e%x z7J)a!A%T4H6gu5RDBbJJ%+|5g)!188kFhw*@x6PeO3KDq`{)8`!Nt2^Tf^haEoUrz zt9sh8>OK7pVM!djEs5r11rId+lK#p50>cK9T;E14QE)1)2EuQKdPA;Ccq)9FvC_EUX?T$!x~N*Db93p1*CM zG;hq*0<;$cf68pQ+~I73i#YFea9-zL;HLX0q!hNPZ!X=54F5q4e(1rB;zn$|RPyK%e z|9SF1U;gvt|1}v2gWtSqO0MYZ*#;tM8ZQlBE{r8v balancedTrees() { + return Arrays.asList( + null, + leaf(1), + tree(1, leaf(2), leaf(3)), + tree( + 1, + leaf(2), + tree(3, leaf(4), null) + ), + tree( + 1, + tree( + 2, + tree(3, leaf(4), null), + leaf(5) + ), + tree( + 6, + leaf(7), + tree(8, null, leaf(9)) + ) + ) + ); + } + + static Collection unbalancedTrees() { + return Arrays.asList( + tree( + 1, + tree(2, leaf(3), null), + null + ), + tree( + 1, + tree( + 2, + tree(3, leaf(4), leaf(5)), + null + ), + tree(6, leaf(7), null) + ), + tree( + 1, + tree(2, leaf(3), null), + tree( + 4, + tree(5, leaf(6), leaf(7)), + null + ) + ) + ); + } + + private static Tree leaf(int value) { + return new Tree(value, null, null); + } + + private static Tree tree(int value, Tree left, Tree right) { + return new Tree(value, left, right); + } +} From de3fc4d1957bf4497cd9d824785e1a3b477fcbbb Mon Sep 17 00:00:00 2001 From: Priyank Srivastava Date: Wed, 6 Nov 2019 03:22:34 +0530 Subject: [PATCH 297/304] BAEL 3320 JCommander (#7971) * init jcommander * add model layer jcommander app * service scaffolding * init jcommander cli layer * wire up services and commands * splitter impl; validator impl; tests and cleanup * cleanup pom * integration tests * fix uuid validator example * optimise uuid regex; if-else to switch * review comments * fix builder formatting * change list assertion in fetch charges tests * missing minor edit * move to new module libraries-3 * rm unwanted files --- libraries-3/README.md | 9 ++ libraries-3/pom.xml | 51 ++++++++++ .../jcommander/helloworld/HelloWorldApp.java | 37 +++++++ .../usagebilling/UsageBasedBillingApp.java | 23 +++++ .../cli/FetchCurrentChargesCommand.java | 67 +++++++++++++ .../usagebilling/cli/SubmitUsageCommand.java | 96 +++++++++++++++++++ .../usagebilling/cli/UsageBasedBilling.java | 80 ++++++++++++++++ .../converter/ISO8601TimestampConverter.java | 33 +++++++ .../cli/splitter/ColonParameterSplitter.java | 15 +++ .../cli/validator/UUIDValidator.java | 26 +++++ .../model/CurrentChargesRequest.java | 16 ++++ .../model/CurrentChargesResponse.java | 56 +++++++++++ .../usagebilling/model/UsageRequest.java | 50 ++++++++++ .../DefaultFetchCurrentChargesService.java | 68 +++++++++++++ .../service/DefaultSubmitUsageService.java | 16 ++++ .../service/FetchCurrentChargesService.java | 13 +++ .../service/SubmitUsageService.java | 12 +++ .../helloworld/HelloWorldAppUnitTest.java | 28 ++++++ .../FetchCurrentChargesCommandUnitTest.java | 61 ++++++++++++ .../cli/SubmitUsageCommandUnitTest.java | 64 +++++++++++++ pom.xml | 2 + 21 files changed, 823 insertions(+) create mode 100644 libraries-3/README.md create mode 100644 libraries-3/pom.xml create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/helloworld/HelloWorldApp.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/UsageBasedBillingApp.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommand.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommand.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/UsageBasedBilling.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/converter/ISO8601TimestampConverter.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/splitter/ColonParameterSplitter.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/validator/UUIDValidator.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesRequest.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesResponse.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/UsageRequest.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultFetchCurrentChargesService.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultSubmitUsageService.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/FetchCurrentChargesService.java create mode 100644 libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/SubmitUsageService.java create mode 100644 libraries-3/src/test/java/com/baeldung/jcommander/helloworld/HelloWorldAppUnitTest.java create mode 100644 libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommandUnitTest.java create mode 100644 libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommandUnitTest.java diff --git a/libraries-3/README.md b/libraries-3/README.md new file mode 100644 index 0000000000..a6c6b190ab --- /dev/null +++ b/libraries-3/README.md @@ -0,0 +1,9 @@ +## Libraries-3 + +This module contains articles about various Java libraries. +These are small libraries that are relatively easy to use and do not require any separate module of their own. + +The code examples related to different libraries are each in their own module. + +Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-modules) we already have separate modules. Please make sure to have a look at the existing modules in such cases. + diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml new file mode 100644 index 0000000000..214e87287d --- /dev/null +++ b/libraries-3/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + libraries-3 + libraries-3 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + jboss-public-repository-group + JBoss Public Repository Group + http://repository.jboss.org/nexus/content/groups/public/ + + true + never + + + true + daily + + + + + + + com.beust + jcommander + ${jcommander.version} + + + org.projectlombok + lombok + ${lombok.version} + + + + + 1.78 + 1.18.6 + UTF-8 + 1.8 + 1.8 + + diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/helloworld/HelloWorldApp.java b/libraries-3/src/main/java/com/baeldung/jcommander/helloworld/HelloWorldApp.java new file mode 100644 index 0000000000..56a74ecf21 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/helloworld/HelloWorldApp.java @@ -0,0 +1,37 @@ +package com.baeldung.jcommander.helloworld; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; + +public class HelloWorldApp { + + /* + * Execute: + * mvn exec:java -Dexec.mainClass=com.baeldung.jcommander.helloworld.HelloWorldApp -q \ + * -Dexec.args="--name JavaWorld" + */ + public static void main(String[] args) { + HelloWorldArgs jArgs = new HelloWorldArgs(); + JCommander helloCmd = JCommander + .newBuilder() + .addObject(jArgs) + .build(); + + helloCmd.parse(args); + System.out.println("Hello " + jArgs.getName()); + } +} + +class HelloWorldArgs { + + @Parameter( + names = "--name", + description = "User name", + required = true + ) + private String name; + + public String getName() { + return name; + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/UsageBasedBillingApp.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/UsageBasedBillingApp.java new file mode 100644 index 0000000000..029e7eed01 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/UsageBasedBillingApp.java @@ -0,0 +1,23 @@ +package com.baeldung.jcommander.usagebilling; + +import com.baeldung.jcommander.usagebilling.cli.UsageBasedBilling; + +public class UsageBasedBillingApp { + + /* + * Entry-point: invokes the cli passing the command-line args + * + * Invoking "Submit" sub-command: + * mvn exec:java \ + -Dexec.mainClass=com.baeldung.jcommander.usagebilling.UsageBasedBillingApp -q \ + -Dexec.args="submit --customer cb898e7a-f2a0-46d2-9a09-531f1cee1839 --subscription subscriptionPQRMN001 --pricing-type PRE_RATED --timestamp 2019-10-03T10:58:00 --quantity 7 --price 24.56" + * + * Invoking "Fetch" sub-command: + * mvn exec:java \ + -Dexec.mainClass=com.baeldung.jcommander.usagebilling.UsageBasedBillingApp -q \ + -Dexec.args="fetch --customer cb898e7a-f2a0-46d2-9a09-531f1cee1839 --subscription subscriptionPQRMN001 subscriptionPQRMN002 subscriptionPQRMN003 --itemized" + */ + public static void main(String[] args) { + new UsageBasedBilling().run(args); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommand.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommand.java new file mode 100644 index 0000000000..ea6b18af53 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommand.java @@ -0,0 +1,67 @@ +package com.baeldung.jcommander.usagebilling.cli; + +import com.baeldung.jcommander.usagebilling.cli.splitter.ColonParameterSplitter; +import com.baeldung.jcommander.usagebilling.cli.validator.UUIDValidator; +import com.baeldung.jcommander.usagebilling.model.CurrentChargesRequest; +import com.baeldung.jcommander.usagebilling.model.CurrentChargesResponse; +import com.baeldung.jcommander.usagebilling.service.FetchCurrentChargesService; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import lombok.Getter; + +import java.util.List; + +import static com.baeldung.jcommander.usagebilling.cli.UsageBasedBilling.*; +import static com.baeldung.jcommander.usagebilling.service.FetchCurrentChargesService.getDefault; + +@Parameters( + commandNames = { FETCH_CMD }, + commandDescription = "Fetch charges for a customer in the current month, can be itemized or aggregated" +) +@Getter +class FetchCurrentChargesCommand { + + FetchCurrentChargesCommand() { + } + + private FetchCurrentChargesService service = getDefault(); + + @Parameter(names = "--help", help = true) + private boolean help; + + @Parameter( + names = { "--customer", "-C" }, + description = "Id of the Customer who's using the services", + validateWith = UUIDValidator.class, + order = 1, + required = true + ) + private String customerId; + + @Parameter( + names = { "--subscription", "-S" }, + description = "Filter charges for specific subscription Ids, includes all subscriptions if no value is specified", + variableArity = true, + splitter = ColonParameterSplitter.class, + order = 2 + ) + private List subscriptionIds; + + @Parameter( + names = { "--itemized" }, + description = "Whether the response should contain breakdown by subscription, only aggregate values are returned by default", + order = 3 + ) + private boolean itemized; + + void fetch() { + CurrentChargesRequest req = CurrentChargesRequest.builder() + .customerId(customerId) + .subscriptionIds(subscriptionIds) + .itemized(itemized) + .build(); + + CurrentChargesResponse response = service.fetch(req); + System.out.println(response); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommand.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommand.java new file mode 100644 index 0000000000..d3516b19d3 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommand.java @@ -0,0 +1,96 @@ +package com.baeldung.jcommander.usagebilling.cli; + +import com.baeldung.jcommander.usagebilling.cli.converter.ISO8601TimestampConverter; +import com.baeldung.jcommander.usagebilling.cli.validator.UUIDValidator; +import com.baeldung.jcommander.usagebilling.model.UsageRequest; +import com.baeldung.jcommander.usagebilling.model.UsageRequest.PricingType; +import com.baeldung.jcommander.usagebilling.service.SubmitUsageService; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import lombok.Getter; + +import java.math.BigDecimal; +import java.time.Instant; + +import static com.baeldung.jcommander.usagebilling.cli.UsageBasedBilling.*; +import static com.baeldung.jcommander.usagebilling.service.SubmitUsageService.getDefault; + +@Parameters( + commandNames = { SUBMIT_CMD }, + commandDescription = "Submit usage for a given customer and subscription, accepts one usage item" +) +@Getter +class SubmitUsageCommand { + + SubmitUsageCommand() { + } + + private SubmitUsageService service = getDefault(); + + @Parameter(names = "--help", help = true) + private boolean help; + + @Parameter( + names = { "--customer", "-C" }, + description = "Id of the Customer who's using the services", + validateWith = UUIDValidator.class, + order = 1, + required = true + ) + private String customerId; + + @Parameter( + names = { "--subscription", "-S" }, + description = "Id of the Subscription that was purchased", + order = 2, + required = true + ) + private String subscriptionId; + + @Parameter( + names = { "--pricing-type", "-P" }, + description = "Pricing type of the usage reported", + order = 3, + required = true + ) + private PricingType pricingType; + + @Parameter( + names = { "--quantity" }, + description = "Used quantity; reported quantity is added over the billing period", + order = 3, + required = true + ) + private Integer quantity; + + @Parameter( + names = { "--timestamp" }, + description = "Timestamp of the usage event, must lie in the current billing period", + converter = ISO8601TimestampConverter.class, + order = 4, + required = true + ) + private Instant timestamp; + + @Parameter( + names = { "--price" }, + description = "If PRE_RATED, unit price to be applied per unit of usage quantity reported", + order = 5 + ) + private BigDecimal price; + + void submit() { + + UsageRequest req = UsageRequest.builder() + .customerId(customerId) + .subscriptionId(subscriptionId) + .pricingType(pricingType) + .quantity(quantity) + .timestamp(timestamp) + .price(price) + .build(); + + String reqId = service.submit(req); + System.out.println("Generated Request Id for reference: " + reqId); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/UsageBasedBilling.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/UsageBasedBilling.java new file mode 100644 index 0000000000..a531a68644 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/UsageBasedBilling.java @@ -0,0 +1,80 @@ +package com.baeldung.jcommander.usagebilling.cli; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.ParameterException; +import com.beust.jcommander.UnixStyleUsageFormatter; + +public class UsageBasedBilling { + + static final String SUBMIT_CMD = "submit"; + static final String FETCH_CMD = "fetch"; + + private JCommander jCommander; + private SubmitUsageCommand submitUsageCmd; + private FetchCurrentChargesCommand fetchChargesCmd; + + public UsageBasedBilling() { + this.submitUsageCmd = new SubmitUsageCommand(); + this.fetchChargesCmd = new FetchCurrentChargesCommand(); + jCommander = JCommander.newBuilder() + .addObject(this) + .addCommand(submitUsageCmd) + .addCommand(fetchChargesCmd) + .build(); + + setUsageFormatter(SUBMIT_CMD); + setUsageFormatter(FETCH_CMD); + } + + public void run(String[] args) { + String parsedCmdStr; + try { + jCommander.parse(args); + parsedCmdStr = jCommander.getParsedCommand(); + + switch (parsedCmdStr) { + case SUBMIT_CMD: + if (submitUsageCmd.isHelp()) { + getSubCommandHandle(SUBMIT_CMD).usage(); + } + System.out.println("Parsing usage request..."); + submitUsageCmd.submit(); + break; + + case FETCH_CMD: + if (fetchChargesCmd.isHelp()) { + getSubCommandHandle(SUBMIT_CMD).usage(); + } + System.out.println("Preparing fetch query..."); + fetchChargesCmd.fetch(); + + break; + + default: + System.err.println("Invalid command: " + parsedCmdStr); + } + } catch (ParameterException e) { + System.err.println(e.getLocalizedMessage()); + parsedCmdStr = jCommander.getParsedCommand(); + if (parsedCmdStr != null) { + getSubCommandHandle(parsedCmdStr).usage(); + } else { + jCommander.usage(); + } + } + } + + private JCommander getSubCommandHandle(String command) { + JCommander cmd = jCommander.getCommands().get(command); + + if (cmd == null) { + System.err.println("Invalid command: " + command); + } + return cmd; + } + + private void setUsageFormatter(String subCommand) { + JCommander cmd = getSubCommandHandle(subCommand); + cmd.setUsageFormatter(new UnixStyleUsageFormatter(cmd)); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/converter/ISO8601TimestampConverter.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/converter/ISO8601TimestampConverter.java new file mode 100644 index 0000000000..e54865a811 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/converter/ISO8601TimestampConverter.java @@ -0,0 +1,33 @@ +package com.baeldung.jcommander.usagebilling.cli.converter; + +import com.beust.jcommander.ParameterException; +import com.beust.jcommander.converters.BaseConverter; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +import static java.lang.String.format; + +public class ISO8601TimestampConverter extends BaseConverter { + + private static final DateTimeFormatter TS_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss"); + + public ISO8601TimestampConverter(String optionName) { + super(optionName); + } + + @Override + public Instant convert(String value) { + try { + return LocalDateTime + .parse(value, TS_FORMATTER) + .atOffset(ZoneOffset.UTC) + .toInstant(); + } catch (DateTimeParseException e) { + throw new ParameterException(getErrorString(value, format("an ISO-8601 formatted timestamp (%s)", TS_FORMATTER.toString()))); + } + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/splitter/ColonParameterSplitter.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/splitter/ColonParameterSplitter.java new file mode 100644 index 0000000000..f24c028123 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/splitter/ColonParameterSplitter.java @@ -0,0 +1,15 @@ +package com.baeldung.jcommander.usagebilling.cli.splitter; + +import com.beust.jcommander.converters.IParameterSplitter; + +import java.util.List; + +import static java.util.Arrays.asList; + +public class ColonParameterSplitter implements IParameterSplitter { + + @Override + public List split(String value) { + return asList(value.split(":")); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/validator/UUIDValidator.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/validator/UUIDValidator.java new file mode 100644 index 0000000000..a72912f7d0 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/cli/validator/UUIDValidator.java @@ -0,0 +1,26 @@ +package com.baeldung.jcommander.usagebilling.cli.validator; + +import com.beust.jcommander.IParameterValidator; +import com.beust.jcommander.ParameterException; + +import java.util.regex.Pattern; + +public class UUIDValidator implements IParameterValidator { + + private static final String UUID_REGEX = + "[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}"; + + @Override + public void validate(String name, String value) throws ParameterException { + if (!isValidUUID(value)) { + throw new ParameterException( + "String parameter " + value + " is not a valid UUID."); + } + } + + private boolean isValidUUID(String value) { + return Pattern + .compile(UUID_REGEX) + .matcher(value).matches(); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesRequest.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesRequest.java new file mode 100644 index 0000000000..93dd7a5732 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesRequest.java @@ -0,0 +1,16 @@ +package com.baeldung.jcommander.usagebilling.model; + +import lombok.*; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PACKAGE) +@AllArgsConstructor(access = AccessLevel.PACKAGE) +@Builder +@Getter +public class CurrentChargesRequest { + + private String customerId; + private List subscriptionIds; + private boolean itemized; +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesResponse.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesResponse.java new file mode 100644 index 0000000000..865a6e4a3d --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/CurrentChargesResponse.java @@ -0,0 +1,56 @@ +package com.baeldung.jcommander.usagebilling.model; + +import lombok.*; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PACKAGE) +@AllArgsConstructor(access = AccessLevel.PACKAGE) +@Builder +@Getter +public class CurrentChargesResponse { + + private String customerId; + private BigDecimal amountDue; + private List lineItems; + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb + .append("Current Month Charges: {") + .append("\n\tcustomer: ") + .append(this.customerId) + .append("\n\ttotalAmountDue: ") + .append(this.amountDue.setScale(2, RoundingMode.HALF_UP)) + .append("\n\tlineItems: ["); + + for (LineItem li : this.lineItems) { + sb + .append("\n\t\t{") + .append("\n\t\t\tsubscription: ") + .append(li.subscriptionId) + .append("\n\t\t\tamount: ") + .append(li.amount.setScale(2, RoundingMode.HALF_UP)) + .append("\n\t\t\tquantity: ") + .append(li.quantity) + .append("\n\t\t},"); + } + + sb.append("\n\t]\n}\n"); + return sb.toString(); + } + + @NoArgsConstructor(access = AccessLevel.PACKAGE) + @AllArgsConstructor(access = AccessLevel.PACKAGE) + @Builder + @Getter + public static class LineItem { + + private String subscriptionId; + private BigDecimal amount; + private Integer quantity; + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/UsageRequest.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/UsageRequest.java new file mode 100644 index 0000000000..2785474acf --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/model/UsageRequest.java @@ -0,0 +1,50 @@ +package com.baeldung.jcommander.usagebilling.model; + +import lombok.*; + +import java.math.BigDecimal; +import java.time.Instant; + +@NoArgsConstructor(access = AccessLevel.PACKAGE) +@AllArgsConstructor(access = AccessLevel.PACKAGE) +@Builder +@Getter +public class UsageRequest { + + private String customerId; + private String subscriptionId; + private PricingType pricingType; + private Integer quantity; + private BigDecimal price; + private Instant timestamp; + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb + .append("\nUsage: {") + .append("\n\tcustomer: ") + .append(this.customerId) + .append("\n\tsubscription: ") + .append(this.subscriptionId) + .append("\n\tquantity: ") + .append(this.quantity) + .append("\n\ttimestamp: ") + .append(this.timestamp) + .append("\n\tpricingType: ") + .append(this.pricingType); + + if (PricingType.PRE_RATED == this.pricingType) { + sb + .append("\n\tpreRatedAt: ") + .append(this.price); + } + + sb.append("\n}\n"); + return sb.toString(); + } + + public enum PricingType { + PRE_RATED, UNRATED + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultFetchCurrentChargesService.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultFetchCurrentChargesService.java new file mode 100644 index 0000000000..6436d49875 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultFetchCurrentChargesService.java @@ -0,0 +1,68 @@ +package com.baeldung.jcommander.usagebilling.service; + +import com.baeldung.jcommander.usagebilling.model.CurrentChargesRequest; +import com.baeldung.jcommander.usagebilling.model.CurrentChargesResponse; +import com.baeldung.jcommander.usagebilling.model.CurrentChargesResponse.LineItem; + +import java.math.BigDecimal; +import java.util.List; +import java.util.UUID; + +import static java.lang.String.format; +import static java.util.Arrays.asList; +import static java.util.Arrays.fill; +import static java.util.Collections.emptyList; +import static java.util.concurrent.ThreadLocalRandom.current; +import static java.util.stream.Collectors.toList; + +class DefaultFetchCurrentChargesService implements FetchCurrentChargesService { + + @Override + public CurrentChargesResponse fetch(CurrentChargesRequest request) { + List subscriptions = request.getSubscriptionIds(); + + if (subscriptions == null || subscriptions.isEmpty()) { + System.out.println("Fetching ALL charges for customer: " + request.getCustomerId()); + subscriptions = mockSubscriptions(); + + } else { + System.out.println(format("Fetching charges for customer: %s and subscriptions: %s", request.getCustomerId(), subscriptions)); + } + + CurrentChargesResponse charges = mockCharges(request.getCustomerId(), subscriptions, request.isItemized()); + System.out.println("Fetched charges..."); + return charges; + } + + private CurrentChargesResponse mockCharges(String customerId, List subscriptions, boolean itemized) { + List lineItems = mockLineItems(subscriptions); + BigDecimal amountDue = lineItems + .stream() + .map(li -> li.getAmount()) + .reduce(new BigDecimal("0"), BigDecimal::add); + + return CurrentChargesResponse + .builder() + .customerId(customerId) + .lineItems(itemized ? lineItems : emptyList()) + .amountDue(amountDue) + .build(); + } + + private List mockLineItems(List subscriptions) { + return subscriptions + .stream() + .map(subscription -> LineItem.builder() + .subscriptionId(subscription) + .quantity(current().nextInt(20)) + .amount(new BigDecimal(current().nextDouble(1_000))) + .build()) + .collect(toList()); + } + + private List mockSubscriptions() { + String[] subscriptions = new String[5]; + fill(subscriptions, UUID.randomUUID().toString()); + return asList(subscriptions); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultSubmitUsageService.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultSubmitUsageService.java new file mode 100644 index 0000000000..44ac9e9ed7 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/DefaultSubmitUsageService.java @@ -0,0 +1,16 @@ +package com.baeldung.jcommander.usagebilling.service; + +import com.baeldung.jcommander.usagebilling.model.UsageRequest; + +import java.util.UUID; + +class DefaultSubmitUsageService implements SubmitUsageService { + + @Override + public String submit(UsageRequest request) { + System.out.println("Submitting usage..." + request); + + System.out.println("Submitted usage successfully..."); + return UUID.randomUUID().toString(); + } +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/FetchCurrentChargesService.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/FetchCurrentChargesService.java new file mode 100644 index 0000000000..2cc56658ff --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/FetchCurrentChargesService.java @@ -0,0 +1,13 @@ +package com.baeldung.jcommander.usagebilling.service; + +import com.baeldung.jcommander.usagebilling.model.CurrentChargesRequest; +import com.baeldung.jcommander.usagebilling.model.CurrentChargesResponse; + +public interface FetchCurrentChargesService { + + static FetchCurrentChargesService getDefault() { + return new DefaultFetchCurrentChargesService(); + } + + CurrentChargesResponse fetch(CurrentChargesRequest request); +} diff --git a/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/SubmitUsageService.java b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/SubmitUsageService.java new file mode 100644 index 0000000000..2a29e6e474 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/jcommander/usagebilling/service/SubmitUsageService.java @@ -0,0 +1,12 @@ +package com.baeldung.jcommander.usagebilling.service; + +import com.baeldung.jcommander.usagebilling.model.UsageRequest; + +public interface SubmitUsageService { + + static SubmitUsageService getDefault() { + return new DefaultSubmitUsageService(); + } + + String submit(UsageRequest request); +} diff --git a/libraries-3/src/test/java/com/baeldung/jcommander/helloworld/HelloWorldAppUnitTest.java b/libraries-3/src/test/java/com/baeldung/jcommander/helloworld/HelloWorldAppUnitTest.java new file mode 100644 index 0000000000..48b3ac2896 --- /dev/null +++ b/libraries-3/src/test/java/com/baeldung/jcommander/helloworld/HelloWorldAppUnitTest.java @@ -0,0 +1,28 @@ +package com.baeldung.jcommander.helloworld; + +import com.beust.jcommander.JCommander; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class HelloWorldAppUnitTest { + + @Test + public void whenJCommanderInvokedWithArgs_thenArgsParsed() { + + HelloWorldArgs jArgs = new HelloWorldArgs(); + JCommander helloCmd = JCommander + .newBuilder() + .addObject(jArgs) + .build(); + + // when + String[] argv = new String[] { + "--name", "JavaWorld" + }; + helloCmd.parse(argv); + + // then + assertEquals("JavaWorld", jArgs.getName()); + } +} diff --git a/libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommandUnitTest.java b/libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommandUnitTest.java new file mode 100644 index 0000000000..b639661c39 --- /dev/null +++ b/libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/FetchCurrentChargesCommandUnitTest.java @@ -0,0 +1,61 @@ +package com.baeldung.jcommander.usagebilling.cli; + +import com.beust.jcommander.JCommander; +import org.junit.Test; + +import static org.hamcrest.collection.IsIterableContainingInOrder.contains; +import static org.junit.Assert.assertThat; + +public class FetchCurrentChargesCommandUnitTest { + + private JCommander jc = JCommander.newBuilder() + .addObject(new FetchCurrentChargesCommand()) + .build(); + + @Test + public void whenParsedMultipleSubscriptionsParameter_thenParameterSubscriptionsIsPopulated() { + FetchCurrentChargesCommand cmd = (FetchCurrentChargesCommand) jc + .getObjects() + .get(0); + + jc.parse(new String[] { + "-C", "cb898e7a-f2a0-46d2-9a09-531f1cee1839", + "-S", "subscriptionA001", + "-S", "subscriptionA002", + "-S", "subscriptionA003", + }); + + assertThat(cmd.getSubscriptionIds(), + contains("subscriptionA001", "subscriptionA002", "subscriptionA003")); + } + + @Test + public void whenParsedSubscriptionsColonSeparatedParameter_thenParameterSubscriptionsIsPopulated() { + FetchCurrentChargesCommand cmd = (FetchCurrentChargesCommand) jc + .getObjects() + .get(0); + + jc.parse(new String[] { + "-C", "cb898e7a-f2a0-46d2-9a09-531f1cee1839", + "-S", "subscriptionA001:subscriptionA002:subscriptionA003", + }); + + assertThat(cmd.getSubscriptionIds(), + contains("subscriptionA001", "subscriptionA002", "subscriptionA003")); + } + + @Test + public void whenParsedSubscriptionsWithVariableArity_thenParameterSubscriptionsIsPopulated() { + FetchCurrentChargesCommand cmd = (FetchCurrentChargesCommand) jc + .getObjects() + .get(0); + + jc.parse(new String[] { + "-C", "cb898e7a-f2a0-46d2-9a09-531f1cee1839", + "-S", "subscriptionA001", "subscriptionA002", "subscriptionA003", + }); + + assertThat(cmd.getSubscriptionIds(), + contains("subscriptionA001", "subscriptionA002", "subscriptionA003")); + } +} diff --git a/libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommandUnitTest.java b/libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommandUnitTest.java new file mode 100644 index 0000000000..d6ce132053 --- /dev/null +++ b/libraries-3/src/test/java/com/baeldung/jcommander/usagebilling/cli/SubmitUsageCommandUnitTest.java @@ -0,0 +1,64 @@ +package com.baeldung.jcommander.usagebilling.cli; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.ParameterException; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class SubmitUsageCommandUnitTest { + + private JCommander jc = JCommander.newBuilder() + .addObject(new SubmitUsageCommand()) + .build(); + + @Test + public void whenParsedCustomerParameter_thenParameterOfTypeStringIsPopulated() { + jc.parse(new String[] { + "--customer", "cb898e7a-f2a0-46d2-9a09-531f1cee1839", + "--subscription", "subscriptionPQRMN001", + "--pricing-type", "PRE_RATED", + "--timestamp", "2019-10-03T10:58:00", + "--quantity", "7", + "--price", "24.56" + }); + + SubmitUsageCommand cmd = (SubmitUsageCommand) jc + .getObjects() + .get(0); + assertEquals("cb898e7a-f2a0-46d2-9a09-531f1cee1839", cmd.getCustomerId()); + } + + @Test + public void whenParsedTimestampParameter_thenParameterOfTypeInstantIsPopulated() { + jc.parse(new String[] { + "--customer", "cb898e7a-f2a0-46d2-9a09-531f1cee1839", + "--subscription", "subscriptionPQRMN001", + "--pricing-type", "PRE_RATED", + "--timestamp", "2019-10-03T10:58:00", + "--quantity", "7", + "--price", "24.56" + }); + + SubmitUsageCommand cmd = (SubmitUsageCommand) jc + .getObjects() + .get(0); + assertEquals("2019-10-03T10:58:00Z", cmd + .getTimestamp() + .toString()); + } + + @Test(expected = ParameterException.class) + public void whenParsedCustomerIdNotUUID_thenParameterException() { + jc.parse(new String[] { + "--customer", "customer001", + "--subscription", "subscriptionPQRMN001", + "--pricing-type", "PRE_RATED", + "--timestamp", "2019-10-03T10:58:00", + "--quantity", "7", + "--price", "24.56" + }); + } +} diff --git a/pom.xml b/pom.xml index d2433d11b3..d692e507f9 100644 --- a/pom.xml +++ b/pom.xml @@ -541,6 +541,7 @@ libraries libraries-2 + libraries-3 libraries-data libraries-data-2 libraries-data-db @@ -1307,6 +1308,7 @@ libraries + libraries-3 libraries-data libraries-data-2 libraries-data-db From c748c6c10cec6134bc8c8148a0bdafaa566ff170 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Wed, 6 Nov 2019 11:07:12 +0330 Subject: [PATCH 298/304] Fixed the Vault Issue --- .../springvault/VaultIntegrationTest.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/spring-vault/src/test/java/org/baeldung/springvault/VaultIntegrationTest.java b/spring-vault/src/test/java/org/baeldung/springvault/VaultIntegrationTest.java index 75c700ee26..9f4b5d82a4 100644 --- a/spring-vault/src/test/java/org/baeldung/springvault/VaultIntegrationTest.java +++ b/spring-vault/src/test/java/org/baeldung/springvault/VaultIntegrationTest.java @@ -1,36 +1,28 @@ package org.baeldung.springvault; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.Ignore; import org.junit.Test; -import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.core.annotation.Order; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import org.springframework.vault.authentication.TokenAuthentication; -import org.springframework.vault.client.VaultEndpoint; -import org.springframework.vault.core.VaultTemplate; -import org.springframework.vault.support.VaultResponse; +import java.net.URISyntaxException; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * These tests are requiring the {@code vault} command to be installed and available in the executing + * platform. So, if you intend to run them in your environment, the please install the vault and then + * run the ignored tests. + */ @RunWith(SpringRunner.class) @SpringBootTest(classes = CredentialsService.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ContextConfiguration(classes = VaultTestConfiguration.class, loader = AnnotationConfigContextLoader.class) @@ -47,6 +39,7 @@ public class VaultIntegrationTest { * @throws URISyntaxException */ @Test + @Ignore public void givenCredentials_whenSecureCredentials_thenCredentialsSecured() throws URISyntaxException { try { // Given @@ -63,9 +56,11 @@ public class VaultIntegrationTest { /** * Test to access credentials + * * @throws URISyntaxException */ @Test + @Ignore public void whenAccessCredentials_thenCredentialsRetrieved() throws URISyntaxException { // Given From cd0b61cced436ae2b57d81b3bc6d6bf2165cd9cb Mon Sep 17 00:00:00 2001 From: catalin-burcea Date: Wed, 6 Nov 2019 17:04:00 +0200 Subject: [PATCH 299/304] [BAEL-15998] - Move articles out of core-java-io part 1 --- core-java-modules/README.md | 1 - core-java-modules/core-java-io/README.md | 12 -- core-java-modules/core-java-io/pom.xml | 7 - .../com/baeldung/java/nio/selector/README.md | 2 - .../filechannel/FileChannelUnitTest.java | 165 ------------------ .../java/com/baeldung/java/nio2/README.md | 11 -- .../src/test/resources/test_truncate.txt | 1 - .../test_write_using_filechannel.txt | 1 - .../core-java-networking-2/README.md | 9 +- .../core-java-networking-2/pom.xml | 13 +- .../com/baeldung/download/FileDownload.java | 2 +- .../baeldung/download/ResumableDownload.java | 0 .../download/FileDownloadIntegrationTest.java | 12 +- core-java-modules/core-java-nio-2/README.md | 11 ++ core-java-modules/core-java-nio-2/pom.xml | 17 ++ .../com/baeldung}/selector/EchoClient.java | 2 +- .../com/baeldung}/selector/EchoServer.java | 2 +- .../com/baeldung/symlink/SymLinkExample.java | 4 +- .../watcher/DirectoryWatcherExample.java | 10 +- .../MappedByteBufferUnitTest.java | 0 .../baeldung}/selector/NioEchoLiveTest.java | 12 +- .../symlink/SymLinkExampleManualTest.java | 4 +- .../src/test/resources/fileToRead.txt | 0 .../src/test/resources/fileToWriteTo.txt | 0 core-java-modules/core-java-nio/README.md | 11 +- core-java-modules/core-java-nio/pom.xml | 1 + .../filevisitor}/FileSearchExample.java | 2 +- .../filevisitor}/FileVisitorImpl.java | 2 +- .../com/baeldung/{file => lines}/Main.java | 18 +- .../{file => lines}/NumberOfLineFinder.java | 2 +- .../com/baeldung}/async/AsyncEchoClient.java | 2 +- .../async/AsyncEchoIntegrationTest.java | 2 +- .../com/baeldung}/async/AsyncEchoServer.java | 2 +- .../com/baeldung}/async/AsyncEchoServer2.java | 2 +- .../AsyncFileChannelIntegrationTest.java} | 4 +- .../BasicAttribsIntegrationTest.java | 2 +- .../baeldung/file}/FileIntegrationTest.java | 2 +- .../NumberOfLineFinderUnitTest.java | 18 +- .../com/baeldung/path}/PathManualTest.java | 8 +- .../src/test/resources/.gitignore | 13 -- .../core-java-nio/src/test/resources/file.txt | 1 + pom.xml | 2 + 42 files changed, 111 insertions(+), 281 deletions(-) delete mode 100644 core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/README.md delete mode 100644 core-java-modules/core-java-io/src/test/java/com/baeldung/filechannel/FileChannelUnitTest.java delete mode 100644 core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/README.md delete mode 100644 core-java-modules/core-java-io/src/test/resources/test_truncate.txt delete mode 100644 core-java-modules/core-java-io/src/test/resources/test_write_using_filechannel.txt rename core-java-modules/{core-java-io => core-java-networking-2}/src/main/java/com/baeldung/download/FileDownload.java (99%) rename core-java-modules/{core-java-io => core-java-networking-2}/src/main/java/com/baeldung/download/ResumableDownload.java (100%) rename core-java-modules/{core-java-io => core-java-networking-2}/src/test/java/com/baeldung/download/FileDownloadIntegrationTest.java (98%) create mode 100644 core-java-modules/core-java-nio-2/README.md create mode 100644 core-java-modules/core-java-nio-2/pom.xml rename core-java-modules/{core-java-io/src/main/java/com/baeldung/java/nio => core-java-nio-2/src/main/java/com/baeldung}/selector/EchoClient.java (96%) rename core-java-modules/{core-java-io/src/main/java/com/baeldung/java/nio => core-java-nio-2/src/main/java/com/baeldung}/selector/EchoServer.java (98%) rename core-java-modules/{core-java-io => core-java-nio-2}/src/main/java/com/baeldung/symlink/SymLinkExample.java (93%) rename core-java-modules/{core-java-io/src/main/java/com/baeldung/java/nio2 => core-java-nio-2/src/main/java/com/baeldung}/watcher/DirectoryWatcherExample.java (74%) rename core-java-modules/{core-java-io => core-java-nio-2}/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java (100%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio => core-java-nio-2/src/test/java/com/baeldung}/selector/NioEchoLiveTest.java (87%) rename core-java-modules/{core-java-io => core-java-nio-2}/src/test/java/com/baeldung/symlink/SymLinkExampleManualTest.java (100%) rename core-java-modules/{core-java-io => core-java-nio-2}/src/test/resources/fileToRead.txt (100%) rename core-java-modules/{core-java-io => core-java-nio-2}/src/test/resources/fileToWriteTo.txt (100%) rename core-java-modules/{core-java-io/src/main/java/com/baeldung/java/nio2/visitor => core-java-nio/src/main/java/com/baeldung/filevisitor}/FileSearchExample.java (97%) rename core-java-modules/{core-java-io/src/main/java/com/baeldung/java/nio2/visitor => core-java-nio/src/main/java/com/baeldung/filevisitor}/FileVisitorImpl.java (94%) rename core-java-modules/core-java-nio/src/main/java/com/baeldung/{file => lines}/Main.java (62%) rename core-java-modules/core-java-nio/src/main/java/com/baeldung/{file => lines}/NumberOfLineFinder.java (99%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2 => core-java-nio/src/test/java/com/baeldung}/async/AsyncEchoClient.java (98%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2 => core-java-nio/src/test/java/com/baeldung}/async/AsyncEchoIntegrationTest.java (95%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2 => core-java-nio/src/test/java/com/baeldung}/async/AsyncEchoServer.java (98%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2 => core-java-nio/src/test/java/com/baeldung}/async/AsyncEchoServer2.java (98%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncFileIntegrationTest.java => core-java-nio/src/test/java/com/baeldung/asyncfilechannel/AsyncFileChannelIntegrationTest.java} (98%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2 => core-java-nio/src/test/java/com/baeldung}/attributes/BasicAttribsIntegrationTest.java (98%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2 => core-java-nio/src/test/java/com/baeldung/file}/FileIntegrationTest.java (99%) rename core-java-modules/core-java-nio/src/test/java/com/baeldung/{file => lines}/NumberOfLineFinderUnitTest.java (71%) rename core-java-modules/{core-java-io/src/test/java/com/baeldung/java/nio2 => core-java-nio/src/test/java/com/baeldung/path}/PathManualTest.java (97%) delete mode 100644 core-java-modules/core-java-nio/src/test/resources/.gitignore create mode 100644 core-java-modules/core-java-nio/src/test/resources/file.txt diff --git a/core-java-modules/README.md b/core-java-modules/README.md index 55dacca916..fa77846b45 100644 --- a/core-java-modules/README.md +++ b/core-java-modules/README.md @@ -5,6 +5,5 @@ This module contains modules about core Java ## Relevant articles: - [Multi-Module Maven Application with Java Modules](https://www.baeldung.com/maven-multi-module-project-java-jpms) -- [Guide to Java FileChannel](https://www.baeldung.com/java-filechannel) - [Understanding the NumberFormatException in Java](https://www.baeldung.com/java-number-format-exception) - [Will an Error Be Caught by Catch Block in Java?](https://www.baeldung.com/java-error-catch) diff --git a/core-java-modules/core-java-io/README.md b/core-java-modules/core-java-io/README.md index 34b2f371e1..2a68e861e8 100644 --- a/core-java-modules/core-java-io/README.md +++ b/core-java-modules/core-java-io/README.md @@ -13,22 +13,11 @@ This module contains articles about core Java input and output (IO) - [Differences Between the Java WatchService API and the Apache Commons IO Monitor Library](http://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library) - [File Size in Java](http://www.baeldung.com/java-file-size) - [Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java](http://www.baeldung.com/java-path) -- [Using Java MappedByteBuffer](http://www.baeldung.com/java-mapped-byte-buffer) - [How to Copy a File with Java](http://www.baeldung.com/java-copy-file) - [Java – Append Data to a File](http://www.baeldung.com/java-append-to-file) - [FileNotFoundException in Java](http://www.baeldung.com/java-filenotfound-exception) - [How to Read a File in Java](http://www.baeldung.com/reading-file-in-java) -- [A Guide To NIO2 Asynchronous File Channel](http://www.baeldung.com/java-nio2-async-file-channel) -- [A Guide To NIO2 FileVisitor](http://www.baeldung.com/java-nio2-file-visitor) -- [A Guide To NIO2 File Attribute APIs](http://www.baeldung.com/java-nio2-file-attribute) -- [Introduction to the Java NIO2 File API](http://www.baeldung.com/java-nio-2-file-api) - [Zipping and Unzipping in Java](http://www.baeldung.com/java-compress-and-uncompress) -- [Java NIO2 Path API](http://www.baeldung.com/java-nio-2-path) -- [A Guide to WatchService in Java NIO2](http://www.baeldung.com/java-nio2-watchservice) -- [Guide to Java NIO2 Asynchronous Channel APIs](http://www.baeldung.com/java-nio-2-async-channels) -- [A Guide to NIO2 Asynchronous Socket Channel](http://www.baeldung.com/java-nio2-async-socket-channel) -- [Download a File From an URL in Java](http://www.baeldung.com/java-download-file) -- [Create a Symbolic Link with Java](http://www.baeldung.com/java-symlink) - [Quick Use of FilenameFilter](http://www.baeldung.com/java-filename-filter) - [Read a File into an ArrayList](https://www.baeldung.com/java-file-to-arraylist) - [Guide to Java OutputStream](https://www.baeldung.com/java-outputstream) @@ -40,6 +29,5 @@ This module contains articles about core Java input and output (IO) - [How to Write to a CSV File in Java](https://www.baeldung.com/java-csv) - [List Files in a Directory in Java](https://www.baeldung.com/java-list-directory-files) - [Java InputStream to Byte Array and ByteBuffer](https://www.baeldung.com/convert-input-stream-to-array-of-bytes) -- [Introduction to the Java NIO Selector](https://www.baeldung.com/java-nio-selector) - [How to Avoid the Java FileNotFoundException When Loading Resources](https://www.baeldung.com/java-classpath-resource-cannot-be-opened) - [[More -->]](/core-java-modules/core-java-io-2) diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml index 3478f71286..393ab5e318 100644 --- a/core-java-modules/core-java-io/pom.xml +++ b/core-java-modules/core-java-io/pom.xml @@ -27,12 +27,6 @@ ${hsqldb.version} runtime - - - org.asynchttpclient - async-http-client - ${async-http-client.version} - com.opencsv opencsv @@ -155,7 +149,6 @@ 3.0.0-M1 2.4.0 - 2.4.5 1.18 0.1.5 diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/README.md b/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/README.md deleted file mode 100644 index b28aae1397..0000000000 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/README.md +++ /dev/null @@ -1,2 +0,0 @@ -###Relevant Articles: -- [Introduction to the Java NIO Selector](http://www.baeldung.com/java-nio-selector) diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/filechannel/FileChannelUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/filechannel/FileChannelUnitTest.java deleted file mode 100644 index 6964ba80e3..0000000000 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/filechannel/FileChannelUnitTest.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.baeldung.filechannel; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.ByteBuffer; -import java.nio.MappedByteBuffer; -import java.nio.channels.FileChannel; -import java.nio.channels.FileLock; -import java.nio.charset.StandardCharsets; - -import org.junit.Test; - -public class FileChannelUnitTest { - - @Test - public void givenFile_whenReadWithFileChannelUsingRandomAccessFile_thenCorrect() throws IOException { - - try (RandomAccessFile reader = new RandomAccessFile("src/test/resources/test_read.in", "r"); - FileChannel channel = reader.getChannel(); - ByteArrayOutputStream out = new ByteArrayOutputStream();) { - - int bufferSize = 1024; - if (bufferSize > channel.size()) { - bufferSize = (int) channel.size(); - } - ByteBuffer buff = ByteBuffer.allocate(bufferSize); - - while (channel.read(buff) > 0) { - out.write(buff.array(), 0, buff.position()); - buff.clear(); - } - - String fileContent = new String(out.toByteArray(), StandardCharsets.UTF_8); - - assertEquals("Hello world", fileContent); - } - } - - @Test - public void givenFile_whenReadWithFileChannelUsingFileInputStream_thenCorrect() throws IOException { - - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - FileInputStream fin = new FileInputStream("src/test/resources/test_read.in"); - FileChannel channel = fin.getChannel();) { - - int bufferSize = 1024; - if (bufferSize > channel.size()) { - bufferSize = (int) channel.size(); - } - ByteBuffer buff = ByteBuffer.allocate(bufferSize); - - while (channel.read(buff) > 0) { - out.write(buff.array(), 0, buff.position()); - buff.clear(); - } - String fileContent = new String(out.toByteArray(), StandardCharsets.UTF_8); - - assertEquals("Hello world", fileContent); - } - } - - @Test - public void givenFile_whenReadAFileSectionIntoMemoryWithFileChannel_thenCorrect() throws IOException { - - try (RandomAccessFile reader = new RandomAccessFile("src/test/resources/test_read.in", "r"); - FileChannel channel = reader.getChannel(); - ByteArrayOutputStream out = new ByteArrayOutputStream();) { - - MappedByteBuffer buff = channel.map(FileChannel.MapMode.READ_ONLY, 6, 5); - - if (buff.hasRemaining()) { - byte[] data = new byte[buff.remaining()]; - buff.get(data); - assertEquals("world", new String(data, StandardCharsets.UTF_8)); - } - } - } - - @Test - public void whenWriteWithFileChannelUsingRandomAccessFile_thenCorrect() throws IOException { - String file = "src/test/resources/test_write_using_filechannel.txt"; - try (RandomAccessFile writer = new RandomAccessFile(file, "rw"); - FileChannel channel = writer.getChannel();) { - ByteBuffer buff = ByteBuffer.wrap("Hello world".getBytes(StandardCharsets.UTF_8)); - - channel.write(buff); - - // now we verify whether the file was written correctly - RandomAccessFile reader = new RandomAccessFile(file, "r"); - assertEquals("Hello world", reader.readLine()); - reader.close(); - } - } - - @Test - public void givenFile_whenWriteAFileUsingLockAFileSectionWithFileChannel_thenCorrect() throws IOException { - try (RandomAccessFile reader = new RandomAccessFile("src/test/resources/test_read.in", "rw"); - FileChannel channel = reader.getChannel(); - FileLock fileLock = channel.tryLock(6, 5, Boolean.FALSE);) { - - assertNotNull(fileLock); - } - } - - @Test - public void givenFile_whenReadWithFileChannelGetPosition_thenCorrect() throws IOException { - - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - RandomAccessFile reader = new RandomAccessFile("src/test/resources/test_read.in", "r"); - FileChannel channel = reader.getChannel();) { - - int bufferSize = 1024; - if (bufferSize > channel.size()) { - bufferSize = (int) channel.size(); - } - ByteBuffer buff = ByteBuffer.allocate(bufferSize); - - while (channel.read(buff) > 0) { - out.write(buff.array(), 0, buff.position()); - buff.clear(); - } - - // the original file is 11 bytes long, so that's where the position pointer should be - assertEquals(11, channel.position()); - - channel.position(4); - assertEquals(4, channel.position()); - } - } - - @Test - public void whenGetFileSize_thenCorrect() throws IOException { - - try (RandomAccessFile reader = new RandomAccessFile("src/test/resources/test_read.in", "r"); - FileChannel channel = reader.getChannel();) { - - // the original file is 11 bytes long, so that's where the position pointer should be - assertEquals(11, channel.size()); - } - } - - @Test - public void whenTruncateFile_thenCorrect() throws IOException { - String input = "this is a test input"; - - FileOutputStream fout = new FileOutputStream("src/test/resources/test_truncate.txt"); - FileChannel channel = fout.getChannel(); - - ByteBuffer buff = ByteBuffer.wrap(input.getBytes()); - channel.write(buff); - buff.flip(); - - channel = channel.truncate(5); - assertEquals(5, channel.size()); - - fout.close(); - channel.close(); - } -} diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/README.md b/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/README.md deleted file mode 100644 index 569be82d27..0000000000 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/README.md +++ /dev/null @@ -1,11 +0,0 @@ -### Relevant Articles: -- [Introduction to the Java NIO2 File API](http://www.baeldung.com/java-nio-2-file-api) -- [Java NIO2 Path API](http://www.baeldung.com/java-nio-2-path) -- [A Guide To NIO2 Asynchronous File Channel](http://www.baeldung.com/java-nio2-async-file-channel) -- [Guide to Selenium with JUnit / TestNG](http://www.baeldung.com/java-selenium-with-junit-and-testng) -- [A Guide to NIO2 Asynchronous Socket Channel](http://www.baeldung.com/java-nio2-async-socket-channel) -- [A Guide To NIO2 FileVisitor](http://www.baeldung.com/java-nio2-file-visitor) -- [A Guide To NIO2 File Attribute APIs](http://www.baeldung.com/java-nio2-file-attribute) -- [How to use the Spring FactoryBean?](http://www.baeldung.com/spring-factorybean) -- [A Guide to WatchService in Java NIO2](http://www.baeldung.com/java-nio2-watchservice) -- [Guide to Java NIO2 Asynchronous Channel APIs](http://www.baeldung.com/java-nio-2-async-channels) diff --git a/core-java-modules/core-java-io/src/test/resources/test_truncate.txt b/core-java-modules/core-java-io/src/test/resources/test_truncate.txt deleted file mode 100644 index 26d3b38cdd..0000000000 --- a/core-java-modules/core-java-io/src/test/resources/test_truncate.txt +++ /dev/null @@ -1 +0,0 @@ -this \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/test/resources/test_write_using_filechannel.txt b/core-java-modules/core-java-io/src/test/resources/test_write_using_filechannel.txt deleted file mode 100644 index 70c379b63f..0000000000 --- a/core-java-modules/core-java-io/src/test/resources/test_write_using_filechannel.txt +++ /dev/null @@ -1 +0,0 @@ -Hello world \ No newline at end of file diff --git a/core-java-modules/core-java-networking-2/README.md b/core-java-modules/core-java-networking-2/README.md index 7dc33b5e11..120b111ff5 100644 --- a/core-java-modules/core-java-networking-2/README.md +++ b/core-java-modules/core-java-networking-2/README.md @@ -4,10 +4,11 @@ This module contains articles about networking in Java ### Relevant Articles -- [Checking if a URL Exists in Java](https://www.baeldung.com/java-check-url-exists) -- [Making a JSON POST Request With HttpURLConnection](https://www.baeldung.com/httpurlconnection-post) +- [Checking If a URL Exists in Java](https://www.baeldung.com/java-check-url-exists) +- [Making a JSON POST Request with HttpURLConnection](https://www.baeldung.com/httpurlconnection-post) - [Using Curl in Java](https://www.baeldung.com/java-curl) -- [Do a Simple HTTP Request in Java](http://www.baeldung.com/java-http-request) -- [Sending Emails with Java](http://www.baeldung.com/java-email) +- [Do a Simple HTTP Request in Java](https://www.baeldung.com/java-http-request) +- [Sending Emails with Java](https://www.baeldung.com/java-email) - [Authentication with HttpUrlConnection](https://www.baeldung.com/java-http-url-connection) +- [Download a File from an URL in Java](https://www.baeldung.com/java-download-file) - [[<-- Prev]](/core-java-modules/core-java-networking) diff --git a/core-java-modules/core-java-networking-2/pom.xml b/core-java-modules/core-java-networking-2/pom.xml index 2d404a553b..c3a5891066 100644 --- a/core-java-modules/core-java-networking-2/pom.xml +++ b/core-java-modules/core-java-networking-2/pom.xml @@ -6,9 +6,10 @@ jar - com.baeldung.core-java-modules - core-java-modules - 1.0.0-SNAPSHOT + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java @@ -27,6 +28,11 @@ mail ${javax.mail.version} + + org.asynchttpclient + async-http-client + ${async-http-client.version} + @@ -36,5 +42,6 @@ 4.5.9 1.5.0-b01 + 2.4.5 diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/download/FileDownload.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/download/FileDownload.java similarity index 99% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/download/FileDownload.java rename to core-java-modules/core-java-networking-2/src/main/java/com/baeldung/download/FileDownload.java index a099406d4c..ebcf7a70f7 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/download/FileDownload.java +++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/download/FileDownload.java @@ -4,7 +4,7 @@ import org.apache.commons.io.FileUtils; import org.asynchttpclient.*; import java.io.*; -import java.net.*; +import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.ReadableByteChannel; diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/download/ResumableDownload.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/download/ResumableDownload.java similarity index 100% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/download/ResumableDownload.java rename to core-java-modules/core-java-networking-2/src/main/java/com/baeldung/download/ResumableDownload.java diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/download/FileDownloadIntegrationTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/download/FileDownloadIntegrationTest.java similarity index 98% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/download/FileDownloadIntegrationTest.java rename to core-java-modules/core-java-networking-2/src/test/java/com/baeldung/download/FileDownloadIntegrationTest.java index 81ac391958..16017ee482 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/download/FileDownloadIntegrationTest.java +++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/download/FileDownloadIntegrationTest.java @@ -1,8 +1,10 @@ package com.baeldung.download; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; +import org.junit.After; +import org.junit.BeforeClass; +import org.junit.Test; +import javax.xml.bind.DatatypeConverter; import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; @@ -11,11 +13,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.concurrent.ExecutionException; -import javax.xml.bind.DatatypeConverter; - -import org.junit.After; -import org.junit.BeforeClass; -import org.junit.Test; +import static org.junit.Assert.assertTrue; public class FileDownloadIntegrationTest { diff --git a/core-java-modules/core-java-nio-2/README.md b/core-java-modules/core-java-nio-2/README.md new file mode 100644 index 0000000000..8b29c97385 --- /dev/null +++ b/core-java-modules/core-java-nio-2/README.md @@ -0,0 +1,11 @@ +## Core Java NIO + +This module contains articles about core Java non-blocking input and output (IO) + +## Relevant Articles: + +- [A Guide to WatchService in Java NIO2](https://www.baeldung.com/java-nio2-watchservice) +- [Create a Symbolic Link with Java](https://www.baeldung.com/java-symlink) +- [Introduction to the Java NIO Selector](https://www.baeldung.com/java-nio-selector) +- [Using Java MappedByteBuffer](https://www.baeldung.com/java-mapped-byte-buffer) +- [[<-- Prev]](/core-java-modules/core-java-nio) \ No newline at end of file diff --git a/core-java-modules/core-java-nio-2/pom.xml b/core-java-modules/core-java-nio-2/pom.xml new file mode 100644 index 0000000000..c1fa423b38 --- /dev/null +++ b/core-java-modules/core-java-nio-2/pom.xml @@ -0,0 +1,17 @@ + + 4.0.0 + core-java-nio-2 + 0.1.0-SNAPSHOT + core-java-nio-2 + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/EchoClient.java b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoClient.java similarity index 96% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/EchoClient.java rename to core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoClient.java index 61f339db58..dd0a15ac7e 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/EchoClient.java +++ b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoClient.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio.selector; +package com.baeldung.selector; import java.io.IOException; import java.net.InetSocketAddress; diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/EchoServer.java b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoServer.java similarity index 98% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/EchoServer.java rename to core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoServer.java index 7c1e291646..8cf2e941fe 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio/selector/EchoServer.java +++ b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoServer.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio.selector; +package com.baeldung.selector; import java.io.File; import java.io.IOException; diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/symlink/SymLinkExample.java b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/symlink/SymLinkExample.java similarity index 93% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/symlink/SymLinkExample.java rename to core-java-modules/core-java-nio-2/src/main/java/com/baeldung/symlink/SymLinkExample.java index 63ee0f14b1..4c2c47e085 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/symlink/SymLinkExample.java +++ b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/symlink/SymLinkExample.java @@ -6,9 +6,11 @@ import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import static java.nio.file.StandardOpenOption.*; import java.util.stream.IntStream; +import static java.nio.file.StandardOpenOption.CREATE; +import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING; + public class SymLinkExample { public void createSymbolicLink(Path link, Path target) throws IOException { diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/watcher/DirectoryWatcherExample.java b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/watcher/DirectoryWatcherExample.java similarity index 74% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/watcher/DirectoryWatcherExample.java rename to core-java-modules/core-java-nio-2/src/main/java/com/baeldung/watcher/DirectoryWatcherExample.java index 4c35ffdb22..e8a2a401ab 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/watcher/DirectoryWatcherExample.java +++ b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/watcher/DirectoryWatcherExample.java @@ -1,13 +1,7 @@ -package com.baeldung.java.nio2.watcher; +package com.baeldung.watcher; import java.io.IOException; -import java.nio.file.FileSystems; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardWatchEventKinds; -import java.nio.file.WatchEvent; -import java.nio.file.WatchKey; -import java.nio.file.WatchService; +import java.nio.file.*; public class DirectoryWatcherExample { diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java b/core-java-modules/core-java-nio-2/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java similarity index 100% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java rename to core-java-modules/core-java-nio-2/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio/selector/NioEchoLiveTest.java b/core-java-modules/core-java-nio-2/src/test/java/com/baeldung/selector/NioEchoLiveTest.java similarity index 87% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio/selector/NioEchoLiveTest.java rename to core-java-modules/core-java-nio-2/src/test/java/com/baeldung/selector/NioEchoLiveTest.java index 0e1afa87a5..39deb798e5 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio/selector/NioEchoLiveTest.java +++ b/core-java-modules/core-java-nio-2/src/test/java/com/baeldung/selector/NioEchoLiveTest.java @@ -1,13 +1,15 @@ -package com.baeldung.java.nio.selector; - -import static org.junit.Assert.assertEquals; - -import java.io.IOException; +package com.baeldung.selector; +import com.baeldung.selector.EchoClient; +import com.baeldung.selector.EchoServer; import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.IOException; + +import static org.junit.Assert.assertEquals; + public class NioEchoLiveTest { private Process server; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/symlink/SymLinkExampleManualTest.java b/core-java-modules/core-java-nio-2/src/test/java/com/baeldung/symlink/SymLinkExampleManualTest.java similarity index 100% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/symlink/SymLinkExampleManualTest.java rename to core-java-modules/core-java-nio-2/src/test/java/com/baeldung/symlink/SymLinkExampleManualTest.java index caa7049475..e6723e719c 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/symlink/SymLinkExampleManualTest.java +++ b/core-java-modules/core-java-nio-2/src/test/java/com/baeldung/symlink/SymLinkExampleManualTest.java @@ -1,13 +1,13 @@ package com.baeldung.symlink; -import static org.junit.Assert.*; +import org.junit.Test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import org.junit.Test; +import static org.junit.Assert.*; public class SymLinkExampleManualTest { diff --git a/core-java-modules/core-java-io/src/test/resources/fileToRead.txt b/core-java-modules/core-java-nio-2/src/test/resources/fileToRead.txt similarity index 100% rename from core-java-modules/core-java-io/src/test/resources/fileToRead.txt rename to core-java-modules/core-java-nio-2/src/test/resources/fileToRead.txt diff --git a/core-java-modules/core-java-io/src/test/resources/fileToWriteTo.txt b/core-java-modules/core-java-nio-2/src/test/resources/fileToWriteTo.txt similarity index 100% rename from core-java-modules/core-java-io/src/test/resources/fileToWriteTo.txt rename to core-java-modules/core-java-nio-2/src/test/resources/fileToWriteTo.txt diff --git a/core-java-modules/core-java-nio/README.md b/core-java-modules/core-java-nio/README.md index 727bd2546c..f37c8a3d38 100644 --- a/core-java-modules/core-java-nio/README.md +++ b/core-java-modules/core-java-nio/README.md @@ -5,4 +5,13 @@ This module contains articles about core Java non-blocking input and output (IO) ## Relevant Articles: - [Determine File Creation Date in Java](https://www.baeldung.com/java-file-creation-date) -- [Find the Number of Lines in a File Using Jav](https://www.baeldung.com/java-file-number-of-lines) +- [Find the Number of Lines in a File Using Java](https://www.baeldung.com/java-file-number-of-lines) +- [A Guide to NIO2 Asynchronous File Channel](https://www.baeldung.com/java-nio2-async-file-channel) +- [A Guide to NIO2 FileVisitor](https://www.baeldung.com/java-nio2-file-visitor) +- [Guide to Java FileChannel](https://www.baeldung.com/java-filechannel) +- [A Guide to NIO2 File Attribute APIs](https://www.baeldung.com/java-nio2-file-attribute) +- [Introduction to the Java NIO2 File API](https://www.baeldung.com/java-nio-2-file-api) +- [Java NIO2 Path API](https://www.baeldung.com/java-nio-2-path) +- [Guide to Java NIO2 Asynchronous Channel APIs](https://www.baeldung.com/java-nio-2-async-channels) +- [A Guide to NIO2 Asynchronous Socket Channel](https://www.baeldung.com/java-nio2-async-socket-channel) +- [[More -->]](/core-java-modules/core-java-nio-2) \ No newline at end of file diff --git a/core-java-modules/core-java-nio/pom.xml b/core-java-modules/core-java-nio/pom.xml index 31433e632f..da8759a956 100644 --- a/core-java-modules/core-java-nio/pom.xml +++ b/core-java-modules/core-java-nio/pom.xml @@ -13,4 +13,5 @@ 0.0.1-SNAPSHOT ../../parent-java + \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/visitor/FileSearchExample.java b/core-java-modules/core-java-nio/src/main/java/com/baeldung/filevisitor/FileSearchExample.java similarity index 97% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/visitor/FileSearchExample.java rename to core-java-modules/core-java-nio/src/main/java/com/baeldung/filevisitor/FileSearchExample.java index b1b790f541..b49d6eb570 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/visitor/FileSearchExample.java +++ b/core-java-modules/core-java-nio/src/main/java/com/baeldung/filevisitor/FileSearchExample.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.visitor; +package com.baeldung.filevisitor; import java.io.IOException; import java.nio.file.*; diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/visitor/FileVisitorImpl.java b/core-java-modules/core-java-nio/src/main/java/com/baeldung/filevisitor/FileVisitorImpl.java similarity index 94% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/visitor/FileVisitorImpl.java rename to core-java-modules/core-java-nio/src/main/java/com/baeldung/filevisitor/FileVisitorImpl.java index aa769b5091..d86264720f 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/java/nio2/visitor/FileVisitorImpl.java +++ b/core-java-modules/core-java-nio/src/main/java/com/baeldung/filevisitor/FileVisitorImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.visitor; +package com.baeldung.filevisitor; import java.io.IOException; import java.nio.file.FileVisitResult; diff --git a/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/Main.java b/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/Main.java similarity index 62% rename from core-java-modules/core-java-nio/src/main/java/com/baeldung/file/Main.java rename to core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/Main.java index d8800dd881..5aa0968ab9 100644 --- a/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/Main.java +++ b/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/Main.java @@ -1,13 +1,13 @@ -package com.baeldung.file; +package com.baeldung.lines; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFilesReadAllLines; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFilesReadAllLines; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; public class Main { diff --git a/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/NumberOfLineFinder.java b/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/NumberOfLineFinder.java similarity index 99% rename from core-java-modules/core-java-nio/src/main/java/com/baeldung/file/NumberOfLineFinder.java rename to core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/NumberOfLineFinder.java index 3abf82f3fa..b355295dab 100644 --- a/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/NumberOfLineFinder.java +++ b/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/NumberOfLineFinder.java @@ -1,4 +1,4 @@ -package com.baeldung.file; +package com.baeldung.lines; import java.io.BufferedReader; import java.io.File; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoClient.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoClient.java similarity index 98% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoClient.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoClient.java index ebab715306..f42f5cdeca 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoClient.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoClient.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.async; +package com.baeldung.async; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoIntegrationTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoIntegrationTest.java similarity index 95% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoIntegrationTest.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoIntegrationTest.java index 3cfac0e90f..42053cea96 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoIntegrationTest.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.async; +package com.baeldung.async; import org.junit.After; import org.junit.Before; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoServer.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoServer.java similarity index 98% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoServer.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoServer.java index 01873b344a..b3f8151b7e 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoServer.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoServer.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.async; +package com.baeldung.async; import java.io.File; import java.io.IOException; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoServer2.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoServer2.java similarity index 98% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoServer2.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoServer2.java index 663fc4f2ed..15b98cbf6e 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncEchoServer2.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/async/AsyncEchoServer2.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.async; +package com.baeldung.async; import java.io.File; import java.io.IOException; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncFileIntegrationTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/asyncfilechannel/AsyncFileChannelIntegrationTest.java similarity index 98% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncFileIntegrationTest.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/asyncfilechannel/AsyncFileChannelIntegrationTest.java index cf37b92565..68f0afec95 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/async/AsyncFileIntegrationTest.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/asyncfilechannel/AsyncFileChannelIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.async; +package com.baeldung.asyncfilechannel; import org.junit.Test; @@ -16,7 +16,7 @@ import java.util.concurrent.Future; import static org.junit.Assert.assertEquals; -public class AsyncFileIntegrationTest { +public class AsyncFileChannelIntegrationTest { @Test public void givenPath_whenReadsContentWithFuture_thenCorrect() throws IOException, ExecutionException, InterruptedException { diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/attributes/BasicAttribsIntegrationTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/attributes/BasicAttribsIntegrationTest.java similarity index 98% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/attributes/BasicAttribsIntegrationTest.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/attributes/BasicAttribsIntegrationTest.java index 4b6302e93c..a1f05d107f 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/attributes/BasicAttribsIntegrationTest.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/attributes/BasicAttribsIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2.attributes; +package com.baeldung.attributes; import org.junit.BeforeClass; import org.junit.Test; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/FileIntegrationTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/file/FileIntegrationTest.java similarity index 99% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/FileIntegrationTest.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/file/FileIntegrationTest.java index d1cf81e4ce..1ae84a4dcf 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/FileIntegrationTest.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/file/FileIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.java.nio2; +package com.baeldung.file; import org.apache.commons.io.FileUtils; import org.junit.AfterClass; diff --git a/core-java-modules/core-java-nio/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/lines/NumberOfLineFinderUnitTest.java similarity index 71% rename from core-java-modules/core-java-nio/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/lines/NumberOfLineFinderUnitTest.java index 40ed6d6bba..661b42accd 100644 --- a/core-java-modules/core-java-nio/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/lines/NumberOfLineFinderUnitTest.java @@ -1,13 +1,13 @@ -package com.baeldung.file; +package com.baeldung.lines; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFilesReadAllLines; -import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFilesReadAllLines; +import static com.baeldung.lines.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; import static org.junit.Assert.assertEquals; import org.junit.Test; diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/PathManualTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/path/PathManualTest.java similarity index 97% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/PathManualTest.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/path/PathManualTest.java index 969dff1da2..7017fd42e7 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/java/nio2/PathManualTest.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/path/PathManualTest.java @@ -1,8 +1,6 @@ -package com.baeldung.java.nio2; +package com.baeldung.path; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import org.junit.Test; import java.io.IOException; import java.net.URI; @@ -10,7 +8,7 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.Paths; -import org.junit.Test; +import static org.junit.Assert.*; public class PathManualTest { diff --git a/core-java-modules/core-java-nio/src/test/resources/.gitignore b/core-java-modules/core-java-nio/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/core-java-modules/core-java-nio/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/core-java-modules/core-java-nio/src/test/resources/file.txt b/core-java-modules/core-java-nio/src/test/resources/file.txt new file mode 100644 index 0000000000..558d8bbf35 --- /dev/null +++ b/core-java-modules/core-java-nio/src/test/resources/file.txt @@ -0,0 +1 @@ +baeldung.com \ No newline at end of file diff --git a/pom.xml b/pom.xml index 88aa7011d0..100158b4f3 100644 --- a/pom.xml +++ b/pom.xml @@ -424,6 +424,7 @@ core-java-modules/core-java-io core-java-modules/core-java-io-files core-java-modules/core-java-nio + core-java-modules/core-java-nio-2 core-java-modules/core-java-security core-java-modules/core-java-exceptions core-java-modules/core-java-lang-syntax @@ -1198,6 +1199,7 @@ core-java-modules/core-java-io core-java-modules/core-java-io-files core-java-modules/core-java-nio + core-java-modules/core-java-nio-2 core-java-modules/core-java-security core-java-modules/core-java-exceptions core-java-modules/core-java-lang-syntax From 6c06682c5e2c1a05a7f4db212c411a0d99c97edc Mon Sep 17 00:00:00 2001 From: Roger <587230+rojyates@users.noreply.github.com> Date: Thu, 7 Nov 2019 05:46:02 +1000 Subject: [PATCH 300/304] BAEL-3475 - Add code for Lombok Accessors (#8145) * BAEL-3475 - Add code for Lombok Accessors * BAEL-3475 - Updated lombok.version to latest * BAEL-3475 - Rename Test to UnitTest --- lombok/pom.xml | 2 +- .../lombok/accessors/model/BasicAccount.java | 24 +++++++ .../accessors/model/ChainedAccount.java | 15 ++++ .../accessors/model/ChainedFluentAccount.java | 15 ++++ .../lombok/accessors/model/FluentAccount.java | 15 ++++ .../accessors/model/PrefixedAccount.java | 16 +++++ .../model/PrefixedFluentAccount.java | 15 ++++ .../accessors/model/StandardAccount.java | 13 ++++ .../lombok/accessors/AccessorsUnitTest.java | 72 +++++++++++++++++++ 9 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 lombok/src/main/java/com/baeldung/lombok/accessors/model/BasicAccount.java create mode 100644 lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedAccount.java create mode 100644 lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedFluentAccount.java create mode 100644 lombok/src/main/java/com/baeldung/lombok/accessors/model/FluentAccount.java create mode 100644 lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedAccount.java create mode 100644 lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedFluentAccount.java create mode 100644 lombok/src/main/java/com/baeldung/lombok/accessors/model/StandardAccount.java create mode 100644 lombok/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java diff --git a/lombok/pom.xml b/lombok/pom.xml index 2acf9e240d..b67320909e 100644 --- a/lombok/pom.xml +++ b/lombok/pom.xml @@ -76,7 +76,7 @@ - 1.18.4 + 1.18.10 1.0.0.Final diff --git a/lombok/src/main/java/com/baeldung/lombok/accessors/model/BasicAccount.java b/lombok/src/main/java/com/baeldung/lombok/accessors/model/BasicAccount.java new file mode 100644 index 0000000000..74ae51c040 --- /dev/null +++ b/lombok/src/main/java/com/baeldung/lombok/accessors/model/BasicAccount.java @@ -0,0 +1,24 @@ +package com.baeldung.lombok.accessors.model; + +import java.math.BigDecimal; + +public class BasicAccount { + String name; + BigDecimal balance; + + public BigDecimal getBalance() { + return this.balance; + } + + public void setBalance(BigDecimal newBalance) { + this.balance = newBalance; + } + + public String getName() { + return this.name; + } + + public void setName(String accountName) { + this.name = accountName; + } +} diff --git a/lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedAccount.java b/lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedAccount.java new file mode 100644 index 0000000000..8fa9a2e8aa --- /dev/null +++ b/lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedAccount.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok.accessors.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Accessors(chain = true) +@Getter +@Setter +public class ChainedAccount { + String name; + BigDecimal balance; +} diff --git a/lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedFluentAccount.java b/lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedFluentAccount.java new file mode 100644 index 0000000000..22e85848bd --- /dev/null +++ b/lombok/src/main/java/com/baeldung/lombok/accessors/model/ChainedFluentAccount.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok.accessors.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Accessors(fluent = true, chain = true) +@Getter +@Setter +public class ChainedFluentAccount { + String name; + BigDecimal balance; +} diff --git a/lombok/src/main/java/com/baeldung/lombok/accessors/model/FluentAccount.java b/lombok/src/main/java/com/baeldung/lombok/accessors/model/FluentAccount.java new file mode 100644 index 0000000000..bc5e6ba70e --- /dev/null +++ b/lombok/src/main/java/com/baeldung/lombok/accessors/model/FluentAccount.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok.accessors.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Accessors(fluent = true, chain = false) +@Getter +@Setter +public class FluentAccount { + String name; + BigDecimal balance; +} diff --git a/lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedAccount.java b/lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedAccount.java new file mode 100644 index 0000000000..e3e3ae620b --- /dev/null +++ b/lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedAccount.java @@ -0,0 +1,16 @@ +package com.baeldung.lombok.accessors.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + + +@Accessors(prefix = {"s", "bd"}) +@Getter +@Setter +public class PrefixedAccount { + String sName; + BigDecimal bdBalance; +} diff --git a/lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedFluentAccount.java b/lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedFluentAccount.java new file mode 100644 index 0000000000..462a9b41ec --- /dev/null +++ b/lombok/src/main/java/com/baeldung/lombok/accessors/model/PrefixedFluentAccount.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok.accessors.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Accessors(prefix = {"s", "bd"}, fluent = true) +@Getter +@Setter +public class PrefixedFluentAccount { + String sName; + BigDecimal bdBalance; +} diff --git a/lombok/src/main/java/com/baeldung/lombok/accessors/model/StandardAccount.java b/lombok/src/main/java/com/baeldung/lombok/accessors/model/StandardAccount.java new file mode 100644 index 0000000000..89727fef19 --- /dev/null +++ b/lombok/src/main/java/com/baeldung/lombok/accessors/model/StandardAccount.java @@ -0,0 +1,13 @@ +package com.baeldung.lombok.accessors.model; + +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +@Getter +@Setter +public class StandardAccount { + String name; + BigDecimal balance; +} diff --git a/lombok/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java b/lombok/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java new file mode 100644 index 0000000000..679c7d39ef --- /dev/null +++ b/lombok/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java @@ -0,0 +1,72 @@ +package com.baeldung.lombok.accessors; + +import com.baeldung.lombok.accessors.model.*; +import org.junit.Test; + +import java.math.BigDecimal; + +import static org.junit.Assert.assertEquals; + +public class AccessorsUnitTest { + + @Test + public void givenBasicAccount_thenUseBasicAccessors() { + BasicAccount account = new BasicAccount(); + account.setBalance(BigDecimal.TEN); + account.setName("Basic Accessors"); + + assertEquals(BigDecimal.TEN, account.getBalance()); + assertEquals("Basic Accessors", account.getName()); + } + + @Test + public void givenFluentAccount_thenUseFluentAccessors() { + FluentAccount account = new FluentAccount(); + account.name("Fluent Account"); + account.balance(BigDecimal.TEN); + + assertEquals(BigDecimal.TEN, account.balance()); + assertEquals("Fluent Account", account.name()); + } + + @Test + public void givenChainedAccount_thenUseChainedAccessors() { + ChainedAccount account = new ChainedAccount(); + account.setName("Chained Account").setBalance(BigDecimal.TEN); + + assertEquals(BigDecimal.TEN, account.getBalance()); + assertEquals("Chained Account", account.getName()); + } + + @Test + public void givenChainedFluentAccount_thenUseChainedFluentAccessors() { + ChainedFluentAccount account = new ChainedFluentAccount() + .name("Fluent Account") + .balance(BigDecimal.TEN); + + assertEquals(BigDecimal.TEN, account.balance()); + assertEquals("Fluent Account", account.name()); + } + + @Test + public void givenPrefixedAccount_thenRemovePrefixFromAccessors() { + PrefixedAccount account = new PrefixedAccount(); + account.setName("Prefixed Fields"); + account.setBalance(BigDecimal.TEN); + + assertEquals(BigDecimal.TEN, account.getBalance()); + assertEquals("Prefixed Fields", account.getName()); + } + + @Test + public void givenPrefixedFluentAccount_thenRemovePrefixFromAccessors() { + PrefixedFluentAccount account = new PrefixedFluentAccount(); + account + .name("Prefixed Fluent Fields") + .balance(BigDecimal.TEN); + + assertEquals(BigDecimal.TEN, account.balance()); + assertEquals("Prefixed Fluent Fields", account.name()); + } + +} From fdbadf9572a17984e8cd493c5a730a48328b234b Mon Sep 17 00:00:00 2001 From: Niranjan Date: Thu, 7 Nov 2019 01:18:07 +0530 Subject: [PATCH 301/304] [BAEL-3405] Solving Binary Gap using Recursion (#8144) * A quick and practical example of Hexagonal Architecture in Java * updated code as per eclipse formatter * [BAEL-3405] Solving Binary Gap using Recursion * removed java-hexagonal package --- .../algorithms/binarygap/BinaryGap.java | 17 ++++++++++ .../binarygap/BinaryGapUnitTest.java | 34 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/binarygap/BinaryGap.java create mode 100644 algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/binarygap/BinaryGapUnitTest.java diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/binarygap/BinaryGap.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/binarygap/BinaryGap.java new file mode 100644 index 0000000000..e31e9870a0 --- /dev/null +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/binarygap/BinaryGap.java @@ -0,0 +1,17 @@ +package com.baeldung.algorithms.binarygap; + +public class BinaryGap { + static int calculateBinaryGap(int n) { + return calculateBinaryGap(n >>> Integer.numberOfTrailingZeros(n), 0, 0); + } + + static int calculateBinaryGap(int n, int current, int maximum) { + if (n == 0) { + return maximum; + } else if ((n & 1) == 0) { + return calculateBinaryGap(n >>> 1, current + 1, maximum); + } else { + return calculateBinaryGap(n >>> 1, 0, Math.max(maximum, current)); + } + } +} diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/binarygap/BinaryGapUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/binarygap/BinaryGapUnitTest.java new file mode 100644 index 0000000000..304d36e2bb --- /dev/null +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/binarygap/BinaryGapUnitTest.java @@ -0,0 +1,34 @@ +package com.baeldung.algorithms.binarygap; + +import static com.baeldung.algorithms.binarygap.BinaryGap.calculateBinaryGap; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class BinaryGapUnitTest { + + @Test public void givenNoOccurrenceOfBoundedZeros_whenCalculateBinaryGap_thenOutputCorrectResult() { + + int result = calculateBinaryGap(63); + assertEquals(0, result); + } + + @Test public void givenTrailingZeros_whenCalculateBinaryGap_thenOutputCorrectResult() { + + int result = calculateBinaryGap(40); + assertEquals(1, result); + } + + @Test public void givenSingleOccurrenceOfBoundedZeros_whenCalculateBinaryGap_thenOutputCorrectResult() { + + int result = calculateBinaryGap(9); + assertEquals(2, result); + } + + @Test public void givenMultipleOccurrenceOfBoundedZeros_whenCalculateBinaryGap_thenOutputCorrectResult() { + + int result = calculateBinaryGap(145); + assertEquals(3, result); + } + +} From 563f74a0abb8a7f545b4dbb8f375cfa75781c8d5 Mon Sep 17 00:00:00 2001 From: Harsha Veeravalli Date: Thu, 7 Nov 2019 04:12:51 +0100 Subject: [PATCH 302/304] [BAEL-3319] - Documenting a Spring REST API using OpenAPI (#7919) * [BAEL-3211] Generate Integers within a range in Java * [BAEL-3211] Generate Integers within a range in Java * Moved files from java-numbers to java-numbers-2 * [BAEL-3319] - Documenting a Spring REST API using OpenAPI * [BAEL-3319] Added a new module for springdoc-openapi library * Incorporated feedback - indents, GetMapping et al annotations, package as jar, remove README & spring-webflux change, use of map in BookRepository * Used DeleteMapping instead of RequestMapping * Add the spring-boot-springdoc module to root pom.xml * Remove plain spring boot starter from pom.xml --- pom.xml | 7 +- spring-boot-springdoc/pom.xml | 106 ++++++++++++++++++ .../springdoc/SpringdocApplication.java | 13 +++ .../springdoc/controller/BookController.java | 73 ++++++++++++ .../exception/BookNotFoundException.java | 10 ++ .../GlobalControllerExceptionHandler.java | 24 ++++ .../com/baeldung/springdoc/model/Book.java | 41 +++++++ .../springdoc/repository/BookRepository.java | 28 +++++ .../src/main/resources/application.properties | 5 + .../src/main/resources/logback.xml | 16 +++ .../SpringContextIntegrationTest.java | 17 +++ 11 files changed, 338 insertions(+), 2 deletions(-) create mode 100644 spring-boot-springdoc/pom.xml create mode 100644 spring-boot-springdoc/src/main/java/com/baeldung/springdoc/SpringdocApplication.java create mode 100644 spring-boot-springdoc/src/main/java/com/baeldung/springdoc/controller/BookController.java create mode 100644 spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/BookNotFoundException.java create mode 100644 spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/GlobalControllerExceptionHandler.java create mode 100644 spring-boot-springdoc/src/main/java/com/baeldung/springdoc/model/Book.java create mode 100644 spring-boot-springdoc/src/main/java/com/baeldung/springdoc/repository/BookRepository.java create mode 100644 spring-boot-springdoc/src/main/resources/application.properties create mode 100644 spring-boot-springdoc/src/main/resources/logback.xml create mode 100644 spring-boot-springdoc/src/test/java/com/baeldung/springdoc/SpringContextIntegrationTest.java diff --git a/pom.xml b/pom.xml index 88aa7011d0..163c3bdcc8 100644 --- a/pom.xml +++ b/pom.xml @@ -722,10 +722,11 @@ spring-boot-parent spring-boot-property-exp spring-boot-security + spring-boot-springdoc spring-boot-testing spring-boot-vue spring-caching - spring-boot-libraries + spring-boot-libraries spring-cloud @@ -922,6 +923,7 @@ spring-boot-keycloak spring-boot-mvc spring-boot-property-exp + spring-boot-springdoc spring-boot-vue spring-cloud spring-cloud/spring-cloud-archaius/basic-config @@ -1467,8 +1469,9 @@ spring-boot-parent spring-boot-property-exp spring-boot-security + spring-boot-springdoc spring-boot-vue - spring-caching + spring-caching spring-cloud spring-cloud-bus diff --git a/spring-boot-springdoc/pom.xml b/spring-boot-springdoc/pom.xml new file mode 100644 index 0000000000..a818db6e53 --- /dev/null +++ b/spring-boot-springdoc/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + com.baeldung + spring-boot-springdoc + 0.0.1-SNAPSHOT + spring-boot-springdoc + Project for Springdoc integration + jar + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + org.springdoc + springdoc-openapi-core + 1.1.45 + + + org.springdoc + springdoc-openapi-ui + 1.1.45 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + integration + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.8.RELEASE + + + pre-integration-test + + start + + + + post-integration-test + + stop + + + + + + org.springdoc + springdoc-openapi-maven-plugin + 0.2 + + + integration-test + + generate + + + + + http://localhost:8080/api-docs + openapi.json + ${project.build.directory} + + + + + + + + + \ No newline at end of file diff --git a/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/SpringdocApplication.java b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/SpringdocApplication.java new file mode 100644 index 0000000000..45c7c23621 --- /dev/null +++ b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/SpringdocApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.springdoc; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringdocApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringdocApplication.class, args); + } + +} diff --git a/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/controller/BookController.java b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/controller/BookController.java new file mode 100644 index 0000000000..4d7d9e3d85 --- /dev/null +++ b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/controller/BookController.java @@ -0,0 +1,73 @@ +package com.baeldung.springdoc.controller; + +import java.util.Collection; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.springdoc.exception.BookNotFoundException; +import com.baeldung.springdoc.model.Book; +import com.baeldung.springdoc.repository.BookRepository; + +@RestController +@RequestMapping("/api/book") +public class BookController { + + @Autowired + private BookRepository repository; + + @GetMapping("/{id}") + public Book findById(@PathVariable long id) { + return repository.findById(id) + .orElseThrow(() -> new BookNotFoundException()); + } + + @GetMapping("/") + public Collection findBooks() { + return repository.getBooks(); + } + + @PutMapping("/{id}") + @ResponseStatus(HttpStatus.OK) + public Book updateBook(@PathVariable("id") final String id, @RequestBody final Book book) { + return book; + } + + @PatchMapping("/{id}") + @ResponseStatus(HttpStatus.OK) + public Book patchBook(@PathVariable("id") final String id, @RequestBody final Book book) { + return book; + } + + @PostMapping("/") + @ResponseStatus(HttpStatus.CREATED) + public Book postBook(@NotNull @Valid @RequestBody final Book book) { + return book; + } + + @RequestMapping(method = RequestMethod.HEAD, value = "/") + @ResponseStatus(HttpStatus.OK) + public Book headBook() { + return new Book(); + } + + @DeleteMapping("/{id}") + @ResponseStatus(HttpStatus.OK) + public long deleteBook(@PathVariable final long id) { + return id; + } +} diff --git a/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/BookNotFoundException.java b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/BookNotFoundException.java new file mode 100644 index 0000000000..632cb683bc --- /dev/null +++ b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/BookNotFoundException.java @@ -0,0 +1,10 @@ +package com.baeldung.springdoc.exception; + +@SuppressWarnings("serial") +public class BookNotFoundException extends RuntimeException { + + public BookNotFoundException() { + + } + +} \ No newline at end of file diff --git a/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/GlobalControllerExceptionHandler.java b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/GlobalControllerExceptionHandler.java new file mode 100644 index 0000000000..c829072236 --- /dev/null +++ b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/exception/GlobalControllerExceptionHandler.java @@ -0,0 +1,24 @@ +package com.baeldung.springdoc.exception; + +import org.springframework.core.convert.ConversionFailedException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalControllerExceptionHandler { + + @ExceptionHandler(ConversionFailedException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ResponseEntity handleConnversion(RuntimeException ex) { + return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(BookNotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ResponseEntity handleBookNotFound(RuntimeException ex) { + return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND); + } +} diff --git a/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/model/Book.java b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/model/Book.java new file mode 100644 index 0000000000..8f678a7ec2 --- /dev/null +++ b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/model/Book.java @@ -0,0 +1,41 @@ +package com.baeldung.springdoc.model; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +public class Book { + + private long id; + + @NotBlank + @Size(min = 0, max = 20) + private String title; + + @NotBlank + @Size(min = 0, max = 30) + private String author; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/repository/BookRepository.java b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/repository/BookRepository.java new file mode 100644 index 0000000000..4040ba28c2 --- /dev/null +++ b/spring-boot-springdoc/src/main/java/com/baeldung/springdoc/repository/BookRepository.java @@ -0,0 +1,28 @@ +package com.baeldung.springdoc.repository; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import org.springframework.stereotype.Repository; + +import com.baeldung.springdoc.model.Book; + +@Repository +public class BookRepository { + + private Map books = new HashMap<>(); + + public Optional findById(long id) { + return Optional.ofNullable(books.get(id)); + } + + public void add(Book book) { + books.put(book.getId(), book); + } + + public Collection getBooks() { + return books.values(); + } +} diff --git a/spring-boot-springdoc/src/main/resources/application.properties b/spring-boot-springdoc/src/main/resources/application.properties new file mode 100644 index 0000000000..f03e90feb6 --- /dev/null +++ b/spring-boot-springdoc/src/main/resources/application.properties @@ -0,0 +1,5 @@ +# custom path for swagger-ui +springdoc.swagger-ui.path=/swagger-ui-custom.html + +# custom path for api docs +springdoc.api-docs.path=/api-docs diff --git a/spring-boot-springdoc/src/main/resources/logback.xml b/spring-boot-springdoc/src/main/resources/logback.xml new file mode 100644 index 0000000000..6a07b178e9 --- /dev/null +++ b/spring-boot-springdoc/src/main/resources/logback.xml @@ -0,0 +1,16 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + \ No newline at end of file diff --git a/spring-boot-springdoc/src/test/java/com/baeldung/springdoc/SpringContextIntegrationTest.java b/spring-boot-springdoc/src/test/java/com/baeldung/springdoc/SpringContextIntegrationTest.java new file mode 100644 index 0000000000..58c12dc3bc --- /dev/null +++ b/spring-boot-springdoc/src/test/java/com/baeldung/springdoc/SpringContextIntegrationTest.java @@ -0,0 +1,17 @@ +package com.baeldung.springdoc; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringContextIntegrationTest { + + @Test + public void whenSpringContextIsBootstrapped_thenNoExceptions() { + + } + +} From 463b97fbe088812bb1788294f2e4135f8bfeed49 Mon Sep 17 00:00:00 2001 From: Tapan Avasthi Date: Thu, 7 Nov 2019 19:06:32 +0530 Subject: [PATCH 303/304] BAEL-3284: Guide to Flash Attributes in a Spring Web Application (#8070) --- .../flash_attributes/Application.java | 14 ++++++ .../controllers/PoemSubmission.java | 49 ++++++++++++++++++ .../baeldung/flash_attributes/model/Poem.java | 39 +++++++++++++++ .../src/main/resources/application.properties | 8 ++- .../src/main/resources/templates/submit.html | 50 +++++++++++++++++++ .../src/main/resources/templates/success.html | 15 ++++++ 6 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/Application.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/controllers/PoemSubmission.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/model/Poem.java create mode 100644 spring-mvc-simple-2/src/main/resources/templates/submit.html create mode 100644 spring-mvc-simple-2/src/main/resources/templates/success.html diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/Application.java b/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/Application.java new file mode 100644 index 0000000000..0472ba4e7b --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/Application.java @@ -0,0 +1,14 @@ +package com.baeldung.flash_attributes; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +@SpringBootApplication +public class Application extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/controllers/PoemSubmission.java b/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/controllers/PoemSubmission.java new file mode 100644 index 0000000000..6264ea0531 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/controllers/PoemSubmission.java @@ -0,0 +1,49 @@ +package com.baeldung.flash_attributes.controllers; + +import com.baeldung.flash_attributes.model.Poem; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import org.springframework.web.servlet.support.RequestContextUtils; +import org.springframework.web.servlet.view.RedirectView; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +@Controller +public class PoemSubmission { + + @GetMapping("/poem/success") + public String getSuccess(HttpServletRequest request) { + Map inputFlashMap = RequestContextUtils.getInputFlashMap(request); + if (inputFlashMap != null) { + Poem poem = (Poem) inputFlashMap.get("poem"); + return "success"; + } else { + return "redirect:/poem/submit"; + } + } + + @PostMapping("/poem/submit") + public RedirectView submitPost( + HttpServletRequest request, + @ModelAttribute Poem poem, + RedirectAttributes redirectAttributes) { + if (Poem.isValidPoem(poem)) { + redirectAttributes.addFlashAttribute("poem", poem); + return new RedirectView("/poem/success", true); + } else { + return new RedirectView("/poem/submit", true); + } + } + + @GetMapping("/poem/submit") + public String submitGet(Model model) { + model.addAttribute("poem", new Poem()); + return "submit"; + } + +} \ No newline at end of file diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/model/Poem.java b/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/model/Poem.java new file mode 100644 index 0000000000..bff65456c1 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/flash_attributes/model/Poem.java @@ -0,0 +1,39 @@ +package com.baeldung.flash_attributes.model; + +import org.apache.logging.log4j.util.Strings; + +public class Poem { + private String title; + private String author; + private String body; + + public static boolean isValidPoem(Poem poem) { + return poem != null && Strings.isNotBlank(poem.getAuthor()) && Strings.isNotBlank(poem.getBody()) + && Strings.isNotBlank(poem.getTitle()); + } + + public String getTitle() { + return this.title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getBody() { + return this.body; + } + + public void setBody(String body) { + this.body = body; + } + + public String getAuthor() { + return this.author; + } + + public void setAuthor(String author) { + this.author = author; + } + +} diff --git a/spring-mvc-simple-2/src/main/resources/application.properties b/spring-mvc-simple-2/src/main/resources/application.properties index d29338d3d3..aca20f4e3c 100644 --- a/spring-mvc-simple-2/src/main/resources/application.properties +++ b/spring-mvc-simple-2/src/main/resources/application.properties @@ -1,3 +1,9 @@ spring.main.allow-bean-definition-overriding=true + spring.mail.host=localhost -spring.mail.port=8025 \ No newline at end of file +spring.mail.port=8025 + +spring.thymeleaf.cache=false +spring.thymeleaf.enabled=true +spring.thymeleaf.prefix=classpath:/templates/ +spring.thymeleaf.suffix=.html diff --git a/spring-mvc-simple-2/src/main/resources/templates/submit.html b/spring-mvc-simple-2/src/main/resources/templates/submit.html new file mode 100644 index 0000000000..0ed0107c20 --- /dev/null +++ b/spring-mvc-simple-2/src/main/resources/templates/submit.html @@ -0,0 +1,50 @@ + + + + Poetry Contest: Submission + + + +
+ + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + +