diff --git a/apache-httpclient/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestLiveTest.java b/apache-httpclient/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestLiveTest.java new file mode 100644 index 0000000000..d19e0e1d86 --- /dev/null +++ b/apache-httpclient/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestLiveTest.java @@ -0,0 +1,40 @@ +package com.baeldung.httpclient; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; + +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpStatus; +import org.junit.jupiter.api.Test; + +class HttpClientCancelRequestLiveTest { + + private static final String SAMPLE_URL = "http://www.github.com"; + + @Test + void whenRequestIsCanceled_thenCorrect() throws IOException { + HttpGet request = new HttpGet(SAMPLE_URL); + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + httpClient.execute(request, response -> { + HttpEntity entity = response.getEntity(); + + System.out.println("----------------------------------------"); + System.out.println(response.getCode()); + if (entity != null) { + System.out.println("Response content length: " + entity.getContentLength()); + } + System.out.println("----------------------------------------"); + // Do not feel like reading the response body + // Call abort on the request object + request.abort(); + + assertThat(response.getCode()).isEqualTo(HttpStatus.SC_OK); + return response; + }); + } + } +} diff --git a/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java b/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java index ef12c37412..4173909f7d 100644 --- a/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java +++ b/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java @@ -1,8 +1,8 @@ package com.baeldung.httpclient.base; import com.baeldung.httpclient.ResponseUtil; + import org.apache.http.Header; -import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -10,7 +10,6 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.BasicHttpClientConnectionManager; import org.junit.After; import org.junit.Before; @@ -73,30 +72,4 @@ public class HttpClientLiveTest { assertThat(headers, not(emptyArray())); } - // tests - cancel request - - @Test - public final void whenRequestIsCanceled_thenCorrect() throws IOException { - instance = HttpClients.custom().build(); - final HttpGet request = new HttpGet(SAMPLE_URL); - response = instance.execute(request); - - try { - final HttpEntity entity = response.getEntity(); - - System.out.println("----------------------------------------"); - System.out.println(response.getStatusLine()); - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - System.out.println("----------------------------------------"); - - // Do not feel like reading the response body - // Call abort on the request object - request.abort(); - } finally { - response.close(); - } - } - } diff --git a/apache-httpclient4/README.md b/apache-httpclient4/README.md index 9c18e06243..22b0391e6b 100644 --- a/apache-httpclient4/README.md +++ b/apache-httpclient4/README.md @@ -4,6 +4,7 @@ This module contains articles about Apache HttpClient 4.5 ### Relevant Articles +- [Apache HttpClient – Cancel Request](https://www.baeldung.com/httpclient-cancel-request) - [Apache HttpClient with SSL](https://www.baeldung.com/httpclient-ssl) - [Apache HttpClient Timeout](https://www.baeldung.com/httpclient-timeout) - [Custom HTTP Header with the Apache HttpClient](https://www.baeldung.com/httpclient-custom-http-header) diff --git a/apache-httpclient4/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestV4LiveTest.java b/apache-httpclient4/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestV4LiveTest.java new file mode 100644 index 0000000000..226a7b8cf7 --- /dev/null +++ b/apache-httpclient4/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestV4LiveTest.java @@ -0,0 +1,57 @@ +package com.baeldung.httpclient; + +import java.io.IOException; + +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class HttpClientCancelRequestV4LiveTest { + + private static final String SAMPLE_URL = "http://www.github.com"; + + private CloseableHttpClient instance; + + private CloseableHttpResponse response; + + @Before + public final void before() { + instance = HttpClientBuilder.create().build(); + } + + @After + public final void after() throws IllegalStateException, IOException { + ResponseUtil.closeResponse(response); + } + + @Test + public final void whenRequestIsCanceled_thenCorrect() throws IOException { + instance = HttpClients.custom().build(); + final HttpGet request = new HttpGet(SAMPLE_URL); + response = instance.execute(request); + + try { + final HttpEntity entity = response.getEntity(); + + System.out.println("----------------------------------------"); + System.out.println(response.getStatusLine()); + if (entity != null) { + System.out.println("Response content length: " + entity.getContentLength()); + } + System.out.println("----------------------------------------"); + + // Do not feel like reading the response body + // Call abort on the request object + request.abort(); + } finally { + response.close(); + } + } +} diff --git a/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java b/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryLiveTest.java similarity index 99% rename from apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java rename to apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryLiveTest.java index cfb51f058a..3a8ff252c2 100644 --- a/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java +++ b/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryLiveTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class ApacheHttpClientRetryIntegrationTest { +public class ApacheHttpClientRetryLiveTest { private Integer requestCounter; private CloseableHttpClient httpClient; diff --git a/aws-modules/aws-lambda/.gitignore b/aws-modules/aws-lambda-modules/.gitignore similarity index 100% rename from aws-modules/aws-lambda/.gitignore rename to aws-modules/aws-lambda-modules/.gitignore diff --git a/aws-modules/aws-lambda/README.md b/aws-modules/aws-lambda-modules/README.md similarity index 100% rename from aws-modules/aws-lambda/README.md rename to aws-modules/aws-lambda-modules/README.md diff --git a/aws-modules/aws-lambda/lambda/pom.xml b/aws-modules/aws-lambda-modules/lambda-function/pom.xml similarity index 98% rename from aws-modules/aws-lambda/lambda/pom.xml rename to aws-modules/aws-lambda-modules/lambda-function/pom.xml index 8e47bab4be..a82209b23f 100644 --- a/aws-modules/aws-lambda/lambda/pom.xml +++ b/aws-modules/aws-lambda-modules/lambda-function/pom.xml @@ -10,7 +10,7 @@ com.baeldung - aws-lambda + aws-lambda-modules 1.0.0-SNAPSHOT diff --git a/aws-modules/aws-lambda/lambda/sam-templates/template-implicit.yaml b/aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-implicit.yaml similarity index 100% rename from aws-modules/aws-lambda/lambda/sam-templates/template-implicit.yaml rename to aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-implicit.yaml diff --git a/aws-modules/aws-lambda/lambda/sam-templates/template-inline-swagger.yaml b/aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-inline-swagger.yaml similarity index 100% rename from aws-modules/aws-lambda/lambda/sam-templates/template-inline-swagger.yaml rename to aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-inline-swagger.yaml diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/model/Person.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/model/Person.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java diff --git a/aws-modules/aws-lambda/lambda/src/main/resources/logback.xml b/aws-modules/aws-lambda-modules/lambda-function/src/main/resources/logback.xml similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/resources/logback.xml rename to aws-modules/aws-lambda-modules/lambda-function/src/main/resources/logback.xml diff --git a/aws-modules/aws-lambda/pom.xml b/aws-modules/aws-lambda-modules/pom.xml similarity index 66% rename from aws-modules/aws-lambda/pom.xml rename to aws-modules/aws-lambda-modules/pom.xml index bdd295c007..9886ff58d2 100644 --- a/aws-modules/aws-lambda/pom.xml +++ b/aws-modules/aws-lambda-modules/pom.xml @@ -3,8 +3,8 @@ 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 - aws-lambda - aws-lambda + aws-lambda-modules + aws-lambda-modules pom @@ -14,9 +14,9 @@ - lambda - shipping-tracker/ShippingFunction - todo-reminder/ToDoFunction + lambda-function + shipping-tracker-lambda/ShippingFunction + todo-reminder-lambda/ToDoFunction \ No newline at end of file diff --git a/aws-modules/aws-lambda/shipping-tracker/.gitignore b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/.gitignore similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/.gitignore rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/.gitignore diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml similarity index 97% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml index a60f934bad..abd22ea50c 100644 --- a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml +++ b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml @@ -9,7 +9,7 @@ com.baeldung - aws-lambda + aws-lambda-modules 1.0.0-SNAPSHOT ../../ diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java diff --git a/aws-modules/aws-lambda/shipping-tracker/template.yaml b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/template.yaml similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/template.yaml rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/template.yaml diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/pom.xml similarity index 95% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/pom.xml index 5545154a5d..04295e1ab1 100644 --- a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml +++ b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/pom.xml @@ -8,6 +8,13 @@ ToDoFunction jar + + com.baeldung + aws-lambda-modules + 1.0.0-SNAPSHOT + ../../ + + com.amazonaws diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/configuration.yml similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/configuration.yml diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/log4j2.xml similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/log4j2.xml diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java similarity index 98% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java index cbdc8c22cb..952a773f69 100644 --- a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java +++ b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java @@ -21,7 +21,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) -public class AppTest { +public class AppUnitTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mockContext; diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java similarity index 94% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java index 634c5257ff..dd5b52d073 100644 --- a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java +++ b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java @@ -7,7 +7,7 @@ import uk.org.webcompere.systemstubs.rules.SystemOutRule; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; -public class ToDoReaderServiceTest { +public class ToDoReaderServiceUnitTest { @Rule public SystemOutRule systemOutRule = new SystemOutRule(); diff --git a/aws-modules/aws-lambda/todo-reminder/template.yaml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/template.yaml similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/template.yaml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/template.yaml diff --git a/aws-modules/pom.xml b/aws-modules/pom.xml index 72c5017c32..02473815b5 100644 --- a/aws-modules/pom.xml +++ b/aws-modules/pom.xml @@ -15,7 +15,7 @@ aws-app-sync - aws-lambda + aws-lambda-modules aws-miscellaneous aws-reactive aws-s3 diff --git a/checker-plugin/README.md b/checker-framework/README.md similarity index 100% rename from checker-plugin/README.md rename to checker-framework/README.md diff --git a/checker-plugin/pom.xml b/checker-framework/pom.xml similarity index 97% rename from checker-plugin/pom.xml rename to checker-framework/pom.xml index e90dcf271e..a348745343 100644 --- a/checker-plugin/pom.xml +++ b/checker-framework/pom.xml @@ -3,9 +3,9 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - checker-plugin + checker-framework 1.0-SNAPSHOT - checker-plugin + checker-framework jar diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/FakeNumExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/FakeNumExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/FakeNumExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/FakeNumExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/FormatExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/FormatExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/FormatExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/FormatExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/KeyForExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/KeyForExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/KeyForExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/KeyForExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/NonNullExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/NonNullExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/NonNullExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/NonNullExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/RegexExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/RegexExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/RegexExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/RegexExample.java diff --git a/checker-plugin/src/main/resources/logback.xml b/checker-framework/src/main/resources/logback.xml similarity index 100% rename from checker-plugin/src/main/resources/logback.xml rename to checker-framework/src/main/resources/logback.xml diff --git a/clojure/ring/.gitignore b/clojure-modules/clojure-ring/.gitignore similarity index 100% rename from clojure/ring/.gitignore rename to clojure-modules/clojure-ring/.gitignore diff --git a/clojure/ring/README.md b/clojure-modules/clojure-ring/README.md similarity index 100% rename from clojure/ring/README.md rename to clojure-modules/clojure-ring/README.md diff --git a/clojure/ring/project.clj b/clojure-modules/clojure-ring/project.clj similarity index 100% rename from clojure/ring/project.clj rename to clojure-modules/clojure-ring/project.clj diff --git a/clojure/ring/src/ring/core.clj b/clojure-modules/clojure-ring/src/ring/core.clj similarity index 100% rename from clojure/ring/src/ring/core.clj rename to clojure-modules/clojure-ring/src/ring/core.clj diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormat.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormat.java new file mode 100644 index 0000000000..a82f3bce2b --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormat.java @@ -0,0 +1,20 @@ +package com.baeldung.parsingDates; + +import java.util.Arrays; +import java.util.List; +import org.joda.time.LocalDate; +import org.joda.time.format.DateTimeFormat; + +public class SimpleDateTimeFormat { + + public static LocalDate parseDate(String date) { + List patternList = Arrays.asList("MM/dd/yyyy", "dd.MM.yyyy", "yyyy-MM-dd"); + for (String pattern : patternList) { + try { + return DateTimeFormat.forPattern(pattern).parseLocalDate(date); + } catch (IllegalArgumentException e) { + } + } + return null; + } +} diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormater.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormater.java new file mode 100644 index 0000000000..aa12038032 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormater.java @@ -0,0 +1,17 @@ +package com.baeldung.parsingDates; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; + +public class SimpleDateTimeFormater { + + public static LocalDate parseDate(String date) { + DateTimeFormatterBuilder dateTimeFormatterBuilder = new DateTimeFormatterBuilder() + .append(DateTimeFormatter.ofPattern("[MM/dd/yyyy]" + "[dd-MM-yyyy]" + "[yyyy-MM-dd]")); + + DateTimeFormatter dateTimeFormatter = dateTimeFormatterBuilder.toFormatter(); + + return LocalDate.parse(date, dateTimeFormatter); + } +} diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateUtils.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateUtils.java new file mode 100644 index 0000000000..8a154d3cd8 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateUtils.java @@ -0,0 +1,18 @@ +package com.baeldung.parsingDates; + +import java.text.ParseException; +import java.util.Date; +import org.apache.commons.lang3.time.DateUtils; + +public class SimpleDateUtils { + + public static Date parseDate(String date) { + try { + return DateUtils.parseDateStrictly(date, + new String[]{"yyyy/MM/dd", "dd/MM/yyyy", "yyyy-MM-dd"}); + } catch (ParseException ex) { + return null; + } + } + +} diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleParseDate.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleParseDate.java new file mode 100644 index 0000000000..cb024eea53 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleParseDate.java @@ -0,0 +1,19 @@ +package com.baeldung.parsingDates; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +public class SimpleParseDate { + + public Date parseDate(String dateString, List formatStrings) { + for (String formatString : formatStrings) { + try { + return new SimpleDateFormat(formatString).parse(dateString); + } catch (ParseException e) { + } + } + return null; + } +} diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/parsingDates/SimpleParseDateUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/parsingDates/SimpleParseDateUnitTest.java new file mode 100644 index 0000000000..d7cbb6a834 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/parsingDates/SimpleParseDateUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.parsingDates; + +import com.baeldung.parsingDates.SimpleDateTimeFormat; +import com.baeldung.parsingDates.SimpleDateTimeFormater; +import com.baeldung.parsingDates.SimpleDateUtils; +import com.baeldung.parsingDates.SimpleParseDate; +import java.time.format.DateTimeParseException; +import java.util.Arrays; +import org.junit.*; +import static org.junit.Assert.*; +import org.joda.time.LocalDate; + +public class SimpleParseDateUnitTest { + + @Test + public void whenInvalidInput_thenGettingUnexpectedResult() { + SimpleParseDate simpleParseDate = new SimpleParseDate(); + String date = "2022-40-40"; + assertEquals("Sat May 10 00:00:00 UTC 2025", simpleParseDate.parseDate(date, Arrays.asList("MM/dd/yyyy", "dd.MM.yyyy", "yyyy-MM-dd")).toString()); + } + + @Test + public void whenInvalidDate_thenAssertThrows() { + SimpleDateTimeFormater simpleDateTimeFormater = new SimpleDateTimeFormater(); + assertEquals(java.time.LocalDate.parse("2022-12-04"), simpleDateTimeFormater.parseDate("2022-12-04")); + assertThrows(DateTimeParseException.class, () -> simpleDateTimeFormater.parseDate("2022-13-04")); + } + + @Test + public void whenDateIsCorrect_thenParseCorrect() { + SimpleDateUtils simpleDateUtils = new SimpleDateUtils(); + assertNull(simpleDateUtils.parseDate("53/10/2014")); + assertEquals("Wed Sep 10 00:00:00 UTC 2014", simpleDateUtils.parseDate("10/09/2014").toString()); + } + + @Test + public void whenDateIsCorrect_thenResultCorrect() { + SimpleDateTimeFormat simpleDateTimeFormat = new SimpleDateTimeFormat(); + assertNull(simpleDateTimeFormat.parseDate("53/10/2014")); + assertEquals(LocalDate.parse("2014-10-10"), simpleDateTimeFormat.parseDate("2014-10-10")); + } + +} diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core-module.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core-module.sh new file mode 100644 index 0000000000..fa0d4d5f14 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core-module.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +javac -d mods/com.baeldung.library.core $(find library-core/src/main -name "*.java") \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core-tests.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core-tests.sh new file mode 100644 index 0000000000..751906103b --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core-tests.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +javac --class-path outDir/library-core/:\ +libs/junit-jupiter-engine-5.9.2.jar:\ +libs/junit-platform-engine-1.9.2.jar:\ +libs/apiguardian-api-1.1.2.jar:\ +libs/junit-jupiter-params-5.9.2.jar:\ +libs/junit-jupiter-api-5.9.2.jar:\ +libs/opentest4j-1.2.0.jar:\ +libs/junit-platform-commons-1.9.2.jar \ +-d outDir/library-test library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core-with-tests.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core-with-tests.sh new file mode 100644 index 0000000000..c873a9003c --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core-with-tests.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +javac --class-path libs/junit-jupiter-engine-5.9.2.jar:\ +libs/junit-platform-engine-1.9.2.jar:\ +libs/apiguardian-api-1.1.2.jar:\ +libs/junit-jupiter-params-5.9.2.jar:\ +libs/junit-jupiter-api-5.9.2.jar:\ +libs/opentest4j-1.2.0.jar:\ +libs/junit-platform-commons-1.9.2.jar \ +-d outDir/library-core \ +library-core/src/main/java/com/baeldung/library/core/Book.java \ +library-core/src/main/java/com/baeldung/library/core/Library.java \ +library-core/src/main/java/com/baeldung/library/core/Main.java \ +library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core.sh new file mode 100644 index 0000000000..7531148d0f --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +javac --class-path libs/junit-jupiter-engine-5.9.2.jar:\ +libs/junit-platform-engine-1.9.2.jar:\ +libs/apiguardian-api-1.1.2.jar:\ +libs/junit-jupiter-params-5.9.2.jar:\ +libs/junit-jupiter-api-5.9.2.jar:\ +libs/opentest4j-1.2.0.jar:\ +libs/junit-platform-commons-1.9.2.jar \ +-d outDir/library-core \ +library-core/src/main/java/com/baeldung/library/core/Book.java \ +library-core/src/main/java/com/baeldung/library/core/Library.java \ +library-core/src/main/java/com/baeldung/library/core/Main.java \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-test-module.sh b/core-java-modules/core-java-9-jigsaw/compile-library-test-module.sh new file mode 100644 index 0000000000..c6fd614fd0 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-test-module.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +javac --module-path mods:libs -d mods/com.baeldung.library.test $(find library-test/src/test -name "*.java") \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/download-junit-dependencies.sh b/core-java-modules/core-java-9-jigsaw/download-junit-dependencies.sh new file mode 100644 index 0000000000..64c72a5429 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/download-junit-dependencies.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +wget -P libs/ https://repo1.maven.org/maven2/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-commons/1.9.2/junit-platform-commons-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-engine/1.9.2/junit-platform-engine-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-reporting/1.9.2/junit-platform-reporting-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console/1.9.2/junit-platform-console-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-launcher/1.9.2/junit-platform-launcher-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.9.2/junit-jupiter-engine-5.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-params/5.9.2/junit-jupiter-params-5.9.2.jar \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-core/pom.xml b/core-java-modules/core-java-9-jigsaw/library-core/pom.xml new file mode 100644 index 0000000000..b860d89932 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.baeldung + core-java-9-jigsaw + 0.2-SNAPSHOT + + + library-core + + + 19 + 19 + UTF-8 + + + + + org.junit.jupiter + junit-jupiter-api + 5.9.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.9.2 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 9 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + false + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Book.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Book.java new file mode 100644 index 0000000000..782de8fa10 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Book.java @@ -0,0 +1,52 @@ +package com.baeldung.library.core; + +import java.util.Objects; + +public class Book { + + private String title; + private String author; + + public Book(String title, String author) { + this.title = title; + this.author = author; + } + + public String getTitle() { + return title; + } + + public String getAuthor() { + return author; + } + + + @Override + public String toString() { + return "Book [title=" + title + ", author=" + author + "]"; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final Book book = (Book) o; + + if (!Objects.equals(title, book.title)) { + return false; + } + return Objects.equals(author, book.author); + } + + @Override + public int hashCode() { + int result = title != null ? title.hashCode() : 0; + result = 31 * result + (author != null ? author.hashCode() : 0); + return result; + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Library.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Library.java new file mode 100644 index 0000000000..ee2225810d --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Library.java @@ -0,0 +1,25 @@ +package com.baeldung.library.core; + +import java.util.ArrayList; +import java.util.List; + +public class Library { + + private List books = new ArrayList<>(); + + public void addBook(Book book) { + books.add(book); + } + + public List getBooks() { + return books; + } + + void removeBook(Book book) { + books.remove(book); + } + + protected void removeBookByAuthor(String author) { + books.removeIf(book -> book.getAuthor().equals(author)); + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Main.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Main.java new file mode 100644 index 0000000000..18839602c2 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Main.java @@ -0,0 +1,16 @@ +package com.baeldung.library.core; + +public class Main { + + public static void main(String[] args) { + Library library = new Library(); + library.addBook(new Book("The Lord of the Rings", "J.R.R. Tolkien")); + library.addBook(new Book("The Hobbit", "J.R.R. Tolkien")); + library.addBook(new Book("The Silmarillion", "J.R.R. Tolkien")); + library.addBook(new Book("The Chronicles of Narnia", "C.S. Lewis")); + library.addBook(new Book("The Lion, the Witch and the Wardrobe", "C.S. Lewis")); + System.out.println("Welcome to our library!"); + System.out.println("We have the following books:"); + library.getBooks().forEach(System.out::println); + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/module-info.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/module-info.java new file mode 100644 index 0000000000..bdf88d8bc9 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/module-info.java @@ -0,0 +1,3 @@ +module com.baeldung.library.core { + exports com.baeldung.library.core; +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java b/core-java-modules/core-java-9-jigsaw/library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java new file mode 100644 index 0000000000..20a4889e8c --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java @@ -0,0 +1,47 @@ +package com.baeldung.library.core; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class LibraryUnitTest { + + @Test + void givenEmptyLibrary_whenAddABook_thenLibraryHasOneBook() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + + @Test + void givenTheLibraryWithABook_whenRemoveABook_thenLibraryIsEmpty() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + library.removeBook(theLordOfTheRings); + int expected = 0; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + + @Test + void givenTheLibraryWithSeveralBook_whenRemoveABookByAuthor_thenLibraryHasNoBooksByTheAuthor() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + Book theHobbit = new Book("The Hobbit", "J.R.R. Tolkien"); + Book theSilmarillion = new Book("The Silmarillion", "J.R.R. Tolkien"); + Book theHungerGames = new Book("The Hunger Games", "Suzanne Collins"); + library.addBook(theLordOfTheRings); + library.addBook(theHobbit); + library.addBook(theSilmarillion); + library.addBook(theHungerGames); + library.removeBookByAuthor("J.R.R. Tolkien"); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/LibraryUnitTest.java b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/LibraryUnitTest.java new file mode 100644 index 0000000000..31eae89bba --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/LibraryUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.library.test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.baeldung.library.core.Book; +import com.baeldung.library.core.Library; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import org.junit.jupiter.api.Test; + +class LibraryUnitTest { + + @Test + void givenEmptyLibrary_whenAddABook_thenLibraryHasOneBook() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + + @Test + void givenTheLibraryWithABook_whenRemoveABook_thenLibraryIsEmpty() + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + Method removeBook = Library.class.getDeclaredMethod("removeBook", Book.class); + removeBook.setAccessible(true); + removeBook.invoke(library, theLordOfTheRings); + int expected = 0; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } +@Test +void givenTheLibraryWithSeveralBook_whenRemoveABookByAuthor_thenLibraryHasNoBooksByTheAuthor() { + TestLibrary library = new TestLibrary(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + Book theHobbit = new Book("The Hobbit", "J.R.R. Tolkien"); + Book theSilmarillion = new Book("The Silmarillion", "J.R.R. Tolkien"); + Book theHungerGames = new Book("The Hunger Games", "Suzanne Collins"); + library.addBook(theLordOfTheRings); + library.addBook(theHobbit); + library.addBook(theSilmarillion); + library.addBook(theHungerGames); + library.removeBookByAuthor("J.R.R. Tolkien"); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); +} + +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/TestLibrary.java b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/TestLibrary.java new file mode 100644 index 0000000000..8ee3b0e3fe --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/TestLibrary.java @@ -0,0 +1,10 @@ +package com.baeldung.library.test; + +import com.baeldung.library.core.Library; + +public class TestLibrary extends Library { + @Override + public void removeBookByAuthor(final String author) { + super.removeBookByAuthor(author); + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/module-info.java b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/module-info.java new file mode 100644 index 0000000000..8d60b574f2 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/module-info.java @@ -0,0 +1,5 @@ +module com.baeldung.library.test { + requires com.baeldung.library.core; + requires org.junit.jupiter.api; + opens com.baeldung.library.test to org.junit.platform.commons; +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/pom.xml b/core-java-modules/core-java-9-jigsaw/pom.xml index 70a2882234..288254b9cf 100644 --- a/core-java-modules/core-java-9-jigsaw/pom.xml +++ b/core-java-modules/core-java-9-jigsaw/pom.xml @@ -5,6 +5,10 @@ 4.0.0 core-java-9-jigsaw core-java-9-jigsaw + pom + + library-core + com.baeldung diff --git a/core-java-modules/core-java-9-jigsaw/run-library-core-module-with-patch.sh b/core-java-modules/core-java-9-jigsaw/run-library-core-module-with-patch.sh new file mode 100644 index 0000000000..70772a3589 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-core-module-with-patch.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +java --module-path mods:libs \ +--add-modules com.baeldung.library.core \ +--add-opens com.baeldung.library.core/com.baeldung.library.core=org.junit.platform.commons \ +--add-reads com.baeldung.library.core=org.junit.jupiter.api \ +--patch-module com.baeldung.library.core=outDir/library-test \ +--module org.junit.platform.console --select-class com.baeldung.library.core.LibraryUnitTest \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/run-library-core-module.sh b/core-java-modules/core-java-9-jigsaw/run-library-core-module.sh new file mode 100644 index 0000000000..f2bb976512 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-core-module.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +java --module-path mods --module com.baeldung.library.core/com.baeldung.library.core.Main \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/run-library-test-class-path.sh b/core-java-modules/core-java-9-jigsaw/run-library-test-class-path.sh new file mode 100644 index 0000000000..73e3d504bf --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-test-class-path.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +java --module-path libs \ +org.junit.platform.console.ConsoleLauncher \ +--classpath ./outDir/library-core \ +--select-class com.baeldung.library.core.LibraryUnitTest \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/run-library-test-module-path.sh b/core-java-modules/core-java-9-jigsaw/run-library-test-module-path.sh new file mode 100644 index 0000000000..08d149dbd7 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-test-module-path.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +java --module-path mods:libs \ +--add-modules com.baeldung.library.test \ +--add-opens com.baeldung.library.core/com.baeldung.library.core=com.baeldung.library.test \ +org.junit.platform.console.ConsoleLauncher --select-class com.baeldung.library.test.LibraryUnitTest \ No newline at end of file diff --git a/core-java-modules/core-java-compiler/README.md b/core-java-modules/core-java-compiler/README.md new file mode 100644 index 0000000000..2a1e609194 --- /dev/null +++ b/core-java-modules/core-java-compiler/README.md @@ -0,0 +1,6 @@ +## Core Java Compiler + +### Relevant Articles: + +- [Compiling Java *.class Files with javac](http://www.baeldung.com/javac) +- [Illegal Character Compilation Error](https://www.baeldung.com/java-illegal-character-error) diff --git a/core-java-modules/core-java-compiler/pom.xml b/core-java-modules/core-java-compiler/pom.xml new file mode 100644 index 0000000000..8f2be3f142 --- /dev/null +++ b/core-java-modules/core-java-compiler/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + core-java-compiler + 0.1.0-SNAPSHOT + core-java-compiler + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + com.google.gdata + core + ${gdata.version} + + + + + 1.47.1 + + + \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/javac/Data.java b/core-java-modules/core-java-compiler/src/main/java/com/baeldung/javac/Data.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/javac/Data.java rename to core-java-modules/core-java-compiler/src/main/java/com/baeldung/javac/Data.java diff --git a/core-java-modules/core-java/src/main/java/javac-args/arguments b/core-java-modules/core-java-compiler/src/main/java/javac-args/arguments similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/arguments rename to core-java-modules/core-java-compiler/src/main/java/javac-args/arguments diff --git a/core-java-modules/core-java/src/main/java/javac-args/options b/core-java-modules/core-java-compiler/src/main/java/javac-args/options similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/options rename to core-java-modules/core-java-compiler/src/main/java/javac-args/options diff --git a/core-java-modules/core-java/src/main/java/javac-args/types b/core-java-modules/core-java-compiler/src/main/java/javac-args/types similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/types rename to core-java-modules/core-java-compiler/src/main/java/javac-args/types diff --git a/core-java-modules/core-java/src/main/java/javac-args/xlint-ops b/core-java-modules/core-java-compiler/src/main/java/javac-args/xlint-ops similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/xlint-ops rename to core-java-modules/core-java-compiler/src/main/java/javac-args/xlint-ops diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java b/core-java-modules/core-java-compiler/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java rename to core-java-modules/core-java-compiler/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java diff --git a/core-java-modules/core-java/src/test/resources/bom-file.txt b/core-java-modules/core-java-compiler/src/test/resources/bom-file.txt similarity index 100% rename from core-java-modules/core-java/src/test/resources/bom-file.txt rename to core-java-modules/core-java-compiler/src/test/resources/bom-file.txt diff --git a/core-java-modules/core-java-jpms/pom.xml b/core-java-modules/core-java-jpms/pom.xml index 62aa49f299..3cfa0e3f45 100644 --- a/core-java-modules/core-java-jpms/pom.xml +++ b/core-java-modules/core-java-jpms/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-jpms - 0.0.1-SNAPSHOT core-java-jpms pom @@ -15,8 +14,8 @@ - decoupling-pattern1 - decoupling-pattern2 + service-provider-factory-pattern + service-loader-api-pattern diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/pom.xml similarity index 91% rename from core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/pom.xml index 13d0b2d201..f928912ffd 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/pom.xml @@ -8,8 +8,8 @@ 1.0 - com.baeldung.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/pom.xml similarity index 91% rename from core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/pom.xml index 5b2e4cfc82..13a443eab5 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/pom.xml @@ -3,8 +3,8 @@ 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.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT pom diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/pom.xml similarity index 90% rename from core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/pom.xml index ddb8aeccd1..bcee01f631 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/pom.xml @@ -8,8 +8,8 @@ 1.0 - com.baeldung.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/pom.xml similarity index 87% rename from core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/pom.xml index 06ef900092..f40745541b 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/pom.xml @@ -8,8 +8,8 @@ 1.0 - com.baeldung.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/pom.xml b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/pom.xml similarity index 89% rename from core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/pom.xml rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/pom.xml index f82e72b85d..ba92733f34 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/pom.xml +++ b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/pom.xml @@ -8,8 +8,8 @@ jar - com.baeldung.decoupling-pattern1 - decoupling-pattern1 + com.baeldung.service-provider-factory-pattern + service-provider-factory-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/pom.xml b/core-java-modules/core-java-jpms/service-provider-factory-pattern/pom.xml similarity index 91% rename from core-java-modules/core-java-jpms/decoupling-pattern1/pom.xml rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/pom.xml index 2121b46b82..35a9912312 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern1/pom.xml +++ b/core-java-modules/core-java-jpms/service-provider-factory-pattern/pom.xml @@ -3,8 +3,8 @@ 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.decoupling-pattern1 - decoupling-pattern1 + com.baeldung.service-provider-factory-pattern + service-provider-factory-pattern 1.0-SNAPSHOT pom diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/pom.xml b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/pom.xml similarity index 86% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/pom.xml rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/pom.xml index fc4b5854f9..d6e50ee9ff 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/pom.xml +++ b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/pom.xml @@ -9,8 +9,8 @@ jar - com.baeldung.decoupling-pattern1 - decoupling-pattern1 + com.baeldung.service-provider-factory-pattern + service-provider-factory-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/module-info.java diff --git a/core-java-modules/core-java-networking-2/pom.xml b/core-java-modules/core-java-networking-2/pom.xml index 982f4fa346..34f16a9938 100644 --- a/core-java-modules/core-java-networking-2/pom.xml +++ b/core-java-modules/core-java-networking-2/pom.xml @@ -15,9 +15,9 @@ - org.apache.httpcomponents - httpclient - ${httpclient.version} + commons-codec + commons-codec + ${commons-codec.version} org.apache.commons @@ -52,11 +52,11 @@ - 4.5.9 2.0.1 2.4.5 2.3.3 2.0.0-alpha-3 + 1.15 \ No newline at end of file diff --git a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java index 779f8aa898..f9d747a133 100644 --- a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java +++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java @@ -21,7 +21,7 @@ public class HttpClient { this.password = password; } - public int sendRquestWithAuthHeader(String url) throws IOException { + public int sendRequestWithAuthHeader(String url) throws IOException { HttpURLConnection connection = null; try { connection = createConnection(url); @@ -34,7 +34,7 @@ public class HttpClient { } } - public int sendRquestWithAuthenticator(String url) throws IOException { + public int sendRequestWithAuthenticator(String url) throws IOException { setAuthenticator(); HttpURLConnection connection = null; diff --git a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java index 01d580bc65..387b228953 100644 --- a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java +++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java @@ -7,28 +7,28 @@ import org.junit.Test; public class HttpClientLiveTest { @Test - public void sendRquestWithAuthHeader() throws Exception { + public void sendRequestWithAuthHeader() throws Exception { HttpClient httpClient = new HttpClient("user1", "pass1"); - int status = httpClient.sendRquestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); + int status = httpClient.sendRequestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); assertTrue(isSuccess(status)); } @Test - public void sendRquestWithAuthHeader_whenIncorrectCredentials_thenNotSuccessful() throws Exception { + public void sendRequestWithAuthHeader_whenIncorrectCredentials_thenNotSuccessful() throws Exception { HttpClient httpClient = new HttpClient("John", "Smith"); - int status = httpClient.sendRquestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); + int status = httpClient.sendRequestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); assertTrue(isUnauthorized(status)); } @Test - public void sendRquestWithAuthenticator() throws Exception { + public void sendRequestWithAuthenticator() throws Exception { HttpClient httpClient = new HttpClient("user2", "pass2"); - int status = httpClient.sendRquestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); + int status = httpClient.sendRequestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); assertTrue(isSuccess(status)); } @@ -37,7 +37,7 @@ public class HttpClientLiveTest { public void sendRquestWithAuthenticator_whenIncorrectCredentials_thenNotSuccessful() throws Exception { HttpClient httpClient = new HttpClient("John", "Smith"); - int status = httpClient.sendRquestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); + int status = httpClient.sendRequestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); assertTrue(isUnauthorized(status)); } diff --git a/core-java-modules/core-java-networking-4/pom.xml b/core-java-modules/core-java-networking-4/pom.xml index 5fca4a1cab..cbe6356d0f 100644 --- a/core-java-modules/core-java-networking-4/pom.xml +++ b/core-java-modules/core-java-networking-4/pom.xml @@ -24,6 +24,30 @@ jsoup ${jsoup.version} + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + + javax.ws.rs + javax.ws.rs-api + 2.1.1 + + + org.glassfish.jersey.core + jersey-common + 2.22.2 + test + + + + org.springframework + spring-web + 6.0.6 + diff --git a/core-java-modules/core-java-networking-4/src/test/java/com/baeldung/urlquerymanipulation/UrlQueryManipulationUnitTest.java b/core-java-modules/core-java-networking-4/src/test/java/com/baeldung/urlquerymanipulation/UrlQueryManipulationUnitTest.java new file mode 100644 index 0000000000..cc53a3e3a8 --- /dev/null +++ b/core-java-modules/core-java-networking-4/src/test/java/com/baeldung/urlquerymanipulation/UrlQueryManipulationUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.urlquerymanipulation; + +import static junit.framework.TestCase.assertEquals; + +import java.net.URI; +import java.net.URISyntaxException; + +import javax.ws.rs.core.UriBuilder; + +import org.apache.http.client.utils.URIBuilder; + +import org.junit.Test; +import org.springframework.web.util.UriComponentsBuilder; + +public class UrlQueryManipulationUnitTest { + + @Test + public void whenUsingApacheUriBuilder_thenParametersAreCorrectlyAdded() throws URISyntaxException { + String url = "baeldung.com"; + String key = "article"; + String value = "alpha"; + URI uri = new URIBuilder(url).addParameter(key, value) + .build(); + + assertEquals("baeldung.com?article=alpha", uri.toString()); + } + + @Test + public void whenUsingJavaUriBuilder_thenParametersAreCorrectlyAdded() { + String url = "baeldung.com"; + String key = "article"; + String value = "beta"; + URI uri = UriBuilder.fromUri(url) + .queryParam(key, value) + .build(); + + assertEquals("baeldung.com?article=beta", uri.toString()); + } + + @Test + public void whenUsingSpringUriComponentsBuilder_thenParametersAreCorrectlyAdded() { + String url = "baeldung.com"; + String key = "article"; + String value = "charlie"; + URI uri = UriComponentsBuilder.fromUriString(url) + .queryParam(key, value) + .build() + .toUri(); + + assertEquals("baeldung.com?article=charlie", uri.toString()); + } + +} diff --git a/core-java-modules/core-java-numbers-6/README.md b/core-java-modules/core-java-numbers-6/README.md index 2c0b0554c4..4856d86052 100644 --- a/core-java-modules/core-java-numbers-6/README.md +++ b/core-java-modules/core-java-numbers-6/README.md @@ -1,2 +1,4 @@ ### Relevant Articles: - [Java Program to Calculate Pi](https://www.baeldung.com/java-monte-carlo-compute-pi) + +- More articles: [[<-- prev]](../core-java-numbers-5) \ No newline at end of file diff --git a/core-java-modules/core-java-numbers-6/pom.xml b/core-java-modules/core-java-numbers-6/pom.xml index 0f78f41b9f..531f1293d1 100644 --- a/core-java-modules/core-java-numbers-6/pom.xml +++ b/core-java-modules/core-java-numbers-6/pom.xml @@ -12,6 +12,21 @@ 0.0.1-SNAPSHOT + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + commons-codec + commons-codec + ${commons-codec} + test + + + core-java-numbers-6 @@ -22,4 +37,7 @@ + + 1.15 + \ No newline at end of file diff --git a/core-java-modules/core-java-numbers-6/src/main/java/com/baeldung/integertohex/IntegerToHex.java b/core-java-modules/core-java-numbers-6/src/main/java/com/baeldung/integertohex/IntegerToHex.java new file mode 100644 index 0000000000..9f75b9a145 --- /dev/null +++ b/core-java-modules/core-java-numbers-6/src/main/java/com/baeldung/integertohex/IntegerToHex.java @@ -0,0 +1,16 @@ +package com.baeldung.integertohex; + +class IntegerToHex { + static final String digits = "0123456789ABCDEF"; + static String integerToHex(int input) { + if (input <= 0) + return "0"; + StringBuilder hex = new StringBuilder(); + while (input > 0) { + int digit = input % 16; + hex.insert(0, digits.charAt(digit)); + input = input / 16; + } + return hex.toString(); + } +} diff --git a/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/integertohex/IntegerToHexUnitTest.java b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/integertohex/IntegerToHexUnitTest.java new file mode 100644 index 0000000000..6073c2d347 --- /dev/null +++ b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/integertohex/IntegerToHexUnitTest.java @@ -0,0 +1,75 @@ +package com.baeldung.integertohex; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.apache.commons.codec.binary.Hex; +import org.junit.jupiter.api.Test; + +class IntegerToHexUnitTest { + + @Test + void givenIntegerValue_whenUseRawMethod_thenWillGetHexValue() { + String result = IntegerToHex.integerToHex(1055); + assertEquals("41F", result); + } + + @Test + void givenIntegerNegativeValue_whenUseRawMethod_thenZeroValue() { + String result = IntegerToHex.integerToHex(-1055); + assertEquals("0", result); + } + + @Test + void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValue() { + String result = String.format("%02x", 255); + assertEquals("ff", result); + } + + @Test + void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValueWithLeftZeros() { + String result = String.format("%04x", 255); + assertEquals("00ff", result); + } + + @Test + void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValueWithLeftZerosAndUpperLetter() { + String result = String.format("%04X", 255); + assertEquals("00FF", result); + } + + @Test + void givenIntegerValue_whenUseIntegerToHexString_thenWillGetHexValue() { + String result = Integer.toHexString(1000); + assertEquals("3e8", result); + } + + @Test + void givenIntegerValue_whenUseLongToHexString_thenWillGetHexValue() { + String result = Long.toHexString(255L); + assertEquals("ff", result); + } + + @Test + public void givenNegativeIntegerValue_whenUseIntegerToString_thenWillGetHexValue() { + String result = Integer.toString(-1458, 16); + assertEquals("-5b2", result); + } + + @Test + public void givenIntegerValue_whenUseIntegerToString_thenWillGetHexValue() { + String result = Integer.toString(1458, 16); + assertEquals("5b2", result); + } + + @Test + public void givenLongValue_whenUseLongToString_thenWillGetHexValue() { + String result = Long.toString(158, 16); + assertEquals("9e", result); + } + + @Test + public void givenIntegerValue_whenUseApacheCommons_thenWillGetHexSignedValue() { + String result = Hex.encodeHexString(new byte[] { (byte) 254 }); + assertEquals("fe", result); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-perf-2/README.md b/core-java-modules/core-java-perf-2/README.md new file mode 100644 index 0000000000..5616cce48b --- /dev/null +++ b/core-java-modules/core-java-perf-2/README.md @@ -0,0 +1 @@ +## Relevant Articles diff --git a/core-java-modules/core-java-perf-2/pom.xml b/core-java-modules/core-java-perf-2/pom.xml new file mode 100644 index 0000000000..a9408ca385 --- /dev/null +++ b/core-java-modules/core-java-perf-2/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + core-java-perf-2 + core-java-perf-2 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/core-java-modules/core-java-perf-2/src/main/java/com/baeldung/highcpu/Application.java b/core-java-modules/core-java-perf-2/src/main/java/com/baeldung/highcpu/Application.java new file mode 100644 index 0000000000..82162406b3 --- /dev/null +++ b/core-java-modules/core-java-perf-2/src/main/java/com/baeldung/highcpu/Application.java @@ -0,0 +1,20 @@ +package com.baeldung.highcpu; + +import java.util.LinkedList; +import java.util.List; +import java.util.function.IntUnaryOperator; +import java.util.stream.IntStream; + +public class Application { + + static List generateList() { + return IntStream.range(0, 10000000).parallel().map(IntUnaryOperator.identity()).collect(LinkedList::new, List::add, List::addAll); + } + + public static void main(String[] args) { + List list = generateList(); + long start = System.nanoTime(); + int value = list.get(9500000); + System.out.printf("Found value %d in %d nanos\n", value, (System.nanoTime() - start)); + } +} diff --git a/core-java-modules/core-java-properties/README.md b/core-java-modules/core-java-properties/README.md new file mode 100644 index 0000000000..73991634df --- /dev/null +++ b/core-java-modules/core-java-properties/README.md @@ -0,0 +1,6 @@ +## Core Java Properties + +### Relevant Articles: + +- [Getting Started with Java Properties](http://www.baeldung.com/java-properties) +- [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) diff --git a/core-java-modules/core-java-properties/pom.xml b/core-java-modules/core-java-properties/pom.xml new file mode 100644 index 0000000000..9beacabdd5 --- /dev/null +++ b/core-java-modules/core-java-properties/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + core-java-properties + 0.1.0-SNAPSHOT + core-java-properties + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/util/PropertiesLoader.java b/core-java-modules/core-java-properties/src/main/java/com/baeldung/util/PropertiesLoader.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/util/PropertiesLoader.java rename to core-java-modules/core-java-properties/src/main/java/com/baeldung/util/PropertiesLoader.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java b/core-java-modules/core-java-properties/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java rename to core-java-modules/core-java-properties/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java b/core-java-modules/core-java-properties/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java rename to core-java-modules/core-java-properties/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java b/core-java-modules/core-java-properties/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java rename to core-java-modules/core-java-properties/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java diff --git a/core-java-modules/core-java/src/test/resources/app.properties b/core-java-modules/core-java-properties/src/test/resources/app.properties similarity index 100% rename from core-java-modules/core-java/src/test/resources/app.properties rename to core-java-modules/core-java-properties/src/test/resources/app.properties diff --git a/core-java-modules/core-java/src/test/resources/catalog b/core-java-modules/core-java-properties/src/test/resources/catalog similarity index 100% rename from core-java-modules/core-java/src/test/resources/catalog rename to core-java-modules/core-java-properties/src/test/resources/catalog diff --git a/core-java-modules/core-java/src/test/resources/configuration.properties b/core-java-modules/core-java-properties/src/test/resources/configuration.properties similarity index 100% rename from core-java-modules/core-java/src/test/resources/configuration.properties rename to core-java-modules/core-java-properties/src/test/resources/configuration.properties diff --git a/core-java-modules/core-java/src/test/resources/default.properties b/core-java-modules/core-java-properties/src/test/resources/default.properties similarity index 100% rename from core-java-modules/core-java/src/test/resources/default.properties rename to core-java-modules/core-java-properties/src/test/resources/default.properties diff --git a/core-java-modules/core-java/src/test/resources/icons.xml b/core-java-modules/core-java-properties/src/test/resources/icons.xml similarity index 100% rename from core-java-modules/core-java/src/test/resources/icons.xml rename to core-java-modules/core-java-properties/src/test/resources/icons.xml diff --git a/core-java-modules/core-java-uuid/pom.xml b/core-java-modules/core-java-uuid/pom.xml index b97db174b4..c0e93c1d32 100644 --- a/core-java-modules/core-java-uuid/pom.xml +++ b/core-java-modules/core-java-uuid/pom.xml @@ -24,6 +24,21 @@ log4j-over-slf4j ${org.slf4j.version} + + com.github.f4b6a3 + uuid-creator + 5.2.0 + + + com.fasterxml.uuid + java-uuid-generator + 4.1.0 + + + com.github.f4b6a3 + tsid-creator + 5.2.3 + @@ -142,4 +157,4 @@ 3.0.0-M1 - \ No newline at end of file + diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorBenchmark.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorBenchmark.java new file mode 100644 index 0000000000..20b2c127bd --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorBenchmark.java @@ -0,0 +1,42 @@ +package com.baeldung.timebaseduuid; + +import com.fasterxml.uuid.Generators; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +public class JavaUUIDCreatorBenchmark { + +public static void main(String[] args) throws InterruptedException { + + int threadCount = 128; + int iterationCount = 100_000; + Map uuidMap = new ConcurrentHashMap<>(); + AtomicLong collisionCount = new AtomicLong(); + long startNanos = System.nanoTime(); + CountDownLatch endLatch = new CountDownLatch(threadCount); + + for (long i = 0; i < threadCount; i++) { + long threadId = i; + new Thread(() -> { + for (long j = 0; j < iterationCount; j++) { + UUID uuid = Generators.timeBasedGenerator().generate(); + Long existingUUID = uuidMap.put(uuid, (threadId * iterationCount) + j); + if(existingUUID != null) { + collisionCount.incrementAndGet(); + } + } + endLatch.countDown(); + }).start(); + } + + endLatch.await(); + System.out.println(threadCount * iterationCount + " UUIDs generated, " + collisionCount + " collisions in " + + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos) + "ms"); +} +} + diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorExample.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorExample.java new file mode 100644 index 0000000000..b59d7e236a --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorExample.java @@ -0,0 +1,13 @@ +package com.baeldung.timebaseduuid; + +import com.fasterxml.uuid.Generators; + +public class JavaUUIDCreatorExample { + + public static void main(String[] args) { + System.out.println("UUID Version 1: " + Generators.timeBasedGenerator().generate()); + System.out.println("UUID Version 6: " + Generators.timeBasedReorderedGenerator().generate()); + System.out.println("UUID Version 7: " + Generators.timeBasedEpochGenerator().generate()); + + } +} diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorBenchmark.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorBenchmark.java new file mode 100644 index 0000000000..d93cd73a25 --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorBenchmark.java @@ -0,0 +1,42 @@ +package com.baeldung.timebaseduuid; + +import com.github.f4b6a3.uuid.UuidCreator; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +public class UUIDCreatorBenchmark { + + public static void main(String[] args) throws InterruptedException { + + int threadCount = 128; + int iterationCount = 100_000; + Map uuidMap = new ConcurrentHashMap<>(); + AtomicLong collisionCount = new AtomicLong(); + long startNanos = System.nanoTime(); + CountDownLatch endLatch = new CountDownLatch(threadCount); + + for (long i = 0; i < threadCount; i++) { + long threadId = i; + new Thread(() -> { + for (long j = 0; j < iterationCount; j++) { + UUID uuid = UuidCreator.getTimeBased(); + Long existingUUID = uuidMap.put(uuid, (threadId * iterationCount) + j); + if(existingUUID != null) { + collisionCount.incrementAndGet(); + } + } + endLatch.countDown(); + }).start(); + } + + endLatch.await(); + System.out.println(threadCount * iterationCount + " UUIDs generated, " + collisionCount + " collisions in " + + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos) + "ms"); + } +} diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorExample.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorExample.java new file mode 100644 index 0000000000..fad2f55c93 --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorExample.java @@ -0,0 +1,13 @@ +package com.baeldung.timebaseduuid; + +import com.github.f4b6a3.uuid.UuidCreator; + +public class UUIDCreatorExample { + + public static void main(String[] args) { + System.out.println("UUID Version 1: " + UuidCreator.getTimeBased()); + System.out.println("UUID Version 6: " + UuidCreator.getTimeOrdered()); + System.out.println("UUID Version 7: " + UuidCreator.getTimeOrderedEpoch()); + } +} + diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 8858c58b1c..287e510c1e 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -2,8 +2,4 @@ ### Relevant Articles: -- [Getting Started with Java Properties](http://www.baeldung.com/java-properties) - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) -- [Compiling Java *.class Files with javac](http://www.baeldung.com/javac) -- [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) -- [Illegal Character Compilation Error](https://www.baeldung.com/java-illegal-character-error) diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 9ccfc7cbd8..423487d5da 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -63,11 +63,6 @@ commons-io ${commons-io.version} - - com.google.gdata - core - ${gdata.version} - @@ -180,7 +175,6 @@ 1.1 4.3.20.RELEASE - 1.47.1 \ No newline at end of file diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 6cf4c7bee0..fc7597e85a 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -53,6 +53,7 @@ core-java-collections-maps core-java-collections-maps-2 core-java-collections-maps-3 + core-java-compiler core-java-concurrency-2 core-java-concurrency-advanced core-java-concurrency-advanced-2 @@ -120,6 +121,7 @@ core-java-numbers-6 core-java-optional core-java-perf + core-java-properties core-java-reflection core-java-reflection-2 core-java-security-2 diff --git a/docker-modules/docker-caching/multi-module-caching/core/pom.xml b/docker-modules/docker-caching/multi-module-caching/core-module/pom.xml similarity index 93% rename from docker-modules/docker-caching/multi-module-caching/core/pom.xml rename to docker-modules/docker-caching/multi-module-caching/core-module/pom.xml index bcfc4b5783..159d76830b 100644 --- a/docker-modules/docker-caching/multi-module-caching/core/pom.xml +++ b/docker-modules/docker-caching/multi-module-caching/core-module/pom.xml @@ -3,7 +3,7 @@ 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 - core + core-module multi-module-caching diff --git a/docker-modules/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java b/docker-modules/docker-caching/multi-module-caching/core-module/src/main/java/com/baeldung/maven_caching/CoreClass.java similarity index 100% rename from docker-modules/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java rename to docker-modules/docker-caching/multi-module-caching/core-module/src/main/java/com/baeldung/maven_caching/CoreClass.java diff --git a/docker-modules/docker-caching/multi-module-caching/pom.xml b/docker-modules/docker-caching/multi-module-caching/pom.xml index 1fdd6173bc..b64cf1a8b8 100644 --- a/docker-modules/docker-caching/multi-module-caching/pom.xml +++ b/docker-modules/docker-caching/multi-module-caching/pom.xml @@ -10,8 +10,8 @@ pom - runner - core + runner-module + core-module diff --git a/docker-modules/docker-caching/multi-module-caching/runner/pom.xml b/docker-modules/docker-caching/multi-module-caching/runner-module/pom.xml similarity index 94% rename from docker-modules/docker-caching/multi-module-caching/runner/pom.xml rename to docker-modules/docker-caching/multi-module-caching/runner-module/pom.xml index e3f234bac0..e608706864 100644 --- a/docker-modules/docker-caching/multi-module-caching/runner/pom.xml +++ b/docker-modules/docker-caching/multi-module-caching/runner-module/pom.xml @@ -3,7 +3,7 @@ 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 - runner + runner-module multi-module-caching @@ -14,7 +14,7 @@ com.baeldung - core + core-module 0.0.1-SNAPSHOT diff --git a/docker-modules/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java b/docker-modules/docker-caching/multi-module-caching/runner-module/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java similarity index 100% rename from docker-modules/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java rename to docker-modules/docker-caching/multi-module-caching/runner-module/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java diff --git a/code-generation/README.md b/google-auto-project/README.md similarity index 100% rename from code-generation/README.md rename to google-auto-project/README.md diff --git a/code-generation/pom.xml b/google-auto-project/pom.xml similarity index 95% rename from code-generation/pom.xml rename to google-auto-project/pom.xml index ed8890e1dd..839ccabc5f 100644 --- a/code-generation/pom.xml +++ b/google-auto-project/pom.xml @@ -3,9 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - code-generation + google-auto-project 1.0 - code-generation + google-auto-project com.baeldung diff --git a/code-generation/src/main/java/com/baeldung/autofactory/App.java b/google-auto-project/src/main/java/com/baeldung/autofactory/App.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/App.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/App.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/CustomStorage.java b/google-auto-project/src/main/java/com/baeldung/autofactory/CustomStorage.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/CustomStorage.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/CustomStorage.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java b/google-auto-project/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/model/Camera.java b/google-auto-project/src/main/java/com/baeldung/autofactory/model/Camera.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/model/Camera.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/model/Camera.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/model/Phone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/model/Phone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/model/Phone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/model/Phone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java b/google-auto-project/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java b/google-auto-project/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java b/google-auto-project/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java diff --git a/code-generation/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java b/google-auto-project/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java rename to google-auto-project/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java diff --git a/code-generation/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java b/google-auto-project/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java rename to google-auto-project/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java diff --git a/code-generation/src/main/java/com/baeldung/autoservice/TranslationService.java b/google-auto-project/src/main/java/com/baeldung/autoservice/TranslationService.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autoservice/TranslationService.java rename to google-auto-project/src/main/java/com/baeldung/autoservice/TranslationService.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoney.java b/google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoney.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoney.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoney.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java b/google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/Foo.java b/google-auto-project/src/main/java/com/baeldung/autovalue/Foo.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/Foo.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/Foo.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/ImmutableMoney.java b/google-auto-project/src/main/java/com/baeldung/autovalue/ImmutableMoney.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/ImmutableMoney.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/ImmutableMoney.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/MutableMoney.java b/google-auto-project/src/main/java/com/baeldung/autovalue/MutableMoney.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/MutableMoney.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/MutableMoney.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/Person.java b/google-auto-project/src/main/java/com/baeldung/autovalue/Person.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/Person.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/Person.java diff --git a/code-generation/src/main/resources/logback.xml b/google-auto-project/src/main/resources/logback.xml similarity index 100% rename from code-generation/src/main/resources/logback.xml rename to google-auto-project/src/main/resources/logback.xml diff --git a/code-generation/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java b/google-auto-project/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java similarity index 100% rename from code-generation/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java rename to google-auto-project/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java diff --git a/code-generation/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java b/google-auto-project/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java similarity index 100% rename from code-generation/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java rename to google-auto-project/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java diff --git a/code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java b/google-auto-project/src/test/java/com/baeldung/autovalue/PersonUnitTest.java similarity index 100% rename from code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java rename to google-auto-project/src/test/java/com/baeldung/autovalue/PersonUnitTest.java diff --git a/gradle-modules/gradle-customization/protobuf/build.gradle b/gradle-modules/gradle-customization/protobuf/build.gradle new file mode 100644 index 0000000000..3cac57fb03 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/build.gradle @@ -0,0 +1,45 @@ +plugins { + id 'java' + id "com.google.protobuf" version "0.8.18" +} + +group = 'com.baeldung' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +dependencies { + implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.15.0' + implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} + +protobuf { + protoc { + artifact = 'com.google.protobuf:protoc:3.15.0' + } +} + +sourceSets { + main { + proto { + srcDir 'src/sample_protofiles' + } + java { + srcDirs 'build/generated/source/proto/main/java' + } + } + test { + proto { + srcDir 'src/sample_protofiles' + } + } +} \ No newline at end of file diff --git a/gradle-modules/gradle-customization/protobuf/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle-customization/protobuf/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..774fae8767 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle-modules/gradle-customization/protobuf/gradlew b/gradle-modules/gradle-customization/protobuf/gradlew new file mode 100755 index 0000000000..a69d9cb6c2 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle-modules/gradle-customization/protobuf/gradlew.bat b/gradle-modules/gradle-customization/protobuf/gradlew.bat new file mode 100644 index 0000000000..f127cfd49d --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle-modules/gradle-customization/protobuf/settings.gradle b/gradle-modules/gradle-customization/protobuf/settings.gradle new file mode 100644 index 0000000000..63483bae11 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'protobuf' diff --git a/gradle-modules/gradle-customization/protobuf/src/main/resources/application.properties b/gradle-modules/gradle-customization/protobuf/src/main/resources/application.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/gradle-modules/gradle-customization/protobuf/src/sample_protofiles/user_message.proto b/gradle-modules/gradle-customization/protobuf/src/sample_protofiles/user_message.proto new file mode 100644 index 0000000000..60e06c2016 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/src/sample_protofiles/user_message.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; + +package com.baeldung.protobuf; + +option java_multiple_files = true; +option java_package = "com.baeldung.protobuf.service"; + +message User { + string firstName = 1; + optional string middleName = 2; + string lastName = 3; + optional uint32 age = 4; +} \ No newline at end of file diff --git a/gradle-modules/gradle-customization/protobuf/src/test/java/com/baeldung/protobuf/ProtobufCodeGenerationUnitTest.java b/gradle-modules/gradle-customization/protobuf/src/test/java/com/baeldung/protobuf/ProtobufCodeGenerationUnitTest.java new file mode 100644 index 0000000000..12187e3efb --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/src/test/java/com/baeldung/protobuf/ProtobufCodeGenerationUnitTest.java @@ -0,0 +1,28 @@ +package com.baeldung.protobuf; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.baeldung.protobuf.service.User; + +class ProtobufCodeGenerationUnitTest { + + @Test + void givenUserData_whenObjectCreated_thenDataShouldMatch() { + final String firstName = "John"; + final String lastName = "Doe"; + final int age = 28; + + User user = User.newBuilder() + .setFirstName(firstName) + .setLastName(lastName) + .setAge(age) + .build(); + + assertEquals(firstName, user.getFirstName()); + assertEquals(lastName, user.getLastName()); + assertEquals(age, user.getAge()); + } + +} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java index e655deb93b..119c1e3ce3 100644 --- a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java +++ b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java @@ -1,26 +1,41 @@ package com.baeldung.jackson.format; +import com.fasterxml.jackson.annotation.JsonFormat; + import java.util.Date; -import com.baeldung.jackson.domain.Person; -import com.fasterxml.jackson.annotation.JsonFormat; - -/** - * @author Jay Sridhar - * @version 1.0 - */ -public class User extends Person { +public class User { private String firstName; private String lastName; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ") private Date createdDate; + public User() { + } + public User(String firstName, String lastName) { - super(firstName, lastName); + this.firstName = firstName; + this.lastName = lastName; this.createdDate = new Date(); } + 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 Date getCreatedDate() { return createdDate; } @@ -35,3 +50,51 @@ public class User extends Person { return new Date(); } } + +@JsonFormat(with = JsonFormat.Feature.ACCEPT_CASE_INSENSITIVE_PROPERTIES) +class UserIgnoreCase { + private String firstName; + private String lastName; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ") + private Date createdDate; + + public UserIgnoreCase() { + } + + public UserIgnoreCase(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + this.createdDate = new Date(); + } + + 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 Date getCreatedDate() { + return createdDate; + } + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ", locale = "en_GB") + public Date getCurrentDate() { + return new Date(); + } + + @JsonFormat(shape = JsonFormat.Shape.NUMBER) + public Date getDateNum() { + return new Date(); + } +} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java index cf166fdc36..5cdc248d3b 100644 --- a/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java +++ b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java @@ -1,24 +1,25 @@ package com.baeldung.jackson.format; -import java.util.Date; - import com.fasterxml.jackson.core.JsonProcessingException; - import com.fasterxml.jackson.databind.ObjectMapper; - +import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; import org.junit.Test; -import static io.restassured.path.json.JsonPath.from; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; +import static io.restassured.path.json.JsonPath.from; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.from; import static org.assertj.core.data.Percentage.withPercentage; -/** - * @author Jay Sridhar - * @version 1.0 - */ public class JsonFormatUnitTest { + private static final String JSON_STRING = "{\"FIRSTNAME\":\"John\",\"lastname\":\"Smith\",\"cReAtEdDaTe\":\"2016-12-18@07:53:34.740+0000\"}"; + @Test public void whenSerializedDateFormat_thenCorrect() throws JsonProcessingException { @@ -32,6 +33,24 @@ public class JsonFormatUnitTest { // Expected to be close to current time long now = new Date().getTime(); assertThat(from(result).getLong("dateNum")).isCloseTo(now, withPercentage(10.0)); - } -} + + @Test + public void whenDeserializeJsonStrToUserObject_thenFail() { + assertThatThrownBy(() -> new ObjectMapper().readValue(JSON_STRING, User.class)).isInstanceOf(UnrecognizedPropertyException.class); + } + + @Test + public void whenDeserializeJsonStrToUserIgnoreCaseObject_thenSuccess() throws JsonProcessingException, ParseException { + UserIgnoreCase result = new ObjectMapper().readValue(JSON_STRING, UserIgnoreCase.class); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSzz"); + Date expectedDate = fmt.parse("2016-12-18T07:53:34.740+0000"); + + assertThat(result) + .isNotNull() + .returns("John", from(UserIgnoreCase::getFirstName)) + .returns("Smith", from(UserIgnoreCase::getLastName)) + .returns(expectedDate, from(UserIgnoreCase::getCreatedDate)); + } + +} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java index 87c425fe96..0b4639ca3b 100644 --- a/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java +++ b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java @@ -1,6 +1,6 @@ package com.baeldung.jackson.map; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import org.junit.Test; @@ -25,7 +25,7 @@ public class MapWithJsonKeyValueUnitTest { @Test public void givenMapWithObjectKeys_WhenSerialize_ThenUseJsonKeyForSerialization() throws JsonProcessingException { // Given - Map selectionByFruit = new HashMap<>(); + Map selectionByFruit = new LinkedHashMap(); selectionByFruit.put(FRUIT1, "Hagrid"); selectionByFruit.put(FRUIT2, "Hercules"); // When @@ -37,7 +37,7 @@ public class MapWithJsonKeyValueUnitTest { @Test public void givenMapWithObjectValues_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException { // Given - Map selectionByPerson = new HashMap<>(); + Map selectionByPerson = new LinkedHashMap(); selectionByPerson.put("Hagrid", FRUIT1); selectionByPerson.put("Hercules", FRUIT2); // When diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/BeanWithInclude.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/BeanWithInclude.java new file mode 100644 index 0000000000..18130fc9f2 --- /dev/null +++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/BeanWithInclude.java @@ -0,0 +1,18 @@ +package com.baeldung.jackson.annotation; + +import com.fasterxml.jackson.annotation.JsonIncludeProperties; + +@JsonIncludeProperties({ "name" }) +public class BeanWithInclude { + public int id; + public String name; + + public BeanWithInclude() { + + } + + public BeanWithInclude(final int id, final String name) { + this.id = id; + this.name = name; + } +} diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java index 57ef231825..1a6c7b1286 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java @@ -213,6 +213,15 @@ public class JacksonAnnotationUnitTest { assertThat(result, not(containsString("id"))); } + @Test + public void whenSerializingUsingJsonIncludeProperties_thenCorrect() throws JsonProcessingException { + final BeanWithInclude bean = new BeanWithInclude(1, "My bean"); + final String result = new ObjectMapper().writeValueAsString(bean); + assertThat(result, containsString("My bean")); + assertThat(result, not(containsString("id"))); + assertThat(result, containsString("name")); + } + @Test public void whenSerializingUsingJsonIgnore_thenCorrect() throws JsonProcessingException { final BeanWithIgnore bean = new BeanWithIgnore(1, "My bean"); diff --git a/jhipster-5/README.md b/jhipster-5/README.md deleted file mode 100644 index ba05641af0..0000000000 --- a/jhipster-5/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## JHipster 5 - -This module contains articles about JHipster 5. This is an aggregator module, articles are in the relevant submodules. diff --git a/jhipster-5/bookstore-monolith/.editorconfig b/jhipster-5/bookstore-monolith/.editorconfig deleted file mode 100644 index a79c052f53..0000000000 --- a/jhipster-5/bookstore-monolith/.editorconfig +++ /dev/null @@ -1,24 +0,0 @@ -# EditorConfig helps developers define and maintain consistent -# coding styles between different editors and IDEs -# editorconfig.org - -root = true - -[*] - -# Change these settings to your own preference -indent_style = space -indent_size = 4 - -# We recommend you to keep these unchanged -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false - -[package.json] -indent_style = space -indent_size = 2 diff --git a/jhipster-5/bookstore-monolith/.gitattributes b/jhipster-5/bookstore-monolith/.gitattributes deleted file mode 100644 index c013844d10..0000000000 --- a/jhipster-5/bookstore-monolith/.gitattributes +++ /dev/null @@ -1,148 +0,0 @@ -# This file is inspired by https://github.com/alexkaratarakis/gitattributes -# -# Auto detect text files and perform LF normalization -# http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/ -* text=auto - -# The above will handle all files NOT found below -# These files are text and should be normalized (Convert crlf => lf) - -*.bat text eol=crlf -*.coffee text -*.css text -*.cql text -*.df text -*.ejs text -*.html text -*.java text -*.js text -*.json text -*.less text -*.properties text -*.sass text -*.scss text -*.sh text eol=lf -*.sql text -*.txt text -*.ts text -*.xml text -*.yaml text -*.yml text - -# Documents -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain -*.markdown text -*.md text -*.adoc text -*.textile text -*.mustache text -*.csv text -*.tab text -*.tsv text -*.txt text -AUTHORS text -CHANGELOG text -CHANGES text -CONTRIBUTING text -COPYING text -copyright text -*COPYRIGHT* text -INSTALL text -license text -LICENSE text -NEWS text -readme text -*README* text -TODO text - -# Graphics -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.tif binary -*.tiff binary -*.ico binary -# SVG treated as an asset (binary) by default. If you want to treat it as text, -# comment-out the following line and uncomment the line after. -*.svg binary -#*.svg text -*.eps binary - -# These files are binary and should be left untouched -# (binary is a macro for -text -diff) -*.class binary -*.jar binary -*.war binary - -## LINTERS -.csslintrc text -.eslintrc text -.jscsrc text -.jshintrc text -.jshintignore text -.stylelintrc text - -## CONFIGS -*.conf text -*.config text -.editorconfig text -.gitattributes text -.gitconfig text -.gitignore text -.htaccess text -*.npmignore text - -## HEROKU -Procfile text -.slugignore text - -## AUDIO -*.kar binary -*.m4a binary -*.mid binary -*.midi binary -*.mp3 binary -*.ogg binary -*.ra binary - -## VIDEO -*.3gpp binary -*.3gp binary -*.as binary -*.asf binary -*.asx binary -*.fla binary -*.flv binary -*.m4v binary -*.mng binary -*.mov binary -*.mp4 binary -*.mpeg binary -*.mpg binary -*.swc binary -*.swf binary -*.webm binary - -## ARCHIVES -*.7z binary -*.gz binary -*.rar binary -*.tar binary -*.zip binary - -## FONTS -*.ttf binary -*.eot binary -*.otf binary -*.woff binary -*.woff2 binary diff --git a/jhipster-5/bookstore-monolith/.gitignore b/jhipster-5/bookstore-monolith/.gitignore deleted file mode 100644 index b3f7df5404..0000000000 --- a/jhipster-5/bookstore-monolith/.gitignore +++ /dev/null @@ -1,146 +0,0 @@ -###################### -# Project Specific -###################### -/src/main/webapp/content/css/main.css -/target/www/** -/src/test/javascript/coverage/ - -###################### -# Node -###################### -/node/ -node_tmp/ -node_modules/ -npm-debug.log.* -/.awcache/* -/.cache-loader/* -package-lock.json - -###################### -# SASS -###################### -.sass-cache/ - -###################### -# Eclipse -###################### -*.pydevproject -.project -.metadata -tmp/ -tmp/**/* -*.tmp -*.bak -*.swp -*~.nib -local.properties -.classpath -.settings/ -.loadpath -.factorypath -/src/main/resources/rebel.xml - -# External tool builders -.externalToolBuilders/** - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - -###################### -# Intellij -###################### -.idea/ -*.iml -*.iws -*.ipr -*.ids -*.orig -classes/ -out/ - -###################### -# Visual Studio Code -###################### -.vscode/ - -###################### -# Maven -###################### -/log/ -/target/ - -###################### -# Gradle -###################### -.gradle/ -/build/ - -###################### -# Package Files -###################### -*.jar -*.war -*.ear -*.db - -###################### -# Windows -###################### -# Windows image file caches -Thumbs.db - -# Folder config file -Desktop.ini - -###################### -# Mac OSX -###################### -.DS_Store -.svn - -# Thumbnails -._* - -# Files that might appear on external disk -.Spotlight-V100 -.Trashes - -###################### -# Directories -###################### -/bin/ -/deploy/ - -###################### -# Logs -###################### -*.log* - -###################### -# Others -###################### -*.class -*.*~ -*~ -.merge_file* - -###################### -# Gradle Wrapper -###################### -!gradle/wrapper/gradle-wrapper.jar - -###################### -# Maven Wrapper -###################### -!.mvn/wrapper/maven-wrapper.jar - -###################### -# ESLint -###################### -.eslintcache diff --git a/jhipster-5/bookstore-monolith/.huskyrc b/jhipster-5/bookstore-monolith/.huskyrc deleted file mode 100644 index 9e18d87674..0000000000 --- a/jhipster-5/bookstore-monolith/.huskyrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "hooks": { - "pre-commit": "lint-staged" - } -} diff --git a/jhipster-5/bookstore-monolith/.jhipster/Book.json b/jhipster-5/bookstore-monolith/.jhipster/Book.json deleted file mode 100644 index 4c5bd1fa52..0000000000 --- a/jhipster-5/bookstore-monolith/.jhipster/Book.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "fluentMethods": true, - "clientRootFolder": "", - "relationships": [], - "fields": [ - { - "fieldName": "title", - "fieldType": "String", - "fieldValidateRules": [ - "required" - ] - }, - { - "fieldName": "author", - "fieldType": "String", - "fieldValidateRules": [ - "required" - ] - }, - { - "fieldName": "published", - "fieldType": "LocalDate", - "fieldValidateRules": [ - "required" - ] - }, - { - "fieldName": "quantity", - "fieldType": "Integer", - "fieldValidateRules": [ - "required", - "min" - ], - "fieldValidateRulesMin": 0 - }, - { - "fieldName": "price", - "fieldType": "Double", - "fieldValidateRules": [ - "required", - "min" - ], - "fieldValidateRulesMin": 0 - } - ], - "changelogDate": "20190319124041", - "dto": "mapstruct", - "searchEngine": false, - "service": "serviceImpl", - "entityTableName": "book", - "databaseType": "sql", - "jpaMetamodelFiltering": false, - "pagination": "no" -} diff --git a/jhipster-5/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java b/jhipster-5/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index 8fe1fab5a2..0000000000 --- a/jhipster-5/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = - "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: : " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar b/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 01e6799737..0000000000 Binary files a/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.properties b/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index cd0d451ccd..0000000000 --- a/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip diff --git a/jhipster-5/bookstore-monolith/.prettierignore b/jhipster-5/bookstore-monolith/.prettierignore deleted file mode 100644 index 151fcf7916..0000000000 --- a/jhipster-5/bookstore-monolith/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -target -package-lock.json diff --git a/jhipster-5/bookstore-monolith/.prettierrc b/jhipster-5/bookstore-monolith/.prettierrc deleted file mode 100644 index 6fd4aa1267..0000000000 --- a/jhipster-5/bookstore-monolith/.prettierrc +++ /dev/null @@ -1,12 +0,0 @@ -# Prettier configuration - -printWidth: 140 -singleQuote: true -tabWidth: 4 -useTabs: false - -# js and ts rules: -arrowParens: avoid - -# jsx and tsx rules: -jsxBracketSameLine: false diff --git a/jhipster-5/bookstore-monolith/.yo-rc.json b/jhipster-5/bookstore-monolith/.yo-rc.json deleted file mode 100644 index d852aeeddc..0000000000 --- a/jhipster-5/bookstore-monolith/.yo-rc.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "generator-jhipster": { - "promptValues": { - "packageName": "com.baeldung.jhipster5" - }, - "jhipsterVersion": "5.8.2", - "applicationType": "monolith", - "baseName": "Bookstore", - "packageName": "com.baeldung.jhipster5", - "packageFolder": "com/baeldung/jhipster5", - "serverPort": "8080", - "authenticationType": "jwt", - "cacheProvider": "no", - "websocket": false, - "databaseType": "sql", - "devDatabaseType": "h2Memory", - "prodDatabaseType": "mysql", - "searchEngine": false, - "messageBroker": false, - "serviceDiscoveryType": false, - "buildTool": "maven", - "enableSwaggerCodegen": false, - "jwtSecretKey": "NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI=", - "clientFramework": "angularX", - "useSass": true, - "clientPackageManager": "npm", - "testFrameworks": [], - "jhiPrefix": "jhi", - "entitySuffix": "", - "dtoSuffix": "DTO", - "otherModules": [], - "enableTranslation": false - } -} diff --git a/jhipster-5/bookstore-monolith/README.md b/jhipster-5/bookstore-monolith/README.md deleted file mode 100644 index e4e69b83ac..0000000000 --- a/jhipster-5/bookstore-monolith/README.md +++ /dev/null @@ -1,5 +0,0 @@ -## Relevant articles: - -- [Creating New APIs and Views in JHipster](https://www.baeldung.com/jhipster-new-apis-and-views) -- [JHipster Authentication with an External Service](https://www.baeldung.com/jhipster-authentication-external-service) - diff --git a/jhipster-5/bookstore-monolith/angular.json b/jhipster-5/bookstore-monolith/angular.json deleted file mode 100644 index 61791db9fb..0000000000 --- a/jhipster-5/bookstore-monolith/angular.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "bookstore": { - "root": "", - "sourceRoot": "src/main/webapp", - "projectType": "application", - "architect": {} - } - }, - "defaultProject": "bookstore", - "cli": { - "packageManager": "npm" - }, - "schematics": { - "@schematics/angular:component": { - "inlineStyle": true, - "inlineTemplate": false, - "spec": false, - "prefix": "jhi", - "styleExt": "scss" - }, - "@schematics/angular:directive": { - "spec": false, - "prefix": "jhi" - }, - "@schematics/angular:guard": { - "spec": false - }, - "@schematics/angular:pipe": { - "spec": false - }, - "@schematics/angular:service": { - "spec": false - } - } -} diff --git a/jhipster-5/bookstore-monolith/mvnw b/jhipster-5/bookstore-monolith/mvnw deleted file mode 100755 index 5551fde8e7..0000000000 --- a/jhipster-5/bookstore-monolith/mvnw +++ /dev/null @@ -1,286 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - wget "$jarUrl" -O "$wrapperJarPath" - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - curl -o "$wrapperJarPath" "$jarUrl" - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/jhipster-5/bookstore-monolith/mvnw.cmd b/jhipster-5/bookstore-monolith/mvnw.cmd deleted file mode 100644 index e5cfb0ae9e..0000000000 --- a/jhipster-5/bookstore-monolith/mvnw.cmd +++ /dev/null @@ -1,161 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" -FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - echo Found %WRAPPER_JAR% -) else ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" - echo Finished downloading %WRAPPER_JAR% -) -@REM End of extension - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/jhipster-5/bookstore-monolith/package.json b/jhipster-5/bookstore-monolith/package.json deleted file mode 100644 index 46b920edb3..0000000000 --- a/jhipster-5/bookstore-monolith/package.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "name": "bookstore", - "version": "0.0.0", - "description": "Description for Bookstore", - "private": true, - "license": "UNLICENSED", - "cacheDirectories": [ - "node_modules" - ], - "dependencies": { - "@angular/common": "7.2.4", - "@angular/compiler": "7.2.4", - "@angular/core": "7.2.4", - "@angular/forms": "7.2.4", - "@angular/platform-browser": "7.2.4", - "@angular/platform-browser-dynamic": "7.2.4", - "@angular/router": "7.2.4", - "@fortawesome/angular-fontawesome": "0.3.0", - "@fortawesome/fontawesome-svg-core": "1.2.14", - "@fortawesome/free-solid-svg-icons": "5.7.1", - "@ng-bootstrap/ng-bootstrap": "4.0.2", - "@ngx-translate/core": "11.0.1", - "@ngx-translate/http-loader": "4.0.0", - "bootstrap": "4.2.1", - "core-js": "2.6.4", - "moment": "2.24.0", - "ng-jhipster": "0.9.1", - "ngx-cookie": "2.0.1", - "ngx-infinite-scroll": "7.0.1", - "ngx-webstorage": "2.0.1", - "rxjs": "6.4.0", - "swagger-ui": "2.2.10", - "tslib": "1.9.3", - "zone.js": "0.8.29" - }, - "devDependencies": { - "@angular/cli": "7.3.1", - "@angular/compiler-cli": "7.2.4", - "@ngtools/webpack": "7.3.1", - "@types/jest": "24.0.0", - "@types/node": "10.12.24", - "angular-router-loader": "0.8.5", - "angular2-template-loader": "0.6.2", - "autoprefixer": "9.4.7", - "browser-sync": "2.26.3", - "browser-sync-webpack-plugin": "2.2.2", - "cache-loader": "2.0.1", - "codelyzer": "4.5.0", - "copy-webpack-plugin": "4.6.0", - "css-loader": "2.1.0", - "file-loader": "3.0.1", - "fork-ts-checker-webpack-plugin": "0.5.2", - "friendly-errors-webpack-plugin": "1.7.0", - "generator-jhipster": "5.8.2", - "html-loader": "0.5.5", - "html-webpack-plugin": "3.2.0", - "husky": "1.3.1", - "jest": "24.1.0", - "jest-junit": "6.2.1", - "jest-preset-angular": "6.0.2", - "jest-sonar-reporter": "2.0.0", - "lint-staged": "8.1.3", - "mini-css-extract-plugin": "0.5.0", - "moment-locales-webpack-plugin": "1.0.7", - "optimize-css-assets-webpack-plugin": "5.0.1", - "prettier": "1.16.4", - "reflect-metadata": "0.1.13", - "rimraf": "2.6.3", - "simple-progress-webpack-plugin": "1.1.2", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.2.2", - "thread-loader": "2.1.2", - "to-string-loader": "1.1.5", - "ts-loader": "5.3.3", - "tslint": "5.12.1", - "tslint-config-prettier": "1.18.0", - "tslint-loader": "3.6.0", - "typescript": "3.2.4", - "sass": "1.17.0", - "sass-loader": "7.1.0", - "postcss-loader": "3.0.0", - "xml2js": "0.4.19", - "webpack": "4.29.3", - "webpack-cli": "3.2.3", - "webpack-dev-server": "3.1.14", - "webpack-merge": "4.2.1", - "webpack-notifier": "1.7.0", - "webpack-visualizer-plugin": "0.1.11", - "workbox-webpack-plugin": "3.6.3", - "write-file-webpack-plugin": "4.5.0" - }, - "engines": { - "node": ">=8.9.0" - }, - "lint-staged": { - "{,src/**/}*.{md,json,ts,css,scss}": [ - "prettier --write", - "git add" - ] - }, - "scripts": { - "prettier:format": "prettier --write \"{,src/**/}*.{md,json,ts,css,scss}\"", - "lint": "tslint --project tsconfig.json -e 'node_modules/**'", - "lint:fix": "npm run lint -- --fix", - "ngc": "ngc -p tsconfig-aot.json", - "cleanup": "rimraf target/{aot,www}", - "clean-www": "rimraf target//www/app/{src,target/}", - "start": "npm run webpack:dev", - "start-tls": "npm run webpack:dev -- --env.tls", - "serve": "npm run start", - "build": "npm run webpack:prod", - "test": "npm run lint && jest --coverage --logHeapUsage -w=2 --config src/test/javascript/jest.conf.js", - "test:watch": "npm run test -- --watch", - "webpack:dev": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --hot --port=9060 --watch-content-base --env.stats=minimal", - "webpack:dev-verbose": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --hot --port=9060 --watch-content-base --profile --progress --env.stats=normal", - "webpack:build:main": "npm run webpack -- --config webpack/webpack.dev.js --env.stats=minimal", - "webpack:build": "npm run cleanup && npm run webpack:build:main", - "webpack:prod:main": "npm run webpack -- --config webpack/webpack.prod.js --profile", - "webpack:prod": "npm run cleanup && npm run webpack:prod:main && npm run clean-www", - "webpack:test": "npm run test", - "webpack-dev-server": "node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js", - "webpack": "node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js" - }, - "jestSonar": { - "reportPath": "target/test-results/jest", - "reportFile": "TESTS-results-sonar.xml" - } -} diff --git a/jhipster-5/bookstore-monolith/pom.xml b/jhipster-5/bookstore-monolith/pom.xml deleted file mode 100644 index ccaa802a39..0000000000 --- a/jhipster-5/bookstore-monolith/pom.xml +++ /dev/null @@ -1,1233 +0,0 @@ - - - 4.0.0 - - com.baeldung.jhipster5 - bookstore-monolith - 0.0.1-SNAPSHOT - war - bookstore-monolith - - - jhipster-5 - com.baeldung.jhipster - 1.0.0-SNAPSHOT - - - - - - - - - - - - - - - - io.github.jhipster - jhipster-dependencies - ${jhipster-dependencies.version} - pom - import - - - - - - - - io.github.jhipster - jhipster-framework - - - - com.fasterxml.jackson.datatype - jackson-datatype-hibernate5 - - - com.fasterxml.jackson.datatype - jackson-datatype-hppc - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - com.fasterxml.jackson.module - jackson-module-afterburner - - - com.h2database - h2 - test - - - com.jayway.jsonpath - json-path - test - - - - io.springfox - springfox-swagger2 - - - io.springfox - springfox-bean-validators - - - com.mattbertolini - liquibase-slf4j - - - com.zaxxer - HikariCP - - - commons-io - commons-io - - - org.apache.commons - commons-lang3 - - - org.assertj - assertj-core - test - - - org.hibernate - hibernate-jpamodelgen - provided - - - org.hibernate - hibernate-envers - - - org.hibernate.validator - hibernate-validator - - - org.liquibase - liquibase-core - - - net.logstash.logback - logstash-logback-encoder - - - org.mapstruct - mapstruct-jdk8 - - - org.mapstruct - mapstruct-processor - provided - - - org.springframework.boot - spring-boot-configuration-processor - provided - - - org.springframework.boot - spring-boot-loader-tools - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-aop - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-logging - - - org.springframework.boot - spring-boot-starter-mail - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-test - test - - - org.springframework.security - spring-security-test - test - - - org.zalando - problem-spring-web - - - io.jsonwebtoken - jjwt-api - - - io.jsonwebtoken - jjwt-impl - runtime - - - io.jsonwebtoken - jjwt-jackson - runtime - - - - org.springframework.boot - spring-boot-starter-cloud-connectors - - - - org.springframework.security - spring-security-data - - - io.micrometer - micrometer-registry-prometheus - - - io.dropwizard.metrics - metrics-core - - - net.bytebuddy - byte-buddy - ${byte-buddy.version} - test - - - - - - spring-boot:run - - - org.codehaus.mojo - properties-maven-plugin - 1.0.0 - - - - set-system-properties - - - - - org.slf4j.simpleLogger.log.com.github.eirslett - error - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - - org.mapstruct - mapstruct-processor - ${mapstruct.version} - - - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - - - - - - - org.apache.maven.plugins - maven-eclipse-plugin - - - org.apache.maven.plugins - maven-enforcer-plugin - - - org.apache.maven.plugins - maven-idea-plugin - - - org.apache.maven.plugins - maven-resources-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - - org.jacoco - jacoco-maven-plugin - - - org.sonarsource.scanner.maven - sonar-maven-plugin - - - org.liquibase - liquibase-maven-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - ${start-class} - true - true - - - - - com.google.cloud.tools - jib-maven-plugin - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - - com.github.eirslett - frontend-maven-plugin - ${frontend-maven-plugin.version} - - - pl.project13.maven - git-commit-id-plugin - ${git-commit-id-plugin.version} - - - - revision - - - - - false - true - - ^git.commit.id.abbrev$ - ^git.commit.id.describe$ - ^git.branch$ - - - - - org.jacoco - jacoco-maven-plugin - ${jacoco-maven-plugin.version} - - - pre-unit-tests - - prepare-agent - - - - ${project.testresult.directory}/coverage/jacoco/jacoco.exec - - - - - post-unit-test - test - - report - - - ${project.testresult.directory}/coverage/jacoco/jacoco.exec - ${project.testresult.directory}/coverage/jacoco - - - - - - com.google.cloud.tools - jib-maven-plugin - ${jib-maven-plugin.version} - - - openjdk:8-jre-alpine - - - bookstore:latest - - - - sh - - chmod +x /entrypoint.sh && sync && /entrypoint.sh - - - 8080 - - - ALWAYS - 0 - - true - - - - - org.liquibase - liquibase-maven-plugin - ${liquibase.version} - - ${project.basedir}/src/main/resources/config/liquibase/master.xml - ${project.basedir}/src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml - - - - Bookstore - - hibernate:spring:com.baeldung.jhipster5.domain?dialect=&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy - true - debug - - - - org.javassist - javassist - ${javassist.version} - - - org.liquibase.ext - liquibase-hibernate5 - ${liquibase-hibernate5.version} - - - org.springframework.boot - spring-boot-starter-data-jpa - ${spring-boot.version} - - - javax.validation - validation-api - ${validation-api.version} - - - - - maven-clean-plugin - ${maven-clean-plugin.version} - - - org.apache.maven.plugins - maven-eclipse-plugin - ${maven-eclipse-plugin.version} - - true - true - - - - org.apache.maven.plugins - maven-enforcer-plugin - ${maven-enforcer-plugin.version} - - - enforce-versions - - enforce - - - - - - - You are running an older version of Maven. JHipster requires at least Maven ${maven.version} - [${maven.version},) - - - - You are running an incompatible version of Java. JHipster requires JDK ${java.version} - [1.8,1.9) - - - - - - org.apache.maven.plugins - maven-idea-plugin - ${maven-idea-plugin.version} - - node_modules - - - - org.apache.maven.plugins - maven-resources-plugin - ${maven-resources-plugin.version} - - - default-resources - validate - - copy-resources - - - ${project.build.directory}/classes - false - - # - - - - src/main/resources/ - true - - config/*.yml - - - - src/main/resources/ - false - - config/*.yml - - - - - - - jib-www-resources - verify - - copy-resources - - - ${project.build.directory}/classes/static/ - - - ${project.build.directory}/www - false - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - alphabetical - - - false - ${sonar.junit.reportsPath} - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - - net.alchim31.maven - scala-maven-plugin - ${scala-maven-plugin.version} - - - compile - compile - - add-source - compile - - - - test-compile - test-compile - - add-source - testCompile - - - - - incremental - true - ${scala.version} - - - - org.sonarsource.scanner.maven - sonar-maven-plugin - ${sonar-maven-plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot.version} - - - - - - - no-liquibase - - ,no-liquibase - - - - swagger - - ,swagger - - - - tls - - ,tls - - - - webpack - - - ${basedir}/target/www/app/main.bundle.js - - - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-devtools - true - - - com.h2database - h2 - - - - - - com.github.eirslett - frontend-maven-plugin - - - install node and npm - - install-node-and-npm - - - ${node.version} - ${npm.version} - - - - npm install - - npm - - - - webpack build dev - - npm - - generate-resources - - run webpack:build - false - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - target/www/ - - - src/main/webapp - - WEB-INF/** - - - - - - - - - - dev${profile.no-liquibase} - - - - dev - - true - - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-devtools - true - - - com.h2database - h2 - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - target/www/ - - - src/main/webapp - - WEB-INF/** - - - - - - - - - - dev${profile.tls}${profile.no-liquibase} - - - - prod - - - org.springframework.boot - spring-boot-starter-undertow - - - - - - maven-clean-plugin - - - - target/www/ - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - target/www/ - - - src/main/webapp - - WEB-INF/** - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - ${start-class} - true - - - - - build-info - - - - - - com.github.eirslett - frontend-maven-plugin - - - install node and npm - - install-node-and-npm - - - ${node.version} - ${npm.version} - - - - npm install - - npm - - - install - - - - webpack build test - - npm - - test - - run webpack:test - false - - - - webpack build prod - - npm - - generate-resources - - run webpack:prod - false - - - - - - pl.project13.maven - git-commit-id-plugin - - - - - - prod${profile.swagger}${profile.no-liquibase} - - - - - cc - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-devtools - true - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - src/main/webapp/ - - - - org.springframework.boot - spring-boot-maven-plugin - - ${start-class} - true - true - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - default-compile - none - - - default-testCompile - none - - - - - net.alchim31.maven - scala-maven-plugin - - - - - - dev,swagger - - - - - IDE - - - org.mapstruct - mapstruct-processor - - - org.hibernate - hibernate-jpamodelgen - - - - - - eclipse - - - m2e.version - - - - - - - - org.eclipse.m2e - lifecycle-mapping - ${lifecycle-mapping.version} - - - - - - org.jacoco - - jacoco-maven-plugin - - - ${jacoco-maven-plugin.version} - - - prepare-agent - - - - - - - - - com.github.eirslett - frontend-maven-plugin - ${frontend-maven-plugin.version} - - install-node-and-npm - npm - - - - - - - - - - - - - - - - - default-first - - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - default-second - - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - integration-lite-first - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - integration-lite-second - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - - - - 3.0.0 - 1.8 - 2.12.6 - v10.15.0 - 6.4.1 - ${project.build.directory}/test-results - yyyyMMddHHmmss - ${java.version} - ${java.version} - -Djava.security.egd=file:/dev/./urandom -Xmx256m - jdt_apt - false - - - - - - - 2.1.1 - - 2.7.8 - - 5.2.17.Final - - 3.22.0-GA - - 3.5.5 - 3.6 - 2.0.1.Final - 1.2.0.Final - - - 3.1.0 - 3.8.0 - 2.10 - 3.0.0-M2 - 2.2.1 - 3.1.0 - 2.22.2 - 3.2.2 - 0.9.11 - 1.6 - 0.8.2 - 1.0.0 - 3.4.2 - 3.5.0.1254 - 2.2.5 - - - http://localhost:9001 - src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, target/www/**/*.* - S3437,S4502,S4684,UndocumentedApi,BoldAndItalicTagsCheck - - src/main/webapp/app/**/*.* - Web:BoldAndItalicTagsCheck - - src/main/java/**/* - squid:S3437 - - src/main/java/**/* - squid:UndocumentedApi - - src/main/java/**/* - squid:S4502 - - src/main/java/**/* - squid:S4684 - ${project.testresult.directory}/coverage/jacoco/jacoco.exec - jacoco - ${project.testresult.directory}/lcov.info - ${project.basedir}/src/main/ - ${project.testresult.directory} - ${project.basedir}/src/test/ - - - - diff --git a/jhipster-5/bookstore-monolith/postcss.config.js b/jhipster-5/bookstore-monolith/postcss.config.js deleted file mode 100644 index a26de7e9f1..0000000000 --- a/jhipster-5/bookstore-monolith/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: [ - require('autoprefixer') - ] -} diff --git a/jhipster-5/bookstore-monolith/proxy.conf.json b/jhipster-5/bookstore-monolith/proxy.conf.json deleted file mode 100644 index 8b41fdf7fa..0000000000 --- a/jhipster-5/bookstore-monolith/proxy.conf.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "*": { - "target": "http://localhost:8080", - "secure": false, - "loglevel": "debug" - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/docker/.dockerignore b/jhipster-5/bookstore-monolith/src/main/docker/.dockerignore deleted file mode 100644 index b03bdc71ee..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/.dockerignore +++ /dev/null @@ -1,14 +0,0 @@ -# https://docs.docker.com/engine/reference/builder/#dockerignore-file -classes/ -generated-sources/ -generated-test-sources/ -h2db/ -maven-archiver/ -maven-status/ -reports/ -surefire-reports/ -test-classes/ -test-results/ -www/ -!*.jar -!*.war diff --git a/jhipster-5/bookstore-monolith/src/main/docker/Dockerfile b/jhipster-5/bookstore-monolith/src/main/docker/Dockerfile deleted file mode 100644 index 43fadcb6f8..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM openjdk:8-jre-alpine - -ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \ - JHIPSTER_SLEEP=0 \ - JAVA_OPTS="" - -# Add a jhipster user to run our application so that it doesn't need to run as root -RUN adduser -D -s /bin/sh jhipster -WORKDIR /home/jhipster - -ADD entrypoint.sh entrypoint.sh -RUN chmod 755 entrypoint.sh && chown jhipster:jhipster entrypoint.sh -USER jhipster - -ENTRYPOINT ["./entrypoint.sh"] - -EXPOSE 8080 - -ADD *.war app.war - diff --git a/jhipster-5/bookstore-monolith/src/main/docker/app.yml b/jhipster-5/bookstore-monolith/src/main/docker/app.yml deleted file mode 100644 index f60f0f5038..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/app.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '2' -services: - bookstore-app: - image: bookstore - environment: - - _JAVA_OPTIONS=-Xmx512m -Xms256m - - SPRING_PROFILES_ACTIVE=prod,swagger - - SPRING_DATASOURCE_URL=jdbc:mysql://bookstore-mysql:3306/bookstore?useUnicode=true&characterEncoding=utf8&useSSL=false - - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application - ports: - - 8080:8080 - bookstore-mysql: - extends: - file: mysql.yml - service: bookstore-mysql diff --git a/jhipster-5/bookstore-monolith/src/main/docker/entrypoint.sh b/jhipster-5/bookstore-monolith/src/main/docker/entrypoint.sh deleted file mode 100644 index ccffafb5a4..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP} -exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/app.war" "$@" diff --git a/jhipster-5/bookstore-monolith/src/main/docker/mysql.yml b/jhipster-5/bookstore-monolith/src/main/docker/mysql.yml deleted file mode 100644 index 13faba0457..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/mysql.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '2' -services: - bookstore-mysql: - image: mysql:5.7.20 - # volumes: - # - ~/volumes/jhipster/Bookstore/mysql/:/var/lib/mysql/ - environment: - - MYSQL_USER=root - - MYSQL_ALLOW_EMPTY_PASSWORD=yes - - MYSQL_DATABASE=bookstore - ports: - - 3306:3306 - command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8mb4 --explicit_defaults_for_timestamp diff --git a/jhipster-5/bookstore-monolith/src/main/docker/sonar.yml b/jhipster-5/bookstore-monolith/src/main/docker/sonar.yml deleted file mode 100644 index 756175b7d0..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/sonar.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: '2' -services: - bookstore-sonar: - image: sonarqube:7.1 - ports: - - 9001:9000 - - 9092:9092 diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/ApplicationWebXml.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/ApplicationWebXml.java deleted file mode 100644 index ca65727e77..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/ApplicationWebXml.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5; - -import com.baeldung.jhipster5.config.DefaultProfileUtil; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * This is a helper Java class that provides an alternative to creating a web.xml. - * This will be invoked only when the application is deployed to a Servlet container like Tomcat, JBoss etc. - */ -public class ApplicationWebXml extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - /** - * set a default to use when no profile is configured. - */ - DefaultProfileUtil.addDefaultProfile(application.application()); - return application.sources(BookstoreApp.class); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/BookstoreApp.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/BookstoreApp.java deleted file mode 100644 index e7ca925228..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/BookstoreApp.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.baeldung.jhipster5; - -import com.baeldung.jhipster5.config.ApplicationProperties; -import com.baeldung.jhipster5.config.DefaultProfileUtil; - -import io.github.jhipster.config.JHipsterConstants; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.core.env.Environment; - -import javax.annotation.PostConstruct; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Arrays; -import java.util.Collection; - -@SpringBootApplication -@EnableConfigurationProperties({LiquibaseProperties.class, ApplicationProperties.class}) -public class BookstoreApp { - - private static final Logger log = LoggerFactory.getLogger(BookstoreApp.class); - - private final Environment env; - - public BookstoreApp(Environment env) { - this.env = env; - } - - /** - * Initializes Bookstore. - *

- * Spring profiles can be configured with a program argument --spring.profiles.active=your-active-profile - *

- * You can find more information on how profiles work with JHipster on https://www.jhipster.tech/profiles/. - */ - @PostConstruct - public void initApplication() { - Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); - if (activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_PRODUCTION)) { - log.error("You have misconfigured your application! It should not run " + - "with both the 'dev' and 'prod' profiles at the same time."); - } - if (activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_CLOUD)) { - log.error("You have misconfigured your application! It should not " + - "run with both the 'dev' and 'cloud' profiles at the same time."); - } - } - - /** - * Main method, used to run the application. - * - * @param args the command line arguments - */ - public static void main(String[] args) { - SpringApplication app = new SpringApplication(BookstoreApp.class); - DefaultProfileUtil.addDefaultProfile(app); - Environment env = app.run(args).getEnvironment(); - logApplicationStartup(env); - } - - private static void logApplicationStartup(Environment env) { - String protocol = "http"; - if (env.getProperty("server.ssl.key-store") != null) { - protocol = "https"; - } - String serverPort = env.getProperty("server.port"); - String contextPath = env.getProperty("server.servlet.context-path"); - if (StringUtils.isBlank(contextPath)) { - contextPath = "/"; - } - String hostAddress = "localhost"; - try { - hostAddress = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - log.warn("The host name could not be determined, using `localhost` as fallback"); - } - log.info("\n----------------------------------------------------------\n\t" + - "Application '{}' is running! Access URLs:\n\t" + - "Local: \t\t{}://localhost:{}{}\n\t" + - "External: \t{}://{}:{}{}\n\t" + - "Profile(s): \t{}\n----------------------------------------------------------", - env.getProperty("spring.application.name"), - protocol, - serverPort, - contextPath, - protocol, - hostAddress, - serverPort, - contextPath, - env.getActiveProfiles()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/aop/logging/LoggingAspect.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/aop/logging/LoggingAspect.java deleted file mode 100644 index 0379637061..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/aop/logging/LoggingAspect.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.baeldung.jhipster5.aop.logging; - -import io.github.jhipster.config.JHipsterConstants; - -import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.AfterThrowing; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.env.Environment; - -import java.util.Arrays; - -/** - * Aspect for logging execution of service and repository Spring components. - * - * By default, it only runs with the "dev" profile. - */ -@Aspect -public class LoggingAspect { - - private final Logger log = LoggerFactory.getLogger(this.getClass()); - - private final Environment env; - - public LoggingAspect(Environment env) { - this.env = env; - } - - /** - * Pointcut that matches all repositories, services and Web REST endpoints. - */ - @Pointcut("within(@org.springframework.stereotype.Repository *)" + - " || within(@org.springframework.stereotype.Service *)" + - " || within(@org.springframework.web.bind.annotation.RestController *)") - public void springBeanPointcut() { - // Method is empty as this is just a Pointcut, the implementations are in the advices. - } - - /** - * Pointcut that matches all Spring beans in the application's main packages. - */ - @Pointcut("within(com.baeldung.jhipster5.repository..*)"+ - " || within(com.baeldung.jhipster5.service..*)"+ - " || within(com.baeldung.jhipster5.web.rest..*)") - public void applicationPackagePointcut() { - // Method is empty as this is just a Pointcut, the implementations are in the advices. - } - - /** - * Advice that logs methods throwing exceptions. - * - * @param joinPoint join point for advice - * @param e exception - */ - @AfterThrowing(pointcut = "applicationPackagePointcut() && springBeanPointcut()", throwing = "e") - public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT)) { - log.error("Exception in {}.{}() with cause = \'{}\' and exception = \'{}\'", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), e.getCause() != null? e.getCause() : "NULL", e.getMessage(), e); - - } else { - log.error("Exception in {}.{}() with cause = {}", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), e.getCause() != null? e.getCause() : "NULL"); - } - } - - /** - * Advice that logs when a method is entered and exited. - * - * @param joinPoint join point for advice - * @return result - * @throws Throwable throws IllegalArgumentException - */ - @Around("applicationPackagePointcut() && springBeanPointcut()") - public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { - if (log.isDebugEnabled()) { - log.debug("Enter: {}.{}() with argument[s] = {}", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs())); - } - try { - Object result = joinPoint.proceed(); - if (log.isDebugEnabled()) { - log.debug("Exit: {}.{}() with result = {}", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), result); - } - return result; - } catch (IllegalArgumentException e) { - log.error("Illegal argument: {} in {}.{}()", Arrays.toString(joinPoint.getArgs()), - joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName()); - - throw e; - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/ApplicationProperties.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/ApplicationProperties.java deleted file mode 100644 index 4ca3e9bd85..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/ApplicationProperties.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.jhipster5.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * Properties specific to Bookstore. - *

- * Properties are configured in the application.yml file. - * See {@link io.github.jhipster.config.JHipsterProperties} for a good example. - */ -@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false) -public class ApplicationProperties { - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/AsyncConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/AsyncConfiguration.java deleted file mode 100644 index 414fe152bf..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/AsyncConfiguration.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.async.ExceptionHandlingAsyncTaskExecutor; -import io.github.jhipster.config.JHipsterProperties; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; -import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.*; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.scheduling.annotation.SchedulingConfigurer; -import org.springframework.scheduling.config.ScheduledTaskRegistrar; - -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; - -@Configuration -@EnableAsync -@EnableScheduling -public class AsyncConfiguration implements AsyncConfigurer, SchedulingConfigurer { - - private final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class); - - private final JHipsterProperties jHipsterProperties; - - public AsyncConfiguration(JHipsterProperties jHipsterProperties) { - this.jHipsterProperties = jHipsterProperties; - } - - @Override - @Bean(name = "taskExecutor") - public Executor getAsyncExecutor() { - log.debug("Creating Async Task Executor"); - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setCorePoolSize(jHipsterProperties.getAsync().getCorePoolSize()); - executor.setMaxPoolSize(jHipsterProperties.getAsync().getMaxPoolSize()); - executor.setQueueCapacity(jHipsterProperties.getAsync().getQueueCapacity()); - executor.setThreadNamePrefix("bookstore-Executor-"); - return new ExceptionHandlingAsyncTaskExecutor(executor); - } - - @Override - public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { - return new SimpleAsyncUncaughtExceptionHandler(); - } - - @Override - public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { - taskRegistrar.setScheduler(scheduledTaskExecutor()); - } - - @Bean - public Executor scheduledTaskExecutor() { - return Executors.newScheduledThreadPool(jHipsterProperties.getAsync().getCorePoolSize()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/CloudDatabaseConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/CloudDatabaseConfiguration.java deleted file mode 100644 index 887a1bae89..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/CloudDatabaseConfiguration.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.config.java.AbstractCloudConfig; -import org.springframework.context.annotation.*; - -import javax.sql.DataSource; -import org.springframework.boot.context.properties.ConfigurationProperties; - - -@Configuration -@Profile(JHipsterConstants.SPRING_PROFILE_CLOUD) -public class CloudDatabaseConfiguration extends AbstractCloudConfig { - - private final Logger log = LoggerFactory.getLogger(CloudDatabaseConfiguration.class); - - private static final String CLOUD_CONFIGURATION_HIKARI_PREFIX = "spring.datasource.hikari"; - - @Bean - @ConfigurationProperties(CLOUD_CONFIGURATION_HIKARI_PREFIX) - public DataSource dataSource() { - log.info("Configuring JDBC datasource from a cloud provider"); - return connectionFactory().dataSource(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/Constants.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/Constants.java deleted file mode 100644 index dd8f717f98..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/Constants.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.jhipster5.config; - -/** - * Application constants. - */ -public final class Constants { - - // Regex for acceptable logins - public static final String LOGIN_REGEX = "^[_.@A-Za-z0-9-]*$"; - - public static final String SYSTEM_ACCOUNT = "system"; - public static final String ANONYMOUS_USER = "anonymoususer"; - public static final String DEFAULT_LANGUAGE = "en"; - - private Constants() { - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DatabaseConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DatabaseConfiguration.java deleted file mode 100644 index 007b1d6431..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DatabaseConfiguration.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.h2.H2ConfigurationHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -import org.springframework.core.env.Environment; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -import java.sql.SQLException; - -@Configuration -@EnableJpaRepositories("com.baeldung.jhipster5.repository") -@EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware") -@EnableTransactionManagement -public class DatabaseConfiguration { - - private final Logger log = LoggerFactory.getLogger(DatabaseConfiguration.class); - - private final Environment env; - - public DatabaseConfiguration(Environment env) { - this.env = env; - } - - /** - * Open the TCP port for the H2 database, so it is available remotely. - * - * @return the H2 database TCP server - * @throws SQLException if the server failed to start - */ - @Bean(initMethod = "start", destroyMethod = "stop") - @Profile(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) - public Object h2TCPServer() throws SQLException { - String port = getValidPortForH2(); - log.debug("H2 database is available on port {}", port); - return H2ConfigurationHelper.createServer(port); - } - - private String getValidPortForH2() { - int port = Integer.parseInt(env.getProperty("server.port")); - if (port < 10000) { - port = 10000 + port; - } else { - if (port < 63536) { - port = port + 2000; - } else { - port = port - 2000; - } - } - return String.valueOf(port); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DateTimeFormatConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DateTimeFormatConfiguration.java deleted file mode 100644 index 4415ce0b1e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DateTimeFormatConfiguration.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.jhipster5.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.format.FormatterRegistry; -import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * Configure the converters to use the ISO format for dates by default. - */ -@Configuration -public class DateTimeFormatConfiguration implements WebMvcConfigurer { - - @Override - public void addFormatters(FormatterRegistry registry) { - DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); - registrar.setUseIsoFormat(true); - registrar.registerFormatters(registry); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DefaultProfileUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DefaultProfileUtil.java deleted file mode 100644 index 2cfe16a1ae..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DefaultProfileUtil.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; - -import org.springframework.boot.SpringApplication; -import org.springframework.core.env.Environment; - -import java.util.*; - -/** - * Utility class to load a Spring profile to be used as default - * when there is no spring.profiles.active set in the environment or as command line argument. - * If the value is not available in application.yml then dev profile will be used as default. - */ -public final class DefaultProfileUtil { - - private static final String SPRING_PROFILE_DEFAULT = "spring.profiles.default"; - - private DefaultProfileUtil() { - } - - /** - * Set a default to use when no profile is configured. - * - * @param app the Spring application - */ - public static void addDefaultProfile(SpringApplication app) { - Map defProperties = new HashMap<>(); - /* - * The default profile to use when no other profiles are defined - * This cannot be set in the application.yml file. - * See https://github.com/spring-projects/spring-boot/issues/1219 - */ - defProperties.put(SPRING_PROFILE_DEFAULT, JHipsterConstants.SPRING_PROFILE_DEVELOPMENT); - app.setDefaultProperties(defProperties); - } - - /** - * Get the profiles that are applied else get default profiles. - * - * @param env spring environment - * @return profiles - */ - public static String[] getActiveProfiles(Environment env) { - String[] profiles = env.getActiveProfiles(); - if (profiles.length == 0) { - return env.getDefaultProfiles(); - } - return profiles; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/JacksonConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/JacksonConfiguration.java deleted file mode 100644 index 119cd5f0c6..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/JacksonConfiguration.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.jhipster5.config; - -import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.module.afterburner.AfterburnerModule; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.zalando.problem.ProblemModule; -import org.zalando.problem.violations.ConstraintViolationProblemModule; - -@Configuration -public class JacksonConfiguration { - - /** - * Support for Java date and time API. - * @return the corresponding Jackson module. - */ - @Bean - public JavaTimeModule javaTimeModule() { - return new JavaTimeModule(); - } - - @Bean - public Jdk8Module jdk8TimeModule() { - return new Jdk8Module(); - } - - - /* - * Support for Hibernate types in Jackson. - */ - @Bean - public Hibernate5Module hibernate5Module() { - return new Hibernate5Module(); - } - - /* - * Jackson Afterburner module to speed up serialization/deserialization. - */ - @Bean - public AfterburnerModule afterburnerModule() { - return new AfterburnerModule(); - } - - /* - * Module for serialization/deserialization of RFC7807 Problem. - */ - @Bean - ProblemModule problemModule() { - return new ProblemModule(); - } - - /* - * Module for serialization/deserialization of ConstraintViolationProblem. - */ - @Bean - ConstraintViolationProblemModule constraintViolationProblemModule() { - return new ConstraintViolationProblemModule(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LiquibaseConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LiquibaseConfiguration.java deleted file mode 100644 index 4b2a7b1e66..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LiquibaseConfiguration.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.jhipster5.config; - -import javax.sql.DataSource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; -import org.springframework.core.task.TaskExecutor; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.liquibase.AsyncSpringLiquibase; -import liquibase.integration.spring.SpringLiquibase; - -@Configuration -public class LiquibaseConfiguration { - - private final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class); - - private final Environment env; - - - public LiquibaseConfiguration(Environment env) { - this.env = env; - } - - @Bean - public SpringLiquibase liquibase(@Qualifier("taskExecutor") TaskExecutor taskExecutor, - DataSource dataSource, LiquibaseProperties liquibaseProperties) { - - // Use liquibase.integration.spring.SpringLiquibase if you don't want Liquibase to start asynchronously - SpringLiquibase liquibase = new AsyncSpringLiquibase(taskExecutor, env); - liquibase.setDataSource(dataSource); - liquibase.setChangeLog("classpath:config/liquibase/master.xml"); - liquibase.setContexts(liquibaseProperties.getContexts()); - liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema()); - liquibase.setDropFirst(liquibaseProperties.isDropFirst()); - liquibase.setChangeLogParameters(liquibaseProperties.getParameters()); - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_NO_LIQUIBASE)) { - liquibase.setShouldRun(false); - } else { - liquibase.setShouldRun(liquibaseProperties.isEnabled()); - log.debug("Configuring Liquibase"); - } - return liquibase; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LocaleConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LocaleConfiguration.java deleted file mode 100644 index 256c6b77b9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LocaleConfiguration.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.locale.AngularCookieLocaleResolver; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.config.annotation.*; -import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; - -@Configuration -public class LocaleConfiguration implements WebMvcConfigurer { - - @Bean(name = "localeResolver") - public LocaleResolver localeResolver() { - AngularCookieLocaleResolver cookieLocaleResolver = new AngularCookieLocaleResolver(); - cookieLocaleResolver.setCookieName("NG_TRANSLATE_LANG_KEY"); - return cookieLocaleResolver; - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); - localeChangeInterceptor.setParamName("language"); - registry.addInterceptor(localeChangeInterceptor); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingAspectConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingAspectConfiguration.java deleted file mode 100644 index 25d7ba3792..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingAspectConfiguration.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.jhipster5.config; - -import com.baeldung.jhipster5.aop.logging.LoggingAspect; - -import io.github.jhipster.config.JHipsterConstants; - -import org.springframework.context.annotation.*; -import org.springframework.core.env.Environment; - -@Configuration -@EnableAspectJAutoProxy -public class LoggingAspectConfiguration { - - @Bean - @Profile(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) - public LoggingAspect loggingAspect(Environment env) { - return new LoggingAspect(env); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingConfiguration.java deleted file mode 100644 index 9402a1bc36..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingConfiguration.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.baeldung.jhipster5.config; - -import java.net.InetSocketAddress; -import java.util.Iterator; - -import io.github.jhipster.config.JHipsterProperties; - -import ch.qos.logback.classic.AsyncAppender; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.boolex.OnMarkerEvaluator; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.spi.LoggerContextListener; -import ch.qos.logback.core.Appender; -import ch.qos.logback.core.filter.EvaluatorFilter; -import ch.qos.logback.core.spi.ContextAwareBase; -import ch.qos.logback.core.spi.FilterReply; -import net.logstash.logback.appender.LogstashTcpSocketAppender; -import net.logstash.logback.encoder.LogstashEncoder; -import net.logstash.logback.stacktrace.ShortenedThrowableConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class LoggingConfiguration { - - private static final String LOGSTASH_APPENDER_NAME = "LOGSTASH"; - - private static final String ASYNC_LOGSTASH_APPENDER_NAME = "ASYNC_LOGSTASH"; - - private final Logger log = LoggerFactory.getLogger(LoggingConfiguration.class); - - private LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - private final String appName; - - private final String serverPort; - - private final JHipsterProperties jHipsterProperties; - - public LoggingConfiguration(@Value("${spring.application.name}") String appName, @Value("${server.port}") String serverPort, - JHipsterProperties jHipsterProperties) { - this.appName = appName; - this.serverPort = serverPort; - this.jHipsterProperties = jHipsterProperties; - if (jHipsterProperties.getLogging().getLogstash().isEnabled()) { - addLogstashAppender(context); - addContextListener(context); - } - if (jHipsterProperties.getMetrics().getLogs().isEnabled()) { - setMetricsMarkerLogbackFilter(context); - } - } - - private void addContextListener(LoggerContext context) { - LogbackLoggerContextListener loggerContextListener = new LogbackLoggerContextListener(); - loggerContextListener.setContext(context); - context.addListener(loggerContextListener); - } - - private void addLogstashAppender(LoggerContext context) { - log.info("Initializing Logstash logging"); - - LogstashTcpSocketAppender logstashAppender = new LogstashTcpSocketAppender(); - logstashAppender.setName(LOGSTASH_APPENDER_NAME); - logstashAppender.setContext(context); - String customFields = "{\"app_name\":\"" + appName + "\",\"app_port\":\"" + serverPort + "\"}"; - - // More documentation is available at: https://github.com/logstash/logstash-logback-encoder - LogstashEncoder logstashEncoder = new LogstashEncoder(); - // Set the Logstash appender config from JHipster properties - logstashAppender.addDestinations(new InetSocketAddress(jHipsterProperties.getLogging().getLogstash().getHost(), jHipsterProperties.getLogging().getLogstash().getPort())); - - ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter(); - throwableConverter.setRootCauseFirst(true); - logstashEncoder.setThrowableConverter(throwableConverter); - logstashEncoder.setCustomFields(customFields); - - logstashAppender.setEncoder(logstashEncoder); - logstashAppender.start(); - - // Wrap the appender in an Async appender for performance - AsyncAppender asyncLogstashAppender = new AsyncAppender(); - asyncLogstashAppender.setContext(context); - asyncLogstashAppender.setName(ASYNC_LOGSTASH_APPENDER_NAME); - asyncLogstashAppender.setQueueSize(jHipsterProperties.getLogging().getLogstash().getQueueSize()); - asyncLogstashAppender.addAppender(logstashAppender); - asyncLogstashAppender.start(); - - context.getLogger("ROOT").addAppender(asyncLogstashAppender); - } - - // Configure a log filter to remove "metrics" logs from all appenders except the "LOGSTASH" appender - private void setMetricsMarkerLogbackFilter(LoggerContext context) { - log.info("Filtering metrics logs from all appenders except the {} appender", LOGSTASH_APPENDER_NAME); - OnMarkerEvaluator onMarkerMetricsEvaluator = new OnMarkerEvaluator(); - onMarkerMetricsEvaluator.setContext(context); - onMarkerMetricsEvaluator.addMarker("metrics"); - onMarkerMetricsEvaluator.start(); - EvaluatorFilter metricsFilter = new EvaluatorFilter<>(); - metricsFilter.setContext(context); - metricsFilter.setEvaluator(onMarkerMetricsEvaluator); - metricsFilter.setOnMatch(FilterReply.DENY); - metricsFilter.start(); - - for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) { - for (Iterator> it = logger.iteratorForAppenders(); it.hasNext();) { - Appender appender = it.next(); - if (!appender.getName().equals(ASYNC_LOGSTASH_APPENDER_NAME)) { - log.debug("Filter metrics logs from the {} appender", appender.getName()); - appender.setContext(context); - appender.addFilter(metricsFilter); - appender.start(); - } - } - } - } - - /** - * Logback configuration is achieved by configuration file and API. - * When configuration file change is detected, the configuration is reset. - * This listener ensures that the programmatic configuration is also re-applied after reset. - */ - class LogbackLoggerContextListener extends ContextAwareBase implements LoggerContextListener { - - @Override - public boolean isResetResistant() { - return true; - } - - @Override - public void onStart(LoggerContext context) { - addLogstashAppender(context); - } - - @Override - public void onReset(LoggerContext context) { - addLogstashAppender(context); - } - - @Override - public void onStop(LoggerContext context) { - // Nothing to do. - } - - @Override - public void onLevelChange(ch.qos.logback.classic.Logger logger, Level level) { - // Nothing to do. - } - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/SecurityConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/SecurityConfiguration.java deleted file mode 100644 index f07944271e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/SecurityConfiguration.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.baeldung.jhipster5.config; - -import com.baeldung.jhipster5.security.*; -import com.baeldung.jhipster5.security.jwt.*; - -import org.springframework.beans.factory.BeanInitializationException; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.http.HttpMethod; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.web.filter.CorsFilter; -import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport; - -import javax.annotation.PostConstruct; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) -@Import(SecurityProblemSupport.class) -public class SecurityConfiguration extends WebSecurityConfigurerAdapter { - - private final AuthenticationManagerBuilder authenticationManagerBuilder; - - private final UserDetailsService userDetailsService; - - private final TokenProvider tokenProvider; - - private final CorsFilter corsFilter; - - private final SecurityProblemSupport problemSupport; - - public SecurityConfiguration(AuthenticationManagerBuilder authenticationManagerBuilder, UserDetailsService userDetailsService, TokenProvider tokenProvider, CorsFilter corsFilter, SecurityProblemSupport problemSupport) { - this.authenticationManagerBuilder = authenticationManagerBuilder; - this.userDetailsService = userDetailsService; - this.tokenProvider = tokenProvider; - this.corsFilter = corsFilter; - this.problemSupport = problemSupport; - } - - @PostConstruct - public void init() { - try { - authenticationManagerBuilder - .userDetailsService(userDetailsService) - .passwordEncoder(passwordEncoder()); - } catch (Exception e) { - throw new BeanInitializationException("Security configuration failed", e); - } - } - - @Override - @Bean - public AuthenticationManager authenticationManagerBean() throws Exception { - return super.authenticationManagerBean(); - } - - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring() - .antMatchers(HttpMethod.OPTIONS, "/**") - .antMatchers("/app/**/*.{js,html}") - .antMatchers("/i18n/**") - .antMatchers("/content/**") - .antMatchers("/h2-console/**") - .antMatchers("/swagger-ui/index.html") - .antMatchers("/test/**"); - } - - @Override - public void configure(HttpSecurity http) throws Exception { - http - .csrf() - .disable() - .addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class) - .exceptionHandling() - .authenticationEntryPoint(problemSupport) - .accessDeniedHandler(problemSupport) - .and() - .headers() - .frameOptions() - .disable() - .and() - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and() - .authorizeRequests() - .antMatchers("/api/books/purchase/**").authenticated() - .antMatchers("/api/register").permitAll() - .antMatchers("/api/activate").permitAll() - .antMatchers("/api/authenticate").permitAll() - .antMatchers("/api/account/reset-password/init").permitAll() - .antMatchers("/api/account/reset-password/finish").permitAll() - .antMatchers("/api/**").authenticated() - .antMatchers("/management/health").permitAll() - .antMatchers("/management/info").permitAll() - .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) - .and() - .apply(securityConfigurerAdapter()); - - } - - private JWTConfigurer securityConfigurerAdapter() { - return new JWTConfigurer(tokenProvider); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/WebConfigurer.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/WebConfigurer.java deleted file mode 100644 index 26cfc92487..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/WebConfigurer.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.JHipsterProperties; -import io.github.jhipster.config.h2.H2ConfigurationHelper; -import io.github.jhipster.web.filter.CachingHttpHeadersFilter; -import io.undertow.UndertowOptions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; -import org.springframework.boot.web.server.*; -import org.springframework.boot.web.servlet.ServletContextInitializer; -import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; -import org.springframework.http.MediaType; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -import javax.servlet.*; -import java.io.File; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Paths; -import java.util.*; - -import static java.net.URLDecoder.decode; - -/** - * Configuration of web application with Servlet 3.0 APIs. - */ -@Configuration -public class WebConfigurer implements ServletContextInitializer, WebServerFactoryCustomizer { - - private final Logger log = LoggerFactory.getLogger(WebConfigurer.class); - - private final Environment env; - - private final JHipsterProperties jHipsterProperties; - - public WebConfigurer(Environment env, JHipsterProperties jHipsterProperties) { - - this.env = env; - this.jHipsterProperties = jHipsterProperties; - } - - @Override - public void onStartup(ServletContext servletContext) throws ServletException { - if (env.getActiveProfiles().length != 0) { - log.info("Web application configuration, using profiles: {}", (Object[]) env.getActiveProfiles()); - } - EnumSet disps = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC); - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION)) { - initCachingHttpHeadersFilter(servletContext, disps); - } - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT)) { - initH2Console(servletContext); - } - log.info("Web application fully configured"); - } - - /** - * Customize the Servlet engine: Mime types, the document root, the cache. - */ - @Override - public void customize(WebServerFactory server) { - setMimeMappings(server); - // When running in an IDE or with ./mvnw spring-boot:run, set location of the static web assets. - setLocationForStaticAssets(server); - - /* - * Enable HTTP/2 for Undertow - https://twitter.com/ankinson/status/829256167700492288 - * HTTP/2 requires HTTPS, so HTTP requests will fallback to HTTP/1.1. - * See the JHipsterProperties class and your application-*.yml configuration files - * for more information. - */ - if (jHipsterProperties.getHttp().getVersion().equals(JHipsterProperties.Http.Version.V_2_0) && - server instanceof UndertowServletWebServerFactory) { - - ((UndertowServletWebServerFactory) server) - .addBuilderCustomizers(builder -> - builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true)); - } - } - - private void setMimeMappings(WebServerFactory server) { - if (server instanceof ConfigurableServletWebServerFactory) { - MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT); - // IE issue, see https://github.com/jhipster/generator-jhipster/pull/711 - mappings.add("html", MediaType.TEXT_HTML_VALUE + ";charset=" + StandardCharsets.UTF_8.name().toLowerCase()); - // CloudFoundry issue, see https://github.com/cloudfoundry/gorouter/issues/64 - mappings.add("json", MediaType.TEXT_HTML_VALUE + ";charset=" + StandardCharsets.UTF_8.name().toLowerCase()); - ConfigurableServletWebServerFactory servletWebServer = (ConfigurableServletWebServerFactory) server; - servletWebServer.setMimeMappings(mappings); - } - } - - private void setLocationForStaticAssets(WebServerFactory server) { - if (server instanceof ConfigurableServletWebServerFactory) { - ConfigurableServletWebServerFactory servletWebServer = (ConfigurableServletWebServerFactory) server; - File root; - String prefixPath = resolvePathPrefix(); - root = new File(prefixPath + "target/www/"); - if (root.exists() && root.isDirectory()) { - servletWebServer.setDocumentRoot(root); - } - } - } - - /** - * Resolve path prefix to static resources. - */ - private String resolvePathPrefix() { - String fullExecutablePath; - try { - fullExecutablePath = decode(this.getClass().getResource("").getPath(), StandardCharsets.UTF_8.name()); - } catch (UnsupportedEncodingException e) { - /* try without decoding if this ever happens */ - fullExecutablePath = this.getClass().getResource("").getPath(); - } - String rootPath = Paths.get(".").toUri().normalize().getPath(); - String extractedPath = fullExecutablePath.replace(rootPath, ""); - int extractionEndIndex = extractedPath.indexOf("target/"); - if (extractionEndIndex <= 0) { - return ""; - } - return extractedPath.substring(0, extractionEndIndex); - } - - /** - * Initializes the caching HTTP Headers Filter. - */ - private void initCachingHttpHeadersFilter(ServletContext servletContext, - EnumSet disps) { - log.debug("Registering Caching HTTP Headers Filter"); - FilterRegistration.Dynamic cachingHttpHeadersFilter = - servletContext.addFilter("cachingHttpHeadersFilter", - new CachingHttpHeadersFilter(jHipsterProperties)); - - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/i18n/*"); - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/content/*"); - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/app/*"); - cachingHttpHeadersFilter.setAsyncSupported(true); - } - - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - CorsConfiguration config = jHipsterProperties.getCors(); - if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) { - log.debug("Registering CORS filter"); - source.registerCorsConfiguration("/api/**", config); - source.registerCorsConfiguration("/management/**", config); - source.registerCorsConfiguration("/v2/api-docs", config); - } - return new CorsFilter(source); - } - - /** - * Initializes H2 console. - */ - private void initH2Console(ServletContext servletContext) { - log.debug("Initialize H2 console"); - H2ConfigurationHelper.initH2Console(servletContext); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/AuditEventConverter.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/AuditEventConverter.java deleted file mode 100644 index 6dd87bb82d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/AuditEventConverter.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.jhipster5.config.audit; - -import com.baeldung.jhipster5.domain.PersistentAuditEvent; - -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Component; - -import java.util.*; - -@Component -public class AuditEventConverter { - - /** - * Convert a list of PersistentAuditEvent to a list of AuditEvent - * - * @param persistentAuditEvents the list to convert - * @return the converted list. - */ - public List convertToAuditEvent(Iterable persistentAuditEvents) { - if (persistentAuditEvents == null) { - return Collections.emptyList(); - } - List auditEvents = new ArrayList<>(); - for (PersistentAuditEvent persistentAuditEvent : persistentAuditEvents) { - auditEvents.add(convertToAuditEvent(persistentAuditEvent)); - } - return auditEvents; - } - - /** - * Convert a PersistentAuditEvent to an AuditEvent - * - * @param persistentAuditEvent the event to convert - * @return the converted list. - */ - public AuditEvent convertToAuditEvent(PersistentAuditEvent persistentAuditEvent) { - if (persistentAuditEvent == null) { - return null; - } - return new AuditEvent(persistentAuditEvent.getAuditEventDate(), persistentAuditEvent.getPrincipal(), - persistentAuditEvent.getAuditEventType(), convertDataToObjects(persistentAuditEvent.getData())); - } - - /** - * Internal conversion. This is needed to support the current SpringBoot actuator AuditEventRepository interface - * - * @param data the data to convert - * @return a map of String, Object - */ - public Map convertDataToObjects(Map data) { - Map results = new HashMap<>(); - - if (data != null) { - for (Map.Entry entry : data.entrySet()) { - results.put(entry.getKey(), entry.getValue()); - } - } - return results; - } - - /** - * Internal conversion. This method will allow to save additional data. - * By default, it will save the object as string - * - * @param data the data to convert - * @return a map of String, String - */ - public Map convertDataToStrings(Map data) { - Map results = new HashMap<>(); - - if (data != null) { - for (Map.Entry entry : data.entrySet()) { - // Extract the data that will be saved. - if (entry.getValue() instanceof WebAuthenticationDetails) { - WebAuthenticationDetails authenticationDetails = (WebAuthenticationDetails) entry.getValue(); - results.put("remoteAddress", authenticationDetails.getRemoteAddress()); - results.put("sessionId", authenticationDetails.getSessionId()); - } else { - results.put(entry.getKey(), Objects.toString(entry.getValue())); - } - } - } - return results; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/package-info.java deleted file mode 100644 index 49a2a73a61..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Audit specific code. - */ -package com.baeldung.jhipster5.config.audit; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/package-info.java deleted file mode 100644 index 868155ce9f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring Framework configuration files. - */ -package com.baeldung.jhipster5.config; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/AbstractAuditingEntity.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/AbstractAuditingEntity.java deleted file mode 100644 index 861674ccc9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/AbstractAuditingEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.hibernate.envers.Audited; -import org.springframework.data.annotation.CreatedBy; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedBy; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.io.Serializable; -import java.time.Instant; -import javax.persistence.Column; -import javax.persistence.EntityListeners; -import javax.persistence.MappedSuperclass; - -/** - * Base abstract class for entities which will hold definitions for created, last modified by and created, - * last modified by date. - */ -@MappedSuperclass -@Audited -@EntityListeners(AuditingEntityListener.class) -public abstract class AbstractAuditingEntity implements Serializable { - - private static final long serialVersionUID = 1L; - - @CreatedBy - @Column(name = "created_by", nullable = false, length = 50, updatable = false) - @JsonIgnore - private String createdBy; - - @CreatedDate - @Column(name = "created_date", updatable = false) - @JsonIgnore - private Instant createdDate = Instant.now(); - - @LastModifiedBy - @Column(name = "last_modified_by", length = 50) - @JsonIgnore - private String lastModifiedBy; - - @LastModifiedDate - @Column(name = "last_modified_date") - @JsonIgnore - private Instant lastModifiedDate = Instant.now(); - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Instant getCreatedDate() { - return createdDate; - } - - public void setCreatedDate(Instant createdDate) { - this.createdDate = createdDate; - } - - public String getLastModifiedBy() { - return lastModifiedBy; - } - - public void setLastModifiedBy(String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - - public Instant getLastModifiedDate() { - return lastModifiedDate; - } - - public void setLastModifiedDate(Instant lastModifiedDate) { - this.lastModifiedDate = lastModifiedDate; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Authority.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Authority.java deleted file mode 100644 index fbd4596fc7..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Authority.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Column; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import java.io.Serializable; - -/** - * An authority (a security role) used by Spring Security. - */ -@Entity -@Table(name = "jhi_authority") -public class Authority implements Serializable { - - private static final long serialVersionUID = 1L; - - @NotNull - @Size(max = 50) - @Id - @Column(length = 50) - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - Authority authority = (Authority) o; - - return !(name != null ? !name.equals(authority.name) : authority.name != null); - } - - @Override - public int hashCode() { - return name != null ? name.hashCode() : 0; - } - - @Override - public String toString() { - return "Authority{" + - "name='" + name + '\'' + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Book.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Book.java deleted file mode 100644 index 16771d9e09..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Book.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.baeldung.jhipster5.domain; - - - -import javax.persistence.*; -import javax.validation.constraints.*; - -import java.io.Serializable; -import java.time.LocalDate; -import java.util.Objects; - -/** - * A Book. - */ -@Entity -@Table(name = "book") -public class Book implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotNull - @Column(name = "title", nullable = false) - private String title; - - @NotNull - @Column(name = "author", nullable = false) - private String author; - - @NotNull - @Column(name = "published", nullable = false) - private LocalDate published; - - @NotNull - @Min(value = 0) - @Column(name = "quantity", nullable = false) - private Integer quantity; - - @NotNull - @DecimalMin(value = "0") - @Column(name = "price", nullable = false) - private Double price; - - // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public Book title(String title) { - this.title = title; - return this; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public Book author(String author) { - this.author = author; - return this; - } - - public void setAuthor(String author) { - this.author = author; - } - - public LocalDate getPublished() { - return published; - } - - public Book published(LocalDate published) { - this.published = published; - return this; - } - - public void setPublished(LocalDate published) { - this.published = published; - } - - public Integer getQuantity() { - return quantity; - } - - public Book quantity(Integer quantity) { - this.quantity = quantity; - return this; - } - - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } - - public Double getPrice() { - return price; - } - - public Book price(Double price) { - this.price = price; - return this; - } - - public void setPrice(Double price) { - this.price = price; - } - // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Book book = (Book) o; - if (book.getId() == null || getId() == null) { - return false; - } - return Objects.equals(getId(), book.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "Book{" + - "id=" + getId() + - ", title='" + getTitle() + "'" + - ", author='" + getAuthor() + "'" + - ", published='" + getPublished() + "'" + - ", quantity=" + getQuantity() + - ", price=" + getPrice() + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/PersistentAuditEvent.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/PersistentAuditEvent.java deleted file mode 100644 index 15e2eeda5a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/PersistentAuditEvent.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import java.io.Serializable; -import java.time.Instant; -import java.util.HashMap; -import java.util.Objects; -import java.util.Map; - -/** - * Persist AuditEvent managed by the Spring Boot actuator. - * - * @see org.springframework.boot.actuate.audit.AuditEvent - */ -@Entity -@Table(name = "jhi_persistent_audit_event") -public class PersistentAuditEvent implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "event_id") - private Long id; - - @NotNull - @Column(nullable = false) - private String principal; - - @Column(name = "event_date") - private Instant auditEventDate; - - @Column(name = "event_type") - private String auditEventType; - - @ElementCollection - @MapKeyColumn(name = "name") - @Column(name = "value") - @CollectionTable(name = "jhi_persistent_audit_evt_data", joinColumns=@JoinColumn(name="event_id")) - private Map data = new HashMap<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getPrincipal() { - return principal; - } - - public void setPrincipal(String principal) { - this.principal = principal; - } - - public Instant getAuditEventDate() { - return auditEventDate; - } - - public void setAuditEventDate(Instant auditEventDate) { - this.auditEventDate = auditEventDate; - } - - public String getAuditEventType() { - return auditEventType; - } - - public void setAuditEventType(String auditEventType) { - this.auditEventType = auditEventType; - } - - public Map getData() { - return data; - } - - public void setData(Map data) { - this.data = data; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - PersistentAuditEvent persistentAuditEvent = (PersistentAuditEvent) o; - return !(persistentAuditEvent.getId() == null || getId() == null) && Objects.equals(getId(), persistentAuditEvent.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "PersistentAuditEvent{" + - "principal='" + principal + '\'' + - ", auditEventDate=" + auditEventDate + - ", auditEventType='" + auditEventType + '\'' + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/User.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/User.java deleted file mode 100644 index ff12d1ca9c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/User.java +++ /dev/null @@ -1,231 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import com.baeldung.jhipster5.config.Constants; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.apache.commons.lang3.StringUtils; -import org.hibernate.annotations.BatchSize; -import javax.validation.constraints.Email; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.HashSet; -import java.util.Locale; -import java.util.Objects; -import java.util.Set; -import java.time.Instant; - -/** - * A user. - */ -@Entity -@Table(name = "jhi_user") - -public class User extends AbstractAuditingEntity implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotNull - @Pattern(regexp = Constants.LOGIN_REGEX) - @Size(min = 1, max = 50) - @Column(length = 50, unique = true, nullable = false) - private String login; - - @JsonIgnore - @NotNull - @Size(min = 60, max = 60) - @Column(name = "password_hash", length = 60, nullable = false) - private String password; - - @Size(max = 50) - @Column(name = "first_name", length = 50) - private String firstName; - - @Size(max = 50) - @Column(name = "last_name", length = 50) - private String lastName; - - @Email - @Size(min = 5, max = 254) - @Column(length = 254, unique = true) - private String email; - - @NotNull - @Column(nullable = false) - private boolean activated = false; - - @Size(min = 2, max = 6) - @Column(name = "lang_key", length = 6) - private String langKey; - - @Size(max = 256) - @Column(name = "image_url", length = 256) - private String imageUrl; - - @Size(max = 20) - @Column(name = "activation_key", length = 20) - @JsonIgnore - private String activationKey; - - @Size(max = 20) - @Column(name = "reset_key", length = 20) - @JsonIgnore - private String resetKey; - - @Column(name = "reset_date") - private Instant resetDate = null; - - @JsonIgnore - @ManyToMany - @JoinTable( - name = "jhi_user_authority", - joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")}, - inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")}) - - @BatchSize(size = 20) - private Set authorities = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getLogin() { - return login; - } - - // Lowercase the login before saving it in database - public void setLogin(String login) { - this.login = StringUtils.lowerCase(login, Locale.ENGLISH); - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - 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 String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getImageUrl() { - return imageUrl; - } - - public void setImageUrl(String imageUrl) { - this.imageUrl = imageUrl; - } - - public boolean getActivated() { - return activated; - } - - public void setActivated(boolean activated) { - this.activated = activated; - } - - public String getActivationKey() { - return activationKey; - } - - public void setActivationKey(String activationKey) { - this.activationKey = activationKey; - } - - public String getResetKey() { - return resetKey; - } - - public void setResetKey(String resetKey) { - this.resetKey = resetKey; - } - - public Instant getResetDate() { - return resetDate; - } - - public void setResetDate(Instant resetDate) { - this.resetDate = resetDate; - } - - public String getLangKey() { - return langKey; - } - - public void setLangKey(String langKey) { - this.langKey = langKey; - } - - public Set getAuthorities() { - return authorities; - } - - public void setAuthorities(Set authorities) { - this.authorities = authorities; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - User user = (User) o; - return !(user.getId() == null || getId() == null) && Objects.equals(getId(), user.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "User{" + - "login='" + login + '\'' + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - ", email='" + email + '\'' + - ", imageUrl='" + imageUrl + '\'' + - ", activated='" + activated + '\'' + - ", langKey='" + langKey + '\'' + - ", activationKey='" + activationKey + '\'' + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/package-info.java deleted file mode 100644 index eba92a598e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * JPA domain objects. - */ -package com.baeldung.jhipster5.domain; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/AuthorityRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/AuthorityRepository.java deleted file mode 100644 index 310735eb57..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/AuthorityRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.Authority; - -import org.springframework.data.jpa.repository.JpaRepository; - -/** - * Spring Data JPA repository for the Authority entity. - */ -public interface AuthorityRepository extends JpaRepository { -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/BookRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/BookRepository.java deleted file mode 100644 index ebd3117e65..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/BookRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.Book; -import org.springframework.data.jpa.repository.*; -import org.springframework.stereotype.Repository; - - -/** - * Spring Data repository for the Book entity. - */ -@SuppressWarnings("unused") -@Repository -public interface BookRepository extends JpaRepository { - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/CustomAuditEventRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/CustomAuditEventRepository.java deleted file mode 100644 index faa788ff5f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/CustomAuditEventRepository.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.domain.PersistentAuditEvent; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.util.*; - -/** - * An implementation of Spring Boot's AuditEventRepository. - */ -@Repository -public class CustomAuditEventRepository implements AuditEventRepository { - - private static final String AUTHORIZATION_FAILURE = "AUTHORIZATION_FAILURE"; - - /** - * Should be the same as in Liquibase migration. - */ - protected static final int EVENT_DATA_COLUMN_MAX_LENGTH = 255; - - private final PersistenceAuditEventRepository persistenceAuditEventRepository; - - private final AuditEventConverter auditEventConverter; - - private final Logger log = LoggerFactory.getLogger(getClass()); - - public CustomAuditEventRepository(PersistenceAuditEventRepository persistenceAuditEventRepository, - AuditEventConverter auditEventConverter) { - - this.persistenceAuditEventRepository = persistenceAuditEventRepository; - this.auditEventConverter = auditEventConverter; - } - - @Override - public List find(String principal, Instant after, String type) { - Iterable persistentAuditEvents = - persistenceAuditEventRepository.findByPrincipalAndAuditEventDateAfterAndAuditEventType(principal, after, type); - return auditEventConverter.convertToAuditEvent(persistentAuditEvents); - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void add(AuditEvent event) { - if (!AUTHORIZATION_FAILURE.equals(event.getType()) && - !Constants.ANONYMOUS_USER.equals(event.getPrincipal())) { - - PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent(); - persistentAuditEvent.setPrincipal(event.getPrincipal()); - persistentAuditEvent.setAuditEventType(event.getType()); - persistentAuditEvent.setAuditEventDate(event.getTimestamp()); - Map eventData = auditEventConverter.convertDataToStrings(event.getData()); - persistentAuditEvent.setData(truncate(eventData)); - persistenceAuditEventRepository.save(persistentAuditEvent); - } - } - - /** - * Truncate event data that might exceed column length. - */ - private Map truncate(Map data) { - Map results = new HashMap<>(); - - if (data != null) { - for (Map.Entry entry : data.entrySet()) { - String value = entry.getValue(); - if (value != null) { - int length = value.length(); - if (length > EVENT_DATA_COLUMN_MAX_LENGTH) { - value = value.substring(0, EVENT_DATA_COLUMN_MAX_LENGTH); - log.warn("Event data for {} too long ({}) has been truncated to {}. Consider increasing column width.", - entry.getKey(), length, EVENT_DATA_COLUMN_MAX_LENGTH); - } - } - results.put(entry.getKey(), value); - } - } - return results; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/PersistenceAuditEventRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/PersistenceAuditEventRepository.java deleted file mode 100644 index 2eb6f3b847..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/PersistenceAuditEventRepository.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.PersistentAuditEvent; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.time.Instant; -import java.util.List; - -/** - * Spring Data JPA repository for the PersistentAuditEvent entity. - */ -public interface PersistenceAuditEventRepository extends JpaRepository { - - List findByPrincipal(String principal); - - List findByAuditEventDateAfter(Instant after); - - List findByPrincipalAndAuditEventDateAfter(String principal, Instant after); - - List findByPrincipalAndAuditEventDateAfterAndAuditEventType(String principal, Instant after, String type); - - Page findAllByAuditEventDateBetween(Instant fromDate, Instant toDate, Pageable pageable); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/UserRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/UserRepository.java deleted file mode 100644 index 42a5588b22..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/UserRepository.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.User; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.EntityGraph; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import java.util.List; -import java.util.Optional; -import java.time.Instant; - -/** - * Spring Data JPA repository for the User entity. - */ -@Repository -public interface UserRepository extends JpaRepository { - - Optional findOneByActivationKey(String activationKey); - - List findAllByActivatedIsFalseAndCreatedDateBefore(Instant dateTime); - - Optional findOneByResetKey(String resetKey); - - Optional findOneByEmailIgnoreCase(String email); - - Optional findOneByLogin(String login); - - @EntityGraph(attributePaths = "authorities") - Optional findOneWithAuthoritiesById(Long id); - - @EntityGraph(attributePaths = "authorities") - Optional findOneWithAuthoritiesByLogin(String login); - - @EntityGraph(attributePaths = "authorities") - Optional findOneWithAuthoritiesByEmail(String email); - - Page findAllByLoginNot(Pageable pageable, String login); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/package-info.java deleted file mode 100644 index a5002eb201..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring Data JPA repositories. - */ -package com.baeldung.jhipster5.repository; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/AuthoritiesConstants.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/AuthoritiesConstants.java deleted file mode 100644 index 6ecf44394f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/AuthoritiesConstants.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.jhipster5.security; - -/** - * Constants for Spring Security authorities. - */ -public final class AuthoritiesConstants { - - public static final String ADMIN = "ROLE_ADMIN"; - - public static final String USER = "ROLE_USER"; - - public static final String ANONYMOUS = "ROLE_ANONYMOUS"; - - private AuthoritiesConstants() { - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java deleted file mode 100644 index 0a7dd66b24..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.baeldung.jhipster5.security; - -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.security.dto.LoginRequest; -import com.baeldung.jhipster5.security.dto.LoginResponse; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.UserDTO; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.AuthenticationServiceException; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; - -import java.util.Collection; -import java.util.Collections; -import java.util.stream.Collectors; - -@Component -public class CustomAuthenticationManager implements AuthenticationManager { - - private final static Logger LOG = LoggerFactory.getLogger(CustomAuthenticationManager.class); - - private final String REMOTE_LOGIN_URL = "https://example.com/login"; - - private final RestTemplate restTemplate = new RestTemplate(); - - @Autowired - private UserService userService; - - @Override - public Authentication authenticate(Authentication authentication) throws AuthenticationException { - - LoginRequest loginRequest = new LoginRequest(); - loginRequest.setUsername(authentication.getPrincipal().toString()); - loginRequest.setPassword(authentication.getCredentials().toString()); - - try - { - ResponseEntity response = - restTemplate.postForEntity( - REMOTE_LOGIN_URL, - loginRequest, - LoginResponse.class); - - if(response.getStatusCode().is2xxSuccessful()) - { - // - // Need to create a new local user if this is the first time logging in; this - // is required so they can be issued JWTs. We can use this flow to also keep - // our local use entry up to date with data from the remote service if needed - // (for example, if the first and last name might change, this is where we would - // update the local user entry) - // - - User user = userService.getUserWithAuthoritiesByLogin(authentication.getPrincipal().toString()) - .orElseGet(() -> userService.createUser(createUserDTO(response.getBody(), authentication))); - return createAuthentication(authentication, user); - } - else - { - throw new BadCredentialsException("Invalid username or password"); - } - } - catch (Exception e) - { - LOG.warn("Failed to authenticate", e); - throw new AuthenticationServiceException("Failed to login", e); - } - } - - /** - * Creates a new authentication with basic roles - * @param auth Contains auth details that will be copied into the new one. - * @param user User object representing who is logging in - * @return Authentication - */ - private Authentication createAuthentication(Authentication auth, User user) { - - // - // Honor any roles the user already has set; default is just USER role - // but could be modified after account creation - // - - Collection authorities = user - .getAuthorities() - .stream() - .map(a -> new SimpleGrantedAuthority(a.getName())) - .collect(Collectors.toSet()); - - UsernamePasswordAuthenticationToken token - = new UsernamePasswordAuthenticationToken( - user.getId(), - auth.getCredentials().toString(), - authorities); - - return token; - } - - /** - * Creates a new UserDTO with basic info. - * @param loginResponse Response from peloton login API - * @param authentication Contains user login info (namely username and password) - * @return UserDTO - */ - private UserDTO createUserDTO(LoginResponse loginResponse, Authentication authentication) { - - UserDTO dto = new UserDTO(); - - dto.setActivated(true); - dto.setEmail(loginResponse.getEmail()); - dto.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - dto.setFirstName(loginResponse.getFirstName()); - dto.setLastName(loginResponse.getLastName()); - - return dto; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/DomainUserDetailsService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/DomainUserDetailsService.java deleted file mode 100644 index d0014096df..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/DomainUserDetailsService.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.jhipster5.security; - -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * Authenticate a user from the database. - */ -@Component("userDetailsService") -public class DomainUserDetailsService implements UserDetailsService { - - private final Logger log = LoggerFactory.getLogger(DomainUserDetailsService.class); - - private final UserRepository userRepository; - - public DomainUserDetailsService(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - @Transactional - public UserDetails loadUserByUsername(final String login) { - log.debug("Authenticating {}", login); - - if (new EmailValidator().isValid(login, null)) { - return userRepository.findOneWithAuthoritiesByEmail(login) - .map(user -> createSpringSecurityUser(login, user)) - .orElseThrow(() -> new UsernameNotFoundException("User with email " + login + " was not found in the database")); - } - - String lowercaseLogin = login.toLowerCase(Locale.ENGLISH); - return userRepository.findOneWithAuthoritiesByLogin(lowercaseLogin) - .map(user -> createSpringSecurityUser(lowercaseLogin, user)) - .orElseThrow(() -> new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database")); - - } - - private org.springframework.security.core.userdetails.User createSpringSecurityUser(String lowercaseLogin, User user) { - if (!user.getActivated()) { - throw new UserNotActivatedException("User " + lowercaseLogin + " was not activated"); - } - List grantedAuthorities = user.getAuthorities().stream() - .map(authority -> new SimpleGrantedAuthority(authority.getName())) - .collect(Collectors.toList()); - return new org.springframework.security.core.userdetails.User(user.getLogin(), - user.getPassword(), - grantedAuthorities); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SecurityUtils.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SecurityUtils.java deleted file mode 100644 index 462bb8abc9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SecurityUtils.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.baeldung.jhipster5.security; - -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; - -import java.util.Optional; - -/** - * Utility class for Spring Security. - */ -public final class SecurityUtils { - - private SecurityUtils() { - } - - /** - * Get the login of the current user. - * - * @return the login of the current user - */ - public static Optional getCurrentUserLogin() { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .map(authentication -> { - if (authentication.getPrincipal() instanceof UserDetails) { - UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal(); - return springSecurityUser.getUsername(); - } else if (authentication.getPrincipal() instanceof String) { - return (String) authentication.getPrincipal(); - } - return null; - }); - } - - /** - * Get the JWT of the current user. - * - * @return the JWT of the current user - */ - public static Optional getCurrentUserJWT() { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .filter(authentication -> authentication.getCredentials() instanceof String) - .map(authentication -> (String) authentication.getCredentials()); - } - - /** - * Check if a user is authenticated. - * - * @return true if the user is authenticated, false otherwise - */ - public static boolean isAuthenticated() { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .map(authentication -> authentication.getAuthorities().stream() - .noneMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(AuthoritiesConstants.ANONYMOUS))) - .orElse(false); - } - - /** - * If the current user has a specific authority (security role). - *

- * The name of this method comes from the isUserInRole() method in the Servlet API - * - * @param authority the authority to check - * @return true if the current user has the authority, false otherwise - */ - public static boolean isCurrentUserInRole(String authority) { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .map(authentication -> authentication.getAuthorities().stream() - .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(authority))) - .orElse(false); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SpringSecurityAuditorAware.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SpringSecurityAuditorAware.java deleted file mode 100644 index c1d6405ae3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SpringSecurityAuditorAware.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.jhipster5.security; - -import com.baeldung.jhipster5.config.Constants; - -import java.util.Optional; - -import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; - -/** - * Implementation of AuditorAware based on Spring Security. - */ -@Component -public class SpringSecurityAuditorAware implements AuditorAware { - - @Override - public Optional getCurrentAuditor() { - return Optional.of(SecurityUtils.getCurrentUserLogin().orElse(Constants.SYSTEM_ACCOUNT)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/UserNotActivatedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/UserNotActivatedException.java deleted file mode 100644 index 4b2d91983c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/UserNotActivatedException.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.jhipster5.security; - -import org.springframework.security.core.AuthenticationException; - -/** - * This exception is thrown in case of a not activated user trying to authenticate. - */ -public class UserNotActivatedException extends AuthenticationException { - - private static final long serialVersionUID = 1L; - - public UserNotActivatedException(String message) { - super(message); - } - - public UserNotActivatedException(String message, Throwable t) { - super(message, t); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java deleted file mode 100644 index f45c23fa39..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.jhipster5.security.dto; - -/** - * Simple DTO representing a login request to a remote service. - */ -public class LoginRequest { - - private String username; - - private String password; - - public LoginRequest() { - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java deleted file mode 100644 index ad1fe37a2f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.jhipster5.security.dto; - -/** - * Simple DTO representing the response of logging in using a remote service. - */ -public class LoginResponse { - - private String username; - - private String firstName; - - private String lastName; - - private String email; - - public LoginResponse() { - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - 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 String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTConfigurer.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTConfigurer.java deleted file mode 100644 index 944255e37d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTConfigurer.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import org.springframework.security.config.annotation.SecurityConfigurerAdapter; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.web.DefaultSecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; - -public class JWTConfigurer extends SecurityConfigurerAdapter { - - private TokenProvider tokenProvider; - - public JWTConfigurer(TokenProvider tokenProvider) { - this.tokenProvider = tokenProvider; - } - - @Override - public void configure(HttpSecurity http) throws Exception { - JWTFilter customFilter = new JWTFilter(tokenProvider); - http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTFilter.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTFilter.java deleted file mode 100644 index cf1060282c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTFilter.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.GenericFilterBean; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import java.io.IOException; - -/** - * Filters incoming requests and installs a Spring Security principal if a header corresponding to a valid user is - * found. - */ -public class JWTFilter extends GenericFilterBean { - - public static final String AUTHORIZATION_HEADER = "Authorization"; - - private TokenProvider tokenProvider; - - public JWTFilter(TokenProvider tokenProvider) { - this.tokenProvider = tokenProvider; - } - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { - HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; - String jwt = resolveToken(httpServletRequest); - if (StringUtils.hasText(jwt) && this.tokenProvider.validateToken(jwt)) { - Authentication authentication = this.tokenProvider.getAuthentication(jwt); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(servletRequest, servletResponse); - } - - private String resolveToken(HttpServletRequest request){ - String bearerToken = request.getHeader(AUTHORIZATION_HEADER); - if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { - return bearerToken.substring(7); - } - return null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/TokenProvider.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/TokenProvider.java deleted file mode 100644 index 248d45e050..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/TokenProvider.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import java.nio.charset.StandardCharsets; -import java.security.Key; -import java.util.*; -import java.util.stream.Collectors; -import javax.annotation.PostConstruct; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.User; -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; - -import io.github.jhipster.config.JHipsterProperties; -import io.jsonwebtoken.*; -import io.jsonwebtoken.io.Decoders; -import io.jsonwebtoken.security.Keys; - -@Component -public class TokenProvider { - - private final Logger log = LoggerFactory.getLogger(TokenProvider.class); - - private static final String AUTHORITIES_KEY = "auth"; - - private Key key; - - private long tokenValidityInMilliseconds; - - private long tokenValidityInMillisecondsForRememberMe; - - private final JHipsterProperties jHipsterProperties; - - public TokenProvider(JHipsterProperties jHipsterProperties) { - this.jHipsterProperties = jHipsterProperties; - } - - @PostConstruct - public void init() { - byte[] keyBytes; - String secret = jHipsterProperties.getSecurity().getAuthentication().getJwt().getSecret(); - if (!StringUtils.isEmpty(secret)) { - log.warn("Warning: the JWT key used is not Base64-encoded. " + - "We recommend using the `jhipster.security.authentication.jwt.base64-secret` key for optimum security."); - keyBytes = secret.getBytes(StandardCharsets.UTF_8); - } else { - log.debug("Using a Base64-encoded JWT secret key"); - keyBytes = Decoders.BASE64.decode(jHipsterProperties.getSecurity().getAuthentication().getJwt().getBase64Secret()); - } - this.key = Keys.hmacShaKeyFor(keyBytes); - this.tokenValidityInMilliseconds = - 1000 * jHipsterProperties.getSecurity().getAuthentication().getJwt().getTokenValidityInSeconds(); - this.tokenValidityInMillisecondsForRememberMe = - 1000 * jHipsterProperties.getSecurity().getAuthentication().getJwt() - .getTokenValidityInSecondsForRememberMe(); - } - - public String createToken(Authentication authentication, boolean rememberMe) { - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - long now = (new Date()).getTime(); - Date validity; - if (rememberMe) { - validity = new Date(now + this.tokenValidityInMillisecondsForRememberMe); - } else { - validity = new Date(now + this.tokenValidityInMilliseconds); - } - - return Jwts.builder() - .setSubject(authentication.getName()) - .claim(AUTHORITIES_KEY, authorities) - .signWith(key, SignatureAlgorithm.HS512) - .setExpiration(validity) - .compact(); - } - - public Authentication getAuthentication(String token) { - Claims claims = Jwts.parser() - .setSigningKey(key) - .parseClaimsJws(token) - .getBody(); - - Collection authorities = - Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) - .map(SimpleGrantedAuthority::new) - .collect(Collectors.toList()); - - User principal = new User(claims.getSubject(), "", authorities); - - return new UsernamePasswordAuthenticationToken(principal, token, authorities); - } - - public boolean validateToken(String authToken) { - try { - Jwts.parser().setSigningKey(key).parseClaimsJws(authToken); - return true; - } catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) { - log.info("Invalid JWT signature."); - log.trace("Invalid JWT signature trace: {}", e); - } catch (ExpiredJwtException e) { - log.info("Expired JWT token."); - log.trace("Expired JWT token trace: {}", e); - } catch (UnsupportedJwtException e) { - log.info("Unsupported JWT token."); - log.trace("Unsupported JWT token trace: {}", e); - } catch (IllegalArgumentException e) { - log.info("JWT token compact of handler are invalid."); - log.trace("JWT token compact of handler are invalid trace: {}", e); - } - return false; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/package-info.java deleted file mode 100644 index 4759050c56..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring Security configuration. - */ -package com.baeldung.jhipster5.security; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/AuditEventService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/AuditEventService.java deleted file mode 100644 index 852eb951c9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/AuditEventService.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.repository.PersistenceAuditEventRepository; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.util.Optional; - -/** - * Service for managing audit events. - *

- * This is the default implementation to support SpringBoot Actuator AuditEventRepository - */ -@Service -@Transactional -public class AuditEventService { - - private final PersistenceAuditEventRepository persistenceAuditEventRepository; - - private final AuditEventConverter auditEventConverter; - - public AuditEventService( - PersistenceAuditEventRepository persistenceAuditEventRepository, - AuditEventConverter auditEventConverter) { - - this.persistenceAuditEventRepository = persistenceAuditEventRepository; - this.auditEventConverter = auditEventConverter; - } - - public Page findAll(Pageable pageable) { - return persistenceAuditEventRepository.findAll(pageable) - .map(auditEventConverter::convertToAuditEvent); - } - - public Page findByDates(Instant fromDate, Instant toDate, Pageable pageable) { - return persistenceAuditEventRepository.findAllByAuditEventDateBetween(fromDate, toDate, pageable) - .map(auditEventConverter::convertToAuditEvent); - } - - public Optional find(Long id) { - return Optional.ofNullable(persistenceAuditEventRepository.findById(id)) - .filter(Optional::isPresent) - .map(Optional::get) - .map(auditEventConverter::convertToAuditEvent); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/BookService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/BookService.java deleted file mode 100644 index 6422d1a424..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/BookService.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.service.dto.BookDTO; - -import java.util.List; -import java.util.Optional; - -/** - * Service Interface for managing Book. - */ -public interface BookService { - - /** - * Save a book. - * - * @param bookDTO the entity to save - * @return the persisted entity - */ - BookDTO save(BookDTO bookDTO); - - /** - * Get all the books. - * - * @return the list of entities - */ - List findAll(); - - - /** - * Get the "id" book. - * - * @param id the id of the entity - * @return the entity - */ - Optional findOne(Long id); - - /** - * Delete the "id" book. - * - * @param id the id of the entity - */ - void delete(Long id); - - /** - * Simulates purchasing a book by reducing the stock of a book by 1. - * @param id the id of the book - * @return Updated BookDTO, empty if not found, or throws exception if an error occurs. - */ - Optional purchase(Long id); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/MailService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/MailService.java deleted file mode 100644 index b15a7faff2..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/MailService.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.domain.User; - -import io.github.jhipster.config.JHipsterProperties; - -import java.nio.charset.StandardCharsets; -import java.util.Locale; -import javax.mail.internet.MimeMessage; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.MessageSource; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.thymeleaf.context.Context; -import org.thymeleaf.spring5.SpringTemplateEngine; - -/** - * Service for sending emails. - *

- * We use the @Async annotation to send emails asynchronously. - */ -@Service -public class MailService { - - private final Logger log = LoggerFactory.getLogger(MailService.class); - - private static final String USER = "user"; - - private static final String BASE_URL = "baseUrl"; - - private final JHipsterProperties jHipsterProperties; - - private final JavaMailSender javaMailSender; - - private final MessageSource messageSource; - - private final SpringTemplateEngine templateEngine; - - public MailService(JHipsterProperties jHipsterProperties, JavaMailSender javaMailSender, - MessageSource messageSource, SpringTemplateEngine templateEngine) { - - this.jHipsterProperties = jHipsterProperties; - this.javaMailSender = javaMailSender; - this.messageSource = messageSource; - this.templateEngine = templateEngine; - } - - @Async - public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) { - log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}", - isMultipart, isHtml, to, subject, content); - - // Prepare message using a Spring helper - MimeMessage mimeMessage = javaMailSender.createMimeMessage(); - try { - MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, StandardCharsets.UTF_8.name()); - message.setTo(to); - message.setFrom(jHipsterProperties.getMail().getFrom()); - message.setSubject(subject); - message.setText(content, isHtml); - javaMailSender.send(mimeMessage); - log.debug("Sent email to User '{}'", to); - } catch (Exception e) { - if (log.isDebugEnabled()) { - log.warn("Email could not be sent to user '{}'", to, e); - } else { - log.warn("Email could not be sent to user '{}': {}", to, e.getMessage()); - } - } - } - - @Async - public void sendEmailFromTemplate(User user, String templateName, String titleKey) { - Locale locale = Locale.forLanguageTag(user.getLangKey()); - Context context = new Context(locale); - context.setVariable(USER, user); - context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl()); - String content = templateEngine.process(templateName, context); - String subject = messageSource.getMessage(titleKey, null, locale); - sendEmail(user.getEmail(), subject, content, false, true); - - } - - @Async - public void sendActivationEmail(User user) { - log.debug("Sending activation email to '{}'", user.getEmail()); - sendEmailFromTemplate(user, "mail/activationEmail", "email.activation.title"); - } - - @Async - public void sendCreationEmail(User user) { - log.debug("Sending creation email to '{}'", user.getEmail()); - sendEmailFromTemplate(user, "mail/creationEmail", "email.activation.title"); - } - - @Async - public void sendPasswordResetMail(User user) { - log.debug("Sending password reset email to '{}'", user.getEmail()); - sendEmailFromTemplate(user, "mail/passwordResetEmail", "email.reset.title"); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/UserService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/UserService.java deleted file mode 100644 index 82d028f3ca..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/UserService.java +++ /dev/null @@ -1,273 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.AuthorityRepository; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.security.SecurityUtils; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.service.util.RandomUtil; -import com.baeldung.jhipster5.web.rest.errors.*; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.stream.Collectors; - -/** - * Service class for managing users. - */ -@Service -@Transactional -public class UserService { - - private final Logger log = LoggerFactory.getLogger(UserService.class); - - private final UserRepository userRepository; - - private final PasswordEncoder passwordEncoder; - - private final AuthorityRepository authorityRepository; - - public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder, AuthorityRepository authorityRepository) { - this.userRepository = userRepository; - this.passwordEncoder = passwordEncoder; - this.authorityRepository = authorityRepository; - } - - public Optional activateRegistration(String key) { - log.debug("Activating user for activation key {}", key); - return userRepository.findOneByActivationKey(key) - .map(user -> { - // activate given user for the registration key. - user.setActivated(true); - user.setActivationKey(null); - log.debug("Activated user: {}", user); - return user; - }); - } - - public Optional completePasswordReset(String newPassword, String key) { - log.debug("Reset user password for reset key {}", key); - return userRepository.findOneByResetKey(key) - .filter(user -> user.getResetDate().isAfter(Instant.now().minusSeconds(86400))) - .map(user -> { - user.setPassword(passwordEncoder.encode(newPassword)); - user.setResetKey(null); - user.setResetDate(null); - return user; - }); - } - - public Optional requestPasswordReset(String mail) { - return userRepository.findOneByEmailIgnoreCase(mail) - .filter(User::getActivated) - .map(user -> { - user.setResetKey(RandomUtil.generateResetKey()); - user.setResetDate(Instant.now()); - return user; - }); - } - - public User registerUser(UserDTO userDTO, String password) { - userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()).ifPresent(existingUser -> { - boolean removed = removeNonActivatedUser(existingUser); - if (!removed) { - throw new LoginAlreadyUsedException(); - } - }); - userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()).ifPresent(existingUser -> { - boolean removed = removeNonActivatedUser(existingUser); - if (!removed) { - throw new EmailAlreadyUsedException(); - } - }); - User newUser = new User(); - String encryptedPassword = passwordEncoder.encode(password); - newUser.setLogin(userDTO.getLogin().toLowerCase()); - // new user gets initially a generated password - newUser.setPassword(encryptedPassword); - newUser.setFirstName(userDTO.getFirstName()); - newUser.setLastName(userDTO.getLastName()); - newUser.setEmail(userDTO.getEmail().toLowerCase()); - newUser.setImageUrl(userDTO.getImageUrl()); - newUser.setLangKey(userDTO.getLangKey()); - // new user is not active - newUser.setActivated(false); - // new user gets registration key - newUser.setActivationKey(RandomUtil.generateActivationKey()); - Set authorities = new HashSet<>(); - authorityRepository.findById(AuthoritiesConstants.USER).ifPresent(authorities::add); - newUser.setAuthorities(authorities); - userRepository.save(newUser); - log.debug("Created Information for User: {}", newUser); - return newUser; - } - - private boolean removeNonActivatedUser(User existingUser){ - if (existingUser.getActivated()) { - return false; - } - userRepository.delete(existingUser); - userRepository.flush(); - return true; - } - - public User createUser(UserDTO userDTO) { - User user = new User(); - user.setLogin(userDTO.getLogin().toLowerCase()); - user.setFirstName(userDTO.getFirstName()); - user.setLastName(userDTO.getLastName()); - user.setEmail(userDTO.getEmail().toLowerCase()); - user.setImageUrl(userDTO.getImageUrl()); - if (userDTO.getLangKey() == null) { - user.setLangKey(Constants.DEFAULT_LANGUAGE); // default language - } else { - user.setLangKey(userDTO.getLangKey()); - } - String encryptedPassword = passwordEncoder.encode(RandomUtil.generatePassword()); - user.setPassword(encryptedPassword); - user.setResetKey(RandomUtil.generateResetKey()); - user.setResetDate(Instant.now()); - user.setActivated(true); - if (userDTO.getAuthorities() != null) { - Set authorities = userDTO.getAuthorities().stream() - .map(authorityRepository::findById) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toSet()); - user.setAuthorities(authorities); - } - userRepository.save(user); - log.debug("Created Information for User: {}", user); - return user; - } - - /** - * Update basic information (first name, last name, email, language) for the current user. - * - * @param firstName first name of user - * @param lastName last name of user - * @param email email id of user - * @param langKey language key - * @param imageUrl image URL of user - */ - public void updateUser(String firstName, String lastName, String email, String langKey, String imageUrl) { - SecurityUtils.getCurrentUserLogin() - .flatMap(userRepository::findOneByLogin) - .ifPresent(user -> { - user.setFirstName(firstName); - user.setLastName(lastName); - user.setEmail(email.toLowerCase()); - user.setLangKey(langKey); - user.setImageUrl(imageUrl); - log.debug("Changed Information for User: {}", user); - }); - } - - /** - * Update all information for a specific user, and return the modified user. - * - * @param userDTO user to update - * @return updated user - */ - public Optional updateUser(UserDTO userDTO) { - return Optional.of(userRepository - .findById(userDTO.getId())) - .filter(Optional::isPresent) - .map(Optional::get) - .map(user -> { - user.setLogin(userDTO.getLogin().toLowerCase()); - user.setFirstName(userDTO.getFirstName()); - user.setLastName(userDTO.getLastName()); - user.setEmail(userDTO.getEmail().toLowerCase()); - user.setImageUrl(userDTO.getImageUrl()); - user.setActivated(userDTO.isActivated()); - user.setLangKey(userDTO.getLangKey()); - Set managedAuthorities = user.getAuthorities(); - managedAuthorities.clear(); - userDTO.getAuthorities().stream() - .map(authorityRepository::findById) - .filter(Optional::isPresent) - .map(Optional::get) - .forEach(managedAuthorities::add); - log.debug("Changed Information for User: {}", user); - return user; - }) - .map(UserDTO::new); - } - - public void deleteUser(String login) { - userRepository.findOneByLogin(login).ifPresent(user -> { - userRepository.delete(user); - log.debug("Deleted User: {}", user); - }); - } - - public void changePassword(String currentClearTextPassword, String newPassword) { - SecurityUtils.getCurrentUserLogin() - .flatMap(userRepository::findOneByLogin) - .ifPresent(user -> { - String currentEncryptedPassword = user.getPassword(); - if (!passwordEncoder.matches(currentClearTextPassword, currentEncryptedPassword)) { - throw new InvalidPasswordException(); - } - String encryptedPassword = passwordEncoder.encode(newPassword); - user.setPassword(encryptedPassword); - log.debug("Changed password for User: {}", user); - }); - } - - @Transactional(readOnly = true) - public Page getAllManagedUsers(Pageable pageable) { - return userRepository.findAllByLoginNot(pageable, Constants.ANONYMOUS_USER).map(UserDTO::new); - } - - @Transactional(readOnly = true) - public Optional getUserWithAuthoritiesByLogin(String login) { - return userRepository.findOneWithAuthoritiesByLogin(login); - } - - @Transactional(readOnly = true) - public Optional getUserWithAuthorities(Long id) { - return userRepository.findOneWithAuthoritiesById(id); - } - - @Transactional(readOnly = true) - public Optional getUserWithAuthorities() { - return SecurityUtils.getCurrentUserLogin().flatMap(userRepository::findOneWithAuthoritiesByLogin); - } - - /** - * Not activated users should be automatically deleted after 3 days. - *

- * This is scheduled to get fired everyday, at 01:00 (am). - */ - @Scheduled(cron = "0 0 1 * * ?") - public void removeNotActivatedUsers() { - userRepository - .findAllByActivatedIsFalseAndCreatedDateBefore(Instant.now().minus(3, ChronoUnit.DAYS)) - .forEach(user -> { - log.debug("Deleting not activated user {}", user.getLogin()); - userRepository.delete(user); - }); - } - - /** - * @return a list of all the authorities - */ - public List getAuthorities() { - return authorityRepository.findAll().stream().map(Authority::getName).collect(Collectors.toList()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/BookDTO.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/BookDTO.java deleted file mode 100644 index 5aa550e989..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/BookDTO.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.baeldung.jhipster5.service.dto; -import java.time.LocalDate; -import javax.validation.constraints.*; -import java.io.Serializable; -import java.util.Objects; - -/** - * A DTO for the Book entity. - */ -public class BookDTO implements Serializable { - - private Long id; - - @NotNull - private String title; - - @NotNull - private String author; - - @NotNull - private LocalDate published; - - @NotNull - @Min(value = 0) - private Integer quantity; - - @NotNull - @DecimalMin(value = "0") - private Double price; - - - 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; - } - - public LocalDate getPublished() { - return published; - } - - public void setPublished(LocalDate published) { - this.published = published; - } - - public Integer getQuantity() { - return quantity; - } - - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } - - public Double getPrice() { - return price; - } - - public void setPrice(Double price) { - this.price = price; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - BookDTO bookDTO = (BookDTO) o; - if (bookDTO.getId() == null || getId() == null) { - return false; - } - return Objects.equals(getId(), bookDTO.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "BookDTO{" + - "id=" + getId() + - ", title='" + getTitle() + "'" + - ", author='" + getAuthor() + "'" + - ", published='" + getPublished() + "'" + - ", quantity=" + getQuantity() + - ", price=" + getPrice() + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/PasswordChangeDTO.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/PasswordChangeDTO.java deleted file mode 100644 index 0711c97f44..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/PasswordChangeDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.jhipster5.service.dto; - -/** - * A DTO representing a password change required data - current and new password. - */ -public class PasswordChangeDTO { - private String currentPassword; - private String newPassword; - - public PasswordChangeDTO() { - // Empty constructor needed for Jackson. - } - - public PasswordChangeDTO(String currentPassword, String newPassword) { - this.currentPassword = currentPassword; - this.newPassword = newPassword; - } - - public String getCurrentPassword() { - - return currentPassword; - } - - public void setCurrentPassword(String currentPassword) { - this.currentPassword = currentPassword; - } - - public String getNewPassword() { - return newPassword; - } - - public void setNewPassword(String newPassword) { - this.newPassword = newPassword; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/UserDTO.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/UserDTO.java deleted file mode 100644 index 9142b3825e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/UserDTO.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.baeldung.jhipster5.service.dto; - -import com.baeldung.jhipster5.config.Constants; - -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; - -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; - -import javax.validation.constraints.*; -import java.time.Instant; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * A DTO representing a user, with his authorities. - */ -public class UserDTO { - - private Long id; - - @NotBlank - @Pattern(regexp = Constants.LOGIN_REGEX) - @Size(min = 1, max = 50) - private String login; - - @Size(max = 50) - private String firstName; - - @Size(max = 50) - private String lastName; - - @Email - @Size(min = 5, max = 254) - private String email; - - @Size(max = 256) - private String imageUrl; - - private boolean activated = false; - - @Size(min = 2, max = 6) - private String langKey; - - private String createdBy; - - private Instant createdDate; - - private String lastModifiedBy; - - private Instant lastModifiedDate; - - private Set authorities; - - public UserDTO() { - // Empty constructor needed for Jackson. - } - - public UserDTO(User user) { - this.id = user.getId(); - this.login = user.getLogin(); - this.firstName = user.getFirstName(); - this.lastName = user.getLastName(); - this.email = user.getEmail(); - this.activated = user.getActivated(); - this.imageUrl = user.getImageUrl(); - this.langKey = user.getLangKey(); - this.createdBy = user.getCreatedBy(); - this.createdDate = user.getCreatedDate(); - this.lastModifiedBy = user.getLastModifiedBy(); - this.lastModifiedDate = user.getLastModifiedDate(); - this.authorities = user.getAuthorities().stream() - .map(Authority::getName) - .collect(Collectors.toSet()); - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getLogin() { - return login; - } - - public void setLogin(String login) { - this.login = login; - } - - 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 String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getImageUrl() { - return imageUrl; - } - - public void setImageUrl(String imageUrl) { - this.imageUrl = imageUrl; - } - - public boolean isActivated() { - return activated; - } - - public void setActivated(boolean activated) { - this.activated = activated; - } - - public String getLangKey() { - return langKey; - } - - public void setLangKey(String langKey) { - this.langKey = langKey; - } - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Instant getCreatedDate() { - return createdDate; - } - - public void setCreatedDate(Instant createdDate) { - this.createdDate = createdDate; - } - - public String getLastModifiedBy() { - return lastModifiedBy; - } - - public void setLastModifiedBy(String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - - public Instant getLastModifiedDate() { - return lastModifiedDate; - } - - public void setLastModifiedDate(Instant lastModifiedDate) { - this.lastModifiedDate = lastModifiedDate; - } - - public Set getAuthorities() { - return authorities; - } - - public void setAuthorities(Set authorities) { - this.authorities = authorities; - } - - @Override - public String toString() { - return "UserDTO{" + - "login='" + login + '\'' + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - ", email='" + email + '\'' + - ", imageUrl='" + imageUrl + '\'' + - ", activated=" + activated + - ", langKey='" + langKey + '\'' + - ", createdBy=" + createdBy + - ", createdDate=" + createdDate + - ", lastModifiedBy='" + lastModifiedBy + '\'' + - ", lastModifiedDate=" + lastModifiedDate + - ", authorities=" + authorities + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/package-info.java deleted file mode 100644 index 87951796ea..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Data Transfer Objects. - */ -package com.baeldung.jhipster5.service.dto; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/impl/BookServiceImpl.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/impl/BookServiceImpl.java deleted file mode 100644 index 23cd59584c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/impl/BookServiceImpl.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.baeldung.jhipster5.service.impl; - -import com.baeldung.jhipster5.service.BookService; -import com.baeldung.jhipster5.domain.Book; -import com.baeldung.jhipster5.repository.BookRepository; -import com.baeldung.jhipster5.service.dto.BookDTO; -import com.baeldung.jhipster5.service.mapper.BookMapper; -import com.baeldung.jhipster5.web.rest.errors.BadRequestAlertException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * Service Implementation for managing Book. - */ -@Service -@Transactional -public class BookServiceImpl implements BookService { - - private final Logger log = LoggerFactory.getLogger(BookServiceImpl.class); - - private final BookRepository bookRepository; - - private final BookMapper bookMapper; - - public BookServiceImpl(BookRepository bookRepository, BookMapper bookMapper) { - this.bookRepository = bookRepository; - this.bookMapper = bookMapper; - } - - /** - * Save a book. - * - * @param bookDTO the entity to save - * @return the persisted entity - */ - @Override - public BookDTO save(BookDTO bookDTO) { - log.debug("Request to save Book : {}", bookDTO); - Book book = bookMapper.toEntity(bookDTO); - book = bookRepository.save(book); - return bookMapper.toDto(book); - } - - /** - * Get all the books. - * - * @return the list of entities - */ - @Override - @Transactional(readOnly = true) - public List findAll() { - log.debug("Request to get all Books"); - return bookRepository.findAll().stream() - .map(bookMapper::toDto) - .collect(Collectors.toCollection(LinkedList::new)); - } - - - /** - * Get one book by id. - * - * @param id the id of the entity - * @return the entity - */ - @Override - @Transactional(readOnly = true) - public Optional findOne(Long id) { - log.debug("Request to get Book : {}", id); - return bookRepository.findById(id) - .map(bookMapper::toDto); - } - - /** - * Delete the book by id. - * - * @param id the id of the entity - */ - @Override - public void delete(Long id) { - log.debug("Request to delete Book : {}", id); - bookRepository.deleteById(id); - } - - @Override - public Optional purchase(Long id) { - Optional bookDTO = findOne(id); - if(bookDTO.isPresent()) { - int quantity = bookDTO.get().getQuantity(); - if(quantity > 0) { - bookDTO.get().setQuantity(quantity - 1); - Book book = bookMapper.toEntity(bookDTO.get()); - book = bookRepository.save(book); - return bookDTO; - } - else { - throw new BadRequestAlertException("Book is not in stock", "book", "notinstock"); - } - } - return Optional.empty(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/BookMapper.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/BookMapper.java deleted file mode 100644 index cd24c7088e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/BookMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - -import com.baeldung.jhipster5.domain.*; -import com.baeldung.jhipster5.service.dto.BookDTO; - -import org.mapstruct.*; - -/** - * Mapper for the entity Book and its DTO BookDTO. - */ -@Mapper(componentModel = "spring", uses = {}) -public interface BookMapper extends EntityMapper { - - - - default Book fromId(Long id) { - if (id == null) { - return null; - } - Book book = new Book(); - book.setId(id); - return book; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/EntityMapper.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/EntityMapper.java deleted file mode 100644 index 68af78179d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/EntityMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - -import java.util.List; - -/** - * Contract for a generic dto to entity mapper. - * - * @param - DTO type parameter. - * @param - Entity type parameter. - */ - -public interface EntityMapper { - - E toEntity(D dto); - - D toDto(E entity); - - List toEntity(List dtoList); - - List toDto(List entityList); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/UserMapper.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/UserMapper.java deleted file mode 100644 index 485c03813e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/UserMapper.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.service.dto.UserDTO; - -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * Mapper for the entity User and its DTO called UserDTO. - * - * Normal mappers are generated using MapStruct, this one is hand-coded as MapStruct - * support is still in beta, and requires a manual step with an IDE. - */ -@Service -public class UserMapper { - - public List usersToUserDTOs(List users) { - return users.stream() - .filter(Objects::nonNull) - .map(this::userToUserDTO) - .collect(Collectors.toList()); - } - - public UserDTO userToUserDTO(User user) { - return new UserDTO(user); - } - - public List userDTOsToUsers(List userDTOs) { - return userDTOs.stream() - .filter(Objects::nonNull) - .map(this::userDTOToUser) - .collect(Collectors.toList()); - } - - public User userDTOToUser(UserDTO userDTO) { - if (userDTO == null) { - return null; - } else { - User user = new User(); - user.setId(userDTO.getId()); - user.setLogin(userDTO.getLogin()); - user.setFirstName(userDTO.getFirstName()); - user.setLastName(userDTO.getLastName()); - user.setEmail(userDTO.getEmail()); - user.setImageUrl(userDTO.getImageUrl()); - user.setActivated(userDTO.isActivated()); - user.setLangKey(userDTO.getLangKey()); - Set authorities = this.authoritiesFromStrings(userDTO.getAuthorities()); - user.setAuthorities(authorities); - return user; - } - } - - - private Set authoritiesFromStrings(Set authoritiesAsString) { - Set authorities = new HashSet<>(); - - if(authoritiesAsString != null){ - authorities = authoritiesAsString.stream().map(string -> { - Authority auth = new Authority(); - auth.setName(string); - return auth; - }).collect(Collectors.toSet()); - } - - return authorities; - } - - public User userFromId(Long id) { - if (id == null) { - return null; - } - User user = new User(); - user.setId(id); - return user; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/package-info.java deleted file mode 100644 index 7d402321e7..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * MapStruct mappers for mapping domain objects and Data Transfer Objects. - */ -package com.baeldung.jhipster5.service.mapper; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/package-info.java deleted file mode 100644 index a54ed5cca0..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Service layer beans. - */ -package com.baeldung.jhipster5.service; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/util/RandomUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/util/RandomUtil.java deleted file mode 100644 index 97e4d9c672..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/util/RandomUtil.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.jhipster5.service.util; - -import org.apache.commons.lang3.RandomStringUtils; - -/** - * Utility class for generating random Strings. - */ -public final class RandomUtil { - - private static final int DEF_COUNT = 20; - - private RandomUtil() { - } - - /** - * Generate a password. - * - * @return the generated password - */ - public static String generatePassword() { - return RandomStringUtils.randomAlphanumeric(DEF_COUNT); - } - - /** - * Generate an activation key. - * - * @return the generated activation key - */ - public static String generateActivationKey() { - return RandomStringUtils.randomNumeric(DEF_COUNT); - } - - /** - * Generate a reset key. - * - * @return the generated reset key - */ - public static String generateResetKey() { - return RandomStringUtils.randomNumeric(DEF_COUNT); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AccountResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AccountResource.java deleted file mode 100644 index 2109e93999..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AccountResource.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - - -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.SecurityUtils; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.PasswordChangeDTO; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.web.rest.errors.*; -import com.baeldung.jhipster5.web.rest.vm.KeyAndPasswordVM; -import com.baeldung.jhipster5.web.rest.vm.ManagedUserVM; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; -import java.util.*; - -/** - * REST controller for managing the current user's account. - */ -@RestController -@RequestMapping("/api") -public class AccountResource { - - private final Logger log = LoggerFactory.getLogger(AccountResource.class); - - private final UserRepository userRepository; - - private final UserService userService; - - private final MailService mailService; - - public AccountResource(UserRepository userRepository, UserService userService, MailService mailService) { - - this.userRepository = userRepository; - this.userService = userService; - this.mailService = mailService; - } - - /** - * POST /register : register the user. - * - * @param managedUserVM the managed user View Model - * @throws InvalidPasswordException 400 (Bad Request) if the password is incorrect - * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already used - * @throws LoginAlreadyUsedException 400 (Bad Request) if the login is already used - */ - @PostMapping("/register") - @ResponseStatus(HttpStatus.CREATED) - public void registerAccount(@Valid @RequestBody ManagedUserVM managedUserVM) { - if (!checkPasswordLength(managedUserVM.getPassword())) { - throw new InvalidPasswordException(); - } - User user = userService.registerUser(managedUserVM, managedUserVM.getPassword()); - mailService.sendActivationEmail(user); - } - - /** - * GET /activate : activate the registered user. - * - * @param key the activation key - * @throws RuntimeException 500 (Internal Server Error) if the user couldn't be activated - */ - @GetMapping("/activate") - public void activateAccount(@RequestParam(value = "key") String key) { - Optional user = userService.activateRegistration(key); - if (!user.isPresent()) { - throw new InternalServerErrorException("No user was found for this activation key"); - } - } - - /** - * GET /authenticate : check if the user is authenticated, and return its login. - * - * @param request the HTTP request - * @return the login if the user is authenticated - */ - @GetMapping("/authenticate") - public String isAuthenticated(HttpServletRequest request) { - log.debug("REST request to check if the current user is authenticated"); - return request.getRemoteUser(); - } - - /** - * GET /account : get the current user. - * - * @return the current user - * @throws RuntimeException 500 (Internal Server Error) if the user couldn't be returned - */ - @GetMapping("/account") - public UserDTO getAccount() { - return userService.getUserWithAuthorities() - .map(UserDTO::new) - .orElseThrow(() -> new InternalServerErrorException("User could not be found")); - } - - /** - * POST /account : update the current user information. - * - * @param userDTO the current user information - * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already used - * @throws RuntimeException 500 (Internal Server Error) if the user login wasn't found - */ - @PostMapping("/account") - public void saveAccount(@Valid @RequestBody UserDTO userDTO) { - String userLogin = SecurityUtils.getCurrentUserLogin().orElseThrow(() -> new InternalServerErrorException("Current user login not found")); - Optional existingUser = userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()); - if (existingUser.isPresent() && (!existingUser.get().getLogin().equalsIgnoreCase(userLogin))) { - throw new EmailAlreadyUsedException(); - } - Optional user = userRepository.findOneByLogin(userLogin); - if (!user.isPresent()) { - throw new InternalServerErrorException("User could not be found"); - } - userService.updateUser(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail(), - userDTO.getLangKey(), userDTO.getImageUrl()); - } - - /** - * POST /account/change-password : changes the current user's password - * - * @param passwordChangeDto current and new password - * @throws InvalidPasswordException 400 (Bad Request) if the new password is incorrect - */ - @PostMapping(path = "/account/change-password") - public void changePassword(@RequestBody PasswordChangeDTO passwordChangeDto) { - if (!checkPasswordLength(passwordChangeDto.getNewPassword())) { - throw new InvalidPasswordException(); - } - userService.changePassword(passwordChangeDto.getCurrentPassword(), passwordChangeDto.getNewPassword()); - } - - /** - * POST /account/reset-password/init : Send an email to reset the password of the user - * - * @param mail the mail of the user - * @throws EmailNotFoundException 400 (Bad Request) if the email address is not registered - */ - @PostMapping(path = "/account/reset-password/init") - public void requestPasswordReset(@RequestBody String mail) { - mailService.sendPasswordResetMail( - userService.requestPasswordReset(mail) - .orElseThrow(EmailNotFoundException::new) - ); - } - - /** - * POST /account/reset-password/finish : Finish to reset the password of the user - * - * @param keyAndPassword the generated key and the new password - * @throws InvalidPasswordException 400 (Bad Request) if the password is incorrect - * @throws RuntimeException 500 (Internal Server Error) if the password could not be reset - */ - @PostMapping(path = "/account/reset-password/finish") - public void finishPasswordReset(@RequestBody KeyAndPasswordVM keyAndPassword) { - if (!checkPasswordLength(keyAndPassword.getNewPassword())) { - throw new InvalidPasswordException(); - } - Optional user = - userService.completePasswordReset(keyAndPassword.getNewPassword(), keyAndPassword.getKey()); - - if (!user.isPresent()) { - throw new InternalServerErrorException("No user was found for this reset key"); - } - } - - private static boolean checkPasswordLength(String password) { - return !StringUtils.isEmpty(password) && - password.length() >= ManagedUserVM.PASSWORD_MIN_LENGTH && - password.length() <= ManagedUserVM.PASSWORD_MAX_LENGTH; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AuditResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AuditResource.java deleted file mode 100644 index d0182d5d9d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AuditResource.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.service.AuditEventService; -import com.baeldung.jhipster5.web.rest.util.PaginationUtil; - -import io.github.jhipster.web.util.ResponseUtil; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.List; - -/** - * REST controller for getting the audit events. - */ -@RestController -@RequestMapping("/management/audits") -public class AuditResource { - - private final AuditEventService auditEventService; - - public AuditResource(AuditEventService auditEventService) { - this.auditEventService = auditEventService; - } - - /** - * GET /audits : get a page of AuditEvents. - * - * @param pageable the pagination information - * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body - */ - @GetMapping - public ResponseEntity> getAll(Pageable pageable) { - Page page = auditEventService.findAll(pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/management/audits"); - return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); - } - - /** - * GET /audits : get a page of AuditEvents between the fromDate and toDate. - * - * @param fromDate the start of the time period of AuditEvents to get - * @param toDate the end of the time period of AuditEvents to get - * @param pageable the pagination information - * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body - */ - @GetMapping(params = {"fromDate", "toDate"}) - public ResponseEntity> getByDates( - @RequestParam(value = "fromDate") LocalDate fromDate, - @RequestParam(value = "toDate") LocalDate toDate, - Pageable pageable) { - - Page page = auditEventService.findByDates( - fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant(), - toDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant(), - pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/management/audits"); - return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); - } - - /** - * GET /audits/:id : get an AuditEvent by id. - * - * @param id the id of the entity to get - * @return the ResponseEntity with status 200 (OK) and the AuditEvent in body, or status 404 (Not Found) - */ - @GetMapping("/{id:.+}") - public ResponseEntity get(@PathVariable Long id) { - return ResponseUtil.wrapOrNotFound(auditEventService.find(id)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/BookResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/BookResource.java deleted file mode 100644 index 0360ea05ed..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/BookResource.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.baeldung.jhipster5.web.rest; -import com.baeldung.jhipster5.service.BookService; -import com.baeldung.jhipster5.web.rest.errors.BadRequestAlertException; -import com.baeldung.jhipster5.web.rest.util.HeaderUtil; -import com.baeldung.jhipster5.service.dto.BookDTO; -import io.github.jhipster.web.util.ResponseUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.net.URI; -import java.net.URISyntaxException; - -import java.util.List; -import java.util.Optional; - -/** - * REST controller for managing Book. - */ -@RestController -@RequestMapping("/api") -public class BookResource { - - private final Logger log = LoggerFactory.getLogger(BookResource.class); - - private static final String ENTITY_NAME = "book"; - - private final BookService bookService; - - public BookResource(BookService bookService) { - this.bookService = bookService; - } - - /** - * POST /books : Create a new book. - * - * @param bookDTO the bookDTO to create - * @return the ResponseEntity with status 201 (Created) and with body the new bookDTO, or with status 400 (Bad Request) if the book has already an ID - * @throws URISyntaxException if the Location URI syntax is incorrect - */ - @PostMapping("/books") - public ResponseEntity createBook(@Valid @RequestBody BookDTO bookDTO) throws URISyntaxException { - log.debug("REST request to save Book : {}", bookDTO); - if (bookDTO.getId() != null) { - throw new BadRequestAlertException("A new book cannot already have an ID", ENTITY_NAME, "idexists"); - } - BookDTO result = bookService.save(bookDTO); - return ResponseEntity.created(new URI("/api/books/" + result.getId())) - .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) - .body(result); - } - - /** - * PUT /books : Updates an existing book. - * - * @param bookDTO the bookDTO to update - * @return the ResponseEntity with status 200 (OK) and with body the updated bookDTO, - * or with status 400 (Bad Request) if the bookDTO is not valid, - * or with status 500 (Internal Server Error) if the bookDTO couldn't be updated - * @throws URISyntaxException if the Location URI syntax is incorrect - */ - @PutMapping("/books") - public ResponseEntity updateBook(@Valid @RequestBody BookDTO bookDTO) throws URISyntaxException { - log.debug("REST request to update Book : {}", bookDTO); - if (bookDTO.getId() == null) { - throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); - } - BookDTO result = bookService.save(bookDTO); - return ResponseEntity.ok() - .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, bookDTO.getId().toString())) - .body(result); - } - - /** - * GET /books : get all the books. - * - * @return the ResponseEntity with status 200 (OK) and the list of books in body - */ - @GetMapping("/books") - public List getAllBooks() { - log.debug("REST request to get all Books"); - return bookService.findAll(); - } - - /** - * GET /books/:id : get the "id" book. - * - * @param id the id of the bookDTO to retrieve - * @return the ResponseEntity with status 200 (OK) and with body the bookDTO, or with status 404 (Not Found) - */ - @GetMapping("/books/{id}") - public ResponseEntity getBook(@PathVariable Long id) { - log.debug("REST request to get Book : {}", id); - Optional bookDTO = bookService.findOne(id); - return ResponseUtil.wrapOrNotFound(bookDTO); - } - - /** - * DELETE /books/:id : delete the "id" book. - * - * @param id the id of the bookDTO to delete - * @return the ResponseEntity with status 200 (OK) - */ - @DeleteMapping("/books/{id}") - public ResponseEntity deleteBook(@PathVariable Long id) { - log.debug("REST request to delete Book : {}", id); - bookService.delete(id); - return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); - } - - @GetMapping("/books/purchase/{id}") - public ResponseEntity purchase(@PathVariable Long id) { - Optional bookDTO = bookService.purchase(id); - return ResponseUtil.wrapOrNotFound(bookDTO); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/LogsResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/LogsResource.java deleted file mode 100644 index f35b5f2d5c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/LogsResource.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.web.rest.vm.LoggerVM; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.LoggerContext; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * Controller for view and managing Log Level at runtime. - */ -@RestController -@RequestMapping("/management") -public class LogsResource { - - @GetMapping("/logs") - public List getList() { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - return context.getLoggerList() - .stream() - .map(LoggerVM::new) - .collect(Collectors.toList()); - } - - @PutMapping("/logs") - @ResponseStatus(HttpStatus.NO_CONTENT) - public void changeLevel(@RequestBody LoggerVM jsonLogger) { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - context.getLogger(jsonLogger.getName()).setLevel(Level.valueOf(jsonLogger.getLevel())); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserJWTController.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserJWTController.java deleted file mode 100644 index aeea587089..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserJWTController.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.security.jwt.JWTFilter; -import com.baeldung.jhipster5.security.jwt.TokenProvider; -import com.baeldung.jhipster5.web.rest.vm.LoginVM; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * Controller to authenticate users. - */ -@RestController -@RequestMapping("/api") -public class UserJWTController { - - private final TokenProvider tokenProvider; - - private final AuthenticationManager authenticationManager; - - public UserJWTController(TokenProvider tokenProvider, AuthenticationManager authenticationManager) { - this.tokenProvider = tokenProvider; - this.authenticationManager = authenticationManager; - } - - @PostMapping("/authenticate") - public ResponseEntity authorize(@Valid @RequestBody LoginVM loginVM) { - - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword()); - - Authentication authentication = this.authenticationManager.authenticate(authenticationToken); - SecurityContextHolder.getContext().setAuthentication(authentication); - boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe(); - String jwt = tokenProvider.createToken(authentication, rememberMe); - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); - return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK); - } - - /** - * Object to return as body in JWT Authentication. - */ - static class JWTToken { - - private String idToken; - - JWTToken(String idToken) { - this.idToken = idToken; - } - - @JsonProperty("id_token") - String getIdToken() { - return idToken; - } - - void setIdToken(String idToken) { - this.idToken = idToken; - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserResource.java deleted file mode 100644 index a95acf6759..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserResource.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.web.rest.errors.BadRequestAlertException; -import com.baeldung.jhipster5.web.rest.errors.EmailAlreadyUsedException; -import com.baeldung.jhipster5.web.rest.errors.LoginAlreadyUsedException; -import com.baeldung.jhipster5.web.rest.util.HeaderUtil; -import com.baeldung.jhipster5.web.rest.util.PaginationUtil; -import io.github.jhipster.web.util.ResponseUtil; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.*; - -/** - * REST controller for managing users. - *

- * This class accesses the User entity, and needs to fetch its collection of authorities. - *

- * For a normal use-case, it would be better to have an eager relationship between User and Authority, - * and send everything to the client side: there would be no View Model and DTO, a lot less code, and an outer-join - * which would be good for performance. - *

- * We use a View Model and a DTO for 3 reasons: - *

    - *
  • We want to keep a lazy association between the user and the authorities, because people will - * quite often do relationships with the user, and we don't want them to get the authorities all - * the time for nothing (for performance reasons). This is the #1 goal: we should not impact our users' - * application because of this use-case.
  • - *
  • Not having an outer join causes n+1 requests to the database. This is not a real issue as - * we have by default a second-level cache. This means on the first HTTP call we do the n+1 requests, - * but then all authorities come from the cache, so in fact it's much better than doing an outer join - * (which will get lots of data from the database, for each HTTP call).
  • - *
  • As this manages users, for security reasons, we'd rather have a DTO layer.
  • - *
- *

- * Another option would be to have a specific JPA entity graph to handle this case. - */ -@RestController -@RequestMapping("/api") -public class UserResource { - - private final Logger log = LoggerFactory.getLogger(UserResource.class); - - private final UserService userService; - - private final UserRepository userRepository; - - private final MailService mailService; - - public UserResource(UserService userService, UserRepository userRepository, MailService mailService) { - - this.userService = userService; - this.userRepository = userRepository; - this.mailService = mailService; - } - - /** - * POST /users : Creates a new user. - *

- * Creates a new user if the login and email are not already used, and sends an - * mail with an activation link. - * The user needs to be activated on creation. - * - * @param userDTO the user to create - * @return the ResponseEntity with status 201 (Created) and with body the new user, or with status 400 (Bad Request) if the login or email is already in use - * @throws URISyntaxException if the Location URI syntax is incorrect - * @throws BadRequestAlertException 400 (Bad Request) if the login or email is already in use - */ - @PostMapping("/users") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public ResponseEntity createUser(@Valid @RequestBody UserDTO userDTO) throws URISyntaxException { - log.debug("REST request to save User : {}", userDTO); - - if (userDTO.getId() != null) { - throw new BadRequestAlertException("A new user cannot already have an ID", "userManagement", "idexists"); - // Lowercase the user login before comparing with database - } else if (userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()).isPresent()) { - throw new LoginAlreadyUsedException(); - } else if (userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()).isPresent()) { - throw new EmailAlreadyUsedException(); - } else { - User newUser = userService.createUser(userDTO); - mailService.sendCreationEmail(newUser); - return ResponseEntity.created(new URI("/api/users/" + newUser.getLogin())) - .headers(HeaderUtil.createAlert( "A user is created with identifier " + newUser.getLogin(), newUser.getLogin())) - .body(newUser); - } - } - - /** - * PUT /users : Updates an existing User. - * - * @param userDTO the user to update - * @return the ResponseEntity with status 200 (OK) and with body the updated user - * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already in use - * @throws LoginAlreadyUsedException 400 (Bad Request) if the login is already in use - */ - @PutMapping("/users") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public ResponseEntity updateUser(@Valid @RequestBody UserDTO userDTO) { - log.debug("REST request to update User : {}", userDTO); - Optional existingUser = userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()); - if (existingUser.isPresent() && (!existingUser.get().getId().equals(userDTO.getId()))) { - throw new EmailAlreadyUsedException(); - } - existingUser = userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()); - if (existingUser.isPresent() && (!existingUser.get().getId().equals(userDTO.getId()))) { - throw new LoginAlreadyUsedException(); - } - Optional updatedUser = userService.updateUser(userDTO); - - return ResponseUtil.wrapOrNotFound(updatedUser, - HeaderUtil.createAlert("A user is updated with identifier " + userDTO.getLogin(), userDTO.getLogin())); - } - - /** - * GET /users : get all users. - * - * @param pageable the pagination information - * @return the ResponseEntity with status 200 (OK) and with body all users - */ - @GetMapping("/users") - public ResponseEntity> getAllUsers(Pageable pageable) { - final Page page = userService.getAllManagedUsers(pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/users"); - return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); - } - - /** - * @return a string list of the all of the roles - */ - @GetMapping("/users/authorities") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public List getAuthorities() { - return userService.getAuthorities(); - } - - /** - * GET /users/:login : get the "login" user. - * - * @param login the login of the user to find - * @return the ResponseEntity with status 200 (OK) and with body the "login" user, or with status 404 (Not Found) - */ - @GetMapping("/users/{login:" + Constants.LOGIN_REGEX + "}") - public ResponseEntity getUser(@PathVariable String login) { - log.debug("REST request to get User : {}", login); - return ResponseUtil.wrapOrNotFound( - userService.getUserWithAuthoritiesByLogin(login) - .map(UserDTO::new)); - } - - /** - * DELETE /users/:login : delete the "login" User. - * - * @param login the login of the user to delete - * @return the ResponseEntity with status 200 (OK) - */ - @DeleteMapping("/users/{login:" + Constants.LOGIN_REGEX + "}") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public ResponseEntity deleteUser(@PathVariable String login) { - log.debug("REST request to delete User: {}", login); - userService.deleteUser(login); - return ResponseEntity.ok().headers(HeaderUtil.createAlert( "A user is deleted with identifier " + login, login)).build(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/BadRequestAlertException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/BadRequestAlertException.java deleted file mode 100644 index c4c403351a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/BadRequestAlertException.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -import java.net.URI; -import java.util.HashMap; -import java.util.Map; - -public class BadRequestAlertException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - private final String entityName; - - private final String errorKey; - - public BadRequestAlertException(String defaultMessage, String entityName, String errorKey) { - this(ErrorConstants.DEFAULT_TYPE, defaultMessage, entityName, errorKey); - } - - public BadRequestAlertException(URI type, String defaultMessage, String entityName, String errorKey) { - super(type, defaultMessage, Status.BAD_REQUEST, null, null, null, getAlertParameters(entityName, errorKey)); - this.entityName = entityName; - this.errorKey = errorKey; - } - - public String getEntityName() { - return entityName; - } - - public String getErrorKey() { - return errorKey; - } - - private static Map getAlertParameters(String entityName, String errorKey) { - Map parameters = new HashMap<>(); - parameters.put("message", "error." + errorKey); - parameters.put("params", entityName); - return parameters; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/CustomParameterizedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/CustomParameterizedException.java deleted file mode 100644 index 8c3df82b83..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/CustomParameterizedException.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; - -import java.util.HashMap; -import java.util.Map; - -import static org.zalando.problem.Status.BAD_REQUEST; - -/** - * Custom, parameterized exception, which can be translated on the client side. - * For example: - * - *

- * throw new CustomParameterizedException("myCustomError", "hello", "world");
- * 
- * - * Can be translated with: - * - *
- * "error.myCustomError" :  "The server says {{param0}} to {{param1}}"
- * 
- */ -public class CustomParameterizedException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - private static final String PARAM = "param"; - - public CustomParameterizedException(String message, String... params) { - this(message, toParamMap(params)); - } - - public CustomParameterizedException(String message, Map paramMap) { - super(ErrorConstants.PARAMETERIZED_TYPE, "Parameterized Exception", BAD_REQUEST, null, null, null, toProblemParameters(message, paramMap)); - } - - public static Map toParamMap(String... params) { - Map paramMap = new HashMap<>(); - if (params != null && params.length > 0) { - for (int i = 0; i < params.length; i++) { - paramMap.put(PARAM + i, params[i]); - } - } - return paramMap; - } - - public static Map toProblemParameters(String message, Map paramMap) { - Map parameters = new HashMap<>(); - parameters.put("message", message); - parameters.put("params", paramMap); - return parameters; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailAlreadyUsedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailAlreadyUsedException.java deleted file mode 100644 index b3dcc0279e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailAlreadyUsedException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -public class EmailAlreadyUsedException extends BadRequestAlertException { - - private static final long serialVersionUID = 1L; - - public EmailAlreadyUsedException() { - super(ErrorConstants.EMAIL_ALREADY_USED_TYPE, "Email is already in use!", "userManagement", "emailexists"); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailNotFoundException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailNotFoundException.java deleted file mode 100644 index b93081cacb..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailNotFoundException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -public class EmailNotFoundException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - public EmailNotFoundException() { - super(ErrorConstants.EMAIL_NOT_FOUND_TYPE, "Email address not registered", Status.BAD_REQUEST); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ErrorConstants.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ErrorConstants.java deleted file mode 100644 index 06be9254a9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ErrorConstants.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import java.net.URI; - -public final class ErrorConstants { - - public static final String ERR_CONCURRENCY_FAILURE = "error.concurrencyFailure"; - public static final String ERR_VALIDATION = "error.validation"; - public static final String PROBLEM_BASE_URL = "https://www.jhipster.tech/problem"; - public static final URI DEFAULT_TYPE = URI.create(PROBLEM_BASE_URL + "/problem-with-message"); - public static final URI CONSTRAINT_VIOLATION_TYPE = URI.create(PROBLEM_BASE_URL + "/constraint-violation"); - public static final URI PARAMETERIZED_TYPE = URI.create(PROBLEM_BASE_URL + "/parameterized"); - public static final URI ENTITY_NOT_FOUND_TYPE = URI.create(PROBLEM_BASE_URL + "/entity-not-found"); - public static final URI INVALID_PASSWORD_TYPE = URI.create(PROBLEM_BASE_URL + "/invalid-password"); - public static final URI EMAIL_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/email-already-used"); - public static final URI LOGIN_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/login-already-used"); - public static final URI EMAIL_NOT_FOUND_TYPE = URI.create(PROBLEM_BASE_URL + "/email-not-found"); - - private ErrorConstants() { - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslator.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslator.java deleted file mode 100644 index 3f7cc6b565..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslator.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import com.baeldung.jhipster5.web.rest.util.HeaderUtil; - -import org.springframework.dao.ConcurrencyFailureException; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.NativeWebRequest; -import org.zalando.problem.DefaultProblem; -import org.zalando.problem.Problem; -import org.zalando.problem.ProblemBuilder; -import org.zalando.problem.Status; -import org.zalando.problem.spring.web.advice.ProblemHandling; -import org.zalando.problem.violations.ConstraintViolationProblem; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.servlet.http.HttpServletRequest; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.stream.Collectors; - -/** - * Controller advice to translate the server side exceptions to client-friendly json structures. - * The error response follows RFC7807 - Problem Details for HTTP APIs (https://tools.ietf.org/html/rfc7807) - */ -@ControllerAdvice -public class ExceptionTranslator implements ProblemHandling { - - private static final String FIELD_ERRORS_KEY = "fieldErrors"; - private static final String MESSAGE_KEY = "message"; - private static final String PATH_KEY = "path"; - private static final String VIOLATIONS_KEY = "violations"; - - /** - * Post-process the Problem payload to add the message key for the front-end if needed - */ - @Override - public ResponseEntity process(@Nullable ResponseEntity entity, NativeWebRequest request) { - if (entity == null) { - return entity; - } - Problem problem = entity.getBody(); - if (!(problem instanceof ConstraintViolationProblem || problem instanceof DefaultProblem)) { - return entity; - } - ProblemBuilder builder = Problem.builder() - .withType(Problem.DEFAULT_TYPE.equals(problem.getType()) ? ErrorConstants.DEFAULT_TYPE : problem.getType()) - .withStatus(problem.getStatus()) - .withTitle(problem.getTitle()) - .with(PATH_KEY, request.getNativeRequest(HttpServletRequest.class).getRequestURI()); - - if (problem instanceof ConstraintViolationProblem) { - builder - .with(VIOLATIONS_KEY, ((ConstraintViolationProblem) problem).getViolations()) - .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION); - } else { - builder - .withCause(((DefaultProblem) problem).getCause()) - .withDetail(problem.getDetail()) - .withInstance(problem.getInstance()); - problem.getParameters().forEach(builder::with); - if (!problem.getParameters().containsKey(MESSAGE_KEY) && problem.getStatus() != null) { - builder.with(MESSAGE_KEY, "error.http." + problem.getStatus().getStatusCode()); - } - } - return new ResponseEntity<>(builder.build(), entity.getHeaders(), entity.getStatusCode()); - } - - @Override - public ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, @Nonnull NativeWebRequest request) { - BindingResult result = ex.getBindingResult(); - List fieldErrors = result.getFieldErrors().stream() - .map(f -> new FieldErrorVM(f.getObjectName(), f.getField(), f.getCode())) - .collect(Collectors.toList()); - - Problem problem = Problem.builder() - .withType(ErrorConstants.CONSTRAINT_VIOLATION_TYPE) - .withTitle("Method argument not valid") - .withStatus(defaultConstraintViolationStatus()) - .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION) - .with(FIELD_ERRORS_KEY, fieldErrors) - .build(); - return create(ex, problem, request); - } - - @ExceptionHandler - public ResponseEntity handleNoSuchElementException(NoSuchElementException ex, NativeWebRequest request) { - Problem problem = Problem.builder() - .withStatus(Status.NOT_FOUND) - .with(MESSAGE_KEY, ErrorConstants.ENTITY_NOT_FOUND_TYPE) - .build(); - return create(ex, problem, request); - } - - @ExceptionHandler - public ResponseEntity handleBadRequestAlertException(BadRequestAlertException ex, NativeWebRequest request) { - return create(ex, request, HeaderUtil.createFailureAlert(ex.getEntityName(), ex.getErrorKey(), ex.getMessage())); - } - - @ExceptionHandler - public ResponseEntity handleConcurrencyFailure(ConcurrencyFailureException ex, NativeWebRequest request) { - Problem problem = Problem.builder() - .withStatus(Status.CONFLICT) - .with(MESSAGE_KEY, ErrorConstants.ERR_CONCURRENCY_FAILURE) - .build(); - return create(ex, problem, request); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/FieldErrorVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/FieldErrorVM.java deleted file mode 100644 index 349f548850..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/FieldErrorVM.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import java.io.Serializable; - -public class FieldErrorVM implements Serializable { - - private static final long serialVersionUID = 1L; - - private final String objectName; - - private final String field; - - private final String message; - - public FieldErrorVM(String dto, String field, String message) { - this.objectName = dto; - this.field = field; - this.message = message; - } - - public String getObjectName() { - return objectName; - } - - public String getField() { - return field; - } - - public String getMessage() { - return message; - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InternalServerErrorException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InternalServerErrorException.java deleted file mode 100644 index 13e128237b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InternalServerErrorException.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -/** - * Simple exception with a message, that returns an Internal Server Error code. - */ -public class InternalServerErrorException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - public InternalServerErrorException(String message) { - super(ErrorConstants.DEFAULT_TYPE, message, Status.INTERNAL_SERVER_ERROR); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InvalidPasswordException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InvalidPasswordException.java deleted file mode 100644 index 6bb91247ff..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InvalidPasswordException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -public class InvalidPasswordException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - public InvalidPasswordException() { - super(ErrorConstants.INVALID_PASSWORD_TYPE, "Incorrect password", Status.BAD_REQUEST); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/LoginAlreadyUsedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/LoginAlreadyUsedException.java deleted file mode 100644 index 987a94193d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/LoginAlreadyUsedException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -public class LoginAlreadyUsedException extends BadRequestAlertException { - - private static final long serialVersionUID = 1L; - - public LoginAlreadyUsedException() { - super(ErrorConstants.LOGIN_ALREADY_USED_TYPE, "Login name already used!", "userManagement", "userexists"); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/package-info.java deleted file mode 100644 index 7f57af4429..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Specific errors used with Zalando's "problem-spring-web" library. - * - * More information on https://github.com/zalando/problem-spring-web - */ -package com.baeldung.jhipster5.web.rest.errors; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/package-info.java deleted file mode 100644 index 75bf6840f6..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring MVC REST controllers. - */ -package com.baeldung.jhipster5.web.rest; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/HeaderUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/HeaderUtil.java deleted file mode 100644 index 91fdd68261..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/HeaderUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.jhipster5.web.rest.util; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpHeaders; - -/** - * Utility class for HTTP headers creation. - */ -public final class HeaderUtil { - - private static final Logger log = LoggerFactory.getLogger(HeaderUtil.class); - - private static final String APPLICATION_NAME = "bookstoreApp"; - - private HeaderUtil() { - } - - public static HttpHeaders createAlert(String message, String param) { - HttpHeaders headers = new HttpHeaders(); - headers.add("X-" + APPLICATION_NAME + "-alert", message); - headers.add("X-" + APPLICATION_NAME + "-params", param); - return headers; - } - - public static HttpHeaders createEntityCreationAlert(String entityName, String param) { - return createAlert("A new " + entityName + " is created with identifier " + param, param); - } - - public static HttpHeaders createEntityUpdateAlert(String entityName, String param) { - return createAlert("A " + entityName + " is updated with identifier " + param, param); - } - - public static HttpHeaders createEntityDeletionAlert(String entityName, String param) { - return createAlert("A " + entityName + " is deleted with identifier " + param, param); - } - - public static HttpHeaders createFailureAlert(String entityName, String errorKey, String defaultMessage) { - log.error("Entity processing failed, {}", defaultMessage); - HttpHeaders headers = new HttpHeaders(); - headers.add("X-" + APPLICATION_NAME + "-error", defaultMessage); - headers.add("X-" + APPLICATION_NAME + "-params", entityName); - return headers; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/PaginationUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/PaginationUtil.java deleted file mode 100644 index 9928dbe171..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/PaginationUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.jhipster5.web.rest.util; - -import org.springframework.data.domain.Page; -import org.springframework.http.HttpHeaders; -import org.springframework.web.util.UriComponentsBuilder; - -/** - * Utility class for handling pagination. - * - *

- * Pagination uses the same principles as the GitHub API, - * and follow RFC 5988 (Link header). - */ -public final class PaginationUtil { - - private PaginationUtil() { - } - - public static HttpHeaders generatePaginationHttpHeaders(Page page, String baseUrl) { - - HttpHeaders headers = new HttpHeaders(); - headers.add("X-Total-Count", Long.toString(page.getTotalElements())); - String link = ""; - if ((page.getNumber() + 1) < page.getTotalPages()) { - link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + ">; rel=\"next\","; - } - // prev link - if ((page.getNumber()) > 0) { - link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + ">; rel=\"prev\","; - } - // last and first link - int lastPage = 0; - if (page.getTotalPages() > 0) { - lastPage = page.getTotalPages() - 1; - } - link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + ">; rel=\"last\","; - link += "<" + generateUri(baseUrl, 0, page.getSize()) + ">; rel=\"first\""; - headers.add(HttpHeaders.LINK, link); - return headers; - } - - private static String generateUri(String baseUrl, int page, int size) { - return UriComponentsBuilder.fromUriString(baseUrl).queryParam("page", page).queryParam("size", size).toUriString(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/KeyAndPasswordVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/KeyAndPasswordVM.java deleted file mode 100644 index 840fa02cfc..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/KeyAndPasswordVM.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -/** - * View Model object for storing the user's key and password. - */ -public class KeyAndPasswordVM { - - private String key; - - private String newPassword; - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getNewPassword() { - return newPassword; - } - - public void setNewPassword(String newPassword) { - this.newPassword = newPassword; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoggerVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoggerVM.java deleted file mode 100644 index 952e7df298..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoggerVM.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -import ch.qos.logback.classic.Logger; - -/** - * View Model object for storing a Logback logger. - */ -public class LoggerVM { - - private String name; - - private String level; - - public LoggerVM(Logger logger) { - this.name = logger.getName(); - this.level = logger.getEffectiveLevel().toString(); - } - - public LoggerVM() { - // Empty public constructor used by Jackson. - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getLevel() { - return level; - } - - public void setLevel(String level) { - this.level = level; - } - - @Override - public String toString() { - return "LoggerVM{" + - "name='" + name + '\'' + - ", level='" + level + '\'' + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoginVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoginVM.java deleted file mode 100644 index 8fc119ab69..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoginVM.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -/** - * View Model object for storing a user's credentials. - */ -public class LoginVM { - - @NotNull - @Size(min = 1, max = 50) - private String username; - - @NotNull - @Size(min = ManagedUserVM.PASSWORD_MIN_LENGTH, max = ManagedUserVM.PASSWORD_MAX_LENGTH) - private String password; - - private Boolean rememberMe; - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public Boolean isRememberMe() { - return rememberMe; - } - - public void setRememberMe(Boolean rememberMe) { - this.rememberMe = rememberMe; - } - - @Override - public String toString() { - return "LoginVM{" + - "username='" + username + '\'' + - ", rememberMe=" + rememberMe + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/ManagedUserVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/ManagedUserVM.java deleted file mode 100644 index 314577c456..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/ManagedUserVM.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -import com.baeldung.jhipster5.service.dto.UserDTO; -import javax.validation.constraints.Size; - -/** - * View Model extending the UserDTO, which is meant to be used in the user management UI. - */ -public class ManagedUserVM extends UserDTO { - - public static final int PASSWORD_MIN_LENGTH = 4; - - public static final int PASSWORD_MAX_LENGTH = 100; - - @Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH) - private String password; - - public ManagedUserVM() { - // Empty constructor needed for Jackson. - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - @Override - public String toString() { - return "ManagedUserVM{" + - "} " + super.toString(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/package-info.java deleted file mode 100644 index ff58799037..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * View Models used by Spring MVC REST controllers. - */ -package com.baeldung.jhipster5.web.rest.vm; diff --git a/jhipster-5/bookstore-monolith/src/main/jib/entrypoint.sh b/jhipster-5/bookstore-monolith/src/main/jib/entrypoint.sh deleted file mode 100644 index b3c4541011..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/jib/entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP} -exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "com.baeldung.jhipster5.BookstoreApp" "$@" diff --git a/jhipster-5/bookstore-monolith/src/main/resources/.h2.server.properties b/jhipster-5/bookstore-monolith/src/main/resources/.h2.server.properties deleted file mode 100644 index 99767b3a8a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/.h2.server.properties +++ /dev/null @@ -1,5 +0,0 @@ -#H2 Server Properties -0=JHipster H2 (Memory)|org.h2.Driver|jdbc\:h2\:mem\:bookstore|Bookstore -webAllowOthers=true -webPort=8082 -webSSL=false diff --git a/jhipster-5/bookstore-monolith/src/main/resources/banner.txt b/jhipster-5/bookstore-monolith/src/main/resources/banner.txt deleted file mode 100644 index e0bc55aaff..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/banner.txt +++ /dev/null @@ -1,10 +0,0 @@ - - ${AnsiColor.GREEN} ██╗${AnsiColor.RED} ██╗ ██╗ ████████╗ ███████╗ ██████╗ ████████╗ ████████╗ ███████╗ - ${AnsiColor.GREEN} ██║${AnsiColor.RED} ██║ ██║ ╚══██╔══╝ ██╔═══██╗ ██╔════╝ ╚══██╔══╝ ██╔═════╝ ██╔═══██╗ - ${AnsiColor.GREEN} ██║${AnsiColor.RED} ████████║ ██║ ███████╔╝ ╚█████╗ ██║ ██████╗ ███████╔╝ - ${AnsiColor.GREEN}██╗ ██║${AnsiColor.RED} ██╔═══██║ ██║ ██╔════╝ ╚═══██╗ ██║ ██╔═══╝ ██╔══██║ - ${AnsiColor.GREEN}╚██████╔╝${AnsiColor.RED} ██║ ██║ ████████╗ ██║ ██████╔╝ ██║ ████████╗ ██║ ╚██╗ - ${AnsiColor.GREEN} ╚═════╝ ${AnsiColor.RED} ╚═╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═╝ - -${AnsiColor.BRIGHT_BLUE}:: JHipster 🤓 :: Running Spring Boot ${spring-boot.version} :: -:: https://www.jhipster.tech ::${AnsiColor.DEFAULT} diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application-dev.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application-dev.yml deleted file mode 100644 index 64742feb45..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,122 +0,0 @@ -# =================================================================== -# Spring Boot configuration for the "dev" profile. -# -# This configuration overrides the application.yml file. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - -logging: - level: - ROOT: DEBUG - io.github.jhipster: DEBUG - com.baeldung.jhipster5: DEBUG - -spring: - profiles: - active: dev - include: - - swagger - # Uncomment to activate TLS for the dev profile - #- tls - devtools: - restart: - enabled: true - additional-exclude: .h2.server.properties - livereload: - enabled: false # we use Webpack dev server + BrowserSync for livereload - jackson: - serialization: - indent-output: true - datasource: - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:h2:mem:bookstore;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE - username: Bookstore - password: - hikari: - poolName: Hikari - auto-commit: false - h2: - console: - enabled: false - jpa: - database-platform: io.github.jhipster.domain.util.FixedH2Dialect - database: H2 - show-sql: true - properties: - hibernate.id.new_generator_mappings: true - hibernate.connection.provider_disables_autocommit: true - hibernate.cache.use_second_level_cache: false - hibernate.cache.use_query_cache: false - hibernate.generate_statistics: true - liquibase: - contexts: dev - mail: - host: localhost - port: 25 - username: - password: - messages: - cache-duration: PT1S # 1 second, see the ISO 8601 standard - thymeleaf: - cache: false - -server: - port: 8080 - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - http: - version: V_1_1 # To use HTTP/2 you will need to activate TLS (see application-tls.yml) - # CORS is only enabled by default with the "dev" profile, so BrowserSync can access the API - cors: - allowed-origins: "*" - allowed-methods: "*" - allowed-headers: "*" - exposed-headers: "Authorization,Link,X-Total-Count" - allow-credentials: true - max-age: 1800 - security: - authentication: - jwt: - # This token must be encoded using Base64 and be at least 256 bits long (you can type `openssl rand -base64 64` on your command line to generate a 512 bits one) - base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= - # Token is valid 24 hours - token-validity-in-seconds: 86400 - token-validity-in-seconds-for-remember-me: 2592000 - mail: # specific JHipster mail property, for standard properties see MailProperties - from: Bookstore@localhost - base-url: http://127.0.0.1:8080 - metrics: - logs: # Reports metrics in the logs - enabled: false - report-frequency: 60 # in seconds - logging: - logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration - enabled: false - host: localhost - port: 5000 - queue-size: 512 - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application-prod.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application-prod.yml deleted file mode 100644 index d698099fac..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,133 +0,0 @@ -# =================================================================== -# Spring Boot configuration for the "prod" profile. -# -# This configuration overrides the application.yml file. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - -logging: - level: - ROOT: INFO - com.baeldung.jhipster5: INFO - io.github.jhipster: INFO - -spring: - devtools: - restart: - enabled: false - livereload: - enabled: false - datasource: - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:mysql://localhost:3306/Bookstore?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC - username: root - password: - hikari: - poolName: Hikari - auto-commit: false - data-source-properties: - cachePrepStmts: true - prepStmtCacheSize: 250 - prepStmtCacheSqlLimit: 2048 - useServerPrepStmts: true - jpa: - database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - database: MYSQL - show-sql: false - properties: - hibernate.id.new_generator_mappings: true - hibernate.connection.provider_disables_autocommit: true - hibernate.cache.use_second_level_cache: false - hibernate.cache.use_query_cache: false - hibernate.generate_statistics: true - liquibase: - contexts: prod - mail: - host: localhost - port: 25 - username: - password: - thymeleaf: - cache: true - -# =================================================================== -# To enable TLS in production, generate a certificate using: -# keytool -genkey -alias bookstore -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 -# -# You can also use Let's Encrypt: -# https://maximilian-boehm.com/hp2121/Create-a-Java-Keystore-JKS-from-Let-s-Encrypt-Certificates.htm -# -# Then, modify the server.ssl properties so your "server" configuration looks like: -# -# server: -# port: 443 -# ssl: -# key-store: classpath:config/tls/keystore.p12 -# key-store-password: password -# key-store-type: PKCS12 -# key-alias: bookstore -# # The ciphers suite enforce the security by deactivating some old and deprecated SSL cipher, this list was tested against SSL Labs (https://www.ssllabs.com/ssltest/) -# ciphers: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 ,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 ,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,TLS_RSA_WITH_CAMELLIA_128_CBC_SHA -# =================================================================== -server: - port: 8080 - compression: - enabled: true - mime-types: text/html,text/xml,text/plain,text/css, application/javascript, application/json - min-response-size: 1024 - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - http: - version: V_1_1 # To use HTTP/2 you will need SSL support (see above the "server.ssl" configuration) - cache: # Used by the CachingHttpHeadersFilter - timeToLiveInDays: 1461 - security: - authentication: - jwt: - # This token must be encoded using Base64 and be at least 256 bits long (you can type `openssl rand -base64 64` on your command line to generate a 512 bits one) - # As this is the PRODUCTION configuration, you MUST change the default key, and store it securely: - # - In the JHipster Registry (which includes a Spring Cloud Config server) - # - In a separate `application-prod.yml` file, in the same folder as your executable WAR file - # - In the `JHIPSTER_SECURITY_AUTHENTICATION_JWT_BASE64_SECRET` environment variable - base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= - # Token is valid 24 hours - token-validity-in-seconds: 86400 - token-validity-in-seconds-for-remember-me: 2592000 - mail: # specific JHipster mail property, for standard properties see MailProperties - from: Bookstore@localhost - base-url: http://my-server-url-to-change # Modify according to your server's URL - metrics: - logs: # Reports metrics in the logs - enabled: false - report-frequency: 60 # in seconds - logging: - logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration - enabled: false - host: localhost - port: 5000 - queue-size: 512 - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application-tls.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application-tls.yml deleted file mode 100644 index c4e0565cc7..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application-tls.yml +++ /dev/null @@ -1,20 +0,0 @@ -# =================================================================== -# Activate this profile to enable TLS and HTTP/2. -# -# JHipster has generated a self-signed certificate, which will be used to encrypt traffic. -# As your browser will not understand this certificate, you will need to import it. -# -# Another (easiest) solution with Chrome is to enable the "allow-insecure-localhost" flag -# at chrome://flags/#allow-insecure-localhost -# =================================================================== -server: - ssl: - key-store: classpath:config/tls/keystore.p12 - key-store-password: password - key-store-type: PKCS12 - key-alias: selfsigned - ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - enabled-protocols: TLSv1.2 -jhipster: - http: - version: V_2_0 diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application.yml deleted file mode 100644 index 5b28b7f00d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application.yml +++ /dev/null @@ -1,140 +0,0 @@ -# =================================================================== -# Spring Boot configuration. -# -# This configuration will be overridden by the Spring profile you use, -# for example application-dev.yml if you use the "dev" profile. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - -management: - endpoints: - web: - base-path: /management - exposure: - include: ["configprops", "env", "health", "info", "threaddump", "logfile", "jhi-metrics", "prometheus" ] - endpoint: - health: - show-details: when-authorized - jhi-metrics: - enabled: true - info: - git: - mode: full - health: - mail: - enabled: false # When using the MailService, configure an SMTP server and set this to true - metrics: - export: - # Prometheus is the default metrics backend - prometheus: - enabled: true - step: 60 - binders: - jvm: - enabled: true - processor: - enabled: true - uptime: - enabled: true - logback: - enabled: true - files: - enabled: true - integration: - enabled: true - distribution: - percentiles-histogram: - all: true - percentiles: - all: 0, 0.5, 0.75, 0.95, 0.99, 1.0 - web: - server: - auto-time-requests: true - -spring: - application: - name: Bookstore - profiles: - # The commented value for `active` can be replaced with valid Spring profiles to load. - # Otherwise, it will be filled in by maven when building the WAR file - # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS` - active: #spring.profiles.active# - jpa: - open-in-view: false - properties: - hibernate.jdbc.time_zone: UTC - hibernate: - ddl-auto: none - naming: - physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy - implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy - messages: - basename: i18n/messages - mvc: - favicon: - enabled: false - thymeleaf: - mode: HTML - -server: - servlet: - session: - cookie: - http-only: true - -# Properties to be exposed on the /info management endpoint -info: - # Comma separated list of profiles that will trigger the ribbon to show - display-ribbon-on-profiles: "dev" - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - async: - core-pool-size: 2 - max-pool-size: 50 - queue-capacity: 10000 - # By default CORS is disabled. Uncomment to enable. - #cors: - #allowed-origins: "*" - #allowed-methods: "*" - #allowed-headers: "*" - #exposed-headers: "Authorization,Link,X-Total-Count" - #allow-credentials: true - #max-age: 1800 - mail: - from: Bookstore@localhost - swagger: - default-include-pattern: /api/.* - title: Bookstore API - description: Bookstore API documentation - version: 0.0.1 - terms-of-service-url: - contact-name: - contact-url: - contact-email: - license: - license-url: - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv deleted file mode 100644 index af5c6dfa18..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv +++ /dev/null @@ -1,3 +0,0 @@ -name -ROLE_ADMIN -ROLE_USER diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml deleted file mode 100644 index dd4b01d487..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml deleted file mode 100644 index f040387cf1..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/master.xml b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/master.xml deleted file mode 100644 index e045ee0100..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/master.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users.csv b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users.csv deleted file mode 100644 index b25922b699..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users.csv +++ /dev/null @@ -1,5 +0,0 @@ -id;login;password_hash;first_name;last_name;email;image_url;activated;lang_key;created_by;last_modified_by -1;system;$2a$10$mE.qmcV0mFU5NcKh73TZx.z4ueI/.bDWbj0T1BYyqP481kGGarKLG;System;System;system@localhost;;true;en;system;system -2;anonymoususer;$2a$10$j8S5d7Sr7.8VTOYNviDPOeWX8KcYILUVJBsYV83Y5NtECayypx9lO;Anonymous;User;anonymous@localhost;;true;en;system;system -3;admin;$2a$10$gSAhZrxMllrbgj/kkK9UceBPpChGWJA7SYIb1Mqo.n5aNLq1/oRrC;Administrator;Administrator;admin@localhost;;true;en;system;system -4;user;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;User;User;user@localhost;;true;en;system;system diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv deleted file mode 100644 index 06c5feeeea..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv +++ /dev/null @@ -1,6 +0,0 @@ -user_id;authority_name -1;ROLE_ADMIN -1;ROLE_USER -3;ROLE_ADMIN -3;ROLE_USER -4;ROLE_USER diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/tls/keystore.p12 b/jhipster-5/bookstore-monolith/src/main/resources/config/tls/keystore.p12 deleted file mode 100644 index 364fad7435..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/resources/config/tls/keystore.p12 and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/resources/i18n/messages.properties b/jhipster-5/bookstore-monolith/src/main/resources/i18n/messages.properties deleted file mode 100644 index 52a60093c5..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/i18n/messages.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Error page -error.title=Your request cannot be processed -error.subtitle=Sorry, an error has occurred. -error.status=Status: -error.message=Message: - -# Activation email -email.activation.title=Bookstore account activation -email.activation.greeting=Dear {0} -email.activation.text1=Your Bookstore account has been created, please click on the URL below to activate it: -email.activation.text2=Regards, -email.signature=Bookstore Team. - -# Creation email -email.creation.text1=Your Bookstore account has been created, please click on the URL below to access it: - -# Reset email -email.reset.title=Bookstore password reset -email.reset.greeting=Dear {0} -email.reset.text1=For your Bookstore account a password reset was requested, please click on the URL below to reset it: -email.reset.text2=Regards, diff --git a/jhipster-5/bookstore-monolith/src/main/resources/logback-spring.xml b/jhipster-5/bookstore-monolith/src/main/resources/logback-spring.xml deleted file mode 100644 index 4aa548af35..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/error.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/error.html deleted file mode 100644 index 08616bcf1e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/error.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - Your request cannot be processed - - - -

-

Your request cannot be processed :(

- -

Sorry, an error has occurred.

- - Status:  ()
- - Message: 
-
- - - -
- - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html deleted file mode 100644 index cb021d8e6a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - JHipster activation - - - - -

- Dear -

-

- Your JHipster account has been created, please click on the URL below to activate it: -

-

- Activation link -

-

- Regards, -
- JHipster. -

- - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html deleted file mode 100644 index dc0cff5883..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - JHipster creation - - - - -

- Dear -

-

- Your JHipster account has been created, please click on the URL below to access it: -

-

- Login link -

-

- Regards, -
- JHipster. -

- - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html deleted file mode 100644 index f44511265b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - JHipster password reset - - - - -

- Dear -

-

- For your JHipster account a password reset was requested, please click on the URL below to reset it: -

-

- Login link -

-

- Regards, -
- JHipster. -

- - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/404.html b/jhipster-5/bookstore-monolith/src/main/webapp/404.html deleted file mode 100644 index 3fdc0bee1a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/404.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Page Not Found - - - - - -

Page Not Found

-

Sorry, but the page you were trying to view does not exist.

- - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.module.ts deleted file mode 100644 index a167cab1c2..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { BookstoreSharedModule } from 'app/shared'; - -import { - PasswordStrengthBarComponent, - RegisterComponent, - ActivateComponent, - PasswordComponent, - PasswordResetInitComponent, - PasswordResetFinishComponent, - SettingsComponent, - accountState -} from './'; - -@NgModule({ - imports: [BookstoreSharedModule, RouterModule.forChild(accountState)], - declarations: [ - ActivateComponent, - RegisterComponent, - PasswordComponent, - PasswordStrengthBarComponent, - PasswordResetInitComponent, - PasswordResetFinishComponent, - SettingsComponent - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreAccountModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts deleted file mode 100644 index cba5d40716..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Routes } from '@angular/router'; - -import { settingsRoute } from './'; - -const ACCOUNT_ROUTES = [settingsRoute]; - -export const accountState: Routes = [ - { - path: '', - children: ACCOUNT_ROUTES - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html deleted file mode 100644 index c7078ede86..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html +++ /dev/null @@ -1,17 +0,0 @@ -
-
-
-

Activation

- -
- Your user account has been activated. Please - sign in. -
- -
- Your user could not be activated. Please use the registration form to sign up. -
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts deleted file mode 100644 index 5c398073c3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { ActivatedRoute } from '@angular/router'; - -import { LoginModalService } from 'app/core'; -import { ActivateService } from './activate.service'; - -@Component({ - selector: 'jhi-activate', - templateUrl: './activate.component.html' -}) -export class ActivateComponent implements OnInit { - error: string; - success: string; - modalRef: NgbModalRef; - - constructor(private activateService: ActivateService, private loginModalService: LoginModalService, private route: ActivatedRoute) {} - - ngOnInit() { - this.route.queryParams.subscribe(params => { - this.activateService.get(params['key']).subscribe( - () => { - this.error = null; - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - }); - } - - login() { - this.modalRef = this.loginModalService.open(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts deleted file mode 100644 index b415b17a18..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { ActivateComponent } from './activate.component'; - -export const activateRoute: Route = { - path: 'activate', - component: ActivateComponent, - data: { - authorities: [], - pageTitle: 'Activation' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts deleted file mode 100644 index adade9efad..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpParams } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class ActivateService { - constructor(private http: HttpClient) {} - - get(key: string): Observable { - return this.http.get(SERVER_API_URL + 'api/activate', { - params: new HttpParams().set('key', key) - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/index.ts deleted file mode 100644 index aeada0551c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -export * from './activate/activate.component'; -export * from './activate/activate.service'; -export * from './activate/activate.route'; -export * from './password/password.component'; -export * from './password/password-strength-bar.component'; -export * from './password/password.service'; -export * from './password/password.route'; -export * from './password-reset/finish/password-reset-finish.component'; -export * from './password-reset/finish/password-reset-finish.service'; -export * from './password-reset/finish/password-reset-finish.route'; -export * from './password-reset/init/password-reset-init.component'; -export * from './password-reset/init/password-reset-init.service'; -export * from './password-reset/init/password-reset-init.route'; -export * from './register/register.component'; -export * from './register/register.service'; -export * from './register/register.route'; -export * from './settings/settings.component'; -export * from './settings/settings.route'; -export * from './account.route'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html deleted file mode 100644 index 6d6baea694..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html +++ /dev/null @@ -1,77 +0,0 @@ -
-
-
-

Reset password

- -
- The password reset key is missing. -
- -
-

Choose a new password

-
- -
-

Your password couldn't be reset. Remember a password request is only valid for 24 hours.

-
- -

- Your password has been reset. Please - sign in. -

- -
- The password and its confirmation do not match! -
- -
-
-
- - -
- - Your password is required. - - - Your password is required to be at least 4 characters. - - - Your password cannot be longer than 50 characters. - -
- -
- -
- - -
- - Your password confirmation is required. - - - Your password confirmation is required to be at least 4 characters. - - - Your password confirmation cannot be longer than 50 characters. - -
-
- -
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts deleted file mode 100644 index 72aac25c96..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { ActivatedRoute } from '@angular/router'; - -import { LoginModalService } from 'app/core'; -import { PasswordResetFinishService } from './password-reset-finish.service'; - -@Component({ - selector: 'jhi-password-reset-finish', - templateUrl: './password-reset-finish.component.html' -}) -export class PasswordResetFinishComponent implements OnInit, AfterViewInit { - confirmPassword: string; - doNotMatch: string; - error: string; - keyMissing: boolean; - resetAccount: any; - success: string; - modalRef: NgbModalRef; - key: string; - - constructor( - private passwordResetFinishService: PasswordResetFinishService, - private loginModalService: LoginModalService, - private route: ActivatedRoute, - private elementRef: ElementRef, - private renderer: Renderer - ) {} - - ngOnInit() { - this.route.queryParams.subscribe(params => { - this.key = params['key']; - }); - this.resetAccount = {}; - this.keyMissing = !this.key; - } - - ngAfterViewInit() { - if (this.elementRef.nativeElement.querySelector('#password') != null) { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#password'), 'focus', []); - } - } - - finishReset() { - this.doNotMatch = null; - this.error = null; - if (this.resetAccount.password !== this.confirmPassword) { - this.doNotMatch = 'ERROR'; - } else { - this.passwordResetFinishService.save({ key: this.key, newPassword: this.resetAccount.password }).subscribe( - () => { - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - } - } - - login() { - this.modalRef = this.loginModalService.open(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts deleted file mode 100644 index a09cba9377..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { PasswordResetFinishComponent } from './password-reset-finish.component'; - -export const passwordResetFinishRoute: Route = { - path: 'reset/finish', - component: PasswordResetFinishComponent, - data: { - authorities: [], - pageTitle: 'Password' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts deleted file mode 100644 index 706bdaa5b1..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class PasswordResetFinishService { - constructor(private http: HttpClient) {} - - save(keyAndPassword: any): Observable { - return this.http.post(SERVER_API_URL + 'api/account/reset-password/finish', keyAndPassword); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html deleted file mode 100644 index 7fe7b0bdec..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html +++ /dev/null @@ -1,46 +0,0 @@ -
-
-
-

Reset your password

- -
- Email address isn't registered! Please check and try again. -
- -
-

Enter the email address you used to register.

-
- -
-

Check your emails for details on how to reset your password.

-
- -
-
- - -
- - Your email is required. - - - Your email is invalid. - - - Your email is required to be at least 5 characters. - - - Your email cannot be longer than 100 characters. - -
-
- -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts deleted file mode 100644 index e32617341c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; -import { PasswordResetInitService } from './password-reset-init.service'; - -@Component({ - selector: 'jhi-password-reset-init', - templateUrl: './password-reset-init.component.html' -}) -export class PasswordResetInitComponent implements OnInit, AfterViewInit { - error: string; - errorEmailNotExists: string; - resetAccount: any; - success: string; - - constructor(private passwordResetInitService: PasswordResetInitService, private elementRef: ElementRef, private renderer: Renderer) {} - - ngOnInit() { - this.resetAccount = {}; - } - - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#email'), 'focus', []); - } - - requestReset() { - this.error = null; - this.errorEmailNotExists = null; - - this.passwordResetInitService.save(this.resetAccount.email).subscribe( - () => { - this.success = 'OK'; - }, - response => { - this.success = null; - if (response.status === 400 && response.error.type === EMAIL_NOT_FOUND_TYPE) { - this.errorEmailNotExists = 'ERROR'; - } else { - this.error = 'ERROR'; - } - } - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts deleted file mode 100644 index a1708c98b3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { PasswordResetInitComponent } from './password-reset-init.component'; - -export const passwordResetInitRoute: Route = { - path: 'reset/request', - component: PasswordResetInitComponent, - data: { - authorities: [], - pageTitle: 'Password' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts deleted file mode 100644 index c24ccf94d2..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class PasswordResetInitService { - constructor(private http: HttpClient) {} - - save(mail: string): Observable { - return this.http.post(SERVER_API_URL + 'api/account/reset-password/init', mail); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts deleted file mode 100644 index 4159fde882..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Component, ElementRef, Input, Renderer } from '@angular/core'; - -@Component({ - selector: 'jhi-password-strength-bar', - template: ` -
- Password strength: -
    -
  • -
  • -
  • -
  • -
  • -
-
- `, - styleUrls: ['password-strength-bar.scss'] -}) -export class PasswordStrengthBarComponent { - colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0']; - - constructor(private renderer: Renderer, private elementRef: ElementRef) {} - - measureStrength(p: string): number { - let force = 0; - const regex = /[$-/:-?{-~!"^_`\[\]]/g; // " - const lowerLetters = /[a-z]+/.test(p); - const upperLetters = /[A-Z]+/.test(p); - const numbers = /[0-9]+/.test(p); - const symbols = regex.test(p); - - const flags = [lowerLetters, upperLetters, numbers, symbols]; - const passedMatches = flags.filter((isMatchedFlag: boolean) => { - return isMatchedFlag === true; - }).length; - - force += 2 * p.length + (p.length >= 10 ? 1 : 0); - force += passedMatches * 10; - - // penalty (short password) - force = p.length <= 6 ? Math.min(force, 10) : force; - - // penalty (poor variety of characters) - force = passedMatches === 1 ? Math.min(force, 10) : force; - force = passedMatches === 2 ? Math.min(force, 20) : force; - force = passedMatches === 3 ? Math.min(force, 40) : force; - - return force; - } - - getColor(s: number): any { - let idx = 0; - if (s <= 10) { - idx = 0; - } else if (s <= 20) { - idx = 1; - } else if (s <= 30) { - idx = 2; - } else if (s <= 40) { - idx = 3; - } else { - idx = 4; - } - return { idx: idx + 1, col: this.colors[idx] }; - } - - @Input() - set passwordToCheck(password: string) { - if (password) { - const c = this.getColor(this.measureStrength(password)); - const element = this.elementRef.nativeElement; - if (element.className) { - this.renderer.setElementClass(element, element.className, false); - } - const lis = element.getElementsByTagName('li'); - for (let i = 0; i < lis.length; i++) { - if (i < c.idx) { - this.renderer.setElementStyle(lis[i], 'backgroundColor', c.col); - } else { - this.renderer.setElementStyle(lis[i], 'backgroundColor', '#DDD'); - } - } - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss deleted file mode 100644 index 9744b9b784..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* ========================================================================== -start Password strength bar style -========================================================================== */ -ul#strength { - display: inline; - list-style: none; - margin: 0; - margin-left: 15px; - padding: 0; - vertical-align: 2px; -} - -.point { - background: #ddd; - border-radius: 2px; - display: inline-block; - height: 5px; - margin-right: 1px; - width: 20px; - &:last-child { - margin: 0 !important; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.html deleted file mode 100644 index 79fb60c3bc..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.html +++ /dev/null @@ -1,77 +0,0 @@ -
-
-
-

Password for [{{account.login}}]

- -
- Password changed! -
-
- An error has occurred! The password could not be changed. -
- -
- The password and its confirmation do not match! -
- -
- -
- - -
- - Your password is required. - -
-
-
- - -
- - Your password is required. - - - Your password is required to be at least 4 characters. - - - Your password cannot be longer than 50 characters. - -
- -
-
- - -
- - Your confirmation password is required. - - - Your confirmation password is required to be at least 4 characters. - - - Your confirmation password cannot be longer than 50 characters. - -
-
- - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts deleted file mode 100644 index 3004effa57..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { AccountService } from 'app/core'; -import { PasswordService } from './password.service'; - -@Component({ - selector: 'jhi-password', - templateUrl: './password.component.html' -}) -export class PasswordComponent implements OnInit { - doNotMatch: string; - error: string; - success: string; - account: any; - currentPassword: string; - newPassword: string; - confirmPassword: string; - - constructor(private passwordService: PasswordService, private accountService: AccountService) {} - - ngOnInit() { - this.accountService.identity().then(account => { - this.account = account; - }); - } - - changePassword() { - if (this.newPassword !== this.confirmPassword) { - this.error = null; - this.success = null; - this.doNotMatch = 'ERROR'; - } else { - this.doNotMatch = null; - this.passwordService.save(this.newPassword, this.currentPassword).subscribe( - () => { - this.error = null; - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts deleted file mode 100644 index 4bb115fd44..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Route } from '@angular/router'; - -import { UserRouteAccessService } from 'app/core'; -import { PasswordComponent } from './password.component'; - -export const passwordRoute: Route = { - path: 'password', - component: PasswordComponent, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Password' - }, - canActivate: [UserRouteAccessService] -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts deleted file mode 100644 index 028df7b0e4..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class PasswordService { - constructor(private http: HttpClient) {} - - save(newPassword: string, currentPassword: string): Observable { - return this.http.post(SERVER_API_URL + 'api/account/change-password', { currentPassword, newPassword }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.html deleted file mode 100644 index 596f782828..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.html +++ /dev/null @@ -1,124 +0,0 @@ -
-
-
-

Registration

- -
- Registration saved! Please check your email for confirmation. -
- -
- Registration failed! Please try again later. -
- -
- Login name already registered! Please choose another one. -
- -
- Email is already in use! Please choose another one. -
- -
- The password and its confirmation do not match! -
-
-
-
-
-
-
- - -
- - Your username is required. - - - Your username is required to be at least 1 character. - - - Your username cannot be longer than 50 characters. - - - Your username can only contain letters and digits. - -
-
-
- - -
- - Your email is required. - - - Your email is invalid. - - - Your email is required to be at least 5 characters. - - - Your email cannot be longer than 100 characters. - -
-
-
- - -
- - Your password is required. - - - Your password is required to be at least 4 characters. - - - Your password cannot be longer than 50 characters. - -
- -
-
- - -
- - Your confirmation password is required. - - - Your confirmation password is required to be at least 4 characters. - - - Your confirmation password cannot be longer than 50 characters. - -
-
- - -
-

-
- If you want to - sign in, you can try the default accounts:
- Administrator (login="admin" and password="admin")
- User (login="user" and password="user").
-
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts deleted file mode 100644 index 85244d2970..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { HttpErrorResponse } from '@angular/common/http'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; -import { LoginModalService } from 'app/core'; -import { Register } from './register.service'; - -@Component({ - selector: 'jhi-register', - templateUrl: './register.component.html' -}) -export class RegisterComponent implements OnInit, AfterViewInit { - confirmPassword: string; - doNotMatch: string; - error: string; - errorEmailExists: string; - errorUserExists: string; - registerAccount: any; - success: boolean; - modalRef: NgbModalRef; - - constructor( - private loginModalService: LoginModalService, - private registerService: Register, - private elementRef: ElementRef, - private renderer: Renderer - ) {} - - ngOnInit() { - this.success = false; - this.registerAccount = {}; - } - - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#login'), 'focus', []); - } - - register() { - if (this.registerAccount.password !== this.confirmPassword) { - this.doNotMatch = 'ERROR'; - } else { - this.doNotMatch = null; - this.error = null; - this.errorUserExists = null; - this.errorEmailExists = null; - this.registerAccount.langKey = 'en'; - this.registerService.save(this.registerAccount).subscribe( - () => { - this.success = true; - }, - response => this.processError(response) - ); - } - } - - openLogin() { - this.modalRef = this.loginModalService.open(); - } - - private processError(response: HttpErrorResponse) { - this.success = null; - if (response.status === 400 && response.error.type === LOGIN_ALREADY_USED_TYPE) { - this.errorUserExists = 'ERROR'; - } else if (response.status === 400 && response.error.type === EMAIL_ALREADY_USED_TYPE) { - this.errorEmailExists = 'ERROR'; - } else { - this.error = 'ERROR'; - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts deleted file mode 100644 index 626cd32ff9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { RegisterComponent } from './register.component'; - -export const registerRoute: Route = { - path: 'register', - component: RegisterComponent, - data: { - authorities: [], - pageTitle: 'Registration' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts deleted file mode 100644 index dfe6f1da6a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class Register { - constructor(private http: HttpClient) {} - - save(account: any): Observable { - return this.http.post(SERVER_API_URL + 'api/register', account); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html deleted file mode 100644 index bae1bb67e6..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html +++ /dev/null @@ -1,80 +0,0 @@ -
-
-
-

User settings for [{{settingsAccount.login}}]

- -
- Settings saved! -
- - - -
- -
- - -
- - Your first name is required. - - - Your first name is required to be at least 1 character. - - - Your first name cannot be longer than 50 characters. - -
-
-
- - -
- - Your last name is required. - - - Your last name is required to be at least 1 character. - - - Your last name cannot be longer than 50 characters. - -
-
-
- - -
- - Your email is required. - - - Your email is invalid. - - - Your email is required to be at least 5 characters. - - - Your email cannot be longer than 100 characters. - -
-
- -
-
-
- -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts deleted file mode 100644 index 92afaca793..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { AccountService } from 'app/core'; - -@Component({ - selector: 'jhi-settings', - templateUrl: './settings.component.html' -}) -export class SettingsComponent implements OnInit { - error: string; - success: string; - settingsAccount: any; - languages: any[]; - - constructor(private accountService: AccountService) {} - - ngOnInit() { - this.accountService.identity().then(account => { - this.settingsAccount = this.copyAccount(account); - }); - } - - save() { - this.accountService.save(this.settingsAccount).subscribe( - () => { - this.error = null; - this.success = 'OK'; - this.accountService.identity(true).then(account => { - this.settingsAccount = this.copyAccount(account); - }); - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - } - - copyAccount(account) { - return { - activated: account.activated, - email: account.email, - firstName: account.firstName, - langKey: account.langKey, - lastName: account.lastName, - login: account.login, - imageUrl: account.imageUrl - }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts deleted file mode 100644 index 3c9cf18e15..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Route } from '@angular/router'; - -import { UserRouteAccessService } from 'app/core'; -import { SettingsComponent } from './settings.component'; - -export const settingsRoute: Route = { - path: 'settings', - component: SettingsComponent, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Settings' - }, - canActivate: [UserRouteAccessService] -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts deleted file mode 100644 index 4e46e0fe13..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { BookstoreSharedModule } from 'app/shared'; -/* jhipster-needle-add-admin-module-import - JHipster will add admin modules imports here */ - -import { - adminState, - AuditsComponent, - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - UserMgmtDeleteDialogComponent, - LogsComponent, - JhiMetricsMonitoringComponent, - JhiHealthModalComponent, - JhiHealthCheckComponent, - JhiConfigurationComponent, - JhiDocsComponent -} from './'; - -@NgModule({ - imports: [ - BookstoreSharedModule, - RouterModule.forChild(adminState) - /* jhipster-needle-add-admin-module - JHipster will add admin modules here */ - ], - declarations: [ - AuditsComponent, - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - UserMgmtDeleteDialogComponent, - LogsComponent, - JhiConfigurationComponent, - JhiHealthCheckComponent, - JhiHealthModalComponent, - JhiDocsComponent, - JhiMetricsMonitoringComponent - ], - entryComponents: [UserMgmtDeleteDialogComponent, JhiHealthModalComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreAdminModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts deleted file mode 100644 index 88c7e575f0..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Routes } from '@angular/router'; - -import { auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, metricsRoute, userMgmtRoute } from './'; - -import { UserRouteAccessService } from 'app/core'; - -const ADMIN_ROUTES = [auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, ...userMgmtRoute, metricsRoute]; - -export const adminState: Routes = [ - { - path: '', - data: { - authorities: ['ROLE_ADMIN'] - }, - canActivate: [UserRouteAccessService], - children: ADMIN_ROUTES - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts deleted file mode 100644 index a2506c4090..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class AuditData { - constructor(public remoteAddress: string, public sessionId: string) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts deleted file mode 100644 index 6497fb444e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { AuditData } from './audit-data.model'; - -export class Audit { - constructor(public data: AuditData, public principal: string, public timestamp: string, public type: string) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html deleted file mode 100644 index 38af44044a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html +++ /dev/null @@ -1,52 +0,0 @@ -
-

Audits

- -
-
-

Filter by date

-
-
- from -
- - -
- To -
- -
-
-
- -
- - - - - - - - - - - - - - - - - -
DateUserStateExtra data
{{audit.timestamp| date:'medium'}}{{audit.principal}}{{audit.type}} - {{audit.data.message}} - Remote Address {{audit.data.remoteAddress}} -
-
-
-
- -
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts deleted file mode 100644 index 21739275f2..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; -import { DatePipe } from '@angular/common'; -import { ActivatedRoute, Router } from '@angular/router'; -import { JhiParseLinks, JhiAlertService } from 'ng-jhipster'; - -import { ITEMS_PER_PAGE } from 'app/shared'; -import { Audit } from './audit.model'; -import { AuditsService } from './audits.service'; - -@Component({ - selector: 'jhi-audit', - templateUrl: './audits.component.html' -}) -export class AuditsComponent implements OnInit, OnDestroy { - audits: Audit[]; - fromDate: string; - itemsPerPage: any; - links: any; - page: number; - routeData: any; - predicate: any; - previousPage: any; - reverse: boolean; - toDate: string; - totalItems: number; - - constructor( - private auditsService: AuditsService, - private alertService: JhiAlertService, - private parseLinks: JhiParseLinks, - private activatedRoute: ActivatedRoute, - private datePipe: DatePipe, - private router: Router - ) { - this.itemsPerPage = ITEMS_PER_PAGE; - this.routeData = this.activatedRoute.data.subscribe(data => { - this.page = data['pagingParams'].page; - this.previousPage = data['pagingParams'].page; - this.reverse = data['pagingParams'].ascending; - this.predicate = data['pagingParams'].predicate; - }); - } - - ngOnInit() { - this.today(); - this.previousMonth(); - this.loadAll(); - } - - ngOnDestroy() { - this.routeData.unsubscribe(); - } - - previousMonth() { - const dateFormat = 'yyyy-MM-dd'; - let fromDate: Date = new Date(); - - if (fromDate.getMonth() === 0) { - fromDate = new Date(fromDate.getFullYear() - 1, 11, fromDate.getDate()); - } else { - fromDate = new Date(fromDate.getFullYear(), fromDate.getMonth() - 1, fromDate.getDate()); - } - - this.fromDate = this.datePipe.transform(fromDate, dateFormat); - } - - today() { - const dateFormat = 'yyyy-MM-dd'; - // Today + 1 day - needed if the current day must be included - const today: Date = new Date(); - today.setDate(today.getDate() + 1); - const date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); - this.toDate = this.datePipe.transform(date, dateFormat); - } - - loadAll() { - this.auditsService - .query({ - page: this.page - 1, - size: this.itemsPerPage, - sort: this.sort(), - fromDate: this.fromDate, - toDate: this.toDate - }) - .subscribe( - (res: HttpResponse) => this.onSuccess(res.body, res.headers), - (res: HttpResponse) => this.onError(res.body) - ); - } - - sort() { - const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; - if (this.predicate !== 'id') { - result.push('id'); - } - return result; - } - - loadPage(page: number) { - if (page !== this.previousPage) { - this.previousPage = page; - this.transition(); - } - } - - transition() { - this.router.navigate(['/admin/audits'], { - queryParams: { - page: this.page, - sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') - } - }); - this.loadAll(); - } - - private onSuccess(data, headers) { - this.links = this.parseLinks.parse(headers.get('link')); - this.totalItems = headers.get('X-Total-Count'); - this.audits = data; - } - - private onError(error) { - this.alertService.error(error.error, error.message, null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts deleted file mode 100644 index 87af5c6e8c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Route } from '@angular/router'; -import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; - -import { AuditsComponent } from './audits.component'; - -export const auditsRoute: Route = { - path: 'audits', - component: AuditsComponent, - resolve: { - pagingParams: JhiResolvePagingParams - }, - data: { - pageTitle: 'Audits', - defaultSort: 'auditEventDate,desc' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts deleted file mode 100644 index 78e8cca7e2..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { createRequestOption } from 'app/shared'; -import { SERVER_API_URL } from 'app/app.constants'; -import { Audit } from './audit.model'; - -@Injectable({ providedIn: 'root' }) -export class AuditsService { - constructor(private http: HttpClient) {} - - query(req: any): Observable> { - const params: HttpParams = createRequestOption(req); - params.set('fromDate', req.fromDate); - params.set('toDate', req.toDate); - - const requestURL = SERVER_API_URL + 'management/audits'; - - return this.http.get(requestURL, { - params, - observe: 'response' - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html deleted file mode 100644 index 02a4a96433..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html +++ /dev/null @@ -1,46 +0,0 @@ -
-

Configuration

- - Filter (by prefix) -

Spring configuration

- - - - - - - - - - - - - -
PrefixProperties
{{entry.prefix}} -
-
{{key}}
-
- {{entry.properties[key] | json}} -
-
-
-
-

{{key}}

- - - - - - - - - - - - - -
PropertyValue
{{item.key}} - {{item.val}} -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts deleted file mode 100644 index 6867210c91..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { JhiConfigurationService } from './configuration.service'; - -@Component({ - selector: 'jhi-configuration', - templateUrl: './configuration.component.html' -}) -export class JhiConfigurationComponent implements OnInit { - allConfiguration: any = null; - configuration: any = null; - configKeys: any[]; - filter: string; - orderProp: string; - reverse: boolean; - - constructor(private configurationService: JhiConfigurationService) { - this.configKeys = []; - this.filter = ''; - this.orderProp = 'prefix'; - this.reverse = false; - } - - keys(dict): Array { - return dict === undefined ? [] : Object.keys(dict); - } - - ngOnInit() { - this.configurationService.get().subscribe(configuration => { - this.configuration = configuration; - - for (const config of configuration) { - if (config.properties !== undefined) { - this.configKeys.push(Object.keys(config.properties)); - } - } - }); - - this.configurationService.getEnv().subscribe(configuration => { - this.allConfiguration = configuration; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts deleted file mode 100644 index f4ad9c3688..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiConfigurationComponent } from './configuration.component'; - -export const configurationRoute: Route = { - path: 'jhi-configuration', - component: JhiConfigurationComponent, - data: { - pageTitle: 'Configuration' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts deleted file mode 100644 index 5f9dfd491c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class JhiConfigurationService { - constructor(private http: HttpClient) {} - - get(): Observable { - return this.http.get(SERVER_API_URL + 'management/configprops', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any[] = []; - const propertiesObject = this.getConfigPropertiesObjects(res.body); - for (const key in propertiesObject) { - if (propertiesObject.hasOwnProperty(key)) { - properties.push(propertiesObject[key]); - } - } - - return properties.sort((propertyA, propertyB) => { - return propertyA.prefix === propertyB.prefix ? 0 : propertyA.prefix < propertyB.prefix ? -1 : 1; - }); - }) - ); - } - - getConfigPropertiesObjects(res: Object) { - // This code is for Spring Boot 2 - if (res['contexts'] !== undefined) { - for (const key in res['contexts']) { - // If the key is not bootstrap, it will be the ApplicationContext Id - // For default app, it is baseName - // For microservice, it is baseName-1 - if (!key.startsWith('bootstrap')) { - return res['contexts'][key]['beans']; - } - } - } - // by default, use the default ApplicationContext Id - return res['contexts']['Bookstore']['beans']; - } - - getEnv(): Observable { - return this.http.get(SERVER_API_URL + 'management/env', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any = {}; - const propertySources = res.body['propertySources']; - - for (const propertyObject of propertySources) { - const name = propertyObject['name']; - const detailProperties = propertyObject['properties']; - const vals: any[] = []; - for (const keyDetail in detailProperties) { - if (detailProperties.hasOwnProperty(keyDetail)) { - vals.push({ key: keyDetail, val: detailProperties[keyDetail]['value'] }); - } - } - properties[name] = vals; - } - return properties; - }) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html deleted file mode 100644 index 30efbbb93e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts deleted file mode 100644 index b338e7c3a6..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'jhi-docs', - templateUrl: './docs.component.html' -}) -export class JhiDocsComponent { - constructor() {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts deleted file mode 100644 index d7df51b935..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiDocsComponent } from './docs.component'; - -export const docsRoute: Route = { - path: 'docs', - component: JhiDocsComponent, - data: { - pageTitle: 'API' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html deleted file mode 100644 index efc125e3a0..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts deleted file mode 100644 index 28128bf321..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Component } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiHealthService } from './health.service'; - -@Component({ - selector: 'jhi-health-modal', - templateUrl: './health-modal.component.html' -}) -export class JhiHealthModalComponent { - currentHealth: any; - - constructor(private healthService: JhiHealthService, public activeModal: NgbActiveModal) {} - - baseName(name) { - return this.healthService.getBaseName(name); - } - - subSystemName(name) { - return this.healthService.getSubSystemName(name); - } - - readableValue(value: number) { - if (this.currentHealth.name === 'diskSpace') { - // Should display storage space in an human readable unit - const val = value / 1073741824; - if (val > 1) { - // Value - return val.toFixed(2) + ' GB'; - } else { - return (value / 1048576).toFixed(2) + ' MB'; - } - } - - if (typeof value === 'object') { - return JSON.stringify(value); - } else { - return value.toString(); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html deleted file mode 100644 index b314daa0ba..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html +++ /dev/null @@ -1,34 +0,0 @@ -
-

- Health Checks - -

-
- - - - - - - - - - - - - - - -
Service NameStatusDetails
{{ baseName(health.name) }} {{subSystemName(health.name)}} - - {{health.status}} - - - - - -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts deleted file mode 100644 index ada3ef62f4..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiHealthService } from './health.service'; -import { JhiHealthModalComponent } from './health-modal.component'; - -@Component({ - selector: 'jhi-health', - templateUrl: './health.component.html' -}) -export class JhiHealthCheckComponent implements OnInit { - healthData: any; - updatingHealth: boolean; - - constructor(private modalService: NgbModal, private healthService: JhiHealthService) {} - - ngOnInit() { - this.refresh(); - } - - baseName(name: string) { - return this.healthService.getBaseName(name); - } - - getBadgeClass(statusState) { - if (statusState === 'UP') { - return 'badge-success'; - } else { - return 'badge-danger'; - } - } - - refresh() { - this.updatingHealth = true; - - this.healthService.checkHealth().subscribe( - health => { - this.healthData = this.healthService.transformHealthData(health); - this.updatingHealth = false; - }, - error => { - if (error.status === 503) { - this.healthData = this.healthService.transformHealthData(error.error); - this.updatingHealth = false; - } - } - ); - } - - showHealth(health: any) { - const modalRef = this.modalService.open(JhiHealthModalComponent); - modalRef.componentInstance.currentHealth = health; - modalRef.result.then( - result => { - // Left blank intentionally, nothing to do here - }, - reason => { - // Left blank intentionally, nothing to do here - } - ); - } - - subSystemName(name: string) { - return this.healthService.getSubSystemName(name); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts deleted file mode 100644 index 0b67775651..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiHealthCheckComponent } from './health.component'; - -export const healthRoute: Route = { - path: 'jhi-health', - component: JhiHealthCheckComponent, - data: { - pageTitle: 'Health Checks' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts deleted file mode 100644 index 4c1b0e5ec8..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class JhiHealthService { - separator: string; - - constructor(private http: HttpClient) { - this.separator = '.'; - } - - checkHealth(): Observable { - return this.http.get(SERVER_API_URL + 'management/health'); - } - - transformHealthData(data): any { - const response = []; - this.flattenHealthData(response, null, data.details); - return response; - } - - getBaseName(name): string { - if (name) { - const split = name.split('.'); - return split[0]; - } - } - - getSubSystemName(name): string { - if (name) { - const split = name.split('.'); - split.splice(0, 1); - const remainder = split.join('.'); - return remainder ? ' - ' + remainder : ''; - } - } - - /* private methods */ - private addHealthObject(result, isLeaf, healthObject, name): any { - const healthData: any = { - name - }; - - const details = {}; - let hasDetails = false; - - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (key === 'status' || key === 'error') { - healthData[key] = value; - } else { - if (!this.isHealthObject(value)) { - details[key] = value; - hasDetails = true; - } - } - } - } - - // Add the details - if (hasDetails) { - healthData.details = details; - } - - // Only add nodes if they provide additional information - if (isLeaf || hasDetails || healthData.error) { - result.push(healthData); - } - return healthData; - } - - private flattenHealthData(result, path, data): any { - for (const key in data) { - if (data.hasOwnProperty(key)) { - const value = data[key]; - if (this.isHealthObject(value)) { - if (this.hasSubSystem(value)) { - this.addHealthObject(result, false, value, this.getModuleName(path, key)); - this.flattenHealthData(result, this.getModuleName(path, key), value); - } else { - this.addHealthObject(result, true, value, this.getModuleName(path, key)); - } - } - } - } - return result; - } - - private getModuleName(path, name): string { - let result; - if (path && name) { - result = path + this.separator + name; - } else if (path) { - result = path; - } else if (name) { - result = name; - } else { - result = ''; - } - return result; - } - - private hasSubSystem(healthObject): boolean { - let result = false; - - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (value && value.status) { - result = true; - } - } - } - return result; - } - - private isHealthObject(healthObject): boolean { - let result = false; - - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - if (key === 'status') { - result = true; - } - } - } - return result; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/index.ts deleted file mode 100644 index 7f631ffb9b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -export * from './audits/audits.component'; -export * from './audits/audits.service'; -export * from './audits/audits.route'; -export * from './audits/audit.model'; -export * from './audits/audit-data.model'; -export * from './configuration/configuration.component'; -export * from './configuration/configuration.service'; -export * from './configuration/configuration.route'; -export * from './docs/docs.component'; -export * from './docs/docs.route'; -export * from './health/health.component'; -export * from './health/health-modal.component'; -export * from './health/health.service'; -export * from './health/health.route'; -export * from './logs/logs.component'; -export * from './logs/logs.service'; -export * from './logs/logs.route'; -export * from './logs/log.model'; -export * from './metrics/metrics.component'; -export * from './metrics/metrics.service'; -export * from './metrics/metrics.route'; -export * from './user-management/user-management-update.component'; -export * from './user-management/user-management-delete-dialog.component'; -export * from './user-management/user-management-detail.component'; -export * from './user-management/user-management.component'; -export * from './user-management/user-management.route'; -export * from './admin.route'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts deleted file mode 100644 index 3f27b6728c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class Log { - constructor(public name: string, public level: string) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html deleted file mode 100644 index cf5d6a046f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html +++ /dev/null @@ -1,28 +0,0 @@ -
-

Logs

- -

There are {{ loggers.length }} loggers.

- - Filter - - - - - - - - - - - - - -
NameLevel
{{logger.name | slice:0:140}} - - - - - - -
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts deleted file mode 100644 index 28547f9ae6..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { Log } from './log.model'; -import { LogsService } from './logs.service'; - -@Component({ - selector: 'jhi-logs', - templateUrl: './logs.component.html' -}) -export class LogsComponent implements OnInit { - loggers: Log[]; - filter: string; - orderProp: string; - reverse: boolean; - - constructor(private logsService: LogsService) { - this.filter = ''; - this.orderProp = 'name'; - this.reverse = false; - } - - ngOnInit() { - this.logsService.findAll().subscribe(response => (this.loggers = response.body)); - } - - changeLevel(name: string, level: string) { - const log = new Log(name, level); - this.logsService.changeLevel(log).subscribe(() => { - this.logsService.findAll().subscribe(response => (this.loggers = response.body)); - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts deleted file mode 100644 index cfa87715d8..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { LogsComponent } from './logs.component'; - -export const logsRoute: Route = { - path: 'logs', - component: LogsComponent, - data: { - pageTitle: 'Logs' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts deleted file mode 100644 index 71a596b0ab..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { Log } from './log.model'; - -@Injectable({ providedIn: 'root' }) -export class LogsService { - constructor(private http: HttpClient) {} - - changeLevel(log: Log): Observable> { - return this.http.put(SERVER_API_URL + 'management/logs', log, { observe: 'response' }); - } - - findAll(): Observable> { - return this.http.get(SERVER_API_URL + 'management/logs', { observe: 'response' }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html deleted file mode 100644 index 75902d8fb3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html +++ /dev/null @@ -1,56 +0,0 @@ -
-

- Application Metrics - -

- -

JVM Metrics

-
- - - - - -
- -
-

Garbage collector statistics

- -
- -
Updating...
- - - - -
- - - - - - - - - -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts deleted file mode 100644 index ed508c8187..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiMetricsService } from './metrics.service'; - -@Component({ - selector: 'jhi-metrics', - templateUrl: './metrics.component.html' -}) -export class JhiMetricsMonitoringComponent implements OnInit { - metrics: any = {}; - threadData: any = {}; - updatingMetrics = true; - JCACHE_KEY: string; - - constructor(private modalService: NgbModal, private metricsService: JhiMetricsService) { - this.JCACHE_KEY = 'jcache.statistics'; - } - - ngOnInit() { - this.refresh(); - } - - refresh() { - this.updatingMetrics = true; - this.metricsService.getMetrics().subscribe(metrics => { - this.metrics = metrics; - this.metricsService.threadDump().subscribe(data => { - this.threadData = data.threads; - this.updatingMetrics = false; - }); - }); - } - - isObjectExisting(metrics: any, key: string) { - return metrics && metrics[key]; - } - - isObjectExistingAndNotEmpty(metrics: any, key: string) { - return this.isObjectExisting(metrics, key) && JSON.stringify(metrics[key]) !== '{}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts deleted file mode 100644 index abc18b8254..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiMetricsMonitoringComponent } from './metrics.component'; - -export const metricsRoute: Route = { - path: 'jhi-metrics', - component: JhiMetricsMonitoringComponent, - data: { - pageTitle: 'Application Metrics' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts deleted file mode 100644 index 15cfe3536c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class JhiMetricsService { - constructor(private http: HttpClient) {} - - getMetrics(): Observable { - return this.http.get(SERVER_API_URL + 'management/jhi-metrics'); - } - - threadDump(): Observable { - return this.http.get(SERVER_API_URL + 'management/threaddump'); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html deleted file mode 100644 index adb1a908da..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
- - - -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts deleted file mode 100644 index d7674f6cd9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { User, UserService } from 'app/core'; - -@Component({ - selector: 'jhi-user-mgmt-delete-dialog', - templateUrl: './user-management-delete-dialog.component.html' -}) -export class UserMgmtDeleteDialogComponent { - user: User; - - constructor(private userService: UserService, public activeModal: NgbActiveModal, private eventManager: JhiEventManager) {} - - clear() { - this.activeModal.dismiss('cancel'); - } - - confirmDelete(login) { - this.userService.delete(login).subscribe(response => { - this.eventManager.broadcast({ - name: 'userListModification', - content: 'Deleted a user' - }); - this.activeModal.dismiss(true); - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html deleted file mode 100644 index 051f335ded..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html +++ /dev/null @@ -1,47 +0,0 @@ -
-
-
-

- User [{{user.login}}] -

-
-
Login
-
- {{user.login}} - - -
-
First Name
-
{{user.firstName}}
-
Last Name
-
{{user.lastName}}
-
Email
-
{{user.email}}
-
Created By
-
{{user.createdBy}}
-
Created Date
-
{{user.createdDate | date:'dd/MM/yy HH:mm' }}
-
Last Modified By
-
{{user.lastModifiedBy}}
-
Last Modified Date
-
{{user.lastModifiedDate | date:'dd/MM/yy HH:mm'}}
-
Profiles
-
-
    -
  • - {{authority}} -
  • -
-
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts deleted file mode 100644 index 0b323d89a0..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -import { User } from 'app/core'; - -@Component({ - selector: 'jhi-user-mgmt-detail', - templateUrl: './user-management-detail.component.html' -}) -export class UserMgmtDetailComponent implements OnInit { - user: User; - - constructor(private route: ActivatedRoute) {} - - ngOnInit() { - this.route.data.subscribe(({ user }) => { - this.user = user.body ? user.body : user; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html deleted file mode 100644 index b2d04b4227..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html +++ /dev/null @@ -1,118 +0,0 @@ -
-
-
-

- Create or edit a User -

-
- -
- - -
- -
- - - -
- - This field is required. - - - - This field cannot be longer than 50 characters. - - - - This field can only contain letters, digits and e-mail addresses. - -
-
-
- - - -
- - This field cannot be longer than 50 characters. - -
-
-
- - - -
- - This field cannot be longer than 50 characters. - -
-
-
- - - -
- - This field is required. - - - - This field cannot be longer than 100 characters. - - - - This field is required to be at least 5 characters. - - - - Your email is invalid. - -
-
-
- -
- -
- - -
-
-
- - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts deleted file mode 100644 index e51e4f4a33..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; - -import { User, UserService } from 'app/core'; - -@Component({ - selector: 'jhi-user-mgmt-update', - templateUrl: './user-management-update.component.html' -}) -export class UserMgmtUpdateComponent implements OnInit { - user: User; - languages: any[]; - authorities: any[]; - isSaving: boolean; - - constructor(private userService: UserService, private route: ActivatedRoute, private router: Router) {} - - ngOnInit() { - this.isSaving = false; - this.route.data.subscribe(({ user }) => { - this.user = user.body ? user.body : user; - }); - this.authorities = []; - this.userService.authorities().subscribe(authorities => { - this.authorities = authorities; - }); - } - - previousState() { - window.history.back(); - } - - save() { - this.isSaving = true; - if (this.user.id !== null) { - this.userService.update(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); - } else { - this.user.langKey = 'en'; - this.userService.create(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); - } - } - - private onSaveSuccess(result) { - this.isSaving = false; - this.previousState(); - } - - private onSaveError() { - this.isSaving = false; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html deleted file mode 100644 index 4592998c1f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html +++ /dev/null @@ -1,78 +0,0 @@ -
-

- Users - -

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ID Login Email ProfilesCreated Date Last Modified By Last Modified Date
{{user.id}}{{user.login}}{{user.email}} - - - -
- {{ authority }} -
-
{{user.createdDate | date:'dd/MM/yy HH:mm'}}{{user.lastModifiedBy}}{{user.lastModifiedDate | date:'dd/MM/yy HH:mm'}} -
- - - -
-
-
-
-
- -
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts deleted file mode 100644 index 439442e3b6..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -import { ActivatedRoute, Router } from '@angular/router'; -import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; - -import { ITEMS_PER_PAGE } from 'app/shared'; -import { AccountService, UserService, User } from 'app/core'; -import { UserMgmtDeleteDialogComponent } from 'app/admin'; - -@Component({ - selector: 'jhi-user-mgmt', - templateUrl: './user-management.component.html' -}) -export class UserMgmtComponent implements OnInit, OnDestroy { - currentAccount: any; - users: User[]; - error: any; - success: any; - routeData: any; - links: any; - totalItems: any; - itemsPerPage: any; - page: any; - predicate: any; - previousPage: any; - reverse: any; - - constructor( - private userService: UserService, - private alertService: JhiAlertService, - private accountService: AccountService, - private parseLinks: JhiParseLinks, - private activatedRoute: ActivatedRoute, - private router: Router, - private eventManager: JhiEventManager, - private modalService: NgbModal - ) { - this.itemsPerPage = ITEMS_PER_PAGE; - this.routeData = this.activatedRoute.data.subscribe(data => { - this.page = data['pagingParams'].page; - this.previousPage = data['pagingParams'].page; - this.reverse = data['pagingParams'].ascending; - this.predicate = data['pagingParams'].predicate; - }); - } - - ngOnInit() { - this.accountService.identity().then(account => { - this.currentAccount = account; - this.loadAll(); - this.registerChangeInUsers(); - }); - } - - ngOnDestroy() { - this.routeData.unsubscribe(); - } - - registerChangeInUsers() { - this.eventManager.subscribe('userListModification', response => this.loadAll()); - } - - setActive(user, isActivated) { - user.activated = isActivated; - - this.userService.update(user).subscribe(response => { - if (response.status === 200) { - this.error = null; - this.success = 'OK'; - this.loadAll(); - } else { - this.success = null; - this.error = 'ERROR'; - } - }); - } - - loadAll() { - this.userService - .query({ - page: this.page - 1, - size: this.itemsPerPage, - sort: this.sort() - }) - .subscribe( - (res: HttpResponse) => this.onSuccess(res.body, res.headers), - (res: HttpResponse) => this.onError(res.body) - ); - } - - trackIdentity(index, item: User) { - return item.id; - } - - sort() { - const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; - if (this.predicate !== 'id') { - result.push('id'); - } - return result; - } - - loadPage(page: number) { - if (page !== this.previousPage) { - this.previousPage = page; - this.transition(); - } - } - - transition() { - this.router.navigate(['/admin/user-management'], { - queryParams: { - page: this.page, - sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') - } - }); - this.loadAll(); - } - - deleteUser(user: User) { - const modalRef = this.modalService.open(UserMgmtDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.user = user; - modalRef.result.then( - result => { - // Left blank intentionally, nothing to do here - }, - reason => { - // Left blank intentionally, nothing to do here - } - ); - } - - private onSuccess(data, headers) { - this.links = this.parseLinks.parse(headers.get('link')); - this.totalItems = headers.get('X-Total-Count'); - this.users = data; - } - - private onError(error) { - this.alertService.error(error.error, error.message, null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts deleted file mode 100644 index bf1115516f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes, CanActivate } from '@angular/router'; -import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; - -import { AccountService, User, UserService } from 'app/core'; -import { UserMgmtComponent } from './user-management.component'; -import { UserMgmtDetailComponent } from './user-management-detail.component'; -import { UserMgmtUpdateComponent } from './user-management-update.component'; - -@Injectable({ providedIn: 'root' }) -export class UserResolve implements CanActivate { - constructor(private accountService: AccountService) {} - - canActivate() { - return this.accountService.identity().then(account => this.accountService.hasAnyAuthority(['ROLE_ADMIN'])); - } -} - -@Injectable({ providedIn: 'root' }) -export class UserMgmtResolve implements Resolve { - constructor(private service: UserService) {} - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { - const id = route.params['login'] ? route.params['login'] : null; - if (id) { - return this.service.find(id); - } - return new User(); - } -} - -export const userMgmtRoute: Routes = [ - { - path: 'user-management', - component: UserMgmtComponent, - resolve: { - pagingParams: JhiResolvePagingParams - }, - data: { - pageTitle: 'Users', - defaultSort: 'id,asc' - } - }, - { - path: 'user-management/:login/view', - component: UserMgmtDetailComponent, - resolve: { - user: UserMgmtResolve - }, - data: { - pageTitle: 'Users' - } - }, - { - path: 'user-management/new', - component: UserMgmtUpdateComponent, - resolve: { - user: UserMgmtResolve - } - }, - { - path: 'user-management/:login/edit', - component: UserMgmtUpdateComponent, - resolve: { - user: UserMgmtResolve - } - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app-routing.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app-routing.module.ts deleted file mode 100644 index c40d4df774..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app-routing.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { errorRoute, navbarRoute } from './layouts'; -import { DEBUG_INFO_ENABLED } from 'app/app.constants'; - -const LAYOUT_ROUTES = [navbarRoute, ...errorRoute]; - -@NgModule({ - imports: [ - RouterModule.forRoot( - [ - { - path: 'admin', - loadChildren: './admin/admin.module#BookstoreAdminModule' - }, - ...LAYOUT_ROUTES - ], - { useHash: true, enableTracing: DEBUG_INFO_ENABLED } - ) - ], - exports: [RouterModule] -}) -export class BookstoreAppRoutingModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app.constants.ts deleted file mode 100644 index 9760a49a91..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.constants.ts +++ /dev/null @@ -1,8 +0,0 @@ -// These constants are injected via webpack environment variables. -// You can add more variables in webpack.common.js or in profile specific webpack..js files. -// If you change the values in the webpack config files, you need to re run webpack to update the application - -export const VERSION = process.env.VERSION; -export const DEBUG_INFO_ENABLED: boolean = !!process.env.DEBUG_INFO_ENABLED; -export const SERVER_API_URL = process.env.SERVER_API_URL; -export const BUILD_TIMESTAMP = process.env.BUILD_TIMESTAMP; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.main.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app.main.ts deleted file mode 100644 index 7695bb8571..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.main.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; -import { ProdConfig } from './blocks/config/prod.config'; -import { BookstoreAppModule } from './app.module'; - -ProdConfig(); - -if (module['hot']) { - module['hot'].accept(); -} - -platformBrowserDynamic() - .bootstrapModule(BookstoreAppModule, { preserveWhitespaces: true }) - .then(success => console.log(`Application started`)) - .catch(err => console.error(err)); diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app.module.ts deleted file mode 100644 index 5fb96ed8c5..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.module.ts +++ /dev/null @@ -1,70 +0,0 @@ -import './vendor.ts'; - -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { NgbDatepickerConfig } from '@ng-bootstrap/ng-bootstrap'; -import { Ng2Webstorage } from 'ngx-webstorage'; -import { NgJhipsterModule } from 'ng-jhipster'; - -import { AuthInterceptor } from './blocks/interceptor/auth.interceptor'; -import { AuthExpiredInterceptor } from './blocks/interceptor/auth-expired.interceptor'; -import { ErrorHandlerInterceptor } from './blocks/interceptor/errorhandler.interceptor'; -import { NotificationInterceptor } from './blocks/interceptor/notification.interceptor'; -import { BookstoreSharedModule } from 'app/shared'; -import { BookstoreCoreModule } from 'app/core'; -import { BookstoreAppRoutingModule } from './app-routing.module'; -import { BookstoreHomeModule } from './home/home.module'; -import { BookstoreAccountModule } from './account/account.module'; -import { BookstoreEntityModule } from './entities/entity.module'; -import * as moment from 'moment'; -// jhipster-needle-angular-add-module-import JHipster will add new module here -import { JhiMainComponent, NavbarComponent, FooterComponent, PageRibbonComponent, ErrorComponent } from './layouts'; - -@NgModule({ - imports: [ - BrowserModule, - Ng2Webstorage.forRoot({ prefix: 'jhi', separator: '-' }), - NgJhipsterModule.forRoot({ - // set below to true to make alerts look like toast - alertAsToast: false, - alertTimeout: 5000 - }), - BookstoreSharedModule.forRoot(), - BookstoreCoreModule, - BookstoreHomeModule, - BookstoreAccountModule, - // jhipster-needle-angular-add-module JHipster will add new module here - BookstoreEntityModule, - BookstoreAppRoutingModule - ], - declarations: [JhiMainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, FooterComponent], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: AuthInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: AuthExpiredInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: ErrorHandlerInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: NotificationInterceptor, - multi: true - } - ], - bootstrap: [JhiMainComponent] -}) -export class BookstoreAppModule { - constructor(private dpConfig: NgbDatepickerConfig) { - this.dpConfig.minDate = { year: moment().year() - 100, month: 1, day: 1 }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts deleted file mode 100644 index c6221c1eaf..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { enableProdMode } from '@angular/core'; -import { DEBUG_INFO_ENABLED } from 'app/app.constants'; - -export function ProdConfig() { - // disable debug data on prod profile to improve performance - if (!DEBUG_INFO_ENABLED) { - enableProdMode(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts deleted file mode 100644 index 0c2ea94808..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { NgbPaginationConfig } from '@ng-bootstrap/ng-bootstrap'; -import { ITEMS_PER_PAGE } from 'app/shared'; - -@Injectable({ providedIn: 'root' }) -export class PaginationConfig { - // tslint:disable-next-line: no-unused-variable - constructor(private config: NgbPaginationConfig) { - config.boundaryLinks = true; - config.maxSize = 5; - config.pageSize = ITEMS_PER_PAGE; - config.size = 'sm'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts deleted file mode 100644 index bc1b70cfef..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; -import { LoginService } from 'app/core/login/login.service'; - -@Injectable() -export class AuthExpiredInterceptor implements HttpInterceptor { - constructor(private loginService: LoginService) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe( - tap( - (event: HttpEvent) => {}, - (err: any) => { - if (err instanceof HttpErrorResponse) { - if (err.status === 401) { - this.loginService.logout(); - } - } - } - ) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts deleted file mode 100644 index 23cdeaf66b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; -import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable() -export class AuthInterceptor implements HttpInterceptor { - constructor(private localStorage: LocalStorageService, private sessionStorage: SessionStorageService) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - if (!request || !request.url || (/^http/.test(request.url) && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) { - return next.handle(request); - } - - const token = this.localStorage.retrieve('authenticationToken') || this.sessionStorage.retrieve('authenticationToken'); - if (!!token) { - request = request.clone({ - setHeaders: { - Authorization: 'Bearer ' + token - } - }); - } - return next.handle(request); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts deleted file mode 100644 index e464f66cd3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from '@angular/core'; -import { JhiEventManager } from 'ng-jhipster'; -import { HttpInterceptor, HttpRequest, HttpErrorResponse, HttpHandler, HttpEvent } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable() -export class ErrorHandlerInterceptor implements HttpInterceptor { - constructor(private eventManager: JhiEventManager) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe( - tap( - (event: HttpEvent) => {}, - (err: any) => { - if (err instanceof HttpErrorResponse) { - if (!(err.status === 401 && (err.message === '' || (err.url && err.url.includes('/api/account'))))) { - this.eventManager.broadcast({ name: 'bookstoreApp.httpError', content: err }); - } - } - } - ) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts deleted file mode 100644 index 34af81d482..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { JhiAlertService } from 'ng-jhipster'; -import { HttpInterceptor, HttpRequest, HttpResponse, HttpHandler, HttpEvent } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable() -export class NotificationInterceptor implements HttpInterceptor { - constructor(private alertService: JhiAlertService) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe( - tap( - (event: HttpEvent) => { - if (event instanceof HttpResponse) { - const arr = event.headers.keys(); - let alert = null; - arr.forEach(entry => { - if (entry.toLowerCase().endsWith('app-alert')) { - alert = event.headers.get(entry); - } - }); - if (alert) { - if (typeof alert === 'string') { - this.alertService.success(alert, null, null); - } - } - } - }, - (err: any) => {} - ) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts deleted file mode 100644 index a6548f6dd9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable, Subject } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { Account } from 'app/core/user/account.model'; - -@Injectable({ providedIn: 'root' }) -export class AccountService { - private userIdentity: any; - private authenticated = false; - private authenticationState = new Subject(); - - constructor(private http: HttpClient) {} - - fetch(): Observable> { - return this.http.get(SERVER_API_URL + 'api/account', { observe: 'response' }); - } - - save(account: any): Observable> { - return this.http.post(SERVER_API_URL + 'api/account', account, { observe: 'response' }); - } - - authenticate(identity) { - this.userIdentity = identity; - this.authenticated = identity !== null; - this.authenticationState.next(this.userIdentity); - } - - hasAnyAuthority(authorities: string[]): boolean { - if (!this.authenticated || !this.userIdentity || !this.userIdentity.authorities) { - return false; - } - - for (let i = 0; i < authorities.length; i++) { - if (this.userIdentity.authorities.includes(authorities[i])) { - return true; - } - } - - return false; - } - - hasAuthority(authority: string): Promise { - if (!this.authenticated) { - return Promise.resolve(false); - } - - return this.identity().then( - id => { - return Promise.resolve(id.authorities && id.authorities.includes(authority)); - }, - () => { - return Promise.resolve(false); - } - ); - } - - identity(force?: boolean): Promise { - if (force) { - this.userIdentity = undefined; - } - - // check and see if we have retrieved the userIdentity data from the server. - // if we have, reuse it by immediately resolving - if (this.userIdentity) { - return Promise.resolve(this.userIdentity); - } - - // retrieve the userIdentity data from the server, update the identity object, and then resolve. - return this.fetch() - .toPromise() - .then(response => { - const account = response.body; - if (account) { - this.userIdentity = account; - this.authenticated = true; - } else { - this.userIdentity = null; - this.authenticated = false; - } - this.authenticationState.next(this.userIdentity); - return this.userIdentity; - }) - .catch(err => { - this.userIdentity = null; - this.authenticated = false; - this.authenticationState.next(this.userIdentity); - return null; - }); - } - - isAuthenticated(): boolean { - return this.authenticated; - } - - isIdentityResolved(): boolean { - return this.userIdentity !== undefined; - } - - getAuthenticationState(): Observable { - return this.authenticationState.asObservable(); - } - - getImageUrl(): string { - return this.isIdentityResolved() ? this.userIdentity.imageUrl : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts deleted file mode 100644 index 5ad53e3dfe..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class AuthServerProvider { - constructor(private http: HttpClient, private $localStorage: LocalStorageService, private $sessionStorage: SessionStorageService) {} - - getToken() { - return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken'); - } - - login(credentials): Observable { - const data = { - username: credentials.username, - password: credentials.password, - rememberMe: credentials.rememberMe - }; - return this.http.post(SERVER_API_URL + 'api/authenticate', data, { observe: 'response' }).pipe(map(authenticateSuccess.bind(this))); - - function authenticateSuccess(resp) { - const bearerToken = resp.headers.get('Authorization'); - if (bearerToken && bearerToken.slice(0, 7) === 'Bearer ') { - const jwt = bearerToken.slice(7, bearerToken.length); - this.storeAuthenticationToken(jwt, credentials.rememberMe); - return jwt; - } - } - } - - loginWithToken(jwt, rememberMe) { - if (jwt) { - this.storeAuthenticationToken(jwt, rememberMe); - return Promise.resolve(jwt); - } else { - return Promise.reject('auth-jwt-service Promise reject'); // Put appropriate error message here - } - } - - storeAuthenticationToken(jwt, rememberMe) { - if (rememberMe) { - this.$localStorage.store('authenticationToken', jwt); - } else { - this.$sessionStorage.store('authenticationToken', jwt); - } - } - - logout(): Observable { - return new Observable(observer => { - this.$localStorage.clear('authenticationToken'); - this.$sessionStorage.clear('authenticationToken'); - observer.complete(); - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts deleted file mode 100644 index 01fdccb02a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core'; -import { CookieService } from 'ngx-cookie'; - -@Injectable({ providedIn: 'root' }) -export class CSRFService { - constructor(private cookieService: CookieService) {} - - getCSRF(name = 'XSRF-TOKEN') { - return this.cookieService.get(name); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts deleted file mode 100644 index 0e5befbfc3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Injectable } from '@angular/core'; -import { SessionStorageService } from 'ngx-webstorage'; - -@Injectable({ providedIn: 'root' }) -export class StateStorageService { - constructor(private $sessionStorage: SessionStorageService) {} - - getPreviousState() { - return this.$sessionStorage.retrieve('previousState'); - } - - resetPreviousState() { - this.$sessionStorage.clear('previousState'); - } - - storePreviousState(previousStateName, previousStateParams) { - const previousState = { name: previousStateName, params: previousStateParams }; - this.$sessionStorage.store('previousState', previousState); - } - - getDestinationState() { - return this.$sessionStorage.retrieve('destinationState'); - } - - storeUrl(url: string) { - this.$sessionStorage.store('previousUrl', url); - } - - getUrl() { - return this.$sessionStorage.retrieve('previousUrl'); - } - - storeDestinationState(destinationState, destinationStateParams, fromState) { - const destinationInfo = { - destination: { - name: destinationState.name, - data: destinationState.data - }, - params: destinationStateParams, - from: { - name: fromState.name - } - }; - this.$sessionStorage.store('destinationState', destinationInfo); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts deleted file mode 100644 index a55b0bc035..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Injectable, isDevMode } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; - -import { AccountService } from '../'; -import { LoginModalService } from '../login/login-modal.service'; -import { StateStorageService } from './state-storage.service'; - -@Injectable({ providedIn: 'root' }) -export class UserRouteAccessService implements CanActivate { - constructor( - private router: Router, - private loginModalService: LoginModalService, - private accountService: AccountService, - private stateStorageService: StateStorageService - ) {} - - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Promise { - const authorities = route.data['authorities']; - // We need to call the checkLogin / and so the accountService.identity() function, to ensure, - // that the client has a principal too, if they already logged in by the server. - // This could happen on a page refresh. - return this.checkLogin(authorities, state.url); - } - - checkLogin(authorities: string[], url: string): Promise { - return this.accountService.identity().then(account => { - if (!authorities || authorities.length === 0) { - return true; - } - - if (account) { - const hasAnyAuthority = this.accountService.hasAnyAuthority(authorities); - if (hasAnyAuthority) { - return true; - } - if (isDevMode()) { - console.error('User has not any of required authorities: ', authorities); - } - return false; - } - - this.stateStorageService.storeUrl(url); - this.router.navigate(['accessdenied']).then(() => { - // only show the login dialog, if the user hasn't logged in yet - if (!account) { - this.loginModalService.open(); - } - }); - return false; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/core.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/core.module.ts deleted file mode 100644 index 7569b8f59e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/core.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule, LOCALE_ID } from '@angular/core'; -import { DatePipe, registerLocaleData } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; -import { Title } from '@angular/platform-browser'; -import locale from '@angular/common/locales/en'; - -@NgModule({ - imports: [HttpClientModule], - exports: [], - declarations: [], - providers: [ - Title, - { - provide: LOCALE_ID, - useValue: 'en' - }, - DatePipe - ] -}) -export class BookstoreCoreModule { - constructor() { - registerLocaleData(locale); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/index.ts deleted file mode 100644 index 38827443a5..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export * from './auth/csrf.service'; -export * from './auth/state-storage.service'; -export * from './auth/account.service'; -export * from './auth/auth-jwt.service'; -export * from './user/account.model'; -export * from './user/user.model'; -export * from './auth/user-route-access-service'; -export * from './login/login-modal.service'; -export * from './login/login.service'; -export * from './user/user.service'; -export * from './core.module'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts deleted file mode 100644 index a0002aa56b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Injectable } from '@angular/core'; -import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiLoginModalComponent } from 'app/shared/login/login.component'; - -@Injectable({ providedIn: 'root' }) -export class LoginModalService { - private isOpen = false; - constructor(private modalService: NgbModal) {} - - open(): NgbModalRef { - if (this.isOpen) { - return; - } - this.isOpen = true; - const modalRef = this.modalService.open(JhiLoginModalComponent); - modalRef.result.then( - result => { - this.isOpen = false; - }, - reason => { - this.isOpen = false; - } - ); - return modalRef; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts deleted file mode 100644 index e91508ff44..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Injectable } from '@angular/core'; - -import { AccountService } from 'app/core/auth/account.service'; -import { AuthServerProvider } from 'app/core/auth/auth-jwt.service'; - -@Injectable({ providedIn: 'root' }) -export class LoginService { - constructor(private accountService: AccountService, private authServerProvider: AuthServerProvider) {} - - login(credentials, callback?) { - const cb = callback || function() {}; - - return new Promise((resolve, reject) => { - this.authServerProvider.login(credentials).subscribe( - data => { - this.accountService.identity(true).then(account => { - resolve(data); - }); - return cb(); - }, - err => { - this.logout(); - reject(err); - return cb(err); - } - ); - }); - } - - loginWithToken(jwt, rememberMe) { - return this.authServerProvider.loginWithToken(jwt, rememberMe); - } - - logout() { - this.authServerProvider.logout().subscribe(); - this.accountService.authenticate(null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts deleted file mode 100644 index 35679657e3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts +++ /dev/null @@ -1,12 +0,0 @@ -export class Account { - constructor( - public activated: boolean, - public authorities: string[], - public email: string, - public firstName: string, - public langKey: string, - public lastName: string, - public login: string, - public imageUrl: string - ) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts deleted file mode 100644 index e82da11ac5..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts +++ /dev/null @@ -1,47 +0,0 @@ -export interface IUser { - id?: any; - login?: string; - firstName?: string; - lastName?: string; - email?: string; - activated?: boolean; - langKey?: string; - authorities?: any[]; - createdBy?: string; - createdDate?: Date; - lastModifiedBy?: string; - lastModifiedDate?: Date; - password?: string; -} - -export class User implements IUser { - constructor( - public id?: any, - public login?: string, - public firstName?: string, - public lastName?: string, - public email?: string, - public activated?: boolean, - public langKey?: string, - public authorities?: any[], - public createdBy?: string, - public createdDate?: Date, - public lastModifiedBy?: string, - public lastModifiedDate?: Date, - public password?: string - ) { - this.id = id ? id : null; - this.login = login ? login : null; - this.firstName = firstName ? firstName : null; - this.lastName = lastName ? lastName : null; - this.email = email ? email : null; - this.activated = activated ? activated : false; - this.langKey = langKey ? langKey : null; - this.authorities = authorities ? authorities : null; - this.createdBy = createdBy ? createdBy : null; - this.createdDate = createdDate ? createdDate : null; - this.lastModifiedBy = lastModifiedBy ? lastModifiedBy : null; - this.lastModifiedDate = lastModifiedDate ? lastModifiedDate : null; - this.password = password ? password : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts deleted file mode 100644 index 5c8065bedd..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { createRequestOption } from 'app/shared/util/request-util'; -import { IUser } from './user.model'; - -@Injectable({ providedIn: 'root' }) -export class UserService { - public resourceUrl = SERVER_API_URL + 'api/users'; - - constructor(private http: HttpClient) {} - - create(user: IUser): Observable> { - return this.http.post(this.resourceUrl, user, { observe: 'response' }); - } - - update(user: IUser): Observable> { - return this.http.put(this.resourceUrl, user, { observe: 'response' }); - } - - find(login: string): Observable> { - return this.http.get(`${this.resourceUrl}/${login}`, { observe: 'response' }); - } - - query(req?: any): Observable> { - const options = createRequestOption(req); - return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); - } - - delete(login: string): Observable> { - return this.http.delete(`${this.resourceUrl}/${login}`, { observe: 'response' }); - } - - authorities(): Observable { - return this.http.get(SERVER_API_URL + 'api/users/authorities'); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html deleted file mode 100644 index be3647e9df..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
- - - -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts deleted file mode 100644 index 7992a5d26d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; - -import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { IBook } from 'app/shared/model/book.model'; -import { BookService } from './book.service'; - -@Component({ - selector: 'jhi-book-delete-dialog', - templateUrl: './book-delete-dialog.component.html' -}) -export class BookDeleteDialogComponent { - book: IBook; - - constructor(protected bookService: BookService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} - - clear() { - this.activeModal.dismiss('cancel'); - } - - confirmDelete(id: number) { - this.bookService.delete(id).subscribe(response => { - this.eventManager.broadcast({ - name: 'bookListModification', - content: 'Deleted an book' - }); - this.activeModal.dismiss(true); - }); - } -} - -@Component({ - selector: 'jhi-book-delete-popup', - template: '' -}) -export class BookDeletePopupComponent implements OnInit, OnDestroy { - protected ngbModalRef: NgbModalRef; - - constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} - - ngOnInit() { - this.activatedRoute.data.subscribe(({ book }) => { - setTimeout(() => { - this.ngbModalRef = this.modalService.open(BookDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); - this.ngbModalRef.componentInstance.book = book; - this.ngbModalRef.result.then( - result => { - this.router.navigate(['/book', { outlets: { popup: null } }]); - this.ngbModalRef = null; - }, - reason => { - this.router.navigate(['/book', { outlets: { popup: null } }]); - this.ngbModalRef = null; - } - ); - }, 0); - }); - } - - ngOnDestroy() { - this.ngbModalRef = null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html deleted file mode 100644 index 4a3c20e841..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html +++ /dev/null @@ -1,49 +0,0 @@ -
-
-
-

Book {{book.id}}

-
- -
-
Title
-
- {{book.title}} -
-
Author
-
- {{book.author}} -
-
Published
-
- {{book.published}} -
-
Quantity
-
- {{book.quantity}} -
-
Price
-
- {{book.price}} -
-
- - - - - - -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts deleted file mode 100644 index 6b84c0ba73..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -import { IBook } from 'app/shared/model/book.model'; -import { BookService } from 'app/entities/book/book.service'; -import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; - -@Component({ - selector: 'jhi-book-detail', - templateUrl: './book-detail.component.html' -}) -export class BookDetailComponent implements OnInit { - book: IBook; - - constructor(protected activatedRoute: ActivatedRoute, protected bookService: BookService) {} - - ngOnInit() { - this.activatedRoute.data.subscribe(({ book }) => { - this.book = book; - }); - } - - previousState() { - window.history.back(); - } - - purchase(id: number) { - console.log('Purchasing book ' + id); - this.bookService.purchase(id).subscribe( - (res: HttpResponse) => { - this.book = res.body; - }, - (res: HttpErrorResponse) => console.log(res.message) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html deleted file mode 100644 index 3b41c6e1e0..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html +++ /dev/null @@ -1,100 +0,0 @@ -
-
-
-

Create or edit a Book

-
- -
- - -
-
- - -
- - This field is required. - -
-
-
- - -
- - This field is required. - -
-
-
- -
- - - - -
-
- - This field is required. - -
-
-
- - -
- - This field is required. - - - This field should be at least 0. - - - This field should be a number. - -
-
-
- - -
- - This field is required. - - - This field should be at least 0. - - - This field should be a number. - -
-
- -
-
- - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts deleted file mode 100644 index 67f46a67c2..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import * as moment from 'moment'; -import { IBook } from 'app/shared/model/book.model'; -import { BookService } from './book.service'; - -@Component({ - selector: 'jhi-book-update', - templateUrl: './book-update.component.html' -}) -export class BookUpdateComponent implements OnInit { - book: IBook; - isSaving: boolean; - publishedDp: any; - - constructor(protected bookService: BookService, protected activatedRoute: ActivatedRoute) {} - - ngOnInit() { - this.isSaving = false; - this.activatedRoute.data.subscribe(({ book }) => { - this.book = book; - }); - } - - previousState() { - window.history.back(); - } - - save() { - this.isSaving = true; - if (this.book.id !== undefined) { - this.subscribeToSaveResponse(this.bookService.update(this.book)); - } else { - this.subscribeToSaveResponse(this.bookService.create(this.book)); - } - } - - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); - } - - protected onSaveSuccess() { - this.isSaving = false; - this.previousState(); - } - - protected onSaveError() { - this.isSaving = false; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html deleted file mode 100644 index 74ad02a8e3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html +++ /dev/null @@ -1,62 +0,0 @@ -
-

- Books - -

- -
-
- - - - - - - - - - - - - - - - - - - - - - - -
IDTitleAuthorPublishedQuantityPrice
{{book.id}}{{book.title}}{{book.author}}{{book.published | date:'mediumDate'}}{{book.quantity}}{{book.price}} -
- - - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts deleted file mode 100644 index 91a71c2f5c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; -import { Subscription } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import { JhiEventManager, JhiAlertService } from 'ng-jhipster'; - -import { IBook } from 'app/shared/model/book.model'; -import { AccountService } from 'app/core'; -import { BookService } from './book.service'; - -@Component({ - selector: 'jhi-book', - templateUrl: './book.component.html' -}) -export class BookComponent implements OnInit, OnDestroy { - books: IBook[]; - currentAccount: any; - eventSubscriber: Subscription; - - constructor( - protected bookService: BookService, - protected jhiAlertService: JhiAlertService, - protected eventManager: JhiEventManager, - protected accountService: AccountService - ) {} - - loadAll() { - this.bookService - .query() - .pipe( - filter((res: HttpResponse) => res.ok), - map((res: HttpResponse) => res.body) - ) - .subscribe( - (res: IBook[]) => { - this.books = res; - }, - (res: HttpErrorResponse) => this.onError(res.message) - ); - } - - ngOnInit() { - this.loadAll(); - this.accountService.identity().then(account => { - this.currentAccount = account; - }); - this.registerChangeInBooks(); - } - - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); - } - - trackId(index: number, item: IBook) { - return item.id; - } - - registerChangeInBooks() { - this.eventSubscriber = this.eventManager.subscribe('bookListModification', response => this.loadAll()); - } - - protected onError(errorMessage: string) { - this.jhiAlertService.error(errorMessage, null, null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts deleted file mode 100644 index fe221a0eb9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { BookstoreSharedModule } from 'app/shared'; -import { - BookComponent, - BookDetailComponent, - BookUpdateComponent, - BookDeletePopupComponent, - BookDeleteDialogComponent, - bookRoute, - bookPopupRoute -} from './'; - -const ENTITY_STATES = [...bookRoute, ...bookPopupRoute]; - -@NgModule({ - imports: [BookstoreSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [BookComponent, BookDetailComponent, BookUpdateComponent, BookDeleteDialogComponent, BookDeletePopupComponent], - entryComponents: [BookComponent, BookUpdateComponent, BookDeleteDialogComponent, BookDeletePopupComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreBookModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts deleted file mode 100644 index 154fa89a5c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import { Book } from 'app/shared/model/book.model'; -import { BookService } from './book.service'; -import { BookComponent } from './book.component'; -import { BookDetailComponent } from './book-detail.component'; -import { BookUpdateComponent } from './book-update.component'; -import { BookDeletePopupComponent } from './book-delete-dialog.component'; -import { IBook } from 'app/shared/model/book.model'; - -@Injectable({ providedIn: 'root' }) -export class BookResolve implements Resolve { - constructor(private service: BookService) {} - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - const id = route.params['id'] ? route.params['id'] : null; - if (id) { - return this.service.find(id).pipe( - filter((response: HttpResponse) => response.ok), - map((book: HttpResponse) => book.body) - ); - } - return of(new Book()); - } -} - -export const bookRoute: Routes = [ - { - path: '', - component: BookComponent, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - }, - { - path: ':id/view', - component: BookDetailComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - }, - { - path: 'new', - component: BookUpdateComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - }, - { - path: ':id/edit', - component: BookUpdateComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - } -]; - -export const bookPopupRoute: Routes = [ - { - path: ':id/delete', - component: BookDeletePopupComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService], - outlet: 'popup' - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts deleted file mode 100644 index bff511f7e6..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import * as moment from 'moment'; -import { DATE_FORMAT } from 'app/shared/constants/input.constants'; -import { map } from 'rxjs/operators'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { createRequestOption } from 'app/shared'; -import { IBook } from 'app/shared/model/book.model'; - -type EntityResponseType = HttpResponse; -type EntityArrayResponseType = HttpResponse; - -@Injectable({ providedIn: 'root' }) -export class BookService { - public resourceUrl = SERVER_API_URL + 'api/books'; - - constructor(protected http: HttpClient) {} - - create(book: IBook): Observable { - const copy = this.convertDateFromClient(book); - return this.http - .post(this.resourceUrl, copy, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - update(book: IBook): Observable { - const copy = this.convertDateFromClient(book); - return this.http - .put(this.resourceUrl, copy, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - find(id: number): Observable { - return this.http - .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - purchase(id: number): Observable { - console.log('Calling /api/books/purchase/ ' + id); - return this.http - .get(`${this.resourceUrl}/purchase/${id}`, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http - .get(this.resourceUrl, { params: options, observe: 'response' }) - .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - - protected convertDateFromClient(book: IBook): IBook { - const copy: IBook = Object.assign({}, book, { - published: book.published != null && book.published.isValid() ? book.published.format(DATE_FORMAT) : null - }); - return copy; - } - - protected convertDateFromServer(res: EntityResponseType): EntityResponseType { - if (res.body) { - res.body.published = res.body.published != null ? moment(res.body.published) : null; - } - return res; - } - - protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { - if (res.body) { - res.body.forEach((book: IBook) => { - book.published = book.published != null ? moment(book.published) : null; - }); - } - return res; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/index.ts deleted file mode 100644 index 603cf68f9f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './book.service'; -export * from './book-update.component'; -export * from './book-delete-dialog.component'; -export * from './book-detail.component'; -export * from './book.component'; -export * from './book.route'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts deleted file mode 100644 index fba1f55ef7..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { - path: 'book', - loadChildren: './book/book.module#BookstoreBookModule' - } - /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ - ]) - ], - declarations: [], - entryComponents: [], - providers: [], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreEntityModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.html deleted file mode 100644 index 0c595b9d74..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.html +++ /dev/null @@ -1,41 +0,0 @@ -
-
- -
-
-

Welcome, Java Hipster!

-

This is your homepage

- -
-
- You are logged in as user "{{account.login}}". -
- -
- If you want to - sign in, you can try the default accounts:
- Administrator (login="admin" and password="admin")
- User (login="user" and password="user").
-
-
- You don't have an account yet?  - Register a new account -
-
- -

- If you have any question on JHipster: -

- - - -

- If you like JHipster, don't forget to give us a star on GitHub! -

-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.ts deleted file mode 100644 index f1410c2cf5..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { LoginModalService, AccountService, Account } from 'app/core'; - -@Component({ - selector: 'jhi-home', - templateUrl: './home.component.html', - styleUrls: ['home.scss'] -}) -export class HomeComponent implements OnInit { - account: Account; - modalRef: NgbModalRef; - - constructor( - private accountService: AccountService, - private loginModalService: LoginModalService, - private eventManager: JhiEventManager - ) {} - - ngOnInit() { - this.accountService.identity().then((account: Account) => { - this.account = account; - }); - this.registerAuthenticationSuccess(); - } - - registerAuthenticationSuccess() { - this.eventManager.subscribe('authenticationSuccess', message => { - this.accountService.identity().then(account => { - this.account = account; - }); - }); - } - - isAuthenticated() { - return this.accountService.isAuthenticated(); - } - - login() { - this.modalRef = this.loginModalService.open(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.module.ts deleted file mode 100644 index c1004a6dd9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { BookstoreSharedModule } from 'app/shared'; -import { HOME_ROUTE, HomeComponent } from './'; - -@NgModule({ - imports: [BookstoreSharedModule, RouterModule.forChild([HOME_ROUTE])], - declarations: [HomeComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreHomeModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.route.ts deleted file mode 100644 index a59993f8f0..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { HomeComponent } from './'; - -export const HOME_ROUTE: Route = { - path: '', - component: HomeComponent, - data: { - authorities: [], - pageTitle: 'Welcome, Java Hipster!' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.scss deleted file mode 100644 index 7fe48ff5fa..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* ========================================================================== -Main page styles -========================================================================== */ - -.hipster { - display: inline-block; - width: 347px; - height: 497px; - background: url('../../content/images/jhipster_family_member_0.svg') no-repeat center top; - background-size: contain; -} - -/* wait autoprefixer update to allow simple generation of high pixel density media query */ -@media only screen and (-webkit-min-device-pixel-ratio: 2), - only screen and (-moz-min-device-pixel-ratio: 2), - only screen and (-o-min-device-pixel-ratio: 2/1), - only screen and (min-resolution: 192dpi), - only screen and (min-resolution: 2dppx) { - .hipster { - background: url('../../content/images/jhipster_family_member_0.svg') no-repeat center top; - background-size: contain; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/index.ts deleted file mode 100644 index d76285b277..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './home.component'; -export * from './home.route'; -export * from './home.module'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html deleted file mode 100644 index b79392173e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
-
-
- -
-
-

Error Page!

- -
-
{{errorMessage}} -
-
-
You are not authorized to access this page. -
-
The page asked was not found. -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts deleted file mode 100644 index faa9658161..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -@Component({ - selector: 'jhi-error', - templateUrl: './error.component.html' -}) -export class ErrorComponent implements OnInit { - errorMessage: string; - error403: boolean; - error404: boolean; - - constructor(private route: ActivatedRoute) {} - - ngOnInit() { - this.route.data.subscribe(routeData => { - if (routeData.error403) { - this.error403 = routeData.error403; - } - if (routeData.error404) { - this.error404 = routeData.error404; - } - if (routeData.errorMessage) { - this.errorMessage = routeData.errorMessage; - } - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts deleted file mode 100644 index 85ab257ca9..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Routes } from '@angular/router'; - -import { ErrorComponent } from './error.component'; - -export const errorRoute: Routes = [ - { - path: 'error', - component: ErrorComponent, - data: { - authorities: [], - pageTitle: 'Bookstore' - } - }, - { - path: 'accessdenied', - component: ErrorComponent, - data: { - authorities: [], - pageTitle: 'Bookstore', - error403: true - } - }, - { - path: '404', - component: ErrorComponent, - data: { - authorities: [], - pageTitle: 'Bookstore', - error404: true - } - }, - { - path: '**', - redirectTo: '/404' - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html deleted file mode 100644 index b3ba632e02..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts deleted file mode 100644 index 37da8bca75..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'jhi-footer', - templateUrl: './footer.component.html' -}) -export class FooterComponent {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/index.ts deleted file mode 100644 index 8cbf6368d7..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './error/error.component'; -export * from './error/error.route'; -export * from './main/main.component'; -export * from './footer/footer.component'; -export * from './navbar/navbar.component'; -export * from './navbar/navbar.route'; -export * from './profiles/page-ribbon.component'; -export * from './profiles/profile.service'; -export * from './profiles/profile-info.model'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html deleted file mode 100644 index 5bcd12ab0b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html +++ /dev/null @@ -1,11 +0,0 @@ - -
- -
-
-
- - -
- -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts deleted file mode 100644 index e1f2c8134e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Router, ActivatedRouteSnapshot, NavigationEnd, NavigationError } from '@angular/router'; - -import { Title } from '@angular/platform-browser'; - -@Component({ - selector: 'jhi-main', - templateUrl: './main.component.html' -}) -export class JhiMainComponent implements OnInit { - constructor(private titleService: Title, private router: Router) {} - - private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) { - let title: string = routeSnapshot.data && routeSnapshot.data['pageTitle'] ? routeSnapshot.data['pageTitle'] : 'bookstoreApp'; - if (routeSnapshot.firstChild) { - title = this.getPageTitle(routeSnapshot.firstChild) || title; - } - return title; - } - - ngOnInit() { - this.router.events.subscribe(event => { - if (event instanceof NavigationEnd) { - this.titleService.setTitle(this.getPageTitle(this.router.routerState.snapshot.root)); - } - if (event instanceof NavigationError && event.error.status === 404) { - this.router.navigate(['/404']); - } - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html deleted file mode 100644 index 4fab5c76ac..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html +++ /dev/null @@ -1,133 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts deleted file mode 100644 index 6e00d7a1cb..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { VERSION } from 'app/app.constants'; -import { AccountService, LoginModalService, LoginService } from 'app/core'; -import { ProfileService } from 'app/layouts/profiles/profile.service'; - -@Component({ - selector: 'jhi-navbar', - templateUrl: './navbar.component.html', - styleUrls: ['navbar.scss'] -}) -export class NavbarComponent implements OnInit { - inProduction: boolean; - isNavbarCollapsed: boolean; - languages: any[]; - swaggerEnabled: boolean; - modalRef: NgbModalRef; - version: string; - - constructor( - private loginService: LoginService, - private accountService: AccountService, - private loginModalService: LoginModalService, - private profileService: ProfileService, - private router: Router - ) { - this.version = VERSION ? 'v' + VERSION : ''; - this.isNavbarCollapsed = true; - } - - ngOnInit() { - this.profileService.getProfileInfo().then(profileInfo => { - this.inProduction = profileInfo.inProduction; - this.swaggerEnabled = profileInfo.swaggerEnabled; - }); - } - - collapseNavbar() { - this.isNavbarCollapsed = true; - } - - isAuthenticated() { - return this.accountService.isAuthenticated(); - } - - login() { - this.modalRef = this.loginModalService.open(); - } - - logout() { - this.collapseNavbar(); - this.loginService.logout(); - this.router.navigate(['']); - } - - toggleNavbar() { - this.isNavbarCollapsed = !this.isNavbarCollapsed; - } - - getImageUrl() { - return this.isAuthenticated() ? this.accountService.getImageUrl() : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts deleted file mode 100644 index 317d99604b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; - -import { NavbarComponent } from './navbar.component'; - -export const navbarRoute: Route = { - path: '', - component: NavbarComponent, - outlet: 'navbar' -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss deleted file mode 100644 index 9a5f929293..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss +++ /dev/null @@ -1,53 +0,0 @@ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; - -/* ========================================================================== -Navbar -========================================================================== */ - -.navbar-version { - font-size: 0.65em; - color: $navbar-dark-color; -} - -.profile-image { - height: 1.75em; - width: 1.75em; -} - -.navbar { - padding: 0.2rem 1rem; - .dropdown-item.active, - .dropdown-item.active:focus, - .dropdown-item.active:hover { - background-color: $dark; - } - - ul.navbar-nav { - .nav-item { - margin-left: 0.5em; - } - } - - a.nav-link { - font-weight: 400; - } - - .navbar-toggler { - &:hover { - color: $navbar-dark-hover-color; - } - } -} - -/* ========================================================================== -Logo styles -========================================================================== */ -.logo-img { - height: 45px; - width: 45px; - display: inline-block; - vertical-align: middle; - background: url('../../../content/images/logo-jhipster.png') no-repeat center center; - background-size: contain; -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts deleted file mode 100644 index 00fe76075d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ProfileService } from './profile.service'; -import { ProfileInfo } from './profile-info.model'; - -@Component({ - selector: 'jhi-page-ribbon', - template: ` - - `, - styleUrls: ['page-ribbon.scss'] -}) -export class PageRibbonComponent implements OnInit { - profileInfo: ProfileInfo; - ribbonEnv: string; - - constructor(private profileService: ProfileService) {} - - ngOnInit() { - this.profileService.getProfileInfo().then(profileInfo => { - this.profileInfo = profileInfo; - this.ribbonEnv = profileInfo.ribbonEnv; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss deleted file mode 100644 index 90125b70cb..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss +++ /dev/null @@ -1,31 +0,0 @@ -/* ========================================================================== -Developement Ribbon -========================================================================== */ -.ribbon { - background-color: rgba(170, 0, 0, 0.5); - left: -3.5em; - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - overflow: hidden; - position: absolute; - top: 40px; - white-space: nowrap; - width: 15em; - z-index: 9999; - pointer-events: none; - opacity: 0.75; - a { - color: #fff; - display: block; - font-weight: 400; - margin: 1px 0; - padding: 10px 50px; - text-align: center; - text-decoration: none; - text-shadow: 0 0 5px #444; - pointer-events: none; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts deleted file mode 100644 index f1adc52c7b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class ProfileInfo { - activeProfiles: string[]; - ribbonEnv: string; - inProduction: boolean; - swaggerEnabled: boolean; -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts deleted file mode 100644 index d07fad7e7f..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { ProfileInfo } from './profile-info.model'; -import { map } from 'rxjs/operators'; - -@Injectable({ providedIn: 'root' }) -export class ProfileService { - private infoUrl = SERVER_API_URL + 'management/info'; - private profileInfo: Promise; - - constructor(private http: HttpClient) {} - - getProfileInfo(): Promise { - if (!this.profileInfo) { - this.profileInfo = this.http - .get(this.infoUrl, { observe: 'response' }) - .pipe( - map((res: HttpResponse) => { - const data = res.body; - const pi = new ProfileInfo(); - pi.activeProfiles = data['activeProfiles']; - const displayRibbonOnProfiles = data['display-ribbon-on-profiles'].split(','); - if (pi.activeProfiles) { - const ribbonProfiles = displayRibbonOnProfiles.filter(profile => pi.activeProfiles.includes(profile)); - if (ribbonProfiles.length !== 0) { - pi.ribbonEnv = ribbonProfiles[0]; - } - pi.inProduction = pi.activeProfiles.includes('prod'); - pi.swaggerEnabled = pi.activeProfiles.includes('swagger'); - } - return pi; - }) - ) - .toPromise(); - } - return this.profileInfo; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/polyfills.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/polyfills.ts deleted file mode 100644 index cf38f3221b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/polyfills.ts +++ /dev/null @@ -1,70 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ -import 'core-js/es6/symbol'; -import 'core-js/es6/object'; -import 'core-js/es6/function'; -import 'core-js/es6/parse-int'; -import 'core-js/es6/parse-float'; -import 'core-js/es6/number'; -import 'core-js/es6/math'; -import 'core-js/es6/string'; -import 'core-js/es6/date'; -import 'core-js/es6/array'; -import 'core-js/es7/array'; -import 'core-js/es6/regexp'; -import 'core-js/es6/map'; -import 'core-js/es6/weak-map'; -import 'core-js/es6/set'; - -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** Evergreen browsers require these. **/ -import 'core-js/es6/reflect'; -import 'core-js/es7/reflect'; - -/** - * Required to support Web Animations `@angular/animation`. - * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation - **/ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - -/*************************************************************************************************** - * Zone JS is required by Angular itself. - */ -import 'zone.js/dist/zone'; // Included with Angular CLI. - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ - -/** - * Date, currency, decimal and percent pipes. - * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 - */ -// import 'intl'; // Run `npm install --save intl`. -/** - * Need to import at least one locale-data with intl. - */ -// import 'intl/locale-data/jsonp/en'; - -require('../manifest.webapp'); diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts deleted file mode 100644 index 892e2d828c..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { Component, OnDestroy } from '@angular/core'; -import { JhiEventManager, JhiAlert, JhiAlertService } from 'ng-jhipster'; -import { Subscription } from 'rxjs'; - -@Component({ - selector: 'jhi-alert-error', - template: ` - - ` -}) -export class JhiAlertErrorComponent implements OnDestroy { - alerts: any[]; - cleanHttpErrorListener: Subscription; - /* tslint:disable */ - constructor(private alertService: JhiAlertService, private eventManager: JhiEventManager) { - /* tslint:enable */ - this.alerts = []; - - this.cleanHttpErrorListener = eventManager.subscribe('bookstoreApp.httpError', response => { - let i; - const httpErrorResponse = response.content; - switch (httpErrorResponse.status) { - // connection refused, server not reachable - case 0: - this.addErrorAlert('Server not reachable', 'error.server.not.reachable'); - break; - - case 400: - const arr = httpErrorResponse.headers.keys(); - let errorHeader = null; - let entityKey = null; - arr.forEach(entry => { - if (entry.toLowerCase().endsWith('app-error')) { - errorHeader = httpErrorResponse.headers.get(entry); - } else if (entry.toLowerCase().endsWith('app-params')) { - entityKey = httpErrorResponse.headers.get(entry); - } - }); - if (errorHeader) { - const entityName = entityKey; - this.addErrorAlert(errorHeader, errorHeader, { entityName }); - } else if (httpErrorResponse.error !== '' && httpErrorResponse.error.fieldErrors) { - const fieldErrors = httpErrorResponse.error.fieldErrors; - for (i = 0; i < fieldErrors.length; i++) { - const fieldError = fieldErrors[i]; - if (['Min', 'Max', 'DecimalMin', 'DecimalMax'].includes(fieldError.message)) { - fieldError.message = 'Size'; - } - // convert 'something[14].other[4].id' to 'something[].other[].id' so translations can be written to it - const convertedField = fieldError.field.replace(/\[\d*\]/g, '[]'); - const fieldName = convertedField.charAt(0).toUpperCase() + convertedField.slice(1); - this.addErrorAlert('Error on field "' + fieldName + '"', 'error.' + fieldError.message, { fieldName }); - } - } else if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) { - this.addErrorAlert( - httpErrorResponse.error.message, - httpErrorResponse.error.message, - httpErrorResponse.error.params - ); - } else { - this.addErrorAlert(httpErrorResponse.error); - } - break; - - case 404: - this.addErrorAlert('Not found', 'error.url.not.found'); - break; - - default: - if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) { - this.addErrorAlert(httpErrorResponse.error.message); - } else { - this.addErrorAlert(httpErrorResponse.error); - } - } - }); - } - - setClasses(alert) { - return { - toast: !!alert.toast, - [alert.position]: true - }; - } - - ngOnDestroy() { - if (this.cleanHttpErrorListener !== undefined && this.cleanHttpErrorListener !== null) { - this.eventManager.destroy(this.cleanHttpErrorListener); - this.alerts = []; - } - } - - addErrorAlert(message, key?, data?) { - const newAlert: JhiAlert = { - type: 'danger', - msg: message, - timeout: 5000, - toast: this.alertService.isToast(), - scoped: true - }; - - this.alerts.push(this.alertService.addAlert(newAlert, this.alerts)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts deleted file mode 100644 index a77c3e72c5..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { JhiAlertService } from 'ng-jhipster'; - -@Component({ - selector: 'jhi-alert', - template: ` - - ` -}) -export class JhiAlertComponent implements OnInit, OnDestroy { - alerts: any[]; - - constructor(private alertService: JhiAlertService) {} - - ngOnInit() { - this.alerts = this.alertService.get(); - } - - setClasses(alert) { - return { - toast: !!alert.toast, - [alert.position]: true - }; - } - - ngOnDestroy() { - this.alerts = []; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts deleted file mode 100644 index 0f8cefb28e..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; -import { AccountService } from 'app/core/auth/account.service'; - -/** - * @whatItDoes Conditionally includes an HTML element if current user has any - * of the authorities passed as the `expression`. - * - * @howToUse - * ``` - * ... - * - * ... - * ``` - */ -@Directive({ - selector: '[jhiHasAnyAuthority]' -}) -export class HasAnyAuthorityDirective { - private authorities: string[]; - - constructor( - private accountService: AccountService, - private templateRef: TemplateRef, - private viewContainerRef: ViewContainerRef - ) {} - - @Input() - set jhiHasAnyAuthority(value: string | string[]) { - this.authorities = typeof value === 'string' ? [value] : value; - this.updateView(); - // Get notified each time authentication state changes. - this.accountService.getAuthenticationState().subscribe(identity => this.updateView()); - } - - private updateView(): void { - const hasAnyAuthority = this.accountService.hasAnyAuthority(this.authorities); - this.viewContainerRef.clear(); - if (hasAnyAuthority) { - this.viewContainerRef.createEmbeddedView(this.templateRef); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts deleted file mode 100644 index 2ebea94220..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const PROBLEM_BASE_URL = 'https://www.jhipster.tech/problem'; -export const EMAIL_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/email-already-used'; -export const LOGIN_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/login-already-used'; -export const EMAIL_NOT_FOUND_TYPE = PROBLEM_BASE_URL + '/email-not-found'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts deleted file mode 100644 index 1e3978a9b3..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const DATE_FORMAT = 'YYYY-MM-DD'; -export const DATE_TIME_FORMAT = 'YYYY-MM-DDTHH:mm'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts deleted file mode 100644 index a148d4579b..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const ITEMS_PER_PAGE = 20; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/index.ts deleted file mode 100644 index 92a8ccef73..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from './constants/error.constants'; -export * from './constants/pagination.constants'; -export * from './constants/input.constants'; -export * from './alert/alert.component'; -export * from './alert/alert-error.component'; -export * from './auth/has-any-authority.directive'; -export * from './login/login.component'; -export * from './util/request-util'; -export * from './shared-libs.module'; -export * from './shared-common.module'; -export * from './shared.module'; -export * from './util/datepicker-adapter'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html deleted file mode 100644 index 7eb35364b4..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts deleted file mode 100644 index 46711a0619..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Component, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { Router } from '@angular/router'; -import { JhiEventManager } from 'ng-jhipster'; - -import { LoginService } from 'app/core/login/login.service'; -import { StateStorageService } from 'app/core/auth/state-storage.service'; - -@Component({ - selector: 'jhi-login-modal', - templateUrl: './login.component.html' -}) -export class JhiLoginModalComponent implements AfterViewInit { - authenticationError: boolean; - password: string; - rememberMe: boolean; - username: string; - credentials: any; - - constructor( - private eventManager: JhiEventManager, - private loginService: LoginService, - private stateStorageService: StateStorageService, - private elementRef: ElementRef, - private renderer: Renderer, - private router: Router, - public activeModal: NgbActiveModal - ) { - this.credentials = {}; - } - - ngAfterViewInit() { - setTimeout(() => this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#username'), 'focus', []), 0); - } - - cancel() { - this.credentials = { - username: null, - password: null, - rememberMe: true - }; - this.authenticationError = false; - this.activeModal.dismiss('cancel'); - } - - login() { - this.loginService - .login({ - username: this.username, - password: this.password, - rememberMe: this.rememberMe - }) - .then(() => { - this.authenticationError = false; - this.activeModal.dismiss('login success'); - if (this.router.url === '/register' || /^\/activate\//.test(this.router.url) || /^\/reset\//.test(this.router.url)) { - this.router.navigate(['']); - } - - this.eventManager.broadcast({ - name: 'authenticationSuccess', - content: 'Sending Authentication Success' - }); - - // previousState was set in the authExpiredInterceptor before being redirected to login modal. - // since login is successful, go to stored previousState and clear previousState - const redirect = this.stateStorageService.getUrl(); - if (redirect) { - this.stateStorageService.storeUrl(null); - this.router.navigate([redirect]); - } - }) - .catch(() => { - this.authenticationError = true; - }); - } - - register() { - this.activeModal.dismiss('to state register'); - this.router.navigate(['/register']); - } - - requestResetPassword() { - this.activeModal.dismiss('to state requestReset'); - this.router.navigate(['/reset', 'request']); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts deleted file mode 100644 index ee943a4127..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Moment } from 'moment'; - -export interface IBook { - id?: number; - title?: string; - author?: string; - published?: Moment; - quantity?: number; - price?: number; -} - -export class Book implements IBook { - constructor( - public id?: number, - public title?: string, - public author?: string, - public published?: Moment, - public quantity?: number, - public price?: number - ) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts deleted file mode 100644 index c6e52d67c5..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { BookstoreSharedLibsModule, JhiAlertComponent, JhiAlertErrorComponent } from './'; - -@NgModule({ - imports: [BookstoreSharedLibsModule], - declarations: [JhiAlertComponent, JhiAlertErrorComponent], - exports: [BookstoreSharedLibsModule, JhiAlertComponent, JhiAlertErrorComponent] -}) -export class BookstoreSharedCommonModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts deleted file mode 100644 index 79ac658edb..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { CommonModule } from '@angular/common'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgJhipsterModule } from 'ng-jhipster'; -import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -import { CookieModule } from 'ngx-cookie'; -import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; - -@NgModule({ - imports: [NgbModule.forRoot(), InfiniteScrollModule, CookieModule.forRoot(), FontAwesomeModule], - exports: [FormsModule, CommonModule, NgbModule, NgJhipsterModule, InfiniteScrollModule, FontAwesomeModule] -}) -export class BookstoreSharedLibsModule { - static forRoot() { - return { - ngModule: BookstoreSharedLibsModule - }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts deleted file mode 100644 index 695b166793..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; - -import { NgbDateMomentAdapter } from './util/datepicker-adapter'; -import { BookstoreSharedLibsModule, BookstoreSharedCommonModule, JhiLoginModalComponent, HasAnyAuthorityDirective } from './'; - -@NgModule({ - imports: [BookstoreSharedLibsModule, BookstoreSharedCommonModule], - declarations: [JhiLoginModalComponent, HasAnyAuthorityDirective], - providers: [{ provide: NgbDateAdapter, useClass: NgbDateMomentAdapter }], - entryComponents: [JhiLoginModalComponent], - exports: [BookstoreSharedCommonModule, JhiLoginModalComponent, HasAnyAuthorityDirective], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreSharedModule { - static forRoot() { - return { - ngModule: BookstoreSharedModule - }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts deleted file mode 100644 index 524a38c834..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Angular bootstrap Date adapter - */ -import { Injectable } from '@angular/core'; -import { NgbDateAdapter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; -import { Moment } from 'moment'; -import * as moment from 'moment'; - -@Injectable() -export class NgbDateMomentAdapter extends NgbDateAdapter { - fromModel(date: Moment): NgbDateStruct { - if (date != null && moment.isMoment(date) && date.isValid()) { - return { year: date.year(), month: date.month() + 1, day: date.date() }; - } - return null; - } - - toModel(date: NgbDateStruct): Moment { - return date ? moment(date.year + '-' + date.month + '-' + date.day, 'YYYY-MM-DD') : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts deleted file mode 100644 index 6579c3cb2a..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { HttpParams } from '@angular/common/http'; - -export const createRequestOption = (req?: any): HttpParams => { - let options: HttpParams = new HttpParams(); - if (req) { - Object.keys(req).forEach(key => { - if (key !== 'sort') { - options = options.set(key, req[key]); - } - }); - if (req.sort) { - req.sort.forEach(val => { - options = options.append('sort', val); - }); - } - } - return options; -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/vendor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/vendor.ts deleted file mode 100644 index e8923d5c66..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/vendor.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* after changing this file run 'npm run webpack:build' */ -/* tslint:disable */ -import '../content/scss/vendor.scss'; - -// Imports all fontawesome core and solid icons - -import { library } from '@fortawesome/fontawesome-svg-core'; -import { - faUser, - faSort, - faSortUp, - faSortDown, - faSync, - faEye, - faBan, - faTimes, - faArrowLeft, - faSave, - faPlus, - faPencilAlt, - faBars, - faThList, - faUserPlus, - faRoad, - faTachometerAlt, - faHeart, - faList, - faBell, - faBook, - faHdd, - faFlag, - faWrench, - faClock, - faCloud, - faSignOutAlt, - faSignInAlt, - faCalendarAlt, - faSearch, - faTrashAlt, - faAsterisk, - faTasks, - faHome -} from '@fortawesome/free-solid-svg-icons'; - -// Adds the SVG icon to the library so you can use it in your page -library.add(faUser); -library.add(faSort); -library.add(faSortUp); -library.add(faSortDown); -library.add(faSync); -library.add(faEye); -library.add(faBan); -library.add(faTimes); -library.add(faArrowLeft); -library.add(faSave); -library.add(faPlus); -library.add(faPencilAlt); -library.add(faBars); -library.add(faHome); -library.add(faThList); -library.add(faUserPlus); -library.add(faRoad); -library.add(faTachometerAlt); -library.add(faHeart); -library.add(faList); -library.add(faBell); -library.add(faTasks); -library.add(faBook); -library.add(faHdd); -library.add(faFlag); -library.add(faWrench); -library.add(faClock); -library.add(faCloud); -library.add(faSignOutAlt); -library.add(faSignInAlt); -library.add(faCalendarAlt); -library.add(faSearch); -library.add(faTrashAlt); -library.add(faAsterisk); - -// jhipster-needle-add-element-to-vendor - JHipster will add new menu items here diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/css/loading.css b/jhipster-5/bookstore-monolith/src/main/webapp/content/css/loading.css deleted file mode 100644 index a1e24615b4..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/css/loading.css +++ /dev/null @@ -1,152 +0,0 @@ -@keyframes lds-pacman-1 { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 50% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } -} -@-webkit-keyframes lds-pacman-1 { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 50% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } -} -@keyframes lds-pacman-2 { - 0% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } - 50% { - -webkit-transform: rotate(225deg); - transform: rotate(225deg); - } - 100% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } -} -@-webkit-keyframes lds-pacman-2 { - 0% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } - 50% { - -webkit-transform: rotate(225deg); - transform: rotate(225deg); - } - 100% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } -} -@keyframes lds-pacman-3 { - 0% { - -webkit-transform: translate(190px, 0); - transform: translate(190px, 0); - opacity: 0; - } - 20% { - opacity: 1; - } - 100% { - -webkit-transform: translate(70px, 0); - transform: translate(70px, 0); - opacity: 1; - } -} -@-webkit-keyframes lds-pacman-3 { - 0% { - -webkit-transform: translate(190px, 0); - transform: translate(190px, 0); - opacity: 0; - } - 20% { - opacity: 1; - } - 100% { - -webkit-transform: translate(70px, 0); - transform: translate(70px, 0); - opacity: 1; - } -} - -.app-loading { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - top: 10em; -} -.app-loading p { - display: block; - font-size: 1.17em; - margin-inline-start: 0px; - margin-inline-end: 0px; - font-weight: normal; -} - -.app-loading .lds-pacman { - position: relative; - margin: auto; - width: 200px !important; - height: 200px !important; - -webkit-transform: translate(-100px, -100px) scale(1) translate(100px, 100px); - transform: translate(-100px, -100px) scale(1) translate(100px, 100px); -} -.app-loading .lds-pacman > div:nth-child(2) div { - position: absolute; - top: 40px; - left: 40px; - width: 120px; - height: 60px; - border-radius: 120px 120px 0 0; - background: #bbcedd; - -webkit-animation: lds-pacman-1 1s linear infinite; - animation: lds-pacman-1 1s linear infinite; - -webkit-transform-origin: 60px 60px; - transform-origin: 60px 60px; -} -.app-loading .lds-pacman > div:nth-child(2) div:nth-child(2) { - -webkit-animation: lds-pacman-2 1s linear infinite; - animation: lds-pacman-2 1s linear infinite; -} -.app-loading .lds-pacman > div:nth-child(1) div { - position: absolute; - top: 97px; - left: -8px; - width: 24px; - height: 10px; - background-image: url('../images/logo-jhipster.png'); - background-size: contain; - -webkit-animation: lds-pacman-3 1s linear infinite; - animation: lds-pacman-3 1.5s linear infinite; -} -.app-loading .lds-pacman > div:nth-child(1) div:nth-child(1) { - -webkit-animation-delay: -0.67s; - animation-delay: -1s; -} -.app-loading .lds-pacman > div:nth-child(1) div:nth-child(2) { - -webkit-animation-delay: -0.33s; - animation-delay: -0.5s; -} -.app-loading .lds-pacman > div:nth-child(1) div:nth-child(3) { - -webkit-animation-delay: 0s; - animation-delay: 0s; -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg deleted file mode 100755 index 1f9ab52790..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png deleted file mode 100644 index 8133068921..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png deleted file mode 100644 index b4739ec3e4..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-384.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-384.png deleted file mode 100644 index 0280f27e8b..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-384.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-512.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-512.png deleted file mode 100644 index 326141b927..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-512.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg deleted file mode 100755 index 7a118f3077..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg +++ /dev/null @@ -1,9387 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png deleted file mode 100644 index dd2643c15d..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-256.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-256.png deleted file mode 100644 index 2c5352683a..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-256.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png deleted file mode 100644 index f930681c12..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png deleted file mode 100644 index 9110dc8fe4..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2.svg b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2.svg deleted file mode 100755 index 1747933833..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2.svg +++ /dev/null @@ -1,841 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png deleted file mode 100644 index 2699ab4473..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-256.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-256.png deleted file mode 100644 index 3a5903e19e..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-256.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png deleted file mode 100644 index da964fcb2e..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png deleted file mode 100644 index 6337f5effb..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3.svg b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3.svg deleted file mode 100755 index 6b9e056662..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3.svg +++ /dev/null @@ -1,308 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png deleted file mode 100644 index 35b91257fc..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png deleted file mode 100644 index 098fd8fb05..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-384.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-384.png deleted file mode 100644 index b770045754..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-384.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-512.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-512.png deleted file mode 100644 index 58b28b9c48..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-512.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/logo-jhipster.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/logo-jhipster.png deleted file mode 100755 index 5d31c2f84d..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/logo-jhipster.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss b/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss deleted file mode 100644 index be0f226497..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss +++ /dev/null @@ -1,42 +0,0 @@ -/* -* Bootstrap overrides https://getbootstrap.com/docs/4.0/getting-started/theming/ -* All values defined in bootstrap source -* https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss can be overwritten here -* Make sure not to add !default to values here -*/ - -// Colors: -// Grayscale and brand colors for use across Bootstrap. - -$primary: #3e8acc; -$success: #28a745; -$info: #17a2b8; -$warning: #ffc107; -$danger: #dc3545; - -// Options: -// Quickly modify global styling by enabling or disabling optional features. -$enable-rounded: true; -$enable-shadows: false; -$enable-gradients: false; -$enable-transitions: true; -$enable-hover-media-query: false; -$enable-grid-classes: true; -$enable-print-styles: true; - -// Components: -// Define common padding and border radius sizes and more. - -$border-radius: 0.15rem; -$border-radius-lg: 0.125rem; -$border-radius-sm: 0.1rem; - -// Body: -// Settings for the `` element. - -$body-bg: #e4e5e6; - -// Typography: -// Font, line-height, and color for body text, headings, and more. - -$font-size-base: 1rem; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/global.scss b/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/global.scss deleted file mode 100644 index cfbb9bf5b8..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/global.scss +++ /dev/null @@ -1,226 +0,0 @@ -@import 'bootstrap-variables'; - -/* ============================================================== -Bootstrap tweaks -===============================================================*/ - -body, -h1, -h2, -h3, -h4 { - font-weight: 300; -} - -a { - color: #533f03; - font-weight: bold; -} - -a:hover { - color: #533f03; - font-weight: bold; - /* make sure browsers use the pointer cursor for anchors, even with no href */ - cursor: pointer; -} - -/* ========================================================================== -Browser Upgrade Prompt -========================================================================== */ -.browserupgrade { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.2em 0; -} - -/* ========================================================================== -Generic styles -========================================================================== */ - -/* Error highlight on input fields */ -.ng-valid[required], -.ng-valid.required { - border-left: 5px solid green; -} - -.ng-invalid:not(form) { - border-left: 5px solid red; -} - -/* other generic styles */ - -.jh-card { - padding: 1.5%; - margin-top: 20px; - border: none; -} - -.error { - color: white; - background-color: red; -} - -.pad { - padding: 10px; -} - -.w-40 { - width: 40% !important; -} - -.w-60 { - width: 60% !important; -} - -.break { - white-space: normal; - word-break: break-all; -} - -.readonly { - background-color: #eee; - opacity: 1; -} - -.footer { - border-top: 1px solid rgba(0, 0, 0, 0.125); -} - -.hand, -[jhisortby] { - cursor: pointer; -} - -/* ========================================================================== -Custom alerts for notification -========================================================================== */ -.alerts { - .alert { - text-overflow: ellipsis; - pre { - background: none; - border: none; - font: inherit; - color: inherit; - padding: 0; - margin: 0; - } - .popover pre { - font-size: 10px; - } - } - .toast { - position: fixed; - width: 100%; - &.left { - left: 5px; - } - &.right { - right: 5px; - } - &.top { - top: 55px; - } - &.bottom { - bottom: 55px; - } - } -} - -@media screen and (min-width: 480px) { - .alerts .toast { - width: 50%; - } -} - -/* ========================================================================== -entity tables helpers -========================================================================== */ - -/* Remove Bootstrap padding from the element -http://stackoverflow.com/questions/19562903/remove-padding-from-columns-in-bootstrap-3 */ -@mixin no-padding($side) { - @if $side == 'all' { - .no-padding { - padding: 0 !important; - } - } @else { - .no-padding-#{$side} { - padding-#{$side}: 0 !important; - } - } -} -@include no-padding('left'); -@include no-padding('right'); -@include no-padding('top'); -@include no-padding('bottom'); -@include no-padding('all'); - -/* bootstrap 3 input-group 100% width -http://stackoverflow.com/questions/23436430/bootstrap-3-input-group-100-width */ -.width-min { - width: 1% !important; -} - -/* Makes toolbar not wrap on smaller screens -http://www.sketchingwithcss.com/samplechapter/cheatsheet.html#right */ -.flex-btn-group-container { - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - flex-direction: row; - -webkit-justify-content: flex-end; - justify-content: flex-end; -} - -/* ========================================================================== -entity detail page css -========================================================================== */ -.row.jh-entity-details > { - dd { - margin-bottom: 15px; - } -} - -@media screen and (min-width: 768px) { - .row.jh-entity-details > { - dt { - margin-bottom: 15px; - } - dd { - border-bottom: 1px solid #eee; - padding-left: 180px; - margin-left: 0; - } - } -} - -/* ========================================================================== -ui bootstrap tweaks -========================================================================== */ -.nav, -.pagination, -.carousel, -.panel-title a { - cursor: pointer; -} - -.datetime-picker-dropdown > li.date-picker-menu div > table .btn-default, -.uib-datepicker-popup > li > div.uib-datepicker > table .btn-default { - border: 0; -} - -.datetime-picker-dropdown > li.date-picker-menu div > table:focus, -.uib-datepicker-popup > li > div.uib-datepicker > table:focus { - outline: none; -} - -.thread-dump-modal-lock { - max-width: 450px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* jhipster-needle-scss-add-main JHipster will add new css style */ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/vendor.scss b/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/vendor.scss deleted file mode 100644 index 12a8f54b83..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/vendor.scss +++ /dev/null @@ -1,12 +0,0 @@ -/* after changing this file run 'npm run webpack:build' */ - -/*************************** -put Sass variables here: -eg $input-color: red; -****************************/ -// Override Boostrap variables -@import 'bootstrap-variables'; -// Import Bootstrap source files from node_modules -@import '~bootstrap/scss/bootstrap'; - -/* jhipster-needle-scss-add-vendor JHipster will add new css style */ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/favicon.ico b/jhipster-5/bookstore-monolith/src/main/webapp/favicon.ico deleted file mode 100755 index 4179874f53..0000000000 Binary files a/jhipster-5/bookstore-monolith/src/main/webapp/favicon.ico and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/index.html b/jhipster-5/bookstore-monolith/src/main/webapp/index.html deleted file mode 100644 index a2fd4df265..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/index.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - Bookstore - - - - - - - - - - - -
-
-
-
-
-
-
-
-
- -
-
- - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/manifest.webapp b/jhipster-5/bookstore-monolith/src/main/webapp/manifest.webapp deleted file mode 100644 index 42b606ea1d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/manifest.webapp +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "Bookstore", - "short_name": "Bookstore", - "icons": [ - { - "src": "./content/images/jhipster_family_member_0_head-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "./content/images/jhipster_family_member_0_head-256.png", - "sizes": "256x256", - "type": "image/png" - }, - { - "src": "./content/images/jhipster_family_member_0_head-384.png", - "sizes": "384x384", - "type": "image/png" - }, - { - "src": "./content/images/jhipster_family_member_0_head-512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#000000", - "background_color": "#e0e0e0", - "start_url": "/index.html", - "display": "standalone", - "orientation": "portrait" -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/robots.txt b/jhipster-5/bookstore-monolith/src/main/webapp/robots.txt deleted file mode 100644 index 7cda27477d..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/robots.txt +++ /dev/null @@ -1,11 +0,0 @@ -# robotstxt.org/ - -User-agent: * -Disallow: /api/account -Disallow: /api/account/change-password -Disallow: /api/account/sessions -Disallow: /api/audits/ -Disallow: /api/logs/ -Disallow: /api/users/ -Disallow: /management/ -Disallow: /v2/api-docs/ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/swagger-ui/index.html b/jhipster-5/bookstore-monolith/src/main/webapp/swagger-ui/index.html deleted file mode 100644 index 416eacef70..0000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/swagger-ui/index.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Swagger UI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
-
- - diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTest.java deleted file mode 100644 index 764d6b3587..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTest.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.JHipsterProperties; -import io.github.jhipster.web.filter.CachingHttpHeadersFilter; -import io.undertow.Undertow; -import io.undertow.Undertow.Builder; -import io.undertow.UndertowOptions; -import org.apache.commons.io.FilenameUtils; - -import org.h2.server.web.WebServlet; -import org.junit.Before; -import org.junit.Test; -import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; -import org.springframework.http.HttpHeaders; -import org.springframework.mock.env.MockEnvironment; -import org.springframework.mock.web.MockServletContext; -import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.xnio.OptionMap; - -import javax.servlet.*; -import java.util.*; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.options; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Unit tests for the WebConfigurer class. - * - * @see WebConfigurer - */ -public class WebConfigurerUnitTest { - - private WebConfigurer webConfigurer; - - private MockServletContext servletContext; - - private MockEnvironment env; - - private JHipsterProperties props; - - @Before - public void setup() { - servletContext = spy(new MockServletContext()); - doReturn(mock(FilterRegistration.Dynamic.class)) - .when(servletContext).addFilter(anyString(), any(Filter.class)); - doReturn(mock(ServletRegistration.Dynamic.class)) - .when(servletContext).addServlet(anyString(), any(Servlet.class)); - - env = new MockEnvironment(); - props = new JHipsterProperties(); - - webConfigurer = new WebConfigurer(env, props); - } - - @Test - public void testStartUpProdServletContext() throws ServletException { - env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); - webConfigurer.onStartup(servletContext); - - verify(servletContext).addFilter(eq("cachingHttpHeadersFilter"), any(CachingHttpHeadersFilter.class)); - verify(servletContext, never()).addServlet(eq("H2Console"), any(WebServlet.class)); - } - - @Test - public void testStartUpDevServletContext() throws ServletException { - env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT); - webConfigurer.onStartup(servletContext); - - verify(servletContext, never()).addFilter(eq("cachingHttpHeadersFilter"), any(CachingHttpHeadersFilter.class)); - verify(servletContext).addServlet(eq("H2Console"), any(WebServlet.class)); - } - - @Test - public void testCustomizeServletContainer() { - env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); - UndertowServletWebServerFactory container = new UndertowServletWebServerFactory(); - webConfigurer.customize(container); - assertThat(container.getMimeMappings().get("abs")).isEqualTo("audio/x-mpeg"); - assertThat(container.getMimeMappings().get("html")).isEqualTo("text/html;charset=utf-8"); - assertThat(container.getMimeMappings().get("json")).isEqualTo("text/html;charset=utf-8"); - if (container.getDocumentRoot() != null) { - assertThat(container.getDocumentRoot().getPath()).isEqualTo(FilenameUtils.separatorsToSystem("target/www")); - } - - Builder builder = Undertow.builder(); - container.getBuilderCustomizers().forEach(c -> c.customize(builder)); - OptionMap.Builder serverOptions = (OptionMap.Builder) ReflectionTestUtils.getField(builder, "serverOptions"); - assertThat(serverOptions.getMap().get(UndertowOptions.ENABLE_HTTP2)).isNull(); - } - - @Test - public void testUndertowHttp2Enabled() { - props.getHttp().setVersion(JHipsterProperties.Http.Version.V_2_0); - UndertowServletWebServerFactory container = new UndertowServletWebServerFactory(); - webConfigurer.customize(container); - Builder builder = Undertow.builder(); - container.getBuilderCustomizers().forEach(c -> c.customize(builder)); - OptionMap.Builder serverOptions = (OptionMap.Builder) ReflectionTestUtils.getField(builder, "serverOptions"); - assertThat(serverOptions.getMap().get(UndertowOptions.ENABLE_HTTP2)).isTrue(); - } - - @Test - public void testCorsFilterOnApiPath() throws Exception { - props.getCors().setAllowedOrigins(Collections.singletonList("*")); - props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); - props.getCors().setAllowedHeaders(Collections.singletonList("*")); - props.getCors().setMaxAge(1800L); - props.getCors().setAllowCredentials(true); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - options("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com") - .header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "POST")) - .andExpect(status().isOk()) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")) - .andExpect(header().string(HttpHeaders.VARY, "Origin")) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET,POST,PUT,DELETE")) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true")) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "1800")); - - mockMvc.perform( - get("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")); - } - - @Test - public void testCorsFilterOnOtherPath() throws Exception { - props.getCors().setAllowedOrigins(Collections.singletonList("*")); - props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); - props.getCors().setAllowedHeaders(Collections.singletonList("*")); - props.getCors().setMaxAge(1800L); - props.getCors().setAllowCredentials(true); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - get("/test/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); - } - - @Test - public void testCorsFilterDeactivated() throws Exception { - props.getCors().setAllowedOrigins(null); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - get("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); - } - - @Test - public void testCorsFilterDeactivated2() throws Exception { - props.getCors().setAllowedOrigins(new ArrayList<>()); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - get("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTestController.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTestController.java deleted file mode 100644 index ee72e1c80e..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTestController.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.jhipster5.config; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class WebConfigurerUnitTestController { - - @GetMapping("/api/test-cors") - public void testCorsOnApiPath() { - } - - @GetMapping("/test/test-cors") - public void testCorsOnOtherPath() { - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/timezone/HibernateTimeZoneIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/timezone/HibernateTimeZoneIntegrationTest.java deleted file mode 100644 index fba77e037e..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/timezone/HibernateTimeZoneIntegrationTest.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.baeldung.jhipster5.config.timezone; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.repository.timezone.DateTimeWrapper; -import com.baeldung.jhipster5.repository.timezone.DateTimeWrapperRepository; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.support.rowset.SqlRowSet; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import java.time.*; -import java.time.format.DateTimeFormatter; - -import static java.lang.String.format; -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for the UTC Hibernate configuration. - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class HibernateTimeZoneIntegrationTest { - - @Autowired - private DateTimeWrapperRepository dateTimeWrapperRepository; - @Autowired - private JdbcTemplate jdbcTemplate; - - private DateTimeWrapper dateTimeWrapper; - private DateTimeFormatter dateTimeFormatter; - private DateTimeFormatter timeFormatter; - private DateTimeFormatter dateFormatter; - - @Before - public void setup() { - dateTimeWrapper = new DateTimeWrapper(); - dateTimeWrapper.setInstant(Instant.parse("2014-11-12T05:50:00.0Z")); - dateTimeWrapper.setLocalDateTime(LocalDateTime.parse("2014-11-12T07:50:00.0")); - dateTimeWrapper.setOffsetDateTime(OffsetDateTime.parse("2011-12-14T08:30:00.0Z")); - dateTimeWrapper.setZonedDateTime(ZonedDateTime.parse("2011-12-14T08:30:00.0Z")); - dateTimeWrapper.setLocalTime(LocalTime.parse("14:30:00")); - dateTimeWrapper.setOffsetTime(OffsetTime.parse("14:30:00+02:00")); - dateTimeWrapper.setLocalDate(LocalDate.parse("2016-09-10")); - - dateTimeFormatter = DateTimeFormatter - .ofPattern("yyyy-MM-dd HH:mm:ss.S") - .withZone(ZoneId.of("UTC")); - - timeFormatter = DateTimeFormatter - .ofPattern("HH:mm:ss") - .withZone(ZoneId.of("UTC")); - - dateFormatter = DateTimeFormatter - .ofPattern("yyyy-MM-dd"); - } - - @Test - @Transactional - public void storeInstantWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("instant", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeFormatter.format(dateTimeWrapper.getInstant()); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeLocalDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getLocalDateTime() - .atZone(ZoneId.systemDefault()) - .format(dateTimeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeOffsetDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("offset_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getOffsetDateTime() - .format(dateTimeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeZoneDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("zoned_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getZonedDateTime() - .format(dateTimeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeLocalTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getLocalTime() - .atDate(LocalDate.of(1970, Month.JANUARY, 1)) - .atZone(ZoneId.systemDefault()) - .format(timeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeOffsetTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("offset_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getOffsetTime() - .toLocalTime() - .atDate(LocalDate.of(1970, Month.JANUARY, 1)) - .atZone(ZoneId.systemDefault()) - .format(timeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeLocalDateWithUtcConfigShouldBeStoredWithoutTransformation() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_date", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getLocalDate() - .format(dateFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - private String generateSqlRequest(String fieldName, long id) { - return format("SELECT %s FROM jhi_date_time_wrapper where id=%d", fieldName, id); - } - - private void assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(SqlRowSet sqlRowSet, String expectedValue) { - while (sqlRowSet.next()) { - String dbValue = sqlRowSet.getString(1); - - assertThat(dbValue).isNotNull(); - assertThat(dbValue).isEqualTo(expectedValue); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/CustomAuditEventRepositoryIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/CustomAuditEventRepositoryIntegrationTest.java deleted file mode 100644 index 948bf43f87..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/CustomAuditEventRepositoryIntegrationTest.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.domain.PersistentAuditEvent; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import javax.servlet.http.HttpSession; -import java.time.Instant; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.assertj.core.api.Assertions.assertThat; -import static com.baeldung.jhipster5.repository.CustomAuditEventRepository.EVENT_DATA_COLUMN_MAX_LENGTH; - -/** - * Test class for the CustomAuditEventRepository class. - * - * @see CustomAuditEventRepository - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class CustomAuditEventRepositoryIntegrationTest { - - @Autowired - private PersistenceAuditEventRepository persistenceAuditEventRepository; - - @Autowired - private AuditEventConverter auditEventConverter; - - private CustomAuditEventRepository customAuditEventRepository; - - private PersistentAuditEvent testUserEvent; - - private PersistentAuditEvent testOtherUserEvent; - - private PersistentAuditEvent testOldUserEvent; - - @Before - public void setup() { - customAuditEventRepository = new CustomAuditEventRepository(persistenceAuditEventRepository, auditEventConverter); - persistenceAuditEventRepository.deleteAll(); - Instant oneHourAgo = Instant.now().minusSeconds(3600); - - testUserEvent = new PersistentAuditEvent(); - testUserEvent.setPrincipal("test-user"); - testUserEvent.setAuditEventType("test-type"); - testUserEvent.setAuditEventDate(oneHourAgo); - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - testUserEvent.setData(data); - - testOldUserEvent = new PersistentAuditEvent(); - testOldUserEvent.setPrincipal("test-user"); - testOldUserEvent.setAuditEventType("test-type"); - testOldUserEvent.setAuditEventDate(oneHourAgo.minusSeconds(10000)); - - testOtherUserEvent = new PersistentAuditEvent(); - testOtherUserEvent.setPrincipal("other-test-user"); - testOtherUserEvent.setAuditEventType("test-type"); - testOtherUserEvent.setAuditEventDate(oneHourAgo); - } - - @Test - public void addAuditEvent() { - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); - assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); - assertThat(persistentAuditEvent.getData()).containsKey("test-key"); - assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("test-value"); - assertThat(persistentAuditEvent.getAuditEventDate()).isEqualTo(event.getTimestamp()); - } - - @Test - public void addAuditEventTruncateLargeData() { - Map data = new HashMap<>(); - StringBuilder largeData = new StringBuilder(); - for (int i = 0; i < EVENT_DATA_COLUMN_MAX_LENGTH + 10; i++) { - largeData.append("a"); - } - data.put("test-key", largeData); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); - assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); - assertThat(persistentAuditEvent.getData()).containsKey("test-key"); - String actualData = persistentAuditEvent.getData().get("test-key"); - assertThat(actualData.length()).isEqualTo(EVENT_DATA_COLUMN_MAX_LENGTH); - assertThat(actualData).isSubstringOf(largeData); - assertThat(persistentAuditEvent.getAuditEventDate()).isEqualTo(event.getTimestamp()); - } - - @Test - public void testAddEventWithWebAuthenticationDetails() { - HttpSession session = new MockHttpSession(null, "test-session-id"); - MockHttpServletRequest request = new MockHttpServletRequest(); - request.setSession(session); - request.setRemoteAddr("1.2.3.4"); - WebAuthenticationDetails details = new WebAuthenticationDetails(request); - Map data = new HashMap<>(); - data.put("test-key", details); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getData().get("remoteAddress")).isEqualTo("1.2.3.4"); - assertThat(persistentAuditEvent.getData().get("sessionId")).isEqualTo("test-session-id"); - } - - @Test - public void testAddEventWithNullData() { - Map data = new HashMap<>(); - data.put("test-key", null); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("null"); - } - - @Test - public void addAuditEventWithAnonymousUser() { - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - AuditEvent event = new AuditEvent(Constants.ANONYMOUS_USER, "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(0); - } - - @Test - public void addAuditEventWithAuthorizationFailureType() { - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - AuditEvent event = new AuditEvent("test-user", "AUTHORIZATION_FAILURE", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(0); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapper.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapper.java deleted file mode 100644 index 473a8e782e..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapper.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.baeldung.jhipster5.repository.timezone; - -import javax.persistence.*; -import java.io.Serializable; -import java.time.*; -import java.util.Objects; - -@Entity -@Table(name = "jhi_date_time_wrapper") -public class DateTimeWrapper implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(name = "instant") - private Instant instant; - - @Column(name = "local_date_time") - private LocalDateTime localDateTime; - - @Column(name = "offset_date_time") - private OffsetDateTime offsetDateTime; - - @Column(name = "zoned_date_time") - private ZonedDateTime zonedDateTime; - - @Column(name = "local_time") - private LocalTime localTime; - - @Column(name = "offset_time") - private OffsetTime offsetTime; - - @Column(name = "local_date") - private LocalDate localDate; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Instant getInstant() { - return instant; - } - - public void setInstant(Instant instant) { - this.instant = instant; - } - - public LocalDateTime getLocalDateTime() { - return localDateTime; - } - - public void setLocalDateTime(LocalDateTime localDateTime) { - this.localDateTime = localDateTime; - } - - public OffsetDateTime getOffsetDateTime() { - return offsetDateTime; - } - - public void setOffsetDateTime(OffsetDateTime offsetDateTime) { - this.offsetDateTime = offsetDateTime; - } - - public ZonedDateTime getZonedDateTime() { - return zonedDateTime; - } - - public void setZonedDateTime(ZonedDateTime zonedDateTime) { - this.zonedDateTime = zonedDateTime; - } - - public LocalTime getLocalTime() { - return localTime; - } - - public void setLocalTime(LocalTime localTime) { - this.localTime = localTime; - } - - public OffsetTime getOffsetTime() { - return offsetTime; - } - - public void setOffsetTime(OffsetTime offsetTime) { - this.offsetTime = offsetTime; - } - - public LocalDate getLocalDate() { - return localDate; - } - - public void setLocalDate(LocalDate localDate) { - this.localDate = localDate; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - DateTimeWrapper dateTimeWrapper = (DateTimeWrapper) o; - return !(dateTimeWrapper.getId() == null || getId() == null) && Objects.equals(getId(), dateTimeWrapper.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "TimeZoneTest{" + - "id=" + id + - ", instant=" + instant + - ", localDateTime=" + localDateTime + - ", offsetDateTime=" + offsetDateTime + - ", zonedDateTime=" + zonedDateTime + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapperRepository.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapperRepository.java deleted file mode 100644 index 9c3831879f..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapperRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.jhipster5.repository.timezone; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -/** - * Spring Data JPA repository for the DateTimeWrapper entity. - */ -@Repository -public interface DateTimeWrapperRepository extends JpaRepository { - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/DomainUserDetailsServiceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/DomainUserDetailsServiceIntegrationTest.java deleted file mode 100644 index 11757f6516..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/DomainUserDetailsServiceIntegrationTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.baeldung.jhipster5.security; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; - -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Locale; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test class for DomainUserDetailsService. - * - * @see DomainUserDetailsService - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class DomainUserDetailsServiceIntegrationTest { - - private static final String USER_ONE_LOGIN = "test-user-one"; - private static final String USER_ONE_EMAIL = "test-user-one@localhost"; - private static final String USER_TWO_LOGIN = "test-user-two"; - private static final String USER_TWO_EMAIL = "test-user-two@localhost"; - private static final String USER_THREE_LOGIN = "test-user-three"; - private static final String USER_THREE_EMAIL = "test-user-three@localhost"; - - @Autowired - private UserRepository userRepository; - - @Autowired - private UserDetailsService domainUserDetailsService; - - private User userOne; - private User userTwo; - private User userThree; - - @Before - public void init() { - userOne = new User(); - userOne.setLogin(USER_ONE_LOGIN); - userOne.setPassword(RandomStringUtils.random(60)); - userOne.setActivated(true); - userOne.setEmail(USER_ONE_EMAIL); - userOne.setFirstName("userOne"); - userOne.setLastName("doe"); - userOne.setLangKey("en"); - userRepository.save(userOne); - - userTwo = new User(); - userTwo.setLogin(USER_TWO_LOGIN); - userTwo.setPassword(RandomStringUtils.random(60)); - userTwo.setActivated(true); - userTwo.setEmail(USER_TWO_EMAIL); - userTwo.setFirstName("userTwo"); - userTwo.setLastName("doe"); - userTwo.setLangKey("en"); - userRepository.save(userTwo); - - userThree = new User(); - userThree.setLogin(USER_THREE_LOGIN); - userThree.setPassword(RandomStringUtils.random(60)); - userThree.setActivated(false); - userThree.setEmail(USER_THREE_EMAIL); - userThree.setFirstName("userThree"); - userThree.setLastName("doe"); - userThree.setLangKey("en"); - userRepository.save(userThree); - } - - @Test - @Transactional - public void assertThatUserCanBeFoundByLogin() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); - } - - @Test - @Transactional - public void assertThatUserCanBeFoundByLoginIgnoreCase() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN.toUpperCase(Locale.ENGLISH)); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); - } - - @Test - @Transactional - public void assertThatUserCanBeFoundByEmail() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN); - } - - @Test(expected = UsernameNotFoundException.class) - @Transactional - public void assertThatUserCanNotBeFoundByEmailIgnoreCase() { - domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL.toUpperCase(Locale.ENGLISH)); - } - - @Test - @Transactional - public void assertThatEmailIsPrioritizedOverLogin() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_EMAIL); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); - } - - @Test(expected = UserNotActivatedException.class) - @Transactional - public void assertThatUserNotActivatedExceptionIsThrownForNotActivatedUsers() { - domainUserDetailsService.loadUserByUsername(USER_THREE_LOGIN); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java deleted file mode 100644 index bdcdba7644..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.jhipster5.security; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Primary; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Component; - -import java.util.Collection; -import java.util.Collections; - -/** - * AuthenticationManager used solely by unit tests. - */ -@Component -@Primary -public class MockAuthenticationManager implements AuthenticationManager -{ - private final static Collection ROLES = - Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")); - - @Autowired - private UserDetailsService userDetailsService; - - @Autowired - private PasswordEncoder passwordEncoder; - - @Override - public Authentication authenticate(Authentication authentication) throws AuthenticationException - { - - UserDetails userDetails = userDetailsService.loadUserByUsername(authentication.getName()); - - if(userDetails == null || !passwordEncoder.matches(authentication.getCredentials().toString(), userDetails.getPassword())) - { - throw new BadCredentialsException("Invalid username/password"); - } - - UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken( - authentication.getPrincipal().toString(), - authentication.getCredentials().toString(), - ROLES); - - return token; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/SecurityUtilsUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/SecurityUtilsUnitTest.java deleted file mode 100644 index b2736badd6..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/SecurityUtilsUnitTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.baeldung.jhipster5.security; - -import org.junit.Test; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test class for the SecurityUtils utility class. - * - * @see SecurityUtils - */ -public class SecurityUtilsUnitTest { - - @Test - public void testgetCurrentUserLogin() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); - SecurityContextHolder.setContext(securityContext); - Optional login = SecurityUtils.getCurrentUserLogin(); - assertThat(login).contains("admin"); - } - - @Test - public void testgetCurrentUserJWT() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "token")); - SecurityContextHolder.setContext(securityContext); - Optional jwt = SecurityUtils.getCurrentUserJWT(); - assertThat(jwt).contains("token"); - } - - @Test - public void testIsAuthenticated() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); - SecurityContextHolder.setContext(securityContext); - boolean isAuthenticated = SecurityUtils.isAuthenticated(); - assertThat(isAuthenticated).isTrue(); - } - - @Test - public void testAnonymousIsNotAuthenticated() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities)); - SecurityContextHolder.setContext(securityContext); - boolean isAuthenticated = SecurityUtils.isAuthenticated(); - assertThat(isAuthenticated).isFalse(); - } - - @Test - public void testIsCurrentUserInRole() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); - SecurityContextHolder.setContext(securityContext); - - assertThat(SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.USER)).isTrue(); - assertThat(SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.ADMIN)).isFalse(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/JWTFilterUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/JWTFilterUnitTest.java deleted file mode 100644 index 2be8e6809a..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/JWTFilterUnitTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import io.github.jhipster.config.JHipsterProperties; -import io.jsonwebtoken.io.Decoders; -import io.jsonwebtoken.security.Keys; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.http.HttpStatus; -import org.springframework.mock.web.MockFilterChain; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Collections; - -import static org.assertj.core.api.Assertions.assertThat; - -public class JWTFilterUnitTest { - - private TokenProvider tokenProvider; - - private JWTFilter jwtFilter; - - @Before - public void setup() { - JHipsterProperties jHipsterProperties = new JHipsterProperties(); - tokenProvider = new TokenProvider(jHipsterProperties); - ReflectionTestUtils.setField(tokenProvider, "key", - Keys.hmacShaKeyFor(Decoders.BASE64 - .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8"))); - - ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", 60000); - jwtFilter = new JWTFilter(tokenProvider); - SecurityContextHolder.getContext().setAuthentication(null); - } - - @Test - public void testJWTFilter() throws Exception { - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - "test-user", - "test-password", - Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) - ); - String jwt = tokenProvider.createToken(authentication, false); - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication().getName()).isEqualTo("test-user"); - assertThat(SecurityContextHolder.getContext().getAuthentication().getCredentials().toString()).isEqualTo(jwt); - } - - @Test - public void testJWTFilterInvalidToken() throws Exception { - String jwt = "wrong_jwt"; - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - - @Test - public void testJWTFilterMissingAuthorization() throws Exception { - MockHttpServletRequest request = new MockHttpServletRequest(); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - - @Test - public void testJWTFilterMissingToken() throws Exception { - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer "); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - - @Test - public void testJWTFilterWrongScheme() throws Exception { - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - "test-user", - "test-password", - Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) - ); - String jwt = tokenProvider.createToken(authentication, false); - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Basic " + jwt); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/TokenProviderUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/TokenProviderUnitTest.java deleted file mode 100644 index 18da2eb875..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/TokenProviderUnitTest.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import com.baeldung.jhipster5.security.AuthoritiesConstants; - -import java.security.Key; -import java.util.*; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.test.util.ReflectionTestUtils; - -import io.github.jhipster.config.JHipsterProperties; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import io.jsonwebtoken.io.Decoders; -import io.jsonwebtoken.security.Keys; - -import static org.assertj.core.api.Assertions.assertThat; - -public class TokenProviderUnitTest { - - private final long ONE_MINUTE = 60000; - private Key key; - private JHipsterProperties jHipsterProperties; - private TokenProvider tokenProvider; - - @Before - public void setup() { - jHipsterProperties = Mockito.mock(JHipsterProperties.class); - tokenProvider = new TokenProvider(jHipsterProperties); - key = Keys.hmacShaKeyFor(Decoders.BASE64 - .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); - - ReflectionTestUtils.setField(tokenProvider, "key", key); - ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", ONE_MINUTE); - } - - @Test - public void testReturnFalseWhenJWThasInvalidSignature() { - boolean isTokenValid = tokenProvider.validateToken(createTokenWithDifferentSignature()); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisMalformed() { - Authentication authentication = createAuthentication(); - String token = tokenProvider.createToken(authentication, false); - String invalidToken = token.substring(1); - boolean isTokenValid = tokenProvider.validateToken(invalidToken); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisExpired() { - ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", -ONE_MINUTE); - - Authentication authentication = createAuthentication(); - String token = tokenProvider.createToken(authentication, false); - - boolean isTokenValid = tokenProvider.validateToken(token); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisUnsupported() { - String unsupportedToken = createUnsupportedToken(); - - boolean isTokenValid = tokenProvider.validateToken(unsupportedToken); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisInvalid() { - boolean isTokenValid = tokenProvider.validateToken(""); - - assertThat(isTokenValid).isEqualTo(false); - } - - private Authentication createAuthentication() { - Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); - return new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities); - } - - private String createUnsupportedToken() { - return Jwts.builder() - .setPayload("payload") - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - private String createTokenWithDifferentSignature() { - Key otherKey = Keys.hmacShaKeyFor(Decoders.BASE64 - .decode("Xfd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); - - return Jwts.builder() - .setSubject("anonymous") - .signWith(otherKey, SignatureAlgorithm.HS512) - .setExpiration(new Date(new Date().getTime() + ONE_MINUTE)) - .compact(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/MailServiceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/MailServiceIntegrationTest.java deleted file mode 100644 index 72592e1239..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/MailServiceIntegrationTest.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.baeldung.jhipster5.service; -import com.baeldung.jhipster5.config.Constants; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import io.github.jhipster.config.JHipsterProperties; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.MockitoAnnotations; -import org.mockito.Spy; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.MessageSource; -import org.springframework.mail.MailSendException; -import org.springframework.mail.javamail.JavaMailSenderImpl; -import org.springframework.test.context.junit4.SpringRunner; -import org.thymeleaf.spring5.SpringTemplateEngine; - -import javax.mail.Multipart; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; -import java.io.ByteArrayOutputStream; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class MailServiceIntegrationTest { - - @Autowired - private JHipsterProperties jHipsterProperties; - - @Autowired - private MessageSource messageSource; - - @Autowired - private SpringTemplateEngine templateEngine; - - @Spy - private JavaMailSenderImpl javaMailSender; - - @Captor - private ArgumentCaptor messageCaptor; - - private MailService mailService; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - doNothing().when(javaMailSender).send(any(MimeMessage.class)); - mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine); - } - - @Test - public void testSendEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(String.class); - assertThat(message.getContent().toString()).isEqualTo("testContent"); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); - } - - @Test - public void testSendHtmlEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, true); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(String.class); - assertThat(message.getContent().toString()).isEqualTo("testContent"); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendMultipartEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, false); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - MimeMultipart mp = (MimeMultipart) message.getContent(); - MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); - ByteArrayOutputStream aos = new ByteArrayOutputStream(); - part.writeTo(aos); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(Multipart.class); - assertThat(aos.toString()).isEqualTo("\r\ntestContent"); - assertThat(part.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); - } - - @Test - public void testSendMultipartHtmlEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, true); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - MimeMultipart mp = (MimeMultipart) message.getContent(); - MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); - ByteArrayOutputStream aos = new ByteArrayOutputStream(); - part.writeTo(aos); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(Multipart.class); - assertThat(aos.toString()).isEqualTo("\r\ntestContent"); - assertThat(part.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendEmailFromTemplate() throws Exception { - User user = new User(); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - user.setLangKey("en"); - mailService.sendEmailFromTemplate(user, "mail/testEmail", "email.test.title"); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getSubject()).isEqualTo("test title"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isEqualToNormalizingNewlines("test title, http://127.0.0.1:8080, john\n"); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendActivationEmail() throws Exception { - User user = new User(); - user.setLangKey(Constants.DEFAULT_LANGUAGE); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - mailService.sendActivationEmail(user); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isNotEmpty(); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testCreationEmail() throws Exception { - User user = new User(); - user.setLangKey(Constants.DEFAULT_LANGUAGE); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - mailService.sendCreationEmail(user); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isNotEmpty(); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendPasswordResetMail() throws Exception { - User user = new User(); - user.setLangKey(Constants.DEFAULT_LANGUAGE); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - mailService.sendPasswordResetMail(user); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isNotEmpty(); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendEmailWithException() throws Exception { - doThrow(MailSendException.class).when(javaMailSender).send(any(MimeMessage.class)); - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/UserServiceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/UserServiceIntegrationTest.java deleted file mode 100644 index ca3608462d..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/UserServiceIntegrationTest.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.service.util.RandomUtil; - -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.auditing.AuditingHandler; -import org.springframework.data.auditing.DateTimeProvider; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.time.LocalDateTime; -import java.util.Optional; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; - -/** - * Test class for the UserResource REST controller. - * - * @see UserService - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class UserServiceIntegrationTest { - - @Autowired - private UserRepository userRepository; - - @Autowired - private UserService userService; - - @Autowired - private AuditingHandler auditingHandler; - - @Mock - DateTimeProvider dateTimeProvider; - - private User user; - - @Before - public void init() { - user = new User(); - user.setLogin("johndoe"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setEmail("johndoe@localhost"); - user.setFirstName("john"); - user.setLastName("doe"); - user.setImageUrl("http://placehold.it/50x50"); - user.setLangKey("en"); - - when(dateTimeProvider.getNow()).thenReturn(Optional.of(LocalDateTime.now())); - auditingHandler.setDateTimeProvider(dateTimeProvider); - } - - @Test - @Transactional - public void assertThatUserMustExistToResetPassword() { - userRepository.saveAndFlush(user); - Optional maybeUser = userService.requestPasswordReset("invalid.login@localhost"); - assertThat(maybeUser).isNotPresent(); - - maybeUser = userService.requestPasswordReset(user.getEmail()); - assertThat(maybeUser).isPresent(); - assertThat(maybeUser.orElse(null).getEmail()).isEqualTo(user.getEmail()); - assertThat(maybeUser.orElse(null).getResetDate()).isNotNull(); - assertThat(maybeUser.orElse(null).getResetKey()).isNotNull(); - } - - @Test - @Transactional - public void assertThatOnlyActivatedUserCanRequestPasswordReset() { - user.setActivated(false); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.requestPasswordReset(user.getLogin()); - assertThat(maybeUser).isNotPresent(); - userRepository.delete(user); - } - - @Test - @Transactional - public void assertThatResetKeyMustNotBeOlderThan24Hours() { - Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); - String resetKey = RandomUtil.generateResetKey(); - user.setActivated(true); - user.setResetDate(daysAgo); - user.setResetKey(resetKey); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); - assertThat(maybeUser).isNotPresent(); - userRepository.delete(user); - } - - @Test - @Transactional - public void assertThatResetKeyMustBeValid() { - Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); - user.setActivated(true); - user.setResetDate(daysAgo); - user.setResetKey("1234"); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); - assertThat(maybeUser).isNotPresent(); - userRepository.delete(user); - } - - @Test - @Transactional - public void assertThatUserCanResetPassword() { - String oldPassword = user.getPassword(); - Instant daysAgo = Instant.now().minus(2, ChronoUnit.HOURS); - String resetKey = RandomUtil.generateResetKey(); - user.setActivated(true); - user.setResetDate(daysAgo); - user.setResetKey(resetKey); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); - assertThat(maybeUser).isPresent(); - assertThat(maybeUser.orElse(null).getResetDate()).isNull(); - assertThat(maybeUser.orElse(null).getResetKey()).isNull(); - assertThat(maybeUser.orElse(null).getPassword()).isNotEqualTo(oldPassword); - - userRepository.delete(user); - } - - @Test - @Transactional - public void testFindNotActivatedUsersByCreationDateBefore() { - Instant now = Instant.now(); - when(dateTimeProvider.getNow()).thenReturn(Optional.of(now.minus(4, ChronoUnit.DAYS))); - user.setActivated(false); - User dbUser = userRepository.saveAndFlush(user); - dbUser.setCreatedDate(now.minus(4, ChronoUnit.DAYS)); - userRepository.saveAndFlush(user); - List users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); - assertThat(users).isNotEmpty(); - userService.removeNotActivatedUsers(); - users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); - assertThat(users).isEmpty(); - } - - @Test - @Transactional - public void assertThatAnonymousUserIsNotGet() { - user.setLogin(Constants.ANONYMOUS_USER); - if (!userRepository.findOneByLogin(Constants.ANONYMOUS_USER).isPresent()) { - userRepository.saveAndFlush(user); - } - final PageRequest pageable = PageRequest.of(0, (int) userRepository.count()); - final Page allManagedUsers = userService.getAllManagedUsers(pageable); - assertThat(allManagedUsers.getContent().stream() - .noneMatch(user -> Constants.ANONYMOUS_USER.equals(user.getLogin()))) - .isTrue(); - } - - - @Test - @Transactional - public void testRemoveNotActivatedUsers() { - // custom "now" for audit to use as creation date - when(dateTimeProvider.getNow()).thenReturn(Optional.of(Instant.now().minus(30, ChronoUnit.DAYS))); - - user.setActivated(false); - userRepository.saveAndFlush(user); - - assertThat(userRepository.findOneByLogin("johndoe")).isPresent(); - userService.removeNotActivatedUsers(); - assertThat(userRepository.findOneByLogin("johndoe")).isNotPresent(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/mapper/UserMapperIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/mapper/UserMapperIntegrationTest.java deleted file mode 100644 index cd49135d63..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/mapper/UserMapperIntegrationTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.service.dto.UserDTO; -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test class for the UserMapper. - * - * @see UserMapper - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class UserMapperIntegrationTest { - - private static final String DEFAULT_LOGIN = "johndoe"; - - @Autowired - private UserMapper userMapper; - - private User user; - private UserDTO userDto; - - private static final Long DEFAULT_ID = 1L; - - @Before - public void init() { - user = new User(); - user.setLogin(DEFAULT_LOGIN); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setEmail("johndoe@localhost"); - user.setFirstName("john"); - user.setLastName("doe"); - user.setImageUrl("image_url"); - user.setLangKey("en"); - - userDto = new UserDTO(user); - } - - @Test - public void usersToUserDTOsShouldMapOnlyNonNullUsers(){ - List users = new ArrayList<>(); - users.add(user); - users.add(null); - - List userDTOS = userMapper.usersToUserDTOs(users); - - assertThat(userDTOS).isNotEmpty(); - assertThat(userDTOS).size().isEqualTo(1); - } - - @Test - public void userDTOsToUsersShouldMapOnlyNonNullUsers(){ - List usersDto = new ArrayList<>(); - usersDto.add(userDto); - usersDto.add(null); - - List users = userMapper.userDTOsToUsers(usersDto); - - assertThat(users).isNotEmpty(); - assertThat(users).size().isEqualTo(1); - } - - @Test - public void userDTOsToUsersWithAuthoritiesStringShouldMapToUsersWithAuthoritiesDomain(){ - Set authoritiesAsString = new HashSet<>(); - authoritiesAsString.add("ADMIN"); - userDto.setAuthorities(authoritiesAsString); - - List usersDto = new ArrayList<>(); - usersDto.add(userDto); - - List users = userMapper.userDTOsToUsers(usersDto); - - assertThat(users).isNotEmpty(); - assertThat(users).size().isEqualTo(1); - assertThat(users.get(0).getAuthorities()).isNotNull(); - assertThat(users.get(0).getAuthorities()).isNotEmpty(); - assertThat(users.get(0).getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); - } - - @Test - public void userDTOsToUsersMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities(){ - userDto.setAuthorities(null); - - List usersDto = new ArrayList<>(); - usersDto.add(userDto); - - List users = userMapper.userDTOsToUsers(usersDto); - - assertThat(users).isNotEmpty(); - assertThat(users).size().isEqualTo(1); - assertThat(users.get(0).getAuthorities()).isNotNull(); - assertThat(users.get(0).getAuthorities()).isEmpty(); - } - - @Test - public void userDTOToUserMapWithAuthoritiesStringShouldReturnUserWithAuthorities(){ - Set authoritiesAsString = new HashSet<>(); - authoritiesAsString.add("ADMIN"); - userDto.setAuthorities(authoritiesAsString); - - userDto.setAuthorities(authoritiesAsString); - - User user = userMapper.userDTOToUser(userDto); - - assertThat(user).isNotNull(); - assertThat(user.getAuthorities()).isNotNull(); - assertThat(user.getAuthorities()).isNotEmpty(); - assertThat(user.getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); - } - - @Test - public void userDTOToUserMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities(){ - userDto.setAuthorities(null); - - User user = userMapper.userDTOToUser(userDto); - - assertThat(user).isNotNull(); - assertThat(user.getAuthorities()).isNotNull(); - assertThat(user.getAuthorities()).isEmpty(); - } - - @Test - public void userDTOToUserMapWithNullUserShouldReturnNull(){ - assertThat(userMapper.userDTOToUser(null)).isNull(); - } - - @Test - public void testUserFromId() { - assertThat(userMapper.userFromId(DEFAULT_ID).getId()).isEqualTo(DEFAULT_ID); - assertThat(userMapper.userFromId(null)).isNull(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AccountResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AccountResourceIntegrationTest.java deleted file mode 100644 index f591b7ecbf..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AccountResourceIntegrationTest.java +++ /dev/null @@ -1,818 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.AuthorityRepository; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.PasswordChangeDTO; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; -import com.baeldung.jhipster5.web.rest.vm.KeyAndPasswordVM; -import com.baeldung.jhipster5.web.rest.vm.ManagedUserVM; -import org.apache.commons.lang3.RandomStringUtils; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.util.*; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the AccountResource REST controller. - * - * @see AccountResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class AccountResourceIntegrationTest { - - @Autowired - private UserRepository userRepository; - - @Autowired - private AuthorityRepository authorityRepository; - - @Autowired - private UserService userService; - - @Autowired - private PasswordEncoder passwordEncoder; - - @Autowired - private HttpMessageConverter[] httpMessageConverters; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Mock - private UserService mockUserService; - - @Mock - private MailService mockMailService; - - private MockMvc restMvc; - - private MockMvc restUserMockMvc; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - doNothing().when(mockMailService).sendActivationEmail(any()); - AccountResource accountResource = - new AccountResource(userRepository, userService, mockMailService); - - AccountResource accountUserMockResource = - new AccountResource(userRepository, mockUserService, mockMailService); - this.restMvc = MockMvcBuilders.standaloneSetup(accountResource) - .setMessageConverters(httpMessageConverters) - .setControllerAdvice(exceptionTranslator) - .build(); - this.restUserMockMvc = MockMvcBuilders.standaloneSetup(accountUserMockResource) - .setControllerAdvice(exceptionTranslator) - .build(); - } - - @Test - public void testNonAuthenticatedUser() throws Exception { - restUserMockMvc.perform(get("/api/authenticate") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string("")); - } - - @Test - public void testAuthenticatedUser() throws Exception { - restUserMockMvc.perform(get("/api/authenticate") - .with(request -> { - request.setRemoteUser("test"); - return request; - }) - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string("test")); - } - - @Test - public void testGetExistingAccount() throws Exception { - Set authorities = new HashSet<>(); - Authority authority = new Authority(); - authority.setName(AuthoritiesConstants.ADMIN); - authorities.add(authority); - - User user = new User(); - user.setLogin("test"); - user.setFirstName("john"); - user.setLastName("doe"); - user.setEmail("john.doe@jhipster.com"); - user.setImageUrl("http://placehold.it/50x50"); - user.setLangKey("en"); - user.setAuthorities(authorities); - when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.of(user)); - - restUserMockMvc.perform(get("/api/account") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.login").value("test")) - .andExpect(jsonPath("$.firstName").value("john")) - .andExpect(jsonPath("$.lastName").value("doe")) - .andExpect(jsonPath("$.email").value("john.doe@jhipster.com")) - .andExpect(jsonPath("$.imageUrl").value("http://placehold.it/50x50")) - .andExpect(jsonPath("$.langKey").value("en")) - .andExpect(jsonPath("$.authorities").value(AuthoritiesConstants.ADMIN)); - } - - @Test - public void testGetUnknownAccount() throws Exception { - when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.empty()); - - restUserMockMvc.perform(get("/api/account") - .accept(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(status().isInternalServerError()); - } - - @Test - @Transactional - public void testRegisterValid() throws Exception { - ManagedUserVM validUser = new ManagedUserVM(); - validUser.setLogin("test-register-valid"); - validUser.setPassword("password"); - validUser.setFirstName("Alice"); - validUser.setLastName("Test"); - validUser.setEmail("test-register-valid@example.com"); - validUser.setImageUrl("http://placehold.it/50x50"); - validUser.setLangKey(Constants.DEFAULT_LANGUAGE); - validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isFalse(); - - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(validUser))) - .andExpect(status().isCreated()); - - assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isTrue(); - } - - @Test - @Transactional - public void testRegisterInvalidLogin() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("funky-log!n");// <-- invalid - invalidUser.setPassword("password"); - invalidUser.setFirstName("Funky"); - invalidUser.setLastName("One"); - invalidUser.setEmail("funky@example.com"); - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByEmailIgnoreCase("funky@example.com"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterInvalidEmail() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("bob"); - invalidUser.setPassword("password"); - invalidUser.setFirstName("Bob"); - invalidUser.setLastName("Green"); - invalidUser.setEmail("invalid");// <-- invalid - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByLogin("bob"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterInvalidPassword() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("bob"); - invalidUser.setPassword("123");// password with only 3 digits - invalidUser.setFirstName("Bob"); - invalidUser.setLastName("Green"); - invalidUser.setEmail("bob@example.com"); - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByLogin("bob"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterNullPassword() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("bob"); - invalidUser.setPassword(null);// invalid null password - invalidUser.setFirstName("Bob"); - invalidUser.setLastName("Green"); - invalidUser.setEmail("bob@example.com"); - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByLogin("bob"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterDuplicateLogin() throws Exception { - // First registration - ManagedUserVM firstUser = new ManagedUserVM(); - firstUser.setLogin("alice"); - firstUser.setPassword("password"); - firstUser.setFirstName("Alice"); - firstUser.setLastName("Something"); - firstUser.setEmail("alice@example.com"); - firstUser.setImageUrl("http://placehold.it/50x50"); - firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); - firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Duplicate login, different email - ManagedUserVM secondUser = new ManagedUserVM(); - secondUser.setLogin(firstUser.getLogin()); - secondUser.setPassword(firstUser.getPassword()); - secondUser.setFirstName(firstUser.getFirstName()); - secondUser.setLastName(firstUser.getLastName()); - secondUser.setEmail("alice2@example.com"); - secondUser.setImageUrl(firstUser.getImageUrl()); - secondUser.setLangKey(firstUser.getLangKey()); - secondUser.setCreatedBy(firstUser.getCreatedBy()); - secondUser.setCreatedDate(firstUser.getCreatedDate()); - secondUser.setLastModifiedBy(firstUser.getLastModifiedBy()); - secondUser.setLastModifiedDate(firstUser.getLastModifiedDate()); - secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); - - // First user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(firstUser))) - .andExpect(status().isCreated()); - - // Second (non activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().isCreated()); - - Optional testUser = userRepository.findOneByEmailIgnoreCase("alice2@example.com"); - assertThat(testUser.isPresent()).isTrue(); - testUser.get().setActivated(true); - userRepository.save(testUser.get()); - - // Second (already activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().is4xxClientError()); - } - - @Test - @Transactional - public void testRegisterDuplicateEmail() throws Exception { - // First user - ManagedUserVM firstUser = new ManagedUserVM(); - firstUser.setLogin("test-register-duplicate-email"); - firstUser.setPassword("password"); - firstUser.setFirstName("Alice"); - firstUser.setLastName("Test"); - firstUser.setEmail("test-register-duplicate-email@example.com"); - firstUser.setImageUrl("http://placehold.it/50x50"); - firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); - firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Register first user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(firstUser))) - .andExpect(status().isCreated()); - - Optional testUser1 = userRepository.findOneByLogin("test-register-duplicate-email"); - assertThat(testUser1.isPresent()).isTrue(); - - // Duplicate email, different login - ManagedUserVM secondUser = new ManagedUserVM(); - secondUser.setLogin("test-register-duplicate-email-2"); - secondUser.setPassword(firstUser.getPassword()); - secondUser.setFirstName(firstUser.getFirstName()); - secondUser.setLastName(firstUser.getLastName()); - secondUser.setEmail(firstUser.getEmail()); - secondUser.setImageUrl(firstUser.getImageUrl()); - secondUser.setLangKey(firstUser.getLangKey()); - secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); - - // Register second (non activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().isCreated()); - - Optional testUser2 = userRepository.findOneByLogin("test-register-duplicate-email"); - assertThat(testUser2.isPresent()).isFalse(); - - Optional testUser3 = userRepository.findOneByLogin("test-register-duplicate-email-2"); - assertThat(testUser3.isPresent()).isTrue(); - - // Duplicate email - with uppercase email address - ManagedUserVM userWithUpperCaseEmail = new ManagedUserVM(); - userWithUpperCaseEmail.setId(firstUser.getId()); - userWithUpperCaseEmail.setLogin("test-register-duplicate-email-3"); - userWithUpperCaseEmail.setPassword(firstUser.getPassword()); - userWithUpperCaseEmail.setFirstName(firstUser.getFirstName()); - userWithUpperCaseEmail.setLastName(firstUser.getLastName()); - userWithUpperCaseEmail.setEmail("TEST-register-duplicate-email@example.com"); - userWithUpperCaseEmail.setImageUrl(firstUser.getImageUrl()); - userWithUpperCaseEmail.setLangKey(firstUser.getLangKey()); - userWithUpperCaseEmail.setAuthorities(new HashSet<>(firstUser.getAuthorities())); - - // Register third (not activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userWithUpperCaseEmail))) - .andExpect(status().isCreated()); - - Optional testUser4 = userRepository.findOneByLogin("test-register-duplicate-email-3"); - assertThat(testUser4.isPresent()).isTrue(); - assertThat(testUser4.get().getEmail()).isEqualTo("test-register-duplicate-email@example.com"); - - testUser4.get().setActivated(true); - userService.updateUser((new UserDTO(testUser4.get()))); - - // Register 4th (already activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().is4xxClientError()); - } - - @Test - @Transactional - public void testRegisterAdminIsIgnored() throws Exception { - ManagedUserVM validUser = new ManagedUserVM(); - validUser.setLogin("badguy"); - validUser.setPassword("password"); - validUser.setFirstName("Bad"); - validUser.setLastName("Guy"); - validUser.setEmail("badguy@example.com"); - validUser.setActivated(true); - validUser.setImageUrl("http://placehold.it/50x50"); - validUser.setLangKey(Constants.DEFAULT_LANGUAGE); - validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(validUser))) - .andExpect(status().isCreated()); - - Optional userDup = userRepository.findOneByLogin("badguy"); - assertThat(userDup.isPresent()).isTrue(); - assertThat(userDup.get().getAuthorities()).hasSize(1) - .containsExactly(authorityRepository.findById(AuthoritiesConstants.USER).get()); - } - - @Test - @Transactional - public void testActivateAccount() throws Exception { - final String activationKey = "some activation key"; - User user = new User(); - user.setLogin("activate-account"); - user.setEmail("activate-account@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(false); - user.setActivationKey(activationKey); - - userRepository.saveAndFlush(user); - - restMvc.perform(get("/api/activate?key={activationKey}", activationKey)) - .andExpect(status().isOk()); - - user = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(user.getActivated()).isTrue(); - } - - @Test - @Transactional - public void testActivateAccountWithWrongKey() throws Exception { - restMvc.perform(get("/api/activate?key=wrongActivationKey")) - .andExpect(status().isInternalServerError()); - } - - @Test - @Transactional - @WithMockUser("save-account") - public void testSaveAccount() throws Exception { - User user = new User(); - user.setLogin("save-account"); - user.setEmail("save-account@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("save-account@example.com"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(updatedUser.getFirstName()).isEqualTo(userDTO.getFirstName()); - assertThat(updatedUser.getLastName()).isEqualTo(userDTO.getLastName()); - assertThat(updatedUser.getEmail()).isEqualTo(userDTO.getEmail()); - assertThat(updatedUser.getLangKey()).isEqualTo(userDTO.getLangKey()); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - assertThat(updatedUser.getImageUrl()).isEqualTo(userDTO.getImageUrl()); - assertThat(updatedUser.getActivated()).isEqualTo(true); - assertThat(updatedUser.getAuthorities()).isEmpty(); - } - - @Test - @Transactional - @WithMockUser("save-invalid-email") - public void testSaveInvalidEmail() throws Exception { - User user = new User(); - user.setLogin("save-invalid-email"); - user.setEmail("save-invalid-email@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("invalid email"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isBadRequest()); - - assertThat(userRepository.findOneByEmailIgnoreCase("invalid email")).isNotPresent(); - } - - @Test - @Transactional - @WithMockUser("save-existing-email") - public void testSaveExistingEmail() throws Exception { - User user = new User(); - user.setLogin("save-existing-email"); - user.setEmail("save-existing-email@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - User anotherUser = new User(); - anotherUser.setLogin("save-existing-email2"); - anotherUser.setEmail("save-existing-email2@example.com"); - anotherUser.setPassword(RandomStringUtils.random(60)); - anotherUser.setActivated(true); - - userRepository.saveAndFlush(anotherUser); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("save-existing-email2@example.com"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("save-existing-email").orElse(null); - assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email@example.com"); - } - - @Test - @Transactional - @WithMockUser("save-existing-email-and-login") - public void testSaveExistingEmailAndLogin() throws Exception { - User user = new User(); - user.setLogin("save-existing-email-and-login"); - user.setEmail("save-existing-email-and-login@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("save-existing-email-and-login@example.com"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin("save-existing-email-and-login").orElse(null); - assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email-and-login@example.com"); - } - - @Test - @Transactional - @WithMockUser("change-password-wrong-existing-password") - public void testChangePasswordWrongExistingPassword() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-wrong-existing-password"); - user.setEmail("change-password-wrong-existing-password@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO("1"+currentPassword, "new password")))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-wrong-existing-password").orElse(null); - assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isFalse(); - assertThat(passwordEncoder.matches(currentPassword, updatedUser.getPassword())).isTrue(); - } - - @Test - @Transactional - @WithMockUser("change-password") - public void testChangePassword() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password"); - user.setEmail("change-password@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "new password")))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin("change-password").orElse(null); - assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isTrue(); - } - - @Test - @Transactional - @WithMockUser("change-password-too-small") - public void testChangePasswordTooSmall() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-too-small"); - user.setEmail("change-password-too-small@example.com"); - userRepository.saveAndFlush(user); - - String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MIN_LENGTH - 1); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-too-small").orElse(null); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - } - - @Test - @Transactional - @WithMockUser("change-password-too-long") - public void testChangePasswordTooLong() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-too-long"); - user.setEmail("change-password-too-long@example.com"); - userRepository.saveAndFlush(user); - - String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MAX_LENGTH + 1); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-too-long").orElse(null); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - } - - @Test - @Transactional - @WithMockUser("change-password-empty") - public void testChangePasswordEmpty() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-empty"); - user.setEmail("change-password-empty@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "")))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-empty").orElse(null); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - } - - @Test - @Transactional - public void testRequestPasswordReset() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setLogin("password-reset"); - user.setEmail("password-reset@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/reset-password/init") - .content("password-reset@example.com")) - .andExpect(status().isOk()); - } - - @Test - @Transactional - public void testRequestPasswordResetUpperCaseEmail() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setLogin("password-reset"); - user.setEmail("password-reset@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/reset-password/init") - .content("password-reset@EXAMPLE.COM")) - .andExpect(status().isOk()); - } - - @Test - public void testRequestPasswordResetWrongEmail() throws Exception { - restMvc.perform( - post("/api/account/reset-password/init") - .content("password-reset-wrong-email@example.com")) - .andExpect(status().isBadRequest()); - } - - @Test - @Transactional - public void testFinishPasswordReset() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setLogin("finish-password-reset"); - user.setEmail("finish-password-reset@example.com"); - user.setResetDate(Instant.now().plusSeconds(60)); - user.setResetKey("reset key"); - userRepository.saveAndFlush(user); - - KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); - keyAndPassword.setKey(user.getResetKey()); - keyAndPassword.setNewPassword("new password"); - - restMvc.perform( - post("/api/account/reset-password/finish") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isTrue(); - } - - @Test - @Transactional - public void testFinishPasswordResetTooSmall() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setLogin("finish-password-reset-too-small"); - user.setEmail("finish-password-reset-too-small@example.com"); - user.setResetDate(Instant.now().plusSeconds(60)); - user.setResetKey("reset key too small"); - userRepository.saveAndFlush(user); - - KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); - keyAndPassword.setKey(user.getResetKey()); - keyAndPassword.setNewPassword("foo"); - - restMvc.perform( - post("/api/account/reset-password/finish") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isFalse(); - } - - - @Test - @Transactional - public void testFinishPasswordResetWrongKey() throws Exception { - KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); - keyAndPassword.setKey("wrong reset key"); - keyAndPassword.setNewPassword("new password"); - - restMvc.perform( - post("/api/account/reset-password/finish") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) - .andExpect(status().isInternalServerError()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AuditResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AuditResourceIntegrationTest.java deleted file mode 100644 index 05d8f9d503..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AuditResourceIntegrationTest.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.domain.PersistentAuditEvent; -import com.baeldung.jhipster5.repository.PersistenceAuditEventRepository; -import com.baeldung.jhipster5.service.AuditEventService; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; -import org.springframework.format.support.FormattingConversionService; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the AuditResource REST controller. - * - * @see AuditResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class AuditResourceIntegrationTest { - - private static final String SAMPLE_PRINCIPAL = "SAMPLE_PRINCIPAL"; - private static final String SAMPLE_TYPE = "SAMPLE_TYPE"; - private static final Instant SAMPLE_TIMESTAMP = Instant.parse("2015-08-04T10:11:30Z"); - private static final long SECONDS_PER_DAY = 60 * 60 * 24; - - @Autowired - private PersistenceAuditEventRepository auditEventRepository; - - @Autowired - private AuditEventConverter auditEventConverter; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - @Autowired - private FormattingConversionService formattingConversionService; - - @Autowired - private PageableHandlerMethodArgumentResolver pageableArgumentResolver; - - private PersistentAuditEvent auditEvent; - - private MockMvc restAuditMockMvc; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - AuditEventService auditEventService = - new AuditEventService(auditEventRepository, auditEventConverter); - AuditResource auditResource = new AuditResource(auditEventService); - this.restAuditMockMvc = MockMvcBuilders.standaloneSetup(auditResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setConversionService(formattingConversionService) - .setMessageConverters(jacksonMessageConverter).build(); - } - - @Before - public void initTest() { - auditEventRepository.deleteAll(); - auditEvent = new PersistentAuditEvent(); - auditEvent.setAuditEventType(SAMPLE_TYPE); - auditEvent.setPrincipal(SAMPLE_PRINCIPAL); - auditEvent.setAuditEventDate(SAMPLE_TIMESTAMP); - } - - @Test - public void getAllAudits() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Get all the audits - restAuditMockMvc.perform(get("/management/audits")) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); - } - - @Test - public void getAudit() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Get the audit - restAuditMockMvc.perform(get("/management/audits/{id}", auditEvent.getId())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.principal").value(SAMPLE_PRINCIPAL)); - } - - @Test - public void getAuditsByDate() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Generate dates for selecting audits by date, making sure the period will contain the audit - String fromDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); - String toDate = SAMPLE_TIMESTAMP.plusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); - - // Get the audit - restAuditMockMvc.perform(get("/management/audits?fromDate="+fromDate+"&toDate="+toDate)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); - } - - @Test - public void getNonExistingAuditsByDate() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Generate dates for selecting audits by date, making sure the period will not contain the sample audit - String fromDate = SAMPLE_TIMESTAMP.minusSeconds(2*SECONDS_PER_DAY).toString().substring(0, 10); - String toDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); - - // Query audits but expect no results - restAuditMockMvc.perform(get("/management/audits?fromDate=" + fromDate + "&toDate=" + toDate)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(header().string("X-Total-Count", "0")); - } - - @Test - public void getNonExistingAudit() throws Exception { - // Get the audit - restAuditMockMvc.perform(get("/management/audits/{id}", Long.MAX_VALUE)) - .andExpect(status().isNotFound()); - } - - @Test - @Transactional - public void testPersistentAuditEventEquals() throws Exception { - TestUtil.equalsVerifier(PersistentAuditEvent.class); - PersistentAuditEvent auditEvent1 = new PersistentAuditEvent(); - auditEvent1.setId(1L); - PersistentAuditEvent auditEvent2 = new PersistentAuditEvent(); - auditEvent2.setId(auditEvent1.getId()); - assertThat(auditEvent1).isEqualTo(auditEvent2); - auditEvent2.setId(2L); - assertThat(auditEvent1).isNotEqualTo(auditEvent2); - auditEvent1.setId(null); - assertThat(auditEvent1).isNotEqualTo(auditEvent2); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/BookResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/BookResourceIntegrationTest.java deleted file mode 100644 index 4f5cb25cdb..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/BookResourceIntegrationTest.java +++ /dev/null @@ -1,416 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; - -import com.baeldung.jhipster5.domain.Book; -import com.baeldung.jhipster5.repository.BookRepository; -import com.baeldung.jhipster5.service.BookService; -import com.baeldung.jhipster5.service.dto.BookDTO; -import com.baeldung.jhipster5.service.mapper.BookMapper; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.Validator; - -import javax.persistence.EntityManager; -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.List; - - -import static com.baeldung.jhipster5.web.rest.TestUtil.createFormattingConversionService; -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the BookResource REST controller. - * - * @see BookResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class BookResourceIntegrationTest { - - private static final String DEFAULT_TITLE = "AAAAAAAAAA"; - private static final String UPDATED_TITLE = "BBBBBBBBBB"; - - private static final String DEFAULT_AUTHOR = "AAAAAAAAAA"; - private static final String UPDATED_AUTHOR = "BBBBBBBBBB"; - - private static final LocalDate DEFAULT_PUBLISHED = LocalDate.ofEpochDay(0L); - private static final LocalDate UPDATED_PUBLISHED = LocalDate.now(ZoneId.systemDefault()); - - private static final Integer DEFAULT_QUANTITY = 0; - private static final Integer UPDATED_QUANTITY = 1; - - private static final Double DEFAULT_PRICE = 0D; - private static final Double UPDATED_PRICE = 1D; - - @Autowired - private BookRepository bookRepository; - - @Autowired - private BookMapper bookMapper; - - @Autowired - private BookService bookService; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - @Autowired - private PageableHandlerMethodArgumentResolver pageableArgumentResolver; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Autowired - private EntityManager em; - - @Autowired - private Validator validator; - - private MockMvc restBookMockMvc; - - private Book book; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - final BookResource bookResource = new BookResource(bookService); - this.restBookMockMvc = MockMvcBuilders.standaloneSetup(bookResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setControllerAdvice(exceptionTranslator) - .setConversionService(createFormattingConversionService()) - .setMessageConverters(jacksonMessageConverter) - .setValidator(validator).build(); - } - - /** - * Create an entity for this test. - * - * This is a static method, as tests for other entities might also need it, - * if they test an entity which requires the current entity. - */ - public static Book createEntity(EntityManager em) { - Book book = new Book() - .title(DEFAULT_TITLE) - .author(DEFAULT_AUTHOR) - .published(DEFAULT_PUBLISHED) - .quantity(DEFAULT_QUANTITY) - .price(DEFAULT_PRICE); - return book; - } - - @Before - public void initTest() { - book = createEntity(em); - } - - @Test - @Transactional - public void createBook() throws Exception { - int databaseSizeBeforeCreate = bookRepository.findAll().size(); - - // Create the Book - BookDTO bookDTO = bookMapper.toDto(book); - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isCreated()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeCreate + 1); - Book testBook = bookList.get(bookList.size() - 1); - assertThat(testBook.getTitle()).isEqualTo(DEFAULT_TITLE); - assertThat(testBook.getAuthor()).isEqualTo(DEFAULT_AUTHOR); - assertThat(testBook.getPublished()).isEqualTo(DEFAULT_PUBLISHED); - assertThat(testBook.getQuantity()).isEqualTo(DEFAULT_QUANTITY); - assertThat(testBook.getPrice()).isEqualTo(DEFAULT_PRICE); - } - - @Test - @Transactional - public void createBookWithExistingId() throws Exception { - int databaseSizeBeforeCreate = bookRepository.findAll().size(); - - // Create the Book with an existing ID - book.setId(1L); - BookDTO bookDTO = bookMapper.toDto(book); - - // An entity with an existing ID cannot be created, so this API call must fail - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void checkTitleIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setTitle(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkAuthorIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setAuthor(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkPublishedIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setPublished(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkQuantityIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setQuantity(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkPriceIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setPrice(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void getAllBooks() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - // Get all the bookList - restBookMockMvc.perform(get("/api/books?sort=id,desc")) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].id").value(hasItem(book.getId().intValue()))) - .andExpect(jsonPath("$.[*].title").value(hasItem(DEFAULT_TITLE.toString()))) - .andExpect(jsonPath("$.[*].author").value(hasItem(DEFAULT_AUTHOR.toString()))) - .andExpect(jsonPath("$.[*].published").value(hasItem(DEFAULT_PUBLISHED.toString()))) - .andExpect(jsonPath("$.[*].quantity").value(hasItem(DEFAULT_QUANTITY))) - .andExpect(jsonPath("$.[*].price").value(hasItem(DEFAULT_PRICE.doubleValue()))); - } - - @Test - @Transactional - public void getBook() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - // Get the book - restBookMockMvc.perform(get("/api/books/{id}", book.getId())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.id").value(book.getId().intValue())) - .andExpect(jsonPath("$.title").value(DEFAULT_TITLE.toString())) - .andExpect(jsonPath("$.author").value(DEFAULT_AUTHOR.toString())) - .andExpect(jsonPath("$.published").value(DEFAULT_PUBLISHED.toString())) - .andExpect(jsonPath("$.quantity").value(DEFAULT_QUANTITY)) - .andExpect(jsonPath("$.price").value(DEFAULT_PRICE.doubleValue())); - } - - @Test - @Transactional - public void getNonExistingBook() throws Exception { - // Get the book - restBookMockMvc.perform(get("/api/books/{id}", Long.MAX_VALUE)) - .andExpect(status().isNotFound()); - } - - @Test - @Transactional - public void updateBook() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - int databaseSizeBeforeUpdate = bookRepository.findAll().size(); - - // Update the book - Book updatedBook = bookRepository.findById(book.getId()).get(); - // Disconnect from session so that the updates on updatedBook are not directly saved in db - em.detach(updatedBook); - updatedBook - .title(UPDATED_TITLE) - .author(UPDATED_AUTHOR) - .published(UPDATED_PUBLISHED) - .quantity(UPDATED_QUANTITY) - .price(UPDATED_PRICE); - BookDTO bookDTO = bookMapper.toDto(updatedBook); - - restBookMockMvc.perform(put("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isOk()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeUpdate); - Book testBook = bookList.get(bookList.size() - 1); - assertThat(testBook.getTitle()).isEqualTo(UPDATED_TITLE); - assertThat(testBook.getAuthor()).isEqualTo(UPDATED_AUTHOR); - assertThat(testBook.getPublished()).isEqualTo(UPDATED_PUBLISHED); - assertThat(testBook.getQuantity()).isEqualTo(UPDATED_QUANTITY); - assertThat(testBook.getPrice()).isEqualTo(UPDATED_PRICE); - } - - @Test - @Transactional - public void updateNonExistingBook() throws Exception { - int databaseSizeBeforeUpdate = bookRepository.findAll().size(); - - // Create the Book - BookDTO bookDTO = bookMapper.toDto(book); - - // If the entity doesn't have an ID, it will throw BadRequestAlertException - restBookMockMvc.perform(put("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeUpdate); - } - - @Test - @Transactional - public void deleteBook() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - int databaseSizeBeforeDelete = bookRepository.findAll().size(); - - // Delete the book - restBookMockMvc.perform(delete("/api/books/{id}", book.getId()) - .accept(TestUtil.APPLICATION_JSON_UTF8)) - .andExpect(status().isOk()); - - // Validate the database is empty - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeDelete - 1); - } - - @Test - @Transactional - public void equalsVerifier() throws Exception { - TestUtil.equalsVerifier(Book.class); - Book book1 = new Book(); - book1.setId(1L); - Book book2 = new Book(); - book2.setId(book1.getId()); - assertThat(book1).isEqualTo(book2); - book2.setId(2L); - assertThat(book1).isNotEqualTo(book2); - book1.setId(null); - assertThat(book1).isNotEqualTo(book2); - } - - @Test - @Transactional - public void dtoEqualsVerifier() throws Exception { - TestUtil.equalsVerifier(BookDTO.class); - BookDTO bookDTO1 = new BookDTO(); - bookDTO1.setId(1L); - BookDTO bookDTO2 = new BookDTO(); - assertThat(bookDTO1).isNotEqualTo(bookDTO2); - bookDTO2.setId(bookDTO1.getId()); - assertThat(bookDTO1).isEqualTo(bookDTO2); - bookDTO2.setId(2L); - assertThat(bookDTO1).isNotEqualTo(bookDTO2); - bookDTO1.setId(null); - assertThat(bookDTO1).isNotEqualTo(bookDTO2); - } - - @Test - @Transactional - public void testEntityFromId() { - assertThat(bookMapper.fromId(42L).getId()).isEqualTo(42); - assertThat(bookMapper.fromId(null)).isNull(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/LogsResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/LogsResourceIntegrationTest.java deleted file mode 100644 index b045f52f87..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/LogsResourceIntegrationTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.web.rest.vm.LoggerVM; -import ch.qos.logback.classic.AsyncAppender; -import ch.qos.logback.classic.LoggerContext; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.slf4j.LoggerFactory; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Test class for the LogsResource REST controller. - * - * @see LogsResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class LogsResourceIntegrationTest { - - private MockMvc restLogsMockMvc; - - @Before - public void setup() { - LogsResource logsResource = new LogsResource(); - this.restLogsMockMvc = MockMvcBuilders - .standaloneSetup(logsResource) - .build(); - } - - @Test - public void getAllLogs() throws Exception { - restLogsMockMvc.perform(get("/management/logs")) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)); - } - - @Test - public void changeLogs() throws Exception { - LoggerVM logger = new LoggerVM(); - logger.setLevel("INFO"); - logger.setName("ROOT"); - - restLogsMockMvc.perform(put("/management/logs") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(logger))) - .andExpect(status().isNoContent()); - } - - @Test - public void testLogstashAppender() { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - assertThat(context.getLogger("ROOT").getAppender("ASYNC_LOGSTASH")).isInstanceOf(AsyncAppender.class); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/TestUtil.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/TestUtil.java deleted file mode 100644 index 403bb9c9b0..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/TestUtil.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.hamcrest.Description; -import org.hamcrest.TypeSafeDiagnosingMatcher; -import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; -import org.springframework.format.support.DefaultFormattingConversionService; -import org.springframework.format.support.FormattingConversionService; -import org.springframework.http.MediaType; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.time.ZonedDateTime; -import java.time.format.DateTimeParseException; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Utility class for testing REST controllers. - */ -public final class TestUtil { - - private static final ObjectMapper mapper = createObjectMapper(); - - /** MediaType for JSON UTF8 */ - public static final MediaType APPLICATION_JSON_UTF8 = new MediaType( - MediaType.APPLICATION_JSON.getType(), - MediaType.APPLICATION_JSON.getSubtype(), StandardCharsets.UTF_8); - - - private static ObjectMapper createObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); - mapper.registerModule(new JavaTimeModule()); - return mapper; - } - - /** - * Convert an object to JSON byte array. - * - * @param object - * the object to convert - * @return the JSON byte array - * @throws IOException - */ - public static byte[] convertObjectToJsonBytes(Object object) - throws IOException { - return mapper.writeValueAsBytes(object); - } - - /** - * Create a byte array with a specific size filled with specified data. - * - * @param size the size of the byte array - * @param data the data to put in the byte array - * @return the JSON byte array - */ - public static byte[] createByteArray(int size, String data) { - byte[] byteArray = new byte[size]; - for (int i = 0; i < size; i++) { - byteArray[i] = Byte.parseByte(data, 2); - } - return byteArray; - } - - /** - * A matcher that tests that the examined string represents the same instant as the reference datetime. - */ - public static class ZonedDateTimeMatcher extends TypeSafeDiagnosingMatcher { - - private final ZonedDateTime date; - - public ZonedDateTimeMatcher(ZonedDateTime date) { - this.date = date; - } - - @Override - protected boolean matchesSafely(String item, Description mismatchDescription) { - try { - if (!date.isEqual(ZonedDateTime.parse(item))) { - mismatchDescription.appendText("was ").appendValue(item); - return false; - } - return true; - } catch (DateTimeParseException e) { - mismatchDescription.appendText("was ").appendValue(item) - .appendText(", which could not be parsed as a ZonedDateTime"); - return false; - } - - } - - @Override - public void describeTo(Description description) { - description.appendText("a String representing the same Instant as ").appendValue(date); - } - } - - /** - * Creates a matcher that matches when the examined string reprensents the same instant as the reference datetime - * @param date the reference datetime against which the examined string is checked - */ - public static ZonedDateTimeMatcher sameInstant(ZonedDateTime date) { - return new ZonedDateTimeMatcher(date); - } - - /** - * Verifies the equals/hashcode contract on the domain object. - */ - public static void equalsVerifier(Class clazz) throws Exception { - T domainObject1 = clazz.getConstructor().newInstance(); - assertThat(domainObject1.toString()).isNotNull(); - assertThat(domainObject1).isEqualTo(domainObject1); - assertThat(domainObject1.hashCode()).isEqualTo(domainObject1.hashCode()); - // Test with an instance of another class - Object testOtherObject = new Object(); - assertThat(domainObject1).isNotEqualTo(testOtherObject); - assertThat(domainObject1).isNotEqualTo(null); - // Test with an instance of the same class - T domainObject2 = clazz.getConstructor().newInstance(); - assertThat(domainObject1).isNotEqualTo(domainObject2); - // HashCodes are equals because the objects are not persisted yet - assertThat(domainObject1.hashCode()).isEqualTo(domainObject2.hashCode()); - } - - /** - * Create a FormattingConversionService which use ISO date format, instead of the localized one. - * @return the FormattingConversionService - */ - public static FormattingConversionService createFormattingConversionService() { - DefaultFormattingConversionService dfcs = new DefaultFormattingConversionService (); - DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); - registrar.setUseIsoFormat(true); - registrar.registerFormatters(dfcs); - return dfcs; - } - - private TestUtil() {} -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserJWTControllerIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserJWTControllerIntegrationTest.java deleted file mode 100644 index 7cfc0e19fc..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserJWTControllerIntegrationTest.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.jwt.TokenProvider; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; -import com.baeldung.jhipster5.web.rest.vm.LoginVM; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; -import static org.hamcrest.Matchers.nullValue; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -/** - * Test class for the UserJWTController REST controller. - * - * @see UserJWTController - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class UserJWTControllerIntegrationTest { - - @Autowired - private TokenProvider tokenProvider; - - @Autowired - private AuthenticationManager authenticationManager; - - @Autowired - private UserRepository userRepository; - - @Autowired - private PasswordEncoder passwordEncoder; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - private MockMvc mockMvc; - - @Before - public void setup() { - UserJWTController userJWTController = new UserJWTController(tokenProvider, authenticationManager); - this.mockMvc = MockMvcBuilders.standaloneSetup(userJWTController) - .setControllerAdvice(exceptionTranslator) - .build(); - } - - @Test - @Transactional - public void testAuthorize() throws Exception { - User user = new User(); - user.setLogin("user-jwt-controller"); - user.setEmail("user-jwt-controller@example.com"); - user.setActivated(true); - user.setPassword(passwordEncoder.encode("test")); - - userRepository.saveAndFlush(user); - - LoginVM login = new LoginVM(); - login.setUsername("user-jwt-controller"); - login.setPassword("test"); - mockMvc.perform(post("/api/authenticate") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(login))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.id_token").isString()) - .andExpect(jsonPath("$.id_token").isNotEmpty()) - .andExpect(header().string("Authorization", not(nullValue()))) - .andExpect(header().string("Authorization", not(isEmptyString()))); - } - - @Test - @Transactional - public void testAuthorizeWithRememberMe() throws Exception { - User user = new User(); - user.setLogin("user-jwt-controller-remember-me"); - user.setEmail("user-jwt-controller-remember-me@example.com"); - user.setActivated(true); - user.setPassword(passwordEncoder.encode("test")); - - userRepository.saveAndFlush(user); - - LoginVM login = new LoginVM(); - login.setUsername("user-jwt-controller-remember-me"); - login.setPassword("test"); - login.setRememberMe(true); - mockMvc.perform(post("/api/authenticate") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(login))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.id_token").isString()) - .andExpect(jsonPath("$.id_token").isNotEmpty()) - .andExpect(header().string("Authorization", not(nullValue()))) - .andExpect(header().string("Authorization", not(isEmptyString()))); - } - - @Test - @Transactional - public void testAuthorizeFails() throws Exception { - LoginVM login = new LoginVM(); - login.setUsername("wrong-user"); - login.setPassword("wrong password"); - mockMvc.perform(post("/api/authenticate") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(login))) - .andExpect(status().isUnauthorized()) - .andExpect(jsonPath("$.id_token").doesNotExist()) - .andExpect(header().doesNotExist("Authorization")); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserResourceIntegrationTest.java deleted file mode 100644 index c0abc042fb..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserResourceIntegrationTest.java +++ /dev/null @@ -1,596 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.service.mapper.UserMapper; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; -import com.baeldung.jhipster5.web.rest.vm.ManagedUserVM; -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import javax.persistence.EntityManager; -import java.time.Instant; -import java.util.*; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.hasItems; -import static org.hamcrest.Matchers.hasItem; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the UserResource REST controller. - * - * @see UserResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class UserResourceIntegrationTest { - - private static final String DEFAULT_LOGIN = "johndoe"; - private static final String UPDATED_LOGIN = "jhipster"; - - private static final Long DEFAULT_ID = 1L; - - private static final String DEFAULT_PASSWORD = "passjohndoe"; - private static final String UPDATED_PASSWORD = "passjhipster"; - - private static final String DEFAULT_EMAIL = "johndoe@localhost"; - private static final String UPDATED_EMAIL = "jhipster@localhost"; - - private static final String DEFAULT_FIRSTNAME = "john"; - private static final String UPDATED_FIRSTNAME = "jhipsterFirstName"; - - private static final String DEFAULT_LASTNAME = "doe"; - private static final String UPDATED_LASTNAME = "jhipsterLastName"; - - private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50"; - private static final String UPDATED_IMAGEURL = "http://placehold.it/40x40"; - - private static final String DEFAULT_LANGKEY = "en"; - private static final String UPDATED_LANGKEY = "fr"; - - @Autowired - private UserRepository userRepository; - - @Autowired - private MailService mailService; - - @Autowired - private UserService userService; - - @Autowired - private UserMapper userMapper; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - @Autowired - private PageableHandlerMethodArgumentResolver pageableArgumentResolver; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Autowired - private EntityManager em; - - private MockMvc restUserMockMvc; - - private User user; - - @Before - public void setup() { - UserResource userResource = new UserResource(userService, userRepository, mailService); - - this.restUserMockMvc = MockMvcBuilders.standaloneSetup(userResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setControllerAdvice(exceptionTranslator) - .setMessageConverters(jacksonMessageConverter) - .build(); - } - - /** - * Create a User. - * - * This is a static method, as tests for other entities might also need it, - * if they test an entity which has a required relationship to the User entity. - */ - public static User createEntity(EntityManager em) { - User user = new User(); - user.setLogin(DEFAULT_LOGIN + RandomStringUtils.randomAlphabetic(5)); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setEmail(RandomStringUtils.randomAlphabetic(5) + DEFAULT_EMAIL); - user.setFirstName(DEFAULT_FIRSTNAME); - user.setLastName(DEFAULT_LASTNAME); - user.setImageUrl(DEFAULT_IMAGEURL); - user.setLangKey(DEFAULT_LANGKEY); - return user; - } - - @Before - public void initTest() { - user = createEntity(em); - user.setLogin(DEFAULT_LOGIN); - user.setEmail(DEFAULT_EMAIL); - } - - @Test - @Transactional - public void createUser() throws Exception { - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - // Create the User - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setLogin(DEFAULT_LOGIN); - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail(DEFAULT_EMAIL); - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isCreated()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate + 1); - User testUser = userList.get(userList.size() - 1); - assertThat(testUser.getLogin()).isEqualTo(DEFAULT_LOGIN); - assertThat(testUser.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); - assertThat(testUser.getLastName()).isEqualTo(DEFAULT_LASTNAME); - assertThat(testUser.getEmail()).isEqualTo(DEFAULT_EMAIL); - assertThat(testUser.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); - assertThat(testUser.getLangKey()).isEqualTo(DEFAULT_LANGKEY); - } - - @Test - @Transactional - public void createUserWithExistingId() throws Exception { - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(1L); - managedUserVM.setLogin(DEFAULT_LOGIN); - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail(DEFAULT_EMAIL); - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // An entity with an existing ID cannot be created, so this API call must fail - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void createUserWithExistingLogin() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setLogin(DEFAULT_LOGIN);// this login should already be used - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail("anothermail@localhost"); - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Create the User - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void createUserWithExistingEmail() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setLogin("anotherlogin"); - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail(DEFAULT_EMAIL);// this email should already be used - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Create the User - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void getAllUsers() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - - // Get all the users - restUserMockMvc.perform(get("/api/users?sort=id,desc") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].login").value(hasItem(DEFAULT_LOGIN))) - .andExpect(jsonPath("$.[*].firstName").value(hasItem(DEFAULT_FIRSTNAME))) - .andExpect(jsonPath("$.[*].lastName").value(hasItem(DEFAULT_LASTNAME))) - .andExpect(jsonPath("$.[*].email").value(hasItem(DEFAULT_EMAIL))) - .andExpect(jsonPath("$.[*].imageUrl").value(hasItem(DEFAULT_IMAGEURL))) - .andExpect(jsonPath("$.[*].langKey").value(hasItem(DEFAULT_LANGKEY))); - } - - @Test - @Transactional - public void getUser() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - - // Get the user - restUserMockMvc.perform(get("/api/users/{login}", user.getLogin())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.login").value(user.getLogin())) - .andExpect(jsonPath("$.firstName").value(DEFAULT_FIRSTNAME)) - .andExpect(jsonPath("$.lastName").value(DEFAULT_LASTNAME)) - .andExpect(jsonPath("$.email").value(DEFAULT_EMAIL)) - .andExpect(jsonPath("$.imageUrl").value(DEFAULT_IMAGEURL)) - .andExpect(jsonPath("$.langKey").value(DEFAULT_LANGKEY)); - } - - @Test - @Transactional - public void getNonExistingUser() throws Exception { - restUserMockMvc.perform(get("/api/users/unknown")) - .andExpect(status().isNotFound()); - } - - @Test - @Transactional - public void updateUser() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeUpdate = userRepository.findAll().size(); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin(updatedUser.getLogin()); - managedUserVM.setPassword(UPDATED_PASSWORD); - managedUserVM.setFirstName(UPDATED_FIRSTNAME); - managedUserVM.setLastName(UPDATED_LASTNAME); - managedUserVM.setEmail(UPDATED_EMAIL); - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(UPDATED_IMAGEURL); - managedUserVM.setLangKey(UPDATED_LANGKEY); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isOk()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeUpdate); - User testUser = userList.get(userList.size() - 1); - assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); - assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); - assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); - assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); - assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); - } - - @Test - @Transactional - public void updateUserLogin() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeUpdate = userRepository.findAll().size(); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin(UPDATED_LOGIN); - managedUserVM.setPassword(UPDATED_PASSWORD); - managedUserVM.setFirstName(UPDATED_FIRSTNAME); - managedUserVM.setLastName(UPDATED_LASTNAME); - managedUserVM.setEmail(UPDATED_EMAIL); - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(UPDATED_IMAGEURL); - managedUserVM.setLangKey(UPDATED_LANGKEY); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isOk()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeUpdate); - User testUser = userList.get(userList.size() - 1); - assertThat(testUser.getLogin()).isEqualTo(UPDATED_LOGIN); - assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); - assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); - assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); - assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); - assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); - } - - @Test - @Transactional - public void updateUserExistingEmail() throws Exception { - // Initialize the database with 2 users - userRepository.saveAndFlush(user); - - User anotherUser = new User(); - anotherUser.setLogin("jhipster"); - anotherUser.setPassword(RandomStringUtils.random(60)); - anotherUser.setActivated(true); - anotherUser.setEmail("jhipster@localhost"); - anotherUser.setFirstName("java"); - anotherUser.setLastName("hipster"); - anotherUser.setImageUrl(""); - anotherUser.setLangKey("en"); - userRepository.saveAndFlush(anotherUser); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin(updatedUser.getLogin()); - managedUserVM.setPassword(updatedUser.getPassword()); - managedUserVM.setFirstName(updatedUser.getFirstName()); - managedUserVM.setLastName(updatedUser.getLastName()); - managedUserVM.setEmail("jhipster@localhost");// this email should already be used by anotherUser - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(updatedUser.getImageUrl()); - managedUserVM.setLangKey(updatedUser.getLangKey()); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - } - - @Test - @Transactional - public void updateUserExistingLogin() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - - User anotherUser = new User(); - anotherUser.setLogin("jhipster"); - anotherUser.setPassword(RandomStringUtils.random(60)); - anotherUser.setActivated(true); - anotherUser.setEmail("jhipster@localhost"); - anotherUser.setFirstName("java"); - anotherUser.setLastName("hipster"); - anotherUser.setImageUrl(""); - anotherUser.setLangKey("en"); - userRepository.saveAndFlush(anotherUser); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin("jhipster");// this login should already be used by anotherUser - managedUserVM.setPassword(updatedUser.getPassword()); - managedUserVM.setFirstName(updatedUser.getFirstName()); - managedUserVM.setLastName(updatedUser.getLastName()); - managedUserVM.setEmail(updatedUser.getEmail()); - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(updatedUser.getImageUrl()); - managedUserVM.setLangKey(updatedUser.getLangKey()); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - } - - @Test - @Transactional - public void deleteUser() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeDelete = userRepository.findAll().size(); - - // Delete the user - restUserMockMvc.perform(delete("/api/users/{login}", user.getLogin()) - .accept(TestUtil.APPLICATION_JSON_UTF8)) - .andExpect(status().isOk()); - - // Validate the database is empty - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeDelete - 1); - } - - @Test - @Transactional - public void getAllAuthorities() throws Exception { - restUserMockMvc.perform(get("/api/users/authorities") - .accept(TestUtil.APPLICATION_JSON_UTF8) - .contentType(TestUtil.APPLICATION_JSON_UTF8)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$").isArray()) - .andExpect(jsonPath("$").value(hasItems(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN))); - } - - @Test - @Transactional - public void testUserEquals() throws Exception { - TestUtil.equalsVerifier(User.class); - User user1 = new User(); - user1.setId(1L); - User user2 = new User(); - user2.setId(user1.getId()); - assertThat(user1).isEqualTo(user2); - user2.setId(2L); - assertThat(user1).isNotEqualTo(user2); - user1.setId(null); - assertThat(user1).isNotEqualTo(user2); - } - - @Test - public void testUserDTOtoUser() { - UserDTO userDTO = new UserDTO(); - userDTO.setId(DEFAULT_ID); - userDTO.setLogin(DEFAULT_LOGIN); - userDTO.setFirstName(DEFAULT_FIRSTNAME); - userDTO.setLastName(DEFAULT_LASTNAME); - userDTO.setEmail(DEFAULT_EMAIL); - userDTO.setActivated(true); - userDTO.setImageUrl(DEFAULT_IMAGEURL); - userDTO.setLangKey(DEFAULT_LANGKEY); - userDTO.setCreatedBy(DEFAULT_LOGIN); - userDTO.setLastModifiedBy(DEFAULT_LOGIN); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - User user = userMapper.userDTOToUser(userDTO); - assertThat(user.getId()).isEqualTo(DEFAULT_ID); - assertThat(user.getLogin()).isEqualTo(DEFAULT_LOGIN); - assertThat(user.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); - assertThat(user.getLastName()).isEqualTo(DEFAULT_LASTNAME); - assertThat(user.getEmail()).isEqualTo(DEFAULT_EMAIL); - assertThat(user.getActivated()).isEqualTo(true); - assertThat(user.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); - assertThat(user.getLangKey()).isEqualTo(DEFAULT_LANGKEY); - assertThat(user.getCreatedBy()).isNull(); - assertThat(user.getCreatedDate()).isNotNull(); - assertThat(user.getLastModifiedBy()).isNull(); - assertThat(user.getLastModifiedDate()).isNotNull(); - assertThat(user.getAuthorities()).extracting("name").containsExactly(AuthoritiesConstants.USER); - } - - @Test - public void testUserToUserDTO() { - user.setId(DEFAULT_ID); - user.setCreatedBy(DEFAULT_LOGIN); - user.setCreatedDate(Instant.now()); - user.setLastModifiedBy(DEFAULT_LOGIN); - user.setLastModifiedDate(Instant.now()); - Set authorities = new HashSet<>(); - Authority authority = new Authority(); - authority.setName(AuthoritiesConstants.USER); - authorities.add(authority); - user.setAuthorities(authorities); - - UserDTO userDTO = userMapper.userToUserDTO(user); - - assertThat(userDTO.getId()).isEqualTo(DEFAULT_ID); - assertThat(userDTO.getLogin()).isEqualTo(DEFAULT_LOGIN); - assertThat(userDTO.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); - assertThat(userDTO.getLastName()).isEqualTo(DEFAULT_LASTNAME); - assertThat(userDTO.getEmail()).isEqualTo(DEFAULT_EMAIL); - assertThat(userDTO.isActivated()).isEqualTo(true); - assertThat(userDTO.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); - assertThat(userDTO.getLangKey()).isEqualTo(DEFAULT_LANGKEY); - assertThat(userDTO.getCreatedBy()).isEqualTo(DEFAULT_LOGIN); - assertThat(userDTO.getCreatedDate()).isEqualTo(user.getCreatedDate()); - assertThat(userDTO.getLastModifiedBy()).isEqualTo(DEFAULT_LOGIN); - assertThat(userDTO.getLastModifiedDate()).isEqualTo(user.getLastModifiedDate()); - assertThat(userDTO.getAuthorities()).containsExactly(AuthoritiesConstants.USER); - assertThat(userDTO.toString()).isNotNull(); - } - - @Test - public void testAuthorityEquals() { - Authority authorityA = new Authority(); - assertThat(authorityA).isEqualTo(authorityA); - assertThat(authorityA).isNotEqualTo(null); - assertThat(authorityA).isNotEqualTo(new Object()); - assertThat(authorityA.hashCode()).isEqualTo(0); - assertThat(authorityA.toString()).isNotNull(); - - Authority authorityB = new Authority(); - assertThat(authorityA).isEqualTo(authorityB); - - authorityB.setName(AuthoritiesConstants.ADMIN); - assertThat(authorityA).isNotEqualTo(authorityB); - - authorityA.setName(AuthoritiesConstants.USER); - assertThat(authorityA).isNotEqualTo(authorityB); - - authorityB.setName(AuthoritiesConstants.USER); - assertThat(authorityA).isEqualTo(authorityB); - assertThat(authorityA.hashCode()).isEqualTo(authorityB.hashCode()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorIntegrationTest.java deleted file mode 100644 index e5ef08ee9c..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorIntegrationTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import com.baeldung.jhipster5.BookstoreApp; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Test class for the ExceptionTranslator controller advice. - * - * @see ExceptionTranslator - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class ExceptionTranslatorIntegrationTest { - - @Autowired - private ExceptionTranslatorTestController controller; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - private MockMvc mockMvc; - - @Before - public void setup() { - mockMvc = MockMvcBuilders.standaloneSetup(controller) - .setControllerAdvice(exceptionTranslator) - .setMessageConverters(jacksonMessageConverter) - .build(); - } - - @Test - public void testConcurrencyFailure() throws Exception { - mockMvc.perform(get("/test/concurrency-failure")) - .andExpect(status().isConflict()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_CONCURRENCY_FAILURE)); - } - - @Test - public void testMethodArgumentNotValid() throws Exception { - mockMvc.perform(post("/test/method-argument").content("{}").contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_VALIDATION)) - .andExpect(jsonPath("$.fieldErrors.[0].objectName").value("testDTO")) - .andExpect(jsonPath("$.fieldErrors.[0].field").value("test")) - .andExpect(jsonPath("$.fieldErrors.[0].message").value("NotNull")); - } - - @Test - public void testParameterizedError() throws Exception { - mockMvc.perform(get("/test/parameterized-error")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("test parameterized error")) - .andExpect(jsonPath("$.params.param0").value("param0_value")) - .andExpect(jsonPath("$.params.param1").value("param1_value")); - } - - @Test - public void testParameterizedError2() throws Exception { - mockMvc.perform(get("/test/parameterized-error2")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("test parameterized error")) - .andExpect(jsonPath("$.params.foo").value("foo_value")) - .andExpect(jsonPath("$.params.bar").value("bar_value")); - } - - @Test - public void testMissingServletRequestPartException() throws Exception { - mockMvc.perform(get("/test/missing-servlet-request-part")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.400")); - } - - @Test - public void testMissingServletRequestParameterException() throws Exception { - mockMvc.perform(get("/test/missing-servlet-request-parameter")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.400")); - } - - @Test - public void testAccessDenied() throws Exception { - mockMvc.perform(get("/test/access-denied")) - .andExpect(status().isForbidden()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.403")) - .andExpect(jsonPath("$.detail").value("test access denied!")); - } - - @Test - public void testUnauthorized() throws Exception { - mockMvc.perform(get("/test/unauthorized")) - .andExpect(status().isUnauthorized()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.401")) - .andExpect(jsonPath("$.path").value("/test/unauthorized")) - .andExpect(jsonPath("$.detail").value("test authentication failed!")); - } - - @Test - public void testMethodNotSupported() throws Exception { - mockMvc.perform(post("/test/access-denied")) - .andExpect(status().isMethodNotAllowed()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.405")) - .andExpect(jsonPath("$.detail").value("Request method 'POST' not supported")); - } - - @Test - public void testExceptionWithResponseStatus() throws Exception { - mockMvc.perform(get("/test/response-status")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.400")) - .andExpect(jsonPath("$.title").value("test response status")); - } - - @Test - public void testInternalServerError() throws Exception { - mockMvc.perform(get("/test/internal-server-error")) - .andExpect(status().isInternalServerError()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.500")) - .andExpect(jsonPath("$.title").value("Internal Server Error")); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorTestController.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorTestController.java deleted file mode 100644 index f8d84151b9..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorTestController.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.springframework.dao.ConcurrencyFailureException; -import org.springframework.http.HttpStatus; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.HashMap; -import java.util.Map; - -@RestController -public class ExceptionTranslatorTestController { - - @GetMapping("/test/concurrency-failure") - public void concurrencyFailure() { - throw new ConcurrencyFailureException("test concurrency failure"); - } - - @PostMapping("/test/method-argument") - public void methodArgument(@Valid @RequestBody TestDTO testDTO) { - } - - @GetMapping("/test/parameterized-error") - public void parameterizedError() { - throw new CustomParameterizedException("test parameterized error", "param0_value", "param1_value"); - } - - @GetMapping("/test/parameterized-error2") - public void parameterizedError2() { - Map params = new HashMap<>(); - params.put("foo", "foo_value"); - params.put("bar", "bar_value"); - throw new CustomParameterizedException("test parameterized error", params); - } - - @GetMapping("/test/missing-servlet-request-part") - public void missingServletRequestPartException(@RequestPart String part) { - } - - @GetMapping("/test/missing-servlet-request-parameter") - public void missingServletRequestParameterException(@RequestParam String param) { - } - - @GetMapping("/test/access-denied") - public void accessdenied() { - throw new AccessDeniedException("test access denied!"); - } - - @GetMapping("/test/unauthorized") - public void unauthorized() { - throw new BadCredentialsException("test authentication failed!"); - } - - @GetMapping("/test/response-status") - public void exceptionWithReponseStatus() { - throw new TestResponseStatusException(); - } - - @GetMapping("/test/internal-server-error") - public void internalServerError() { - throw new RuntimeException(); - } - - public static class TestDTO { - - @NotNull - private String test; - - public String getTest() { - return test; - } - - public void setTest(String test) { - this.test = test; - } - } - - @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "test response status") - @SuppressWarnings("serial") - public static class TestResponseStatusException extends RuntimeException { - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/util/PaginationUtilUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/util/PaginationUtilUnitTest.java deleted file mode 100644 index 78b17ee859..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/util/PaginationUtilUnitTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.jhipster5.web.rest.util; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.http.HttpHeaders; - -/** - * Tests based on parsing algorithm in app/components/util/pagination-util.service.js - * - * @see PaginationUtil - */ -public class PaginationUtilUnitTest { - - @Test - public void generatePaginationHttpHeadersTest() { - String baseUrl = "/api/_search/example"; - List content = new ArrayList<>(); - Page page = new PageImpl<>(content, PageRequest.of(6, 50), 400L); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, baseUrl); - List strHeaders = headers.get(HttpHeaders.LINK); - assertNotNull(strHeaders); - assertTrue(strHeaders.size() == 1); - String headerData = strHeaders.get(0); - assertTrue(headerData.split(",").length == 4); - String expectedData = "; rel=\"next\"," - + "; rel=\"prev\"," - + "; rel=\"last\"," - + "; rel=\"first\""; - assertEquals(expectedData, headerData); - List xTotalCountHeaders = headers.get("X-Total-Count"); - assertTrue(xTotalCountHeaders.size() == 1); - assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L)); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/jest-global-mocks.ts b/jhipster-5/bookstore-monolith/src/test/javascript/jest-global-mocks.ts deleted file mode 100644 index a998259857..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/jest-global-mocks.ts +++ /dev/null @@ -1,15 +0,0 @@ -const mock = () => { - let storage = {}; - return { - getItem: key => (key in storage ? storage[key] : null), - setItem: (key, value) => (storage[key] = value || ''), - removeItem: key => delete storage[key], - clear: () => (storage = {}) - }; -}; - -Object.defineProperty(window, 'localStorage', { value: mock() }); -Object.defineProperty(window, 'sessionStorage', { value: mock() }); -Object.defineProperty(window, 'getComputedStyle', { - value: () => ['-webkit-appearance'] -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/jest.conf.js b/jhipster-5/bookstore-monolith/src/test/javascript/jest.conf.js deleted file mode 100644 index 05054a94b8..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/jest.conf.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - preset: 'jest-preset-angular', - setupTestFrameworkScriptFile: '/src/test/javascript/jest.ts', - coverageDirectory: '/target/test-results/', - globals: { - 'ts-jest': { - tsConfigFile: 'tsconfig.json' - }, - __TRANSFORM_HTML__: true - }, - coveragePathIgnorePatterns: [ - '/src/test/javascript' - ], - moduleNameMapper: { - 'app/(.*)': '/src/main/webapp/app/$1' - }, - reporters: [ - 'default', - [ 'jest-junit', { output: './target/test-results/TESTS-results-jest.xml' } ] - ], - testResultsProcessor: 'jest-sonar-reporter', - transformIgnorePatterns: ['node_modules/(?!@angular/common/locales)'], - testMatch: ['/src/test/javascript/spec/**/+(*.)+(spec.ts)'], - rootDir: '../../../', - testURL: "http://localhost/" -}; diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/jest.ts b/jhipster-5/bookstore-monolith/src/test/javascript/jest.ts deleted file mode 100644 index 904329f538..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/jest.ts +++ /dev/null @@ -1,2 +0,0 @@ -import 'jest-preset-angular'; -import './jest-global-mocks'; diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts deleted file mode 100644 index 87a550e8ef..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { TestBed, async, tick, fakeAsync, inject } from '@angular/core/testing'; -import { ActivatedRoute } from '@angular/router'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { MockActivatedRoute } from '../../../helpers/mock-route.service'; -import { ActivateService } from 'app/account/activate/activate.service'; -import { ActivateComponent } from 'app/account/activate/activate.component'; - -describe('Component Tests', () => { - describe('ActivateComponent', () => { - let comp: ActivateComponent; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [ActivateComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: new MockActivatedRoute({ key: 'ABC123' }) - } - ] - }) - .overrideTemplate(ActivateComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - const fixture = TestBed.createComponent(ActivateComponent); - comp = fixture.componentInstance; - }); - - it('calls activate.get with the key from params', inject( - [ActivateService], - fakeAsync((service: ActivateService) => { - spyOn(service, 'get').and.returnValue(of()); - - comp.ngOnInit(); - tick(); - - expect(service.get).toHaveBeenCalledWith('ABC123'); - }) - )); - - it('should set set success to OK upon successful activation', inject( - [ActivateService], - fakeAsync((service: ActivateService) => { - spyOn(service, 'get').and.returnValue(of({})); - - comp.ngOnInit(); - tick(); - - expect(comp.error).toBe(null); - expect(comp.success).toEqual('OK'); - }) - )); - - it('should set set error to ERROR upon activation failure', inject( - [ActivateService], - fakeAsync((service: ActivateService) => { - spyOn(service, 'get').and.returnValue(throwError('ERROR')); - - comp.ngOnInit(); - tick(); - - expect(comp.error).toBe('ERROR'); - expect(comp.success).toEqual(null); - }) - )); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts deleted file mode 100644 index 36a3b8db65..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { ComponentFixture, TestBed, inject, tick, fakeAsync } from '@angular/core/testing'; -import { Observable, of, throwError } from 'rxjs'; -import { Renderer, ElementRef } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -import { BookstoreTestModule } from '../../../../test.module'; -import { PasswordResetFinishComponent } from 'app/account/password-reset/finish/password-reset-finish.component'; -import { PasswordResetFinishService } from 'app/account/password-reset/finish/password-reset-finish.service'; -import { MockActivatedRoute } from '../../../../helpers/mock-route.service'; - -describe('Component Tests', () => { - describe('PasswordResetFinishComponent', () => { - let fixture: ComponentFixture; - let comp: PasswordResetFinishComponent; - - beforeEach(() => { - fixture = TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [PasswordResetFinishComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: new MockActivatedRoute({ key: 'XYZPDQ' }) - }, - { - provide: Renderer, - useValue: { - invokeElementMethod(renderElement: any, methodName: string, args?: any[]) {} - } - }, - { - provide: ElementRef, - useValue: new ElementRef(null) - } - ] - }) - .overrideTemplate(PasswordResetFinishComponent, '') - .createComponent(PasswordResetFinishComponent); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(PasswordResetFinishComponent); - comp = fixture.componentInstance; - comp.ngOnInit(); - }); - - it('should define its initial state', () => { - comp.ngOnInit(); - - expect(comp.keyMissing).toBeFalsy(); - expect(comp.key).toEqual('XYZPDQ'); - expect(comp.resetAccount).toEqual({}); - }); - - it('sets focus after the view has been initialized', inject([ElementRef], (elementRef: ElementRef) => { - const element = fixture.nativeElement; - const node = { - focus() {} - }; - - elementRef.nativeElement = element; - spyOn(element, 'querySelector').and.returnValue(node); - spyOn(node, 'focus'); - - comp.ngAfterViewInit(); - - expect(element.querySelector).toHaveBeenCalledWith('#password'); - expect(node.focus).toHaveBeenCalled(); - })); - - it('should ensure the two passwords entered match', () => { - comp.resetAccount.password = 'password'; - comp.confirmPassword = 'non-matching'; - - comp.finishReset(); - - expect(comp.doNotMatch).toEqual('ERROR'); - }); - - it('should update success to OK after resetting password', inject( - [PasswordResetFinishService], - fakeAsync((service: PasswordResetFinishService) => { - spyOn(service, 'save').and.returnValue(of({})); - - comp.resetAccount.password = 'password'; - comp.confirmPassword = 'password'; - - comp.finishReset(); - tick(); - - expect(service.save).toHaveBeenCalledWith({ - key: 'XYZPDQ', - newPassword: 'password' - }); - expect(comp.success).toEqual('OK'); - }) - )); - - it('should notify of generic error', inject( - [PasswordResetFinishService], - fakeAsync((service: PasswordResetFinishService) => { - spyOn(service, 'save').and.returnValue(throwError('ERROR')); - - comp.resetAccount.password = 'password'; - comp.confirmPassword = 'password'; - - comp.finishReset(); - tick(); - - expect(service.save).toHaveBeenCalledWith({ - key: 'XYZPDQ', - newPassword: 'password' - }); - expect(comp.success).toBeNull(); - expect(comp.error).toEqual('ERROR'); - }) - )); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts deleted file mode 100644 index f121a4dd27..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { ComponentFixture, TestBed, inject } from '@angular/core/testing'; -import { Renderer, ElementRef } from '@angular/core'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../../test.module'; -import { PasswordResetInitComponent } from 'app/account/password-reset/init/password-reset-init.component'; -import { PasswordResetInitService } from 'app/account/password-reset/init/password-reset-init.service'; -import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; - -describe('Component Tests', () => { - describe('PasswordResetInitComponent', () => { - let fixture: ComponentFixture; - let comp: PasswordResetInitComponent; - - beforeEach(() => { - fixture = TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [PasswordResetInitComponent], - providers: [ - { - provide: Renderer, - useValue: { - invokeElementMethod(renderElement: any, methodName: string, args?: any[]) {} - } - }, - { - provide: ElementRef, - useValue: new ElementRef(null) - } - ] - }) - .overrideTemplate(PasswordResetInitComponent, '') - .createComponent(PasswordResetInitComponent); - comp = fixture.componentInstance; - comp.ngOnInit(); - }); - - it('should define its initial state', () => { - expect(comp.success).toBeUndefined(); - expect(comp.error).toBeUndefined(); - expect(comp.errorEmailNotExists).toBeUndefined(); - expect(comp.resetAccount).toEqual({}); - }); - - it('sets focus after the view has been initialized', inject([ElementRef], (elementRef: ElementRef) => { - const element = fixture.nativeElement; - const node = { - focus() {} - }; - - elementRef.nativeElement = element; - spyOn(element, 'querySelector').and.returnValue(node); - spyOn(node, 'focus'); - - comp.ngAfterViewInit(); - - expect(element.querySelector).toHaveBeenCalledWith('#email'); - expect(node.focus).toHaveBeenCalled(); - })); - - it('notifies of success upon successful requestReset', inject([PasswordResetInitService], (service: PasswordResetInitService) => { - spyOn(service, 'save').and.returnValue(of({})); - comp.resetAccount.email = 'user@domain.com'; - - comp.requestReset(); - - expect(service.save).toHaveBeenCalledWith('user@domain.com'); - expect(comp.success).toEqual('OK'); - expect(comp.error).toBeNull(); - expect(comp.errorEmailNotExists).toBeNull(); - })); - - it('notifies of unknown email upon email address not registered/400', inject( - [PasswordResetInitService], - (service: PasswordResetInitService) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 400, - error: { type: EMAIL_NOT_FOUND_TYPE } - }) - ); - comp.resetAccount.email = 'user@domain.com'; - - comp.requestReset(); - - expect(service.save).toHaveBeenCalledWith('user@domain.com'); - expect(comp.success).toBeNull(); - expect(comp.error).toBeNull(); - expect(comp.errorEmailNotExists).toEqual('ERROR'); - } - )); - - it('notifies of error upon error response', inject([PasswordResetInitService], (service: PasswordResetInitService) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 503, - data: 'something else' - }) - ); - comp.resetAccount.email = 'user@domain.com'; - - comp.requestReset(); - - expect(service.save).toHaveBeenCalledWith('user@domain.com'); - expect(comp.success).toBeNull(); - expect(comp.errorEmailNotExists).toBeNull(); - expect(comp.error).toEqual('ERROR'); - })); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts deleted file mode 100644 index 35e923ac00..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; - -import { PasswordStrengthBarComponent } from 'app/account/password/password-strength-bar.component'; - -describe('Component Tests', () => { - describe('PasswordStrengthBarComponent', () => { - let comp: PasswordStrengthBarComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [PasswordStrengthBarComponent] - }) - .overrideTemplate(PasswordStrengthBarComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(PasswordStrengthBarComponent); - comp = fixture.componentInstance; - }); - - describe('PasswordStrengthBarComponents', () => { - it('should initialize with default values', () => { - expect(comp.measureStrength('')).toBe(0); - expect(comp.colors).toEqual(['#F00', '#F90', '#FF0', '#9F0', '#0F0']); - expect(comp.getColor(0).idx).toBe(1); - expect(comp.getColor(0).col).toBe(comp.colors[0]); - }); - - it('should increase strength upon password value change', () => { - expect(comp.measureStrength('')).toBe(0); - expect(comp.measureStrength('aa')).toBeGreaterThanOrEqual(comp.measureStrength('')); - expect(comp.measureStrength('aa^6')).toBeGreaterThanOrEqual(comp.measureStrength('aa')); - expect(comp.measureStrength('Aa090(**)')).toBeGreaterThanOrEqual(comp.measureStrength('aa^6')); - expect(comp.measureStrength('Aa090(**)+-07365')).toBeGreaterThanOrEqual(comp.measureStrength('Aa090(**)')); - }); - - it('should change the color based on strength', () => { - expect(comp.getColor(0).col).toBe(comp.colors[0]); - expect(comp.getColor(11).col).toBe(comp.colors[1]); - expect(comp.getColor(22).col).toBe(comp.colors[2]); - expect(comp.getColor(33).col).toBe(comp.colors[3]); - expect(comp.getColor(44).col).toBe(comp.colors[4]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts deleted file mode 100644 index 86edf940bd..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { PasswordComponent } from 'app/account/password/password.component'; -import { PasswordService } from 'app/account/password/password.service'; - -describe('Component Tests', () => { - describe('PasswordComponent', () => { - let comp: PasswordComponent; - let fixture: ComponentFixture; - let service: PasswordService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [PasswordComponent], - providers: [] - }) - .overrideTemplate(PasswordComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(PasswordComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(PasswordService); - }); - - it('should show error if passwords do not match', () => { - // GIVEN - comp.newPassword = 'password1'; - comp.confirmPassword = 'password2'; - // WHEN - comp.changePassword(); - // THEN - expect(comp.doNotMatch).toBe('ERROR'); - expect(comp.error).toBeNull(); - expect(comp.success).toBeNull(); - }); - - it('should call Auth.changePassword when passwords match', () => { - // GIVEN - const passwordValues = { - currentPassword: 'oldPassword', - newPassword: 'myPassword' - }; - - spyOn(service, 'save').and.returnValue(of(new HttpResponse({ body: true }))); - comp.currentPassword = passwordValues.currentPassword; - comp.newPassword = comp.confirmPassword = passwordValues.newPassword; - - // WHEN - comp.changePassword(); - - // THEN - expect(service.save).toHaveBeenCalledWith(passwordValues.newPassword, passwordValues.currentPassword); - }); - - it('should set success to OK upon success', function() { - // GIVEN - spyOn(service, 'save').and.returnValue(of(new HttpResponse({ body: true }))); - comp.newPassword = comp.confirmPassword = 'myPassword'; - - // WHEN - comp.changePassword(); - - // THEN - expect(comp.doNotMatch).toBeNull(); - expect(comp.error).toBeNull(); - expect(comp.success).toBe('OK'); - }); - - it('should notify of error if change password fails', function() { - // GIVEN - spyOn(service, 'save').and.returnValue(throwError('ERROR')); - comp.newPassword = comp.confirmPassword = 'myPassword'; - - // WHEN - comp.changePassword(); - - // THEN - expect(comp.doNotMatch).toBeNull(); - expect(comp.success).toBeNull(); - expect(comp.error).toBe('ERROR'); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts deleted file mode 100644 index ae02abbb91..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, tick, fakeAsync } from '@angular/core/testing'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; -import { Register } from 'app/account/register/register.service'; -import { RegisterComponent } from 'app/account/register/register.component'; - -describe('Component Tests', () => { - describe('RegisterComponent', () => { - let fixture: ComponentFixture; - let comp: RegisterComponent; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [RegisterComponent] - }) - .overrideTemplate(RegisterComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(RegisterComponent); - comp = fixture.componentInstance; - comp.ngOnInit(); - }); - - it('should ensure the two passwords entered match', () => { - comp.registerAccount.password = 'password'; - comp.confirmPassword = 'non-matching'; - - comp.register(); - - expect(comp.doNotMatch).toEqual('ERROR'); - }); - - it('should update success to OK after creating an account', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue(of({})); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(service.save).toHaveBeenCalledWith({ - password: 'password', - langKey: 'en' - }); - expect(comp.success).toEqual(true); - expect(comp.registerAccount.langKey).toEqual('en'); - expect(comp.errorUserExists).toBeNull(); - expect(comp.errorEmailExists).toBeNull(); - expect(comp.error).toBeNull(); - }) - )); - - it('should notify of user existence upon 400/login already in use', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 400, - error: { type: LOGIN_ALREADY_USED_TYPE } - }) - ); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(comp.errorUserExists).toEqual('ERROR'); - expect(comp.errorEmailExists).toBeNull(); - expect(comp.error).toBeNull(); - }) - )); - - it('should notify of email existence upon 400/email address already in use', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 400, - error: { type: EMAIL_ALREADY_USED_TYPE } - }) - ); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(comp.errorEmailExists).toEqual('ERROR'); - expect(comp.errorUserExists).toBeNull(); - expect(comp.error).toBeNull(); - }) - )); - - it('should notify of generic error', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 503 - }) - ); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(comp.errorUserExists).toBeNull(); - expect(comp.errorEmailExists).toBeNull(); - expect(comp.error).toEqual('ERROR'); - }) - )); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts deleted file mode 100644 index b6a6d34c19..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { Observable, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { AccountService } from 'app/core'; -import { SettingsComponent } from 'app/account/settings/settings.component'; - -describe('Component Tests', () => { - describe('SettingsComponent', () => { - let comp: SettingsComponent; - let fixture: ComponentFixture; - let mockAuth: any; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [SettingsComponent], - providers: [] - }) - .overrideTemplate(SettingsComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(SettingsComponent); - comp = fixture.componentInstance; - mockAuth = fixture.debugElement.injector.get(AccountService); - }); - - it('should send the current identity upon save', () => { - // GIVEN - const accountValues = { - firstName: 'John', - lastName: 'Doe', - - activated: true, - email: 'john.doe@mail.com', - langKey: 'en', - login: 'john' - }; - mockAuth.setIdentityResponse(accountValues); - - // WHEN - comp.settingsAccount = accountValues; - comp.save(); - - // THEN - expect(mockAuth.identitySpy).toHaveBeenCalled(); - expect(mockAuth.saveSpy).toHaveBeenCalledWith(accountValues); - expect(comp.settingsAccount).toEqual(accountValues); - }); - - it('should notify of success upon successful save', () => { - // GIVEN - const accountValues = { - firstName: 'John', - lastName: 'Doe' - }; - mockAuth.setIdentityResponse(accountValues); - - // WHEN - comp.save(); - - // THEN - expect(comp.error).toBeNull(); - expect(comp.success).toBe('OK'); - }); - - it('should notify of error upon failed save', () => { - // GIVEN - mockAuth.saveSpy.and.returnValue(throwError('ERROR')); - - // WHEN - comp.save(); - - // THEN - expect(comp.error).toEqual('ERROR'); - expect(comp.success).toBeNull(); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts deleted file mode 100644 index 254791f51a..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { Observable, of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { AuditsComponent } from 'app/admin/audits/audits.component'; -import { AuditsService } from 'app/admin/audits/audits.service'; -import { Audit } from 'app/admin/audits/audit.model'; -import { ITEMS_PER_PAGE } from 'app/shared'; - -function build2DigitsDatePart(datePart: number) { - return `0${datePart}`.slice(-2); -} - -function getDate(isToday = true) { - let date: Date = new Date(); - if (isToday) { - // Today + 1 day - needed if the current day must be included - date.setDate(date.getDate() + 1); - } else { - // get last month - if (date.getMonth() === 0) { - date = new Date(date.getFullYear() - 1, 11, date.getDate()); - } else { - date = new Date(date.getFullYear(), date.getMonth() - 1, date.getDate()); - } - } - const monthString = build2DigitsDatePart(date.getMonth() + 1); - const dateString = build2DigitsDatePart(date.getDate()); - return `${date.getFullYear()}-${monthString}-${dateString}`; -} - -describe('Component Tests', () => { - describe('AuditsComponent', () => { - let comp: AuditsComponent; - let fixture: ComponentFixture; - let service: AuditsService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [AuditsComponent], - providers: [AuditsService] - }) - .overrideTemplate(AuditsComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(AuditsComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(AuditsService); - }); - - describe('today function ', () => { - it('should set toDate to current date', () => { - comp.today(); - expect(comp.toDate).toBe(getDate()); - }); - }); - - describe('previousMonth function ', () => { - it('should set fromDate to current date', () => { - comp.previousMonth(); - expect(comp.fromDate).toBe(getDate(false)); - }); - }); - - describe('By default, on init', () => { - it('should set all default values correctly', () => { - fixture.detectChanges(); - expect(comp.toDate).toBe(getDate()); - expect(comp.fromDate).toBe(getDate(false)); - expect(comp.itemsPerPage).toBe(ITEMS_PER_PAGE); - expect(comp.page).toBe(10); - expect(comp.reverse).toBeFalsy(); - expect(comp.predicate).toBe('id'); - }); - }); - - describe('OnInit', () => { - it('Should call load all on init', () => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - const audit = new Audit({ remoteAddress: '127.0.0.1', sessionId: '123' }, 'user', '20140101', 'AUTHENTICATION_SUCCESS'); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [audit], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.query).toHaveBeenCalled(); - expect(comp.audits[0]).toEqual(jasmine.objectContaining(audit)); - }); - }); - - describe('Create sort object', () => { - it('Should sort only by id asc', () => { - // GIVEN - comp.predicate = 'id'; - comp.reverse = false; - - // WHEN - const sort = comp.sort(); - - // THEN - expect(sort.length).toEqual(1); - expect(sort[0]).toEqual('id,desc'); - }); - - it('Should sort by timestamp asc then by id', () => { - // GIVEN - comp.predicate = 'timestamp'; - comp.reverse = true; - - // WHEN - const sort = comp.sort(); - - // THEN - expect(sort.length).toEqual(2); - expect(sort[0]).toEqual('timestamp,asc'); - expect(sort[1]).toEqual('id'); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts deleted file mode 100644 index 84ff79f633..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { AuditsService } from 'app/admin/audits/audits.service'; -import { Audit } from 'app/admin/audits/audit.model'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('Audits Service', () => { - let service: AuditsService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(AuditsService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.query({}).subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/audits'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should return Audits', () => { - const audit = new Audit({ remoteAddress: '127.0.0.1', sessionId: '123' }, 'user', '20140101', 'AUTHENTICATION_SUCCESS'); - - service.query({}).subscribe(received => { - expect(received.body[0]).toEqual(audit); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([audit]); - }); - - it('should propagate not found response', () => { - service.query({}).subscribe(null, (_error: any) => { - expect(_error.status).toEqual(404); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush('Invalid request parameters', { - status: 404, - statusText: 'Bad Request' - }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts deleted file mode 100644 index d21f87b57b..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiConfigurationComponent } from 'app/admin/configuration/configuration.component'; -import { JhiConfigurationService } from 'app/admin/configuration/configuration.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; -import { Log } from 'app/admin'; - -describe('Component Tests', () => { - describe('JhiConfigurationComponent', () => { - let comp: JhiConfigurationComponent; - let fixture: ComponentFixture; - let service: JhiConfigurationService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiConfigurationComponent], - providers: [JhiConfigurationService] - }) - .overrideTemplate(JhiConfigurationComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiConfigurationComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(JhiConfigurationService); - }); - - describe('OnInit', () => { - it('should set all default values correctly', () => { - expect(comp.configKeys).toEqual([]); - expect(comp.filter).toBe(''); - expect(comp.orderProp).toBe('prefix'); - expect(comp.reverse).toBe(false); - }); - it('Should call load all on init', () => { - // GIVEN - const body = [{ config: 'test', properties: 'test' }, { config: 'test2' }]; - const envConfig = { envConfig: 'test' }; - spyOn(service, 'get').and.returnValue(of(body)); - spyOn(service, 'getEnv').and.returnValue(of(envConfig)); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.get).toHaveBeenCalled(); - expect(service.getEnv).toHaveBeenCalled(); - expect(comp.configKeys).toEqual([['0', '1', '2', '3']]); - expect(comp.allConfiguration).toEqual(envConfig); - }); - }); - describe('keys method', () => { - it('should return the keys of an Object', () => { - // GIVEN - const data = { - key1: 'test', - key2: 'test2' - }; - - // THEN - expect(comp.keys(data)).toEqual(['key1', 'key2']); - expect(comp.keys(undefined)).toEqual([]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts deleted file mode 100644 index 6039044b7f..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { JhiConfigurationService } from 'app/admin/configuration/configuration.service'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { HttpResponse } from '@angular/common/http'; - -describe('Service Tests', () => { - describe('Logs Service', () => { - let service: JhiConfigurationService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(JhiConfigurationService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.get().subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/configprops'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should get the config', () => { - const angularConfig = { - contexts: { - angular: { - beans: ['test2'] - } - } - }; - service.get().subscribe(received => { - expect(received.body[0]).toEqual(angularConfig); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(angularConfig); - }); - - it('should get the env', () => { - const propertySources = new HttpResponse({ - body: [{ name: 'test1', properties: 'test1' }, { name: 'test2', properties: 'test2' }] - }); - service.get().subscribe(received => { - expect(received.body[0]).toEqual(propertySources); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(propertySources); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts deleted file mode 100644 index 549b430f67..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts +++ /dev/null @@ -1,321 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; -import { of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiHealthCheckComponent } from 'app/admin/health/health.component'; -import { JhiHealthService } from 'app/admin/health/health.service'; - -describe('Component Tests', () => { - describe('JhiHealthCheckComponent', () => { - let comp: JhiHealthCheckComponent; - let fixture: ComponentFixture; - let service: JhiHealthService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiHealthCheckComponent] - }) - .overrideTemplate(JhiHealthCheckComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiHealthCheckComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(JhiHealthService); - }); - - describe('baseName and subSystemName', () => { - it('should return the basename when it has no sub system', () => { - expect(comp.baseName('base')).toBe('base'); - }); - - it('should return the basename when it has sub systems', () => { - expect(comp.baseName('base.subsystem.system')).toBe('base'); - }); - - it('should return the sub system name', () => { - expect(comp.subSystemName('subsystem')).toBe(''); - }); - - it('should return the subsystem when it has multiple keys', () => { - expect(comp.subSystemName('subsystem.subsystem.system')).toBe(' - subsystem.system'); - }); - }); - - describe('transformHealthData', () => { - it('should flatten empty health data', () => { - const data = {}; - const expected = []; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with no subsystems', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with subsystems at level 1, main system has no additional information', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - }, - system: { - status: 'DOWN', - subsystem1: { - status: 'UP', - property1: 'system.subsystem1.property1' - }, - subsystem2: { - status: 'DOWN', - error: 'system.subsystem1.error', - property2: 'system.subsystem2.property2' - } - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - }, - { - name: 'system.subsystem1', - status: 'UP', - details: { - property1: 'system.subsystem1.property1' - } - }, - { - name: 'system.subsystem2', - error: 'system.subsystem1.error', - status: 'DOWN', - details: { - property2: 'system.subsystem2.property2' - } - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with subsystems at level 1, main system has additional information', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - }, - system: { - status: 'DOWN', - property1: 'system.property1', - subsystem1: { - status: 'UP', - property1: 'system.subsystem1.property1' - }, - subsystem2: { - status: 'DOWN', - error: 'system.subsystem1.error', - property2: 'system.subsystem2.property2' - } - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - }, - { - name: 'system', - status: 'DOWN', - details: { - property1: 'system.property1' - } - }, - { - name: 'system.subsystem1', - status: 'UP', - details: { - property1: 'system.subsystem1.property1' - } - }, - { - name: 'system.subsystem2', - error: 'system.subsystem1.error', - status: 'DOWN', - details: { - property2: 'system.subsystem2.property2' - } - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with subsystems at level 1, main system has additional error', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - }, - system: { - status: 'DOWN', - error: 'show me', - subsystem1: { - status: 'UP', - property1: 'system.subsystem1.property1' - }, - subsystem2: { - status: 'DOWN', - error: 'system.subsystem1.error', - property2: 'system.subsystem2.property2' - } - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - }, - { - name: 'system', - error: 'show me', - status: 'DOWN' - }, - { - name: 'system.subsystem1', - status: 'UP', - details: { - property1: 'system.subsystem1.property1' - } - }, - { - name: 'system.subsystem2', - error: 'system.subsystem1.error', - status: 'DOWN', - details: { - property2: 'system.subsystem2.property2' - } - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - }); - - describe('getBadgeClass', () => { - it('should get badge class', () => { - const upBadgeClass = comp.getBadgeClass('UP'); - const downBadgeClass = comp.getBadgeClass('DOWN'); - expect(upBadgeClass).toEqual('badge-success'); - expect(downBadgeClass).toEqual('badge-danger'); - }); - }); - - describe('refresh', () => { - it('should call refresh on init', () => { - // GIVEN - spyOn(service, 'checkHealth').and.returnValue(of(new HttpResponse())); - spyOn(service, 'transformHealthData').and.returnValue(of({ data: 'test' })); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.checkHealth).toHaveBeenCalled(); - expect(service.transformHealthData).toHaveBeenCalled(); - expect(comp.healthData.value).toEqual({ data: 'test' }); - }); - it('should handle a 503 on refreshing health data', () => { - // GIVEN - spyOn(service, 'checkHealth').and.returnValue(throwError(new HttpErrorResponse({ status: 503, error: 'Mail down' }))); - spyOn(service, 'transformHealthData').and.returnValue(of({ health: 'down' })); - - // WHEN - comp.refresh(); - - // THEN - expect(service.checkHealth).toHaveBeenCalled(); - expect(service.transformHealthData).toHaveBeenCalled(); - expect(comp.healthData.value).toEqual({ health: 'down' }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.component.spec.ts deleted file mode 100644 index def356c0f2..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.component.spec.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { LogsComponent } from 'app/admin/logs/logs.component'; -import { LogsService } from 'app/admin/logs/logs.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; -import { Log } from 'app/admin'; - -describe('Component Tests', () => { - describe('LogsComponent', () => { - let comp: LogsComponent; - let fixture: ComponentFixture; - let service: LogsService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [LogsComponent], - providers: [LogsService] - }) - .overrideTemplate(LogsComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(LogsComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(LogsService); - }); - - describe('OnInit', () => { - it('should set all default values correctly', () => { - expect(comp.filter).toBe(''); - expect(comp.orderProp).toBe('name'); - expect(comp.reverse).toBe(false); - }); - it('Should call load all on init', () => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - const log = new Log('main', 'WARN'); - spyOn(service, 'findAll').and.returnValue( - of( - new HttpResponse({ - body: [log], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.findAll).toHaveBeenCalled(); - expect(comp.loggers[0]).toEqual(jasmine.objectContaining(log)); - }); - }); - describe('change log level', () => { - it('should change log level correctly', () => { - // GIVEN - const log = new Log('main', 'ERROR'); - spyOn(service, 'changeLevel').and.returnValue(of(new HttpResponse())); - spyOn(service, 'findAll').and.returnValue(of(new HttpResponse({ body: [log] }))); - - // WHEN - comp.changeLevel('main', 'ERROR'); - - // THEN - expect(service.changeLevel).toHaveBeenCalled(); - expect(service.findAll).toHaveBeenCalled(); - expect(comp.loggers[0]).toEqual(jasmine.objectContaining(log)); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.service.spec.ts deleted file mode 100644 index c34833922e..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.service.spec.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { LogsService } from 'app/admin/logs/logs.service'; -import { Log } from 'app/admin/logs/log.model'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('Logs Service', () => { - let service: LogsService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(LogsService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.findAll().subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/logs'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should return Logs', () => { - const log = new Log('main', 'ERROR'); - - service.findAll().subscribe(received => { - expect(received.body[0]).toEqual(log); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([log]); - }); - - it('should change log level', () => { - const log = new Log('main', 'ERROR'); - - service.changeLevel(log).subscribe(received => { - expect(received.body[0]).toEqual(log); - }); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush([log]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts deleted file mode 100644 index d4a992b963..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; -import { of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiMetricsMonitoringComponent } from 'app/admin/metrics/metrics.component'; -import { JhiMetricsService } from 'app/admin/metrics/metrics.service'; - -describe('Component Tests', () => { - describe('JhiMetricsMonitoringComponent', () => { - let comp: JhiMetricsMonitoringComponent; - let fixture: ComponentFixture; - let service: JhiMetricsService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiMetricsMonitoringComponent] - }) - .overrideTemplate(JhiMetricsMonitoringComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiMetricsMonitoringComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(JhiMetricsService); - }); - - describe('refresh', () => { - it('should call refresh on init', () => { - // GIVEN - const response = { - timers: { - service: 'test', - unrelatedKey: 'test' - }, - gauges: { - 'jcache.statistics': { - value: 2 - }, - unrelatedKey: 'test' - } - }; - spyOn(service, 'getMetrics').and.returnValue(of(response)); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.getMetrics).toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts deleted file mode 100644 index 2c3665b062..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { JhiMetricsService } from 'app/admin/metrics/metrics.service'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('Logs Service', () => { - let service: JhiMetricsService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(JhiMetricsService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.getMetrics().subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/jhi-metrics'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should return Metrics', () => { - const metrics = []; - - service.getMetrics().subscribe(received => { - expect(received.body[0]).toEqual(metrics); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([metrics]); - }); - - it('should return Thread Dump', () => { - const dump = [{ name: 'test1', threadState: 'RUNNABLE' }]; - - service.threadDump().subscribe(received => { - expect(received.body[0]).toEqual(dump); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([dump]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts deleted file mode 100644 index 596e1b5609..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { Observable, of } from 'rxjs'; -import { JhiEventManager } from 'ng-jhipster'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtDeleteDialogComponent } from 'app/admin/user-management/user-management-delete-dialog.component'; -import { UserService } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Delete Component', () => { - let comp: UserMgmtDeleteDialogComponent; - let fixture: ComponentFixture; - let service: UserService; - let mockEventManager: any; - let mockActiveModal: any; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtDeleteDialogComponent] - }) - .overrideTemplate(UserMgmtDeleteDialogComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtDeleteDialogComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(UserService); - mockEventManager = fixture.debugElement.injector.get(JhiEventManager); - mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); - }); - - describe('confirmDelete', () => { - it('Should call delete service on confirmDelete', inject( - [], - fakeAsync(() => { - // GIVEN - spyOn(service, 'delete').and.returnValue(of({})); - - // WHEN - comp.confirmDelete('user'); - tick(); - - // THEN - expect(service.delete).toHaveBeenCalledWith('user'); - expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); - expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts deleted file mode 100644 index f64b8bb88b..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { ActivatedRoute } from '@angular/router'; -import { of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtDetailComponent } from 'app/admin/user-management/user-management-detail.component'; -import { User } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Detail Component', () => { - let comp: UserMgmtDetailComponent; - let fixture: ComponentFixture; - const route = ({ - data: of({ user: new User(1, 'user', 'first', 'last', 'first@last.com', true, 'en', ['ROLE_USER'], 'admin', null, null, null) }) - } as any) as ActivatedRoute; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtDetailComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: route - } - ] - }) - .overrideTemplate(UserMgmtDetailComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtDetailComponent); - comp = fixture.componentInstance; - }); - - describe('OnInit', () => { - it('Should call load all on init', () => { - // GIVEN - - // WHEN - comp.ngOnInit(); - - // THEN - expect(comp.user).toEqual( - jasmine.objectContaining({ - id: 1, - login: 'user', - firstName: 'first', - lastName: 'last', - email: 'first@last.com', - activated: true, - langKey: 'en', - authorities: ['ROLE_USER'], - createdBy: 'admin', - createdDate: null, - lastModifiedBy: null, - lastModifiedDate: null, - password: null - }) - ); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts deleted file mode 100644 index c98694ba82..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { ActivatedRoute } from '@angular/router'; -import { Observable, of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtUpdateComponent } from 'app/admin/user-management/user-management-update.component'; -import { UserService, User } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Update Component', () => { - let comp: UserMgmtUpdateComponent; - let fixture: ComponentFixture; - let service: UserService; - const route = ({ - data: of({ user: new User(1, 'user', 'first', 'last', 'first@last.com', true, 'en', ['ROLE_USER'], 'admin', null, null, null) }) - } as any) as ActivatedRoute; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtUpdateComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: route - } - ] - }) - .overrideTemplate(UserMgmtUpdateComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtUpdateComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(UserService); - }); - - describe('OnInit', () => { - it('Should load authorities and language on init', inject( - [], - fakeAsync(() => { - // GIVEN - spyOn(service, 'authorities').and.returnValue(of(['USER'])); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.authorities).toHaveBeenCalled(); - expect(comp.authorities).toEqual(['USER']); - }) - )); - }); - - describe('save', () => { - it('Should call update service on save for existing user', inject( - [], - fakeAsync(() => { - // GIVEN - const entity = new User(123); - spyOn(service, 'update').and.returnValue( - of( - new HttpResponse({ - body: entity - }) - ) - ); - comp.user = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.update).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - }) - )); - - it('Should call create service on save for new user', inject( - [], - fakeAsync(() => { - // GIVEN - const entity = new User(); - spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); - comp.user = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.create).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts deleted file mode 100644 index 31fea387b8..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { Observable, of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtComponent } from 'app/admin/user-management/user-management.component'; -import { UserService, User } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Component', () => { - let comp: UserMgmtComponent; - let fixture: ComponentFixture; - let service: UserService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtComponent] - }) - .overrideTemplate(UserMgmtComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(UserService); - }); - - describe('OnInit', () => { - it('Should call load all on init', inject( - [], - fakeAsync(() => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [new User(123)], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - tick(); // simulate async - - // THEN - expect(service.query).toHaveBeenCalled(); - expect(comp.users[0]).toEqual(jasmine.objectContaining({ id: 123 })); - }) - )); - }); - - describe('setActive', () => { - it('Should update user and call load all', inject( - [], - fakeAsync(() => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - const user = new User(123); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [user], - headers - }) - ) - ); - spyOn(service, 'update').and.returnValue(of(new HttpResponse({ status: 200 }))); - - // WHEN - comp.setActive(user, true); - tick(); // simulate async - - // THEN - expect(service.update).toHaveBeenCalledWith(user); - expect(service.query).toHaveBeenCalled(); - expect(comp.users[0]).toEqual(jasmine.objectContaining({ id: 123 })); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts deleted file mode 100644 index 01ed421f57..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { TestBed } from '@angular/core/testing'; -import { SERVER_API_URL } from 'app/app.constants'; -import { AccountService } from 'app/core'; -import { JhiDateUtils } from 'ng-jhipster'; -import { SessionStorageService } from 'ngx-webstorage'; - -describe('Service Tests', () => { - describe('Account Service', () => { - let service: AccountService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - providers: [JhiDateUtils, SessionStorageService] - }); - - service = TestBed.get(AccountService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call /account if user is undefined', () => { - service.identity().then(() => {}); - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'api/account'; - - expect(req.request.url).toEqual(`${resourceUrl}`); - }); - - it('should call /account only once', () => { - service.identity().then(() => service.identity().then(() => {})); - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'api/account'; - - expect(req.request.url).toEqual(`${resourceUrl}`); - req.flush({ - firstName: 'John' - }); - }); - - describe('hasAuthority', () => { - it('should return false if user is not logged', async () => { - const hasAuthority = await service.hasAuthority('ROLE_USER'); - expect(hasAuthority).toBeFalsy(); - }); - - it('should return false if user is logged and has not authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAuthority('ROLE_ADMIN'); - - expect(hasAuthority).toBeFalsy(); - }); - - it('should return true if user is logged and has authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAuthority('ROLE_USER'); - - expect(hasAuthority).toBeTruthy(); - }); - }); - - describe('hasAnyAuthority', () => { - it('should return false if user is not logged', async () => { - const hasAuthority = await service.hasAnyAuthority(['ROLE_USER']); - expect(hasAuthority).toBeFalsy(); - }); - - it('should return false if user is logged and has not authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAnyAuthority(['ROLE_ADMIN']); - - expect(hasAuthority).toBeFalsy(); - }); - - it('should return true if user is logged and has authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAnyAuthority(['ROLE_USER', 'ROLE_ADMIN']); - - expect(hasAuthority).toBeTruthy(); - }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts deleted file mode 100644 index 9c05839a57..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { JhiDateUtils } from 'ng-jhipster'; - -import { UserService, User } from 'app/core'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('User Service', () => { - let service: UserService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - providers: [JhiDateUtils] - }); - - service = TestBed.get(UserService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.find('user').subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'api/users'; - expect(req.request.url).toEqual(`${resourceUrl}/user`); - }); - it('should return User', () => { - service.find('user').subscribe(received => { - expect(received.body.login).toEqual('user'); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(new User(1, 'user')); - }); - - it('should return Authorities', () => { - service.authorities().subscribe(_authorities => { - expect(_authorities).toEqual(['ROLE_USER', 'ROLE_ADMIN']); - }); - const req = httpMock.expectOne({ method: 'GET' }); - - req.flush(['ROLE_USER', 'ROLE_ADMIN']); - }); - - it('should propagate not found response', () => { - service.find('user').subscribe(null, (_error: any) => { - expect(_error.status).toEqual(404); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush('Invalid request parameters', { - status: 404, - statusText: 'Bad Request' - }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts deleted file mode 100644 index 6ffba6ee1e..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { Observable, of } from 'rxjs'; -import { JhiEventManager } from 'ng-jhipster'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookDeleteDialogComponent } from 'app/entities/book/book-delete-dialog.component'; -import { BookService } from 'app/entities/book/book.service'; - -describe('Component Tests', () => { - describe('Book Management Delete Component', () => { - let comp: BookDeleteDialogComponent; - let fixture: ComponentFixture; - let service: BookService; - let mockEventManager: any; - let mockActiveModal: any; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookDeleteDialogComponent] - }) - .overrideTemplate(BookDeleteDialogComponent, '') - .compileComponents(); - fixture = TestBed.createComponent(BookDeleteDialogComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(BookService); - mockEventManager = fixture.debugElement.injector.get(JhiEventManager); - mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); - }); - - describe('confirmDelete', () => { - it('Should call delete service on confirmDelete', inject( - [], - fakeAsync(() => { - // GIVEN - spyOn(service, 'delete').and.returnValue(of({})); - - // WHEN - comp.confirmDelete(123); - tick(); - - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); - expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts deleted file mode 100644 index b0ff94b3ea..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ActivatedRoute } from '@angular/router'; -import { of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookDetailComponent } from 'app/entities/book/book-detail.component'; -import { Book } from 'app/shared/model/book.model'; - -describe('Component Tests', () => { - describe('Book Management Detail Component', () => { - let comp: BookDetailComponent; - let fixture: ComponentFixture; - const route = ({ data: of({ book: new Book(123) }) } as any) as ActivatedRoute; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookDetailComponent], - providers: [{ provide: ActivatedRoute, useValue: route }] - }) - .overrideTemplate(BookDetailComponent, '') - .compileComponents(); - fixture = TestBed.createComponent(BookDetailComponent); - comp = fixture.componentInstance; - }); - - describe('OnInit', () => { - it('Should call load all on init', () => { - // GIVEN - - // WHEN - comp.ngOnInit(); - - // THEN - expect(comp.book).toEqual(jasmine.objectContaining({ id: 123 })); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts deleted file mode 100644 index 336a2e2397..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { Observable, of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookUpdateComponent } from 'app/entities/book/book-update.component'; -import { BookService } from 'app/entities/book/book.service'; -import { Book } from 'app/shared/model/book.model'; - -describe('Component Tests', () => { - describe('Book Management Update Component', () => { - let comp: BookUpdateComponent; - let fixture: ComponentFixture; - let service: BookService; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookUpdateComponent] - }) - .overrideTemplate(BookUpdateComponent, '') - .compileComponents(); - - fixture = TestBed.createComponent(BookUpdateComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(BookService); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', fakeAsync(() => { - // GIVEN - const entity = new Book(123); - spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); - comp.book = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.update).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - })); - - it('Should call create service on save for new entity', fakeAsync(() => { - // GIVEN - const entity = new Book(); - spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); - comp.book = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.create).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - })); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts deleted file mode 100644 index 3b3d472650..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { Observable, of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookComponent } from 'app/entities/book/book.component'; -import { BookService } from 'app/entities/book/book.service'; -import { Book } from 'app/shared/model/book.model'; - -describe('Component Tests', () => { - describe('Book Management Component', () => { - let comp: BookComponent; - let fixture: ComponentFixture; - let service: BookService; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookComponent], - providers: [] - }) - .overrideTemplate(BookComponent, '') - .compileComponents(); - - fixture = TestBed.createComponent(BookComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(BookService); - }); - - it('Should call load all on init', () => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [new Book(123)], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.query).toHaveBeenCalled(); - expect(comp.books[0]).toEqual(jasmine.objectContaining({ id: 123 })); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts deleted file mode 100644 index cd0c5b7318..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts +++ /dev/null @@ -1,137 +0,0 @@ -/* tslint:disable max-line-length */ -import { TestBed, getTestBed } from '@angular/core/testing'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { of } from 'rxjs'; -import { take, map } from 'rxjs/operators'; -import * as moment from 'moment'; -import { DATE_FORMAT } from 'app/shared/constants/input.constants'; -import { BookService } from 'app/entities/book/book.service'; -import { IBook, Book } from 'app/shared/model/book.model'; - -describe('Service Tests', () => { - describe('Book Service', () => { - let injector: TestBed; - let service: BookService; - let httpMock: HttpTestingController; - let elemDefault: IBook; - let currentDate: moment.Moment; - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - injector = getTestBed(); - service = injector.get(BookService); - httpMock = injector.get(HttpTestingController); - currentDate = moment(); - - elemDefault = new Book(0, 'AAAAAAA', 'AAAAAAA', currentDate, 0, 0); - }); - - describe('Service methods', async () => { - it('should find an element', async () => { - const returnedFromService = Object.assign( - { - published: currentDate.format(DATE_FORMAT) - }, - elemDefault - ); - service - .find(123) - .pipe(take(1)) - .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(JSON.stringify(returnedFromService)); - }); - - it('should create a Book', async () => { - const returnedFromService = Object.assign( - { - id: 0, - published: currentDate.format(DATE_FORMAT) - }, - elemDefault - ); - const expected = Object.assign( - { - published: currentDate - }, - returnedFromService - ); - service - .create(new Book(null)) - .pipe(take(1)) - .subscribe(resp => expect(resp).toMatchObject({ body: expected })); - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(JSON.stringify(returnedFromService)); - }); - - it('should update a Book', async () => { - const returnedFromService = Object.assign( - { - title: 'BBBBBB', - author: 'BBBBBB', - published: currentDate.format(DATE_FORMAT), - quantity: 1, - price: 1 - }, - elemDefault - ); - - const expected = Object.assign( - { - published: currentDate - }, - returnedFromService - ); - service - .update(expected) - .pipe(take(1)) - .subscribe(resp => expect(resp).toMatchObject({ body: expected })); - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(JSON.stringify(returnedFromService)); - }); - - it('should return a list of Book', async () => { - const returnedFromService = Object.assign( - { - title: 'BBBBBB', - author: 'BBBBBB', - published: currentDate.format(DATE_FORMAT), - quantity: 1, - price: 1 - }, - elemDefault - ); - const expected = Object.assign( - { - published: currentDate - }, - returnedFromService - ); - service - .query(expected) - .pipe( - take(1), - map(resp => resp.body) - ) - .subscribe(body => expect(body).toContainEqual(expected)); - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(JSON.stringify([returnedFromService])); - httpMock.verify(); - }); - - it('should delete a Book', async () => { - const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); - }); - }); - - afterEach(() => { - httpMock.verify(); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts deleted file mode 100644 index 93f344e633..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { HttpErrorResponse, HttpHeaders } from '@angular/common/http'; -import { JhiAlertService, JhiEventManager } from 'ng-jhipster'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiAlertErrorComponent } from 'app/shared/alert/alert-error.component'; -import { MockAlertService } from '../../../helpers/mock-alert.service'; - -describe('Component Tests', () => { - describe('Alert Error Component', () => { - let comp: JhiAlertErrorComponent; - let fixture: ComponentFixture; - let eventManager: JhiEventManager; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiAlertErrorComponent], - providers: [ - JhiEventManager, - { - provide: JhiAlertService, - useClass: MockAlertService - } - ] - }) - .overrideTemplate(JhiAlertErrorComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiAlertErrorComponent); - comp = fixture.componentInstance; - eventManager = fixture.debugElement.injector.get(JhiEventManager); - }); - - describe('Error Handling', () => { - it('Should display an alert on status 0', () => { - // GIVEN - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { status: 0 } }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Server not reachable'); - }); - it('Should display an alert on status 404', () => { - // GIVEN - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { status: 404 } }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Not found'); - }); - it('Should display an alert on generic error', () => { - // GIVEN - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { error: { message: 'Error Message' } } }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { error: 'Second Error Message' } }); - // THEN - expect(comp.alerts.length).toBe(2); - expect(comp.alerts[0].msg).toBe('Error Message'); - expect(comp.alerts[1].msg).toBe('Second Error Message'); - }); - it('Should display an alert on status 400 for generic error', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders(), - status: 400, - statusText: 'Bad Request', - error: { - type: 'https://www.jhipster.tech/problem/constraint-violation', - title: 'Bad Request', - status: 400, - path: '/api/foos', - message: 'error.validation' - } - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('error.validation'); - }); - it('Should display an alert on status 400 for generic error without message', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders(), - status: 400, - error: 'Bad Request' - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Bad Request'); - }); - it('Should display an alert on status 400 for invalid parameters', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders(), - status: 400, - statusText: 'Bad Request', - error: { - type: 'https://www.jhipster.tech/problem/constraint-violation', - title: 'Method argument not valid', - status: 400, - path: '/api/foos', - message: 'error.validation', - fieldErrors: [{ objectName: 'foo', field: 'minField', message: 'Min' }] - } - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Error on field "MinField"'); - }); - it('Should display an alert on status 400 for error headers', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders().append('app-error', 'Error Message').append('app-params', 'foo'), - status: 400, - statusText: 'Bad Request', - error: { - status: 400, - message: 'error.validation' - } - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Error Message'); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts deleted file mode 100644 index 814af64610..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { Router } from '@angular/router'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { LoginService } from 'app/core/login/login.service'; -import { JhiLoginModalComponent } from 'app/shared/login/login.component'; -import { StateStorageService } from 'app/core/auth/state-storage.service'; -import { BookstoreTestModule } from '../../../test.module'; -import { MockLoginService } from '../../../helpers/mock-login.service'; -import { MockStateStorageService } from '../../../helpers/mock-state-storage.service'; - -describe('Component Tests', () => { - describe('LoginComponent', () => { - let comp: JhiLoginModalComponent; - let fixture: ComponentFixture; - let mockLoginService: any; - let mockStateStorageService: any; - let mockRouter: any; - let mockEventManager: any; - let mockActiveModal: any; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiLoginModalComponent], - providers: [ - { - provide: LoginService, - useClass: MockLoginService - }, - { - provide: StateStorageService, - useClass: MockStateStorageService - } - ] - }) - .overrideTemplate(JhiLoginModalComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiLoginModalComponent); - comp = fixture.componentInstance; - mockLoginService = fixture.debugElement.injector.get(LoginService); - mockStateStorageService = fixture.debugElement.injector.get(StateStorageService); - mockRouter = fixture.debugElement.injector.get(Router); - mockEventManager = fixture.debugElement.injector.get(JhiEventManager); - mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); - }); - - it('should authenticate the user upon login when previous state was set', inject( - [], - fakeAsync(() => { - // GIVEN - const credentials = { - username: 'admin', - password: 'admin', - rememberMe: true - }; - comp.username = 'admin'; - comp.password = 'admin'; - comp.rememberMe = true; - comp.credentials = credentials; - mockLoginService.setResponse({}); - mockStateStorageService.setResponse({ redirect: 'dummy' }); - - // WHEN/ - comp.login(); - tick(); // simulate async - - // THEN - expect(comp.authenticationError).toEqual(false); - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('login success'); - expect(mockEventManager.broadcastSpy).toHaveBeenCalledTimes(1); - expect(mockLoginService.loginSpy).toHaveBeenCalledWith(credentials); - expect(mockStateStorageService.getUrlSpy).toHaveBeenCalledTimes(1); - expect(mockStateStorageService.storeUrlSpy).toHaveBeenCalledWith(null); - expect(mockRouter.navigateSpy).toHaveBeenCalledWith([{ redirect: 'dummy' }]); - }) - )); - - it('should authenticate the user upon login when previous state was not set', inject( - [], - fakeAsync(() => { - // GIVEN - const credentials = { - username: 'admin', - password: 'admin', - rememberMe: true - }; - comp.username = 'admin'; - comp.password = 'admin'; - comp.rememberMe = true; - comp.credentials = credentials; - mockLoginService.setResponse({}); - mockStateStorageService.setResponse(null); - - // WHEN - comp.login(); - tick(); // simulate async - - // THEN - expect(comp.authenticationError).toEqual(false); - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('login success'); - expect(mockEventManager.broadcastSpy).toHaveBeenCalledTimes(1); - expect(mockLoginService.loginSpy).toHaveBeenCalledWith(credentials); - expect(mockStateStorageService.getUrlSpy).toHaveBeenCalledTimes(1); - expect(mockStateStorageService.storeUrlSpy).not.toHaveBeenCalled(); - expect(mockRouter.navigateSpy).not.toHaveBeenCalled(); - }) - )); - - it('should empty the credentials upon cancel', () => { - // GIVEN - const credentials = { - username: 'admin', - password: 'admin', - rememberMe: true - }; - - const expected = { - username: null, - password: null, - rememberMe: true - }; - - comp.credentials = credentials; - - // WHEN - comp.cancel(); - - // THEN - expect(comp.authenticationError).toEqual(false); - expect(comp.credentials).toEqual(expected); - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('cancel'); - }); - - it('should redirect user when register', () => { - // WHEN - comp.register(); - - // THEN - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('to state register'); - expect(mockRouter.navigateSpy).toHaveBeenCalledWith(['/register']); - }); - - it('should redirect user when request password', () => { - // WHEN - comp.requestResetPassword(); - - // THEN - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('to state requestReset'); - expect(mockRouter.navigateSpy).toHaveBeenCalledWith(['/reset', 'request']); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts deleted file mode 100644 index 659bf4d379..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { SpyObject } from './spyobject'; -import { AccountService } from 'app/core/auth/account.service'; -import Spy = jasmine.Spy; - -export class MockAccountService extends SpyObject { - getSpy: Spy; - saveSpy: Spy; - fakeResponse: any; - identitySpy: Spy; - - constructor() { - super(AccountService); - - this.fakeResponse = null; - this.getSpy = this.spy('get').andReturn(this); - this.saveSpy = this.spy('save').andReturn(this); - this.setIdentitySpy({}); - } - - subscribe(callback: any) { - callback(this.fakeResponse); - } - - setResponse(json: any): void { - this.fakeResponse = json; - } - - setIdentitySpy(json: any): any { - this.identitySpy = this.spy('identity').andReturn(Promise.resolve(json)); - } - - setIdentityResponse(json: any): void { - this.setIdentitySpy(json); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts deleted file mode 100644 index 8bf0cc966f..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SpyObject } from './spyobject'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import Spy = jasmine.Spy; - -export class MockActiveModal extends SpyObject { - dismissSpy: Spy; - - constructor() { - super(NgbActiveModal); - this.dismissSpy = this.spy('dismiss').andReturn(this); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts deleted file mode 100644 index 87f36c71e2..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SpyObject } from './spyobject'; -import { JhiAlertService, JhiAlert } from 'ng-jhipster'; - -export class MockAlertService extends SpyObject { - constructor() { - super(JhiAlertService); - } - addAlert(alertOptions: JhiAlert) { - return alertOptions; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts deleted file mode 100644 index a71b5d9314..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SpyObject } from './spyobject'; -import { JhiEventManager } from 'ng-jhipster'; -import Spy = jasmine.Spy; - -export class MockEventManager extends SpyObject { - broadcastSpy: Spy; - - constructor() { - super(JhiEventManager); - this.broadcastSpy = this.spy('broadcast').andReturn(this); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts deleted file mode 100644 index 93a8ca575f..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { SpyObject } from './spyobject'; -import { LoginService } from 'app/core/login/login.service'; -import Spy = jasmine.Spy; - -export class MockLoginService extends SpyObject { - loginSpy: Spy; - logoutSpy: Spy; - registerSpy: Spy; - requestResetPasswordSpy: Spy; - cancelSpy: Spy; - - constructor() { - super(LoginService); - - this.setLoginSpy({}); - this.logoutSpy = this.spy('logout').andReturn(this); - this.registerSpy = this.spy('register').andReturn(this); - this.requestResetPasswordSpy = this.spy('requestResetPassword').andReturn(this); - this.cancelSpy = this.spy('cancel').andReturn(this); - } - - setLoginSpy(json: any) { - this.loginSpy = this.spy('login').andReturn(Promise.resolve(json)); - } - - setResponse(json: any): void { - this.setLoginSpy(json); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts deleted file mode 100644 index 3465e05524..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ActivatedRoute, Router } from '@angular/router'; -import { SpyObject } from './spyobject'; -import { Observable, of } from 'rxjs'; -import Spy = jasmine.Spy; - -export class MockActivatedRoute extends ActivatedRoute { - constructor(parameters?: any) { - super(); - this.queryParams = of(parameters); - this.params = of(parameters); - this.data = of({ - ...parameters, - pagingParams: { - page: 10, - ascending: false, - predicate: 'id' - } - }); - } -} - -export class MockRouter extends SpyObject { - navigateSpy: Spy; - - constructor() { - super(Router); - this.navigateSpy = this.spy('navigate'); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts deleted file mode 100644 index 1398c7b28b..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { SpyObject } from './spyobject'; -import { StateStorageService } from 'app/core/auth/state-storage.service'; -import Spy = jasmine.Spy; - -export class MockStateStorageService extends SpyObject { - getUrlSpy: Spy; - storeUrlSpy: Spy; - - constructor() { - super(StateStorageService); - this.setUrlSpy({}); - this.storeUrlSpy = this.spy('storeUrl').andReturn(this); - } - - setUrlSpy(json) { - this.getUrlSpy = this.spy('getUrl').andReturn(json); - } - - setResponse(json: any): void { - this.setUrlSpy(json); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts deleted file mode 100644 index 949e067ef5..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts +++ /dev/null @@ -1,69 +0,0 @@ -export interface GuinessCompatibleSpy extends jasmine.Spy { - /** By chaining the spy with and.returnValue, all calls to the function will return a specific - * value. */ - andReturn(val: any): void; - /** By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied - * function. */ - andCallFake(fn: Function): GuinessCompatibleSpy; - /** removes all recorded calls */ - reset(); -} - -export class SpyObject { - static stub(object = null, config = null, overrides = null) { - if (!(object instanceof SpyObject)) { - overrides = config; - config = object; - object = new SpyObject(); - } - - const m = {}; - Object.keys(config).forEach(key => (m[key] = config[key])); - Object.keys(overrides).forEach(key => (m[key] = overrides[key])); - Object.keys(m).forEach(key => { - object.spy(key).andReturn(m[key]); - }); - return object; - } - - constructor(type = null) { - if (type) { - Object.keys(type.prototype).forEach(prop => { - let m = null; - try { - m = type.prototype[prop]; - } catch (e) { - // As we are creating spys for abstract classes, - // these classes might have getters that throw when they are accessed. - // As we are only auto creating spys for methods, this - // should not matter. - } - if (typeof m === 'function') { - this.spy(prop); - } - }); - } - } - - spy(name) { - if (!this[name]) { - this[name] = this._createGuinnessCompatibleSpy(name); - } - return this[name]; - } - - prop(name, value) { - this[name] = value; - } - - /** @internal */ - _createGuinnessCompatibleSpy(name): GuinessCompatibleSpy { - const newSpy: GuinessCompatibleSpy = jasmine.createSpy(name); - newSpy.andCallFake = newSpy.and.callFake; - newSpy.andReturn = newSpy.and.returnValue; - newSpy.reset = newSpy.calls.reset; - // revisit return null here (previously needed for rtts_assert). - newSpy.and.returnValue(null); - return newSpy; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/test.module.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/test.module.ts deleted file mode 100644 index c66241f9bb..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/test.module.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { DatePipe } from '@angular/common'; -import { ActivatedRoute, Router } from '@angular/router'; -import { NgModule, ElementRef, Renderer } from '@angular/core'; -import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiDataUtils, JhiDateUtils, JhiEventManager, JhiAlertService, JhiParseLinks } from 'ng-jhipster'; - -import { AccountService, LoginModalService } from 'app/core'; -import { MockAccountService } from './helpers/mock-account.service'; -import { MockActivatedRoute, MockRouter } from './helpers/mock-route.service'; -import { MockActiveModal } from './helpers/mock-active-modal.service'; -import { MockEventManager } from './helpers/mock-event-manager.service'; - -@NgModule({ - providers: [ - DatePipe, - JhiDataUtils, - JhiDateUtils, - JhiParseLinks, - { - provide: JhiEventManager, - useClass: MockEventManager - }, - { - provide: NgbActiveModal, - useClass: MockActiveModal - }, - { - provide: ActivatedRoute, - useValue: new MockActivatedRoute({ id: 123 }) - }, - { - provide: Router, - useClass: MockRouter - }, - { - provide: AccountService, - useClass: MockAccountService - }, - { - provide: LoginModalService, - useValue: null - }, - { - provide: ElementRef, - useValue: null - }, - { - provide: Renderer, - useValue: null - }, - { - provide: JhiAlertService, - useValue: null - }, - { - provide: NgbModal, - useValue: null - } - ], - imports: [HttpClientTestingModule] -}) -export class BookstoreTestModule {} diff --git a/jhipster-5/bookstore-monolith/src/test/resources/config/application.yml b/jhipster-5/bookstore-monolith/src/test/resources/config/application.yml deleted file mode 100644 index 34c6ca3e15..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/config/application.yml +++ /dev/null @@ -1,105 +0,0 @@ -# =================================================================== -# Spring Boot configuration. -# -# This configuration is used for unit/integration tests. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - - -spring: - application: - name: Bookstore - datasource: - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:h2:mem:Bookstore;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE - name: - username: - password: - hikari: - auto-commit: false - jpa: - database-platform: io.github.jhipster.domain.util.FixedH2Dialect - database: H2 - open-in-view: false - show-sql: false - hibernate: - ddl-auto: none - naming: - physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy - implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy - properties: - hibernate.id.new_generator_mappings: true - hibernate.connection.provider_disables_autocommit: true - hibernate.cache.use_second_level_cache: false - hibernate.cache.use_query_cache: false - hibernate.generate_statistics: false - hibernate.hbm2ddl.auto: validate - hibernate.jdbc.time_zone: UTC - liquibase: - contexts: test - mail: - host: localhost - messages: - basename: i18n/messages - mvc: - favicon: - enabled: false - thymeleaf: - mode: HTML - - -server: - port: 10344 - address: localhost - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - async: - core-pool-size: 1 - max-pool-size: 50 - queue-capacity: 10000 - # To test logstash appender - logging: - logstash: - enabled: true - host: localhost - port: 5000 - queue-size: 512 - mail: - from: test@localhost - base-url: http://127.0.0.1:8080 - security: - authentication: - jwt: - # This token must be encoded using Base64 (you can type `echo 'secret-key'|base64` on your command line) - base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= - # Token is valid 24 hours - token-validity-in-seconds: 86400 - metrics: - logs: # Reports metrics in the logs - enabled: true - report-frequency: 60 # in seconds - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/test/resources/i18n/messages_en.properties b/jhipster-5/bookstore-monolith/src/test/resources/i18n/messages_en.properties deleted file mode 100644 index f19db8692f..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/i18n/messages_en.properties +++ /dev/null @@ -1 +0,0 @@ -email.test.title=test title diff --git a/jhipster-5/bookstore-monolith/src/test/resources/logback.xml b/jhipster-5/bookstore-monolith/src/test/resources/logback.xml deleted file mode 100644 index 6244807dfa..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/logback.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/test/resources/templates/mail/testEmail.html b/jhipster-5/bookstore-monolith/src/test/resources/templates/mail/testEmail.html deleted file mode 100644 index a4ca16a79f..0000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/templates/mail/testEmail.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/tsconfig-aot.json b/jhipster-5/bookstore-monolith/tsconfig-aot.json deleted file mode 100644 index 110cde9fd6..0000000000 --- a/jhipster-5/bookstore-monolith/tsconfig-aot.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "es2015", - "moduleResolution": "node", - "sourceMap": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "removeComments": false, - "noImplicitAny": false, - "suppressImplicitAnyIndexErrors": true, - "skipLibCheck": true, - "outDir": "target/www/app", - "lib": ["es7", "dom"], - "typeRoots": ["node_modules/@types"], - "baseUrl": "./", - "paths": { - "app/*": ["src/main/webapp/app/*"] - }, - "importHelpers": true - }, - "angularCompilerOptions": { - "genDir": "target/aot", - "skipMetadataEmit": true, - "fullTemplateTypeCheck": true, - "preserveWhitespaces": true - } -} diff --git a/jhipster-5/bookstore-monolith/tsconfig.json b/jhipster-5/bookstore-monolith/tsconfig.json deleted file mode 100644 index dd6343ab62..0000000000 --- a/jhipster-5/bookstore-monolith/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "removeComments": false, - "noImplicitAny": false, - "skipLibCheck": true, - "suppressImplicitAnyIndexErrors": true, - "outDir": "target/www/app", - "lib": ["es7", "dom"], - "typeRoots": ["node_modules/@types"], - "baseUrl": "./", - "paths": { - "app/*": ["src/main/webapp/app/*"] - }, - "importHelpers": true, - "allowJs": true - }, - "include": ["src/main/webapp/app", "src/test/javascript/"], - "exclude": ["node_modules"] -} diff --git a/jhipster-5/bookstore-monolith/tslint.json b/jhipster-5/bookstore-monolith/tslint.json deleted file mode 100644 index 3b8456d2fd..0000000000 --- a/jhipster-5/bookstore-monolith/tslint.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "rulesDirectory": ["node_modules/codelyzer"], - "extends": ["tslint-config-prettier"], - "rules": { - "class-name": true, - "comment-format": [true, "check-space"], - "curly": true, - "eofline": true, - "forin": true, - "indent": [true, "spaces"], - "label-position": true, - "member-access": false, - "member-ordering": [true, "static-before-instance", "variables-before-functions"], - "no-arg": true, - "no-bitwise": true, - "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": false, - "no-eval": true, - "no-inferrable-types": [true], - "no-shadowed-variable": true, - "no-string-literal": false, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [true, "check-open-brace", "check-catch", "check-else", "check-whitespace"], - "quotemark": [true, "single", "avoid-escape"], - "radix": true, - "semicolon": [true, "always", "ignore-bound-class-methods"], - "triple-equals": [true, "allow-null-check"], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "variable-name": false, - "whitespace": [true, "check-branch", "check-decl", "check-operator", "check-separator", "check-type"], - "prefer-const": true, - "arrow-parens": [true, "ban-single-arg-parens"], - "arrow-return-shorthand": [true], - "import-spacing": true, - "no-consecutive-blank-lines": [true], - "object-literal-shorthand": true, - "space-before-function-paren": [ - true, - { - "asyncArrow": "always", - "anonymous": "never", - "constructor": "never", - "method": "never", - "named": "never" - } - ], - - "directive-selector": [true, "attribute", "jhi", "camelCase"], - "component-selector": [true, "element", "jhi", "kebab-case"], - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": false, - "component-class-suffix": true, - "directive-class-suffix": true - } -} diff --git a/jhipster-5/bookstore-monolith/webpack/logo-jhipster.png b/jhipster-5/bookstore-monolith/webpack/logo-jhipster.png deleted file mode 100644 index d8eb48da05..0000000000 Binary files a/jhipster-5/bookstore-monolith/webpack/logo-jhipster.png and /dev/null differ diff --git a/jhipster-5/bookstore-monolith/webpack/utils.js b/jhipster-5/bookstore-monolith/webpack/utils.js deleted file mode 100644 index 2fce772341..0000000000 --- a/jhipster-5/bookstore-monolith/webpack/utils.js +++ /dev/null @@ -1,44 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -module.exports = { - parseVersion, - root, - isExternalLib -}; - -const parseString = require('xml2js').parseString; -// return the version number from `pom.xml` file -function parseVersion() { - let version = null; - const pomXml = fs.readFileSync('pom.xml', 'utf8'); - parseString(pomXml, (err, result) => { - if (err) { - throw new Error('Failed to parse pom.xml: ' + err); - } - if (result.project.version && result.project.version[0]) { - version = result.project.version[0]; - } else if (result.project.parent && result.project.parent[0] && result.project.parent[0].version && result.project.parent[0].version[0]) { - version = result.project.parent[0].version[0]; - } - }); - if (version === null) { - throw new Error('pom.xml is malformed. No version is defined'); - } - return version; -} - -const _root = path.resolve(__dirname, '..'); - -function root(args) { - args = Array.prototype.slice.call(arguments, 0); - return path.join.apply(path, [_root].concat(args)); -} - -function isExternalLib(module, check = /node_modules/) { - const req = module.userRequest; - if (typeof req !== 'string') { - return false; - } - return req.search(check) >= 0; -} diff --git a/jhipster-5/bookstore-monolith/webpack/webpack.common.js b/jhipster-5/bookstore-monolith/webpack/webpack.common.js deleted file mode 100644 index d8fd26c157..0000000000 --- a/jhipster-5/bookstore-monolith/webpack/webpack.common.js +++ /dev/null @@ -1,86 +0,0 @@ -const webpack = require('webpack'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const rxPaths = require('rxjs/_esm5/path-mapping'); - -const utils = require('./utils.js'); - -module.exports = (options) => ({ - resolve: { - extensions: ['.ts', '.js'], - modules: ['node_modules'], - alias: { - app: utils.root('src/main/webapp/app/'), - ...rxPaths() - } - }, - stats: { - children: false - }, - module: { - rules: [ - { - test: /\.html$/, - loader: 'html-loader', - options: { - minimize: true, - caseSensitive: true, - removeAttributeQuotes:false, - minifyJS:false, - minifyCSS:false - }, - exclude: /(src\/main\/webapp\/index.html)/ - }, - { - test: /\.(jpe?g|png|gif|svg|woff2?|ttf|eot)$/i, - loader: 'file-loader', - options: { - digest: 'hex', - hash: 'sha512', - name: 'content/[hash].[ext]' - } - }, - { - test: /manifest.webapp$/, - loader: 'file-loader', - options: { - name: 'manifest.webapp' - } - }, - // Ignore warnings about System.import in Angular - { test: /[\/\\]@angular[\/\\].+\.js$/, parser: { system: true } }, - ] - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: `'${options.env}'`, - BUILD_TIMESTAMP: `'${new Date().getTime()}'`, - VERSION: `'${utils.parseVersion()}'`, - DEBUG_INFO_ENABLED: options.env === 'development', - // The root URL for API calls, ending with a '/' - for example: `"https://www.jhipster.tech:8081/myservice/"`. - // If this URL is left empty (""), then it will be relative to the current context. - // If you use an API server, in `prod` mode, you will need to enable CORS - // (see the `jhipster.cors` common JHipster property in the `application-*.yml` configurations) - SERVER_API_URL: `''` - } - }), - new CopyWebpackPlugin([ - { from: './node_modules/swagger-ui/dist/css', to: 'swagger-ui/dist/css' }, - { from: './node_modules/swagger-ui/dist/lib', to: 'swagger-ui/dist/lib' }, - { from: './node_modules/swagger-ui/dist/swagger-ui.min.js', to: 'swagger-ui/dist/swagger-ui.min.js' }, - { from: './src/main/webapp/swagger-ui/', to: 'swagger-ui' }, - { from: './src/main/webapp/content/', to: 'content' }, - { from: './src/main/webapp/favicon.ico', to: 'favicon.ico' }, - { from: './src/main/webapp/manifest.webapp', to: 'manifest.webapp' }, - // jhipster-needle-add-assets-to-webpack - JHipster will add/remove third-party resources in this array - { from: './src/main/webapp/robots.txt', to: 'robots.txt' } - ]), - new HtmlWebpackPlugin({ - template: './src/main/webapp/index.html', - chunks: ['vendors', 'polyfills', 'main', 'global'], - chunksSortMode: 'manual', - inject: 'body' - }) - ] -}); diff --git a/jhipster-5/bookstore-monolith/webpack/webpack.dev.js b/jhipster-5/bookstore-monolith/webpack/webpack.dev.js deleted file mode 100644 index d05a7ddea8..0000000000 --- a/jhipster-5/bookstore-monolith/webpack/webpack.dev.js +++ /dev/null @@ -1,148 +0,0 @@ -const webpack = require('webpack'); -const writeFilePlugin = require('write-file-webpack-plugin'); -const webpackMerge = require('webpack-merge'); -const BrowserSyncPlugin = require('browser-sync-webpack-plugin'); -const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); -const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin'); -const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin'); -const WebpackNotifierPlugin = require('webpack-notifier'); -const path = require('path'); -const sass = require('sass'); - -const utils = require('./utils.js'); -const commonConfig = require('./webpack.common.js'); - -const ENV = 'development'; - -module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { - devtool: 'eval-source-map', - devServer: { - contentBase: './target/www', - proxy: [{ - context: [ - /* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */ - '/api', - '/management', - '/swagger-resources', - '/v2/api-docs', - '/h2-console', - '/auth' - ], - target: `http${options.tls ? 's' : ''}://127.0.0.1:8080`, - secure: false, - changeOrigin: options.tls, - headers: { host: 'localhost:9000' } - }], - stats: options.stats, - watchOptions: { - ignored: /node_modules/ - } - }, - entry: { - polyfills: './src/main/webapp/app/polyfills', - global: './src/main/webapp/content/scss/global.scss', - main: './src/main/webapp/app/app.main' - }, - output: { - path: utils.root('target/www'), - filename: 'app/[name].bundle.js', - chunkFilename: 'app/[id].chunk.js' - }, - module: { - rules: [{ - test: /\.ts$/, - enforce: 'pre', - loader: 'tslint-loader', - exclude: [/(node_modules)/, new RegExp('reflect-metadata\\' + path.sep + 'Reflect\\.ts')] - }, - { - test: /\.ts$/, - use: [ - 'angular2-template-loader', - { - loader: 'cache-loader', - options: { - cacheDirectory: path.resolve('target/cache-loader') - } - }, - { - loader: 'thread-loader', - options: { - // there should be 1 cpu for the fork-ts-checker-webpack-plugin - workers: require('os').cpus().length - 1 - } - }, - { - loader: 'ts-loader', - options: { - transpileOnly: true, - happyPackMode: true - } - }, - 'angular-router-loader' - ], - exclude: /(node_modules)/ - }, - { - test: /\.scss$/, - use: ['to-string-loader', 'css-loader', { - loader: 'sass-loader', - options: { implementation: sass } - }], - exclude: /(vendor\.scss|global\.scss)/ - }, - { - test: /(vendor\.scss|global\.scss)/, - use: ['style-loader', 'css-loader', 'postcss-loader', { - loader: 'sass-loader', - options: { implementation: sass } - }] - }, - { - test: /\.css$/, - use: ['to-string-loader', 'css-loader'], - exclude: /(vendor\.css|global\.css)/ - }, - { - test: /(vendor\.css|global\.css)/, - use: ['style-loader', 'css-loader'] - }] - }, - stats: process.env.JHI_DISABLE_WEBPACK_LOGS ? 'none' : options.stats, - plugins: [ - process.env.JHI_DISABLE_WEBPACK_LOGS - ? null - : new SimpleProgressWebpackPlugin({ - format: options.stats === 'minimal' ? 'compact' : 'expanded' - }), - new FriendlyErrorsWebpackPlugin(), - new ForkTsCheckerWebpackPlugin(), - new BrowserSyncPlugin({ - host: 'localhost', - port: 9000, - proxy: { - target: 'http://localhost:9060' - }, - socket: { - clients: { - heartbeatTimeout: 60000 - } - } - }, { - reload: false - }), - new webpack.ContextReplacementPlugin( - /angular(\\|\/)core(\\|\/)/, - path.resolve(__dirname, './src/main/webapp') - ), - new writeFilePlugin(), - new webpack.WatchIgnorePlugin([ - utils.root('src/test'), - ]), - new WebpackNotifierPlugin({ - title: 'JHipster', - contentImage: path.join(__dirname, 'logo-jhipster.png') - }) - ].filter(Boolean), - mode: 'development' -}); diff --git a/jhipster-5/bookstore-monolith/webpack/webpack.prod.js b/jhipster-5/bookstore-monolith/webpack/webpack.prod.js deleted file mode 100644 index ebafa2f631..0000000000 --- a/jhipster-5/bookstore-monolith/webpack/webpack.prod.js +++ /dev/null @@ -1,144 +0,0 @@ -const webpack = require('webpack'); -const webpackMerge = require('webpack-merge'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); -const Visualizer = require('webpack-visualizer-plugin'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const TerserPlugin = require('terser-webpack-plugin'); -const WorkboxPlugin = require('workbox-webpack-plugin'); -const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin; -const path = require('path'); - -const utils = require('./utils.js'); -const commonConfig = require('./webpack.common.js'); - -const ENV = 'production'; -const sass = require('sass'); - -module.exports = webpackMerge(commonConfig({ env: ENV }), { - // Enable source maps. Please note that this will slow down the build. - // You have to enable it in UglifyJSPlugin config below and in tsconfig-aot.json as well - // devtool: 'source-map', - entry: { - polyfills: './src/main/webapp/app/polyfills', - global: './src/main/webapp/content/scss/global.scss', - main: './src/main/webapp/app/app.main' - }, - output: { - path: utils.root('target/www'), - filename: 'app/[name].[hash].bundle.js', - chunkFilename: 'app/[id].[hash].chunk.js' - }, - module: { - rules: [{ - test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/, - loader: '@ngtools/webpack' - }, - { - test: /\.scss$/, - use: ['to-string-loader', 'css-loader', { - loader: 'sass-loader', - options: { implementation: sass } - }], - exclude: /(vendor\.scss|global\.scss)/ - }, - { - test: /(vendor\.scss|global\.scss)/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - 'postcss-loader', - { - loader: 'sass-loader', - options: { implementation: sass } - } - ] - }, - { - test: /\.css$/, - use: ['to-string-loader', 'css-loader'], - exclude: /(vendor\.css|global\.css)/ - }, - { - test: /(vendor\.css|global\.css)/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - 'postcss-loader' - ] - }] - }, - optimization: { - runtimeChunk: false, - splitChunks: { - cacheGroups: { - commons: { - test: /[\\/]node_modules[\\/]/, - name: 'vendors', - chunks: 'all' - } - } - }, - minimizer: [ - new TerserPlugin({ - parallel: true, - cache: true, - terserOptions: { - ie8: false, - // sourceMap: true, // Enable source maps. Please note that this will slow down the build - compress: { - dead_code: true, - warnings: false, - properties: true, - drop_debugger: true, - conditionals: true, - booleans: true, - loops: true, - unused: true, - toplevel: true, - if_return: true, - inline: true, - join_vars: true - }, - output: { - comments: false, - beautify: false, - indent_level: 2 - } - } - }), - new OptimizeCSSAssetsPlugin({}) - ] - }, - plugins: [ - new MiniCssExtractPlugin({ - // Options similar to the same options in webpackOptions.output - // both options are optional - filename: '[name].[contenthash].css', - chunkFilename: '[id].css' - }), - new MomentLocalesPlugin({ - localesToKeep: [ - // jhipster-needle-i18n-language-moment-webpack - JHipster will add/remove languages in this array - ] - }), - new Visualizer({ - // Webpack statistics in target folder - filename: '../stats.html' - }), - new AngularCompilerPlugin({ - mainPath: utils.root('src/main/webapp/app/app.main.ts'), - tsConfigPath: utils.root('tsconfig-aot.json'), - sourceMap: true - }), - new webpack.LoaderOptionsPlugin({ - minimize: true, - debug: false - }), - new WorkboxPlugin.GenerateSW({ - clientsClaim: true, - skipWaiting: true, - }) - ], - mode: 'production' -}); diff --git a/jhipster-5/pom.xml b/jhipster-5/pom.xml deleted file mode 100644 index 2a5132e50e..0000000000 --- a/jhipster-5/pom.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - 4.0.0 - com.baeldung.jhipster - jhipster-5 - 1.0.0-SNAPSHOT - jhipster-5 - pom - - - parent-boot-2 - com.baeldung - 0.0.1-SNAPSHOT - ../parent-boot-2 - - - - bookstore-monolith - - - diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml index daa01108f6..5e06a5550e 100644 --- a/libraries-3/pom.xml +++ b/libraries-3/pom.xml @@ -122,6 +122,11 @@ ${mutabilitydetector.version} test + + javax.annotation + javax.annotation-api + 1.3.2 + @@ -161,42 +166,10 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5 - javac-with-errorprone - true - 1.8 - 1.8 - true - - - com.uber.nullaway - nullaway - 0.3.0 - - - - - - - -XepExcludedPaths:(.*)/test/.*|(.*)/jcabi/.* - -XepOpt:NullAway:AnnotatedPackages=com.baeldung.nullaway - + 11 + 11 - - - org.codehaus.plexus - plexus-compiler-javac-errorprone - 2.8 - - - - - com.google.errorprone - error_prone_core - 2.3.4 - - diff --git a/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java b/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java index 222cbfd8ef..b9164ed92b 100644 --- a/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java +++ b/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java @@ -1,5 +1,6 @@ package com.baeldung.immutable; +import org.junit.Ignore; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -7,6 +8,12 @@ import static org.mutabilitydetector.unittesting.MutabilityAssert.assertImmutabl public class ImmutablePersonUnitTest { + /** + * commenting the test case, As after upgrading to java 11 + * assertImmutable is giving exception. Raised the issue to Mutability support team + * https://github.com/MutabilityDetector/MutabilityDetector/issues/196 + */ + @Ignore @Test public void whenModifying_shouldCreateNewInstance() throws Exception { final ImmutablePerson john = ImmutablePerson.builder() diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml index 234fa1349e..139edab34f 100644 --- a/libraries-6/pom.xml +++ b/libraries-6/pom.xml @@ -63,6 +63,11 @@ commons-collections4 ${commons-collections4.version} + + com.google.guava + guava + ${guava.version} + commons-net commons-net diff --git a/libraries-files/pom.xml b/libraries-files/pom.xml index b36dc150a8..e4b3ffcdb2 100644 --- a/libraries-files/pom.xml +++ b/libraries-files/pom.xml @@ -38,22 +38,24 @@ ${jackson.version} - com.itextpdf - itext7-core - 7.2.4 - pom + com.itextpdf + itext7-core + ${itext7-core.version} + pom - - org.assertj - assertj-core - 3.23.1 - test + + org.assertj + assertj-core + ${assertj-core.version} + test 0.5.4 2.8.0 + 7.2.4 + 3.23.1 \ No newline at end of file diff --git a/libraries-http/pom.xml b/libraries-http/pom.xml index 0077a5047e..18ba571f60 100644 --- a/libraries-http/pom.xml +++ b/libraries-http/pom.xml @@ -52,11 +52,6 @@ async-http-client ${async.http.client.version} - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - com.google.code.gson gson diff --git a/libraries-primitive/pom.xml b/libraries-primitive/pom.xml index badcfc443d..114ec64848 100644 --- a/libraries-primitive/pom.xml +++ b/libraries-primitive/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 libraries-primitive 1.0-SNAPSHOT libraries-primitive diff --git a/linux-bash/command-line-arguments/src/main/bash/README.md b/linux-bash-modules/command-line-arguments/src/main/bash/README.md similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/README.md rename to linux-bash-modules/command-line-arguments/src/main/bash/README.md diff --git a/linux-bash/command-line-arguments/src/main/bash/userReg-flags.sh b/linux-bash-modules/command-line-arguments/src/main/bash/userReg-flags.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/userReg-flags.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/userReg-flags.sh diff --git a/linux-bash/command-line-arguments/src/main/bash/userReg-positional-parameter.sh b/linux-bash-modules/command-line-arguments/src/main/bash/userReg-positional-parameter.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/userReg-positional-parameter.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/userReg-positional-parameter.sh diff --git a/linux-bash/command-line-arguments/src/main/bash/users-loop.sh b/linux-bash-modules/command-line-arguments/src/main/bash/users-loop.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/users-loop.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/users-loop.sh diff --git a/linux-bash/command-line-arguments/src/main/bash/users-shift-operator.sh b/linux-bash-modules/command-line-arguments/src/main/bash/users-shift-operator.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/users-shift-operator.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/users-shift-operator.sh diff --git a/linux-bash/functions/src/main/bash/README.md b/linux-bash-modules/functions/src/main/bash/README.md similarity index 100% rename from linux-bash/functions/src/main/bash/README.md rename to linux-bash-modules/functions/src/main/bash/README.md diff --git a/linux-bash/functions/src/main/bash/functions.sh b/linux-bash-modules/functions/src/main/bash/functions.sh similarity index 100% rename from linux-bash/functions/src/main/bash/functions.sh rename to linux-bash-modules/functions/src/main/bash/functions.sh diff --git a/linux-bash/functions/src/main/bash/infile b/linux-bash-modules/functions/src/main/bash/infile similarity index 100% rename from linux-bash/functions/src/main/bash/infile rename to linux-bash-modules/functions/src/main/bash/infile diff --git a/linux-bash/json/README.md b/linux-bash-modules/json/README.md similarity index 100% rename from linux-bash/json/README.md rename to linux-bash-modules/json/README.md diff --git a/linux-bash/json/src/main/bash/fruit.json b/linux-bash-modules/json/src/main/bash/fruit.json similarity index 100% rename from linux-bash/json/src/main/bash/fruit.json rename to linux-bash-modules/json/src/main/bash/fruit.json diff --git a/linux-bash/json/src/main/bash/fruits.json b/linux-bash-modules/json/src/main/bash/fruits.json similarity index 100% rename from linux-bash/json/src/main/bash/fruits.json rename to linux-bash-modules/json/src/main/bash/fruits.json diff --git a/linux-bash/json/src/main/bash/jq.sh b/linux-bash-modules/json/src/main/bash/jq.sh similarity index 100% rename from linux-bash/json/src/main/bash/jq.sh rename to linux-bash-modules/json/src/main/bash/jq.sh diff --git a/linux-bash/json/src/main/bash/wikipedia.json b/linux-bash-modules/json/src/main/bash/wikipedia.json similarity index 100% rename from linux-bash/json/src/main/bash/wikipedia.json rename to linux-bash-modules/json/src/main/bash/wikipedia.json diff --git a/linux-bash/loops/README.md b/linux-bash-modules/loops/README.md similarity index 100% rename from linux-bash/loops/README.md rename to linux-bash-modules/loops/README.md diff --git a/linux-bash/loops/src/main/bash/find_directories.sh b/linux-bash-modules/loops/src/main/bash/find_directories.sh similarity index 100% rename from linux-bash/loops/src/main/bash/find_directories.sh rename to linux-bash-modules/loops/src/main/bash/find_directories.sh diff --git a/linux-bash/loops/src/main/bash/loop_directories.sh b/linux-bash-modules/loops/src/main/bash/loop_directories.sh similarity index 100% rename from linux-bash/loops/src/main/bash/loop_directories.sh rename to linux-bash-modules/loops/src/main/bash/loop_directories.sh diff --git a/linux-bash/read/README.md b/linux-bash-modules/read/README.md similarity index 100% rename from linux-bash/read/README.md rename to linux-bash-modules/read/README.md diff --git a/linux-bash/read/src/main/bash/file.csv b/linux-bash-modules/read/src/main/bash/file.csv similarity index 100% rename from linux-bash/read/src/main/bash/file.csv rename to linux-bash-modules/read/src/main/bash/file.csv diff --git a/linux-bash/read/src/main/bash/read_inputs.sh b/linux-bash-modules/read/src/main/bash/read_inputs.sh similarity index 100% rename from linux-bash/read/src/main/bash/read_inputs.sh rename to linux-bash-modules/read/src/main/bash/read_inputs.sh diff --git a/linux-bash/text/README.md b/linux-bash-modules/text/README.md similarity index 100% rename from linux-bash/text/README.md rename to linux-bash-modules/text/README.md diff --git a/linux-bash/text/src/main/bash/append_multiple_lines.sh b/linux-bash-modules/text/src/main/bash/append_multiple_lines.sh similarity index 100% rename from linux-bash/text/src/main/bash/append_multiple_lines.sh rename to linux-bash-modules/text/src/main/bash/append_multiple_lines.sh diff --git a/linux-bash/text/src/main/bash/remove_characters.sh b/linux-bash-modules/text/src/main/bash/remove_characters.sh similarity index 100% rename from linux-bash/text/src/main/bash/remove_characters.sh rename to linux-bash-modules/text/src/main/bash/remove_characters.sh diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml index 9fa58769b2..da2984442c 100644 --- a/logging-modules/log4j2/pom.xml +++ b/logging-modules/log4j2/pom.xml @@ -63,7 +63,6 @@ org.apache.maven.plugins maven-compiler-plugin - ${maven-compiler-plugin.version} none diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java index b7ecd95fa8..f436ef81dd 100644 --- a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java @@ -1,7 +1,6 @@ package com.baeldung.lombok.valvar; import lombok.val; -import lombok.var; import java.util.ArrayList; import java.util.HashMap; diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java index 6fabf66590..138264db09 100644 --- a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java @@ -1,6 +1,5 @@ package com.baeldung.lombok.valvar; -import lombok.var; import java.util.ArrayList; import java.util.Arrays; diff --git a/lombok-modules/lombok-custom/pom.xml b/lombok-modules/lombok-custom/pom.xml index c119900c8a..1f7f630772 100644 --- a/lombok-modules/lombok-custom/pom.xml +++ b/lombok-modules/lombok-custom/pom.xml @@ -53,11 +53,27 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + 1.14.8 1.8 3.3.0-v_771 + 1.8 + 1.8 \ No newline at end of file diff --git a/lombok-modules/lombok/pom.xml b/lombok-modules/lombok/pom.xml index 1be22f0bc2..57b2a5a999 100644 --- a/lombok-modules/lombok/pom.xml +++ b/lombok-modules/lombok/pom.xml @@ -40,41 +40,19 @@ true - - - org.projectlombok - lombok-maven-plugin - ${delombok-maven-plugin.version} - - - delombok - generate-sources - - delombok - - - ${project.basedir}/src/main/java - ${project.build.directory}/delombok - false - - skip - - false - - - - - - - - - + edge-SNAPSHOT 1.0.0.Final 1.18.20.0 23.0.0 + + + projectlombok.org + https://projectlombok.org/edge-releases + + \ No newline at end of file diff --git a/lombok-modules/pom.xml b/lombok-modules/pom.xml index 7ca303af9d..f2bfdb51c0 100644 --- a/lombok-modules/pom.xml +++ b/lombok-modules/pom.xml @@ -18,10 +18,21 @@ lombok lombok-2 - lombok-custom + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + @@ -32,4 +43,9 @@ + + 11 + 11 + + \ No newline at end of file diff --git a/maven-modules/version-collision/dependencyconvergence.xml b/maven-modules/version-collision/dependencyconvergence.xml new file mode 100644 index 0000000000..8f57cbf1d5 --- /dev/null +++ b/maven-modules/version-collision/dependencyconvergence.xml @@ -0,0 +1,22 @@ + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.3.0 + + + enforce + + + + + + + enforce + + + + + + \ No newline at end of file diff --git a/maven-modules/version-collision/dependencyconvergence_exclude_scenario.xml b/maven-modules/version-collision/dependencyconvergence_exclude_scenario.xml new file mode 100644 index 0000000000..32b0462a11 --- /dev/null +++ b/maven-modules/version-collision/dependencyconvergence_exclude_scenario.xml @@ -0,0 +1,26 @@ + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.3.0 + + + enforce + + + + + com.google.guava:guava + + + + + + enforce + + + + + + \ No newline at end of file diff --git a/maven-modules/version-collision/dependencyconvergence_include_scenario.xml b/maven-modules/version-collision/dependencyconvergence_include_scenario.xml new file mode 100644 index 0000000000..9e4680fc91 --- /dev/null +++ b/maven-modules/version-collision/dependencyconvergence_include_scenario.xml @@ -0,0 +1,26 @@ + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.3.0 + + + enforce + + + + + com.google.guava:guava + + + + + + enforce + + + + + + \ No newline at end of file diff --git a/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationIntegrationTest.java b/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationManualTest.java similarity index 78% rename from persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationIntegrationTest.java rename to persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationManualTest.java index 4282da3de4..780a0fd77e 100644 --- a/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationIntegrationTest.java +++ b/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationManualTest.java @@ -3,8 +3,6 @@ package com.baeldung.hibernate.keywords; import static java.util.UUID.randomUUID; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import javax.persistence.PersistenceException; - import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; @@ -13,7 +11,17 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class HibernateKeywordsApplicationIntegrationTest { +import jakarta.persistence.PersistenceException; + +/** + * This test suite uses testcontainers library and therefore + * requires Docker installed on the local system to be able to run it. + * + * When docker is available on the local machine it can be run either by: + * - running it from your favorite IDE + * - or through `mvn test -Dtest=HibernateKeywordsApplicationManualTest` + */ +public class HibernateKeywordsApplicationManualTest { private static SessionFactory sessionFactory; private Session session; diff --git a/pom.xml b/pom.xml index 1cc5f92cf8..428aa1d268 100644 --- a/pom.xml +++ b/pom.xml @@ -330,8 +330,8 @@ parent-spring-5 parent-java - checker-plugin - + checker-framework + core-java-modules/core-java core-java-modules/core-java-8 @@ -357,13 +357,12 @@ java-jdi jetbrains - jhipster-5 language-interop - libraries-3 + libraries-jdk8 - lombok-modules + lombok-modules/lombok-custom muleesb @@ -488,10 +487,7 @@ jenkins-modules jhipster-modules - jhipster-5 jws - - libraries-6 @@ -527,8 +523,8 @@ parent-spring-5 parent-java - checker-plugin - + checker-framework + core-java-modules/core-java core-java-modules/core-java-8 @@ -553,13 +549,12 @@ java-jdi - jhipster-5 language-interop - libraries-3 + libraries-jdk8 - lombok-modules + lombok-modules/lombok-custom muleesb web-modules @@ -666,10 +661,7 @@ jenkins-modules jhipster-modules - jhipster-5 jws - - libraries-6 @@ -735,6 +727,7 @@ + lombok-modules osgi spring-katharsis logging-modules @@ -861,7 +854,7 @@ axon bazel - code-generation + google-auto-project ddd discord4j disruptor @@ -894,6 +887,7 @@ libraries-2 libraries-4 libraries-5 + libraries-6 libraries-apache-commons libraries-apache-commons-collections @@ -953,6 +947,7 @@ persistence-modules/questdb vaadin + libraries-3 @@ -986,6 +981,7 @@ + lombok-modules osgi spring-katharsis logging-modules @@ -1111,7 +1107,7 @@ axon bazel - code-generation + google-auto-project ddd discord4j disruptor @@ -1143,8 +1139,10 @@ ksqldb libraries + libraries-2 libraries-4 libraries-5 + libraries-6 libraries-apache-commons libraries-apache-commons-collections libraries-apache-commons-io @@ -1198,11 +1196,12 @@ xstream webrtc persistence-modules/java-mongodb - libraries-2 + messaging-modules persistence-modules/questdb vaadin + libraries-3 diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index 83b935f845..1de19fc867 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -63,10 +63,6 @@ spring-boot-nashorn spring-boot-parent spring-boot-performance - spring-boot-properties - spring-boot-properties-2 - spring-boot-properties-3 - spring-boot-properties-migrator-demo spring-boot-property-exp spring-boot-request-params spring-boot-runtime @@ -94,6 +90,10 @@ spring-boot-3-observation spring-boot-3-test-pitfalls spring-boot-resilience4j + spring-boot-properties + spring-boot-properties-2 + spring-boot-properties-3 + spring-boot-properties-migrator-demo diff --git a/spring-boot-modules/spring-boot-data-3/pom.xml b/spring-boot-modules/spring-boot-data-3/pom.xml index cf53c25697..4903d2ea26 100644 --- a/spring-boot-modules/spring-boot-data-3/pom.xml +++ b/spring-boot-modules/spring-boot-data-3/pom.xml @@ -25,15 +25,29 @@ spring-boot-starter-data-jpa - com.mysql - mysql-connector-j + com.amazonaws.secretsmanager + aws-secretsmanager-jdbc + ${aws.secrets.manager.jdbc} + + + mysql + mysql-connector-java runtime + + com.h2database + h2 + org.springframework.boot spring-boot-starter-test test + + io.awspring.cloud + spring-cloud-starter-aws-secrets-manager-config + ${aws.secrets.manager.config} + @@ -45,4 +59,9 @@ + + 2.4.4 + 1.0.11 + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/NoPropertyFoundApplication.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/NoPropertyFoundApplication.java new file mode 100644 index 0000000000..276df9535b --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/NoPropertyFoundApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.nopropertyfound; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class NoPropertyFoundApplication { + + public static void main(String[] args) { + SpringApplication.run(NoPropertyFoundApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/config/DbConfig.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/config/DbConfig.java new file mode 100644 index 0000000000..9a589e55a3 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/config/DbConfig.java @@ -0,0 +1,20 @@ +package com.baeldung.nopropertyfound.config; + +import javax.sql.DataSource; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class DbConfig { + + @Bean + @ConfigurationProperties(prefix = "h2.datasource") + public DataSource dataSource() { + return DataSourceBuilder.create() + .build(); + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/model/Person.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/model/Person.java new file mode 100644 index 0000000000..3392d3ec67 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/model/Person.java @@ -0,0 +1,41 @@ +package com.baeldung.nopropertyfound.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Person { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private String firstName; + private String lastName; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/repository/PersonRepository.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/repository/PersonRepository.java new file mode 100644 index 0000000000..900c391c93 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/repository/PersonRepository.java @@ -0,0 +1,15 @@ +package com.baeldung.nopropertyfound.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.nopropertyfound.model.Person; + +@Repository +public interface PersonRepository extends JpaRepository { + + // findByFirsttName will cause Spring Data to throw PropertyReferenceException + // Person findByFirsttName(String firstName); + Person findByFirstName(String firstName); + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/StartWithAWSSecretsManagerApplication.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/StartWithAWSSecretsManagerApplication.java new file mode 100644 index 0000000000..0bcbef7729 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/StartWithAWSSecretsManagerApplication.java @@ -0,0 +1,29 @@ +package com.baeldung.startdbwithawssecretsmanager; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Profile; + +import javax.annotation.PostConstruct; + +@SpringBootApplication +@Profile("aws") +public class StartWithAWSSecretsManagerApplication { + @Value("${api-key1}") + private String apiKeyValue1; + + @Value("${api-key2}") + private String apiKeyValue2; + + @PostConstruct + private void postConstruct() { + System.out.println(apiKeyValue1); + System.out.println(apiKeyValue2); + } + + public static void main(String[] args) { + SpringApplication.run(StartWithAWSSecretsManagerApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/controller/UserController.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/controller/UserController.java new file mode 100644 index 0000000000..08745db3f0 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/controller/UserController.java @@ -0,0 +1,38 @@ +package com.baeldung.startdbwithawssecretsmanager.controller; + +import com.baeldung.startdbwithawssecretsmanager.model.UserEntity; +import com.baeldung.startdbwithawssecretsmanager.repository.UserRepository; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("users") +public class UserController { + + private final UserRepository userRepository; + + public UserController(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @GetMapping(value = "/{id}", produces = "application/json") + public @ResponseBody UserEntity getUser(@PathVariable Long id) { + return userRepository.findById(id).get(); + } + + @PostMapping + public UserEntity createUser(@RequestBody UserEntity userEntity) { + return userRepository.save(userEntity); + } + + @DeleteMapping(value = "/{id}") + public void removeUser(@PathVariable Long id) { + userRepository.deleteById(id); + } +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/model/UserEntity.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/model/UserEntity.java new file mode 100644 index 0000000000..285e7094dd --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/model/UserEntity.java @@ -0,0 +1,40 @@ +package com.baeldung.startdbwithawssecretsmanager.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class UserEntity { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + + public UserEntity() { + } + + public UserEntity(Long id, String name) { + this.id = id; + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/repository/UserRepository.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/repository/UserRepository.java new file mode 100644 index 0000000000..e2abfe88e6 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/repository/UserRepository.java @@ -0,0 +1,10 @@ +package com.baeldung.startdbwithawssecretsmanager.repository; + +import com.baeldung.startdbwithawssecretsmanager.model.UserEntity; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository + extends CrudRepository { +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/application-aws.properties b/spring-boot-modules/spring-boot-data-3/src/main/resources/application-aws.properties new file mode 100644 index 0000000000..07c4b0a4d6 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/application-aws.properties @@ -0,0 +1,9 @@ +spring.datasource.driver-class-name=com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver +spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect +spring.datasource.url=jdbc-secretsmanager:mysql://database-1.cwhqvgjbpgfw.eu-central-1.rds.amazonaws.com:3306/test +spring.datasource.username=rds/credentials + +#Overwriting application.properties configuration back to default. +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=true + +spring.config.import=aws-secretsmanager:test/secret/ diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties b/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties index cbe044134f..71f39e0ee3 100644 --- a/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties @@ -4,4 +4,9 @@ spring.datasource.username=root spring.datasource.password=root spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.ddl-auto=none -spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false \ No newline at end of file +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false + +h2.datasource.url=jdbc:h2:mem:testdb +h2.datasource.driver-class-name=org.h2.Driver +h2.datasource.username=sa +h2.datasource.password= diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/data.sql b/spring-boot-modules/spring-boot-data-3/src/main/resources/data.sql new file mode 100644 index 0000000000..5623bbfadf --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/data.sql @@ -0,0 +1,3 @@ +INSERT INTO person (first_name, last_name) VALUES('Azhrioun', 'Abderrahim'); +INSERT INTO person (first_name, last_name) VALUES('Brian', 'Wheeler'); +INSERT INTO person (first_name, last_name) VALUES('Dave', 'Anderson'); \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/schema.sql b/spring-boot-modules/spring-boot-data-3/src/main/resources/schema.sql new file mode 100644 index 0000000000..738ef25298 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/schema.sql @@ -0,0 +1,6 @@ +DROP TABLE IF EXISTS person; +CREATE TABLE person( + id INT AUTO_INCREMENT PRIMARY KEY, + first_name VARCHAR(200), + last_name VARCHAR(200) +) \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-data-3/src/test/java/com/baeldung/nopropertyfound/PersonRepositoryIntegrationTest.java b/spring-boot-modules/spring-boot-data-3/src/test/java/com/baeldung/nopropertyfound/PersonRepositoryIntegrationTest.java new file mode 100644 index 0000000000..2a9d1a46f2 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/test/java/com/baeldung/nopropertyfound/PersonRepositoryIntegrationTest.java @@ -0,0 +1,28 @@ +package com.baeldung.nopropertyfound; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +import com.baeldung.nopropertyfound.model.Person; +import com.baeldung.nopropertyfound.repository.PersonRepository; + +@DataJpaTest +class PersonRepositoryIntegrationTest { + + @Autowired + private PersonRepository personRepository; + + @Test + void givenQueryMethod_whenUsingValidProperty_thenCorrect() { + + Person person = personRepository.findByFirstName("Azhrioun"); + + assertNotNull(person); + assertEquals("Abderrahim", person.getLastName()); + } + +} diff --git a/spring-boot-modules/spring-boot-properties-2/pom.xml b/spring-boot-modules/spring-boot-properties-2/pom.xml index 442cb24c7a..4b1daca34d 100644 --- a/spring-boot-modules/spring-boot-properties-2/pom.xml +++ b/spring-boot-modules/spring-boot-properties-2/pom.xml @@ -10,9 +10,10 @@ Spring Boot Properties Module - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -24,6 +25,15 @@ org.springframework.boot spring-boot-starter-web + + commons-lang + commons-lang + 2.6 + + + com.baeldung.properties.yaml.YamlApplication + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java index 67547199a6..282ce4658e 100644 --- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java +++ b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java @@ -7,11 +7,12 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; -import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.List; import java.util.Map; +import jakarta.annotation.PostConstruct; + @Configuration @PropertySource(name = "myProperties", value = "values.properties") public class ValuesApp { diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java index 2a2b535be7..f1720d2fb3 100644 --- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java +++ b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java @@ -1,6 +1,6 @@ package com.baeldung.properties.value.defaults; -import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang.ArrayUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -8,10 +8,11 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.util.Assert; -import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.List; +import jakarta.annotation.PostConstruct; + /** * Demonstrates setting defaults for @Value annotation. Note that there are no properties * defined in the specified property source. We also assume that the user here @@ -60,10 +61,10 @@ public class ValuesWithDefaultsApp { // arrays List stringListValues = Arrays.asList("one", "two", "three"); - Assert.isTrue(Arrays.asList(stringArrayWithDefaults).containsAll(stringListValues), "unexpected value for stringArrayWithDefaults"); + Assert.isTrue(Arrays.asList(stringArrayWithDefaults).containsAll(stringListValues), "unexpected value for stringArrayWithDefaults"); List intListValues = Arrays.asList(1, 2, 3); - Assert.isTrue(Arrays.asList(ArrayUtils.toObject(intArrayWithDefaults)).containsAll(intListValues), "unexpected value for intArrayWithDefaults"); + Assert.isTrue(Arrays.asList(ArrayUtils.toObject(intArrayWithDefaults)).containsAll(intListValues), "unexpected value for intArrayWithDefaults"); // SpEL Assert.isTrue(spelWithDefaultValue.equals("my default system property value"), "unexpected value for spelWithDefaultValue"); diff --git a/spring-boot-modules/spring-boot-properties-3/pom.xml b/spring-boot-modules/spring-boot-properties-3/pom.xml index 3de85c7175..ed6e08add0 100644 --- a/spring-boot-modules/spring-boot-properties-3/pom.xml +++ b/spring-boot-modules/spring-boot-properties-3/pom.xml @@ -9,9 +9,10 @@ Spring Boot Properties Module - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -31,7 +32,6 @@ org.springframework.boot spring-boot-starter-web - RELEASE @@ -44,4 +44,8 @@ + + com.baeldung.boot.properties.DemoApplication + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java index 321593b31b..26f6867296 100644 --- a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; @Component public class EnvironmentPropertiesPrinter { diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlApplication.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlApplication.java new file mode 100644 index 0000000000..9dc754b24b --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlApplication.java @@ -0,0 +1,27 @@ +package com.baeldung.properties.multipleyaml; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MultipleYamlApplication implements CommandLineRunner { + + @Autowired + private MultipleYamlConfiguration config; + + public static void main(String[] args) { + SpringApplication springApp = new SpringApplication(MultipleYamlApplication.class); + + // Code from first example, uncomment to use multiple profiles + // springApp.setAdditionalProfiles("students", "teachers"); + + springApp.run(args); + } + + public void run(String... args) throws Exception { + System.out.println("Students: " + config.getStudents()); + System.out.println("Teachers: " + config.getTeachers()); + } +} diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlConfiguration.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlConfiguration.java new file mode 100644 index 0000000000..c46a321e24 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlConfiguration.java @@ -0,0 +1,35 @@ +package com.baeldung.properties.multipleyaml; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; + +import java.util.List; + +@Configuration +@ConfigurationProperties +@PropertySources({ + @PropertySource(value = "classpath:application-teachers.yml", factory = MultipleYamlPropertySourceFactory.class), + @PropertySource(value = "classpath:application-students.yml", factory = MultipleYamlPropertySourceFactory.class)}) +public class MultipleYamlConfiguration { + + List teachers; + List students; + + public void setTeachers(List teachers) { + this.teachers = teachers; + } + + public void setStudents(List students) { + this.students = students; + } + + public List getTeachers() { + return teachers; + } + + public List getStudents() { + return students; + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlPropertySourceFactory.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlPropertySourceFactory.java new file mode 100644 index 0000000000..c09bd3c8b9 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlPropertySourceFactory.java @@ -0,0 +1,23 @@ +package com.baeldung.properties.multipleyaml; + +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.core.env.PropertySource; +import org.springframework.core.io.support.EncodedResource; +import org.springframework.core.io.support.PropertySourceFactory; + +import java.io.IOException; +import java.util.Properties; + +public class MultipleYamlPropertySourceFactory implements PropertySourceFactory { + + @Override + public PropertySource createPropertySource(String name, EncodedResource encodedResource) throws IOException { + YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); + factory.setResources(encodedResource.getResource()); + + Properties properties = factory.getObject(); + + return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties); + } +} diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-students.yml b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-students.yml new file mode 100644 index 0000000000..f4aaf8ae4d --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-students.yml @@ -0,0 +1,3 @@ +students: + - Jane + - Michael \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-teachers.yml b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-teachers.yml new file mode 100644 index 0000000000..f0d2080164 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-teachers.yml @@ -0,0 +1,3 @@ +teachers: + - Margo + - Javier \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml index 2e28da5ad3..2c44065028 100644 --- a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml +++ b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml @@ -2,6 +2,10 @@ bael: root-level-property: defaultRootLevelValue spring: profiles: +# Multiple profiles for MultipleYamlApplication first example +# include: +# - teachers +# - students group: multidocument-integration: multidocument-integration-extension --- diff --git a/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml b/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml index 95dc06b155..21ed0f59f4 100644 --- a/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml +++ b/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml @@ -7,10 +7,10 @@ 1.0-SNAPSHOT - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT - ../pom.xml + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -49,8 +49,8 @@ - 8 - 8 + 17 + 17 \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties/pom.xml b/spring-boot-modules/spring-boot-properties/pom.xml index 0d076581b7..4ad5aeed1d 100644 --- a/spring-boot-modules/spring-boot-properties/pom.xml +++ b/spring-boot-modules/spring-boot-properties/pom.xml @@ -10,9 +10,10 @@ Spring Boot Properties Module - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -141,7 +142,7 @@ - 2021.0.3 + 2022.0.1 1.10 @ diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java index 47df784885..faf5678398 100644 --- a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java +++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java @@ -3,10 +3,10 @@ package com.baeldung.configurationproperties; import java.util.List; import java.util.Map; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Pattern; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java index a58e4143e5..72c45afbb2 100644 --- a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java +++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java @@ -1,10 +1,8 @@ package com.baeldung.configurationproperties; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.ConstructorBinding; @ConfigurationProperties(prefix = "mail.credentials") -@ConstructorBinding public class ImmutableCredentials { private final String authMethod; diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java index 2cb27e1844..9ed27f412c 100644 --- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java @@ -4,12 +4,9 @@ import static org.junit.Assert.assertThat; import org.hamcrest.Matchers; import org.junit.jupiter.api.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; -@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) class BuildInfoServiceIntegrationTest { diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java index cf9b9336e6..bb8ec78cc1 100644 --- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java @@ -17,7 +17,7 @@ public class BuildPropertiesUnitTest { @Test void givenBuildPropertiesBean_WhenFetchDefaultBuildProperties_ThenGetValidValues() { Assertions.assertEquals("spring-boot-properties", buildProperties.getArtifact()); - Assertions.assertEquals("com.baeldung.spring-boot-modules", buildProperties.getGroup()); + Assertions.assertEquals("com.baeldung", buildProperties.getGroup()); Assertions.assertEquals("0.0.1-SNAPSHOT", buildProperties.getVersion()); } diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java index 88e22af4ba..ecb547a0a0 100644 --- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java @@ -1,28 +1,27 @@ package com.baeldung.properties.reloading; +import static org.junit.jupiter.api.Assertions.assertEquals; + import com.baeldung.properties.reloading.beans.ConfigurationPropertiesRefreshConfigBean; import com.baeldung.properties.reloading.beans.EnvironmentConfigBean; import com.baeldung.properties.reloading.beans.PropertiesConfigBean; import com.baeldung.properties.reloading.beans.ValueRefreshConfigBean; import java.io.FileOutputStream; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; + +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.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SpringBootPropertiesTestApplication.class) public class PropertiesReloadManualTest { @@ -50,7 +49,7 @@ public class PropertiesReloadManualTest { ValueRefreshConfigBean singletonValueRefreshConfigBean; - @Before + @BeforeEach public void setUp() throws Exception { mvc = MockMvcBuilders .webAppContextSetup(webApplicationContext) @@ -61,7 +60,7 @@ public class PropertiesReloadManualTest { callRefresh(); } - @After + @AfterEach public void tearDown() throws Exception { createConfig("extra.properties", "application.theme.color", "blue"); createConfig("extra2.properties", "application.theme.background", "red"); @@ -69,76 +68,76 @@ public class PropertiesReloadManualTest { @Test public void givenEnvironmentReader_whenColorChanged_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", environmentConfigBean.getColor()); + assertEquals("blue", environmentConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("red", environmentConfigBean.getColor()); + assertEquals("red", environmentConfigBean.getColor()); } @Test public void givenEnvironmentReader_whenBackgroundChanged_thenExpectChangeValue() throws Exception { - Assert.assertEquals("red", environmentConfigBean.getBackgroundColor()); + assertEquals("red", environmentConfigBean.getBackgroundColor()); createConfig("extra2.properties", "application.theme.background", "blue"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", environmentConfigBean.getBackgroundColor()); + assertEquals("blue", environmentConfigBean.getBackgroundColor()); } @Test public void givenPropertiesReader_whenColorChanged_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", propertiesConfigBean.getColor()); + assertEquals("blue", propertiesConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("red", propertiesConfigBean.getColor()); + assertEquals("red", propertiesConfigBean.getColor()); } @Test public void givenRefreshScopedValueReader_whenColorChangedAndRefreshCalled_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", valueRefreshConfigBean.getColor()); + assertEquals("blue", valueRefreshConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", valueRefreshConfigBean.getColor()); + assertEquals("blue", valueRefreshConfigBean.getColor()); callRefresh(); - Assert.assertEquals("red", valueRefreshConfigBean.getColor()); + assertEquals("red", valueRefreshConfigBean.getColor()); } @Test public void givenSingletonRefreshScopedValueReader_whenColorChangedAndRefreshCalled_thenExpectOldValue() throws Exception { - Assert.assertEquals("blue", singletonValueRefreshConfigBean.getColor()); + assertEquals("blue", singletonValueRefreshConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", singletonValueRefreshConfigBean.getColor()); + assertEquals("blue", singletonValueRefreshConfigBean.getColor()); callRefresh(); - Assert.assertEquals("blue", singletonValueRefreshConfigBean.getColor()); + assertEquals("blue", singletonValueRefreshConfigBean.getColor()); } @Test public void givenRefreshScopedConfigurationPropertiesReader_whenColorChangedAndRefreshCalled_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); + assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); + assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); callRefresh(); - Assert.assertEquals("red", configurationPropertiesRefreshConfigBean.getColor()); + assertEquals("red", configurationPropertiesRefreshConfigBean.getColor()); } public void callRefresh() throws Exception { @@ -148,7 +147,7 @@ public class PropertiesReloadManualTest { .accept(MediaType.APPLICATION_JSON_VALUE)) .andReturn(); MockHttpServletResponse response = mvcResult.getResponse(); - Assert.assertEquals(response.getStatus(), 200); + assertEquals(200, response.getStatus()); } public void createConfig(String file, String key, String value) throws Exception { diff --git a/spring-boot-modules/spring-boot-redis/pom.xml b/spring-boot-modules/spring-boot-redis/pom.xml index 42aa1321d5..5b85ad00ca 100644 --- a/spring-boot-modules/spring-boot-redis/pom.xml +++ b/spring-boot-modules/spring-boot-redis/pom.xml @@ -2,20 +2,19 @@ 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.2 - - com.baelding spring-boot-redis 0.0.1-SNAPSHOT spring-boot-redis Demo project for Spring Boot with Spring Data Redis - - 15 - + + + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 + + org.springframework.boot @@ -38,6 +37,12 @@ it.ozimov embedded-redis + + + org.slf4j + slf4j-simple + + 0.7.3 test @@ -66,4 +71,8 @@ + + 15 + + diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java index ae1b89764d..3933a02753 100644 --- a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java @@ -22,6 +22,8 @@ import java.util.stream.IntStream; import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; @@ -32,6 +34,8 @@ import org.springframework.http.ResponseEntity; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class ResilientAppControllerIntegrationTest { + private final Logger LOGGER = LoggerFactory.getLogger(getClass()); + @Autowired private TestRestTemplate restTemplate; @LocalServerPort private Integer port; @@ -226,6 +230,7 @@ class ResilientAppControllerIntegrationTest { executorService.shutdown(); assertEquals(2, responseStatusCount.keySet().size()); + LOGGER.info("Response statuses: " + responseStatusCount.keySet()); assertTrue(responseStatusCount.containsKey(BANDWIDTH_LIMIT_EXCEEDED.value())); assertTrue(responseStatusCount.containsKey(OK.value())); EXTERNAL_SERVICE.verify(3, getRequestedFor(urlEqualTo("/api/external"))); diff --git a/spring-boot-rest/pom.xml b/spring-boot-rest/pom.xml index 81c9ebbec8..46563b725f 100644 --- a/spring-boot-rest/pom.xml +++ b/spring-boot-rest/pom.xml @@ -143,6 +143,11 @@ + + org.glassfish.jaxb + jaxb-runtime + ${jaxb-runtime.version} + @@ -159,5 +164,6 @@ 1.4.11.1 3.1.0 3.3.2 + 2.3.7 diff --git a/spring-core-4/README.md b/spring-core-4/README.md index 0338d5d6e8..6ade284e2e 100644 --- a/spring-core-4/README.md +++ b/spring-core-4/README.md @@ -6,6 +6,5 @@ This module contains articles about core Spring functionality - [Creating Spring Beans Through Factory Methods](https://www.baeldung.com/spring-beans-factory-methods) - [Spring BeanPostProcessor](https://www.baeldung.com/spring-beanpostprocessor) -- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) - [The Spring ApplicationContext](https://www.baeldung.com/spring-application-context) - More articles: [[<-- prev]](/spring-core-3) [[next -->]](/spring-core-5) diff --git a/spring-core-5/README.md b/spring-core-5/README.md index 13945c1f8b..cfcbf5380a 100644 --- a/spring-core-5/README.md +++ b/spring-core-5/README.md @@ -4,7 +4,6 @@ This module contains articles about core Spring functionality. ## Relevant Articles: -- [Spring @Component Annotation](https://www.baeldung.com/spring-component-annotation) - [Solving Spring’s “not eligible for auto-proxying” Warning](https://www.baeldung.com/spring-not-eligible-for-auto-proxying) - [Finding the Spring Version](https://www.baeldung.com/spring-find-version) - [How Does the Spring Singleton Bean Serve Concurrent Requests?](https://www.baeldung.com/spring-singleton-concurrent-requests) diff --git a/spring-core-5/src/main/resources/application.yml b/spring-core-5/src/main/resources/application.yml index 5c09fdb8b0..e69de29bb2 100644 --- a/spring-core-5/src/main/resources/application.yml +++ b/spring-core-5/src/main/resources/application.yml @@ -1 +0,0 @@ -ambiguous-bean: 'A' \ No newline at end of file diff --git a/spring-core-5/src/test/resources/application.yml b/spring-core-5/src/test/resources/application.yml index da23e59c24..e69de29bb2 100644 --- a/spring-core-5/src/test/resources/application.yml +++ b/spring-core-5/src/test/resources/application.yml @@ -1 +0,0 @@ -ambiguous-bean: 'B' \ No newline at end of file diff --git a/spring-core-6/pom.xml b/spring-core-6/pom.xml index cc494b3a57..736fa283e7 100644 --- a/spring-core-6/pom.xml +++ b/spring-core-6/pom.xml @@ -10,10 +10,10 @@ http://www.baeldung.com - org.springframework.boot - spring-boot-starter-parent - 3.0.1 - + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../parent-boot-3 diff --git a/spring-di-3/README.md b/spring-di-3/README.md index 1ac280fef2..ffb81fbe7d 100644 --- a/spring-di-3/README.md +++ b/spring-di-3/README.md @@ -11,4 +11,4 @@ This module contains articles about dependency injection with Spring - [@Order in Spring](http://www.baeldung.com/spring-order) - [How to dynamically Autowire a Bean in Spring](https://www.baeldung.com/spring-dynamic-autowire) - [Spring @Import Annotation](https://www.baeldung.com/spring-import-annotation) -- More articles: [[<-- prev]](../spring-di-2) +- More articles: [[<-- prev]](../spring-di-2)[[more -->]](../spring-di-4) diff --git a/spring-di-4/README.md b/spring-di-4/README.md new file mode 100644 index 0000000000..d4b0d94385 --- /dev/null +++ b/spring-di-4/README.md @@ -0,0 +1,9 @@ +## Spring Dependency Injection + +This module contains articles about dependency injection with Spring + +### Relevant Articles + +- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) +- [Spring @Component Annotation](https://www.baeldung.com/spring-component-annotation) +- More articles: [[<-- prev]](../spring-di-3) diff --git a/spring-di-4/pom.xml b/spring-di-4/pom.xml new file mode 100644 index 0000000000..c6572495cb --- /dev/null +++ b/spring-di-4/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + spring-di-4 + 1.0-SNAPSHOT + spring-di-4 + + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + + + + \ No newline at end of file diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/BeanExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/BeanExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/BeanExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/BeanExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplA.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplA.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplA.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplA.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplB.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplB.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplB.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplB.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentApplication.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentApplication.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentApplication.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentApplication.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ControllerExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ControllerExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ControllerExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ControllerExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponent.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponent.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponent.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponent.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/RepositoryExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/RepositoryExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/RepositoryExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/RepositoryExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ServiceExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ServiceExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ServiceExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ServiceExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java b/spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java rename to spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java b/spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java rename to spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java b/spring-di-4/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java rename to spring-di-4/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/BallService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/BallService.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java diff --git a/spring-di-4/src/main/resources/application.yml b/spring-di-4/src/main/resources/application.yml new file mode 100644 index 0000000000..5c09fdb8b0 --- /dev/null +++ b/spring-di-4/src/main/resources/application.yml @@ -0,0 +1 @@ +ambiguous-bean: 'A' \ No newline at end of file diff --git a/spring-core-5/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java b/spring-di-4/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java similarity index 100% rename from spring-core-5/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java rename to spring-di-4/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java diff --git a/spring-di-4/src/test/resources/application.yml b/spring-di-4/src/test/resources/application.yml new file mode 100644 index 0000000000..da23e59c24 --- /dev/null +++ b/spring-di-4/src/test/resources/application.yml @@ -0,0 +1 @@ +ambiguous-bean: 'B' \ No newline at end of file diff --git a/spring-di-4/src/test/resources/logback-test.xml b/spring-di-4/src/test/resources/logback-test.xml new file mode 100644 index 0000000000..8d4771e308 --- /dev/null +++ b/spring-di-4/src/test/resources/logback-test.xml @@ -0,0 +1,12 @@ + + + + + [%d{ISO8601}]-[%thread] %-5level %logger - %msg%n + + + + + + + \ No newline at end of file diff --git a/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/cancelflux/CancelFluxUnitTest.java b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/cancelflux/CancelFluxUnitTest.java new file mode 100644 index 0000000000..609dbfcf73 --- /dev/null +++ b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/cancelflux/CancelFluxUnitTest.java @@ -0,0 +1,123 @@ +package com.baeldung.cancelflux; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; + +import java.io.PrintStream; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; + +import reactor.core.Disposable; +import reactor.core.publisher.Flux; +import reactor.core.publisher.SignalType; +import reactor.test.StepVerifier; + +public class CancelFluxUnitTest { + + @Test + void givenOngoingFlux_whentakeUntil_thenFluxCancels() { + Flux sensorData = Flux.range(1, 10); + List result = new ArrayList<>(); + + sensorData.takeUntil(reading -> reading == 8) + .subscribe(result::add); + assertThat(result).containsExactly(1, 2, 3, 4, 5, 6, 7, 8); + } + + @Test + void givenOngoingFlux_whentakeWhile_thenFluxCancels() { + List result = new ArrayList<>(); + Flux sensorData = Flux.range(1, 10) + .takeWhile(reading -> reading < 8) + .doOnNext(result::add); + + sensorData.subscribe(); + assertThat(result).containsExactly(1, 2, 3, 4, 5, 6, 7); + } + + @Test + void givenOngoingFlux_whentake_thenFluxCancels() { + Flux sensorData = Flux.range(1, Integer.MAX_VALUE); + List result = new ArrayList<>(); + + sensorData.take(2) + .subscribe(result::add); + assertThat(result).containsExactly(1, 2); + } + + @Test + void givenAnOnGoingFlux_whenTakeDurationElapsed_thenCancelsFlux() { + Flux sensorData = Flux.interval(Duration.ZERO, Duration.ofSeconds(2)) + .map(i -> i.intValue() + 10) + .take(5); + + Flux canceledByTimeout = sensorData.take(Duration.ofSeconds(3)); + + StepVerifier.create(canceledByTimeout) + .expectNext(10, 11) + .expectComplete() + .verify(); + } + + @Test + void givenAnOnGoingFlux_whenDispose_thenCancelsFluxExplicitly() throws InterruptedException { + Flux flux = Flux.range(1, 10) + .delayElements(Duration.ofSeconds(1)); + + AtomicInteger count = new AtomicInteger(0); + Disposable disposable = flux.subscribe(i -> { + System.out.println("Received: " + i); + count.incrementAndGet(); + }, e -> System.err.println("Error: " + e.getMessage())); + + Thread.sleep(5000); + System.out.println("Will Dispose The flux Next"); + disposable.dispose(); + if (disposable.isDisposed()) { + System.out.println("Flux Disposed"); + } + assertEquals(4, count.get()); + } + + @Test + void givenAFluxIsCanceled_whenDoOnCancelAndDoFinally_thenMessagePrinted() throws InterruptedException { + + List result = new ArrayList<>(); + PrintStream mockPrintStream = mock(PrintStream.class); + System.setOut(mockPrintStream); + + Flux sensorData = Flux.interval(Duration.ofMillis(100)) + .doOnCancel(() -> System.out.println("Flux Canceled")) + .doFinally(signalType -> { + if (signalType == SignalType.CANCEL) { + System.out.println("Flux Completed due to Cancellation"); + } else { + System.out.println("Flux Completed due to Completion or Error"); + } + }) + .map(i -> ThreadLocalRandom.current() + .nextInt(1, 1001)) + .doOnNext(result::add); + + Disposable subscription = sensorData.subscribe(); + + Thread.sleep(1000); + subscription.dispose(); + + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + Mockito.verify(mockPrintStream, times(2)) + .println(captor.capture()); + + assertThat(captor.getAllValues()).contains("Flux Canceled", "Flux Completed due to Cancellation"); + } + +} diff --git a/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java index f30b4a8a3b..975a2d8698 100644 --- a/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java +++ b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java @@ -17,9 +17,12 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URI; import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class DataBufferToInputStreamUnitTest { private String getResponseStub() throws IOException { @@ -67,7 +70,7 @@ class DataBufferToInputStreamUnitTest { @Test public void testResponseAsInputStream() throws IOException, InterruptedException { - String mockUrl = Mockito.anyString(); + String mockUrl = "http://mockurl.com"; WebClient mockWebClient = getMockWebClient(); InputStream inputStream = DataBufferToInputStream.getResponseAsInputStream(mockWebClient, mockUrl); byte[] expectedBytes = IOUtils.toByteArray(getResponseStubAsInputStream()); diff --git a/terraform/README.md b/terraform-modules/README.md similarity index 100% rename from terraform/README.md rename to terraform-modules/README.md diff --git a/terraform/best-practices/README.md b/terraform-modules/best-practices/README.md similarity index 100% rename from terraform/best-practices/README.md rename to terraform-modules/best-practices/README.md diff --git a/terraform/best-practices/ec2-simple/.gitignore b/terraform-modules/best-practices/ec2-simple/.gitignore similarity index 100% rename from terraform/best-practices/ec2-simple/.gitignore rename to terraform-modules/best-practices/ec2-simple/.gitignore diff --git a/terraform/best-practices/ec2-simple/SETUP.md b/terraform-modules/best-practices/ec2-simple/SETUP.md similarity index 100% rename from terraform/best-practices/ec2-simple/SETUP.md rename to terraform-modules/best-practices/ec2-simple/SETUP.md diff --git a/terraform/best-practices/ec2-simple/main.tf b/terraform-modules/best-practices/ec2-simple/main.tf similarity index 100% rename from terraform/best-practices/ec2-simple/main.tf rename to terraform-modules/best-practices/ec2-simple/main.tf diff --git a/terraform/best-practices/ec2-simple/providers.tf b/terraform-modules/best-practices/ec2-simple/providers.tf similarity index 100% rename from terraform/best-practices/ec2-simple/providers.tf rename to terraform-modules/best-practices/ec2-simple/providers.tf diff --git a/terraform/best-practices/ec2-simple/variables.tf b/terraform-modules/best-practices/ec2-simple/variables.tf similarity index 100% rename from terraform/best-practices/ec2-simple/variables.tf rename to terraform-modules/best-practices/ec2-simple/variables.tf diff --git a/terraform/best-practices/k8s-basic/.gitignore b/terraform-modules/best-practices/k8s-basic/.gitignore similarity index 100% rename from terraform/best-practices/k8s-basic/.gitignore rename to terraform-modules/best-practices/k8s-basic/.gitignore diff --git a/terraform/best-practices/k8s-basic/SETUP.md b/terraform-modules/best-practices/k8s-basic/SETUP.md similarity index 100% rename from terraform/best-practices/k8s-basic/SETUP.md rename to terraform-modules/best-practices/k8s-basic/SETUP.md diff --git a/terraform/best-practices/k8s-basic/main.tf b/terraform-modules/best-practices/k8s-basic/main.tf similarity index 100% rename from terraform/best-practices/k8s-basic/main.tf rename to terraform-modules/best-practices/k8s-basic/main.tf diff --git a/terraform/best-practices/k8s-basic/providers.tf b/terraform-modules/best-practices/k8s-basic/providers.tf similarity index 100% rename from terraform/best-practices/k8s-basic/providers.tf rename to terraform-modules/best-practices/k8s-basic/providers.tf diff --git a/terraform/best-practices/k8s-basic/variables.tf b/terraform-modules/best-practices/k8s-basic/variables.tf similarity index 100% rename from terraform/best-practices/k8s-basic/variables.tf rename to terraform-modules/best-practices/k8s-basic/variables.tf diff --git a/terraform/best-practices/k8s-modules/.gitignore b/terraform-modules/best-practices/k8s-modules/.gitignore similarity index 100% rename from terraform/best-practices/k8s-modules/.gitignore rename to terraform-modules/best-practices/k8s-modules/.gitignore diff --git a/terraform/best-practices/k8s-modules/SETUP.md b/terraform-modules/best-practices/k8s-modules/SETUP.md similarity index 100% rename from terraform/best-practices/k8s-modules/SETUP.md rename to terraform-modules/best-practices/k8s-modules/SETUP.md diff --git a/terraform/best-practices/k8s-modules/main.tf b/terraform-modules/best-practices/k8s-modules/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/main.tf rename to terraform-modules/best-practices/k8s-modules/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcCustomer/main.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcCustomer/main.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcCustomer/variables.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/variables.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcCustomer/variables.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/variables.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcFeedback/main.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcFeedback/main.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcFeedback/variables.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/variables.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcFeedback/variables.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/variables.tf diff --git a/terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf b/terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf rename to terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf b/terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf rename to terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf diff --git a/terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf b/terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf rename to terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf diff --git a/terraform/best-practices/k8s-modules/provider.tf b/terraform-modules/best-practices/k8s-modules/provider.tf similarity index 100% rename from terraform/best-practices/k8s-modules/provider.tf rename to terraform-modules/best-practices/k8s-modules/provider.tf diff --git a/terraform/hello-terraform/.gitignore b/terraform-modules/hello-terraform/.gitignore similarity index 100% rename from terraform/hello-terraform/.gitignore rename to terraform-modules/hello-terraform/.gitignore diff --git a/terraform/hello-terraform/main.tf b/terraform-modules/hello-terraform/main.tf similarity index 100% rename from terraform/hello-terraform/main.tf rename to terraform-modules/hello-terraform/main.tf diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ExplicitWaitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ExplicitWaitLiveTest.java new file mode 100644 index 0000000000..65943fbf5e --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ExplicitWaitLiveTest.java @@ -0,0 +1,79 @@ +package com.baeldung.selenium.wait; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.ElementNotInteractableException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +final class ExplicitWaitLiveTest { + + private static WebDriver driver; + private static WebDriverWait wait; + private static final int TIMEOUT = 10; + + private static final By LOCATOR_ABOUT = By.xpath("//a[starts-with(., 'About')]"); + private static final By LOCATOR_ABOUT_BAELDUNG = By.xpath("//h3[normalize-space()='About Baeldung']"); + private static final By LOCATOR_ABOUT_HEADER = By.xpath("//h1"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new ChromeDriver(options); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + wait = new WebDriverWait(driver, Duration.ofSeconds(TIMEOUT)); + } + + @Test + void givenPage_whenNavigatingWithoutExplicitWait_thenElementNotInteractable() { + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + + assertThrows(ElementNotInteractableException.class, () -> driver.findElement(LOCATOR_ABOUT_BAELDUNG).click()); + } + + @Test + void givenPage_whenNavigatingWithExplicitWait_thenOK() { + final String expected = "About Baeldung"; + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_BAELDUNG)); + + driver.findElement(LOCATOR_ABOUT_BAELDUNG).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_HEADER)); + + final String actual = driver.findElement(LOCATOR_ABOUT_HEADER).getText(); + assertEquals(expected, actual); + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/FluentWaitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/FluentWaitLiveTest.java new file mode 100644 index 0000000000..c41e5619ac --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/FluentWaitLiveTest.java @@ -0,0 +1,83 @@ +package com.baeldung.selenium.wait; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.ElementNotInteractableException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.FluentWait; +import org.openqa.selenium.support.ui.Wait; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +final class FluentWaitLiveTest { + + private static WebDriver driver; + private static Wait wait; + private static final int TIMEOUT = 10; + private static final int POLL_FREQUENCY = 250; + + private static final By LOCATOR_ABOUT = By.xpath("//a[starts-with(., 'About')]"); + private static final By LOCATOR_ABOUT_BAELDUNG = By.xpath("//h3[normalize-space()='About Baeldung']"); + private static final By LOCATOR_ABOUT_HEADER = By.xpath("//h1"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new ChromeDriver(options); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + wait = new FluentWait<>(driver) + .withTimeout(Duration.ofSeconds(TIMEOUT)) + .pollingEvery(Duration.ofMillis(POLL_FREQUENCY)); + } + + @Test + void givenPage_whenNavigatingWithoutFluentWait_thenElementNotInteractable() { + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + + assertThrows(ElementNotInteractableException.class, () -> driver.findElement(LOCATOR_ABOUT_BAELDUNG).click()); + } + + @Test + void givenPage_whenNavigatingWithFluentWait_thenOK() { + final String expected = "About Baeldung"; + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_BAELDUNG)); + + driver.findElement(LOCATOR_ABOUT_BAELDUNG).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_HEADER)); + + final String actual = driver.findElement(LOCATOR_ABOUT_HEADER).getText(); + assertEquals(expected, actual); + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ImplicitWaitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ImplicitWaitLiveTest.java new file mode 100644 index 0000000000..86c401e13a --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ImplicitWaitLiveTest.java @@ -0,0 +1,63 @@ +package com.baeldung.selenium.wait; + + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +final class ImplicitWaitLiveTest { + + private static WebDriver driver; + private static final int TIMEOUT = 10; + + private static final By LOCATOR_ABOUT = By.xpath("//a[starts-with(., 'About')]"); + private static final By LOCATOR_ABOUT_BAELDUNG = By.xpath("//h3[normalize-space()='About Baeldung']"); + private static final By LOCATOR_ABOUT_HEADER = By.xpath("//h1"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new ChromeDriver(options); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(TIMEOUT)); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + } + + @Test + void givenPage_whenNavigatingWithImplicitWait_ThenOK() { + final String expected = "About Baeldung"; + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + driver.findElement(LOCATOR_ABOUT_BAELDUNG).click(); + + final String actual = driver.findElement(LOCATOR_ABOUT_HEADER).getText(); + assertEquals(expected, actual); + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file