From 65e2f5968158dc579030e3f9476c8dccdd58963d Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Sun, 30 Jul 2017 22:27:38 +0200 Subject: [PATCH 01/52] Matchers is now deprecated in Mockito 2, it's now replaced by ArgumentMatchers --- .../baeldung/mocks/mockito/LoginControllerIntegrationTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mocks/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerIntegrationTest.java b/mocks/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerIntegrationTest.java index 8f8918ab22..9d47b2f5d4 100644 --- a/mocks/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerIntegrationTest.java +++ b/mocks/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerIntegrationTest.java @@ -8,6 +8,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentMatcher; +import org.mockito.ArgumentMatchers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; @@ -120,7 +121,7 @@ public class LoginControllerIntegrationTest { .login(userForm); // complex matcher Mockito.verify(loginService) - .setCurrentUser(Mockito.argThat(new ArgumentMatcher() { + .setCurrentUser(ArgumentMatchers.argThat(new ArgumentMatcher() { @Override public boolean matches(String argument) { return argument.startsWith("foo"); From 119c288942d7f3547515ec773f1e106c6cb50676 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Fri, 8 Sep 2017 11:09:04 +0200 Subject: [PATCH 02/52] BAEL-1069: Guide to diamond operator in Java --- .../java/org/baeldung/java/diamond/Car.java | 5 +++++ .../java/diamond/DiamondOperatorTest.java | 13 +++++++++++++ .../java/org/baeldung/java/diamond/Diesel.java | 10 ++++++++++ .../java/org/baeldung/java/diamond/Engine.java | 6 ++++++ .../java/org/baeldung/java/diamond/Vehicle.java | 5 +++++ .../baeldung/java/rawtypes/RawTypesTest.java | 17 +++++++++++++++++ 6 files changed, 56 insertions(+) create mode 100644 core-java/src/test/java/org/baeldung/java/diamond/Car.java create mode 100644 core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorTest.java create mode 100644 core-java/src/test/java/org/baeldung/java/diamond/Diesel.java create mode 100644 core-java/src/test/java/org/baeldung/java/diamond/Engine.java create mode 100644 core-java/src/test/java/org/baeldung/java/diamond/Vehicle.java create mode 100644 core-java/src/test/java/org/baeldung/java/rawtypes/RawTypesTest.java diff --git a/core-java/src/test/java/org/baeldung/java/diamond/Car.java b/core-java/src/test/java/org/baeldung/java/diamond/Car.java new file mode 100644 index 0000000000..9f923e0f3b --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/diamond/Car.java @@ -0,0 +1,5 @@ +package org.baeldung.java.diamond; + +public class Car implements Vehicle { + +} diff --git a/core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorTest.java b/core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorTest.java new file mode 100644 index 0000000000..ceb7c87100 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorTest.java @@ -0,0 +1,13 @@ +package org.baeldung.java.diamond; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; + +public class DiamondOperatorTest { + @Test + public void shouldCreateCarUsingDiamondWithoutWarnings() { + Car myCar = new Car<>(); + assertNotNull(myCar); + } +} diff --git a/core-java/src/test/java/org/baeldung/java/diamond/Diesel.java b/core-java/src/test/java/org/baeldung/java/diamond/Diesel.java new file mode 100644 index 0000000000..dc4256cdae --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/diamond/Diesel.java @@ -0,0 +1,10 @@ +package org.baeldung.java.diamond; + +public class Diesel implements Engine { + + @Override + public void start() { + System.out.println("Started Diesel..."); + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/diamond/Engine.java b/core-java/src/test/java/org/baeldung/java/diamond/Engine.java new file mode 100644 index 0000000000..c18a8f64b5 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/diamond/Engine.java @@ -0,0 +1,6 @@ +package org.baeldung.java.diamond; + +public interface Engine { + + void start(); +} diff --git a/core-java/src/test/java/org/baeldung/java/diamond/Vehicle.java b/core-java/src/test/java/org/baeldung/java/diamond/Vehicle.java new file mode 100644 index 0000000000..f61cf59620 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/diamond/Vehicle.java @@ -0,0 +1,5 @@ +package org.baeldung.java.diamond; + +public interface Vehicle { + +} diff --git a/core-java/src/test/java/org/baeldung/java/rawtypes/RawTypesTest.java b/core-java/src/test/java/org/baeldung/java/rawtypes/RawTypesTest.java new file mode 100644 index 0000000000..2b36786abf --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/rawtypes/RawTypesTest.java @@ -0,0 +1,17 @@ +package org.baeldung.java.rawtypes; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; + +public class RawTypesTest { + @Test + public void shouldCreateListUsingRawTypes() { + @SuppressWarnings("rawtypes") + List myList = new ArrayList(); + myList.add(new Object()); + myList.add("2"); + myList.add(new Integer(1)); + } +} From 239da95f3d21ec25e945bda22d7e176bc3998bd6 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Wed, 13 Sep 2017 14:36:14 +0200 Subject: [PATCH 03/52] Changes after review --- ...{DiamondOperatorTest.java => DiamondOperatorUnitTest.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename core-java/src/test/java/org/baeldung/java/diamond/{DiamondOperatorTest.java => DiamondOperatorUnitTest.java} (65%) diff --git a/core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorTest.java b/core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorUnitTest.java similarity index 65% rename from core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorTest.java rename to core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorUnitTest.java index ceb7c87100..f6c7f7162f 100644 --- a/core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorTest.java +++ b/core-java/src/test/java/org/baeldung/java/diamond/DiamondOperatorUnitTest.java @@ -4,9 +4,9 @@ import static org.junit.Assert.assertNotNull; import org.junit.Test; -public class DiamondOperatorTest { +public class DiamondOperatorUnitTest { @Test - public void shouldCreateCarUsingDiamondWithoutWarnings() { + public void whenCreateCarUsingDiamondOperator_thenSuccess() { Car myCar = new Car<>(); assertNotNull(myCar); } From 57a993de64fc0959b0511096f07ac9d59133fa01 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Sun, 8 Oct 2017 08:17:24 +0200 Subject: [PATCH 04/52] BAEL-719: Intro to Spring Cloud Stream --- spring-cloud/pom.xml | 2 + spring-cloud/spring-cloud-stream/pom.xml | 70 +++++++++++++++++++ .../spring-cloud-stream-rabbit/pom.xml | 33 +++++++++ .../MultipleOutputsServiceApplication.java | 38 ++++++++++ ...tputsWithConditionsServiceApplication.java | 39 +++++++++++ .../rabbit/MyLoggerServiceApplication.java | 32 +++++++++ .../messages/TextPlainMessageConverter.java | 26 +++++++ .../cloud/stream/rabbit/model/LogMessage.java | 32 +++++++++ .../stream/rabbit/processor/MyProcessor.java | 19 +++++ .../src/main/resources/application.yml | 28 ++++++++ ...ultipleOutputsServiceApplicationTests.java | 52 ++++++++++++++ ...WithConditionsServiceApplicationTests.java | 52 ++++++++++++++ .../rabbit/MyLoggerApplicationTests.java | 44 ++++++++++++ 13 files changed, 467 insertions(+) create mode 100644 spring-cloud/spring-cloud-stream/pom.xml create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplication.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplication.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerServiceApplication.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/messages/TextPlainMessageConverter.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/model/LogMessage.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/processor/MyProcessor.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index 44e72535f8..f3083f69b7 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -16,6 +16,7 @@ spring-cloud-rest spring-cloud-zookeeper spring-cloud-gateway + spring-cloud-stream pom @@ -37,6 +38,7 @@ 1.2.3.RELEASE 1.2.3.RELEASE 1.2.3.RELEASE + 1.3.0.RELEASE 1.4.2.RELEASE 3.6.0 1.4.2.RELEASE diff --git a/spring-cloud/spring-cloud-stream/pom.xml b/spring-cloud/spring-cloud-stream/pom.xml new file mode 100644 index 0000000000..352b52cc17 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + org.baeldung + spring-cloud-stream + + spring-cloud-stream-rabbit + + pom + + spring-cloud-stream + + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + + + + UTF-8 + 3.6.0 + + + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + ${spring-cloud-stream.version} + + + + org.springframework.cloud + spring-cloud-stream + ${spring-cloud-stream.version} + + + + org.springframework.cloud + spring-cloud-stream-test-support + ${spring-cloud-stream.version} + test + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-maven-plugin.version} + + + + + diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml new file mode 100644 index 0000000000..9eede9e92c --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + spring-cloud-stream-rabbit + jar + + spring-cloud-stream-rabbit + Simple Spring Cloud Stream + + + org.baeldung + spring-cloud-stream + 1.0.0-SNAPSHOT + .. + + + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + + + + org.springframework.cloud + spring-cloud-stream-test-support + test + + + + diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplication.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplication.java new file mode 100644 index 0000000000..375494dfac --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplication.java @@ -0,0 +1,38 @@ +package com.baeldung.spring.cloud.stream.rabbit; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; + +import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; + +@SpringBootApplication +@EnableBinding(MyProcessor.class) +public class MultipleOutputsServiceApplication { + public static void main(String[] args) { + SpringApplication.run(MultipleOutputsServiceApplication.class, args); + } + + @Autowired + private MyProcessor processor; + + @StreamListener(MyProcessor.INPUT) + public void routeValues(Integer val) { + if (val < 10) { + processor.anOutput() + .send(message(val)); + } else { + processor.anotherOutput() + .send(message(val)); + } + } + + private static final Message message(T val) { + return MessageBuilder.withPayload(val) + .build(); + } +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplication.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplication.java new file mode 100644 index 0000000000..4729e418b6 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplication.java @@ -0,0 +1,39 @@ +package com.baeldung.spring.cloud.stream.rabbit; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; + +import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; + +@SpringBootApplication +@EnableBinding(MyProcessor.class) +public class MultipleOutputsWithConditionsServiceApplication { + public static void main(String[] args) { + SpringApplication.run(MultipleOutputsWithConditionsServiceApplication.class, args); + } + + @Autowired + private MyProcessor processor; + + @StreamListener(target = MyProcessor.INPUT, condition = "payload < 10") + public void routeValuesToAnOutput(Integer val) { + processor.anOutput() + .send(message(val)); + } + + @StreamListener(target = MyProcessor.INPUT, condition = "payload >= 10") + public void routeValuesToAnotherOutput(Integer val) { + processor.anotherOutput() + .send(message(val)); + } + + private static final Message message(T val) { + return MessageBuilder.withPayload(val) + .build(); + } +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerServiceApplication.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerServiceApplication.java new file mode 100644 index 0000000000..aac551e544 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerServiceApplication.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.cloud.stream.rabbit; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.cloud.stream.messaging.Processor; +import org.springframework.context.annotation.Bean; +import org.springframework.messaging.converter.MessageConverter; +import org.springframework.messaging.handler.annotation.SendTo; + +import com.baeldung.spring.cloud.stream.rabbit.messages.TextPlainMessageConverter; +import com.baeldung.spring.cloud.stream.rabbit.model.LogMessage; + +@SpringBootApplication +@EnableBinding(Processor.class) +public class MyLoggerServiceApplication { + public static void main(String[] args) { + SpringApplication.run(MyLoggerServiceApplication.class, args); + } + + @Bean + public MessageConverter providesTextPlainMessageConverter() { + return new TextPlainMessageConverter(); + } + + @StreamListener(Processor.INPUT) + @SendTo(Processor.OUTPUT) + public LogMessage enrichLogMessage(LogMessage log) { + return new LogMessage(String.format("[1]: %s", log.getMessage())); + } +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/messages/TextPlainMessageConverter.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/messages/TextPlainMessageConverter.java new file mode 100644 index 0000000000..d690ee38a9 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/messages/TextPlainMessageConverter.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.cloud.stream.rabbit.messages; + +import org.springframework.messaging.Message; +import org.springframework.messaging.converter.AbstractMessageConverter; +import org.springframework.util.MimeType; + +import com.baeldung.spring.cloud.stream.rabbit.model.LogMessage; + +public class TextPlainMessageConverter extends AbstractMessageConverter { + + public TextPlainMessageConverter() { + super(new MimeType("text", "plain")); + } + + @Override + protected boolean supports(Class clazz) { + return (LogMessage.class == clazz); + } + + @Override + protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { + Object payload = message.getPayload(); + String text = payload instanceof String ? (String) payload : new String((byte[]) payload); + return new LogMessage(text); + } +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/model/LogMessage.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/model/LogMessage.java new file mode 100644 index 0000000000..44a6ca4d4e --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/model/LogMessage.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.cloud.stream.rabbit.model; + +import java.io.Serializable; + +public class LogMessage implements Serializable { + + private static final long serialVersionUID = -5857383701708275796L; + + private String message; + + public LogMessage() { + + } + + public LogMessage(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Override + public String toString() { + return message; + } + +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/processor/MyProcessor.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/processor/MyProcessor.java new file mode 100644 index 0000000000..563ce06b6f --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/java/com/baeldung/spring/cloud/stream/rabbit/processor/MyProcessor.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.cloud.stream.rabbit.processor; + +import org.springframework.cloud.stream.annotation.Input; +import org.springframework.cloud.stream.annotation.Output; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.SubscribableChannel; + +public interface MyProcessor { + String INPUT = "myInput"; + + @Input + SubscribableChannel myInput(); + + @Output("myOutput") + MessageChannel anOutput(); + + @Output + MessageChannel anotherOutput(); +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/resources/application.yml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/resources/application.yml new file mode 100644 index 0000000000..3d9d97a736 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/main/resources/application.yml @@ -0,0 +1,28 @@ +spring: + cloud: + stream: + bindings: + input: + destination: queue.log.messages + binder: local_rabbit + group: logMessageConsumers + output: + destination: queue.pretty.log.messages + binder: local_rabbit + binders: + local_rabbit: + type: rabbit + environment: + spring: + rabbitmq: + host: localhost + port: 5672 + username: guest + password: guest + virtual-host: / +server: + port: 0 +management: + health: + binders: + enabled: true \ No newline at end of file diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java new file mode 100644 index 0000000000..18dcd8da7c --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java @@ -0,0 +1,52 @@ +package com.baeldung.spring.cloud.stream.rabbit; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.stream.test.binder.MessageCollector; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = MultipleOutputsServiceApplication.class) +@DirtiesContext +public class MultipleOutputsServiceApplicationTests { + + @Autowired + private MyProcessor pipe; + + @Autowired + private MessageCollector messageCollector; + + @Test + public void shouldReceiveMessageInAnOutput() { + whenSendMessage(1); + thenPayloadInChannelIs(pipe.anOutput(), 1); + } + + @Test + public void shouldReceiveMessageInAnAnotherOutput() { + whenSendMessage(11); + thenPayloadInChannelIs(pipe.anotherOutput(), 11); + } + + private void whenSendMessage(Integer val) { + pipe.myInput() + .send(MessageBuilder.withPayload(val) + .build()); + } + + private void thenPayloadInChannelIs(MessageChannel channel, Integer expectedValue) { + Object payload = messageCollector.forChannel(channel) + .poll() + .getPayload(); + assertEquals(expectedValue, payload); + } +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java new file mode 100644 index 0000000000..02638dea4c --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java @@ -0,0 +1,52 @@ +package com.baeldung.spring.cloud.stream.rabbit; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.stream.test.binder.MessageCollector; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = MultipleOutputsWithConditionsServiceApplication.class) +@DirtiesContext +public class MultipleOutputsWithConditionsServiceApplicationTests { + + @Autowired + private MyProcessor pipe; + + @Autowired + private MessageCollector messageCollector; + + @Test + public void shouldReceiveMessageInAnOutput() { + whenSendMessage(1); + thenPayloadInChannelIs(pipe.anotherOutput(), 1); + } + + @Test + public void shouldReceiveMessageInAnAnotherOutput() { + whenSendMessage(11); + thenPayloadInChannelIs(pipe.anotherOutput(), 11); + } + + private void whenSendMessage(Integer val) { + pipe.myInput() + .send(MessageBuilder.withPayload(val) + .build()); + } + + private void thenPayloadInChannelIs(MessageChannel channel, Integer expectedValue) { + Object payload = messageCollector.forChannel(channel) + .poll() + .getPayload(); + assertEquals(expectedValue, payload); + } +} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java new file mode 100644 index 0000000000..d004987929 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java @@ -0,0 +1,44 @@ +package com.baeldung.spring.cloud.stream.rabbit; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.stream.messaging.Processor; +import org.springframework.cloud.stream.test.binder.MessageCollector; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.spring.cloud.stream.rabbit.MyLoggerServiceApplication; +import com.baeldung.spring.cloud.stream.rabbit.model.LogMessage; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = MyLoggerServiceApplication.class) +@DirtiesContext +public class MyLoggerApplicationTests { + + @Autowired + private Processor pipe; + + @Autowired + private MessageCollector messageCollector; + + @Test + public void shouldEnrichMessage() { + // Send message + pipe.input() + .send(MessageBuilder.withPayload(new LogMessage("This is my message")) + .build()); + + // Get response from the service + Object payload = messageCollector.forChannel(pipe.output()) + .poll() + .getPayload(); + + // Assert + assertEquals("[1]: This is my message", payload.toString()); + } +} From e8979a40336ebacd60aaee3a9363b7ebf7683279 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Wed, 11 Oct 2017 12:11:38 +0200 Subject: [PATCH 05/52] Pull request changes done --- spring-cloud/spring-cloud-stream/pom.xml | 120 +++++++++--------- .../spring-cloud-stream-rabbit/pom.xml | 11 +- ...ultipleOutputsServiceApplicationTests.java | 4 +- ...WithConditionsServiceApplicationTests.java | 4 +- .../rabbit/MyLoggerApplicationTests.java | 6 +- 5 files changed, 70 insertions(+), 75 deletions(-) diff --git a/spring-cloud/spring-cloud-stream/pom.xml b/spring-cloud/spring-cloud-stream/pom.xml index 352b52cc17..2104ba1827 100644 --- a/spring-cloud/spring-cloud-stream/pom.xml +++ b/spring-cloud/spring-cloud-stream/pom.xml @@ -1,70 +1,70 @@ - 4.0.0 + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - org.baeldung - spring-cloud-stream - - spring-cloud-stream-rabbit - - pom + org.baeldung + spring-cloud-stream + + spring-cloud-stream-rabbit + + pom - spring-cloud-stream + spring-cloud-stream - - com.baeldung.spring.cloud - spring-cloud - 1.0.0-SNAPSHOT - + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + - - UTF-8 - 3.6.0 - + + UTF-8 + 3.6.0 + - - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - ${spring-cloud-stream.version} - - - - org.springframework.cloud - spring-cloud-stream - ${spring-cloud-stream.version} - + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + ${spring-cloud-stream.version} + + + + org.springframework.cloud + spring-cloud-stream + ${spring-cloud-stream.version} + - - org.springframework.cloud - spring-cloud-stream-test-support - ${spring-cloud-stream.version} - test - - - + + org.springframework.cloud + spring-cloud-stream-test-support + ${spring-cloud-stream.version} + test + + + - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot-maven-plugin.version} - - - - + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-maven-plugin.version} + + + + diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml index 9eede9e92c..a954a7035e 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml @@ -17,17 +17,16 @@ - org.springframework.cloud - spring-cloud-starter-stream-rabbit + spring-cloud-starter-stream-rabbit - org.springframework.cloud - spring-cloud-stream-test-support - test - + org.springframework.cloud + spring-cloud-stream-test-support + test + diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java index 18dcd8da7c..196d4f0d23 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java @@ -26,13 +26,13 @@ public class MultipleOutputsServiceApplicationTests { private MessageCollector messageCollector; @Test - public void shouldReceiveMessageInAnOutput() { + public void whenSendMessage_thenResponseIsInAOutput() { whenSendMessage(1); thenPayloadInChannelIs(pipe.anOutput(), 1); } @Test - public void shouldReceiveMessageInAnAnotherOutput() { + public void whenSendMessage_thenResponseIsInAnotherOutput() { whenSendMessage(11); thenPayloadInChannelIs(pipe.anotherOutput(), 11); } diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java index 02638dea4c..a74ee61be6 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java @@ -26,13 +26,13 @@ public class MultipleOutputsWithConditionsServiceApplicationTests { private MessageCollector messageCollector; @Test - public void shouldReceiveMessageInAnOutput() { + public void whenSendMessage_thenResponseIsInAOutput() { whenSendMessage(1); thenPayloadInChannelIs(pipe.anotherOutput(), 1); } @Test - public void shouldReceiveMessageInAnAnotherOutput() { + public void whenSendMessage_thenResponseIsInAnotherOutput() { whenSendMessage(11); thenPayloadInChannelIs(pipe.anotherOutput(), 11); } diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java index d004987929..b939af25fc 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java @@ -12,7 +12,6 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.baeldung.spring.cloud.stream.rabbit.MyLoggerServiceApplication; import com.baeldung.spring.cloud.stream.rabbit.model.LogMessage; @RunWith(SpringJUnit4ClassRunner.class) @@ -27,18 +26,15 @@ public class MyLoggerApplicationTests { private MessageCollector messageCollector; @Test - public void shouldEnrichMessage() { - // Send message + public void whenSendMessage_thenResponseShouldUpdateText() { pipe.input() .send(MessageBuilder.withPayload(new LogMessage("This is my message")) .build()); - // Get response from the service Object payload = messageCollector.forChannel(pipe.output()) .poll() .getPayload(); - // Assert assertEquals("[1]: This is my message", payload.toString()); } } From d7c207145ad799983f5ade9bd1a8b7787258f1d2 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Mon, 30 Oct 2017 13:39:39 +0100 Subject: [PATCH 06/52] Renamed unit tests --- ...ts.java => MultipleOutputsServiceApplicationUnitTest.java} | 2 +- ...java => MultipleOutputsWithConditionsServiceUnitTest.java} | 4 ++-- ...ApplicationTests.java => MyLoggerApplicationUnitTest.java} | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/{MultipleOutputsServiceApplicationTests.java => MultipleOutputsServiceApplicationUnitTest.java} (96%) rename spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/{MultipleOutputsWithConditionsServiceApplicationTests.java => MultipleOutputsWithConditionsServiceUnitTest.java} (92%) rename spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/{MyLoggerApplicationTests.java => MyLoggerApplicationUnitTest.java} (96%) diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationUnitTest.java similarity index 96% rename from spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java rename to spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationUnitTest.java index 196d4f0d23..225ed73ff7 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationTests.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationUnitTest.java @@ -17,7 +17,7 @@ import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = MultipleOutputsServiceApplication.class) @DirtiesContext -public class MultipleOutputsServiceApplicationTests { +public class MultipleOutputsServiceApplicationUnitTest { @Autowired private MyProcessor pipe; diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceUnitTest.java similarity index 92% rename from spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java rename to spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceUnitTest.java index a74ee61be6..8628b209cb 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceApplicationTests.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceUnitTest.java @@ -17,7 +17,7 @@ import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = MultipleOutputsWithConditionsServiceApplication.class) @DirtiesContext -public class MultipleOutputsWithConditionsServiceApplicationTests { +public class MultipleOutputsWithConditionsServiceUnitTest { @Autowired private MyProcessor pipe; @@ -28,7 +28,7 @@ public class MultipleOutputsWithConditionsServiceApplicationTests { @Test public void whenSendMessage_thenResponseIsInAOutput() { whenSendMessage(1); - thenPayloadInChannelIs(pipe.anotherOutput(), 1); + thenPayloadInChannelIs(pipe.anOutput(), 1); } @Test diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationUnitTest.java similarity index 96% rename from spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java rename to spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationUnitTest.java index b939af25fc..1541af3cb5 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationTests.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationUnitTest.java @@ -17,7 +17,7 @@ import com.baeldung.spring.cloud.stream.rabbit.model.LogMessage; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = MyLoggerServiceApplication.class) @DirtiesContext -public class MyLoggerApplicationTests { +public class MyLoggerApplicationUnitTest { @Autowired private Processor pipe; From 8c8af4e9bfd8eba66ff524d60b23a3dcbb40cd99 Mon Sep 17 00:00:00 2001 From: gschambial Date: Fri, 10 Nov 2017 17:52:21 +0530 Subject: [PATCH 07/52] 1. Constructor and Setter injection explained with example of Computer, Processor and Memory --- spring-boot/.factorypath | 111 ++++++++++-------- .../SpringAutowireConstructorContext.java | 10 ++ .../config/SpringBeanConstructorContext.java | 28 +++++ .../factory/ComputerAutowireFactory.java | 28 +++++ .../factory/ComputerBeanFactory.java | 29 +++++ .../factory/ComputerXmlFactory.java | 31 +++++ .../constructor/model/autowire/Computer.java | 34 ++++++ .../di/constructor/model/autowire/Memory.java | 19 +++ .../constructor/model/autowire/Processor.java | 19 +++ .../di/constructor/model/bean/Computer.java | 29 +++++ .../di/constructor/model/bean/Memory.java | 16 +++ .../di/constructor/model/bean/Processor.java | 16 +++ .../di/constructor/model/xml/Computer.java | 29 +++++ .../di/constructor/model/xml/Memory.java | 20 ++++ .../di/constructor/model/xml/Processor.java | 16 +++ .../config/SpringAutowireSetterContext.java | 10 ++ .../config/SpringBeanSetterContext.java | 31 +++++ .../factory/ComputerAutowireFactory.java | 29 +++++ .../setter/factory/ComputerBeanFactory.java | 30 +++++ .../di/setter/factory/ComputerXmlFactory.java | 30 +++++ .../di/setter/model/autowire/Computer.java | 30 +++++ .../di/setter/model/autowire/Memory.java | 19 +++ .../di/setter/model/autowire/Processor.java | 19 +++ .../di/setter/model/bean/Computer.java | 24 ++++ .../baeldung/di/setter/model/bean/Memory.java | 16 +++ .../di/setter/model/bean/Processor.java | 16 +++ .../di/setter/model/xml/Computer.java | 24 ++++ .../baeldung/di/setter/model/xml/Memory.java | 20 ++++ .../di/setter/model/xml/Processor.java | 16 +++ .../application-di-constructor-context.xml | 23 ++++ .../application-di-setter-context.xml | 22 ++++ .../AutowireAnnotationInjectionTest.java | 28 +++++ .../BeanAnnotationInjectionTest.java | 28 +++++ .../di/constructor/XmlInjectionTest.java | 27 +++++ .../AutowireAnnotationInjectionTest.java | 28 +++++ .../setter/BeanAnnotationInjectionTest.java | 28 +++++ .../baeldung/di/setter/XmlInjectionTest.java | 27 +++++ 37 files changed, 910 insertions(+), 50 deletions(-) create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java create mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java create mode 100644 spring-core/src/main/resources/application-di-constructor-context.xml create mode 100644 spring-core/src/main/resources/application-di-setter-context.xml create mode 100644 spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionTest.java create mode 100644 spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionTest.java create mode 100644 spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionTest.java create mode 100644 spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionTest.java create mode 100644 spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionTest.java create mode 100644 spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionTest.java diff --git a/spring-boot/.factorypath b/spring-boot/.factorypath index aa15485f5c..97062c74a4 100644 --- a/spring-boot/.factorypath +++ b/spring-boot/.factorypath @@ -1,46 +1,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -48,81 +32,105 @@ - + + + + + - - + - - - + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + - + + - @@ -133,7 +141,10 @@ + + + @@ -143,7 +154,7 @@ - + diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java new file mode 100644 index 0000000000..d3c43d843e --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java @@ -0,0 +1,10 @@ +package com.baeldung.di.constructor.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages= { "com.baeldung.di.constructor.model.autowire" }) +public class SpringAutowireConstructorContext { + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java new file mode 100644 index 0000000000..0ac1138e78 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java @@ -0,0 +1,28 @@ +package com.baeldung.di.constructor.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.di.constructor.model.bean.Computer; +import com.baeldung.di.constructor.model.bean.Memory; +import com.baeldung.di.constructor.model.bean.Processor; + +@Configuration +public class SpringBeanConstructorContext { + + @Bean + public Computer computer(){ + return new Computer(processor(), memory()); + } + + @Bean + public Processor processor(){ + return new Processor(); + } + + @Bean + public Memory memory(){ + return new Memory(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java new file mode 100644 index 0000000000..a86733c3d1 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java @@ -0,0 +1,28 @@ +package com.baeldung.di.constructor.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.constructor.config.SpringAutowireConstructorContext; +import com.baeldung.di.constructor.model.autowire.Computer; + +public class ComputerAutowireFactory { + + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireConstructorContext.class); + + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Constructor Injection via @Autowire------------------"); + System.out.println("Processor cores : " + computer.getProcessor().getCores()); + System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory().getFormat()); + System.out.println("---------------- Constructor Injection via @Autowire------------------"); + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java new file mode 100644 index 0000000000..b518438521 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java @@ -0,0 +1,29 @@ +package com.baeldung.di.constructor.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.constructor.config.SpringBeanConstructorContext; +import com.baeldung.di.constructor.model.bean.Computer; + +public class ComputerBeanFactory { + + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanConstructorContext.class); + + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Constructor Injection via @Bean ------------------"); + System.out.println("Processor cores : " + computer.getProcessor().getCores()); + System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory().getFormat()); + System.out.println("---------------- Constructor Injection via @Bean ------------------"); + + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java new file mode 100644 index 0000000000..2fa12525df --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java @@ -0,0 +1,31 @@ +package com.baeldung.di.constructor.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.di.constructor.model.xml.Computer; + + + +public class ComputerXmlFactory { + + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new ClassPathXmlApplicationContext("application-di-constructor-context.xml"); + + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Constructor Injection via XML ------------------"); + System.out.println("Processor cores : " + computer.getProcessor().getCores()); + System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory().getFormat()); + System.out.println("---------------- Constructor Injection via XML ------------------"); + + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java new file mode 100644 index 0000000000..b470aedeed --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java @@ -0,0 +1,34 @@ +package com.baeldung.di.constructor.model.autowire; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Computer { + + private Processor processor; + private Memory memory; + + @Autowired + public Computer(Processor processor, Memory memory) { + this.processor = processor; + this.memory = memory; + } + + public Processor getProcessor() { + return processor; + } + + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java new file mode 100644 index 0000000000..29633dd5ca --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java @@ -0,0 +1,19 @@ +package com.baeldung.di.constructor.model.autowire; + +import org.springframework.stereotype.Component; + +@Component +public class Memory { + + private Integer sizeInGb = 16; + private String format = "DDR3"; + + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java new file mode 100644 index 0000000000..0d81e2a005 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java @@ -0,0 +1,19 @@ +package com.baeldung.di.constructor.model.autowire; + +import org.springframework.stereotype.Component; + +@Component +public class Processor { + + private Integer cores = 2; + private Double frequency = 1.4; + + public Integer getCores() { + return cores; + } + + public Double getFrequency() { + return frequency; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java new file mode 100644 index 0000000000..d8856420d0 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java @@ -0,0 +1,29 @@ +package com.baeldung.di.constructor.model.bean; + +public class Computer { + + private Processor processor; + private Memory memory; + + public Computer(Processor processor, Memory memory) { + this.processor = processor; + this.memory = memory; + } + + public Processor getProcessor() { + return processor; + } + + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java new file mode 100644 index 0000000000..8e748bb1a0 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java @@ -0,0 +1,16 @@ +package com.baeldung.di.constructor.model.bean; + +public class Memory { + + private Integer sizeInGb = 16; + private String format = "DDR3"; + + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java new file mode 100644 index 0000000000..1566606148 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java @@ -0,0 +1,16 @@ +package com.baeldung.di.constructor.model.bean; + +public class Processor { + + private Integer cores = 2; + private Double frequency = 1.4; + + public Integer getCores() { + return cores; + } + + public Double getFrequency() { + return frequency; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java new file mode 100644 index 0000000000..dbd70cf6a4 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java @@ -0,0 +1,29 @@ +package com.baeldung.di.constructor.model.xml; + +public class Computer { + + private Processor processor; + private Memory memory; + + public Computer(Processor processor, Memory memory) { + this.processor = processor; + this.memory = memory; + } + + public Processor getProcessor() { + return processor; + } + + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java new file mode 100644 index 0000000000..f5ea3b4ec9 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java @@ -0,0 +1,20 @@ +package com.baeldung.di.constructor.model.xml; + +public class Memory { + + private Integer sizeInGb = 16; + private String format = "DDR3"; + + public Memory() { + + } + + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java new file mode 100644 index 0000000000..72733829d8 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java @@ -0,0 +1,16 @@ +package com.baeldung.di.constructor.model.xml; + +public class Processor { + + private Integer cores = 2; + private Double frequency = 1.4; + + public Integer getCores() { + return cores; + } + + public Double getFrequency() { + return frequency; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java new file mode 100644 index 0000000000..4e0ac0df28 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java @@ -0,0 +1,10 @@ +package com.baeldung.di.setter.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages= { "com.baeldung.di.setter.model.autowire" }) +public class SpringAutowireSetterContext { + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java new file mode 100644 index 0000000000..885173f5b4 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java @@ -0,0 +1,31 @@ +package com.baeldung.di.setter.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.di.setter.model.bean.Computer; +import com.baeldung.di.setter.model.bean.Memory; +import com.baeldung.di.setter.model.bean.Processor; + +@Configuration +public class SpringBeanSetterContext { + + @Bean + public Computer computer(){ + Computer computer = new Computer(); + computer.setProcessor(processor()); + computer.setMemory(memory()); + return computer; + } + + @Bean + public Processor processor(){ + return new Processor(); + } + + @Bean + public Memory memory(){ + return new Memory(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java new file mode 100644 index 0000000000..98c3fccb27 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java @@ -0,0 +1,29 @@ +package com.baeldung.di.setter.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.setter.config.SpringAutowireSetterContext; +import com.baeldung.di.setter.model.autowire.Computer; + + +public class ComputerAutowireFactory { + + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireSetterContext.class); + + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Setter Injection via @Autowire ------------------"); + System.out.println("Processor cores : " + computer.getProcessor().getCores()); + System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory().getFormat()); + System.out.println("---------------- Setter Injection via @Autowire ------------------"); + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java new file mode 100644 index 0000000000..6341029e95 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java @@ -0,0 +1,30 @@ +package com.baeldung.di.setter.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.setter.config.SpringBeanSetterContext; +import com.baeldung.di.setter.model.bean.Computer; + + +public class ComputerBeanFactory { + + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanSetterContext.class); + + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Setter Injection via @Bean ------------------"); + System.out.println("Processor cores : " + computer.getProcessor().getCores()); + System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory().getFormat()); + System.out.println("---------------- Setter Injection via @Bean ------------------"); + + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java new file mode 100644 index 0000000000..707725d340 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java @@ -0,0 +1,30 @@ +package com.baeldung.di.setter.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.di.setter.model.xml.Computer; + + + +public class ComputerXmlFactory { + + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new ClassPathXmlApplicationContext("application-setter-context.xml"); + + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Setter Injection via XML ------------------"); + System.out.println("Processor cores : " + computer.getProcessor().getCores()); + System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory().getFormat()); + System.out.println("---------------- Setter Injection via XML ------------------"); + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java new file mode 100644 index 0000000000..4d8a3b1dd3 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java @@ -0,0 +1,30 @@ +package com.baeldung.di.setter.model.autowire; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Computer { + + private Processor processor; + private Memory memory; + + public Processor getProcessor() { + return processor; + } + + @Autowired + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + @Autowired + public void setMemory(Memory memory) { + this.memory = memory; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java new file mode 100644 index 0000000000..0953a42b35 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java @@ -0,0 +1,19 @@ +package com.baeldung.di.setter.model.autowire; + +import org.springframework.stereotype.Component; + +@Component +public class Memory { + + private Integer sizeInGb = 16; + private String format = "DDR3"; + + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java new file mode 100644 index 0000000000..ee5ef3b6cd --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java @@ -0,0 +1,19 @@ +package com.baeldung.di.setter.model.autowire; + +import org.springframework.stereotype.Component; + +@Component +public class Processor { + + private Integer cores = 2; + private Double frequency = 1.4; + + public Integer getCores() { + return cores; + } + + public Double getFrequency() { + return frequency; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java new file mode 100644 index 0000000000..01c87a6c73 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java @@ -0,0 +1,24 @@ +package com.baeldung.di.setter.model.bean; + +public class Computer { + + private Processor processor; + private Memory memory; + + public Processor getProcessor() { + return processor; + } + + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java new file mode 100644 index 0000000000..bfe94aa8e7 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java @@ -0,0 +1,16 @@ +package com.baeldung.di.setter.model.bean; + +public class Memory { + + private Integer sizeInGb = 16; + private String format = "DDR3"; + + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java new file mode 100644 index 0000000000..982b56f3d0 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java @@ -0,0 +1,16 @@ +package com.baeldung.di.setter.model.bean; + +public class Processor { + + private Integer cores = 2; + private Double frequency = 1.4; + + public Integer getCores() { + return cores; + } + + public Double getFrequency() { + return frequency; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java new file mode 100644 index 0000000000..3e7fa58ea8 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java @@ -0,0 +1,24 @@ +package com.baeldung.di.setter.model.xml; + +public class Computer { + + private Processor processor; + private Memory memory; + + public Processor getProcessor() { + return processor; + } + + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java new file mode 100644 index 0000000000..cb11c59583 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java @@ -0,0 +1,20 @@ +package com.baeldung.di.setter.model.xml; + +public class Memory { + + private Integer sizeInGb = 16; + private String format = "DDR3"; + + public Memory() { + + } + + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java new file mode 100644 index 0000000000..07405e13ea --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java @@ -0,0 +1,16 @@ +package com.baeldung.di.setter.model.xml; + +public class Processor { + + private Integer cores = 2; + private Double frequency = 1.4; + + public Integer getCores() { + return cores; + } + + public Double getFrequency() { + return frequency; + } + +} diff --git a/spring-core/src/main/resources/application-di-constructor-context.xml b/spring-core/src/main/resources/application-di-constructor-context.xml new file mode 100644 index 0000000000..46d1256988 --- /dev/null +++ b/spring-core/src/main/resources/application-di-constructor-context.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-core/src/main/resources/application-di-setter-context.xml b/spring-core/src/main/resources/application-di-setter-context.xml new file mode 100644 index 0000000000..3831041e01 --- /dev/null +++ b/spring-core/src/main/resources/application-di-setter-context.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionTest.java new file mode 100644 index 0000000000..87cb549ace --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionTest.java @@ -0,0 +1,28 @@ +package com.baeldung.di.constructor; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.constructor.config.SpringAutowireConstructorContext; +import com.baeldung.di.constructor.model.autowire.Computer; + +public class AutowireAnnotationInjectionTest { + + private ApplicationContext applicationContext; + + @Before + public void setUp() throws Exception { + applicationContext = new AnnotationConfigApplicationContext(SpringAutowireConstructorContext.class); + } + + @Test + public void getComputer_() { + final Computer computer = applicationContext.getBean("computer", Computer.class); + assertNotNull(computer); + } + +} diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionTest.java new file mode 100644 index 0000000000..61f718d4ba --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionTest.java @@ -0,0 +1,28 @@ +package com.baeldung.di.constructor; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.constructor.config.SpringBeanConstructorContext; +import com.baeldung.di.constructor.model.bean.Computer; + +public class BeanAnnotationInjectionTest { + + private ApplicationContext applicationContext; + + @Before + public void setUp() throws Exception { + applicationContext = new AnnotationConfigApplicationContext(SpringBeanConstructorContext.class); + } + + @Test + public void getComputer_() { + final Computer computer = applicationContext.getBean("computer", Computer.class); + assertNotNull(computer); + } + +} diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionTest.java new file mode 100644 index 0000000000..4787c19cbf --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionTest.java @@ -0,0 +1,27 @@ +package com.baeldung.di.constructor; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.di.constructor.model.xml.Computer; + +public class XmlInjectionTest { + + private ApplicationContext applicationContext; + + @Before + public void setUp() throws Exception { + applicationContext = new ClassPathXmlApplicationContext("application-di-constructor-context.xml"); + } + + @Test + public void getComputer_() { + final Computer computer = applicationContext.getBean("computer", Computer.class); + assertNotNull(computer); + } + +} diff --git a/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionTest.java new file mode 100644 index 0000000000..036c6826e3 --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionTest.java @@ -0,0 +1,28 @@ +package com.baeldung.di.setter; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.setter.config.SpringAutowireSetterContext; +import com.baeldung.di.setter.model.autowire.Computer; + +public class AutowireAnnotationInjectionTest { + + private ApplicationContext applicationContext; + + @Before + public void setUp() throws Exception { + applicationContext = new AnnotationConfigApplicationContext(SpringAutowireSetterContext.class); + } + + @Test + public void getComputer_() { + final Computer computer = applicationContext.getBean("computer", Computer.class); + assertNotNull(computer); + } + +} diff --git a/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionTest.java new file mode 100644 index 0000000000..53f1d4e10e --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionTest.java @@ -0,0 +1,28 @@ +package com.baeldung.di.setter; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.di.setter.config.SpringBeanSetterContext; +import com.baeldung.di.setter.model.bean.Computer; + +public class BeanAnnotationInjectionTest { + + private ApplicationContext applicationContext; + + @Before + public void setUp() throws Exception { + applicationContext = new AnnotationConfigApplicationContext(SpringBeanSetterContext.class); + } + + @Test + public void getComputer_() { + final Computer computer = applicationContext.getBean("computer", Computer.class); + assertNotNull(computer); + } + +} diff --git a/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionTest.java new file mode 100644 index 0000000000..52452be119 --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionTest.java @@ -0,0 +1,27 @@ +package com.baeldung.di.setter; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.di.setter.model.xml.Computer; + +public class XmlInjectionTest { + + private ApplicationContext applicationContext; + + @Before + public void setUp() throws Exception { + applicationContext = new ClassPathXmlApplicationContext("application-di-setter-context.xml"); + } + + @Test + public void getComputer_() { + final Computer computer = applicationContext.getBean("computer", Computer.class); + assertNotNull(computer); + } + +} From b2dead94841756a35c0743486e4b08b609513888 Mon Sep 17 00:00:00 2001 From: gschambial Date: Fri, 10 Nov 2017 18:14:31 +0530 Subject: [PATCH 08/52] Baeldung eclipse formatter added. --- .../SpringAutowireConstructorContext.java | 4 +- .../config/SpringBeanConstructorContext.java | 32 +++++++-------- .../factory/ComputerAutowireFactory.java | 32 ++++++++------- .../factory/ComputerBeanFactory.java | 32 ++++++++------- .../factory/ComputerXmlFactory.java | 36 +++++++++-------- .../constructor/model/autowire/Computer.java | 40 +++++++++---------- .../di/constructor/model/autowire/Memory.java | 18 ++++----- .../constructor/model/autowire/Processor.java | 16 ++++---- .../di/constructor/model/bean/Computer.java | 38 +++++++++--------- .../di/constructor/model/bean/Memory.java | 18 ++++----- .../di/constructor/model/bean/Processor.java | 16 ++++---- .../di/constructor/model/xml/Computer.java | 40 +++++++++---------- .../di/constructor/model/xml/Memory.java | 20 +++++----- .../di/constructor/model/xml/Processor.java | 16 ++++---- .../config/SpringAutowireSetterContext.java | 4 +- .../config/SpringBeanSetterContext.java | 38 +++++++++--------- .../factory/ComputerAutowireFactory.java | 33 ++++++++------- .../setter/factory/ComputerBeanFactory.java | 33 ++++++++------- .../di/setter/factory/ComputerXmlFactory.java | 36 +++++++++-------- .../di/setter/model/autowire/Computer.java | 36 ++++++++--------- .../di/setter/model/autowire/Memory.java | 18 ++++----- .../di/setter/model/autowire/Processor.java | 16 ++++---- .../di/setter/model/bean/Computer.java | 32 +++++++-------- .../baeldung/di/setter/model/bean/Memory.java | 19 ++++----- .../di/setter/model/bean/Processor.java | 16 ++++---- .../di/setter/model/xml/Computer.java | 30 +++++++------- .../baeldung/di/setter/model/xml/Memory.java | 20 +++++----- .../di/setter/model/xml/Processor.java | 16 ++++---- .../application-di-constructor-context.xml | 6 +-- .../application-di-setter-context.xml | 2 +- 30 files changed, 366 insertions(+), 347 deletions(-) diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java index d3c43d843e..ae67bc7e5e 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java @@ -4,7 +4,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration -@ComponentScan(basePackages= { "com.baeldung.di.constructor.model.autowire" }) +@ComponentScan(basePackages = { "com.baeldung.di.constructor.model.autowire" }) public class SpringAutowireConstructorContext { - + } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java index 0ac1138e78..670f18cb9c 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java @@ -9,20 +9,20 @@ import com.baeldung.di.constructor.model.bean.Processor; @Configuration public class SpringBeanConstructorContext { - - @Bean - public Computer computer(){ - return new Computer(processor(), memory()); - } - - @Bean - public Processor processor(){ - return new Processor(); - } - - @Bean - public Memory memory(){ - return new Memory(); - } - + + @Bean + public Computer computer() { + return new Computer(processor(), memory()); + } + + @Bean + public Processor processor() { + return new Processor(); + } + + @Bean + public Memory memory() { + return new Memory(); + } + } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java index a86733c3d1..2a13adf250 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java @@ -9,20 +9,24 @@ import com.baeldung.di.constructor.model.autowire.Computer; public class ComputerAutowireFactory { - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireConstructorContext.class); + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireConstructorContext.class); - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Constructor Injection via @Autowire------------------"); - System.out.println("Processor cores : " + computer.getProcessor().getCores()); - System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory().getFormat()); - System.out.println("---------------- Constructor Injection via @Autowire------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Constructor Injection via @Autowire------------------"); + System.out.println("Processor cores : " + computer.getProcessor() + .getCores()); + System.out.println("Processor frequency : " + computer.getProcessor() + .getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory() + .getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory() + .getFormat()); + System.out.println("---------------- Constructor Injection via @Autowire------------------"); + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java index b518438521..713ea82b00 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java @@ -9,21 +9,25 @@ import com.baeldung.di.constructor.model.bean.Computer; public class ComputerBeanFactory { - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanConstructorContext.class); + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanConstructorContext.class); - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Constructor Injection via @Bean ------------------"); - System.out.println("Processor cores : " + computer.getProcessor().getCores()); - System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory().getFormat()); - System.out.println("---------------- Constructor Injection via @Bean ------------------"); + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Constructor Injection via @Bean ------------------"); + System.out.println("Processor cores : " + computer.getProcessor() + .getCores()); + System.out.println("Processor frequency : " + computer.getProcessor() + .getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory() + .getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory() + .getFormat()); + System.out.println("---------------- Constructor Injection via @Bean ------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java index 2fa12525df..afe5fa281b 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java @@ -6,26 +6,28 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import com.baeldung.di.constructor.model.xml.Computer; - - public class ComputerXmlFactory { - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new ClassPathXmlApplicationContext("application-di-constructor-context.xml"); + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new ClassPathXmlApplicationContext("application-di-constructor-context.xml"); - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Constructor Injection via XML ------------------"); - System.out.println("Processor cores : " + computer.getProcessor().getCores()); - System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory().getFormat()); - System.out.println("---------------- Constructor Injection via XML ------------------"); + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Constructor Injection via XML ------------------"); + System.out.println("Processor cores : " + computer.getProcessor() + .getCores()); + System.out.println("Processor frequency : " + computer.getProcessor() + .getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory() + .getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory() + .getFormat()); + System.out.println("---------------- Constructor Injection via XML ------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - - } + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java index b470aedeed..1dabfd287e 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java @@ -6,29 +6,29 @@ import org.springframework.stereotype.Component; @Component public class Computer { - private Processor processor; - private Memory memory; + private Processor processor; + private Memory memory; - @Autowired - public Computer(Processor processor, Memory memory) { - this.processor = processor; - this.memory = memory; - } + @Autowired + public Computer(Processor processor, Memory memory) { + this.processor = processor; + this.memory = memory; + } - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } + public Processor getProcessor() { + return processor; + } - public Memory getMemory() { - return memory; - } + public void setProcessor(Processor processor) { + this.processor = processor; + } - public void setMemory(Memory memory) { - this.memory = memory; - } + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java index 29633dd5ca..d1faecc569 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java @@ -5,15 +5,15 @@ import org.springframework.stereotype.Component; @Component public class Memory { - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Integer getSizeInGb() { - return sizeInGb; - } + private Integer sizeInGb = 16; + private String format = "DDR3"; - public String getFormat() { - return format; - } + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java index 0d81e2a005..7de9d2bf6a 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java @@ -5,15 +5,15 @@ import org.springframework.stereotype.Component; @Component public class Processor { - private Integer cores = 2; - private Double frequency = 1.4; + private Integer cores = 2; + private Double frequency = 1.4; - public Integer getCores() { - return cores; - } + public Integer getCores() { + return cores; + } - public Double getFrequency() { - return frequency; - } + public Double getFrequency() { + return frequency; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java index d8856420d0..74ec89ce0c 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java @@ -2,28 +2,28 @@ package com.baeldung.di.constructor.model.bean; public class Computer { - private Processor processor; - private Memory memory; + private Processor processor; + private Memory memory; - public Computer(Processor processor, Memory memory) { - this.processor = processor; - this.memory = memory; - } + public Computer(Processor processor, Memory memory) { + this.processor = processor; + this.memory = memory; + } - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } + public Processor getProcessor() { + return processor; + } - public Memory getMemory() { - return memory; - } + public void setProcessor(Processor processor) { + this.processor = processor; + } - public void setMemory(Memory memory) { - this.memory = memory; - } + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java index 8e748bb1a0..18d4eaf948 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java @@ -2,15 +2,15 @@ package com.baeldung.di.constructor.model.bean; public class Memory { - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Integer getSizeInGb() { - return sizeInGb; - } + private Integer sizeInGb = 16; + private String format = "DDR3"; - public String getFormat() { - return format; - } + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java index 1566606148..9dd719c872 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java @@ -2,15 +2,15 @@ package com.baeldung.di.constructor.model.bean; public class Processor { - private Integer cores = 2; - private Double frequency = 1.4; + private Integer cores = 2; + private Double frequency = 1.4; - public Integer getCores() { - return cores; - } + public Integer getCores() { + return cores; + } - public Double getFrequency() { - return frequency; - } + public Double getFrequency() { + return frequency; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java index dbd70cf6a4..66c39c66b7 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java @@ -2,28 +2,28 @@ package com.baeldung.di.constructor.model.xml; public class Computer { - private Processor processor; - private Memory memory; + private Processor processor; + private Memory memory; - public Computer(Processor processor, Memory memory) { - this.processor = processor; - this.memory = memory; - } - - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } + public Computer(Processor processor, Memory memory) { + this.processor = processor; + this.memory = memory; + } - public Memory getMemory() { - return memory; - } + public Processor getProcessor() { + return processor; + } - public void setMemory(Memory memory) { - this.memory = memory; - } + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java index f5ea3b4ec9..7b4f4fb697 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java @@ -2,19 +2,19 @@ package com.baeldung.di.constructor.model.xml; public class Memory { - private Integer sizeInGb = 16; - private String format = "DDR3"; + private Integer sizeInGb = 16; + private String format = "DDR3"; - public Memory() { + public Memory() { - } + } - public Integer getSizeInGb() { - return sizeInGb; - } + public Integer getSizeInGb() { + return sizeInGb; + } - public String getFormat() { - return format; - } + public String getFormat() { + return format; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java index 72733829d8..4e783042fe 100644 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java +++ b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java @@ -2,15 +2,15 @@ package com.baeldung.di.constructor.model.xml; public class Processor { - private Integer cores = 2; - private Double frequency = 1.4; + private Integer cores = 2; + private Double frequency = 1.4; - public Integer getCores() { - return cores; - } + public Integer getCores() { + return cores; + } - public Double getFrequency() { - return frequency; - } + public Double getFrequency() { + return frequency; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java index 4e0ac0df28..9e1d24fc61 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java @@ -4,7 +4,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration -@ComponentScan(basePackages= { "com.baeldung.di.setter.model.autowire" }) +@ComponentScan(basePackages = { "com.baeldung.di.setter.model.autowire" }) public class SpringAutowireSetterContext { - + } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java index 885173f5b4..14767fb0ca 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java @@ -9,23 +9,23 @@ import com.baeldung.di.setter.model.bean.Processor; @Configuration public class SpringBeanSetterContext { - - @Bean - public Computer computer(){ - Computer computer = new Computer(); - computer.setProcessor(processor()); - computer.setMemory(memory()); - return computer; - } - - @Bean - public Processor processor(){ - return new Processor(); - } - - @Bean - public Memory memory(){ - return new Memory(); - } - + + @Bean + public Computer computer() { + Computer computer = new Computer(); + computer.setProcessor(processor()); + computer.setMemory(memory()); + return computer; + } + + @Bean + public Processor processor() { + return new Processor(); + } + + @Bean + public Memory memory() { + return new Memory(); + } + } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java index 98c3fccb27..ef1ac83530 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java @@ -7,23 +7,26 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import com.baeldung.di.setter.config.SpringAutowireSetterContext; import com.baeldung.di.setter.model.autowire.Computer; - public class ComputerAutowireFactory { - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireSetterContext.class); + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireSetterContext.class); - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Setter Injection via @Autowire ------------------"); - System.out.println("Processor cores : " + computer.getProcessor().getCores()); - System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory().getFormat()); - System.out.println("---------------- Setter Injection via @Autowire ------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Setter Injection via @Autowire ------------------"); + System.out.println("Processor cores : " + computer.getProcessor() + .getCores()); + System.out.println("Processor frequency : " + computer.getProcessor() + .getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory() + .getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory() + .getFormat()); + System.out.println("---------------- Setter Injection via @Autowire ------------------"); + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java index 6341029e95..87f49bf4cf 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java @@ -7,24 +7,27 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import com.baeldung.di.setter.config.SpringBeanSetterContext; import com.baeldung.di.setter.model.bean.Computer; - public class ComputerBeanFactory { - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanSetterContext.class); + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanSetterContext.class); - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Setter Injection via @Bean ------------------"); - System.out.println("Processor cores : " + computer.getProcessor().getCores()); - System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory().getFormat()); - System.out.println("---------------- Setter Injection via @Bean ------------------"); + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Setter Injection via @Bean ------------------"); + System.out.println("Processor cores : " + computer.getProcessor() + .getCores()); + System.out.println("Processor frequency : " + computer.getProcessor() + .getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory() + .getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory() + .getFormat()); + System.out.println("---------------- Setter Injection via @Bean ------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java index 707725d340..01af29905c 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java @@ -6,25 +6,27 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import com.baeldung.di.setter.model.xml.Computer; - - public class ComputerXmlFactory { - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new ClassPathXmlApplicationContext("application-setter-context.xml"); + public static void main(String[] args) { + // Create Spring Application Context + ApplicationContext context = new ClassPathXmlApplicationContext("application-setter-context.xml"); - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Setter Injection via XML ------------------"); - System.out.println("Processor cores : " + computer.getProcessor().getCores()); - System.out.println("Processor frequency : " + computer.getProcessor().getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory().getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory().getFormat()); - System.out.println("---------------- Setter Injection via XML ------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - - } + // Get Spring bean "computer" created + Computer computer = (Computer) context.getBean("computer"); + System.out.println("---------------- Setter Injection via XML ------------------"); + System.out.println("Processor cores : " + computer.getProcessor() + .getCores()); + System.out.println("Processor frequency : " + computer.getProcessor() + .getFrequency()); + System.out.println("Memory Size in GB : " + computer.getMemory() + .getSizeInGb()); + System.out.println("Memory format : " + computer.getMemory() + .getFormat()); + System.out.println("---------------- Setter Injection via XML ------------------"); + // Close Spring Application Context + ((ConfigurableApplicationContext) context).close(); + + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java index 4d8a3b1dd3..ed32b34729 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java @@ -6,25 +6,25 @@ import org.springframework.stereotype.Component; @Component public class Computer { - private Processor processor; - private Memory memory; + private Processor processor; + private Memory memory; - public Processor getProcessor() { - return processor; - } - - @Autowired - public void setProcessor(Processor processor) { - this.processor = processor; - } + public Processor getProcessor() { + return processor; + } - public Memory getMemory() { - return memory; - } - - @Autowired - public void setMemory(Memory memory) { - this.memory = memory; - } + @Autowired + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + @Autowired + public void setMemory(Memory memory) { + this.memory = memory; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java index 0953a42b35..ffdd63d389 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java @@ -5,15 +5,15 @@ import org.springframework.stereotype.Component; @Component public class Memory { - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Integer getSizeInGb() { - return sizeInGb; - } + private Integer sizeInGb = 16; + private String format = "DDR3"; - public String getFormat() { - return format; - } + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java index ee5ef3b6cd..9b01143bd2 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java @@ -5,15 +5,15 @@ import org.springframework.stereotype.Component; @Component public class Processor { - private Integer cores = 2; - private Double frequency = 1.4; + private Integer cores = 2; + private Double frequency = 1.4; - public Integer getCores() { - return cores; - } + public Integer getCores() { + return cores; + } - public Double getFrequency() { - return frequency; - } + public Double getFrequency() { + return frequency; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java index 01c87a6c73..e350cddee8 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java @@ -2,23 +2,23 @@ package com.baeldung.di.setter.model.bean; public class Computer { - private Processor processor; - private Memory memory; + private Processor processor; + private Memory memory; - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } + public Processor getProcessor() { + return processor; + } - public Memory getMemory() { - return memory; - } - - public void setMemory(Memory memory) { - this.memory = memory; - } + public void setProcessor(Processor processor) { + this.processor = processor; + } + + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java index bfe94aa8e7..b34052e066 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java @@ -2,15 +2,16 @@ package com.baeldung.di.setter.model.bean; public class Memory { - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Integer getSizeInGb() { - return sizeInGb; - } + private Integer sizeInGb = 16; + private String format = "DDR3"; - public String getFormat() { - return format; - } + // + public Integer getSizeInGb() { + return sizeInGb; + } + + public String getFormat() { + return format; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java index 982b56f3d0..2c9f050232 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java @@ -2,15 +2,15 @@ package com.baeldung.di.setter.model.bean; public class Processor { - private Integer cores = 2; - private Double frequency = 1.4; + private Integer cores = 2; + private Double frequency = 1.4; - public Integer getCores() { - return cores; - } + public Integer getCores() { + return cores; + } - public Double getFrequency() { - return frequency; - } + public Double getFrequency() { + return frequency; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java index 3e7fa58ea8..a88dc34d07 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java @@ -2,23 +2,23 @@ package com.baeldung.di.setter.model.xml; public class Computer { - private Processor processor; - private Memory memory; + private Processor processor; + private Memory memory; - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } + public Processor getProcessor() { + return processor; + } - public Memory getMemory() { - return memory; - } + public void setProcessor(Processor processor) { + this.processor = processor; + } - public void setMemory(Memory memory) { - this.memory = memory; - } + public Memory getMemory() { + return memory; + } + + public void setMemory(Memory memory) { + this.memory = memory; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java index cb11c59583..93667ff225 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java @@ -2,19 +2,19 @@ package com.baeldung.di.setter.model.xml; public class Memory { - private Integer sizeInGb = 16; - private String format = "DDR3"; + private Integer sizeInGb = 16; + private String format = "DDR3"; - public Memory() { + public Memory() { - } + } - public Integer getSizeInGb() { - return sizeInGb; - } + public Integer getSizeInGb() { + return sizeInGb; + } - public String getFormat() { - return format; - } + public String getFormat() { + return format; + } } diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java index 07405e13ea..1845983338 100644 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java +++ b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java @@ -2,15 +2,15 @@ package com.baeldung.di.setter.model.xml; public class Processor { - private Integer cores = 2; - private Double frequency = 1.4; + private Integer cores = 2; + private Double frequency = 1.4; - public Integer getCores() { - return cores; - } + public Integer getCores() { + return cores; + } - public Double getFrequency() { - return frequency; - } + public Double getFrequency() { + return frequency; + } } diff --git a/spring-core/src/main/resources/application-di-constructor-context.xml b/spring-core/src/main/resources/application-di-constructor-context.xml index 46d1256988..c1f2d4cdfd 100644 --- a/spring-core/src/main/resources/application-di-constructor-context.xml +++ b/spring-core/src/main/resources/application-di-constructor-context.xml @@ -6,18 +6,18 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> - + - + - + \ No newline at end of file diff --git a/spring-core/src/main/resources/application-di-setter-context.xml b/spring-core/src/main/resources/application-di-setter-context.xml index 3831041e01..658f28b3f3 100644 --- a/spring-core/src/main/resources/application-di-setter-context.xml +++ b/spring-core/src/main/resources/application-di-setter-context.xml @@ -6,7 +6,7 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> - + From 4678e01680ac858d7d5bc17e2eab9e6f17fa2fe2 Mon Sep 17 00:00:00 2001 From: gschambial Date: Fri, 10 Nov 2017 19:44:34 +0530 Subject: [PATCH 09/52] Unit Tests renamed into correct format --- ...ectionTest.java => AutowireAnnotationInjectionUnitTest.java} | 2 +- ...nInjectionTest.java => BeanAnnotationInjectionUnitTest.java} | 2 +- .../{XmlInjectionTest.java => XmlInjectionUnitTest.java} | 2 +- ...ectionTest.java => AutowireAnnotationInjectionUnitTest.java} | 2 +- ...nInjectionTest.java => BeanAnnotationInjectionUnitTest.java} | 2 +- .../setter/{XmlInjectionTest.java => XmlInjectionUnitTest.java} | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename spring-core/src/test/java/com/baeldung/di/constructor/{AutowireAnnotationInjectionTest.java => AutowireAnnotationInjectionUnitTest.java} (93%) rename spring-core/src/test/java/com/baeldung/di/constructor/{BeanAnnotationInjectionTest.java => BeanAnnotationInjectionUnitTest.java} (94%) rename spring-core/src/test/java/com/baeldung/di/constructor/{XmlInjectionTest.java => XmlInjectionUnitTest.java} (94%) rename spring-core/src/test/java/com/baeldung/di/setter/{AutowireAnnotationInjectionTest.java => AutowireAnnotationInjectionUnitTest.java} (93%) rename spring-core/src/test/java/com/baeldung/di/setter/{BeanAnnotationInjectionTest.java => BeanAnnotationInjectionUnitTest.java} (93%) rename spring-core/src/test/java/com/baeldung/di/setter/{XmlInjectionTest.java => XmlInjectionUnitTest.java} (95%) diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionUnitTest.java similarity index 93% rename from spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionTest.java rename to spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionUnitTest.java index 87cb549ace..348ac1428b 100644 --- a/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionTest.java +++ b/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionUnitTest.java @@ -10,7 +10,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import com.baeldung.di.constructor.config.SpringAutowireConstructorContext; import com.baeldung.di.constructor.model.autowire.Computer; -public class AutowireAnnotationInjectionTest { +public class AutowireAnnotationInjectionUnitTest { private ApplicationContext applicationContext; diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionUnitTest.java similarity index 94% rename from spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionTest.java rename to spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionUnitTest.java index 61f718d4ba..3eb276428c 100644 --- a/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionTest.java +++ b/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionUnitTest.java @@ -10,7 +10,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import com.baeldung.di.constructor.config.SpringBeanConstructorContext; import com.baeldung.di.constructor.model.bean.Computer; -public class BeanAnnotationInjectionTest { +public class BeanAnnotationInjectionUnitTest { private ApplicationContext applicationContext; diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionUnitTest.java similarity index 94% rename from spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionTest.java rename to spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionUnitTest.java index 4787c19cbf..cfcc7ed56e 100644 --- a/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionTest.java +++ b/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionUnitTest.java @@ -9,7 +9,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import com.baeldung.di.constructor.model.xml.Computer; -public class XmlInjectionTest { +public class XmlInjectionUnitTest { private ApplicationContext applicationContext; diff --git a/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionUnitTest.java similarity index 93% rename from spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionTest.java rename to spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionUnitTest.java index 036c6826e3..fc8e58f08b 100644 --- a/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionTest.java +++ b/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionUnitTest.java @@ -10,7 +10,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import com.baeldung.di.setter.config.SpringAutowireSetterContext; import com.baeldung.di.setter.model.autowire.Computer; -public class AutowireAnnotationInjectionTest { +public class AutowireAnnotationInjectionUnitTest { private ApplicationContext applicationContext; diff --git a/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionUnitTest.java similarity index 93% rename from spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionTest.java rename to spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionUnitTest.java index 53f1d4e10e..c89c1239ba 100644 --- a/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionTest.java +++ b/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionUnitTest.java @@ -10,7 +10,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import com.baeldung.di.setter.config.SpringBeanSetterContext; import com.baeldung.di.setter.model.bean.Computer; -public class BeanAnnotationInjectionTest { +public class BeanAnnotationInjectionUnitTest { private ApplicationContext applicationContext; diff --git a/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionTest.java b/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionUnitTest.java similarity index 95% rename from spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionTest.java rename to spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionUnitTest.java index 52452be119..0f38b46194 100644 --- a/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionTest.java +++ b/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionUnitTest.java @@ -9,7 +9,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import com.baeldung.di.setter.model.xml.Computer; -public class XmlInjectionTest { +public class XmlInjectionUnitTest { private ApplicationContext applicationContext; From 40ceddea2bdc3cf46caa622b19ba1350bd52f055 Mon Sep 17 00:00:00 2001 From: gschambial Date: Mon, 13 Nov 2017 21:01:06 +0530 Subject: [PATCH 10/52] BAEL-1331: Quick Example: Comparator vs Comparable in Java Source code and Unit Tests added. --- .../java/com/baeldung/comparable/Player.java | 51 +++++++++++++++++++ .../com/baeldung/comparable/PlayerSorter.java | 24 +++++++++ .../java/com/baeldung/comparator/Player.java | 46 +++++++++++++++++ .../comparator/PlayerAgeComparator.java | 12 +++++ .../baeldung/comparator/PlayerAgeSorter.java | 26 ++++++++++ .../comparator/PlayerRankingComparator.java | 12 +++++ .../comparator/PlayerRankingSorter.java | 26 ++++++++++ .../comparable/ComparableUnitTest.java | 26 ++++++++++ .../comparator/ComparatorUnitTest.java | 42 +++++++++++++++ 9 files changed, 265 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/comparable/Player.java create mode 100644 core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java create mode 100644 core-java/src/main/java/com/baeldung/comparator/Player.java create mode 100644 core-java/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java create mode 100644 core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java create mode 100644 core-java/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java create mode 100644 core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java create mode 100644 core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java create mode 100644 core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java diff --git a/core-java/src/main/java/com/baeldung/comparable/Player.java b/core-java/src/main/java/com/baeldung/comparable/Player.java new file mode 100644 index 0000000000..68a78980f3 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/comparable/Player.java @@ -0,0 +1,51 @@ +package com.baeldung.comparable; + +public class Player implements Comparable { + + private int ranking; + + private String name; + + private int age; + + public Player(int ranking, String name, int age) { + this.ranking = ranking; + this.name = name; + this.age = age; + } + + public int getRanking() { + return ranking; + } + + public void setRanking(int ranking) { + this.ranking = ranking; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return this.name; + } + + @Override + public int compareTo(Player otherPlayer) { + return (this.getRanking() - otherPlayer.getRanking()); + } + +} diff --git a/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java new file mode 100644 index 0000000000..1f64a5eb43 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java @@ -0,0 +1,24 @@ +package com.baeldung.comparable; + +import java.util.ArrayList; +import java.util.Collections; + +public class PlayerSorter { + + public static void main(String[] args) { + + ArrayList footballTeam = new ArrayList(); + Player player1 = new Player(59, "John", 20); + Player player2 = new Player(67, "Roger", 22); + Player player3 = new Player(45, "Steven", 24); + footballTeam.add(player1); + footballTeam.add(player2); + footballTeam.add(player3); + + System.out.println("Before Sorting : " + footballTeam); + Collections.sort(footballTeam); + System.out.println("After Sorting : " + footballTeam); + + } + +} diff --git a/core-java/src/main/java/com/baeldung/comparator/Player.java b/core-java/src/main/java/com/baeldung/comparator/Player.java new file mode 100644 index 0000000000..e6e9ee0db6 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/comparator/Player.java @@ -0,0 +1,46 @@ +package com.baeldung.comparator; + +public class Player { + + private int ranking; + + private String name; + + private int age; + + public Player(int ranking, String name, int age) { + this.ranking = ranking; + this.name = name; + this.age = age; + } + + public int getRanking() { + return ranking; + } + + public void setRanking(int ranking) { + this.ranking = ranking; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return this.name; + } + +} diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java new file mode 100644 index 0000000000..d2e7ca1f42 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java @@ -0,0 +1,12 @@ +package com.baeldung.comparator; + +import java.util.Comparator; + +public class PlayerAgeComparator implements Comparator { + + @Override + public int compare(Player firstPlayer, Player secondPlayer) { + return (firstPlayer.getAge() - secondPlayer.getAge()); + } + +} diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java new file mode 100644 index 0000000000..e7d3fd1264 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java @@ -0,0 +1,26 @@ +package com.baeldung.comparator; + +import java.util.ArrayList; +import java.util.Collections; + +public class PlayerAgeSorter { + + public static void main(String[] args) { + + ArrayList footballTeam = new ArrayList(); + Player player1 = new Player(59, "John", 22); + Player player2 = new Player(67, "Roger", 20); + Player player3 = new Player(45, "Steven", 24); + footballTeam.add(player1); + footballTeam.add(player2); + footballTeam.add(player3); + + System.out.println("Before Sorting : " + footballTeam); + //Instance of PlayerAgeComparator + PlayerAgeComparator playerComparator = new PlayerAgeComparator(); + Collections.sort(footballTeam, playerComparator); + System.out.println("After Sorting by age : " + footballTeam); + + } + +} diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java new file mode 100644 index 0000000000..2d42698843 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java @@ -0,0 +1,12 @@ +package com.baeldung.comparator; + +import java.util.Comparator; + +public class PlayerRankingComparator implements Comparator { + + @Override + public int compare(Player firstPlayer, Player secondPlayer) { + return (firstPlayer.getRanking() - secondPlayer.getRanking()); + } + +} diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java new file mode 100644 index 0000000000..a6a971f99e --- /dev/null +++ b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java @@ -0,0 +1,26 @@ +package com.baeldung.comparator; + +import java.util.ArrayList; +import java.util.Collections; + +public class PlayerRankingSorter { + + public static void main(String[] args) { + + ArrayList footballTeam = new ArrayList(); + Player player1 = new Player(59, "John", 22); + Player player2 = new Player(67, "Roger", 20); + Player player3 = new Player(45, "Steven", 40); + footballTeam.add(player1); + footballTeam.add(player2); + footballTeam.add(player3); + + System.out.println("Before Sorting : " + footballTeam); + //Instance of PlayerRankingComparator + PlayerRankingComparator playerComparator = new PlayerRankingComparator(); + Collections.sort(footballTeam, playerComparator); + System.out.println("After Sorting by ranking : " + footballTeam); + + } + +} diff --git a/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java new file mode 100644 index 0000000000..c65c2c3740 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.comparable; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Collections; + +import org.junit.Test; + +public class ComparableUnitTest { + + @Test + public void whenUsingComparable_thenSortedList() { + ArrayList footballTeam = new ArrayList(); + Player player1 = new Player(59, "John", 20); + Player player2 = new Player(67, "Roger", 22); + Player player3 = new Player(45, "Steven", 24); + footballTeam.add(player1); + footballTeam.add(player2); + footballTeam.add(player3); + Collections.sort(footballTeam); + assertEquals(footballTeam.get(0).getName(), "Steven"); + assertEquals(footballTeam.get(2).getRanking(), 67); + } + +} diff --git a/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java new file mode 100644 index 0000000000..78f0e0bf33 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java @@ -0,0 +1,42 @@ +package com.baeldung.comparator; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Collections; + +import org.junit.Test; + +public class ComparatorUnitTest { + + @Test + public void whenUsingRankingComparator_thenSortedList() { + ArrayList footballTeam = new ArrayList(); + Player player1 = new Player(59, "John", 20); + Player player2 = new Player(67, "Roger", 22); + Player player3 = new Player(45, "Steven", 24); + footballTeam.add(player1); + footballTeam.add(player2); + footballTeam.add(player3); + PlayerRankingComparator playerComparator = new PlayerRankingComparator(); + Collections.sort(footballTeam, playerComparator); + assertEquals(footballTeam.get(0).getName(), "Steven"); + assertEquals(footballTeam.get(2).getRanking(), 67); + } + + @Test + public void whenUsingAgeComparator_thenSortedList() { + ArrayList footballTeam = new ArrayList(); + Player player1 = new Player(59, "John", 20); + Player player2 = new Player(67, "Roger", 22); + Player player3 = new Player(45, "Steven", 24); + footballTeam.add(player1); + footballTeam.add(player2); + footballTeam.add(player3); + PlayerAgeComparator playerComparator = new PlayerAgeComparator(); + Collections.sort(footballTeam, playerComparator); + assertEquals(footballTeam.get(0).getName(), "John"); + assertEquals(footballTeam.get(2).getRanking(), 45); + } + +} From 416bd4a9d5b32585bb9f968f481a266ff0c97df4 Mon Sep 17 00:00:00 2001 From: gschambial Date: Mon, 13 Nov 2017 22:48:09 +0530 Subject: [PATCH 11/52] Removed evaluation article (Dependency Injection) from master branch. --- .../SpringAutowireConstructorContext.java | 10 ------ .../config/SpringBeanConstructorContext.java | 28 --------------- .../factory/ComputerAutowireFactory.java | 32 ----------------- .../factory/ComputerBeanFactory.java | 33 ------------------ .../factory/ComputerXmlFactory.java | 33 ------------------ .../constructor/model/autowire/Computer.java | 34 ------------------- .../di/constructor/model/autowire/Memory.java | 19 ----------- .../constructor/model/autowire/Processor.java | 19 ----------- .../di/constructor/model/bean/Computer.java | 29 ---------------- .../di/constructor/model/bean/Memory.java | 16 --------- .../di/constructor/model/bean/Processor.java | 16 --------- .../di/constructor/model/xml/Computer.java | 29 ---------------- .../di/constructor/model/xml/Memory.java | 20 ----------- .../di/constructor/model/xml/Processor.java | 16 --------- .../config/SpringAutowireSetterContext.java | 10 ------ .../config/SpringBeanSetterContext.java | 31 ----------------- .../factory/ComputerAutowireFactory.java | 32 ----------------- .../setter/factory/ComputerBeanFactory.java | 33 ------------------ .../di/setter/factory/ComputerXmlFactory.java | 32 ----------------- .../di/setter/model/autowire/Computer.java | 30 ---------------- .../di/setter/model/autowire/Memory.java | 19 ----------- .../di/setter/model/autowire/Processor.java | 19 ----------- .../di/setter/model/bean/Computer.java | 24 ------------- .../baeldung/di/setter/model/bean/Memory.java | 17 ---------- .../di/setter/model/bean/Processor.java | 16 --------- .../di/setter/model/xml/Computer.java | 24 ------------- .../baeldung/di/setter/model/xml/Memory.java | 20 ----------- .../di/setter/model/xml/Processor.java | 16 --------- .../application-di-constructor-context.xml | 23 ------------- .../application-di-setter-context.xml | 22 ------------ .../AutowireAnnotationInjectionUnitTest.java | 28 --------------- .../BeanAnnotationInjectionUnitTest.java | 28 --------------- .../di/constructor/XmlInjectionUnitTest.java | 27 --------------- .../AutowireAnnotationInjectionUnitTest.java | 28 --------------- .../BeanAnnotationInjectionUnitTest.java | 28 --------------- .../di/setter/XmlInjectionUnitTest.java | 27 --------------- 36 files changed, 868 deletions(-) delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java delete mode 100644 spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java delete mode 100644 spring-core/src/main/resources/application-di-constructor-context.xml delete mode 100644 spring-core/src/main/resources/application-di-setter-context.xml delete mode 100644 spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionUnitTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionUnitTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionUnitTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionUnitTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionUnitTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionUnitTest.java diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java deleted file mode 100644 index ae67bc7e5e..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringAutowireConstructorContext.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.di.constructor.config; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = { "com.baeldung.di.constructor.model.autowire" }) -public class SpringAutowireConstructorContext { - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java b/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java deleted file mode 100644 index 670f18cb9c..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/config/SpringBeanConstructorContext.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.di.constructor.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.baeldung.di.constructor.model.bean.Computer; -import com.baeldung.di.constructor.model.bean.Memory; -import com.baeldung.di.constructor.model.bean.Processor; - -@Configuration -public class SpringBeanConstructorContext { - - @Bean - public Computer computer() { - return new Computer(processor(), memory()); - } - - @Bean - public Processor processor() { - return new Processor(); - } - - @Bean - public Memory memory() { - return new Memory(); - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java deleted file mode 100644 index 2a13adf250..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerAutowireFactory.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.di.constructor.factory; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.constructor.config.SpringAutowireConstructorContext; -import com.baeldung.di.constructor.model.autowire.Computer; - -public class ComputerAutowireFactory { - - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireConstructorContext.class); - - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Constructor Injection via @Autowire------------------"); - System.out.println("Processor cores : " + computer.getProcessor() - .getCores()); - System.out.println("Processor frequency : " + computer.getProcessor() - .getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory() - .getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory() - .getFormat()); - System.out.println("---------------- Constructor Injection via @Autowire------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java deleted file mode 100644 index 713ea82b00..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerBeanFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.di.constructor.factory; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.constructor.config.SpringBeanConstructorContext; -import com.baeldung.di.constructor.model.bean.Computer; - -public class ComputerBeanFactory { - - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanConstructorContext.class); - - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Constructor Injection via @Bean ------------------"); - System.out.println("Processor cores : " + computer.getProcessor() - .getCores()); - System.out.println("Processor frequency : " + computer.getProcessor() - .getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory() - .getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory() - .getFormat()); - System.out.println("---------------- Constructor Injection via @Bean ------------------"); - - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java b/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java deleted file mode 100644 index afe5fa281b..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/factory/ComputerXmlFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.di.constructor.factory; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.di.constructor.model.xml.Computer; - -public class ComputerXmlFactory { - - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new ClassPathXmlApplicationContext("application-di-constructor-context.xml"); - - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Constructor Injection via XML ------------------"); - System.out.println("Processor cores : " + computer.getProcessor() - .getCores()); - System.out.println("Processor frequency : " + computer.getProcessor() - .getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory() - .getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory() - .getFormat()); - System.out.println("---------------- Constructor Injection via XML ------------------"); - - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java deleted file mode 100644 index 1dabfd287e..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Computer.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.di.constructor.model.autowire; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class Computer { - - private Processor processor; - private Memory memory; - - @Autowired - public Computer(Processor processor, Memory memory) { - this.processor = processor; - this.memory = memory; - } - - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } - - public Memory getMemory() { - return memory; - } - - public void setMemory(Memory memory) { - this.memory = memory; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java deleted file mode 100644 index d1faecc569..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Memory.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.di.constructor.model.autowire; - -import org.springframework.stereotype.Component; - -@Component -public class Memory { - - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Integer getSizeInGb() { - return sizeInGb; - } - - public String getFormat() { - return format; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java deleted file mode 100644 index 7de9d2bf6a..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/autowire/Processor.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.di.constructor.model.autowire; - -import org.springframework.stereotype.Component; - -@Component -public class Processor { - - private Integer cores = 2; - private Double frequency = 1.4; - - public Integer getCores() { - return cores; - } - - public Double getFrequency() { - return frequency; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java deleted file mode 100644 index 74ec89ce0c..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Computer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.di.constructor.model.bean; - -public class Computer { - - private Processor processor; - private Memory memory; - - public Computer(Processor processor, Memory memory) { - this.processor = processor; - this.memory = memory; - } - - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } - - public Memory getMemory() { - return memory; - } - - public void setMemory(Memory memory) { - this.memory = memory; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java deleted file mode 100644 index 18d4eaf948..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Memory.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.di.constructor.model.bean; - -public class Memory { - - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Integer getSizeInGb() { - return sizeInGb; - } - - public String getFormat() { - return format; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java deleted file mode 100644 index 9dd719c872..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/bean/Processor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.di.constructor.model.bean; - -public class Processor { - - private Integer cores = 2; - private Double frequency = 1.4; - - public Integer getCores() { - return cores; - } - - public Double getFrequency() { - return frequency; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java deleted file mode 100644 index 66c39c66b7..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Computer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.di.constructor.model.xml; - -public class Computer { - - private Processor processor; - private Memory memory; - - public Computer(Processor processor, Memory memory) { - this.processor = processor; - this.memory = memory; - } - - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } - - public Memory getMemory() { - return memory; - } - - public void setMemory(Memory memory) { - this.memory = memory; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java deleted file mode 100644 index 7b4f4fb697..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Memory.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.di.constructor.model.xml; - -public class Memory { - - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Memory() { - - } - - public Integer getSizeInGb() { - return sizeInGb; - } - - public String getFormat() { - return format; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java b/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java deleted file mode 100644 index 4e783042fe..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/constructor/model/xml/Processor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.di.constructor.model.xml; - -public class Processor { - - private Integer cores = 2; - private Double frequency = 1.4; - - public Integer getCores() { - return cores; - } - - public Double getFrequency() { - return frequency; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java deleted file mode 100644 index 9e1d24fc61..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringAutowireSetterContext.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.di.setter.config; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = { "com.baeldung.di.setter.model.autowire" }) -public class SpringAutowireSetterContext { - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java b/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java deleted file mode 100644 index 14767fb0ca..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/config/SpringBeanSetterContext.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.di.setter.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.baeldung.di.setter.model.bean.Computer; -import com.baeldung.di.setter.model.bean.Memory; -import com.baeldung.di.setter.model.bean.Processor; - -@Configuration -public class SpringBeanSetterContext { - - @Bean - public Computer computer() { - Computer computer = new Computer(); - computer.setProcessor(processor()); - computer.setMemory(memory()); - return computer; - } - - @Bean - public Processor processor() { - return new Processor(); - } - - @Bean - public Memory memory() { - return new Memory(); - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java deleted file mode 100644 index ef1ac83530..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerAutowireFactory.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.di.setter.factory; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.setter.config.SpringAutowireSetterContext; -import com.baeldung.di.setter.model.autowire.Computer; - -public class ComputerAutowireFactory { - - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringAutowireSetterContext.class); - - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Setter Injection via @Autowire ------------------"); - System.out.println("Processor cores : " + computer.getProcessor() - .getCores()); - System.out.println("Processor frequency : " + computer.getProcessor() - .getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory() - .getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory() - .getFormat()); - System.out.println("---------------- Setter Injection via @Autowire ------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java deleted file mode 100644 index 87f49bf4cf..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerBeanFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.di.setter.factory; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.setter.config.SpringBeanSetterContext; -import com.baeldung.di.setter.model.bean.Computer; - -public class ComputerBeanFactory { - - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeanSetterContext.class); - - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Setter Injection via @Bean ------------------"); - System.out.println("Processor cores : " + computer.getProcessor() - .getCores()); - System.out.println("Processor frequency : " + computer.getProcessor() - .getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory() - .getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory() - .getFormat()); - System.out.println("---------------- Setter Injection via @Bean ------------------"); - - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java b/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java deleted file mode 100644 index 01af29905c..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/factory/ComputerXmlFactory.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.di.setter.factory; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.di.setter.model.xml.Computer; - -public class ComputerXmlFactory { - - public static void main(String[] args) { - // Create Spring Application Context - ApplicationContext context = new ClassPathXmlApplicationContext("application-setter-context.xml"); - - // Get Spring bean "computer" created - Computer computer = (Computer) context.getBean("computer"); - System.out.println("---------------- Setter Injection via XML ------------------"); - System.out.println("Processor cores : " + computer.getProcessor() - .getCores()); - System.out.println("Processor frequency : " + computer.getProcessor() - .getFrequency()); - System.out.println("Memory Size in GB : " + computer.getMemory() - .getSizeInGb()); - System.out.println("Memory format : " + computer.getMemory() - .getFormat()); - System.out.println("---------------- Setter Injection via XML ------------------"); - // Close Spring Application Context - ((ConfigurableApplicationContext) context).close(); - - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java deleted file mode 100644 index ed32b34729..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Computer.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.di.setter.model.autowire; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class Computer { - - private Processor processor; - private Memory memory; - - public Processor getProcessor() { - return processor; - } - - @Autowired - public void setProcessor(Processor processor) { - this.processor = processor; - } - - public Memory getMemory() { - return memory; - } - - @Autowired - public void setMemory(Memory memory) { - this.memory = memory; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java deleted file mode 100644 index ffdd63d389..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Memory.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.di.setter.model.autowire; - -import org.springframework.stereotype.Component; - -@Component -public class Memory { - - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Integer getSizeInGb() { - return sizeInGb; - } - - public String getFormat() { - return format; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java deleted file mode 100644 index 9b01143bd2..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/autowire/Processor.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.di.setter.model.autowire; - -import org.springframework.stereotype.Component; - -@Component -public class Processor { - - private Integer cores = 2; - private Double frequency = 1.4; - - public Integer getCores() { - return cores; - } - - public Double getFrequency() { - return frequency; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java deleted file mode 100644 index e350cddee8..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Computer.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.di.setter.model.bean; - -public class Computer { - - private Processor processor; - private Memory memory; - - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } - - public Memory getMemory() { - return memory; - } - - public void setMemory(Memory memory) { - this.memory = memory; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java deleted file mode 100644 index b34052e066..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Memory.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.di.setter.model.bean; - -public class Memory { - - private Integer sizeInGb = 16; - private String format = "DDR3"; - - // - public Integer getSizeInGb() { - return sizeInGb; - } - - public String getFormat() { - return format; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java deleted file mode 100644 index 2c9f050232..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/bean/Processor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.di.setter.model.bean; - -public class Processor { - - private Integer cores = 2; - private Double frequency = 1.4; - - public Integer getCores() { - return cores; - } - - public Double getFrequency() { - return frequency; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java deleted file mode 100644 index a88dc34d07..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Computer.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.di.setter.model.xml; - -public class Computer { - - private Processor processor; - private Memory memory; - - public Processor getProcessor() { - return processor; - } - - public void setProcessor(Processor processor) { - this.processor = processor; - } - - public Memory getMemory() { - return memory; - } - - public void setMemory(Memory memory) { - this.memory = memory; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java deleted file mode 100644 index 93667ff225..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Memory.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.di.setter.model.xml; - -public class Memory { - - private Integer sizeInGb = 16; - private String format = "DDR3"; - - public Memory() { - - } - - public Integer getSizeInGb() { - return sizeInGb; - } - - public String getFormat() { - return format; - } - -} diff --git a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java b/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java deleted file mode 100644 index 1845983338..0000000000 --- a/spring-core/src/main/java/com/baeldung/di/setter/model/xml/Processor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.di.setter.model.xml; - -public class Processor { - - private Integer cores = 2; - private Double frequency = 1.4; - - public Integer getCores() { - return cores; - } - - public Double getFrequency() { - return frequency; - } - -} diff --git a/spring-core/src/main/resources/application-di-constructor-context.xml b/spring-core/src/main/resources/application-di-constructor-context.xml deleted file mode 100644 index c1f2d4cdfd..0000000000 --- a/spring-core/src/main/resources/application-di-constructor-context.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-core/src/main/resources/application-di-setter-context.xml b/spring-core/src/main/resources/application-di-setter-context.xml deleted file mode 100644 index 658f28b3f3..0000000000 --- a/spring-core/src/main/resources/application-di-setter-context.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionUnitTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionUnitTest.java deleted file mode 100644 index 348ac1428b..0000000000 --- a/spring-core/src/test/java/com/baeldung/di/constructor/AutowireAnnotationInjectionUnitTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.di.constructor; - -import static org.junit.Assert.assertNotNull; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.constructor.config.SpringAutowireConstructorContext; -import com.baeldung.di.constructor.model.autowire.Computer; - -public class AutowireAnnotationInjectionUnitTest { - - private ApplicationContext applicationContext; - - @Before - public void setUp() throws Exception { - applicationContext = new AnnotationConfigApplicationContext(SpringAutowireConstructorContext.class); - } - - @Test - public void getComputer_() { - final Computer computer = applicationContext.getBean("computer", Computer.class); - assertNotNull(computer); - } - -} diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionUnitTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionUnitTest.java deleted file mode 100644 index 3eb276428c..0000000000 --- a/spring-core/src/test/java/com/baeldung/di/constructor/BeanAnnotationInjectionUnitTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.di.constructor; - -import static org.junit.Assert.assertNotNull; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.constructor.config.SpringBeanConstructorContext; -import com.baeldung.di.constructor.model.bean.Computer; - -public class BeanAnnotationInjectionUnitTest { - - private ApplicationContext applicationContext; - - @Before - public void setUp() throws Exception { - applicationContext = new AnnotationConfigApplicationContext(SpringBeanConstructorContext.class); - } - - @Test - public void getComputer_() { - final Computer computer = applicationContext.getBean("computer", Computer.class); - assertNotNull(computer); - } - -} diff --git a/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionUnitTest.java b/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionUnitTest.java deleted file mode 100644 index cfcc7ed56e..0000000000 --- a/spring-core/src/test/java/com/baeldung/di/constructor/XmlInjectionUnitTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.di.constructor; - -import static org.junit.Assert.assertNotNull; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.di.constructor.model.xml.Computer; - -public class XmlInjectionUnitTest { - - private ApplicationContext applicationContext; - - @Before - public void setUp() throws Exception { - applicationContext = new ClassPathXmlApplicationContext("application-di-constructor-context.xml"); - } - - @Test - public void getComputer_() { - final Computer computer = applicationContext.getBean("computer", Computer.class); - assertNotNull(computer); - } - -} diff --git a/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionUnitTest.java b/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionUnitTest.java deleted file mode 100644 index fc8e58f08b..0000000000 --- a/spring-core/src/test/java/com/baeldung/di/setter/AutowireAnnotationInjectionUnitTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.di.setter; - -import static org.junit.Assert.assertNotNull; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.setter.config.SpringAutowireSetterContext; -import com.baeldung.di.setter.model.autowire.Computer; - -public class AutowireAnnotationInjectionUnitTest { - - private ApplicationContext applicationContext; - - @Before - public void setUp() throws Exception { - applicationContext = new AnnotationConfigApplicationContext(SpringAutowireSetterContext.class); - } - - @Test - public void getComputer_() { - final Computer computer = applicationContext.getBean("computer", Computer.class); - assertNotNull(computer); - } - -} diff --git a/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionUnitTest.java b/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionUnitTest.java deleted file mode 100644 index c89c1239ba..0000000000 --- a/spring-core/src/test/java/com/baeldung/di/setter/BeanAnnotationInjectionUnitTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.di.setter; - -import static org.junit.Assert.assertNotNull; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.di.setter.config.SpringBeanSetterContext; -import com.baeldung.di.setter.model.bean.Computer; - -public class BeanAnnotationInjectionUnitTest { - - private ApplicationContext applicationContext; - - @Before - public void setUp() throws Exception { - applicationContext = new AnnotationConfigApplicationContext(SpringBeanSetterContext.class); - } - - @Test - public void getComputer_() { - final Computer computer = applicationContext.getBean("computer", Computer.class); - assertNotNull(computer); - } - -} diff --git a/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionUnitTest.java b/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionUnitTest.java deleted file mode 100644 index 0f38b46194..0000000000 --- a/spring-core/src/test/java/com/baeldung/di/setter/XmlInjectionUnitTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.di.setter; - -import static org.junit.Assert.assertNotNull; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.di.setter.model.xml.Computer; - -public class XmlInjectionUnitTest { - - private ApplicationContext applicationContext; - - @Before - public void setUp() throws Exception { - applicationContext = new ClassPathXmlApplicationContext("application-di-setter-context.xml"); - } - - @Test - public void getComputer_() { - final Computer computer = applicationContext.getBean("computer", Computer.class); - assertNotNull(computer); - } - -} From 1c36955757ef39332307702196667f22b59294b1 Mon Sep 17 00:00:00 2001 From: gschambial Date: Mon, 13 Nov 2017 23:01:05 +0530 Subject: [PATCH 12/52] Removed addition classpath changes from master branch. --- spring-boot/.factorypath | 121 ++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 66 deletions(-) diff --git a/spring-boot/.factorypath b/spring-boot/.factorypath index 97062c74a4..aa15485f5c 100644 --- a/spring-boot/.factorypath +++ b/spring-boot/.factorypath @@ -1,30 +1,46 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + @@ -32,105 +48,81 @@ + - - - - - + - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - + - + @@ -141,10 +133,7 @@ - - - @@ -154,7 +143,7 @@ - + From d954258a809078b84ea6c16d7c68bf7fdf40f6a9 Mon Sep 17 00:00:00 2001 From: gschambial Date: Tue, 14 Nov 2017 10:25:42 +0530 Subject: [PATCH 13/52] 1. Moved commmon code to @Before method in ComparatorUnitTest. 2. Changed ArrayList to List for declarations --- .../com/baeldung/comparable/PlayerSorter.java | 3 ++- .../baeldung/comparator/PlayerAgeSorter.java | 3 ++- .../comparator/PlayerRankingSorter.java | 3 ++- .../comparable/ComparableUnitTest.java | 3 ++- .../comparator/ComparatorUnitTest.java | 21 ++++++++++--------- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java index 1f64a5eb43..eeb2c7a883 100644 --- a/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java +++ b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java @@ -2,12 +2,13 @@ package com.baeldung.comparable; import java.util.ArrayList; import java.util.Collections; +import java.util.List; public class PlayerSorter { public static void main(String[] args) { - ArrayList footballTeam = new ArrayList(); + List footballTeam = new ArrayList(); Player player1 = new Player(59, "John", 20); Player player2 = new Player(67, "Roger", 22); Player player3 = new Player(45, "Steven", 24); diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java index e7d3fd1264..3bbbcddb80 100644 --- a/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java +++ b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java @@ -2,12 +2,13 @@ package com.baeldung.comparator; import java.util.ArrayList; import java.util.Collections; +import java.util.List; public class PlayerAgeSorter { public static void main(String[] args) { - ArrayList footballTeam = new ArrayList(); + List footballTeam = new ArrayList(); Player player1 = new Player(59, "John", 22); Player player2 = new Player(67, "Roger", 20); Player player3 = new Player(45, "Steven", 24); diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java index a6a971f99e..581585fb7e 100644 --- a/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java +++ b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java @@ -2,12 +2,13 @@ package com.baeldung.comparator; import java.util.ArrayList; import java.util.Collections; +import java.util.List; public class PlayerRankingSorter { public static void main(String[] args) { - ArrayList footballTeam = new ArrayList(); + List footballTeam = new ArrayList(); Player player1 = new Player(59, "John", 22); Player player2 = new Player(67, "Roger", 20); Player player3 = new Player(45, "Steven", 40); diff --git a/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java index c65c2c3740..2b45dd0391 100644 --- a/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java +++ b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java @@ -4,6 +4,7 @@ import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import org.junit.Test; @@ -11,7 +12,7 @@ public class ComparableUnitTest { @Test public void whenUsingComparable_thenSortedList() { - ArrayList footballTeam = new ArrayList(); + List footballTeam = new ArrayList(); Player player1 = new Player(59, "John", 20); Player player2 = new Player(67, "Roger", 22); Player player3 = new Player(45, "Steven", 24); diff --git a/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java index 78f0e0bf33..769986edec 100644 --- a/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java +++ b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java @@ -4,20 +4,28 @@ import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import org.junit.Before; import org.junit.Test; public class ComparatorUnitTest { - @Test - public void whenUsingRankingComparator_thenSortedList() { - ArrayList footballTeam = new ArrayList(); + List footballTeam; + + @Before + public void setUp(){ + footballTeam = new ArrayList(); Player player1 = new Player(59, "John", 20); Player player2 = new Player(67, "Roger", 22); Player player3 = new Player(45, "Steven", 24); footballTeam.add(player1); footballTeam.add(player2); footballTeam.add(player3); + } + + @Test + public void whenUsingRankingComparator_thenSortedList() { PlayerRankingComparator playerComparator = new PlayerRankingComparator(); Collections.sort(footballTeam, playerComparator); assertEquals(footballTeam.get(0).getName(), "Steven"); @@ -26,13 +34,6 @@ public class ComparatorUnitTest { @Test public void whenUsingAgeComparator_thenSortedList() { - ArrayList footballTeam = new ArrayList(); - Player player1 = new Player(59, "John", 20); - Player player2 = new Player(67, "Roger", 22); - Player player3 = new Player(45, "Steven", 24); - footballTeam.add(player1); - footballTeam.add(player2); - footballTeam.add(player3); PlayerAgeComparator playerComparator = new PlayerAgeComparator(); Collections.sort(footballTeam, playerComparator); assertEquals(footballTeam.get(0).getName(), "John"); From 66a1c32e1329e0b014e13780c7e43ddf685e8c7f Mon Sep 17 00:00:00 2001 From: gschambial Date: Fri, 24 Nov 2017 13:48:55 +0530 Subject: [PATCH 14/52] 1. Java 8 Comparators example added 2. Comparator.comparing example added --- .../com/baeldung/comparable/PlayerSorter.java | 6 +- .../comparable/ComparableUnitTest.java | 8 ++- .../comparator/ComparatorUnitTest.java | 22 ++++--- .../comparator/Java8ComparatorUnitTest.java | 63 +++++++++++++++++++ 4 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java diff --git a/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java index eeb2c7a883..a9b883f579 100644 --- a/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java +++ b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java @@ -7,7 +7,7 @@ import java.util.List; public class PlayerSorter { public static void main(String[] args) { - + List footballTeam = new ArrayList(); Player player1 = new Player(59, "John", 20); Player player2 = new Player(67, "Roger", 22); @@ -15,11 +15,11 @@ public class PlayerSorter { footballTeam.add(player1); footballTeam.add(player2); footballTeam.add(player3); - + System.out.println("Before Sorting : " + footballTeam); Collections.sort(footballTeam); System.out.println("After Sorting : " + footballTeam); - + } } diff --git a/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java index 2b45dd0391..e8745884b8 100644 --- a/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java +++ b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java @@ -9,7 +9,7 @@ import java.util.List; import org.junit.Test; public class ComparableUnitTest { - + @Test public void whenUsingComparable_thenSortedList() { List footballTeam = new ArrayList(); @@ -20,8 +20,10 @@ public class ComparableUnitTest { footballTeam.add(player2); footballTeam.add(player3); Collections.sort(footballTeam); - assertEquals(footballTeam.get(0).getName(), "Steven"); - assertEquals(footballTeam.get(2).getRanking(), 67); + assertEquals(footballTeam.get(0) + .getName(), "Steven"); + assertEquals(footballTeam.get(2) + .getRanking(), 67); } } diff --git a/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java index 769986edec..5b7ec3bfe4 100644 --- a/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java +++ b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java @@ -10,11 +10,11 @@ import org.junit.Before; import org.junit.Test; public class ComparatorUnitTest { - + List footballTeam; - + @Before - public void setUp(){ + public void setUp() { footballTeam = new ArrayList(); Player player1 = new Player(59, "John", 20); Player player2 = new Player(67, "Roger", 22); @@ -23,21 +23,25 @@ public class ComparatorUnitTest { footballTeam.add(player2); footballTeam.add(player3); } - + @Test public void whenUsingRankingComparator_thenSortedList() { PlayerRankingComparator playerComparator = new PlayerRankingComparator(); Collections.sort(footballTeam, playerComparator); - assertEquals(footballTeam.get(0).getName(), "Steven"); - assertEquals(footballTeam.get(2).getRanking(), 67); + assertEquals(footballTeam.get(0) + .getName(), "Steven"); + assertEquals(footballTeam.get(2) + .getRanking(), 67); } - + @Test public void whenUsingAgeComparator_thenSortedList() { PlayerAgeComparator playerComparator = new PlayerAgeComparator(); Collections.sort(footballTeam, playerComparator); - assertEquals(footballTeam.get(0).getName(), "John"); - assertEquals(footballTeam.get(2).getRanking(), 45); + assertEquals(footballTeam.get(0) + .getName(), "John"); + assertEquals(footballTeam.get(2) + .getRanking(), 45); } } diff --git a/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java b/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java new file mode 100644 index 0000000000..b804573b51 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java @@ -0,0 +1,63 @@ +package com.baeldung.comparator; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class Java8ComparatorUnitTest { + + List footballTeam; + + @Before + public void setUp() { + footballTeam = new ArrayList(); + Player player1 = new Player(59, "John", 20); + Player player2 = new Player(67, "Roger", 22); + Player player3 = new Player(45, "Steven", 24); + footballTeam.add(player1); + footballTeam.add(player2); + footballTeam.add(player3); + } + + @Test + public void whenComparing_UsingJava8_thenSorted() { + System.out.println("************** Java 8 Comaparator **************"); + Comparator byRanking = new Comparator() { + + @Override + public int compare(Player player1, Player player2) { + return player1.getRanking() - player2.getRanking(); + } + }; + + System.out.println("Before Sorting : " + footballTeam); + Collections.sort(footballTeam, byRanking); + System.out.println("After Sorting : " + footballTeam); + assertEquals(footballTeam.get(0) + .getName(), "Steven"); + assertEquals(footballTeam.get(2) + .getRanking(), 67); + } + + @Test + public void whenComparing_UsingComparatorComparing_thenSorted() { + System.out.println("********* Comaparator.comparing method *********"); + Comparator byRanking = + (Player player1, Player player2)->player1.getRanking()-player2.getRanking(); + + System.out.println("Before Sorting : " + footballTeam); + Collections.sort(footballTeam, byRanking); + System.out.println("After Sorting : " + footballTeam); + assertEquals(footballTeam.get(0) + .getName(), "Steven"); + assertEquals(footballTeam.get(2) + .getRanking(), 67); + } + +} From 42e89c72c275b4f4a86683aa375d3d93d8e34840 Mon Sep 17 00:00:00 2001 From: Vivek Kumar Date: Sat, 25 Nov 2017 01:43:02 +0530 Subject: [PATCH 15/52] BEAL-1173 - Add EC2 metadata access class and Integration Test --- .../cloud/aws/SpringCloudAwsApplication.java | 2 + .../cloud/aws/ec2/EC2EnableMetadata.java | 9 +++ .../spring/cloud/aws/ec2/EC2Metadata.java | 62 +++++++++++++++++++ .../src/main/resources/aws-config.xml | 11 ++++ .../aws/ec2/EC2MetadataIntegrationTest.java | 61 ++++++++++++++++++ 5 files changed, 145 insertions(+) create mode 100644 spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2EnableMetadata.java create mode 100644 spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2Metadata.java create mode 100644 spring-cloud/spring-cloud-aws/src/main/resources/aws-config.xml create mode 100644 spring-cloud/spring-cloud-aws/src/test/java/com/baeldung/spring/cloud/aws/ec2/EC2MetadataIntegrationTest.java diff --git a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java index 2c3909b3eb..81bbc579ec 100644 --- a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java +++ b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java @@ -2,8 +2,10 @@ package com.baeldung.spring.cloud.aws; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ImportResource; @SpringBootApplication +@ImportResource("classpath:aws-config.xml") public class SpringCloudAwsApplication { public static void main(String[] args) { diff --git a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2EnableMetadata.java b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2EnableMetadata.java new file mode 100644 index 0000000000..03a7db26de --- /dev/null +++ b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2EnableMetadata.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.cloud.aws.ec2; + +import org.springframework.cloud.aws.context.config.annotation.EnableContextInstanceData; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableContextInstanceData +public class EC2EnableMetadata { +} \ No newline at end of file diff --git a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2Metadata.java b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2Metadata.java new file mode 100644 index 0000000000..9466c14560 --- /dev/null +++ b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2Metadata.java @@ -0,0 +1,62 @@ +package com.baeldung.spring.cloud.aws.ec2; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +@Lazy +@Component +public class EC2Metadata { + + @Value("${ami-id:N/A}") + private String amiId; + + @Value("${hostname:N/A}") + private String hostname; + + @Value("${instance-type:N/A}") + private String instanceType; + + @Value("${services/domain:N/A}") + private String serviceDomain; + + @Value("#{instanceData['Name'] ?: 'N/A'}") + private String name; + + public String getAmiId() { + return amiId; + } + + public String getHostname() { + return hostname; + } + + public String getInstanceType() { + return instanceType; + } + + public String getServiceDomain() { + return serviceDomain; + } + + public String getName() { + return name; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("EC2Metadata [amiId="); + builder.append(amiId); + builder.append(", hostname="); + builder.append(hostname); + builder.append(", instanceType="); + builder.append(instanceType); + builder.append(", serviceDomain="); + builder.append(serviceDomain); + builder.append(", name="); + builder.append(name); + builder.append("]"); + return builder.toString(); + } +} diff --git a/spring-cloud/spring-cloud-aws/src/main/resources/aws-config.xml b/spring-cloud/spring-cloud-aws/src/main/resources/aws-config.xml new file mode 100644 index 0000000000..5ca48f6b1e --- /dev/null +++ b/spring-cloud/spring-cloud-aws/src/main/resources/aws-config.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-aws/src/test/java/com/baeldung/spring/cloud/aws/ec2/EC2MetadataIntegrationTest.java b/spring-cloud/spring-cloud-aws/src/test/java/com/baeldung/spring/cloud/aws/ec2/EC2MetadataIntegrationTest.java new file mode 100644 index 0000000000..1e75134194 --- /dev/null +++ b/spring-cloud/spring-cloud-aws/src/test/java/com/baeldung/spring/cloud/aws/ec2/EC2MetadataIntegrationTest.java @@ -0,0 +1,61 @@ +package com.baeldung.spring.cloud.aws.ec2; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +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.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import com.amazonaws.regions.Regions; +import com.amazonaws.services.ec2.AmazonEC2; + +@SpringBootTest +@RunWith(SpringRunner.class) +@TestPropertySource("classpath:application-test.properties") +public class EC2MetadataIntegrationTest { + + private static final Logger logger = LoggerFactory.getLogger(EC2MetadataIntegrationTest.class); + + private boolean serverEc2; + + @Before + public void setUp() { + serverEc2 = Regions.getCurrentRegion() != null; + } + + @Autowired + private EC2Metadata eC2Metadata; + + @Autowired + private AmazonEC2 amazonEC2; + + @Test + public void whenEC2ClinentNotNull_thenSuccess() { + assertThat(amazonEC2).isNotNull(); + } + + @Test + public void whenEC2MetadataNotNull_thenSuccess() { + assertThat(eC2Metadata).isNotNull(); + } + + @Test + public void whenMetdataValuesNotNull_thenSuccess() { + Assume.assumeTrue(serverEc2); + assertThat(eC2Metadata.getAmiId()).isNotEqualTo("N/A"); + assertThat(eC2Metadata.getInstanceType()).isNotEqualTo("N/A"); + } + + @Test + public void whenMetadataLogged_thenSuccess() { + logger.info("Environment is EC2: {}", serverEc2); + logger.info(eC2Metadata.toString()); + } +} From edec7ddbe51d7b5e51dcd4fafb33a1599b02ed14 Mon Sep 17 00:00:00 2001 From: abialas Date: Fri, 24 Nov 2017 22:29:08 +0100 Subject: [PATCH 16/52] BAEL-1344 (#3081) * BAEL-1344 add java8 convert methods date, localdate, localdatetime * BAEL-1344 add java9 example * Move Date to LocalDate and LocalDateTime converters from core-java-8 to core-java-9 --- .../datetime/DateToLocalDateConverter.java | 35 --------- .../DateToLocalDateTimeConverter.java | 35 --------- .../DateToLocalDateConverterTest.java | 72 ----------------- .../DateToLocalDateTimeConverterTest.java | 78 ------------------- .../datetime/DateToLocalDateConverter.java | 19 ++++- .../DateToLocalDateTimeConverter.java | 19 ++++- .../LocalDateTimeToDateConverter.java | 2 +- .../datetime/LocalDateToDateConverter.java | 2 +- .../DateToLocalDateConverterTest.java | 48 ++++++++++++ .../DateToLocalDateTimeConverterTest.java | 54 +++++++++++++ .../LocalDateTimeToDateConverterTest.java | 2 +- .../LocalDateToDateConverterTest.java | 2 +- 12 files changed, 142 insertions(+), 226 deletions(-) delete mode 100644 core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateConverter.java delete mode 100644 core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateTimeConverter.java delete mode 100644 core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateConverterTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateTimeConverterTest.java rename {core-java-8/src/main/java/com/baeldung => core-java-9/src/main/java/com/baeldung/java9}/datetime/LocalDateTimeToDateConverter.java (94%) rename {core-java-8/src/main/java/com/baeldung => core-java-9/src/main/java/com/baeldung/java9}/datetime/LocalDateToDateConverter.java (94%) rename {core-java-8/src/test/java/com/baeldung => core-java-9/src/test/java/com/baeldung/java9}/datetime/LocalDateTimeToDateConverterTest.java (97%) rename {core-java-8/src/test/java/com/baeldung => core-java-9/src/test/java/com/baeldung/java9}/datetime/LocalDateToDateConverterTest.java (97%) diff --git a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateConverter.java b/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateConverter.java deleted file mode 100644 index 8788aac747..0000000000 --- a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateConverter.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * - */ -package com.baeldung.datetime; - -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.Date; - -/** - * Class which shows different ways of converting java.util.Date into java.time.LocalDate. - * - * @author abialas - * - */ -public class DateToLocalDateConverter { - - public static LocalDate convertToLocalDateViaInstant(Date dateToConvert) { - return dateToConvert.toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDate(); - } - - public static LocalDate convertToLocalDateViaSqlDate(Date dateToConvert) { - return new java.sql.Date(dateToConvert.getTime()).toLocalDate(); - } - - public static LocalDate convertToLocalDateViaMilisecond(Date dateToConvert) { - return Instant.ofEpochMilli(dateToConvert.getTime()) - .atZone(ZoneId.systemDefault()) - .toLocalDate(); - } - -} diff --git a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateTimeConverter.java b/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateTimeConverter.java deleted file mode 100644 index f994023526..0000000000 --- a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateTimeConverter.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * - */ -package com.baeldung.datetime; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; - -/** - * Class which shows different ways of converting java.util.Date into java.time.LocalDateTime. - * - * @author abialas - * - */ -public class DateToLocalDateTimeConverter { - - public static LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert) { - return dateToConvert.toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDateTime(); - } - - public static LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) { - return new java.sql.Timestamp(dateToConvert.getTime()).toLocalDateTime(); - } - - public static LocalDateTime convertToLocalDateTimeViaMilisecond(Date dateToConvert) { - return Instant.ofEpochMilli(dateToConvert.getTime()) - .atZone(ZoneId.systemDefault()) - .toLocalDateTime(); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateConverterTest.java b/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateConverterTest.java deleted file mode 100644 index 5de6ae3e59..0000000000 --- a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateConverterTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * - */ -package com.baeldung.datetime; - -import static org.junit.Assert.assertEquals; - -import java.time.LocalDate; -import java.time.temporal.ChronoField; -import java.util.Calendar; -import java.util.Date; - -import org.junit.Test; - -/** - * - * JUnits for {@link DateToLocalDateConverter} class. - * - * @author abialas - * - */ -public class DateToLocalDateConverterTest { - - @Test - public void shouldReturn10thNovember2010WhenConvertViaInstant() { - // given - Calendar calendar = Calendar.getInstance(); - calendar.set(2010, 10, 10); - Date dateToConvert = calendar.getTime(); - - // when - LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaInstant(dateToConvert); - - // then - assertEquals(2010, localDate.get(ChronoField.YEAR)); - assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR)); - assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH)); - } - - @Test - public void shouldReturn10thNovember2010WhenConvertViaMiliseconds() { - // given - Calendar calendar = Calendar.getInstance(); - calendar.set(2010, 10, 10); - Date dateToConvert = calendar.getTime(); - - // when - LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaMilisecond(dateToConvert); - - // then - assertEquals(2010, localDate.get(ChronoField.YEAR)); - assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR)); - assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH)); - } - - @Test - public void shouldReturn10thNovember2010WhenConvertViaSqlDate() { - // given - Calendar calendar = Calendar.getInstance(); - calendar.set(2010, 10, 10); - Date dateToConvert = calendar.getTime(); - - // when - LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaSqlDate(dateToConvert); - - // then - assertEquals(2010, localDate.get(ChronoField.YEAR)); - assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR)); - assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH)); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateTimeConverterTest.java b/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateTimeConverterTest.java deleted file mode 100644 index 6d8fb8ea93..0000000000 --- a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateTimeConverterTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * - */ -package com.baeldung.datetime; - -import static org.junit.Assert.assertEquals; - -import java.time.LocalDateTime; -import java.time.temporal.ChronoField; -import java.util.Calendar; -import java.util.Date; - -import org.junit.Test; - -/** - * - * JUnits for {@link DateToLocalDateTimeConverter} class. - * - * @author abialas - * - */ -public class DateToLocalDateTimeConverterTest { - - @Test - public void shouldReturn10thNovember2010time8hour20minWhenConvertViaInstant() { - // given - Calendar calendar = Calendar.getInstance(); - calendar.set(2010, 10, 10, 8, 20); - Date dateToConvert = calendar.getTime(); - - // when - LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaInstant(dateToConvert); - - // then - assertEquals(2010, localDateTime.get(ChronoField.YEAR)); - assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR)); - assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH)); - assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY)); - assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR)); - } - - @Test - public void shouldReturn10thNovember2010time8hour20minWhenConvertViaMiliseconds() { - // given - Calendar calendar = Calendar.getInstance(); - calendar.set(2010, 10, 10, 8, 20); - Date dateToConvert = calendar.getTime(); - - // when - LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaMilisecond(dateToConvert); - - // then - assertEquals(2010, localDateTime.get(ChronoField.YEAR)); - assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR)); - assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH)); - assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY)); - assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR)); - } - - @Test - public void shouldReturn10thNovember2010time8hour20minWhenConvertViaSqlTimestamp() { - // given - Calendar calendar = Calendar.getInstance(); - calendar.set(2010, 10, 10, 8, 20); - Date dateToConvert = calendar.getTime(); - - // when - LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaSqlTimestamp(dateToConvert); - - // then - assertEquals(2010, localDateTime.get(ChronoField.YEAR)); - assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR)); - assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH)); - assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY)); - assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR)); - } - -} diff --git a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java index bafa9ebff1..c794c57e87 100644 --- a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java +++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java @@ -3,18 +3,35 @@ */ package com.baeldung.java9.datetime; +import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; /** - * Class which shows a way to convert java.util.Date into java.time.LocalDate with new Java 1.9. + * Class which shows a way to convert java.util.Date into java.time.LocalDate. * * @author abialas * */ public class DateToLocalDateConverter { + public static LocalDate convertToLocalDateViaInstant(Date dateToConvert) { + return dateToConvert.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + } + + public static LocalDate convertToLocalDateViaSqlDate(Date dateToConvert) { + return new java.sql.Date(dateToConvert.getTime()).toLocalDate(); + } + + public static LocalDate convertToLocalDateViaMilisecond(Date dateToConvert) { + return Instant.ofEpochMilli(dateToConvert.getTime()) + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + } + public static LocalDate convertToLocalDate(Date dateToConvert) { return LocalDate.ofInstant(dateToConvert.toInstant(), ZoneId.systemDefault()); } diff --git a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java index 538d5a9f63..17ca5b1122 100644 --- a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java +++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java @@ -3,18 +3,35 @@ */ package com.baeldung.java9.datetime; +import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; /** - * Class which shows a way to convert java.util.Date into java.time.LocalDateTime with new Java 1.9. + * Class which shows a way to convert java.util.Date into java.time.LocalDateTime. * * @author abialas * */ public class DateToLocalDateTimeConverter { + public static LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert) { + return dateToConvert.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + } + + public static LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) { + return new java.sql.Timestamp(dateToConvert.getTime()).toLocalDateTime(); + } + + public static LocalDateTime convertToLocalDateTimeViaMilisecond(Date dateToConvert) { + return Instant.ofEpochMilli(dateToConvert.getTime()) + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + } + public static LocalDateTime convertToLocalDateTime(Date dateToConvert) { return LocalDateTime.ofInstant(dateToConvert.toInstant(), ZoneId.systemDefault()); } diff --git a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateTimeToDateConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverter.java similarity index 94% rename from core-java-8/src/main/java/com/baeldung/datetime/LocalDateTimeToDateConverter.java rename to core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverter.java index ef72c8b4fb..f219dcf038 100644 --- a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateTimeToDateConverter.java +++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverter.java @@ -1,7 +1,7 @@ /** * */ -package com.baeldung.datetime; +package com.baeldung.java9.datetime; import java.time.LocalDateTime; import java.time.ZoneId; diff --git a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateToDateConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateToDateConverter.java similarity index 94% rename from core-java-8/src/main/java/com/baeldung/datetime/LocalDateToDateConverter.java rename to core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateToDateConverter.java index 8050815799..f9893da5d0 100644 --- a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateToDateConverter.java +++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateToDateConverter.java @@ -1,7 +1,7 @@ /** * */ -package com.baeldung.datetime; +package com.baeldung.java9.datetime; import java.time.LocalDate; import java.time.ZoneId; diff --git a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java index 2e0fb0dedd..ab69bba359 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java @@ -22,6 +22,54 @@ import com.baeldung.java9.datetime.DateToLocalDateConverter; */ public class DateToLocalDateConverterTest { + @Test + public void shouldReturn10thNovember2010WhenConvertViaInstant() { + // given + Calendar calendar = Calendar.getInstance(); + calendar.set(2010, 10, 10); + Date dateToConvert = calendar.getTime(); + + // when + LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaInstant(dateToConvert); + + // then + assertEquals(2010, localDate.get(ChronoField.YEAR)); + assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH)); + } + + @Test + public void shouldReturn10thNovember2010WhenConvertViaMiliseconds() { + // given + Calendar calendar = Calendar.getInstance(); + calendar.set(2010, 10, 10); + Date dateToConvert = calendar.getTime(); + + // when + LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaMilisecond(dateToConvert); + + // then + assertEquals(2010, localDate.get(ChronoField.YEAR)); + assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH)); + } + + @Test + public void shouldReturn10thNovember2010WhenConvertViaSqlDate() { + // given + Calendar calendar = Calendar.getInstance(); + calendar.set(2010, 10, 10); + Date dateToConvert = calendar.getTime(); + + // when + LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaSqlDate(dateToConvert); + + // then + assertEquals(2010, localDate.get(ChronoField.YEAR)); + assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH)); + } + @Test public void shouldReturn10thNovember2010WhenConvertToLocalDate() { // given diff --git a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java index 49988c8b33..97c70ee5ac 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java @@ -29,6 +29,60 @@ public class DateToLocalDateTimeConverterTest { calendar.set(2010, 10, 10, 8, 20); Date dateToConvert = calendar.getTime(); + // when + LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaInstant(dateToConvert); + + // then + assertEquals(2010, localDateTime.get(ChronoField.YEAR)); + assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH)); + assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY)); + assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR)); + } + + @Test + public void shouldReturn10thNovember2010time8hour20minWhenConvertViaMiliseconds() { + // given + Calendar calendar = Calendar.getInstance(); + calendar.set(2010, 10, 10, 8, 20); + Date dateToConvert = calendar.getTime(); + + // when + LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaMilisecond(dateToConvert); + + // then + assertEquals(2010, localDateTime.get(ChronoField.YEAR)); + assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH)); + assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY)); + assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR)); + } + + @Test + public void shouldReturn10thNovember2010time8hour20minWhenConvertViaSqlTimestamp() { + // given + Calendar calendar = Calendar.getInstance(); + calendar.set(2010, 10, 10, 8, 20); + Date dateToConvert = calendar.getTime(); + + // when + LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaSqlTimestamp(dateToConvert); + + // then + assertEquals(2010, localDateTime.get(ChronoField.YEAR)); + assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH)); + assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY)); + assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR)); + } + + @Test + public void shouldReturn10thNovember2010time8hour20minWhenConvertToLocalDateTime() { + // given + Calendar calendar = Calendar.getInstance(); + calendar.set(2010, 10, 10, 8, 20); + Date dateToConvert = calendar.getTime(); + // when LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTime(dateToConvert); diff --git a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateTimeToDateConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverterTest.java similarity index 97% rename from core-java-8/src/test/java/com/baeldung/datetime/LocalDateTimeToDateConverterTest.java rename to core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverterTest.java index 519fa69f04..2c6898381f 100644 --- a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateTimeToDateConverterTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverterTest.java @@ -1,7 +1,7 @@ /** * */ -package com.baeldung.datetime; +package com.baeldung.java9.datetime; import static org.junit.Assert.assertEquals; diff --git a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateToDateConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateToDateConverterTest.java similarity index 97% rename from core-java-8/src/test/java/com/baeldung/datetime/LocalDateToDateConverterTest.java rename to core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateToDateConverterTest.java index c1da3af052..7f20d5d2d2 100644 --- a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateToDateConverterTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateToDateConverterTest.java @@ -1,7 +1,7 @@ /** * */ -package com.baeldung.datetime; +package com.baeldung.java9.datetime; import static org.junit.Assert.assertEquals; From c8d11d0b81057621702f0028c1a1c05149f243f1 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 25 Nov 2017 11:41:31 +0200 Subject: [PATCH 17/52] fix log display issue (#3117) --- spring-aop/src/main/resources/logback.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spring-aop/src/main/resources/logback.xml b/spring-aop/src/main/resources/logback.xml index ec0dc2469a..3245e94f08 100644 --- a/spring-aop/src/main/resources/logback.xml +++ b/spring-aop/src/main/resources/logback.xml @@ -13,7 +13,11 @@ - + + + + + \ No newline at end of file From 6435d5723a977c554b2759e669e8a62e711d3feb Mon Sep 17 00:00:00 2001 From: Ahmed Tawila Date: Sat, 25 Nov 2017 12:18:49 +0200 Subject: [PATCH 18/52] BAEL-1309 Append Data to a File with Java (#3054) * Evaluation article: Different Types of Bean Injection in Spring * added tests & changed configuration to Java-based config * removed xml config files * rename unit tests * BAEL-972 - Apache Commons Text * remove code from evaluation article * remove code from evaluation article * BAEL-972 - Apache Commons Text - added another example * BAEL-972 - Apache Commons Text - just indentation * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java - fix problems * BAEL-1033 Introduction to StreamUtils * BAEL-1033 Introduction to StreamUtils * BAEL-1033 Introduction to StreamUtils * fix formatting * BAEL-1033 minor refactor * BAEL-1035 Introduction to Eclipse Collections * format * BAEL-1035 Introduction to Eclipse Collections * BAEL-1035 Introduction to Eclipse Collections * BAEL-1035 Introduction to Eclipse Collections * cleanup * cleanup * BAEL-1109 Introduction to JCache * BAEL-1109 Introduction to JCache * remove unneeded property in pom.xml * fix formatting * close cache instances properly * remove latest commit * BAEL-1057 Introduction to rxjava-jdbc * refactor rxjava-jdbc * Refactor rxjava-jdbc * Refactoring rxjava-jdbc * BAEL-1171 java.lang.String API * refactor rxjava-jdbc * refactor String * String API - move multiple classes into a single class * move class into test package * BAEL-1171 String.lang.String API * BAEL-1171 java.lang.String API * BAEL-1250 Initializing Arrays in Java * BAEL-1250 Initializing Arrays in Java * BAEL-1250 Initializing Arrays in Java * small fix * BAEL-1171 java.lang.String API * BAEL-1263 Daemon Threads in Java * merge with fork * BAEL-1263 Daemon Threads in Java * fix compilation error * BAEL-1309 Append Data to a File with Java * fix build fails * fix test error * fix build failures * cleanup * fix Sneaky Runnable test * revert sneaky runnable fix attempt * fix test failure * fix test failure * fix all test failures * fix test failure * fix test failures * Nested Classes in Java --- .../baeldung/concurrent/daemon/NewThread.java | 1 - .../com/baeldung/nestedclass/Enclosing.java | 11 +++++ .../baeldung/nestedclass/NewEnclosing.java | 15 ++++++ .../java/com/baeldung/nestedclass/Outer.java | 11 +++++ .../nestedclass/SimpleAbstractClass.java | 5 ++ .../java/com/baeldung/util/StreamUtils.java | 16 +++++++ .../src/main/resources/countries.properties | 3 ++ .../baeldung/file/FileOutputStreamTest.java | 36 ++++++++++++++ .../java/com/baeldung/file/FileUtilsTest.java | 37 ++++++++++++++ .../com/baeldung/file/FileWriterTest.java | 40 ++++++++++++++++ .../java/com/baeldung/file/FilesTest.java | 36 ++++++++++++++ .../java/com/baeldung/file/GuavaTest.java | 48 +++++++++++++++++++ .../nestedclass/AnonymousInnerTest.java | 16 +++++++ .../baeldung/nestedclass/InnerClassTest.java | 13 +++++ .../baeldung/nestedclass/LocalClassTest.java | 12 +++++ .../baeldung/nestedclass/NestedClassTest.java | 12 +++++ .../baeldung/nestedclass/NewOuterTest.java | 32 +++++++++++++ .../java/com/baeldung/string/StringTest.java | 2 +- 18 files changed, 344 insertions(+), 2 deletions(-) create mode 100644 core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java create mode 100644 core-java/src/main/java/com/baeldung/nestedclass/NewEnclosing.java create mode 100644 core-java/src/main/java/com/baeldung/nestedclass/Outer.java create mode 100644 core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java create mode 100644 core-java/src/main/java/com/baeldung/util/StreamUtils.java create mode 100644 core-java/src/main/resources/countries.properties create mode 100644 core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java create mode 100644 core-java/src/test/java/com/baeldung/file/FileUtilsTest.java create mode 100644 core-java/src/test/java/com/baeldung/file/FileWriterTest.java create mode 100644 core-java/src/test/java/com/baeldung/file/FilesTest.java create mode 100644 core-java/src/test/java/com/baeldung/file/GuavaTest.java create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/AnonymousInnerTest.java create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/NewThread.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/NewThread.java index d742d3a55f..4d87978070 100644 --- a/core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/NewThread.java +++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/NewThread.java @@ -3,7 +3,6 @@ package com.baeldung.concurrent.daemon; public class NewThread extends Thread { public void run() { - long startTime = System.currentTimeMillis(); while (true) { for (int i = 0; i < 10; i++) { diff --git a/core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java b/core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java new file mode 100644 index 0000000000..a9911538b0 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java @@ -0,0 +1,11 @@ +package com.baeldung.nestedclass; + +public class Enclosing { + + public static class Nested { + + public void test() { + System.out.println("Calling test..."); + } + } +} diff --git a/core-java/src/main/java/com/baeldung/nestedclass/NewEnclosing.java b/core-java/src/main/java/com/baeldung/nestedclass/NewEnclosing.java new file mode 100644 index 0000000000..c7e04e8600 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/nestedclass/NewEnclosing.java @@ -0,0 +1,15 @@ +package com.baeldung.nestedclass; + +public class NewEnclosing { + + void run() { + class Local { + + void run() { + System.out.println("Welcome to Baeldung!"); + } + } + Local local = new Local(); + local.run(); + } +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/nestedclass/Outer.java b/core-java/src/main/java/com/baeldung/nestedclass/Outer.java new file mode 100644 index 0000000000..ebd6d27293 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/nestedclass/Outer.java @@ -0,0 +1,11 @@ +package com.baeldung.nestedclass; + +public class Outer { + + public class Inner { + + public void test() { + System.out.println("Calling test..."); + } + } +} diff --git a/core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java b/core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java new file mode 100644 index 0000000000..586e2d12b4 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java @@ -0,0 +1,5 @@ +package com.baeldung.nestedclass; + +abstract class SimpleAbstractClass { + abstract void run(); +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/util/StreamUtils.java b/core-java/src/main/java/com/baeldung/util/StreamUtils.java new file mode 100644 index 0000000000..42f438732f --- /dev/null +++ b/core-java/src/main/java/com/baeldung/util/StreamUtils.java @@ -0,0 +1,16 @@ +package com.baeldung.util; + +import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; + +import org.apache.commons.io.IOUtils; + +public class StreamUtils { + + public static String getStringFromInputStream(InputStream input) throws IOException { + StringWriter writer = new StringWriter(); + IOUtils.copy(input, writer, "UTF-8"); + return writer.toString(); + } +} diff --git a/core-java/src/main/resources/countries.properties b/core-java/src/main/resources/countries.properties new file mode 100644 index 0000000000..3c1f53aded --- /dev/null +++ b/core-java/src/main/resources/countries.properties @@ -0,0 +1,3 @@ +UK +US +Germany diff --git a/core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java b/core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java new file mode 100644 index 0000000000..451c1b4c4d --- /dev/null +++ b/core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java @@ -0,0 +1,36 @@ +package com.baeldung.file; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; + +import org.junit.After; +import org.junit.Test; + +import com.baeldung.util.StreamUtils; + +public class FileOutputStreamTest { + + public static final String fileName = "src/main/resources/countries.properties"; + + @Test + public void whenAppendToFileUsingFileOutputStream_thenCorrect() throws Exception { + FileOutputStream fos = new FileOutputStream(fileName, true); + fos.write("Spain\r\n".getBytes()); + fos.close(); + + assertThat(StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); + } + + @After + public void revertFile() throws IOException { + PrintWriter writer = new PrintWriter(fileName); + writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); + writer.close(); + } +} diff --git a/core-java/src/test/java/com/baeldung/file/FileUtilsTest.java b/core-java/src/test/java/com/baeldung/file/FileUtilsTest.java new file mode 100644 index 0000000000..9ee8726575 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/file/FileUtilsTest.java @@ -0,0 +1,37 @@ +package com.baeldung.file; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; + +import org.apache.commons.io.FileUtils; +import org.junit.After; +import org.junit.Test; + +import com.baeldung.util.StreamUtils; + +public class FileUtilsTest { + + public static final String fileName = "src/main/resources/countries.properties"; + + @Test + public void whenAppendToFileUsingFiles_thenCorrect() throws IOException { + File file = new File(fileName); + FileUtils.writeStringToFile(file, "Spain\r\n", StandardCharsets.UTF_8, true); + + assertThat(StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); + } + + @After + public void revertFile() throws IOException { + PrintWriter writer = new PrintWriter(fileName); + writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); + writer.close(); + } +} diff --git a/core-java/src/test/java/com/baeldung/file/FileWriterTest.java b/core-java/src/test/java/com/baeldung/file/FileWriterTest.java new file mode 100644 index 0000000000..8d2ce4310e --- /dev/null +++ b/core-java/src/test/java/com/baeldung/file/FileWriterTest.java @@ -0,0 +1,40 @@ +package com.baeldung.file; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +import org.junit.After; +import org.junit.Test; + +import com.baeldung.util.StreamUtils; + +public class FileWriterTest { + + public static final String fileName = "src/main/resources/countries.properties"; + + @Test + public void whenAppendToFileUsingFileWriter_thenCorrect() throws IOException { + FileWriter fw = new FileWriter(fileName, true); + BufferedWriter bw = new BufferedWriter(fw); + bw.write("Spain"); + bw.newLine(); + bw.close(); + + assertThat( + StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\n"); + } + + @After + public void revertFile() throws IOException { + PrintWriter writer = new PrintWriter(fileName); + writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); + writer.close(); + } +} diff --git a/core-java/src/test/java/com/baeldung/file/FilesTest.java b/core-java/src/test/java/com/baeldung/file/FilesTest.java new file mode 100644 index 0000000000..bd39d004d3 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/file/FilesTest.java @@ -0,0 +1,36 @@ +package com.baeldung.file; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; + +import org.junit.After; +import org.junit.Test; + +import com.baeldung.util.StreamUtils; + +public class FilesTest { + + public static final String fileName = "src/main/resources/countries.properties"; + + @Test + public void whenAppendToFileUsingFiles_thenCorrect() throws IOException { + Files.write(Paths.get(fileName), "Spain\r\n".getBytes(), StandardOpenOption.APPEND); + + assertThat(StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); + } + + @After + public void revertFile() throws IOException { + PrintWriter writer = new PrintWriter(fileName); + writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); + writer.close(); + } +} diff --git a/core-java/src/test/java/com/baeldung/file/GuavaTest.java b/core-java/src/test/java/com/baeldung/file/GuavaTest.java new file mode 100644 index 0000000000..5a7ec6c4a8 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/file/GuavaTest.java @@ -0,0 +1,48 @@ +package com.baeldung.file; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.PrintWriter; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.util.StreamUtils; +import com.google.common.base.Charsets; +import com.google.common.io.CharSink; +import com.google.common.io.FileWriteMode; +import com.google.common.io.Files; + +public class GuavaTest { + + public static final String fileName = "src/main/resources/countries.properties"; + + @Before + public void setup() throws Exception { + PrintWriter writer = new PrintWriter(fileName); + writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); + writer.close(); + } + + @Test + public void whenAppendToFileUsingGuava_thenCorrect() throws IOException { + File file = new File(fileName); + CharSink chs = Files.asCharSink(file, Charsets.UTF_8, FileWriteMode.APPEND); + chs.write("Spain\r\n"); + + assertThat(StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); + } + + @After + public void revertFile() throws IOException { + PrintWriter writer = new PrintWriter(fileName); + writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); + writer.close(); + } +} diff --git a/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInnerTest.java b/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInnerTest.java new file mode 100644 index 0000000000..394c0bb57a --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInnerTest.java @@ -0,0 +1,16 @@ +package com.baeldung.nestedclass; + +import org.junit.Test; + +public class AnonymousInnerTest { + + @Test + public void whenRunAnonymousClass_thenCorrect() { + SimpleAbstractClass simpleAbstractClass = new SimpleAbstractClass() { + void run() { + System.out.println("Running Anonymous Class..."); + } + }; + simpleAbstractClass.run(); + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java b/core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java new file mode 100644 index 0000000000..e9cb119ac2 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java @@ -0,0 +1,13 @@ +package com.baeldung.nestedclass; + +import org.junit.Test; + +public class InnerClassTest { + + @Test + public void givenInnerClassWhenInstantiating_thenCorrect() { + Outer outer = new Outer(); + Outer.Inner inner = outer.new Inner(); + inner.test(); + } +} diff --git a/core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java b/core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java new file mode 100644 index 0000000000..dad19161ad --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java @@ -0,0 +1,12 @@ +package com.baeldung.nestedclass; + +import org.junit.Test; + +public class LocalClassTest { + + @Test + public void whenTestingLocalClass_thenCorrect() { + NewEnclosing newEnclosing = new NewEnclosing(); + newEnclosing.run(); + } +} diff --git a/core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java b/core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java new file mode 100644 index 0000000000..16c883689a --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java @@ -0,0 +1,12 @@ +package com.baeldung.nestedclass; + +import org.junit.Test; + +public class NestedClassTest { + + @Test + public void whenInstantiatingStaticNestedClass_thenCorrect() { + Enclosing.Nested nested = new Enclosing.Nested(); + nested.test(); + } +} diff --git a/core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java b/core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java new file mode 100644 index 0000000000..e883687d33 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java @@ -0,0 +1,32 @@ +package com.baeldung.nestedclass; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class NewOuterTest { + + int a = 1; + static int b = 2; + + public class InnerClass { + int a = 3; + static final int b = 4; + + @Test + public void whenShadowing_thenCorrect() { + assertEquals(3, a); + assertEquals(4, b); + assertEquals(1, NewOuterTest.this.a); + assertEquals(2, NewOuterTest.b); + assertEquals(2, NewOuterTest.this.b); + } + } + + @Test + public void shadowingTest() { + NewOuterTest outer = new NewOuterTest(); + NewOuterTest.InnerClass inner = outer.new InnerClass(); + inner.whenShadowing_thenCorrect(); + + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/string/StringTest.java b/core-java/src/test/java/com/baeldung/string/StringTest.java index fe1a69aa23..e88b2d7c2c 100644 --- a/core-java/src/test/java/com/baeldung/string/StringTest.java +++ b/core-java/src/test/java/com/baeldung/string/StringTest.java @@ -223,4 +223,4 @@ public class StringTest { assertEquals("200", String.valueOf(l)); } -} +} \ No newline at end of file From 04dc60bd1216a4673b4aeaf23e1990c43cd5f35e Mon Sep 17 00:00:00 2001 From: Muhammed Almas Date: Sat, 25 Nov 2017 16:06:23 +0530 Subject: [PATCH 19/52] BAEL-1370 Added test to show usage of ArrayDeque. (#3128) --- .../baeldung/arraydeque/ArrayDequeTest.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 core-java/src/test/java/com/baeldung/arraydeque/ArrayDequeTest.java diff --git a/core-java/src/test/java/com/baeldung/arraydeque/ArrayDequeTest.java b/core-java/src/test/java/com/baeldung/arraydeque/ArrayDequeTest.java new file mode 100644 index 0000000000..50813a8601 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/arraydeque/ArrayDequeTest.java @@ -0,0 +1,50 @@ +package com.baeldung.arraydeque; + +import java.util.ArrayDeque; +import java.util.Deque; + +import static org.junit.Assert.*; +import org.junit.Test; + +public class ArrayDequeTest { + + @Test + public void whenOffer_addsAtLast() { + final Deque deque = new ArrayDeque<>(); + + deque.offer("first"); + deque.offer("second"); + + assertEquals("second", deque.getLast()); + } + + @Test + public void whenPoll_removesFirst() { + final Deque deque = new ArrayDeque<>(); + + deque.offer("first"); + deque.offer("second"); + + assertEquals("first", deque.poll()); + } + + @Test + public void whenPush_addsAtFirst() { + final Deque deque = new ArrayDeque<>(); + + deque.push("first"); + deque.push("second"); + + assertEquals("second", deque.getFirst()); + } + + @Test + public void whenPop_removesLast() { + final Deque deque = new ArrayDeque<>(); + + deque.push("first"); + deque.push("second"); + + assertEquals("second", deque.pop()); + } +} From aa46858c0fce198e59b7cf03bec89ddf1ac1fcac Mon Sep 17 00:00:00 2001 From: adamd1985 Date: Sun, 26 Nov 2017 00:03:05 +0100 Subject: [PATCH 20/52] BAEL-1289 - Merge (#3136) * Initial Commit * Added Domain Classes * Update HighEndComputer.java * Update StandardComputer.java * Update TemplateMethodPatternTest.java * Update parent pom.xml * Update pom.xml in template-method submodule * Update readme.md * Update README.md * Initial Commit * Update HighEndComputer.java * Delete article folder * Initial Commit * Initial Commit * Initial Commit * Added Article Folder * Delete Article Folder * Added Article Folder --- .../pom.xml | 4 ++-- .../templatemethod}/application/Application.java | 14 +++++++------- .../pattern/templatemethod}/model/Computer.java | 4 +--- .../templatemethod}/model/ComputerBuilder.java | 3 ++- .../templatemethod}/model/HighEndComputer.java | 5 +++-- .../model/HighEndComputerBuilder.java | 2 +- .../templatemethod}/model/StandardComputer.java | 5 +++-- .../model/StandardComputerBuilder.java | 2 +- .../test}/TemplateMethodPatternTest.java | 12 +++++------- patterns/pom.xml | 2 +- 10 files changed, 26 insertions(+), 27 deletions(-) rename patterns/{template-method => behavioral-patterns}/pom.xml (91%) rename patterns/{template-method/src/main/java/com/baeldung/templatemethodpattern => behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod}/application/Application.java (59%) rename patterns/{template-method/src/main/java/com/baeldung/templatemethodpattern => behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod}/model/Computer.java (77%) rename patterns/{template-method/src/main/java/com/baeldung/templatemethodpattern => behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod}/model/ComputerBuilder.java (88%) rename patterns/{template-method/src/main/java/com/baeldung/templatemethodpattern => behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod}/model/HighEndComputer.java (59%) rename patterns/{template-method/src/main/java/com/baeldung/templatemethodpattern => behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod}/model/HighEndComputerBuilder.java (92%) rename patterns/{template-method/src/main/java/com/baeldung/templatemethodpattern => behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod}/model/StandardComputer.java (60%) rename patterns/{template-method/src/main/java/com/baeldung/templatemethodpattern => behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod}/model/StandardComputerBuilder.java (92%) rename patterns/{template-method/src/test/java/com/baeldung/templatemethodpatterntest => behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test}/TemplateMethodPatternTest.java (89%) diff --git a/patterns/template-method/pom.xml b/patterns/behavioral-patterns/pom.xml similarity index 91% rename from patterns/template-method/pom.xml rename to patterns/behavioral-patterns/pom.xml index 4b863fe0a4..3c40520ce1 100644 --- a/patterns/template-method/pom.xml +++ b/patterns/behavioral-patterns/pom.xml @@ -1,8 +1,8 @@ 4.0.0 - com.baeldung.templatemethod - template-method + com.baeldung.pattern.templatemethod + pattern.templatemethod 1.0 jar diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/application/Application.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java similarity index 59% rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/application/Application.java rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java index bd383b4568..9ab34c3cd8 100644 --- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/application/Application.java +++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java @@ -1,11 +1,11 @@ -package com.baeldung.templatemethodpattern.application; +package com.baeldung.pattern.templatemethod.application; -import com.baeldung.templatemethodpattern.model.Computer; -import com.baeldung.templatemethodpattern.model.StandardComputer; -import com.baeldung.templatemethodpattern.model.HighEndComputer; -import com.baeldung.templatemethodpattern.model.ComputerBuilder; -import com.baeldung.templatemethodpattern.model.HighEndComputerBuilder; -import com.baeldung.templatemethodpattern.model.StandardComputerBuilder; +import com.baeldung.pattern.templatemethod.model.Computer; +import com.baeldung.pattern.templatemethod.model.StandardComputer; +import com.baeldung.pattern.templatemethod.model.HighEndComputer; +import com.baeldung.pattern.templatemethod.model.ComputerBuilder; +import com.baeldung.pattern.templatemethod.model.HighEndComputerBuilder; +import com.baeldung.pattern.templatemethod.model.StandardComputerBuilder; public class Application { diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/Computer.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java similarity index 77% rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/Computer.java rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java index 128eec59ad..1419398f62 100644 --- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/Computer.java +++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java @@ -1,9 +1,7 @@ -package com.baeldung.templatemethodpattern.model; +package com.baeldung.pattern.templatemethod.model; import java.util.HashMap; import java.util.Map; -import java.util.ArrayList; -import java.util.List; public class Computer { diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/ComputerBuilder.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java similarity index 88% rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/ComputerBuilder.java rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java index 39052f4776..515a6940f5 100644 --- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/ComputerBuilder.java +++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java @@ -1,5 +1,6 @@ -package com.baeldung.templatemethodpattern.model; +package com.baeldung.pattern.templatemethod.model; +import com.baeldung.pattern.templatemethod.model.Computer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputer.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java similarity index 59% rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputer.java rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java index 16d89f1ad6..0684b1b233 100644 --- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputer.java +++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java @@ -1,10 +1,11 @@ -package com.baeldung.templatemethodpattern.model; +package com.baeldung.pattern.templatemethod.model; +import com.baeldung.pattern.templatemethod.model.Computer; import java.util.Map; public class HighEndComputer extends Computer { public HighEndComputer(Map computerParts) { super(computerParts); - } + } } diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputerBuilder.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java similarity index 92% rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputerBuilder.java rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java index baa800ca8f..c992aa2bff 100644 --- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputerBuilder.java +++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java @@ -1,4 +1,4 @@ -package com.baeldung.templatemethodpattern.model; +package com.baeldung.pattern.templatemethod.model; public class HighEndComputerBuilder extends ComputerBuilder { diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputer.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java similarity index 60% rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputer.java rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java index 14d32d7b64..4e1d857016 100644 --- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputer.java +++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java @@ -1,10 +1,11 @@ -package com.baeldung.templatemethodpattern.model; +package com.baeldung.pattern.templatemethod.model; +import com.baeldung.pattern.templatemethod.model.Computer; import java.util.Map; public class StandardComputer extends Computer { public StandardComputer(Map computerParts) { super(computerParts); - } + } } diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputerBuilder.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java similarity index 92% rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputerBuilder.java rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java index 78547dc38b..cc81dddc1b 100644 --- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputerBuilder.java +++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java @@ -1,4 +1,4 @@ -package com.baeldung.templatemethodpattern.model; +package com.baeldung.pattern.templatemethod.model; public class StandardComputerBuilder extends ComputerBuilder { diff --git a/patterns/template-method/src/test/java/com/baeldung/templatemethodpatterntest/TemplateMethodPatternTest.java b/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java similarity index 89% rename from patterns/template-method/src/test/java/com/baeldung/templatemethodpatterntest/TemplateMethodPatternTest.java rename to patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java index 1d608ff2c2..679559af9f 100644 --- a/patterns/template-method/src/test/java/com/baeldung/templatemethodpatterntest/TemplateMethodPatternTest.java +++ b/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java @@ -1,10 +1,8 @@ -package com.baeldung.templatemethodpatterntest; +package com.baeldung.pattern.templatemethod.test; -import com.baeldung.templatemethodpattern.model.Computer; -import com.baeldung.templatemethodpattern.model.HighEndComputerBuilder; -import com.baeldung.templatemethodpattern.model.StandardComputerBuilder; -import com.baeldung.templatemethodpattern.model.HighEndComputer; -import com.baeldung.templatemethodpattern.model.StandardComputer; +import com.baeldung.pattern.templatemethod.model.Computer; +import com.baeldung.pattern.templatemethod.model.HighEndComputerBuilder; +import com.baeldung.pattern.templatemethod.model.StandardComputerBuilder; import org.junit.Assert; import static org.junit.Assert.assertEquals; import org.junit.BeforeClass; @@ -82,7 +80,7 @@ public class TemplateMethodPatternTest { assertEquals(2, highEndComputerBuilder.getComputerParts().size()); } - @Test + @Test public void givenAllHighEndParts_whenComputerisBuilt_thenComputerInstance() { assertThat(standardComputerBuilder.buildComputer(), instanceOf(Computer.class)); } diff --git a/patterns/pom.xml b/patterns/pom.xml index 68e5316f64..1462952e37 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -9,7 +9,7 @@ front-controller intercepting-filter - template-method + behavioral-patterns From c1ecbf57100c5909c6860a41304ea4f992ae7f60 Mon Sep 17 00:00:00 2001 From: Doha2012 Date: Sun, 26 Nov 2017 09:40:54 +0200 Subject: [PATCH 21/52] move spring-jpa to persistence-modules (#3134) * move security content from spring-security-rest-full * swagger update * move query language to new module * rename spring-security-rest-full to spring-rest-full * group persistence modules * group testing modules * try fix conflict * cleanup * group and cleanup * add readme to grouping modules * move spring-jpa to persistence-modules --- {spring-jpa => persistence-modules/spring-jpa}/.gitignore | 0 {spring-jpa => persistence-modules/spring-jpa}/README.md | 0 {spring-jpa => persistence-modules/spring-jpa}/pom.xml | 1 + .../main/java/org/baeldung/config/PersistenceJNDIConfig.java | 0 .../src/main/java/org/baeldung/config/PersistenceJPAConfig.java | 0 .../java/org/baeldung/config/PersistenceJPAConfigL2Cache.java | 0 .../main/java/org/baeldung/config/PersistenceJPAConfigXml.java | 0 .../src/main/java/org/baeldung/config/ProductConfig.java | 0 .../src/main/java/org/baeldung/config/SpringWebConfig.java | 0 .../src/main/java/org/baeldung/config/StudentJPAH2Config.java | 0 .../src/main/java/org/baeldung/config/StudentJpaConfig.java | 0 .../src/main/java/org/baeldung/config/UserConfig.java | 0 .../src/main/java/org/baeldung/config/WebInitializer.java | 0 .../src/main/java/org/baeldung/dsrouting/ClientDao.java | 0 .../java/org/baeldung/dsrouting/ClientDataSourceRouter.java | 0 .../src/main/java/org/baeldung/dsrouting/ClientDatabase.java | 0 .../org/baeldung/dsrouting/ClientDatabaseContextHolder.java | 0 .../src/main/java/org/baeldung/dsrouting/ClientService.java | 0 .../baeldung/extended/persistence/dao/ExtendedRepository.java | 0 .../extended/persistence/dao/ExtendedRepositoryImpl.java | 0 .../extended/persistence/dao/ExtendedStudentRepository.java | 0 .../baeldung/inmemory/persistence/dao/StudentRepository.java | 0 .../java/org/baeldung/inmemory/persistence/model/Student.java | 0 .../main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java | 0 .../src/main/java/org/baeldung/persistence/dao/FooDao.java | 0 .../src/main/java/org/baeldung/persistence/dao/IFooDao.java | 0 .../src/main/java/org/baeldung/persistence/model/Bar.java | 0 .../src/main/java/org/baeldung/persistence/model/Foo.java | 0 .../persistence/multiple/dao/product/ProductRepository.java | 0 .../persistence/multiple/dao/user/PossessionRepository.java | 0 .../baeldung/persistence/multiple/dao/user/UserRepository.java | 0 .../baeldung/persistence/multiple/model/product/Product.java | 0 .../baeldung/persistence/multiple/model/user/Possession.java | 0 .../java/org/baeldung/persistence/multiple/model/user/User.java | 0 .../main/java/org/baeldung/persistence/service/FooService.java | 0 .../src/main/java/org/baeldung/sqlfiles/Country.java | 0 .../src/main/java/org/baeldung/web/MainController.java | 0 .../spring-jpa}/src/main/resources/context.xml | 0 .../spring-jpa}/src/main/resources/logback.xml | 0 .../spring-jpa}/src/main/resources/persistence-h2.properties | 0 .../spring-jpa}/src/main/resources/persistence-jndi.properties | 0 .../src/main/resources/persistence-multiple-db.properties | 0 .../spring-jpa}/src/main/resources/persistence-mysql.properties | 0 .../src/main/resources/persistence-student-h2.properties | 0 .../src/main/resources/persistence-student.properties | 0 .../spring-jpa}/src/main/resources/persistence.xml | 0 .../spring-jpa}/src/main/resources/server.xml | 0 .../spring-jpa}/src/main/resources/sqlfiles.properties | 0 .../spring-jpa}/src/main/webapp/WEB-INF/views/jsp/index.jsp | 0 .../spring-jpa}/src/test/java/META-INF/persistence.xml | 0 .../baeldung/dsrouting/DataSourceRoutingIntegrationTest.java | 0 .../baeldung/dsrouting/DataSourceRoutingTestConfiguration.java | 0 .../deletion/config/PersistenceJPAConfigDeletion.java | 0 .../test/java/org/baeldung/persistence/deletion/model/Bar.java | 0 .../test/java/org/baeldung/persistence/deletion/model/Baz.java | 0 .../test/java/org/baeldung/persistence/deletion/model/Foo.java | 0 .../repository/ExtendedStudentRepositoryIntegrationTest.java | 0 .../persistence/repository/InMemoryDBIntegrationTest.java | 0 .../baeldung/persistence/service/DeletionIntegrationTest.java | 0 .../service/FooPaginationPersistenceIntegrationTest.java | 0 .../service/FooServicePersistenceIntegrationTest.java | 0 .../persistence/service/FooServiceSortingIntegrationTest.java | 0 .../service/FooServiceSortingWitNullsManualIntegrationTest.java | 0 .../persistence/service/JpaMultipleDBIntegrationTest.java | 0 .../org/baeldung/persistence/service/PersistenceTestSuite.java | 0 .../persistence/service/SecondLevelCacheIntegrationTest.java | 0 .../spring-jpa}/src/test/resources/.gitignore | 0 .../spring-jpa}/src/test/resources/dsrouting-db.sql | 0 .../src/test/resources/persistence-student.properties | 0 pom.xml | 2 +- 70 files changed, 2 insertions(+), 1 deletion(-) rename {spring-jpa => persistence-modules/spring-jpa}/.gitignore (100%) rename {spring-jpa => persistence-modules/spring-jpa}/README.md (100%) rename {spring-jpa => persistence-modules/spring-jpa}/pom.xml (98%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/PersistenceJPAConfig.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/ProductConfig.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/SpringWebConfig.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/StudentJPAH2Config.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/StudentJpaConfig.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/UserConfig.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/config/WebInitializer.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/dsrouting/ClientDao.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/dsrouting/ClientDatabase.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/dsrouting/ClientService.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/inmemory/persistence/model/Student.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/dao/FooDao.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/dao/IFooDao.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/model/Bar.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/model/Foo.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/multiple/model/user/User.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/persistence/service/FooService.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/sqlfiles/Country.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/java/org/baeldung/web/MainController.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/context.xml (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/logback.xml (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/persistence-h2.properties (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/persistence-jndi.properties (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/persistence-multiple-db.properties (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/persistence-mysql.properties (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/persistence-student-h2.properties (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/persistence-student.properties (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/persistence.xml (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/server.xml (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/resources/sqlfiles.properties (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/main/webapp/WEB-INF/views/jsp/index.jsp (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/META-INF/persistence.xml (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/deletion/model/Bar.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/deletion/model/Baz.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/deletion/model/Foo.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/resources/.gitignore (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/resources/dsrouting-db.sql (100%) rename {spring-jpa => persistence-modules/spring-jpa}/src/test/resources/persistence-student.properties (100%) diff --git a/spring-jpa/.gitignore b/persistence-modules/spring-jpa/.gitignore similarity index 100% rename from spring-jpa/.gitignore rename to persistence-modules/spring-jpa/.gitignore diff --git a/spring-jpa/README.md b/persistence-modules/spring-jpa/README.md similarity index 100% rename from spring-jpa/README.md rename to persistence-modules/spring-jpa/README.md diff --git a/spring-jpa/pom.xml b/persistence-modules/spring-jpa/pom.xml similarity index 98% rename from spring-jpa/pom.xml rename to persistence-modules/spring-jpa/pom.xml index 960dcbc588..04c64fafc3 100644 --- a/spring-jpa/pom.xml +++ b/persistence-modules/spring-jpa/pom.xml @@ -13,6 +13,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT + ../ diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/UserConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/UserConfig.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/UserConfig.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/UserConfig.java diff --git a/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java diff --git a/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java diff --git a/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java diff --git a/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java diff --git a/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java diff --git a/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java diff --git a/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java diff --git a/spring-jpa/src/main/java/org/baeldung/web/MainController.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/web/MainController.java similarity index 100% rename from spring-jpa/src/main/java/org/baeldung/web/MainController.java rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/web/MainController.java diff --git a/spring-jpa/src/main/resources/context.xml b/persistence-modules/spring-jpa/src/main/resources/context.xml similarity index 100% rename from spring-jpa/src/main/resources/context.xml rename to persistence-modules/spring-jpa/src/main/resources/context.xml diff --git a/spring-jpa/src/main/resources/logback.xml b/persistence-modules/spring-jpa/src/main/resources/logback.xml similarity index 100% rename from spring-jpa/src/main/resources/logback.xml rename to persistence-modules/spring-jpa/src/main/resources/logback.xml diff --git a/spring-jpa/src/main/resources/persistence-h2.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-h2.properties similarity index 100% rename from spring-jpa/src/main/resources/persistence-h2.properties rename to persistence-modules/spring-jpa/src/main/resources/persistence-h2.properties diff --git a/spring-jpa/src/main/resources/persistence-jndi.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-jndi.properties similarity index 100% rename from spring-jpa/src/main/resources/persistence-jndi.properties rename to persistence-modules/spring-jpa/src/main/resources/persistence-jndi.properties diff --git a/spring-jpa/src/main/resources/persistence-multiple-db.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-multiple-db.properties similarity index 100% rename from spring-jpa/src/main/resources/persistence-multiple-db.properties rename to persistence-modules/spring-jpa/src/main/resources/persistence-multiple-db.properties diff --git a/spring-jpa/src/main/resources/persistence-mysql.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-mysql.properties similarity index 100% rename from spring-jpa/src/main/resources/persistence-mysql.properties rename to persistence-modules/spring-jpa/src/main/resources/persistence-mysql.properties diff --git a/spring-jpa/src/main/resources/persistence-student-h2.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-student-h2.properties similarity index 100% rename from spring-jpa/src/main/resources/persistence-student-h2.properties rename to persistence-modules/spring-jpa/src/main/resources/persistence-student-h2.properties diff --git a/spring-jpa/src/main/resources/persistence-student.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-student.properties similarity index 100% rename from spring-jpa/src/main/resources/persistence-student.properties rename to persistence-modules/spring-jpa/src/main/resources/persistence-student.properties diff --git a/spring-jpa/src/main/resources/persistence.xml b/persistence-modules/spring-jpa/src/main/resources/persistence.xml similarity index 100% rename from spring-jpa/src/main/resources/persistence.xml rename to persistence-modules/spring-jpa/src/main/resources/persistence.xml diff --git a/spring-jpa/src/main/resources/server.xml b/persistence-modules/spring-jpa/src/main/resources/server.xml similarity index 100% rename from spring-jpa/src/main/resources/server.xml rename to persistence-modules/spring-jpa/src/main/resources/server.xml diff --git a/spring-jpa/src/main/resources/sqlfiles.properties b/persistence-modules/spring-jpa/src/main/resources/sqlfiles.properties similarity index 100% rename from spring-jpa/src/main/resources/sqlfiles.properties rename to persistence-modules/spring-jpa/src/main/resources/sqlfiles.properties diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp b/persistence-modules/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp similarity index 100% rename from spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp rename to persistence-modules/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp diff --git a/spring-jpa/src/test/java/META-INF/persistence.xml b/persistence-modules/spring-jpa/src/test/java/META-INF/persistence.xml similarity index 100% rename from spring-jpa/src/test/java/META-INF/persistence.xml rename to persistence-modules/spring-jpa/src/test/java/META-INF/persistence.xml diff --git a/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java similarity index 100% rename from spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java diff --git a/spring-jpa/src/test/resources/.gitignore b/persistence-modules/spring-jpa/src/test/resources/.gitignore similarity index 100% rename from spring-jpa/src/test/resources/.gitignore rename to persistence-modules/spring-jpa/src/test/resources/.gitignore diff --git a/spring-jpa/src/test/resources/dsrouting-db.sql b/persistence-modules/spring-jpa/src/test/resources/dsrouting-db.sql similarity index 100% rename from spring-jpa/src/test/resources/dsrouting-db.sql rename to persistence-modules/spring-jpa/src/test/resources/dsrouting-db.sql diff --git a/spring-jpa/src/test/resources/persistence-student.properties b/persistence-modules/spring-jpa/src/test/resources/persistence-student.properties similarity index 100% rename from spring-jpa/src/test/resources/persistence-student.properties rename to persistence-modules/spring-jpa/src/test/resources/persistence-student.properties diff --git a/pom.xml b/pom.xml index 20f7c4ffad..9b1f50f05e 100644 --- a/pom.xml +++ b/pom.xml @@ -177,7 +177,7 @@ spring-jmeter-jenkins spring-jms spring-jooq - spring-jpa + persistence-modules/spring-jpa spring-kafka spring-katharsis spring-ldap From d418a40b7cdd15aea337d2a5bb590a5bff1f2d19 Mon Sep 17 00:00:00 2001 From: daoire Date: Sun, 26 Nov 2017 17:29:14 +0000 Subject: [PATCH 22/52] Update README.md --- core-java/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java/README.md b/core-java/README.md index 4573d5f7e2..1feee4126e 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -119,4 +119,5 @@ - [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array) - [Guide to Java String Pool](http://www.baeldung.com/java-string-pool) - [Copy a File with Java](http://www.baeldung.com/java-copy-file) +- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns) From 29bfac0e957bdbb6a6d0a4549107376b1a33659e Mon Sep 17 00:00:00 2001 From: Shouvik Bhattacharya <33756821+shouvikbhattacharya@users.noreply.github.com> Date: Mon, 27 Nov 2017 03:36:18 +0530 Subject: [PATCH 23/52] BAEL-1305: A Simple Guide to Java Loops. (#3133) --- .../java/com/baeldung/loops/LoopsInJava.java | 43 +++++++++++++++++++ .../com/baeldung/loops/WhenUsingLoops.java | 37 ++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/loops/LoopsInJava.java create mode 100644 core-java/src/test/java/com/baeldung/loops/WhenUsingLoops.java diff --git a/core-java/src/main/java/com/baeldung/loops/LoopsInJava.java b/core-java/src/main/java/com/baeldung/loops/LoopsInJava.java new file mode 100644 index 0000000000..1b2e621b52 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/loops/LoopsInJava.java @@ -0,0 +1,43 @@ +package com.baeldung.loops; + +public class LoopsInJava { + + public int[] simple_for_loop() { + int[] arr = new int[5]; + for (int i = 0; i < 5; i++) { + arr[i] = i; + System.out.println("Simple for loop: i - " + i); + } + return arr; + } + + public int[] enhanced_for_each_loop() { + int[] intArr = { 0, 1, 2, 3, 4 }; + int[] arr = new int[5]; + for (int num : intArr) { + arr[num] = num; + System.out.println("Enhanced for-each loop: i - " + num); + } + return arr; + } + + public int[] while_loop() { + int i = 0; + int[] arr = new int[5]; + while (i < 5) { + arr[i] = i; + System.out.println("While loop: i - " + i++); + } + return arr; + } + + public int[] do_while_loop() { + int i = 0; + int[] arr = new int[5]; + do { + arr[i] = i; + System.out.println("Do-While loop: i - " + i++); + } while (i < 5); + return arr; + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/loops/WhenUsingLoops.java b/core-java/src/test/java/com/baeldung/loops/WhenUsingLoops.java new file mode 100644 index 0000000000..9590eabfef --- /dev/null +++ b/core-java/src/test/java/com/baeldung/loops/WhenUsingLoops.java @@ -0,0 +1,37 @@ +package com.baeldung.loops; + +import org.junit.Assert; +import org.junit.Test; + +public class WhenUsingLoops { + + private LoopsInJava loops = new LoopsInJava(); + + @Test + public void shouldRunForLoop() { + int[] expected = { 0, 1, 2, 3, 4 }; + int[] actual = loops.simple_for_loop(); + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void shouldRunEnhancedForeachLoop() { + int[] expected = { 0, 1, 2, 3, 4 }; + int[] actual = loops.enhanced_for_each_loop(); + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void shouldRunWhileLoop() { + int[] expected = { 0, 1, 2, 3, 4 }; + int[] actual = loops.while_loop(); + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void shouldRunDoWhileLoop() { + int[] expected = { 0, 1, 2, 3, 4 }; + int[] actual = loops.do_while_loop(); + Assert.assertArrayEquals(expected, actual); + } +} From b4d83ef9b2360e599fb3223a473d1a1b3aae51dc Mon Sep 17 00:00:00 2001 From: Daniele Demichelis Date: Sun, 26 Nov 2017 23:12:22 +0100 Subject: [PATCH 24/52] upgraded to OSGi 6.0.0 & maven-bundle-plugin 3.3.0 (#3141) --- osgi/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osgi/pom.xml b/osgi/pom.xml index 4298a0d3eb..e6ef9c3192 100644 --- a/osgi/pom.xml +++ b/osgi/pom.xml @@ -65,7 +65,7 @@ org.osgi org.osgi.core - 5.0.0 + 6.0.0 provided @@ -77,7 +77,7 @@ org.apache.felix maven-bundle-plugin - 1.4.0 + 3.3.0 true From 6536e39622dffac0693c2c79f7debd4a192a078c Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 27 Nov 2017 10:03:08 +0100 Subject: [PATCH 25/52] Update README.md (#3050) --- noexception/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noexception/README.md b/noexception/README.md index d840191369..9dd4c11190 100644 --- a/noexception/README.md +++ b/noexception/README.md @@ -1,2 +1,2 @@ ### Relevant Articles: -- [Introduction to NoException](http://www.baeldung.com/intrduction-to-noexception) +- [Introduction to NoException](http://www.baeldung.com/introduction-to-noexception) From ebc25b2b41a765b3503b1de50e17c5fc8090501a Mon Sep 17 00:00:00 2001 From: Eugen Paraschiv Date: Mon, 27 Nov 2017 15:56:07 +0200 Subject: [PATCH 26/52] minor cleanup work --- bootique/dependency-reduced-pom.xml | 8 +++++++- ...yAnnotationJavaConfigMainIntegrationTest.java | 16 ++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/bootique/dependency-reduced-pom.xml b/bootique/dependency-reduced-pom.xml index ed18f4e42a..ab09cfb7b1 100644 --- a/bootique/dependency-reduced-pom.xml +++ b/bootique/dependency-reduced-pom.xml @@ -28,8 +28,14 @@ junit junit - 3.8.1 + 4.12 test + + + hamcrest-core + org.hamcrest + + diff --git a/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java index 61d821e85e..614de6d3ad 100644 --- a/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java +++ b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java @@ -1,6 +1,5 @@ package com.baeldung.hibernate.manytomany; - import java.util.HashSet; import java.util.Set; import org.hibernate.Session; @@ -17,10 +16,8 @@ import com.baeldung.hibernate.manytomany.model.Employee; import com.baeldung.hibernate.manytomany.model.Project; import com.baeldung.manytomany.spring.PersistenceConfig; - - @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) public class HibernateManyToManyAnnotationJavaConfigMainIntegrationTest { @Autowired @@ -28,7 +25,6 @@ public class HibernateManyToManyAnnotationJavaConfigMainIntegrationTest { private Session session; - @Before public final void before() { session = sessionFactory.openSession(); @@ -43,11 +39,11 @@ public class HibernateManyToManyAnnotationJavaConfigMainIntegrationTest { @Test public final void whenEntitiesAreCreated_thenNoExceptions() { - Set projects = new HashSet(); - projects.add(new Project("IT Project")); - projects.add(new Project("Networking Project")); - session.persist(new Employee("Peter", "Oven", projects)); - session.persist(new Employee("Allan", "Norman", projects)); + Set projects = new HashSet(); + projects.add(new Project("IT Project")); + projects.add(new Project("Networking Project")); + session.persist(new Employee("Peter", "Oven", projects)); + session.persist(new Employee("Allan", "Norman", projects)); } } From bac574a7c22d2a20730ebbce70b51a7c90d46f47 Mon Sep 17 00:00:00 2001 From: Eugen Paraschiv Date: Mon, 27 Nov 2017 16:08:53 +0200 Subject: [PATCH 27/52] cleanup work after build --- undertow/dependency-reduced-pom.xml | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 undertow/dependency-reduced-pom.xml diff --git a/undertow/dependency-reduced-pom.xml b/undertow/dependency-reduced-pom.xml new file mode 100644 index 0000000000..0654c82b74 --- /dev/null +++ b/undertow/dependency-reduced-pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + com.baeldung.undertow + undertow + undertow + 1.0-SNAPSHOT + http://maven.apache.org + + ${project.artifactId} + + + maven-shade-plugin + + + package + + shade + + + + + + maven-jar-plugin + + + + com.baeldung.undertow.SimpleServer + + + + + + + + 1.8 + 1.8 + + + From 68eae8ebf414194419123d2e9a28e5f18517fd13 Mon Sep 17 00:00:00 2001 From: "dhrubajyoti.bhattacharjee" Date: Mon, 27 Nov 2017 21:14:31 +0530 Subject: [PATCH 28/52] BAEL-1160 Introduction to Apache Lucene-Added new sections --- lucene/pom.xml | 2 - .../baeldung/lucene/InMemoryLuceneIndex.java | 54 +++++++- .../lucene/LuceneInMemorySearchTest.java | 131 +++++++++++++++++- 3 files changed, 182 insertions(+), 5 deletions(-) diff --git a/lucene/pom.xml b/lucene/pom.xml index 42b81a7d4a..6659d9ac32 100644 --- a/lucene/pom.xml +++ b/lucene/pom.xml @@ -31,7 +31,5 @@ 4.12 test - - \ No newline at end of file diff --git a/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java b/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java index 40a35fad86..97b1ec7b5d 100644 --- a/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java +++ b/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java @@ -7,18 +7,22 @@ import java.util.List; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; +import org.apache.lucene.document.SortedDocValuesField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; +import org.apache.lucene.search.Sort; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; +import org.apache.lucene.util.BytesRef; public class InMemoryLuceneIndex { @@ -45,6 +49,7 @@ public class InMemoryLuceneIndex { document.add(new TextField("title", title, Field.Store.YES)); document.add(new TextField("body", body, Field.Store.YES)); + document.add(new SortedDocValuesField("title", new BytesRef(title))); writter.addDocument(document); writter.close(); @@ -73,6 +78,51 @@ public class InMemoryLuceneIndex { } + public void deleteDocument(Term term) { + try { + IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer); + IndexWriter writter = new IndexWriter(memoryIndex, indexWriterConfig); + writter.deleteDocuments(term); + writter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public List searchIndex(Query query) { + try { + IndexReader indexReader = DirectoryReader.open(memoryIndex); + IndexSearcher searcher = new IndexSearcher(indexReader); + TopDocs topDocs = searcher.search(query, 10); + List documents = new ArrayList<>(); + for (ScoreDoc scoreDoc : topDocs.scoreDocs) { + documents.add(searcher.doc(scoreDoc.doc)); + } + + return documents; + } catch (IOException e) { + e.printStackTrace(); + } + return null; + + } + + public List searchIndex(Query query, Sort sort) { + try { + IndexReader indexReader = DirectoryReader.open(memoryIndex); + IndexSearcher searcher = new IndexSearcher(indexReader); + TopDocs topDocs = searcher.search(query, 10, sort); + List documents = new ArrayList<>(); + for (ScoreDoc scoreDoc : topDocs.scoreDocs) { + documents.add(searcher.doc(scoreDoc.doc)); + } + + return documents; + } catch (IOException e) { + e.printStackTrace(); + } + return null; + + } + } - - diff --git a/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java b/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java index c3a498a4b8..acf688cb99 100644 --- a/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java +++ b/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java @@ -4,7 +4,19 @@ import java.util.List; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.FuzzyQuery; +import org.apache.lucene.search.PhraseQuery; +import org.apache.lucene.search.PrefixQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.Sort; +import org.apache.lucene.search.SortField; +import org.apache.lucene.search.TermQuery; +import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.store.RAMDirectory; +import org.apache.lucene.util.BytesRef; import org.junit.Assert; import org.junit.Test; @@ -20,4 +32,121 @@ public class LuceneInMemorySearchTest { Assert.assertEquals("Hello world", documents.get(0).get("title")); } -} + @Test + public void givenTermQueryWhenFetchedDocumentThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("activity", "running in track"); + inMemoryLuceneIndex.indexDocument("activity", "Cars are running on road"); + + Term term = new Term("body", "running"); + Query query = new TermQuery(term); + + List documents = inMemoryLuceneIndex.searchIndex(query); + Assert.assertEquals(2, documents.size()); + } + + @Test + public void givenPrefixQueryWhenFetchedDocumentThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("article", "Lucene introduction"); + inMemoryLuceneIndex.indexDocument("article", "Introduction to Lucene"); + + Term term = new Term("body", "intro"); + Query query = new PrefixQuery(term); + + List documents = inMemoryLuceneIndex.searchIndex(query); + Assert.assertEquals(2, documents.size()); + } + + @Test + public void givenBooleanQueryWhenFetchedDocumentThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("Destination", "Las Vegas singapore car"); + inMemoryLuceneIndex.indexDocument("Commutes in singapore", "Bus Car Bikes"); + + Term term1 = new Term("body", "singapore"); + Term term2 = new Term("body", "car"); + + TermQuery query1 = new TermQuery(term1); + TermQuery query2 = new TermQuery(term2); + + BooleanQuery booleanQuery = new BooleanQuery.Builder().add(query1, BooleanClause.Occur.MUST) + .add(query2, BooleanClause.Occur.MUST).build(); + + List documents = inMemoryLuceneIndex.searchIndex(booleanQuery); + Assert.assertEquals(1, documents.size()); + } + + @Test + public void givenPhraseQueryWhenFetchedDocumentThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("quotes", "A rose by any other name would smell as sweet."); + + Query query = new PhraseQuery(1, "body", new BytesRef("smell"), new BytesRef("sweet")); + List documents = inMemoryLuceneIndex.searchIndex(query); + + Assert.assertEquals(1, documents.size()); + } + + @Test + public void givenFuzzyQueryWhenFetchedDocumentThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("article", "Halloween Festival"); + inMemoryLuceneIndex.indexDocument("decoration", "Decorations for Halloween"); + + Term term = new Term("body", "hallowen"); + Query query = new FuzzyQuery(term); + + List documents = inMemoryLuceneIndex.searchIndex(query); + Assert.assertEquals(2, documents.size()); + } + + @Test + public void givenWildCardQueryWhenFetchedDocumentThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("article", "Lucene introduction"); + inMemoryLuceneIndex.indexDocument("article", "Introducing Lucene with Spring"); + + Term term = new Term("body", "intro*"); + Query query = new WildcardQuery(term); + + List documents = inMemoryLuceneIndex.searchIndex(query); + Assert.assertEquals(2, documents.size()); + } + + @Test + public void givenSortFieldWhenSortedThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("Ganges", "River in India"); + inMemoryLuceneIndex.indexDocument("Mekong", "This river flows in south Asia"); + inMemoryLuceneIndex.indexDocument("Amazon", "Rain forest river"); + inMemoryLuceneIndex.indexDocument("Rhine", "Belongs to Europe"); + inMemoryLuceneIndex.indexDocument("Nile", "Longest River"); + + Term term = new Term("body", "river"); + Query query = new WildcardQuery(term); + + SortField sortField = new SortField("title", SortField.Type.STRING_VAL, false); + Sort sortByTitle = new Sort(sortField); + + List documents = inMemoryLuceneIndex.searchIndex(query, sortByTitle); + Assert.assertEquals(4, documents.size()); + Assert.assertEquals("Amazon", documents.get(0).getField("title").stringValue()); + } + + @Test + public void whenDocumentDeletedThenCorrect() { + InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); + inMemoryLuceneIndex.indexDocument("Ganges", "River in India"); + inMemoryLuceneIndex.indexDocument("Mekong", "This river flows in south Asia"); + + Term term = new Term("title", "ganges"); + inMemoryLuceneIndex.deleteDocument(term); + + Query query = new TermQuery(term); + + List documents = inMemoryLuceneIndex.searchIndex(query); + Assert.assertEquals(0, documents.size()); + } + +} \ No newline at end of file From 7f2ace0da913567513f9c4d6a2da15639054be86 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 27 Nov 2017 21:02:42 +0100 Subject: [PATCH 29/52] FilesTest fix (#3146) * FilesTest fix * StopThreadTest fix --- .../concurrent/stopping/StopThreadTest.java | 14 ++-- .../baeldung/file/FileOutputStreamTest.java | 36 ---------- .../java/com/baeldung/file/FileUtilsTest.java | 37 ---------- .../com/baeldung/file/FileWriterTest.java | 40 ----------- .../java/com/baeldung/file/FilesTest.java | 68 +++++++++++++++++-- .../java/com/baeldung/file/GuavaTest.java | 48 ------------- 6 files changed, 72 insertions(+), 171 deletions(-) delete mode 100644 core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java delete mode 100644 core-java/src/test/java/com/baeldung/file/FileUtilsTest.java delete mode 100644 core-java/src/test/java/com/baeldung/file/FileWriterTest.java delete mode 100644 core-java/src/test/java/com/baeldung/file/GuavaTest.java diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java b/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java index 8c1bdbf787..70854f013f 100644 --- a/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java +++ b/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java @@ -1,7 +1,11 @@ package com.baeldung.concurrent.stopping; +import com.jayway.awaitility.Awaitility; import org.junit.Test; +import java.util.concurrent.TimeUnit; + +import static com.jayway.awaitility.Awaitility.await; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -22,11 +26,10 @@ public class StopThreadTest { // Stop it and make sure the flags have been reversed controlSubThread.stop(); - Thread.sleep(interval); - assertTrue(controlSubThread.isStopped()); + await() + .until(() -> assertTrue(controlSubThread.isStopped())); } - @Test public void whenInterruptedThreadIsStopped() throws InterruptedException { @@ -44,7 +47,8 @@ public class StopThreadTest { controlSubThread.interrupt(); // Wait less than the time we would normally sleep, and make sure we exited. - Thread.sleep(interval/10); - assertTrue(controlSubThread.isStopped()); + Awaitility.await() + .atMost(interval/ 10, TimeUnit.MILLISECONDS) + .until(controlSubThread::isStopped); } } diff --git a/core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java b/core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java deleted file mode 100644 index 451c1b4c4d..0000000000 --- a/core-java/src/test/java/com/baeldung/file/FileOutputStreamTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.file; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.junit.After; -import org.junit.Test; - -import com.baeldung.util.StreamUtils; - -public class FileOutputStreamTest { - - public static final String fileName = "src/main/resources/countries.properties"; - - @Test - public void whenAppendToFileUsingFileOutputStream_thenCorrect() throws Exception { - FileOutputStream fos = new FileOutputStream(fileName, true); - fos.write("Spain\r\n".getBytes()); - fos.close(); - - assertThat(StreamUtils.getStringFromInputStream( - new FileInputStream(fileName))) - .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); - } - - @After - public void revertFile() throws IOException { - PrintWriter writer = new PrintWriter(fileName); - writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); - writer.close(); - } -} diff --git a/core-java/src/test/java/com/baeldung/file/FileUtilsTest.java b/core-java/src/test/java/com/baeldung/file/FileUtilsTest.java deleted file mode 100644 index 9ee8726575..0000000000 --- a/core-java/src/test/java/com/baeldung/file/FileUtilsTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.file; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.charset.StandardCharsets; - -import org.apache.commons.io.FileUtils; -import org.junit.After; -import org.junit.Test; - -import com.baeldung.util.StreamUtils; - -public class FileUtilsTest { - - public static final String fileName = "src/main/resources/countries.properties"; - - @Test - public void whenAppendToFileUsingFiles_thenCorrect() throws IOException { - File file = new File(fileName); - FileUtils.writeStringToFile(file, "Spain\r\n", StandardCharsets.UTF_8, true); - - assertThat(StreamUtils.getStringFromInputStream( - new FileInputStream(fileName))) - .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); - } - - @After - public void revertFile() throws IOException { - PrintWriter writer = new PrintWriter(fileName); - writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); - writer.close(); - } -} diff --git a/core-java/src/test/java/com/baeldung/file/FileWriterTest.java b/core-java/src/test/java/com/baeldung/file/FileWriterTest.java deleted file mode 100644 index 8d2ce4310e..0000000000 --- a/core-java/src/test/java/com/baeldung/file/FileWriterTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.file; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.BufferedWriter; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; - -import org.junit.After; -import org.junit.Test; - -import com.baeldung.util.StreamUtils; - -public class FileWriterTest { - - public static final String fileName = "src/main/resources/countries.properties"; - - @Test - public void whenAppendToFileUsingFileWriter_thenCorrect() throws IOException { - FileWriter fw = new FileWriter(fileName, true); - BufferedWriter bw = new BufferedWriter(fw); - bw.write("Spain"); - bw.newLine(); - bw.close(); - - assertThat( - StreamUtils.getStringFromInputStream( - new FileInputStream(fileName))) - .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\n"); - } - - @After - public void revertFile() throws IOException { - PrintWriter writer = new PrintWriter(fileName); - writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); - writer.close(); - } -} diff --git a/core-java/src/test/java/com/baeldung/file/FilesTest.java b/core-java/src/test/java/com/baeldung/file/FilesTest.java index bd39d004d3..e17e8580aa 100644 --- a/core-java/src/test/java/com/baeldung/file/FilesTest.java +++ b/core-java/src/test/java/com/baeldung/file/FilesTest.java @@ -2,14 +2,24 @@ package com.baeldung.file; import static org.assertj.core.api.Assertions.assertThat; +import java.io.BufferedWriter; +import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; +import com.google.common.base.Charsets; +import com.google.common.io.CharSink; +import com.google.common.io.FileWriteMode; +import org.apache.commons.io.FileUtils; import org.junit.After; +import org.junit.Before; import org.junit.Test; import com.baeldung.util.StreamUtils; @@ -18,6 +28,26 @@ public class FilesTest { public static final String fileName = "src/main/resources/countries.properties"; + @Before + @After + public void setup() throws Exception { + PrintWriter writer = new PrintWriter(fileName); + writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); + writer.close(); + } + + @Test + public void whenAppendToFileUsingGuava_thenCorrect() throws IOException { + File file = new File(fileName); + CharSink chs = com.google.common.io.Files.asCharSink(file, Charsets.UTF_8, FileWriteMode.APPEND); + chs.write("Spain\r\n"); + + assertThat(StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); + } + + @Test public void whenAppendToFileUsingFiles_thenCorrect() throws IOException { Files.write(Paths.get(fileName), "Spain\r\n".getBytes(), StandardOpenOption.APPEND); @@ -27,10 +57,38 @@ public class FilesTest { .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); } - @After - public void revertFile() throws IOException { - PrintWriter writer = new PrintWriter(fileName); - writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); - writer.close(); + @Test + public void whenAppendToFileUsingFileUtils_thenCorrect() throws IOException { + File file = new File(fileName); + FileUtils.writeStringToFile(file, "Spain\r\n", StandardCharsets.UTF_8, true); + + assertThat(StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); + } + + @Test + public void whenAppendToFileUsingFileOutputStream_thenCorrect() throws Exception { + FileOutputStream fos = new FileOutputStream(fileName, true); + fos.write("Spain\r\n".getBytes()); + fos.close(); + + assertThat(StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); + } + + @Test + public void whenAppendToFileUsingFileWriter_thenCorrect() throws IOException { + FileWriter fw = new FileWriter(fileName, true); + BufferedWriter bw = new BufferedWriter(fw); + bw.write("Spain"); + bw.newLine(); + bw.close(); + + assertThat( + StreamUtils.getStringFromInputStream( + new FileInputStream(fileName))) + .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\n"); } } diff --git a/core-java/src/test/java/com/baeldung/file/GuavaTest.java b/core-java/src/test/java/com/baeldung/file/GuavaTest.java deleted file mode 100644 index 5a7ec6c4a8..0000000000 --- a/core-java/src/test/java/com/baeldung/file/GuavaTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.baeldung.file; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import com.baeldung.util.StreamUtils; -import com.google.common.base.Charsets; -import com.google.common.io.CharSink; -import com.google.common.io.FileWriteMode; -import com.google.common.io.Files; - -public class GuavaTest { - - public static final String fileName = "src/main/resources/countries.properties"; - - @Before - public void setup() throws Exception { - PrintWriter writer = new PrintWriter(fileName); - writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); - writer.close(); - } - - @Test - public void whenAppendToFileUsingGuava_thenCorrect() throws IOException { - File file = new File(fileName); - CharSink chs = Files.asCharSink(file, Charsets.UTF_8, FileWriteMode.APPEND); - chs.write("Spain\r\n"); - - assertThat(StreamUtils.getStringFromInputStream( - new FileInputStream(fileName))) - .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); - } - - @After - public void revertFile() throws IOException { - PrintWriter writer = new PrintWriter(fileName); - writer.print("UK\r\n" + "US\r\n" + "Germany\r\n"); - writer.close(); - } -} From 5f57a6cb4bfb7aecd3bba2245f6caf472015279d Mon Sep 17 00:00:00 2001 From: Eugen Paraschiv Date: Tue, 28 Nov 2017 12:36:54 +0200 Subject: [PATCH 30/52] separating the sun specific functionality into a new module --- core-java-sun/.gitignore | 26 + core-java-sun/README.md | 123 +++++ core-java-sun/pom.xml | 489 ++++++++++++++++++ .../src/main/java/com/baeldung/.gitignore | 13 + .../src/main/java/com/baeldung/README.md | 2 + .../java/com/baeldung/javac/Positive.java | 0 .../com/baeldung/javac/SampleJavacPlugin.java | 0 .../src/main/resources/log4j.properties | 6 + core-java-sun/src/main/resources/logback.xml | 19 + .../SampleJavacPluginIntegrationTest.java | 0 .../com/baeldung/javac/SimpleClassFile.java | 0 .../com/baeldung/javac/SimpleFileManager.java | 0 .../com/baeldung/javac/SimpleSourceFile.java | 0 .../java/com/baeldung/javac/TestCompiler.java | 0 .../java/com/baeldung/javac/TestRunner.java | 0 core-java-sun/src/test/resources/.gitignore | 13 + core-java/pom.xml | 12 - 17 files changed, 691 insertions(+), 12 deletions(-) create mode 100644 core-java-sun/.gitignore create mode 100644 core-java-sun/README.md create mode 100644 core-java-sun/pom.xml create mode 100644 core-java-sun/src/main/java/com/baeldung/.gitignore create mode 100644 core-java-sun/src/main/java/com/baeldung/README.md rename {core-java => core-java-sun}/src/main/java/com/baeldung/javac/Positive.java (100%) rename {core-java => core-java-sun}/src/main/java/com/baeldung/javac/SampleJavacPlugin.java (100%) create mode 100644 core-java-sun/src/main/resources/log4j.properties create mode 100644 core-java-sun/src/main/resources/logback.xml rename {core-java => core-java-sun}/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java (100%) rename {core-java => core-java-sun}/src/test/java/com/baeldung/javac/SimpleClassFile.java (100%) rename {core-java => core-java-sun}/src/test/java/com/baeldung/javac/SimpleFileManager.java (100%) rename {core-java => core-java-sun}/src/test/java/com/baeldung/javac/SimpleSourceFile.java (100%) rename {core-java => core-java-sun}/src/test/java/com/baeldung/javac/TestCompiler.java (100%) rename {core-java => core-java-sun}/src/test/java/com/baeldung/javac/TestRunner.java (100%) create mode 100644 core-java-sun/src/test/resources/.gitignore diff --git a/core-java-sun/.gitignore b/core-java-sun/.gitignore new file mode 100644 index 0000000000..3de4cc647e --- /dev/null +++ b/core-java-sun/.gitignore @@ -0,0 +1,26 @@ +*.class + +0.* + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* +.resourceCache + +# Packaged files # +*.jar +*.war +*.ear + +# Files generated by integration tests +*.txt +backup-pom.xml +/bin/ +/temp + +#IntelliJ specific +.idea/ +*.iml \ No newline at end of file diff --git a/core-java-sun/README.md b/core-java-sun/README.md new file mode 100644 index 0000000000..1feee4126e --- /dev/null +++ b/core-java-sun/README.md @@ -0,0 +1,123 @@ +========= + +## Core Java Cookbooks and Examples + +### Relevant Articles: +- [Immutable ArrayList in Java](http://www.baeldung.com/java-immutable-list) +- [Java - Reading a Large File Efficiently](http://www.baeldung.com/java-read-lines-large-file) +- [Java InputStream to String](http://www.baeldung.com/convert-input-stream-to-string) +- [Converting between an Array and a List in Java](http://www.baeldung.com/convert-array-to-list-and-list-to-array) +- [Converting between an Array and a Set in Java](http://www.baeldung.com/convert-array-to-set-and-set-to-array) +- [Converting between a List and a Set in Java](http://www.baeldung.com/convert-list-to-set-and-set-to-list) +- [Convert a Map to an Array, List or Set in Java](http://www.baeldung.com/convert-map-values-to-array-list-set) +- [Java – Write to File](http://www.baeldung.com/java-write-to-file) +- [Java - Convert File to InputStream](http://www.baeldung.com/convert-file-to-input-stream) +- [Java – Random Long, Float, Integer and Double](http://www.baeldung.com/java-generate-random-long-float-integer-double) +- [Java – Generate Random String](http://www.baeldung.com/java-random-string) +- [Java Scanner](http://www.baeldung.com/java-scanner) +- [Java Timer](http://www.baeldung.com/java-timer-and-timertask) +- [Java – Byte Array to Writer](http://www.baeldung.com/java-convert-byte-array-to-writer) +- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) +- [MD5 Hashing in Java](http://www.baeldung.com/java-md5) +- [Guide to the Java ArrayList](http://www.baeldung.com/java-arraylist) +- [Guide to Java Reflection](http://www.baeldung.com/java-reflection) +- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) +- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) +- [Random List Element](http://www.baeldung.com/java-random-list-element) +- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) +- [Java – Directory Size](http://www.baeldung.com/java-folder-size) +- [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources) +- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join) +- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java) +- [How to Convert String to different data types in Java](http://www.baeldung.com/java-string-conversions) +- [Introduction to Java Generics](http://www.baeldung.com/java-generics) +- [Generate equals() and hashCode() with Eclipse](http://www.baeldung.com/java-eclipse-equals-and-hashcode) +- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java) +- [Sorting in Java](http://www.baeldung.com/java-sorting) +- [Getting Started with Java Properties](http://www.baeldung.com/java-properties) +- [Grep in Java](http://www.baeldung.com/grep-in-java) +- [Java - Combine Multiple Collections](http://www.baeldung.com/java-combine-multiple-collections) +- [Simulated Annealing for Travelling Salesman Problem](http://www.baeldung.com/java-simulated-annealing-for-traveling-salesman) +- [Slope One Algorithm: Collaborative Filtering Recommendation Systems](http://www.baeldung.com/java-collaborative-filtering-recommendations) +- [Differences Between the Java WatchService API and the Apache Commons IO Monitor Library](http://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library) +- [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java) +- [URL Encoding and Decoding in Java](http://www.baeldung.com/java-url-encoding-decoding) +- [Calculate the Size of a File in Java](http://www.baeldung.com/java-file-size) +- [The Basics of Java Generics](http://www.baeldung.com/java-generics) +- [The Traveling Salesman Problem in Java](http://www.baeldung.com/java-simulated-annealing-for-traveling-salesman) +- [How to Create an Executable JAR with Maven](http://www.baeldung.com/executable-jar-with-maven) +- [How to Design a Genetic Algorithm in Java](http://www.baeldung.com/java-genetic-algorithm) +- [Guide to WeakHashMap in Java](http://www.baeldung.com/java-weakhashmap) +- [Spring Security – Cache Control Headers](http://www.baeldung.com/spring-security-cache-control-headers) +- [Basic Introduction to JMX](http://www.baeldung.com/java-management-extensions) +- [AWS Lambda With Java](http://www.baeldung.com/java-aws-lambda) +- [Introduction to Nashorn](http://www.baeldung.com/java-nashorn) +- [Guide to the Guava BiMap](http://www.baeldung.com/guava-bimap) +- [Iterable to Stream in Java](http://www.baeldung.com/java-iterable-to-stream) +- [Chained Exceptions in Java](http://www.baeldung.com/java-chained-exceptions) +- [The Java HashMap Under the Hood](http://www.baeldung.com/java-hashmap) +- [A Guide to LinkedHashMap in Java](http://www.baeldung.com/java-linked-hashmap) +- [A Guide to TreeMap in Java](http://www.baeldung.com/java-treemap) +- [A Quick JUnit vs TestNG Comparison](http://www.baeldung.com/junit-vs-testng) +- [Java Primitive Conversions](http://www.baeldung.com/java-primitive-conversions) +- [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) +- [Removing all nulls from a List in Java](http://www.baeldung.com/java-remove-nulls-from-list) +- [Removing all duplicates from a List in Java](http://www.baeldung.com/java-remove-duplicates-from-list) +- [Using Math.pow in Java](http://www.baeldung.com/java-math-pow) +- [Converting Strings to Enums in Java](http://www.baeldung.com/java-string-to-enum) +- [Flattening Nested Collections in Java](http://www.baeldung.com/java-flatten-nested-collections) +- [Quick Guide to the Java StringTokenizer](http://www.baeldung.com/java-stringtokenizer) +- [JVM Log Forging](http://www.baeldung.com/jvm-log-forging) +- [Guide to sun.misc.Unsafe](http://www.baeldung.com/java-unsafe) +- [HashSet and TreeSet Comparison](http://www.baeldung.com/java-hashset-vs-treeset) +- [How to Perform a Simple HTTP Request in Java](http://www.baeldung.com/java-http-request) +- [Call Methods at Runtime Using Java Reflection](http://www.baeldung.com/java-method-reflection) +- [Guide to UUID in JAVA](http://www.baeldung.com/guide-to-uuid-in-java) +- [Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java](http://www.baeldung.com/java-path) +- [How to Add a Single Element to a Stream](http://www.baeldung.com/java-stream-append-prepend) +- [Iterating Over Enum Values in Java](http://www.baeldung.com/java-enum-iteration) +- [Kotlin Java Interoperability](http://www.baeldung.com/kotlin-java-interoperability) +- [Using Java MappedByteBuffer](http://www.baeldung.com/java-mapped-byte-buffer) +- [How to Round a Number to N Decimal Places in Java](http://www.baeldung.com/java-round-decimal-number) +- [Changing Annotation Parameters At Runtime](http://www.baeldung.com/java-reflection-change-annotation-params) +- [How to Find all Getters Returning Null](http://www.baeldung.com/java-getters-returning-null) +- [Converting String to Stream of chars](http://www.baeldung.com/java-string-to-stream) +- [Changing the Order in a Sum Operation Can Produce Different Results?](http://www.baeldung.com/java-floating-point-sum-order) +- [How to Get a Name of a Method Being Executed?](http://www.baeldung.com/java-name-of-executing-method) +- [Iterate over a Map in Java](http://www.baeldung.com/java-iterate-map) +- [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies) +- [How to Copy an Array in Java](http://www.baeldung.com/java-array-copy) +- [Introduction to JDBC](http://www.baeldung.com/java-jdbc) +- [Period and Duration in Java](http://www.baeldung.com/java-period-duration) +- [Converting a Stack Trace to a String in Java](http://www.baeldung.com/java-stacktrace-to-string) +- [Count Occurrences of a Char in a String](http://www.baeldung.com/java-count-chars) +- [Java Double Brace Initialization](http://www.baeldung.com/java-double-brace-initialization) +- [The StackOverflowError in Java](http://www.baeldung.com/java-stack-overflow-error) +- [Split a String in Java](http://www.baeldung.com/java-split-string) +- [Introduction to Java Serialization](http://www.baeldung.com/java-serialization) +- [How to Remove the Last Character of a String?](http://www.baeldung.com/java-remove-last-character-of-string) +- [ClassNotFoundException vs NoClassDefFoundError](http://www.baeldung.com/java-classnotfoundexception-and-noclassdeffounderror) +- [Guide to UUID in Java](http://www.baeldung.com/java-uuid) +- [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char) +- [Guide to hashCode() in Java](http://www.baeldung.com/java-hashcode) +- [Collect a Java Stream to an Immutable Collection](http://www.baeldung.com/java-stream-immutable-collection) +- [Difference between URL and URI](http://www.baeldung.com/java-url-vs-uri) +- [Broadcasting and Multicasting in Java](http://www.baeldung.com/java-broadcast-multicast) +- [Converting a List to String in Java](http://www.baeldung.com/java-list-to-string) +- [CharSequence vs. String in Java](http://www.baeldung.com/java-char-sequence-string) +- [Period and Duration in Java](http://www.baeldung.com/java-period-duration) +- [Guide to the Diamond Operator in Java](http://www.baeldung.com/java-diamond-operator) +- [Singletons in Java](http://www.baeldung.com/java-singleton) +- [“Sneaky Throws” in Java](http://www.baeldung.com/java-sneaky-throws) +- [OutOfMemoryError: GC Overhead Limit Exceeded](http://www.baeldung.com/java-gc-overhead-limit-exceeded) +- [How to Iterate Over a Stream With Indices](http://www.baeldung.com/java-stream-indices) +- [StringBuilder and StringBuffer in Java](http://www.baeldung.com/java-string-builder-string-buffer) +- [Number of Digits in an Integer in Java](http://www.baeldung.com/java-number-of-digits-in-int) +- [Proxy, Decorator, Adapter and Bridge Patterns](http://www.baeldung.com/java-structural-design-patterns) +- [Creating a Java Compiler Plugin](http://www.baeldung.com/java-build-compiler-plugin) +- [A Guide to the Static Keyword in Java](http://www.baeldung.com/java-static) +- [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array) +- [Guide to Java String Pool](http://www.baeldung.com/java-string-pool) +- [Copy a File with Java](http://www.baeldung.com/java-copy-file) +- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns) + diff --git a/core-java-sun/pom.xml b/core-java-sun/pom.xml new file mode 100644 index 0000000000..3997f47d19 --- /dev/null +++ b/core-java-sun/pom.xml @@ -0,0 +1,489 @@ + + 4.0.0 + com.baeldung + core-java-sun + 0.1.0-SNAPSHOT + jar + + core-java-sun + + + + + + net.sourceforge.collections + collections-generic + ${collections-generic.version} + + + com.google.guava + guava + ${guava.version} + + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + + commons-io + commons-io + ${commons-io.version} + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + org.apache.commons + commons-math3 + ${commons-math3.version} + + + + org.decimal4j + decimal4j + ${decimal4j.version} + + + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + + + + org.unix4j + unix4j-command + ${unix4j.version} + + + + com.googlecode.grep4j + grep4j + ${grep4j.version} + + + + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + + log4j + log4j + 1.2.17 + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + + + + org.hamcrest + hamcrest-all + 1.3 + test + + + + junit + junit + ${junit.version} + test + + + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + org.assertj + assertj-core + ${assertj.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + com.jayway.awaitility + awaitility + ${avaitility.version} + test + + + + commons-codec + commons-codec + ${commons-codec.version} + + + + org.javamoney + moneta + 1.1 + + + + org.owasp.esapi + esapi + 2.1.0.1 + + + + com.sun.messaging.mq + fscontext + ${fscontext.version} + + + com.codepoetics + protonpack + ${protonpack.version} + + + one.util + streamex + ${streamex.version} + + + io.vavr + vavr + ${vavr.version} + + + org.openjdk.jmh + jmh-core + 1.19 + + + org.openjdk.jmh + jmh-generator-annprocess + 1.19 + + + org.springframework + spring-web + 4.3.4.RELEASE + + + com.sun + tools + 1.8.0 + system + ${java.home}/../lib/tools.jar + + + + + core-java + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*LiveTest.java + **/*IntegrationTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + prepare-package + + copy-dependencies + + + ${project.build.directory}/libs + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + libs/ + org.baeldung.executable.ExecutableMavenJar + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + package + + single + + + ${project.basedir} + + + org.baeldung.executable.ExecutableMavenJar + + + + jar-with-dependencies + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + + shade + + + true + + + org.baeldung.executable.ExecutableMavenJar + + + + + + + + + com.jolira + onejar-maven-plugin + + + + org.baeldung.executable.ExecutableMavenJar + true + ${project.build.finalName}-onejar.${project.packaging} + + + one-jar + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + spring-boot + org.baeldung.executable.ExecutableMavenJar + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + -Xmx300m + -XX:+UseParallelGC + -classpath + + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + + + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*ManualTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + org.codehaus.mojo + exec-maven-plugin + + + + run-benchmarks + + none + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + .* + + + + + + + + + + + + + 2.8.5 + + + 1.7.21 + 1.1.7 + + + 23.0 + 3.5 + 1.55 + 1.10 + 3.6.1 + 1.0.3 + 2.5 + 4.1 + 4.01 + 0.4 + 1.8.7 + 1.16.12 + 4.6-b01 + 1.13 + 0.6.5 + 0.9.0 + + + 1.3 + 4.12 + 2.8.9 + 3.6.1 + 1.7.0 + + + 3.6.0 + 2.19.1 + + \ No newline at end of file diff --git a/core-java-sun/src/main/java/com/baeldung/.gitignore b/core-java-sun/src/main/java/com/baeldung/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-sun/src/main/java/com/baeldung/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-sun/src/main/java/com/baeldung/README.md b/core-java-sun/src/main/java/com/baeldung/README.md new file mode 100644 index 0000000000..51809b2882 --- /dev/null +++ b/core-java-sun/src/main/java/com/baeldung/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [SHA-256 Hashing in Java](http://www.baeldung.com/sha-256-hashing-java) diff --git a/core-java/src/main/java/com/baeldung/javac/Positive.java b/core-java-sun/src/main/java/com/baeldung/javac/Positive.java similarity index 100% rename from core-java/src/main/java/com/baeldung/javac/Positive.java rename to core-java-sun/src/main/java/com/baeldung/javac/Positive.java diff --git a/core-java/src/main/java/com/baeldung/javac/SampleJavacPlugin.java b/core-java-sun/src/main/java/com/baeldung/javac/SampleJavacPlugin.java similarity index 100% rename from core-java/src/main/java/com/baeldung/javac/SampleJavacPlugin.java rename to core-java-sun/src/main/java/com/baeldung/javac/SampleJavacPlugin.java diff --git a/core-java-sun/src/main/resources/log4j.properties b/core-java-sun/src/main/resources/log4j.properties new file mode 100644 index 0000000000..621cf01735 --- /dev/null +++ b/core-java-sun/src/main/resources/log4j.properties @@ -0,0 +1,6 @@ +log4j.rootLogger=DEBUG, A1 + +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n \ No newline at end of file diff --git a/core-java-sun/src/main/resources/logback.xml b/core-java-sun/src/main/resources/logback.xml new file mode 100644 index 0000000000..ec0dc2469a --- /dev/null +++ b/core-java-sun/src/main/resources/logback.xml @@ -0,0 +1,19 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java b/core-java-sun/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java similarity index 100% rename from core-java/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java rename to core-java-sun/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java diff --git a/core-java/src/test/java/com/baeldung/javac/SimpleClassFile.java b/core-java-sun/src/test/java/com/baeldung/javac/SimpleClassFile.java similarity index 100% rename from core-java/src/test/java/com/baeldung/javac/SimpleClassFile.java rename to core-java-sun/src/test/java/com/baeldung/javac/SimpleClassFile.java diff --git a/core-java/src/test/java/com/baeldung/javac/SimpleFileManager.java b/core-java-sun/src/test/java/com/baeldung/javac/SimpleFileManager.java similarity index 100% rename from core-java/src/test/java/com/baeldung/javac/SimpleFileManager.java rename to core-java-sun/src/test/java/com/baeldung/javac/SimpleFileManager.java diff --git a/core-java/src/test/java/com/baeldung/javac/SimpleSourceFile.java b/core-java-sun/src/test/java/com/baeldung/javac/SimpleSourceFile.java similarity index 100% rename from core-java/src/test/java/com/baeldung/javac/SimpleSourceFile.java rename to core-java-sun/src/test/java/com/baeldung/javac/SimpleSourceFile.java diff --git a/core-java/src/test/java/com/baeldung/javac/TestCompiler.java b/core-java-sun/src/test/java/com/baeldung/javac/TestCompiler.java similarity index 100% rename from core-java/src/test/java/com/baeldung/javac/TestCompiler.java rename to core-java-sun/src/test/java/com/baeldung/javac/TestCompiler.java diff --git a/core-java/src/test/java/com/baeldung/javac/TestRunner.java b/core-java-sun/src/test/java/com/baeldung/javac/TestRunner.java similarity index 100% rename from core-java/src/test/java/com/baeldung/javac/TestRunner.java rename to core-java-sun/src/test/java/com/baeldung/javac/TestRunner.java diff --git a/core-java-sun/src/test/resources/.gitignore b/core-java-sun/src/test/resources/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-sun/src/test/resources/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java/pom.xml b/core-java/pom.xml index 77000b8741..2c4cbfc37b 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -181,11 +181,6 @@ 2.1.0.1 - - com.sun.messaging.mq - fscontext - ${fscontext.version} - com.codepoetics protonpack @@ -216,13 +211,6 @@ spring-web 4.3.4.RELEASE - - com.sun - tools - 1.8.0 - system - ${java.home}/../lib/tools.jar - From 1854175cb9b0ba85685abb88bed4de6b8fdd8587 Mon Sep 17 00:00:00 2001 From: Eugen Date: Tue, 28 Nov 2017 12:39:39 +0200 Subject: [PATCH 31/52] Update README.md --- core-java-sun/README.md | 117 ---------------------------------------- 1 file changed, 117 deletions(-) diff --git a/core-java-sun/README.md b/core-java-sun/README.md index 1feee4126e..9cf8b26f1b 100644 --- a/core-java-sun/README.md +++ b/core-java-sun/README.md @@ -3,121 +3,4 @@ ## Core Java Cookbooks and Examples ### Relevant Articles: -- [Immutable ArrayList in Java](http://www.baeldung.com/java-immutable-list) -- [Java - Reading a Large File Efficiently](http://www.baeldung.com/java-read-lines-large-file) -- [Java InputStream to String](http://www.baeldung.com/convert-input-stream-to-string) -- [Converting between an Array and a List in Java](http://www.baeldung.com/convert-array-to-list-and-list-to-array) -- [Converting between an Array and a Set in Java](http://www.baeldung.com/convert-array-to-set-and-set-to-array) -- [Converting between a List and a Set in Java](http://www.baeldung.com/convert-list-to-set-and-set-to-list) -- [Convert a Map to an Array, List or Set in Java](http://www.baeldung.com/convert-map-values-to-array-list-set) -- [Java – Write to File](http://www.baeldung.com/java-write-to-file) -- [Java - Convert File to InputStream](http://www.baeldung.com/convert-file-to-input-stream) -- [Java – Random Long, Float, Integer and Double](http://www.baeldung.com/java-generate-random-long-float-integer-double) -- [Java – Generate Random String](http://www.baeldung.com/java-random-string) -- [Java Scanner](http://www.baeldung.com/java-scanner) -- [Java Timer](http://www.baeldung.com/java-timer-and-timertask) -- [Java – Byte Array to Writer](http://www.baeldung.com/java-convert-byte-array-to-writer) -- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) -- [MD5 Hashing in Java](http://www.baeldung.com/java-md5) -- [Guide to the Java ArrayList](http://www.baeldung.com/java-arraylist) -- [Guide to Java Reflection](http://www.baeldung.com/java-reflection) -- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) -- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) -- [Random List Element](http://www.baeldung.com/java-random-list-element) -- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) -- [Java – Directory Size](http://www.baeldung.com/java-folder-size) -- [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources) -- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join) -- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java) -- [How to Convert String to different data types in Java](http://www.baeldung.com/java-string-conversions) -- [Introduction to Java Generics](http://www.baeldung.com/java-generics) -- [Generate equals() and hashCode() with Eclipse](http://www.baeldung.com/java-eclipse-equals-and-hashcode) -- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java) -- [Sorting in Java](http://www.baeldung.com/java-sorting) -- [Getting Started with Java Properties](http://www.baeldung.com/java-properties) -- [Grep in Java](http://www.baeldung.com/grep-in-java) -- [Java - Combine Multiple Collections](http://www.baeldung.com/java-combine-multiple-collections) -- [Simulated Annealing for Travelling Salesman Problem](http://www.baeldung.com/java-simulated-annealing-for-traveling-salesman) -- [Slope One Algorithm: Collaborative Filtering Recommendation Systems](http://www.baeldung.com/java-collaborative-filtering-recommendations) -- [Differences Between the Java WatchService API and the Apache Commons IO Monitor Library](http://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library) -- [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java) -- [URL Encoding and Decoding in Java](http://www.baeldung.com/java-url-encoding-decoding) -- [Calculate the Size of a File in Java](http://www.baeldung.com/java-file-size) -- [The Basics of Java Generics](http://www.baeldung.com/java-generics) -- [The Traveling Salesman Problem in Java](http://www.baeldung.com/java-simulated-annealing-for-traveling-salesman) -- [How to Create an Executable JAR with Maven](http://www.baeldung.com/executable-jar-with-maven) -- [How to Design a Genetic Algorithm in Java](http://www.baeldung.com/java-genetic-algorithm) -- [Guide to WeakHashMap in Java](http://www.baeldung.com/java-weakhashmap) -- [Spring Security – Cache Control Headers](http://www.baeldung.com/spring-security-cache-control-headers) -- [Basic Introduction to JMX](http://www.baeldung.com/java-management-extensions) -- [AWS Lambda With Java](http://www.baeldung.com/java-aws-lambda) -- [Introduction to Nashorn](http://www.baeldung.com/java-nashorn) -- [Guide to the Guava BiMap](http://www.baeldung.com/guava-bimap) -- [Iterable to Stream in Java](http://www.baeldung.com/java-iterable-to-stream) -- [Chained Exceptions in Java](http://www.baeldung.com/java-chained-exceptions) -- [The Java HashMap Under the Hood](http://www.baeldung.com/java-hashmap) -- [A Guide to LinkedHashMap in Java](http://www.baeldung.com/java-linked-hashmap) -- [A Guide to TreeMap in Java](http://www.baeldung.com/java-treemap) -- [A Quick JUnit vs TestNG Comparison](http://www.baeldung.com/junit-vs-testng) -- [Java Primitive Conversions](http://www.baeldung.com/java-primitive-conversions) -- [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) -- [Removing all nulls from a List in Java](http://www.baeldung.com/java-remove-nulls-from-list) -- [Removing all duplicates from a List in Java](http://www.baeldung.com/java-remove-duplicates-from-list) -- [Using Math.pow in Java](http://www.baeldung.com/java-math-pow) -- [Converting Strings to Enums in Java](http://www.baeldung.com/java-string-to-enum) -- [Flattening Nested Collections in Java](http://www.baeldung.com/java-flatten-nested-collections) -- [Quick Guide to the Java StringTokenizer](http://www.baeldung.com/java-stringtokenizer) -- [JVM Log Forging](http://www.baeldung.com/jvm-log-forging) -- [Guide to sun.misc.Unsafe](http://www.baeldung.com/java-unsafe) -- [HashSet and TreeSet Comparison](http://www.baeldung.com/java-hashset-vs-treeset) -- [How to Perform a Simple HTTP Request in Java](http://www.baeldung.com/java-http-request) -- [Call Methods at Runtime Using Java Reflection](http://www.baeldung.com/java-method-reflection) -- [Guide to UUID in JAVA](http://www.baeldung.com/guide-to-uuid-in-java) -- [Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java](http://www.baeldung.com/java-path) -- [How to Add a Single Element to a Stream](http://www.baeldung.com/java-stream-append-prepend) -- [Iterating Over Enum Values in Java](http://www.baeldung.com/java-enum-iteration) -- [Kotlin Java Interoperability](http://www.baeldung.com/kotlin-java-interoperability) -- [Using Java MappedByteBuffer](http://www.baeldung.com/java-mapped-byte-buffer) -- [How to Round a Number to N Decimal Places in Java](http://www.baeldung.com/java-round-decimal-number) -- [Changing Annotation Parameters At Runtime](http://www.baeldung.com/java-reflection-change-annotation-params) -- [How to Find all Getters Returning Null](http://www.baeldung.com/java-getters-returning-null) -- [Converting String to Stream of chars](http://www.baeldung.com/java-string-to-stream) -- [Changing the Order in a Sum Operation Can Produce Different Results?](http://www.baeldung.com/java-floating-point-sum-order) -- [How to Get a Name of a Method Being Executed?](http://www.baeldung.com/java-name-of-executing-method) -- [Iterate over a Map in Java](http://www.baeldung.com/java-iterate-map) -- [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies) -- [How to Copy an Array in Java](http://www.baeldung.com/java-array-copy) -- [Introduction to JDBC](http://www.baeldung.com/java-jdbc) -- [Period and Duration in Java](http://www.baeldung.com/java-period-duration) -- [Converting a Stack Trace to a String in Java](http://www.baeldung.com/java-stacktrace-to-string) -- [Count Occurrences of a Char in a String](http://www.baeldung.com/java-count-chars) -- [Java Double Brace Initialization](http://www.baeldung.com/java-double-brace-initialization) -- [The StackOverflowError in Java](http://www.baeldung.com/java-stack-overflow-error) -- [Split a String in Java](http://www.baeldung.com/java-split-string) -- [Introduction to Java Serialization](http://www.baeldung.com/java-serialization) -- [How to Remove the Last Character of a String?](http://www.baeldung.com/java-remove-last-character-of-string) -- [ClassNotFoundException vs NoClassDefFoundError](http://www.baeldung.com/java-classnotfoundexception-and-noclassdeffounderror) -- [Guide to UUID in Java](http://www.baeldung.com/java-uuid) -- [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char) -- [Guide to hashCode() in Java](http://www.baeldung.com/java-hashcode) -- [Collect a Java Stream to an Immutable Collection](http://www.baeldung.com/java-stream-immutable-collection) -- [Difference between URL and URI](http://www.baeldung.com/java-url-vs-uri) -- [Broadcasting and Multicasting in Java](http://www.baeldung.com/java-broadcast-multicast) -- [Converting a List to String in Java](http://www.baeldung.com/java-list-to-string) -- [CharSequence vs. String in Java](http://www.baeldung.com/java-char-sequence-string) -- [Period and Duration in Java](http://www.baeldung.com/java-period-duration) -- [Guide to the Diamond Operator in Java](http://www.baeldung.com/java-diamond-operator) -- [Singletons in Java](http://www.baeldung.com/java-singleton) -- [“Sneaky Throws” in Java](http://www.baeldung.com/java-sneaky-throws) -- [OutOfMemoryError: GC Overhead Limit Exceeded](http://www.baeldung.com/java-gc-overhead-limit-exceeded) -- [How to Iterate Over a Stream With Indices](http://www.baeldung.com/java-stream-indices) -- [StringBuilder and StringBuffer in Java](http://www.baeldung.com/java-string-builder-string-buffer) -- [Number of Digits in an Integer in Java](http://www.baeldung.com/java-number-of-digits-in-int) -- [Proxy, Decorator, Adapter and Bridge Patterns](http://www.baeldung.com/java-structural-design-patterns) - [Creating a Java Compiler Plugin](http://www.baeldung.com/java-build-compiler-plugin) -- [A Guide to the Static Keyword in Java](http://www.baeldung.com/java-static) -- [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array) -- [Guide to Java String Pool](http://www.baeldung.com/java-string-pool) -- [Copy a File with Java](http://www.baeldung.com/java-copy-file) -- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns) - From d10a8d7f474d47345b7ef7118c6303644bab30cf Mon Sep 17 00:00:00 2001 From: Marcos Lopez Gonzalez Date: Wed, 29 Nov 2017 09:53:43 +0100 Subject: [PATCH 32/52] spring junit config (#3124) --- .../jupiter/SpringJUnitConfigTest.java | 33 ++++++++++++++++++ .../jupiter/SpringJUnitWebConfigTest.java | 34 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitConfigTest.java create mode 100644 spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitWebConfigTest.java diff --git a/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitConfigTest.java b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitConfigTest.java new file mode 100644 index 0000000000..6b0a6f9808 --- /dev/null +++ b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitConfigTest.java @@ -0,0 +1,33 @@ +package com.baeldung.jupiter; + +import static org.junit.Assert.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +/** + * @SpringJUnitConfig(SpringJUnitConfigTest.Config.class) is equivalent to: + * + * @ExtendWith(SpringExtension.class) + * @ContextConfiguration(classes = SpringJUnitConfigTest.Config.class ) + * + */ +@SpringJUnitConfig(SpringJUnitConfigTest.Config.class) +public class SpringJUnitConfigTest { + + @Configuration + static class Config { + } + + @Autowired + private ApplicationContext applicationContext; + + @Test + void givenAppContext_WhenInjected_ThenItShouldNotBeNull() { + assertNotNull(applicationContext); + } + +} diff --git a/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitWebConfigTest.java b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitWebConfigTest.java new file mode 100644 index 0000000000..c679dce77f --- /dev/null +++ b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitWebConfigTest.java @@ -0,0 +1,34 @@ +package com.baeldung.jupiter; + +import static org.junit.Assert.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; +import org.springframework.web.context.WebApplicationContext; + +/** + * @SpringJUnitWebConfig(SpringJUnitWebConfigTest.Config.class) is equivalent to: + * + * @ExtendWith(SpringExtension.class) + * @WebAppConfiguration + * @ContextConfiguration(classes = SpringJUnitWebConfigTest.Config.class ) + * + */ +@SpringJUnitWebConfig(SpringJUnitWebConfigTest.Config.class) +public class SpringJUnitWebConfigTest { + + @Configuration + static class Config { + } + + @Autowired + private WebApplicationContext webAppContext; + + @Test + void givenWebAppContext_WhenInjected_ThenItShouldNotBeNull() { + assertNotNull(webAppContext); + } + +} From 3feaee499a0b5e7489b479ebe3e17710835b4f84 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 29 Nov 2017 12:07:35 +0100 Subject: [PATCH 33/52] Update README.md (#3044) --- logging-modules/log4j/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/logging-modules/log4j/README.md b/logging-modules/log4j/README.md index 3c0258142c..8aae1b5826 100644 --- a/logging-modules/log4j/README.md +++ b/logging-modules/log4j/README.md @@ -2,6 +2,5 @@ - [Introduction to Java Logging](http://www.baeldung.com/java-logging-intro) - [Introduction to SLF4J](http://www.baeldung.com/slf4j-with-log4j2-logback) - [Generate equals() and hashCode() with Eclipse](http://www.baeldung.com/java-eclipse-equals-and-hashcode) -- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java) - [Introduction to SLF4J](http://www.baeldung.com/slf4j-with-log4j2-logback) - [A Guide to Rolling File Appenders](http://www.baeldung.com/java-logging-rolling-file-appenders) From fb8f07c852e2eb0027854f97cf38e36188f3e6f8 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 29 Nov 2017 12:10:22 +0100 Subject: [PATCH 34/52] Update PolygonFactory.java (#3108) --- .../designpatterns/creational/factory/PolygonFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java b/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java index 406f0f5274..9f34fe77b9 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java +++ b/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java @@ -11,7 +11,7 @@ public class PolygonFactory { if(numberOfSides == 5) { return new Pentagon(); } - if(numberOfSides == 4) { + if(numberOfSides == 7) { return new Heptagon(); } else if(numberOfSides == 8) { @@ -19,4 +19,4 @@ public class PolygonFactory { } return null; } -} \ No newline at end of file +} From 8af39bf73021cd19aca167cef7e0cbf477ce316a Mon Sep 17 00:00:00 2001 From: gschambial Date: Wed, 29 Nov 2017 16:46:37 +0530 Subject: [PATCH 35/52] 1. Comparator example using Lambda and Comparator.comparing corrected. --- .../comparator/Java8ComparatorUnitTest.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java b/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java index b804573b51..49c8749309 100644 --- a/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java +++ b/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java @@ -17,8 +17,8 @@ public class Java8ComparatorUnitTest { @Before public void setUp() { footballTeam = new ArrayList(); - Player player1 = new Player(59, "John", 20); - Player player2 = new Player(67, "Roger", 22); + Player player1 = new Player(59, "John", 22); + Player player2 = new Player(67, "Roger", 20); Player player3 = new Player(45, "Steven", 24); footballTeam.add(player1); footballTeam.add(player2); @@ -26,15 +26,9 @@ public class Java8ComparatorUnitTest { } @Test - public void whenComparing_UsingJava8_thenSorted() { + public void whenComparing_UsingLambda_thenSorted() { System.out.println("************** Java 8 Comaparator **************"); - Comparator byRanking = new Comparator() { - - @Override - public int compare(Player player1, Player player2) { - return player1.getRanking() - player2.getRanking(); - } - }; + Comparator byRanking = (Player player1, Player player2) -> player1.getRanking() - player2.getRanking(); System.out.println("Before Sorting : " + footballTeam); Collections.sort(footballTeam, byRanking); @@ -48,8 +42,8 @@ public class Java8ComparatorUnitTest { @Test public void whenComparing_UsingComparatorComparing_thenSorted() { System.out.println("********* Comaparator.comparing method *********"); - Comparator byRanking = - (Player player1, Player player2)->player1.getRanking()-player2.getRanking(); + System.out.println("********* byRanking *********"); + Comparator byRanking = Comparator.comparing(Player::getRanking); System.out.println("Before Sorting : " + footballTeam); Collections.sort(footballTeam, byRanking); @@ -58,6 +52,17 @@ public class Java8ComparatorUnitTest { .getName(), "Steven"); assertEquals(footballTeam.get(2) .getRanking(), 67); + + System.out.println("********* byAge *********"); + Comparator byAge = Comparator.comparing(Player::getAge); + + System.out.println("Before Sorting : " + footballTeam); + Collections.sort(footballTeam, byAge); + System.out.println("After Sorting : " + footballTeam); + assertEquals(footballTeam.get(0) + .getName(), "Roger"); + assertEquals(footballTeam.get(2) + .getRanking(), 45); } } From 9f42f62187d9d87d823fe622aa8f9eca6cfd1d2c Mon Sep 17 00:00:00 2001 From: Eugen Paraschiv Date: Wed, 29 Nov 2017 14:57:56 +0200 Subject: [PATCH 36/52] new spring context test --- .../baeldung/SpringContextIntegrationTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java diff --git a/spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java new file mode 100644 index 0000000000..cf1ac7de89 --- /dev/null +++ b/spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java @@ -0,0 +1,15 @@ +package org.baeldung; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class SpringContextIntegrationTest { + + @Test + public void whenSpringContextIsBootstrapped_thenNoExceptions() { + } +} From d433add90d978bdf1d77dec4c9745a0cf2e9e942 Mon Sep 17 00:00:00 2001 From: Eugen Date: Wed, 29 Nov 2017 16:36:08 +0200 Subject: [PATCH 37/52] Create LICENSE (#3159) Setting the MIT license on the repo. --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..40f5c88746 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Eugen Paraschiv + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 064ea79490bc1c8e53c6d62c43ee2330a97c7f2e Mon Sep 17 00:00:00 2001 From: araknoid Date: Wed, 29 Nov 2017 20:49:08 +0100 Subject: [PATCH 38/52] BAEL-1203 Apache POI PowerPoint (#3090) * Added Apache-POI PowerPoint * Adjusted format + retrieve all placeholder --- .../poi/powerpoint/PowerPointHelper.java | 224 ++++++++++++++++++ .../powerpoint/PowerPointIntegrationTest.java | 77 ++++++ 2 files changed, 301 insertions(+) create mode 100644 apache-poi/src/main/java/com/baeldung/poi/powerpoint/PowerPointHelper.java create mode 100644 apache-poi/src/test/java/com/baeldung/poi/powerpoint/PowerPointIntegrationTest.java diff --git a/apache-poi/src/main/java/com/baeldung/poi/powerpoint/PowerPointHelper.java b/apache-poi/src/main/java/com/baeldung/poi/powerpoint/PowerPointHelper.java new file mode 100644 index 0000000000..e2af4f8808 --- /dev/null +++ b/apache-poi/src/main/java/com/baeldung/poi/powerpoint/PowerPointHelper.java @@ -0,0 +1,224 @@ +package com.baeldung.poi.powerpoint; + +import org.apache.poi.sl.usermodel.AutoNumberingScheme; +import org.apache.poi.sl.usermodel.PictureData; +import org.apache.poi.sl.usermodel.TableCell; +import org.apache.poi.sl.usermodel.TextParagraph; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xslf.usermodel.*; + +import java.awt.*; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Helper class for the PowerPoint presentation creation + */ +public class PowerPointHelper { + + /** + * Read an existing presentation + * + * @param fileLocation + * File location of the presentation + * @return instance of {@link XMLSlideShow} + * @throws IOException + */ + public XMLSlideShow readingExistingSlideShow(String fileLocation) throws IOException { + return new XMLSlideShow(new FileInputStream(fileLocation)); + } + + /** + * Create a sample presentation + * + * @param fileLocation + * File location of the presentation + * @throws IOException + */ + public void createPresentation(String fileLocation) throws IOException { + // Create presentation + XMLSlideShow ppt = new XMLSlideShow(); + + XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0); + + // Retriving the slide layout + XSLFSlideLayout layout = defaultMaster.getLayout(SlideLayout.TITLE_ONLY); + + // Creating the 1st slide + XSLFSlide slide1 = ppt.createSlide(layout); + XSLFTextShape title = slide1.getPlaceholder(0); + // Clearing text to remove the predefined one in the template + title.clearText(); + XSLFTextParagraph p = title.addNewTextParagraph(); + + XSLFTextRun r1 = p.addNewTextRun(); + r1.setText("Baeldung"); + r1.setFontColor(new Color(78, 147, 89)); + r1.setFontSize(48.); + + // Add Image + ClassLoader classLoader = getClass().getClassLoader(); + byte[] pictureData = IOUtils.toByteArray(new FileInputStream(classLoader.getResource("logo-leaf.png").getFile())); + + XSLFPictureData pd = ppt.addPicture(pictureData, PictureData.PictureType.PNG); + XSLFPictureShape picture = slide1.createPicture(pd); + picture.setAnchor(new Rectangle(320, 230, 100, 92)); + + // Creating 2nd slide + layout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT); + XSLFSlide slide2 = ppt.createSlide(layout); + + // setting the tile + title = slide2.getPlaceholder(0); + title.clearText(); + XSLFTextRun r = title.addNewTextParagraph().addNewTextRun(); + r.setText("Baeldung"); + + // Adding the link + XSLFHyperlink link = r.createHyperlink(); + link.setAddress("http://www.baeldung.com"); + + // setting the content + XSLFTextShape content = slide2.getPlaceholder(1); + content.clearText(); // unset any existing text + content.addNewTextParagraph().addNewTextRun().setText("First paragraph"); + content.addNewTextParagraph().addNewTextRun().setText("Second paragraph"); + content.addNewTextParagraph().addNewTextRun().setText("Third paragraph"); + + // Creating 3rd slide - List + layout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT); + XSLFSlide slide3 = ppt.createSlide(layout); + title = slide3.getPlaceholder(0); + title.clearText(); + r = title.addNewTextParagraph().addNewTextRun(); + r.setText("Lists"); + + content = slide3.getPlaceholder(1); + content.clearText(); + XSLFTextParagraph p1 = content.addNewTextParagraph(); + p1.setIndentLevel(0); + p1.setBullet(true); + r1 = p1.addNewTextRun(); + r1.setText("Bullet"); + + // the next three paragraphs form an auto-numbered list + XSLFTextParagraph p2 = content.addNewTextParagraph(); + p2.setBulletAutoNumber(AutoNumberingScheme.alphaLcParenRight, 1); + p2.setIndentLevel(1); + XSLFTextRun r2 = p2.addNewTextRun(); + r2.setText("Numbered List Item - 1"); + + // Creating 4th slide + XSLFSlide slide4 = ppt.createSlide(); + createTable(slide4); + + // Save presentation + FileOutputStream out = new FileOutputStream(fileLocation); + ppt.write(out); + out.close(); + + // Closing presentation + ppt.close(); + } + + /** + * Delete a slide from the presentation + * + * @param ppt + * The presentation + * @param slideNumber + * The number of the slide to be deleted (0-based) + */ + public void deleteSlide(XMLSlideShow ppt, int slideNumber) { + ppt.removeSlide(slideNumber); + } + + /** + * Re-order the slides inside a presentation + * + * @param ppt + * The presentation + * @param slideNumber + * The number of the slide to move + * @param newSlideNumber + * The new position of the slide (0-base) + */ + public void reorderSlide(XMLSlideShow ppt, int slideNumber, int newSlideNumber) { + List slides = ppt.getSlides(); + + XSLFSlide secondSlide = slides.get(slideNumber); + ppt.setSlideOrder(secondSlide, newSlideNumber); + } + + /** + * Retrieve the placeholder inside a slide + * + * @param slide + * The slide + * @return List of placeholder inside a slide + */ + public List retrieveTemplatePlaceholders(XSLFSlide slide) { + List placeholders = new ArrayList<>(); + + for (XSLFShape shape : slide.getShapes()) { + if (shape instanceof XSLFAutoShape) { + placeholders.add(shape); + } + } + return placeholders; + } + + /** + * Create a table + * + * @param slide + * Slide + */ + private void createTable(XSLFSlide slide) { + + XSLFTable tbl = slide.createTable(); + tbl.setAnchor(new Rectangle(50, 50, 450, 300)); + + int numColumns = 3; + int numRows = 5; + + // header + XSLFTableRow headerRow = tbl.addRow(); + headerRow.setHeight(50); + for (int i = 0; i < numColumns; i++) { + XSLFTableCell th = headerRow.addCell(); + XSLFTextParagraph p = th.addNewTextParagraph(); + p.setTextAlign(TextParagraph.TextAlign.CENTER); + XSLFTextRun r = p.addNewTextRun(); + r.setText("Header " + (i + 1)); + r.setBold(true); + r.setFontColor(Color.white); + th.setFillColor(new Color(79, 129, 189)); + th.setBorderWidth(TableCell.BorderEdge.bottom, 2.0); + th.setBorderColor(TableCell.BorderEdge.bottom, Color.white); + // all columns are equally sized + tbl.setColumnWidth(i, 150); + } + + // data + for (int rownum = 0; rownum < numRows; rownum++) { + XSLFTableRow tr = tbl.addRow(); + tr.setHeight(50); + for (int i = 0; i < numColumns; i++) { + XSLFTableCell cell = tr.addCell(); + XSLFTextParagraph p = cell.addNewTextParagraph(); + XSLFTextRun r = p.addNewTextRun(); + + r.setText("Cell " + (i * rownum + 1)); + if (rownum % 2 == 0) { + cell.setFillColor(new Color(208, 216, 232)); + } else { + cell.setFillColor(new Color(233, 247, 244)); + } + } + } + } +} diff --git a/apache-poi/src/test/java/com/baeldung/poi/powerpoint/PowerPointIntegrationTest.java b/apache-poi/src/test/java/com/baeldung/poi/powerpoint/PowerPointIntegrationTest.java new file mode 100644 index 0000000000..5319208e85 --- /dev/null +++ b/apache-poi/src/test/java/com/baeldung/poi/powerpoint/PowerPointIntegrationTest.java @@ -0,0 +1,77 @@ +package com.baeldung.poi.powerpoint; + +import org.apache.poi.xslf.usermodel.XMLSlideShow; +import org.apache.poi.xslf.usermodel.XSLFShape; +import org.apache.poi.xslf.usermodel.XSLFSlide; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.util.List; + +public class PowerPointIntegrationTest { + + private PowerPointHelper pph; + private String fileLocation; + private static final String FILE_NAME = "presentation.pptx"; + + @Before + public void setUp() throws Exception { + File currDir = new File("."); + String path = currDir.getAbsolutePath(); + fileLocation = path.substring(0, path.length() - 1) + FILE_NAME; + + pph = new PowerPointHelper(); + pph.createPresentation(fileLocation); + } + + @Test + public void whenReadingAPresentation_thenOK() throws Exception { + XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation); + + Assert.assertNotNull(xmlSlideShow); + Assert.assertEquals(4, xmlSlideShow.getSlides().size()); + } + + @Test + public void whenRetrievingThePlaceholdersForEachSlide_thenOK() throws Exception { + XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation); + + List onlyTitleSlidePlaceholders = pph.retrieveTemplatePlaceholders(xmlSlideShow.getSlides().get(0)); + List titleAndBodySlidePlaceholders = pph.retrieveTemplatePlaceholders(xmlSlideShow.getSlides().get(1)); + List emptySlidePlaceholdes = pph.retrieveTemplatePlaceholders(xmlSlideShow.getSlides().get(3)); + + Assert.assertEquals(1, onlyTitleSlidePlaceholders.size()); + Assert.assertEquals(2, titleAndBodySlidePlaceholders.size()); + Assert.assertEquals(0, emptySlidePlaceholdes.size()); + + } + + @Test + public void whenSortingSlides_thenOK() throws Exception { + XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation); + XSLFSlide slide4 = xmlSlideShow.getSlides().get(3); + pph.reorderSlide(xmlSlideShow, 3, 1); + + Assert.assertEquals(slide4, xmlSlideShow.getSlides().get(1)); + } + + @Test + public void givenPresentation_whenDeletingASlide_thenOK() throws Exception { + XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation); + pph.deleteSlide(xmlSlideShow, 3); + + Assert.assertEquals(3, xmlSlideShow.getSlides().size()); + } + + @After + public void tearDown() throws Exception { + File testFile = new File(fileLocation); + if (testFile.exists()) { + testFile.delete(); + } + pph = null; + } +} From 67c9b1e86f5fff5fe03f04e44135a8018bd813d6 Mon Sep 17 00:00:00 2001 From: Holger Date: Wed, 29 Nov 2017 22:37:54 +0000 Subject: [PATCH 39/52] BAEL-1376: Varargs Code Example (#3129) * BAEL-1376: Varargs Code Example * BAEL-1376: Varargs Code Example Moving the "logic" into a test and removing the unnecessary class. --- .../com/baeldung/varargs/FormatterTest.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 core-java/src/test/java/com/baeldung/varargs/FormatterTest.java diff --git a/core-java/src/test/java/com/baeldung/varargs/FormatterTest.java b/core-java/src/test/java/com/baeldung/varargs/FormatterTest.java new file mode 100644 index 0000000000..509c8764d2 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/varargs/FormatterTest.java @@ -0,0 +1,60 @@ +package com.baeldung.varargs; + +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public class FormatterTest { + + private final static String FORMAT = "%s %s %s"; + + @Test + public void givenNoArgument_thenEmptyAndTwoSpacesAreReturned() { + String actualResult = format(); + + assertThat(actualResult, is("empty ")); + } + + @Test + public void givenOneArgument_thenResultHasTwoTrailingSpace() { + String actualResult = format("baeldung"); + + assertThat(actualResult, is("baeldung ")); + } + + @Test + public void givenTwoArguments_thenOneTrailingSpaceExists() { + String actualResult = format("baeldung", "rocks"); + + assertThat(actualResult, is("baeldung rocks ")); + } + + @Test + public void givenMoreThanThreeArguments_thenTheFirstThreeAreUsed() { + String actualResult = formatWithVarArgs("baeldung", "rocks", "java", "and", "spring"); + + assertThat(actualResult, is("baeldung rocks java")); + } + + public String format() { + return format("empty", ""); + } + + public String format(String value) { + return format(value, ""); + } + + public String format(String val1, String val2) { + return String.format(FORMAT, val1, val2, ""); + } + + public String formatWithVarArgs(String... values) { + if (values.length == 0) { + return "no arguments given"; + } + + return String.format(FORMAT, values); + } + +} \ No newline at end of file From ba566a81cb6dd26afd258b9ebf6640a99e052ead Mon Sep 17 00:00:00 2001 From: abirkhan04 Date: Thu, 30 Nov 2017 09:34:24 +0600 Subject: [PATCH 40/52] BAEL-1254 Getting Started With Mule ESB (#3153) --- muleesb/.gitignore | 1 + .../partition-descriptor | 1 + muleesb/.mule/queue-tx-log/tx1.log | 0 muleesb/.mule/queue-tx-log/tx2.log | 0 muleesb/.mule/queue-xa-tx-log/tx1.log | 0 muleesb/.mule/queue-xa-tx-log/tx2.log | 0 muleesb/mule-project.xml | 5 + muleesb/pom.xml | 214 ++++++++++++++++++ muleesb/src/main/app/mule-app.properties | 0 muleesb/src/main/app/mule-deploy.properties | 6 + muleesb/src/main/app/variablescopetest.xml | 36 +++ .../transformer/FromFlow2Component.java | 18 ++ .../InitializationTransformer.java | 29 +++ .../transformer/InvokingMessageComponent.java | 16 ++ muleesb/src/main/resources/log4j2.xml | 33 +++ .../munit/variablescopetest-test-suite.xml | 40 ++++ muleesb/src/test/resources/log4j2-test.xml | 35 +++ 17 files changed, 434 insertions(+) create mode 100644 muleesb/.gitignore create mode 100644 muleesb/.mule/objectstore/b2fe1a90-c473-11e7-8eb5-98e7f44e8ac8/partition-descriptor create mode 100644 muleesb/.mule/queue-tx-log/tx1.log create mode 100644 muleesb/.mule/queue-tx-log/tx2.log create mode 100644 muleesb/.mule/queue-xa-tx-log/tx1.log create mode 100644 muleesb/.mule/queue-xa-tx-log/tx2.log create mode 100644 muleesb/mule-project.xml create mode 100644 muleesb/pom.xml create mode 100644 muleesb/src/main/app/mule-app.properties create mode 100644 muleesb/src/main/app/mule-deploy.properties create mode 100644 muleesb/src/main/app/variablescopetest.xml create mode 100644 muleesb/src/main/java/com/baeldung/transformer/FromFlow2Component.java create mode 100644 muleesb/src/main/java/com/baeldung/transformer/InitializationTransformer.java create mode 100644 muleesb/src/main/java/com/baeldung/transformer/InvokingMessageComponent.java create mode 100644 muleesb/src/main/resources/log4j2.xml create mode 100644 muleesb/src/test/munit/variablescopetest-test-suite.xml create mode 100644 muleesb/src/test/resources/log4j2-test.xml diff --git a/muleesb/.gitignore b/muleesb/.gitignore new file mode 100644 index 0000000000..541f92c42e --- /dev/null +++ b/muleesb/.gitignore @@ -0,0 +1 @@ +# Add any directories, files, or patterns you don't want to be tracked by version control \ No newline at end of file diff --git a/muleesb/.mule/objectstore/b2fe1a90-c473-11e7-8eb5-98e7f44e8ac8/partition-descriptor b/muleesb/.mule/objectstore/b2fe1a90-c473-11e7-8eb5-98e7f44e8ac8/partition-descriptor new file mode 100644 index 0000000000..0b8060f303 --- /dev/null +++ b/muleesb/.mule/objectstore/b2fe1a90-c473-11e7-8eb5-98e7f44e8ac8/partition-descriptor @@ -0,0 +1 @@ +DEFAULT_PARTITION \ No newline at end of file diff --git a/muleesb/.mule/queue-tx-log/tx1.log b/muleesb/.mule/queue-tx-log/tx1.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/muleesb/.mule/queue-tx-log/tx2.log b/muleesb/.mule/queue-tx-log/tx2.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/muleesb/.mule/queue-xa-tx-log/tx1.log b/muleesb/.mule/queue-xa-tx-log/tx1.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/muleesb/.mule/queue-xa-tx-log/tx2.log b/muleesb/.mule/queue-xa-tx-log/tx2.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/muleesb/mule-project.xml b/muleesb/mule-project.xml new file mode 100644 index 0000000000..0d522b0141 --- /dev/null +++ b/muleesb/mule-project.xml @@ -0,0 +1,5 @@ + + + muleesb + + diff --git a/muleesb/pom.xml b/muleesb/pom.xml new file mode 100644 index 0000000000..2c88bf83da --- /dev/null +++ b/muleesb/pom.xml @@ -0,0 +1,214 @@ + + + + 4.0.0 + com.mycompany + muleesb + 1.0.0-SNAPSHOT + mule + Mule muleesb Application + + + UTF-8 + UTF-8 + + 3.8.1 + 1.2 + 1.3.6 + 3.9.0 + + + + + + org.mule.tools.maven + mule-app-maven-plugin + ${mule.tools.version} + true + + true + + + + org.mule.tools + muleesb-maven-plugin + 1.0 + + 3.7.0 + /home/abir/AnypointStudio/workspace/variablescopetest + + + + deploy + + start + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.7 + + + add-resource + generate-resources + + add-resource + + + + + src/main/app/ + + + mappings/ + + + src/main/api/ + + + + + + + + com.mulesoft.munit.tools + munit-maven-plugin + ${munit.version} + + + test + test + + test + + + + + + true + + html + + + + + + + + src/test/munit + + + src/test/resources + + + + + + + + + org.mule.modules + mule-module-spring-config + ${mule.version} + provided + + + + org.mule.transports + mule-transport-file + ${mule.version} + provided + + + org.mule.transports + mule-transport-http + ${mule.version} + provided + + + org.mule.transports + mule-transport-jdbc + ${mule.version} + provided + + + org.mule.transports + mule-transport-jms + ${mule.version} + provided + + + org.mule.transports + mule-transport-vm + ${mule.version} + provided + + + + org.mule.modules + mule-module-scripting + ${mule.version} + provided + + + org.mule.modules + mule-module-xml + ${mule.version} + provided + + + + org.mule.tests + mule-tests-functional + ${mule.version} + test + + + org.mule.modules + mule-module-apikit + ${mule.version} + provided + + + com.mulesoft.munit + mule-munit-support + ${mule.munit.support.version} + test + + + com.mulesoft.munit + munit-runner + ${munit.version} + test + + + + + + Central + Central + http://repo1.maven.org/maven2/ + default + + + mulesoft-releases + MuleSoft Releases Repository + http://repository.mulesoft.org/releases/ + default + + + + + mulesoft-release + mulesoft release repository + default + http://repository.mulesoft.org/releases/ + + false + + + + diff --git a/muleesb/src/main/app/mule-app.properties b/muleesb/src/main/app/mule-app.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/muleesb/src/main/app/mule-deploy.properties b/muleesb/src/main/app/mule-deploy.properties new file mode 100644 index 0000000000..07eabe9cc6 --- /dev/null +++ b/muleesb/src/main/app/mule-deploy.properties @@ -0,0 +1,6 @@ +#** GENERATED CONTENT ** Mule Application Deployment Descriptor +#Mon Nov 06 15:54:37 BDT 2017 +redeployment.enabled=true +encoding=UTF-8 +domain=default +config.resources=variablescopetest.xml diff --git a/muleesb/src/main/app/variablescopetest.xml b/muleesb/src/main/app/variablescopetest.xml new file mode 100644 index 0000000000..518b901084 --- /dev/null +++ b/muleesb/src/main/app/variablescopetest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muleesb/src/main/java/com/baeldung/transformer/FromFlow2Component.java b/muleesb/src/main/java/com/baeldung/transformer/FromFlow2Component.java new file mode 100644 index 0000000000..0e180062a7 --- /dev/null +++ b/muleesb/src/main/java/com/baeldung/transformer/FromFlow2Component.java @@ -0,0 +1,18 @@ +package com.baeldung.transformer; + +import org.mule.api.MuleEventContext; +import org.mule.api.MuleMessage; +import org.mule.api.lifecycle.Callable; + +public class FromFlow2Component implements Callable { + + @Override + public Object onCall(MuleEventContext eventContext) throws Exception { + + MuleMessage message = eventContext.getMessage(); + message.setPayload("Converted in flow 2"); + + return message; + } + +} diff --git a/muleesb/src/main/java/com/baeldung/transformer/InitializationTransformer.java b/muleesb/src/main/java/com/baeldung/transformer/InitializationTransformer.java new file mode 100644 index 0000000000..1e1ad15be8 --- /dev/null +++ b/muleesb/src/main/java/com/baeldung/transformer/InitializationTransformer.java @@ -0,0 +1,29 @@ +package com.baeldung.transformer; + +import org.mule.api.MuleMessage; +import org.mule.api.transformer.TransformerException; +import org.mule.api.transport.PropertyScope; +import org.mule.transformer.AbstractMessageTransformer; + +public class InitializationTransformer extends AbstractMessageTransformer { + + @Override + public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { + // TODO Auto-generated method stub + + String payload = null; + + try { + payload = message.getPayloadAsString(); + }catch (Exception e) { + e.printStackTrace(); + } + + System.out.println("Logged Payload: "+payload); + message.setPayload("Payload from Initialization"); + message.setProperty("outboundKey", "outboundpropertyvalue",PropertyScope.OUTBOUND); + + + return message; + } +} \ No newline at end of file diff --git a/muleesb/src/main/java/com/baeldung/transformer/InvokingMessageComponent.java b/muleesb/src/main/java/com/baeldung/transformer/InvokingMessageComponent.java new file mode 100644 index 0000000000..105522e5b4 --- /dev/null +++ b/muleesb/src/main/java/com/baeldung/transformer/InvokingMessageComponent.java @@ -0,0 +1,16 @@ +package com.baeldung.transformer; + +import org.mule.api.MuleMessage; +import org.mule.api.transformer.TransformerException; +import org.mule.transformer.AbstractMessageTransformer; + +public class InvokingMessageComponent extends AbstractMessageTransformer { + + @Override + public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { + // TODO Auto-generated method stub + String InboundProp = (String) message.getInboundProperty("outboundKey"); + System.out.println("InboundProp:" + InboundProp); + return InboundProp; + } +} \ No newline at end of file diff --git a/muleesb/src/main/resources/log4j2.xml b/muleesb/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..98c4b02433 --- /dev/null +++ b/muleesb/src/main/resources/log4j2.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/muleesb/src/test/munit/variablescopetest-test-suite.xml b/muleesb/src/test/munit/variablescopetest-test-suite.xml new file mode 100644 index 0000000000..43e410a327 --- /dev/null +++ b/muleesb/src/test/munit/variablescopetest-test-suite.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muleesb/src/test/resources/log4j2-test.xml b/muleesb/src/test/resources/log4j2-test.xml new file mode 100644 index 0000000000..6351ae041c --- /dev/null +++ b/muleesb/src/test/resources/log4j2-test.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b14dfbe4f0cd1b4d209730ffa3ba0c2ac7adb7f4 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Thu, 30 Nov 2017 11:55:49 +0100 Subject: [PATCH 41/52] BAEL-1174: A Quick Guide to Spring Cloud Consul --- bootique/dependency-reduced-pom.xml | 8 ++- libraries-data/file.dat | Bin 0 -> 87 bytes libraries/helloWorld.docx | Bin 0 -> 76887 bytes spring-cloud/spring-cloud-consul/pom.xml | 58 ++++++++++++++++++ .../consul/DiscoveryClientApplication.java | 53 ++++++++++++++++ .../DistributedPropertiesApplication.java | 36 +++++++++++ .../cloud/consul/RibbonClientApplication.java | 34 ++++++++++ .../consul/ServiceDiscoveryApplication.java | 29 +++++++++ .../cloud/consul/properties/MyProperties.java | 20 ++++++ .../src/main/resources/application.yml | 14 +++++ .../src/main/resources/bootstrap.yml | 9 +++ undertow/dependency-reduced-pom.xml | 40 ++++++++++++ xml/src/test/resources/example_dom4j_new.xml | 10 +++ xml/src/test/resources/example_jaxb_new.xml | 9 +++ 14 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 libraries-data/file.dat create mode 100644 libraries/helloWorld.docx create mode 100644 spring-cloud/spring-cloud-consul/pom.xml create mode 100644 spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DiscoveryClientApplication.java create mode 100644 spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DistributedPropertiesApplication.java create mode 100644 spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/RibbonClientApplication.java create mode 100644 spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/ServiceDiscoveryApplication.java create mode 100644 spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/MyProperties.java create mode 100644 spring-cloud/spring-cloud-consul/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-consul/src/main/resources/bootstrap.yml create mode 100644 undertow/dependency-reduced-pom.xml create mode 100644 xml/src/test/resources/example_dom4j_new.xml create mode 100644 xml/src/test/resources/example_jaxb_new.xml diff --git a/bootique/dependency-reduced-pom.xml b/bootique/dependency-reduced-pom.xml index ed18f4e42a..ab09cfb7b1 100644 --- a/bootique/dependency-reduced-pom.xml +++ b/bootique/dependency-reduced-pom.xml @@ -28,8 +28,14 @@ junit junit - 3.8.1 + 4.12 test + + + hamcrest-core + org.hamcrest + + diff --git a/libraries-data/file.dat b/libraries-data/file.dat new file mode 100644 index 0000000000000000000000000000000000000000..70177cef976ad64b5517006b8abb7acc41f58b6e GIT binary patch literal 87 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 AsQ>@~ literal 0 HcmV?d00001 diff --git a/spring-cloud/spring-cloud-consul/pom.xml b/spring-cloud/spring-cloud-consul/pom.xml new file mode 100644 index 0000000000..0a0650ec8b --- /dev/null +++ b/spring-cloud/spring-cloud-consul/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + org.baeldung + spring-cloud-consul + jar + + spring-cloud-consul + + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + + + + UTF-8 + 3.6.0 + + + + + org.springframework.cloud + spring-cloud-starter-consul-all + 1.3.0.RELEASE + + + + org.springframework.cloud + spring-cloud-starter-consul-config + 1.3.0.RELEASE + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-maven-plugin.version} + + + + + diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DiscoveryClientApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DiscoveryClientApplication.java new file mode 100644 index 0000000000..e5e18d71ff --- /dev/null +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DiscoveryClientApplication.java @@ -0,0 +1,53 @@ +package com.baeldung.spring.cloud.consul; + +import java.net.URI; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +@SpringBootApplication +@EnableDiscoveryClient +@RestController +public class DiscoveryClientApplication { + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private DiscoveryClient discoveryClient; + + @RequestMapping("/discoveryClient") + public String home() { + return this.restTemplate.getForEntity(serviceUrl().resolve("/ping"), String.class) + .getBody(); + } + + public URI serviceUrl() { + List list = discoveryClient.getInstances("myApp"); + if (list != null && list.size() > 0) { + return list.get(0) + .getUri(); + } + + return null; + } + + public static void main(String[] args) { + new SpringApplicationBuilder(DiscoveryClientApplication.class).web(true) + .run(args); + } +} diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DistributedPropertiesApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DistributedPropertiesApplication.java new file mode 100644 index 0000000000..12ecd96b26 --- /dev/null +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DistributedPropertiesApplication.java @@ -0,0 +1,36 @@ +package com.baeldung.spring.cloud.consul; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.spring.cloud.consul.properties.MyProperties; + +@SpringBootApplication +@RestController +public class DistributedPropertiesApplication { + + @Value("${my.prop}") + String value; + + @Autowired + private MyProperties properties; + + @RequestMapping("/getConfigFromValue") + public String getConfigFromValue() { + return value; + } + + @RequestMapping("/getConfigFromProperty") + public String getConfigFromProperty() { + return properties.getProp(); + } + + public static void main(String[] args) { + new SpringApplicationBuilder(DistributedPropertiesApplication.class).web(true) + .run(args); + } +} diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/RibbonClientApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/RibbonClientApplication.java new file mode 100644 index 0000000000..620c3553ba --- /dev/null +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/RibbonClientApplication.java @@ -0,0 +1,34 @@ +package com.baeldung.spring.cloud.consul; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +@SpringBootApplication +@RestController +public class RibbonClientApplication { + + @LoadBalanced + @Bean + public RestTemplate loadbalancedRestTemplate() { + return new RestTemplate(); + } + + @Autowired + RestTemplate restTemplate; + + @RequestMapping("/ribbonClient") + public String home() { + return this.restTemplate.getForObject("http://myApp/ping", String.class); + } + + public static void main(String[] args) { + new SpringApplicationBuilder(RibbonClientApplication.class).web(true) + .run(args); + } +} diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/ServiceDiscoveryApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/ServiceDiscoveryApplication.java new file mode 100644 index 0000000000..5da8105d01 --- /dev/null +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/ServiceDiscoveryApplication.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.cloud.consul; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class ServiceDiscoveryApplication { + @RequestMapping("/my-health-check") + public ResponseEntity myCustomCheck() { + String message = "Testing my healh check function"; + return new ResponseEntity<>(message, HttpStatus.FORBIDDEN); + } + + @RequestMapping("/ping") + public String ping() { + return "pong"; + } + + public static void main(String[] args) { + new SpringApplicationBuilder(ServiceDiscoveryApplication.class).web(true) + .run(args); + } + +} \ No newline at end of file diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/MyProperties.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/MyProperties.java new file mode 100644 index 0000000000..7accac168d --- /dev/null +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/MyProperties.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.cloud.consul.properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +@RefreshScope +@Configuration +@ConfigurationProperties("my") +public class MyProperties { + private String prop; + + public String getProp() { + return prop; + } + + public void setProp(String prop) { + this.prop = prop; + } +} diff --git a/spring-cloud/spring-cloud-consul/src/main/resources/application.yml b/spring-cloud/spring-cloud-consul/src/main/resources/application.yml new file mode 100644 index 0000000000..ccdc3fdeee --- /dev/null +++ b/spring-cloud/spring-cloud-consul/src/main/resources/application.yml @@ -0,0 +1,14 @@ +spring: + application: + name: myApp + cloud: + consul: + host: localhost + port: 8500 + discovery: + healthCheckPath: /my-health-check + healthCheckInterval: 20s + enabled: true + instanceId: ${spring.application.name}:${random.value} +server: + port: 0 \ No newline at end of file diff --git a/spring-cloud/spring-cloud-consul/src/main/resources/bootstrap.yml b/spring-cloud/spring-cloud-consul/src/main/resources/bootstrap.yml new file mode 100644 index 0000000000..6318170135 --- /dev/null +++ b/spring-cloud/spring-cloud-consul/src/main/resources/bootstrap.yml @@ -0,0 +1,9 @@ +spring: + application: + name: myApp + cloud: + consul: + host: localhost + port: 8500 + config: + enabled: true \ No newline at end of file diff --git a/undertow/dependency-reduced-pom.xml b/undertow/dependency-reduced-pom.xml new file mode 100644 index 0000000000..f3bb8b78ed --- /dev/null +++ b/undertow/dependency-reduced-pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + com.baeldung.undertow + undertow + undertow + 1.0-SNAPSHOT + http://maven.apache.org + + ${project.artifactId} + + + maven-shade-plugin + + + package + + shade + + + + + + maven-jar-plugin + + + + com.baeldung.undertow.SimpleServer + + + + + + + + 1.8 + 1.8 + + + diff --git a/xml/src/test/resources/example_dom4j_new.xml b/xml/src/test/resources/example_dom4j_new.xml new file mode 100644 index 0000000000..020760fdd3 --- /dev/null +++ b/xml/src/test/resources/example_dom4j_new.xml @@ -0,0 +1,10 @@ + + + + + XML with Dom4J + XML handling with Dom4J + 14/06/2016 + Dom4J tech writer + + diff --git a/xml/src/test/resources/example_jaxb_new.xml b/xml/src/test/resources/example_jaxb_new.xml new file mode 100644 index 0000000000..646d938869 --- /dev/null +++ b/xml/src/test/resources/example_jaxb_new.xml @@ -0,0 +1,9 @@ + + + + Jaxb author + 04/02/2015 + XML Binding with Jaxb + XML with Jaxb + + From 882ccae19096c2a871b4f683afa5fed8959a00bc Mon Sep 17 00:00:00 2001 From: Eugen Date: Thu, 30 Nov 2017 15:44:36 +0200 Subject: [PATCH 42/52] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index d94a786bc2..271aea0767 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,14 @@ The "REST with Spring" Classes ============================== + After 5 months of work, here's the Master Class of REST With Spring:
**[>> THE REST WITH SPRING MASTER CLASS](http://www.baeldung.com/rest-with-spring-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=rws#master-class)** +And here's the Master Class of Learn Spring Security:
+**[>> LEARN SPRING SECURITY MASTER CLASS](http://www.baeldung.com/learn-spring-security-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=lss#master-class)** + + Spring Tutorials ================ From a8bbb67c53226b522ef7ec32e4646e562474dd76 Mon Sep 17 00:00:00 2001 From: Doha2012 Date: Thu, 30 Nov 2017 16:22:43 +0200 Subject: [PATCH 43/52] minor fix (#3163) * move security content from spring-security-rest-full * swagger update * move query language to new module * rename spring-security-rest-full to spring-rest-full * group persistence modules * group testing modules * try fix conflict * cleanup * group and cleanup * add readme to grouping modules * move spring-jpa to persistence-modules * minor fix --- .../src/main/java/org/baeldung/Application.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java b/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java index b3c98c3e71..8a40744bdc 100644 --- a/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java @@ -5,12 +5,13 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.FilterType; @Configuration @EnableAutoConfiguration -@ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.voter.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleauthproviders.*"), - @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multiplelogin.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleentrypoints.*") }) +@ComponentScan({ "org.baeldung.config", "org.baeldung.persistence", "org.baeldung.security", "org.baeldung.web" }) +// @ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.voter.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleauthproviders.*"), +// @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multiplelogin.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleentrypoints.*"), +// @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.rolesauthorities.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.acl.*") }) public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); From 58f8e6163fc0bfc6c6ddbfb8d712fc930b11a0a4 Mon Sep 17 00:00:00 2001 From: ramansahasi Date: Fri, 1 Dec 2017 00:31:44 +0530 Subject: [PATCH 44/52] BAEL-1327 Java Threads: notify and wait (initial commit) (#3160) --- .../concurrent/waitandnotify/Data.java | 33 ++++++++++ .../waitandnotify/NetworkDriver.java | 12 ++++ .../concurrent/waitandnotify/Receiver.java | 25 +++++++ .../concurrent/waitandnotify/Sender.java | 30 +++++++++ .../waitandnotify/NetworkIntegrationTest.java | 65 +++++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java create mode 100644 core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java create mode 100644 core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java create mode 100644 core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java create mode 100644 core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java new file mode 100644 index 0000000000..9b850c4153 --- /dev/null +++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java @@ -0,0 +1,33 @@ +package com.baeldung.concurrent.waitandnotify; + +public class Data { + private String packet; + + // True if receiver should wait + // False if sender should wait + private boolean transfer = true; + + public synchronized String receive() { + while (transfer) { + try { + wait(); + } catch (InterruptedException e) {} + } + transfer = true; + + notifyAll(); + return packet; + } + + public synchronized void send(String packet) { + while (!transfer) { + try { + wait(); + } catch (InterruptedException e) {} + } + transfer = false; + + this.packet = packet; + notifyAll(); + } +} \ No newline at end of file diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java new file mode 100644 index 0000000000..d4fd1574c6 --- /dev/null +++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java @@ -0,0 +1,12 @@ +package com.baeldung.concurrent.waitandnotify; + +public class NetworkDriver { + public static void main(String[] args) { + Data data = new Data(); + Thread sender = new Thread(new Sender(data)); + Thread receiver = new Thread(new Receiver(data)); + + sender.start(); + receiver.start(); + } +} \ No newline at end of file diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java new file mode 100644 index 0000000000..63f48b8031 --- /dev/null +++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java @@ -0,0 +1,25 @@ +package com.baeldung.concurrent.waitandnotify; + +import java.util.concurrent.ThreadLocalRandom; + +public class Receiver implements Runnable { + private Data load; + + public Receiver(Data load) { + this.load = load; + } + + public void run() { + for(String receivedMessage = load.receive(); + !"End".equals(receivedMessage) ; + receivedMessage = load.receive()) { + + System.out.println(receivedMessage); + + //Thread.sleep() to mimic heavy server-side processing + try { + Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000)); + } catch (InterruptedException e) {} + } + } +} \ No newline at end of file diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java new file mode 100644 index 0000000000..b7d782c3f5 --- /dev/null +++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java @@ -0,0 +1,30 @@ +package com.baeldung.concurrent.waitandnotify; + +import java.util.concurrent.ThreadLocalRandom; + +public class Sender implements Runnable { + private Data data; + + public Sender(Data data) { + this.data = data; + } + + public void run() { + String packets[] = { + "First packet", + "Second packet", + "Third packet", + "Fourth packet", + "End" + }; + + for (String packet : packets) { + data.send(packet); + + //Thread.sleep() to mimic heavy server-side processing + try { + Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000)); + } catch (InterruptedException e) {} + } + } +} \ No newline at end of file diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java b/core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java new file mode 100644 index 0000000000..49f4313e9d --- /dev/null +++ b/core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java @@ -0,0 +1,65 @@ +package com.baeldung.concurrent.waitandnotify; + +import static org.junit.Assert.assertEquals; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.StringWriter; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class NetworkIntegrationTest { + + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); + private String expected; + + @Before + public void setUpStreams() { + System.setOut(new PrintStream(outContent)); + System.setErr(new PrintStream(errContent)); + } + + @Before + public void setUpExpectedOutput() { + StringWriter expectedStringWriter = new StringWriter(); + + PrintWriter printWriter = new PrintWriter(expectedStringWriter); + printWriter.println("First packet"); + printWriter.println("Second packet"); + printWriter.println("Third packet"); + printWriter.println("Fourth packet"); + printWriter.close(); + + expected = expectedStringWriter.toString(); + } + + @After + public void cleanUpStreams() { + System.setOut(null); + System.setErr(null); + } + + @Test + public void givenSenderAndReceiver_whenSendingPackets_thenNetworkSynchronized() { + Data data = new Data(); + Thread sender = new Thread(new Sender(data)); + Thread receiver = new Thread(new Receiver(data)); + + sender.start(); + receiver.start(); + + //wait for sender and receiver to finish before we test against expected + try { + sender.join(); + receiver.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + assertEquals(expected, outContent.toString()); + } +} From d45a891d4c2b6e295eb8d6324b0d6493c897b786 Mon Sep 17 00:00:00 2001 From: ocheja Date: Fri, 1 Dec 2017 05:07:23 +0900 Subject: [PATCH 45/52] BAEL-1261 Polymorphism in Java (#2762) * Define beans for handling different message types in a lean chat app * Add class based spring beans configuration * Define spring configuration in XML for constructor based bean injection * Refactor package structure to separate constructor based bean injection code set from setter based bean injection code set * Define configuration and classes specific to setter-based bean injection. * Implement tests for constructor-based and setter-based bean injections * develop codes for explaining type erasure * Write unit tests for type erasure examples * Remove evaluation article code * Modify type erasure examples and unit tests * Modify type erasure examples and unit tests * Add expected exception in TypeErasureUnitTest * Correct grammar in class name * Implement File Manager app to demonstrate Polymorphism. Develop unit tests for Polymorphism article code * Add examples for static polymorphism * Change sysout statments to slf4j log info statements * Add assertions and expected errors check on Test * Add assertions and expected errors check on Test * Correct compile time error of symbol not found * Removed commented out non-compiling test. --- .../baeldung/polymorphism/FileManager.java | 38 +++++++++++ .../baeldung/polymorphism/GenericFile.java | 63 +++++++++++++++++++ .../com/baeldung/polymorphism/ImageFile.java | 41 ++++++++++++ .../com/baeldung/polymorphism/TextFile.java | 44 +++++++++++++ .../polymorphism/PolymorphismUnitTest.java | 34 ++++++++++ 5 files changed, 220 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/polymorphism/FileManager.java create mode 100644 core-java/src/main/java/com/baeldung/polymorphism/GenericFile.java create mode 100644 core-java/src/main/java/com/baeldung/polymorphism/ImageFile.java create mode 100644 core-java/src/main/java/com/baeldung/polymorphism/TextFile.java create mode 100644 core-java/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java diff --git a/core-java/src/main/java/com/baeldung/polymorphism/FileManager.java b/core-java/src/main/java/com/baeldung/polymorphism/FileManager.java new file mode 100644 index 0000000000..7f2665ff2d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/polymorphism/FileManager.java @@ -0,0 +1,38 @@ +package com.baeldung.polymorphism; + +import java.awt.image.BufferedImage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FileManager { + + final static Logger logger = LoggerFactory.getLogger(FileManager.class); + + public static void main(String[] args) { + GenericFile file1 = new TextFile("SampleTextFile", "This is a sample text content", "v1.0.0"); + logger.info("File Info: \n" + file1.getFileInfo() + "\n"); + ImageFile imageFile = new ImageFile("SampleImageFile", 200, 100, new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB).toString() + .getBytes(), "v1.0.0"); + logger.info("File Info: \n" + imageFile.getFileInfo()); + } + + public static ImageFile createImageFile(String name, int height, int width, byte[] content, String version) { + ImageFile imageFile = new ImageFile(name, height, width, content, version); + logger.info("File 2 Info: \n" + imageFile.getFileInfo()); + return imageFile; + } + + public static GenericFile createTextFile(String name, String content, String version) { + GenericFile file1 = new TextFile(name, content, version); + logger.info("File 1 Info: \n" + file1.getFileInfo() + "\n"); + return file1; + } + + public static TextFile createTextFile2(String name, String content, String version) { + TextFile file1 = new TextFile(name, content, version); + logger.info("File 1 Info: \n" + file1.getFileInfo() + "\n"); + return file1; + } + +} diff --git a/core-java/src/main/java/com/baeldung/polymorphism/GenericFile.java b/core-java/src/main/java/com/baeldung/polymorphism/GenericFile.java new file mode 100644 index 0000000000..4075083c49 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/polymorphism/GenericFile.java @@ -0,0 +1,63 @@ +package com.baeldung.polymorphism; + +import java.util.Date; + +public class GenericFile { + private String name; + private String extension; + private Date dateCreated; + private String version; + private byte[] content; + + public GenericFile() { + this.setDateCreated(new Date()); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getExtension() { + return extension; + } + + public void setExtension(String extension) { + this.extension = extension; + } + + public Date getDateCreated() { + return dateCreated; + } + + public void setDateCreated(Date dateCreated) { + this.dateCreated = dateCreated; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public byte[] getContent() { + return content; + } + + public void setContent(byte[] content) { + this.content = content; + } + + public String getFileInfo() { + return "File Name: " + this.getName() + "\n" + "Extension: " + this.getExtension() + "\n" + "Date Created: " + this.getDateCreated() + "\n" + "Version: " + this.getVersion() + "\n"; + } + + public Object read() { + return content; + } +} diff --git a/core-java/src/main/java/com/baeldung/polymorphism/ImageFile.java b/core-java/src/main/java/com/baeldung/polymorphism/ImageFile.java new file mode 100644 index 0000000000..ac72a40993 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/polymorphism/ImageFile.java @@ -0,0 +1,41 @@ +package com.baeldung.polymorphism; + +public class ImageFile extends GenericFile { + private int height; + private int width; + + public ImageFile(String name, int height, int width, byte[] content, String version) { + this.setHeight(height); + this.setWidth(width); + this.setContent(content); + this.setName(name); + this.setVersion(version); + this.setExtension(".jpg"); + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public String getFileInfo() { + return super.getFileInfo() + "Height: " + this.getHeight() + "\n" + "Width: " + this.getWidth(); + } + + public String read() { + return this.getContent() + .toString(); + } + +} diff --git a/core-java/src/main/java/com/baeldung/polymorphism/TextFile.java b/core-java/src/main/java/com/baeldung/polymorphism/TextFile.java new file mode 100644 index 0000000000..8280b4ee95 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/polymorphism/TextFile.java @@ -0,0 +1,44 @@ +package com.baeldung.polymorphism; + +public class TextFile extends GenericFile { + private int wordCount; + + public TextFile(String name, String content, String version) { + String[] words = content.split(" "); + this.setWordCount(words.length > 0 ? words.length : 1); + this.setContent(content.getBytes()); + this.setName(name); + this.setVersion(version); + this.setExtension(".txt"); + } + + public int getWordCount() { + return wordCount; + } + + public void setWordCount(int wordCount) { + this.wordCount = wordCount; + } + + public String getFileInfo() { + return super.getFileInfo() + "Word Count: " + wordCount; + } + + public String read() { + return this.getContent() + .toString(); + } + + public String read(int limit) { + return this.getContent() + .toString() + .substring(0, limit); + } + + public String read(int start, int stop) { + return this.getContent() + .toString() + .substring(start, stop); + } + +} diff --git a/core-java/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java b/core-java/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java new file mode 100644 index 0000000000..8fb606c2fc --- /dev/null +++ b/core-java/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java @@ -0,0 +1,34 @@ +package com.baeldung.polymorphism; + +import static org.junit.Assert.*; + +import java.awt.image.BufferedImage; + +import org.junit.Ignore; +import org.junit.Test; + +public class PolymorphismUnitTest { + + @Test + public void givenImageFile_whenFileCreated_shouldSucceed() { + ImageFile imageFile = FileManager.createImageFile("SampleImageFile", 200, 100, new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB).toString() + .getBytes(), "v1.0.0"); + assertEquals(200, imageFile.getHeight()); + } + + // Downcasting then Upcasting + @Test + public void givenTextFile_whenTextFileCreatedAndAssignedToGenericFileAndCastBackToTextFileOnGetWordCount_shouldSucceed() { + GenericFile textFile = FileManager.createTextFile("SampleTextFile", "This is a sample text content", "v1.0.0"); + TextFile textFile2 = (TextFile) textFile; + assertEquals(6, textFile2.getWordCount()); + } + + // Downcasting + @Test(expected = ClassCastException.class) + public void givenGenericFile_whenCastToTextFileAndInvokeGetWordCount_shouldFail() { + GenericFile genericFile = new GenericFile(); + TextFile textFile = (TextFile) genericFile; + System.out.println(textFile.getWordCount()); + } +} From 42c894e7f96748c25427fc73e13372c6a2a06d4b Mon Sep 17 00:00:00 2001 From: Ahmed Tawila Date: Fri, 1 Dec 2017 08:37:19 +0200 Subject: [PATCH 46/52] BAEL-1307 Java Nested Classes (#3157) * Evaluation article: Different Types of Bean Injection in Spring * added tests & changed configuration to Java-based config * removed xml config files * rename unit tests * BAEL-972 - Apache Commons Text * remove code from evaluation article * remove code from evaluation article * BAEL-972 - Apache Commons Text - added another example * BAEL-972 - Apache Commons Text - just indentation * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java * BAEL-994 - TemporalAdjuster in Java - fix problems * BAEL-1033 Introduction to StreamUtils * BAEL-1033 Introduction to StreamUtils * BAEL-1033 Introduction to StreamUtils * fix formatting * BAEL-1033 minor refactor * BAEL-1035 Introduction to Eclipse Collections * format * BAEL-1035 Introduction to Eclipse Collections * BAEL-1035 Introduction to Eclipse Collections * BAEL-1035 Introduction to Eclipse Collections * cleanup * cleanup * BAEL-1109 Introduction to JCache * BAEL-1109 Introduction to JCache * remove unneeded property in pom.xml * fix formatting * close cache instances properly * remove latest commit * BAEL-1057 Introduction to rxjava-jdbc * refactor rxjava-jdbc * Refactor rxjava-jdbc * Refactoring rxjava-jdbc * BAEL-1171 java.lang.String API * refactor rxjava-jdbc * refactor String * String API - move multiple classes into a single class * move class into test package * BAEL-1171 String.lang.String API * BAEL-1171 java.lang.String API * BAEL-1250 Initializing Arrays in Java * BAEL-1250 Initializing Arrays in Java * BAEL-1250 Initializing Arrays in Java * small fix * BAEL-1171 java.lang.String API * BAEL-1263 Daemon Threads in Java * merge with fork * BAEL-1263 Daemon Threads in Java * fix compilation error * BAEL-1309 Append Data to a File with Java * fix build fails * fix test error * fix build failures * cleanup * fix Sneaky Runnable test * revert sneaky runnable fix attempt * fix test failure * fix test failure * fix all test failures * fix test failure * fix test failures * Nested Classes in Java * enhance nested classes --- .../com/baeldung/nestedclass/Enclosing.java | 11 ------- .../java/com/baeldung/nestedclass/Outer.java | 11 ------- .../nestedclass/SimpleAbstractClass.java | 5 --- ...mousInnerTest.java => AnonymousInner.java} | 8 +++-- .../com/baeldung/nestedclass/Enclosing.java | 21 ++++++++++++ .../baeldung/nestedclass/InnerClassTest.java | 13 -------- .../baeldung/nestedclass/LocalClassTest.java | 12 ------- .../baeldung/nestedclass/NestedClassTest.java | 12 ------- .../baeldung/nestedclass/NewEnclosing.java | 11 +++++-- .../com/baeldung/nestedclass/NewOuter.java | 30 +++++++++++++++++ .../baeldung/nestedclass/NewOuterTest.java | 32 ------------------- .../java/com/baeldung/nestedclass/Outer.java | 20 ++++++++++++ 12 files changed, 86 insertions(+), 100 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java delete mode 100644 core-java/src/main/java/com/baeldung/nestedclass/Outer.java delete mode 100644 core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java rename core-java/src/test/java/com/baeldung/nestedclass/{AnonymousInnerTest.java => AnonymousInner.java} (71%) create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/Enclosing.java delete mode 100644 core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java delete mode 100644 core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java delete mode 100644 core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java rename core-java/src/{main => test}/java/com/baeldung/nestedclass/NewEnclosing.java (59%) create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/NewOuter.java delete mode 100644 core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java create mode 100644 core-java/src/test/java/com/baeldung/nestedclass/Outer.java diff --git a/core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java b/core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java deleted file mode 100644 index a9911538b0..0000000000 --- a/core-java/src/main/java/com/baeldung/nestedclass/Enclosing.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.nestedclass; - -public class Enclosing { - - public static class Nested { - - public void test() { - System.out.println("Calling test..."); - } - } -} diff --git a/core-java/src/main/java/com/baeldung/nestedclass/Outer.java b/core-java/src/main/java/com/baeldung/nestedclass/Outer.java deleted file mode 100644 index ebd6d27293..0000000000 --- a/core-java/src/main/java/com/baeldung/nestedclass/Outer.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.nestedclass; - -public class Outer { - - public class Inner { - - public void test() { - System.out.println("Calling test..."); - } - } -} diff --git a/core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java b/core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java deleted file mode 100644 index 586e2d12b4..0000000000 --- a/core-java/src/main/java/com/baeldung/nestedclass/SimpleAbstractClass.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.nestedclass; - -abstract class SimpleAbstractClass { - abstract void run(); -} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInnerTest.java b/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInner.java similarity index 71% rename from core-java/src/test/java/com/baeldung/nestedclass/AnonymousInnerTest.java rename to core-java/src/test/java/com/baeldung/nestedclass/AnonymousInner.java index 394c0bb57a..9fa8ee9cd5 100644 --- a/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInnerTest.java +++ b/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInner.java @@ -2,10 +2,14 @@ package com.baeldung.nestedclass; import org.junit.Test; -public class AnonymousInnerTest { +abstract class SimpleAbstractClass { + abstract void run(); +} + +public class AnonymousInner { @Test - public void whenRunAnonymousClass_thenCorrect() { + public void run() { SimpleAbstractClass simpleAbstractClass = new SimpleAbstractClass() { void run() { System.out.println("Running Anonymous Class..."); diff --git a/core-java/src/test/java/com/baeldung/nestedclass/Enclosing.java b/core-java/src/test/java/com/baeldung/nestedclass/Enclosing.java new file mode 100644 index 0000000000..3db33cde9b --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/Enclosing.java @@ -0,0 +1,21 @@ +package com.baeldung.nestedclass; + +import org.junit.Test; + +public class Enclosing { + + private static int x = 1; + + public static class StaticNested { + + private void run() { + System.out.println("x = " + x); + } + } + + @Test + public void test() { + Enclosing.StaticNested nested = new Enclosing.StaticNested(); + nested.run(); + } +} diff --git a/core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java b/core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java deleted file mode 100644 index e9cb119ac2..0000000000 --- a/core-java/src/test/java/com/baeldung/nestedclass/InnerClassTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.nestedclass; - -import org.junit.Test; - -public class InnerClassTest { - - @Test - public void givenInnerClassWhenInstantiating_thenCorrect() { - Outer outer = new Outer(); - Outer.Inner inner = outer.new Inner(); - inner.test(); - } -} diff --git a/core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java b/core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java deleted file mode 100644 index dad19161ad..0000000000 --- a/core-java/src/test/java/com/baeldung/nestedclass/LocalClassTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.nestedclass; - -import org.junit.Test; - -public class LocalClassTest { - - @Test - public void whenTestingLocalClass_thenCorrect() { - NewEnclosing newEnclosing = new NewEnclosing(); - newEnclosing.run(); - } -} diff --git a/core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java b/core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java deleted file mode 100644 index 16c883689a..0000000000 --- a/core-java/src/test/java/com/baeldung/nestedclass/NestedClassTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.nestedclass; - -import org.junit.Test; - -public class NestedClassTest { - - @Test - public void whenInstantiatingStaticNestedClass_thenCorrect() { - Enclosing.Nested nested = new Enclosing.Nested(); - nested.test(); - } -} diff --git a/core-java/src/main/java/com/baeldung/nestedclass/NewEnclosing.java b/core-java/src/test/java/com/baeldung/nestedclass/NewEnclosing.java similarity index 59% rename from core-java/src/main/java/com/baeldung/nestedclass/NewEnclosing.java rename to core-java/src/test/java/com/baeldung/nestedclass/NewEnclosing.java index c7e04e8600..deeb72de0c 100644 --- a/core-java/src/main/java/com/baeldung/nestedclass/NewEnclosing.java +++ b/core-java/src/test/java/com/baeldung/nestedclass/NewEnclosing.java @@ -1,10 +1,11 @@ package com.baeldung.nestedclass; +import org.junit.Test; + public class NewEnclosing { - void run() { + private void run() { class Local { - void run() { System.out.println("Welcome to Baeldung!"); } @@ -12,4 +13,10 @@ public class NewEnclosing { Local local = new Local(); local.run(); } + + @Test + public void test() { + NewEnclosing newEnclosing = new NewEnclosing(); + newEnclosing.run(); + } } \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/nestedclass/NewOuter.java b/core-java/src/test/java/com/baeldung/nestedclass/NewOuter.java new file mode 100644 index 0000000000..a3a723b30e --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/NewOuter.java @@ -0,0 +1,30 @@ +package com.baeldung.nestedclass; + +import org.junit.Test; + +public class NewOuter { + + int a = 1; + static int b = 2; + + public class InnerClass { + int a = 3; + static final int b = 4; + + public void run() { + System.out.println("a = " + a); + System.out.println("b = " + b); + System.out.println("NewOuterTest.this.a = " + NewOuter.this.a); + System.out.println("NewOuterTest.b = " + NewOuter.b); + System.out.println("NewOuterTest.this.b = " + NewOuter.this.b); + } + } + + @Test + public void test() { + NewOuter outer = new NewOuter(); + NewOuter.InnerClass inner = outer.new InnerClass(); + inner.run(); + + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java b/core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java deleted file mode 100644 index e883687d33..0000000000 --- a/core-java/src/test/java/com/baeldung/nestedclass/NewOuterTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.nestedclass; - -import static org.junit.Assert.assertEquals; -import org.junit.Test; - -public class NewOuterTest { - - int a = 1; - static int b = 2; - - public class InnerClass { - int a = 3; - static final int b = 4; - - @Test - public void whenShadowing_thenCorrect() { - assertEquals(3, a); - assertEquals(4, b); - assertEquals(1, NewOuterTest.this.a); - assertEquals(2, NewOuterTest.b); - assertEquals(2, NewOuterTest.this.b); - } - } - - @Test - public void shadowingTest() { - NewOuterTest outer = new NewOuterTest(); - NewOuterTest.InnerClass inner = outer.new InnerClass(); - inner.whenShadowing_thenCorrect(); - - } -} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/nestedclass/Outer.java b/core-java/src/test/java/com/baeldung/nestedclass/Outer.java new file mode 100644 index 0000000000..d5e46670c9 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/nestedclass/Outer.java @@ -0,0 +1,20 @@ +package com.baeldung.nestedclass; + +import org.junit.Test; + +public class Outer { + + public class Inner { + + public void run() { + System.out.println("Calling test..."); + } + } + + @Test + public void test() { + Outer outer = new Outer(); + Outer.Inner inner = outer.new Inner(); + inner.run(); + } +} From f84dbbbb45aa29caddef58b77de2388a90abd302 Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 1 Dec 2017 14:55:04 +0800 Subject: [PATCH 47/52] fix parent.relativePath config for maven submodules in separate folders (#3148) --- guava-modules/guava-18/pom.xml | 2 +- guava-modules/guava-19/pom.xml | 2 +- guava-modules/guava-21/pom.xml | 2 +- logging-modules/log-mdc/pom.xml | 2 +- logging-modules/log4j/pom.xml | 2 +- logging-modules/log4j2/pom.xml | 2 +- persistence-modules/java-cassandra/pom.xml | 2 +- persistence-modules/java-mongodb/pom.xml | 2 +- persistence-modules/liquibase/pom.xml | 2 +- persistence-modules/querydsl/pom.xml | 2 +- persistence-modules/redis/pom.xml | 2 +- persistence-modules/solr/pom.xml | 2 +- persistence-modules/spring-data-cassandra/pom.xml | 2 +- persistence-modules/spring-data-gemfire/pom.xml | 2 +- persistence-modules/spring-data-neo4j/pom.xml | 2 +- persistence-modules/spring-data-redis/pom.xml | 2 +- persistence-modules/spring-data-solr/pom.xml | 2 +- persistence-modules/spring-hibernate-3/pom.xml | 2 +- persistence-modules/spring-hibernate-5/pom.xml | 2 +- testing-modules/groovy-spock/pom.xml | 2 +- testing-modules/junit-5/pom.xml | 2 +- testing-modules/mockito-2/pom.xml | 2 +- testing-modules/mockito/pom.xml | 2 +- testing-modules/mocks/pom.xml | 2 +- testing-modules/rest-assured/pom.xml | 2 +- testing-modules/rest-testing/pom.xml | 2 +- testing-modules/selenium-junit-testng/pom.xml | 2 +- testing-modules/testing/pom.xml | 2 +- testing-modules/testng/pom.xml | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/guava-modules/guava-18/pom.xml b/guava-modules/guava-18/pom.xml index a9aba47f12..f8dbf5657e 100644 --- a/guava-modules/guava-18/pom.xml +++ b/guava-modules/guava-18/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/guava-modules/guava-19/pom.xml b/guava-modules/guava-19/pom.xml index 2345212eba..4a23bf7aec 100644 --- a/guava-modules/guava-19/pom.xml +++ b/guava-modules/guava-19/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/guava-modules/guava-21/pom.xml b/guava-modules/guava-21/pom.xml index 94bb66e76a..f5432fb7df 100644 --- a/guava-modules/guava-21/pom.xml +++ b/guava-modules/guava-21/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/logging-modules/log-mdc/pom.xml b/logging-modules/log-mdc/pom.xml index 918e052a15..5551585372 100644 --- a/logging-modules/log-mdc/pom.xml +++ b/logging-modules/log-mdc/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/logging-modules/log4j/pom.xml b/logging-modules/log4j/pom.xml index a3bfb0a33a..6a3fbde393 100644 --- a/logging-modules/log4j/pom.xml +++ b/logging-modules/log4j/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml index 58bc4b74e7..48608fbc80 100644 --- a/logging-modules/log4j2/pom.xml +++ b/logging-modules/log4j2/pom.xml @@ -9,7 +9,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/java-cassandra/pom.xml b/persistence-modules/java-cassandra/pom.xml index faaabb9e2e..81e072c3a7 100644 --- a/persistence-modules/java-cassandra/pom.xml +++ b/persistence-modules/java-cassandra/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/java-mongodb/pom.xml b/persistence-modules/java-mongodb/pom.xml index aab48921a6..9784b2c5a8 100644 --- a/persistence-modules/java-mongodb/pom.xml +++ b/persistence-modules/java-mongodb/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/liquibase/pom.xml b/persistence-modules/liquibase/pom.xml index 020c2516a2..a574ba497c 100644 --- a/persistence-modules/liquibase/pom.xml +++ b/persistence-modules/liquibase/pom.xml @@ -6,7 +6,7 @@ parent-modules com.baeldung 1.0.0-SNAPSHOT - ../ + ../../ 4.0.0 diff --git a/persistence-modules/querydsl/pom.xml b/persistence-modules/querydsl/pom.xml index 27f383e0c6..c2943875f1 100644 --- a/persistence-modules/querydsl/pom.xml +++ b/persistence-modules/querydsl/pom.xml @@ -15,7 +15,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/redis/pom.xml b/persistence-modules/redis/pom.xml index ef081a2c69..4321b491eb 100644 --- a/persistence-modules/redis/pom.xml +++ b/persistence-modules/redis/pom.xml @@ -15,7 +15,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/solr/pom.xml b/persistence-modules/solr/pom.xml index 2fd0bdd721..966bd8755b 100644 --- a/persistence-modules/solr/pom.xml +++ b/persistence-modules/solr/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/spring-data-cassandra/pom.xml b/persistence-modules/spring-data-cassandra/pom.xml index 607d7b90ba..1358210a45 100644 --- a/persistence-modules/spring-data-cassandra/pom.xml +++ b/persistence-modules/spring-data-cassandra/pom.xml @@ -13,7 +13,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/spring-data-gemfire/pom.xml b/persistence-modules/spring-data-gemfire/pom.xml index 9108865b4c..3f7fcd03e5 100644 --- a/persistence-modules/spring-data-gemfire/pom.xml +++ b/persistence-modules/spring-data-gemfire/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/spring-data-neo4j/pom.xml b/persistence-modules/spring-data-neo4j/pom.xml index 0055850ec3..bdd51e9659 100644 --- a/persistence-modules/spring-data-neo4j/pom.xml +++ b/persistence-modules/spring-data-neo4j/pom.xml @@ -10,7 +10,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/spring-data-redis/pom.xml b/persistence-modules/spring-data-redis/pom.xml index b184d7e369..6cb49f11cf 100644 --- a/persistence-modules/spring-data-redis/pom.xml +++ b/persistence-modules/spring-data-redis/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/spring-data-solr/pom.xml b/persistence-modules/spring-data-solr/pom.xml index 0759c1dbc0..e24d8314ba 100644 --- a/persistence-modules/spring-data-solr/pom.xml +++ b/persistence-modules/spring-data-solr/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/spring-hibernate-3/pom.xml b/persistence-modules/spring-hibernate-3/pom.xml index 8eee819572..f1873a84d3 100644 --- a/persistence-modules/spring-hibernate-3/pom.xml +++ b/persistence-modules/spring-hibernate-3/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/persistence-modules/spring-hibernate-5/pom.xml b/persistence-modules/spring-hibernate-5/pom.xml index f1f3d10347..57eb1aeffb 100644 --- a/persistence-modules/spring-hibernate-5/pom.xml +++ b/persistence-modules/spring-hibernate-5/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/groovy-spock/pom.xml b/testing-modules/groovy-spock/pom.xml index f4e61e6786..3d67657224 100644 --- a/testing-modules/groovy-spock/pom.xml +++ b/testing-modules/groovy-spock/pom.xml @@ -17,7 +17,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/junit-5/pom.xml b/testing-modules/junit-5/pom.xml index 2be8937d04..684a9253d5 100644 --- a/testing-modules/junit-5/pom.xml +++ b/testing-modules/junit-5/pom.xml @@ -14,7 +14,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/mockito-2/pom.xml b/testing-modules/mockito-2/pom.xml index 0291ac4ec1..2d119ae8af 100644 --- a/testing-modules/mockito-2/pom.xml +++ b/testing-modules/mockito-2/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/mockito/pom.xml b/testing-modules/mockito/pom.xml index aa3dd9b20a..0e83c46926 100644 --- a/testing-modules/mockito/pom.xml +++ b/testing-modules/mockito/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/mocks/pom.xml b/testing-modules/mocks/pom.xml index 959c1851d6..6473f07c13 100644 --- a/testing-modules/mocks/pom.xml +++ b/testing-modules/mocks/pom.xml @@ -6,7 +6,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ mocks diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml index 0c0826c5c3..1006e9a373 100644 --- a/testing-modules/rest-assured/pom.xml +++ b/testing-modules/rest-assured/pom.xml @@ -10,7 +10,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/rest-testing/pom.xml b/testing-modules/rest-testing/pom.xml index 4b838720da..ea63ee0e58 100644 --- a/testing-modules/rest-testing/pom.xml +++ b/testing-modules/rest-testing/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/selenium-junit-testng/pom.xml b/testing-modules/selenium-junit-testng/pom.xml index 14169e5749..418dd495a4 100644 --- a/testing-modules/selenium-junit-testng/pom.xml +++ b/testing-modules/selenium-junit-testng/pom.xml @@ -9,7 +9,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/testing/pom.xml b/testing-modules/testing/pom.xml index 3ad503558f..7aff0a93e0 100644 --- a/testing-modules/testing/pom.xml +++ b/testing-modules/testing/pom.xml @@ -10,7 +10,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ diff --git a/testing-modules/testng/pom.xml b/testing-modules/testng/pom.xml index f7a50954fc..7aed1837e5 100644 --- a/testing-modules/testng/pom.xml +++ b/testing-modules/testng/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT - ../ + ../../ From 2ad2d4d820a806d46bba6d1f9aebac7e618ed142 Mon Sep 17 00:00:00 2001 From: linhvovn Date: Fri, 1 Dec 2017 14:55:22 +0800 Subject: [PATCH 48/52] [tlinh2110@gmail.com]Bael1313 Create spring-acl module (#3131) * [tlinh2110@gmail.com] [BAEL1313] Introduction Spring ACL * [tlinh2110@gmail.com] BAEL 1313 - Update unit test * [tlinh2110@gmail.com]BAEL1313- remove unused files from spring-core * [BAEL1313] Create spring-acl module * [BAEL1313] Add resources for Spring ACL * [BAEL1313] Remove acl from spring-security-mvc-boot * [BAEL1313] Add Spring ACL module in parent pom.xml --- pom.xml | 1 + spring-acl/pom.xml | 66 ++++++++++ .../org/baeldung/acl/config/ACLContext.java | 80 ++++++++++++ .../AclMethodSecurityConfiguration.java | 21 ++++ .../acl/config/JPAPersistenceConfig.java | 16 +++ .../dao/NoticeMessageRepository.java | 24 ++++ .../acl/persistence/entity/NoticeMessage.java | 29 +++++ spring-acl/src/main/resources/acl-data.sql | 28 +++++ spring-acl/src/main/resources/acl-schema.sql | 58 +++++++++ .../org.baeldung.acl.datasource.properties | 12 ++ .../java/org/baeldung/acl/SpringAclTest.java | 119 ++++++++++++++++++ 11 files changed, 454 insertions(+) create mode 100644 spring-acl/pom.xml create mode 100644 spring-acl/src/main/java/org/baeldung/acl/config/ACLContext.java create mode 100644 spring-acl/src/main/java/org/baeldung/acl/config/AclMethodSecurityConfiguration.java create mode 100644 spring-acl/src/main/java/org/baeldung/acl/config/JPAPersistenceConfig.java create mode 100644 spring-acl/src/main/java/org/baeldung/acl/persistence/dao/NoticeMessageRepository.java create mode 100644 spring-acl/src/main/java/org/baeldung/acl/persistence/entity/NoticeMessage.java create mode 100644 spring-acl/src/main/resources/acl-data.sql create mode 100644 spring-acl/src/main/resources/acl-schema.sql create mode 100644 spring-acl/src/main/resources/org.baeldung.acl.datasource.properties create mode 100644 spring-acl/src/test/java/org/baeldung/acl/SpringAclTest.java diff --git a/pom.xml b/pom.xml index 9b1f50f05e..cac0cc5845 100644 --- a/pom.xml +++ b/pom.xml @@ -141,6 +141,7 @@ spark-java spring-5-mvc + spring-acl spring-activiti spring-akka spring-amqp diff --git a/spring-acl/pom.xml b/spring-acl/pom.xml new file mode 100644 index 0000000000..3bcc0cf596 --- /dev/null +++ b/spring-acl/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + com.baeldung + spring-acl + 0.0.1-SNAPSHOT + war + + spring-acl + Spring ACL + + + parent-boot-5 + com.baeldung + 0.0.1-SNAPSHOT + ../parent-boot-5 + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + com.h2database + h2 + + + + org.springframework + spring-test + test + + + + org.springframework.security + spring-security-test + test + + + + org.springframework.security + spring-security-acl + + + org.springframework.security + spring-security-config + + + org.springframework + spring-context-support + + + net.sf.ehcache + ehcache-core + 2.6.11 + jar + + + + + diff --git a/spring-acl/src/main/java/org/baeldung/acl/config/ACLContext.java b/spring-acl/src/main/java/org/baeldung/acl/config/ACLContext.java new file mode 100644 index 0000000000..63a4ea58ef --- /dev/null +++ b/spring-acl/src/main/java/org/baeldung/acl/config/ACLContext.java @@ -0,0 +1,80 @@ +package org.baeldung.acl.config; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.cache.ehcache.EhCacheFactoryBean; +import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; +import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; +import org.springframework.security.acls.AclPermissionCacheOptimizer; +import org.springframework.security.acls.AclPermissionEvaluator; +import org.springframework.security.acls.domain.AclAuthorizationStrategy; +import org.springframework.security.acls.domain.AclAuthorizationStrategyImpl; +import org.springframework.security.acls.domain.ConsoleAuditLogger; +import org.springframework.security.acls.domain.DefaultPermissionGrantingStrategy; +import org.springframework.security.acls.domain.EhCacheBasedAclCache; +import org.springframework.security.acls.jdbc.BasicLookupStrategy; +import org.springframework.security.acls.jdbc.JdbcMutableAclService; +import org.springframework.security.acls.jdbc.LookupStrategy; +import org.springframework.security.acls.model.PermissionGrantingStrategy; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +@Configuration +@EnableAutoConfiguration +public class ACLContext { + + @Autowired + DataSource dataSource; + + @Bean + public EhCacheBasedAclCache aclCache() { + return new EhCacheBasedAclCache(aclEhCacheFactoryBean().getObject(), permissionGrantingStrategy(), aclAuthorizationStrategy()); + } + + @Bean + public EhCacheFactoryBean aclEhCacheFactoryBean() { + EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean(); + ehCacheFactoryBean.setCacheManager(aclCacheManager().getObject()); + ehCacheFactoryBean.setCacheName("aclCache"); + return ehCacheFactoryBean; + } + + @Bean + public EhCacheManagerFactoryBean aclCacheManager() { + return new EhCacheManagerFactoryBean(); + } + + @Bean + public PermissionGrantingStrategy permissionGrantingStrategy() { + return new DefaultPermissionGrantingStrategy(new ConsoleAuditLogger()); + } + + @Bean + public AclAuthorizationStrategy aclAuthorizationStrategy() { + return new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_ADMIN")); + } + + @Bean + public MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() { + DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); + AclPermissionEvaluator permissionEvaluator = new AclPermissionEvaluator(aclService()); + expressionHandler.setPermissionEvaluator(permissionEvaluator); + expressionHandler.setPermissionCacheOptimizer(new AclPermissionCacheOptimizer(aclService())); + return expressionHandler; + } + + @Bean + public LookupStrategy lookupStrategy() { + return new BasicLookupStrategy(dataSource, aclCache(), aclAuthorizationStrategy(), new ConsoleAuditLogger()); + } + + @Bean + public JdbcMutableAclService aclService() { + return new JdbcMutableAclService(dataSource, lookupStrategy(), aclCache()); + } + +} \ No newline at end of file diff --git a/spring-acl/src/main/java/org/baeldung/acl/config/AclMethodSecurityConfiguration.java b/spring-acl/src/main/java/org/baeldung/acl/config/AclMethodSecurityConfiguration.java new file mode 100644 index 0000000000..110c4a6d24 --- /dev/null +++ b/spring-acl/src/main/java/org/baeldung/acl/config/AclMethodSecurityConfiguration.java @@ -0,0 +1,21 @@ +package org.baeldung.acl.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration; + +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +public class AclMethodSecurityConfiguration extends GlobalMethodSecurityConfiguration { + + @Autowired + MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler; + + @Override + protected MethodSecurityExpressionHandler createExpressionHandler() { + return defaultMethodSecurityExpressionHandler; + } + +} diff --git a/spring-acl/src/main/java/org/baeldung/acl/config/JPAPersistenceConfig.java b/spring-acl/src/main/java/org/baeldung/acl/config/JPAPersistenceConfig.java new file mode 100644 index 0000000000..9b87efa92c --- /dev/null +++ b/spring-acl/src/main/java/org/baeldung/acl/config/JPAPersistenceConfig.java @@ -0,0 +1,16 @@ +package org.baeldung.acl.config; + +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@Configuration +@EnableTransactionManagement +@EnableJpaRepositories(basePackages = "org.baeldung.acl.persistence.dao") +@PropertySource("classpath:org.baeldung.acl.datasource.properties") +@EntityScan(basePackages={ "org.baeldung.acl.persistence.entity" }) +public class JPAPersistenceConfig { + +} diff --git a/spring-acl/src/main/java/org/baeldung/acl/persistence/dao/NoticeMessageRepository.java b/spring-acl/src/main/java/org/baeldung/acl/persistence/dao/NoticeMessageRepository.java new file mode 100644 index 0000000000..8662c88d6c --- /dev/null +++ b/spring-acl/src/main/java/org/baeldung/acl/persistence/dao/NoticeMessageRepository.java @@ -0,0 +1,24 @@ +package org.baeldung.acl.persistence.dao; + +import java.util.List; + +import org.baeldung.acl.persistence.entity.NoticeMessage; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.security.access.prepost.PostAuthorize; +import org.springframework.security.access.prepost.PostFilter; +import org.springframework.security.access.prepost.PreAuthorize; + +public interface NoticeMessageRepository extends JpaRepository{ + + @PostFilter("hasPermission(filterObject, 'READ')") + List findAll(); + + @PostAuthorize("hasPermission(returnObject, 'READ')") + NoticeMessage findById(Integer id); + + @SuppressWarnings("unchecked") + @PreAuthorize("hasPermission(#noticeMessage, 'WRITE')") + NoticeMessage save(@Param("noticeMessage")NoticeMessage noticeMessage); + +} diff --git a/spring-acl/src/main/java/org/baeldung/acl/persistence/entity/NoticeMessage.java b/spring-acl/src/main/java/org/baeldung/acl/persistence/entity/NoticeMessage.java new file mode 100644 index 0000000000..23f01a8edb --- /dev/null +++ b/spring-acl/src/main/java/org/baeldung/acl/persistence/entity/NoticeMessage.java @@ -0,0 +1,29 @@ +package org.baeldung.acl.persistence.entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name="system_message") +public class NoticeMessage { + + @Id + @Column + private Integer id; + @Column + private String content; + public Integer getId() { + return id; + } + public void setId(Integer id) { + this.id = id; + } + public String getContent() { + return content; + } + public void setContent(String content) { + this.content = content; + } +} \ No newline at end of file diff --git a/spring-acl/src/main/resources/acl-data.sql b/spring-acl/src/main/resources/acl-data.sql new file mode 100644 index 0000000000..6c01eaacc2 --- /dev/null +++ b/spring-acl/src/main/resources/acl-data.sql @@ -0,0 +1,28 @@ +INSERT INTO system_message(id,content) VALUES (1,'First Level Message'); +INSERT INTO system_message(id,content) VALUES (2,'Second Level Message'); +INSERT INTO system_message(id,content) VALUES (3,'Third Level Message'); + +INSERT INTO acl_class (id, class) VALUES +(1, 'org.baeldung.acl.persistence.entity.NoticeMessage'); + +INSERT INTO acl_sid (id, principal, sid) VALUES +(1, 1, 'manager'), +(2, 1, 'hr'), +(3, 1, 'admin'), +(4, 0, 'ROLE_EDITOR'); + +INSERT INTO acl_object_identity (id, object_id_class, object_id_identity, parent_object, owner_sid, entries_inheriting) VALUES +(1, 1, 1, NULL, 3, 0), +(2, 1, 2, NULL, 3, 0), +(3, 1, 3, NULL, 3, 0) +; + +INSERT INTO acl_entry (id, acl_object_identity, ace_order, sid, mask, granting, audit_success, audit_failure) VALUES +(1, 1, 1, 1, 1, 1, 1, 1), +(2, 1, 2, 1, 2, 1, 1, 1), +(3, 1, 3, 4, 1, 1, 1, 1), +(4, 2, 1, 2, 1, 1, 1, 1), +(5, 2, 2, 4, 1, 1, 1, 1), +(6, 3, 1, 4, 1, 1, 1, 1), +(7, 3, 2, 4, 2, 1, 1, 1) +; \ No newline at end of file diff --git a/spring-acl/src/main/resources/acl-schema.sql b/spring-acl/src/main/resources/acl-schema.sql new file mode 100644 index 0000000000..58e9394b2b --- /dev/null +++ b/spring-acl/src/main/resources/acl-schema.sql @@ -0,0 +1,58 @@ +create table system_message (id integer not null, content varchar(255), primary key (id)); + +CREATE TABLE IF NOT EXISTS acl_sid ( + id bigint(20) NOT NULL AUTO_INCREMENT, + principal tinyint(1) NOT NULL, + sid varchar(100) NOT NULL, + PRIMARY KEY (id), + UNIQUE KEY unique_uk_1 (sid,principal) +); + +CREATE TABLE IF NOT EXISTS acl_class ( + id bigint(20) NOT NULL AUTO_INCREMENT, + class varchar(255) NOT NULL, + PRIMARY KEY (id), + UNIQUE KEY unique_uk_2 (class) +); + +CREATE TABLE IF NOT EXISTS acl_entry ( + id bigint(20) NOT NULL AUTO_INCREMENT, + acl_object_identity bigint(20) NOT NULL, + ace_order int(11) NOT NULL, + sid bigint(20) NOT NULL, + mask int(11) NOT NULL, + granting tinyint(1) NOT NULL, + audit_success tinyint(1) NOT NULL, + audit_failure tinyint(1) NOT NULL, + PRIMARY KEY (id), + UNIQUE KEY unique_uk_4 (acl_object_identity,ace_order) +); + +CREATE TABLE IF NOT EXISTS acl_object_identity ( + id bigint(20) NOT NULL AUTO_INCREMENT, + object_id_class bigint(20) NOT NULL, + object_id_identity bigint(20) NOT NULL, + parent_object bigint(20) DEFAULT NULL, + owner_sid bigint(20) DEFAULT NULL, + entries_inheriting tinyint(1) NOT NULL, + PRIMARY KEY (id), + UNIQUE KEY unique_uk_3 (object_id_class,object_id_identity) +); + +ALTER TABLE acl_entry +ADD FOREIGN KEY (acl_object_identity) REFERENCES acl_object_identity(id); + +ALTER TABLE acl_entry +ADD FOREIGN KEY (sid) REFERENCES acl_sid(id); + +-- +-- Constraints for table acl_object_identity +-- +ALTER TABLE acl_object_identity +ADD FOREIGN KEY (parent_object) REFERENCES acl_object_identity (id); + +ALTER TABLE acl_object_identity +ADD FOREIGN KEY (object_id_class) REFERENCES acl_class (id); + +ALTER TABLE acl_object_identity +ADD FOREIGN KEY (owner_sid) REFERENCES acl_sid (id); \ No newline at end of file diff --git a/spring-acl/src/main/resources/org.baeldung.acl.datasource.properties b/spring-acl/src/main/resources/org.baeldung.acl.datasource.properties new file mode 100644 index 0000000000..739dd3f07c --- /dev/null +++ b/spring-acl/src/main/resources/org.baeldung.acl.datasource.properties @@ -0,0 +1,12 @@ +spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE +spring.datasource.username=sa +spring.datasource.password= +spring.datasource.driverClassName=org.h2.Driver +spring.jpa.hibernate.ddl-auto=update +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect + +spring.h2.console.path=/myconsole +spring.h2.console.enabled=true +spring.datasource.initialize=true +spring.datasource.schema=classpath:acl-schema.sql +spring.datasource.data=classpath:acl-data.sql \ No newline at end of file diff --git a/spring-acl/src/test/java/org/baeldung/acl/SpringAclTest.java b/spring-acl/src/test/java/org/baeldung/acl/SpringAclTest.java new file mode 100644 index 0000000000..fd9069d9bc --- /dev/null +++ b/spring-acl/src/test/java/org/baeldung/acl/SpringAclTest.java @@ -0,0 +1,119 @@ +package org.baeldung.acl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.List; + +import org.baeldung.acl.persistence.dao.NoticeMessageRepository; +import org.baeldung.acl.persistence.entity.NoticeMessage; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import org.springframework.test.context.support.DirtiesContextTestExecutionListener; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; +import org.springframework.test.context.web.ServletTestExecutionListener; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@TestExecutionListeners(listeners={ServletTestExecutionListener.class, + DependencyInjectionTestExecutionListener.class, + DirtiesContextTestExecutionListener.class, + TransactionalTestExecutionListener.class, + WithSecurityContextTestExecutionListener.class}) +public class SpringAclTest extends AbstractJUnit4SpringContextTests{ + + private static Integer FIRST_MESSAGE_ID = 1; + private static Integer SECOND_MESSAGE_ID = 2; + private static Integer THIRD_MESSAGE_ID = 3; + private static String EDITTED_CONTENT = "EDITED"; + + @Configuration + @ComponentScan("org.baeldung.acl.*") + public static class SpringConfig { + + } + + @Autowired + NoticeMessageRepository repo; + + @Test + @WithMockUser(username="manager") + public void givenUsernameManager_whenFindAllMessage_thenReturnFirstMessage(){ + List details = repo.findAll(); + assertNotNull(details); + assertEquals(1,details.size()); + assertEquals(FIRST_MESSAGE_ID,details.get(0).getId()); + } + + @Test + @WithMockUser(username="manager") + public void givenUsernameManager_whenFindFirstMessageByIdAndUpdateFirstMessageContent_thenOK(){ + NoticeMessage firstMessage = repo.findById(FIRST_MESSAGE_ID); + assertNotNull(firstMessage); + assertEquals(FIRST_MESSAGE_ID,firstMessage.getId()); + + firstMessage.setContent(EDITTED_CONTENT); + repo.save(firstMessage); + + NoticeMessage editedFirstMessage = repo.findById(FIRST_MESSAGE_ID); + assertNotNull(editedFirstMessage); + assertEquals(FIRST_MESSAGE_ID,editedFirstMessage.getId()); + assertEquals(EDITTED_CONTENT,editedFirstMessage.getContent()); + } + + @Test + @WithMockUser(username="hr") + public void givenUsernameHr_whenFindMessageById2_thenOK(){ + NoticeMessage secondMessage = repo.findById(SECOND_MESSAGE_ID); + assertNotNull(secondMessage); + assertEquals(SECOND_MESSAGE_ID,secondMessage.getId()); + } + + @Test(expected=AccessDeniedException.class) + @WithMockUser(username="hr") + public void givenUsernameHr_whenUpdateMessageWithId2_thenFail(){ + NoticeMessage secondMessage = new NoticeMessage(); + secondMessage.setId(SECOND_MESSAGE_ID); + secondMessage.setContent(EDITTED_CONTENT); + repo.save(secondMessage); + } + + @Test + @WithMockUser(roles={"EDITOR"}) + public void givenRoleEditor_whenFindAllMessage_thenReturnThreeMessage(){ + List details = repo.findAll(); + assertNotNull(details); + assertEquals(3,details.size()); + } + + @Test + @WithMockUser(roles={"EDITOR"}) + public void givenRoleEditor_whenUpdateThirdMessage_thenOK(){ + NoticeMessage thirdMessage = new NoticeMessage(); + thirdMessage.setId(THIRD_MESSAGE_ID); + thirdMessage.setContent(EDITTED_CONTENT); + repo.save(thirdMessage); + } + + @Test(expected=AccessDeniedException.class) + @WithMockUser(roles={"EDITOR"}) + public void givenRoleEditor_whenFindFirstMessageByIdAndUpdateFirstMessageContent_thenFail(){ + NoticeMessage firstMessage = repo.findById(FIRST_MESSAGE_ID); + assertNotNull(firstMessage); + assertEquals(FIRST_MESSAGE_ID,firstMessage.getId()); + firstMessage.setContent(EDITTED_CONTENT); + repo.save(firstMessage); + } +} + \ No newline at end of file From 37d13ac4f5d8fa44edd33862b258bd3df05d4fd0 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Fri, 1 Dec 2017 08:43:20 +0100 Subject: [PATCH 49/52] BAEL-1174: A Quick Guide to Spring Cloud Consul --- core-java/src/main/resources/countries.properties | 6 +++--- spring-cloud/pom.xml | 1 + spring-cloud/spring-cloud-stream/pom.xml | 1 - undertow/dependency-reduced-pom.xml | 2 +- xml/src/test/resources/example_dom4j_new.xml | 10 ---------- xml/src/test/resources/example_jaxb_new.xml | 9 --------- 6 files changed, 5 insertions(+), 24 deletions(-) delete mode 100644 xml/src/test/resources/example_dom4j_new.xml delete mode 100644 xml/src/test/resources/example_jaxb_new.xml diff --git a/core-java/src/main/resources/countries.properties b/core-java/src/main/resources/countries.properties index 3c1f53aded..e743b5a40b 100644 --- a/core-java/src/main/resources/countries.properties +++ b/core-java/src/main/resources/countries.properties @@ -1,3 +1,3 @@ -UK -US -Germany +UK +US +Germany diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index e6d78f292d..d11455f90c 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -19,6 +19,7 @@ spring-cloud-stream spring-cloud-connectors-heroku spring-cloud-aws + spring-cloud-consul pom diff --git a/spring-cloud/spring-cloud-stream/pom.xml b/spring-cloud/spring-cloud-stream/pom.xml index 1666a440b9..5ec24268d9 100644 --- a/spring-cloud/spring-cloud-stream/pom.xml +++ b/spring-cloud/spring-cloud-stream/pom.xml @@ -6,7 +6,6 @@ org.baeldung spring-cloud-stream - pom spring-cloud-stream diff --git a/undertow/dependency-reduced-pom.xml b/undertow/dependency-reduced-pom.xml index 6481c51285..e8fcd39fbb 100644 --- a/undertow/dependency-reduced-pom.xml +++ b/undertow/dependency-reduced-pom.xml @@ -36,4 +36,4 @@ 1.8 1.8 - \ No newline at end of file + diff --git a/xml/src/test/resources/example_dom4j_new.xml b/xml/src/test/resources/example_dom4j_new.xml deleted file mode 100644 index 020760fdd3..0000000000 --- a/xml/src/test/resources/example_dom4j_new.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - XML with Dom4J - XML handling with Dom4J - 14/06/2016 - Dom4J tech writer - - diff --git a/xml/src/test/resources/example_jaxb_new.xml b/xml/src/test/resources/example_jaxb_new.xml deleted file mode 100644 index 646d938869..0000000000 --- a/xml/src/test/resources/example_jaxb_new.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - Jaxb author - 04/02/2015 - XML Binding with Jaxb - XML with Jaxb - - From b6b3c476a749430b1bf4c6d7532b96909a50f732 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Fri, 1 Dec 2017 08:47:37 +0100 Subject: [PATCH 50/52] Update dependency-reduced-pom.xml From 978d5e630a68a40ca1e1cf92436fb77cc3604143 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Fri, 1 Dec 2017 08:48:36 +0100 Subject: [PATCH 51/52] BAEL-1174: A Quick Guide to Spring Cloud Consul --- ...ipleOutputsServiceApplicationUnitTest.java | 52 ------------------- ...eOutputsWithConditionsServiceUnitTest.java | 52 ------------------- .../rabbit/MyLoggerApplicationUnitTest.java | 40 -------------- undertow/dependency-reduced-pom.xml | 1 + 4 files changed, 1 insertion(+), 144 deletions(-) delete mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationUnitTest.java delete mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceUnitTest.java delete mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationUnitTest.java diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationUnitTest.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationUnitTest.java deleted file mode 100644 index 225ed73ff7..0000000000 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationUnitTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.spring.cloud.stream.rabbit; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.stream.test.binder.MessageCollector; -import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.support.MessageBuilder; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = MultipleOutputsServiceApplication.class) -@DirtiesContext -public class MultipleOutputsServiceApplicationUnitTest { - - @Autowired - private MyProcessor pipe; - - @Autowired - private MessageCollector messageCollector; - - @Test - public void whenSendMessage_thenResponseIsInAOutput() { - whenSendMessage(1); - thenPayloadInChannelIs(pipe.anOutput(), 1); - } - - @Test - public void whenSendMessage_thenResponseIsInAnotherOutput() { - whenSendMessage(11); - thenPayloadInChannelIs(pipe.anotherOutput(), 11); - } - - private void whenSendMessage(Integer val) { - pipe.myInput() - .send(MessageBuilder.withPayload(val) - .build()); - } - - private void thenPayloadInChannelIs(MessageChannel channel, Integer expectedValue) { - Object payload = messageCollector.forChannel(channel) - .poll() - .getPayload(); - assertEquals(expectedValue, payload); - } -} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceUnitTest.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceUnitTest.java deleted file mode 100644 index 8628b209cb..0000000000 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceUnitTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.spring.cloud.stream.rabbit; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.stream.test.binder.MessageCollector; -import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.support.MessageBuilder; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import com.baeldung.spring.cloud.stream.rabbit.processor.MyProcessor; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = MultipleOutputsWithConditionsServiceApplication.class) -@DirtiesContext -public class MultipleOutputsWithConditionsServiceUnitTest { - - @Autowired - private MyProcessor pipe; - - @Autowired - private MessageCollector messageCollector; - - @Test - public void whenSendMessage_thenResponseIsInAOutput() { - whenSendMessage(1); - thenPayloadInChannelIs(pipe.anOutput(), 1); - } - - @Test - public void whenSendMessage_thenResponseIsInAnotherOutput() { - whenSendMessage(11); - thenPayloadInChannelIs(pipe.anotherOutput(), 11); - } - - private void whenSendMessage(Integer val) { - pipe.myInput() - .send(MessageBuilder.withPayload(val) - .build()); - } - - private void thenPayloadInChannelIs(MessageChannel channel, Integer expectedValue) { - Object payload = messageCollector.forChannel(channel) - .poll() - .getPayload(); - assertEquals(expectedValue, payload); - } -} diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationUnitTest.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationUnitTest.java deleted file mode 100644 index 1541af3cb5..0000000000 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationUnitTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.spring.cloud.stream.rabbit; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.stream.messaging.Processor; -import org.springframework.cloud.stream.test.binder.MessageCollector; -import org.springframework.messaging.support.MessageBuilder; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import com.baeldung.spring.cloud.stream.rabbit.model.LogMessage; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = MyLoggerServiceApplication.class) -@DirtiesContext -public class MyLoggerApplicationUnitTest { - - @Autowired - private Processor pipe; - - @Autowired - private MessageCollector messageCollector; - - @Test - public void whenSendMessage_thenResponseShouldUpdateText() { - pipe.input() - .send(MessageBuilder.withPayload(new LogMessage("This is my message")) - .build()); - - Object payload = messageCollector.forChannel(pipe.output()) - .poll() - .getPayload(); - - assertEquals("[1]: This is my message", payload.toString()); - } -} diff --git a/undertow/dependency-reduced-pom.xml b/undertow/dependency-reduced-pom.xml index e8fcd39fbb..0654c82b74 100644 --- a/undertow/dependency-reduced-pom.xml +++ b/undertow/dependency-reduced-pom.xml @@ -37,3 +37,4 @@ 1.8 + From a94f98b63194deb3e204bd454b9eb829c18ab4bb Mon Sep 17 00:00:00 2001 From: Yasin Date: Fri, 1 Dec 2017 14:10:03 +0530 Subject: [PATCH 52/52] BAEL-1334 Guide to Hibernate Spatial (#3139) * BAEL-1334 Guide to Hibernate Spatial * BAEL-1334 Guide to Hibernate Spatial Moving the files to hibernate5 from libraries * Reverting the pom file --- hibernate5/pom.xml | 22 ++++- .../com/baeldung/hibernate/HibernateUtil.java | 14 ++- .../baeldung/hibernate/pojo/PointEntity.java | 41 ++++++++ .../hibernate/HibernateSpatialTest.java | 97 +++++++++++++++++++ .../resources/hibernate-spatial.properties | 10 ++ 5 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 hibernate5/src/main/java/com/baeldung/hibernate/pojo/PointEntity.java create mode 100644 hibernate5/src/test/java/com/baeldung/hibernate/HibernateSpatialTest.java create mode 100644 hibernate5/src/test/resources/hibernate-spatial.properties diff --git a/hibernate5/pom.xml b/hibernate5/pom.xml index 8543d1dae3..3b0b2fcd88 100644 --- a/hibernate5/pom.xml +++ b/hibernate5/pom.xml @@ -17,12 +17,15 @@ UTF-8 3.6.0 - + 5.2.12.Final + 6.0.6 + 2.2.3 + org.hibernate hibernate-core - 5.2.12.Final + ${hibernate.version} junit @@ -40,6 +43,21 @@ h2 1.4.194 + + org.hibernate + hibernate-spatial + ${hibernate.version} + + + mysql + mysql-connector-java + ${mysql.version} + + + ch.vorburger.mariaDB4j + mariaDB4j + ${mariaDB4j.version} + hibernate5 diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java index c3bf8c2aa9..f1fc22d29a 100644 --- a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java +++ b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java @@ -5,6 +5,7 @@ import com.baeldung.hibernate.pojo.EntityDescription; import com.baeldung.hibernate.pojo.OrderEntry; import com.baeldung.hibernate.pojo.OrderEntryIdClass; import com.baeldung.hibernate.pojo.OrderEntryPK; +import com.baeldung.hibernate.pojo.PointEntity; import com.baeldung.hibernate.pojo.Product; import com.baeldung.hibernate.pojo.Phone; import com.baeldung.hibernate.pojo.TemporalValues; @@ -23,6 +24,7 @@ import com.baeldung.hibernate.pojo.inheritance.Person; import com.baeldung.hibernate.pojo.inheritance.Pet; import com.baeldung.hibernate.pojo.inheritance.Vehicle; +import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; @@ -36,8 +38,14 @@ import java.util.Properties; public class HibernateUtil { private static SessionFactory sessionFactory; + private static String PROPERTY_FILE_NAME; public static SessionFactory getSessionFactory() throws IOException { + return getSessionFactory(null); + } + + public static SessionFactory getSessionFactory(String propertyFileName) throws IOException { + PROPERTY_FILE_NAME = propertyFileName; if (sessionFactory == null) { ServiceRegistry serviceRegistry = configureServiceRegistry(); sessionFactory = makeSessionFactory(serviceRegistry); @@ -70,6 +78,7 @@ public class HibernateUtil { metadataSources.addAnnotatedClass(Vehicle.class); metadataSources.addAnnotatedClass(Car.class); metadataSources.addAnnotatedClass(Bag.class); + metadataSources.addAnnotatedClass(PointEntity.class); Metadata metadata = metadataSources.buildMetadata(); return metadata.getSessionFactoryBuilder() @@ -86,12 +95,11 @@ public class HibernateUtil { private static Properties getProperties() throws IOException { Properties properties = new Properties(); URL propertiesURL = Thread.currentThread() - .getContextClassLoader() - .getResource("hibernate.properties"); + .getContextClassLoader() + .getResource(StringUtils.defaultString(PROPERTY_FILE_NAME, "hibernate.properties")); try (FileInputStream inputStream = new FileInputStream(propertiesURL.getFile())) { properties.load(inputStream); } return properties; } - } \ No newline at end of file diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/PointEntity.java b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/PointEntity.java new file mode 100644 index 0000000000..223f5dcbde --- /dev/null +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/PointEntity.java @@ -0,0 +1,41 @@ +package com.baeldung.hibernate.pojo; + +import com.vividsolutions.jts.geom.Point; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class PointEntity { + + @Id + @GeneratedValue + private Long id; + + private Point point; + + public PointEntity() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Point getPoint() { + return point; + } + + public void setPoint(Point point) { + this.point = point; + } + + @Override + public String toString() { + return "PointEntity{" + "id=" + id + ", point=" + point + '}'; + } +} diff --git a/hibernate5/src/test/java/com/baeldung/hibernate/HibernateSpatialTest.java b/hibernate5/src/test/java/com/baeldung/hibernate/HibernateSpatialTest.java new file mode 100644 index 0000000000..6d0aa0a4cd --- /dev/null +++ b/hibernate5/src/test/java/com/baeldung/hibernate/HibernateSpatialTest.java @@ -0,0 +1,97 @@ +package com.baeldung.hibernate; + +import com.baeldung.hibernate.pojo.PointEntity; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.io.ParseException; +import com.vividsolutions.jts.io.WKTReader; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import javax.persistence.Query; +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class HibernateSpatialTest { + + private Session session; + private Transaction transaction; + + @Before + public void setUp() throws IOException { + session = HibernateUtil.getSessionFactory("hibernate-spatial.properties") + .openSession(); + transaction = session.beginTransaction(); + } + + @After + public void tearDown() { + transaction.rollback(); + session.close(); + } + + @Test + public void shouldConvertWktToGeometry() throws ParseException { + Geometry geometry = wktToGeometry("POINT (2 5)"); + assertEquals("Point", geometry.getGeometryType()); + assertTrue(geometry instanceof Point); + } + + @Test + public void shouldInsertAndSelectPoints() throws ParseException { + PointEntity entity = new PointEntity(); + entity.setPoint((Point) wktToGeometry("POINT (1 1)")); + + session.persist(entity); + PointEntity fromDb = session.find(PointEntity.class, entity.getId()); + assertEquals("POINT (1 1)", fromDb.getPoint().toString()); + } + + @Test + public void shouldSelectDisjointPoints() throws ParseException { + insertPoint("POINT (1 2)"); + insertPoint("POINT (3 4)"); + insertPoint("POINT (5 6)"); + + Point point = (Point) wktToGeometry("POINT (3 4)"); + Query query = session.createQuery("select p from PointEntity p " + + "where disjoint(p.point, :point) = true", PointEntity.class); + query.setParameter("point", point); + assertEquals("POINT (1 2)", ((PointEntity) query.getResultList().get(0)).getPoint().toString()); + assertEquals("POINT (5 6)", ((PointEntity) query.getResultList().get(1)).getPoint().toString()); + } + + @Test + public void shouldSelectAllPointsWithinPolygon() throws ParseException { + insertPoint("POINT (1 1)"); + insertPoint("POINT (1 2)"); + insertPoint("POINT (3 4)"); + insertPoint("POINT (5 6)"); + + Query query = session.createQuery("select p from PointEntity p where within(p.point, :area) = true", + PointEntity.class); + query.setParameter("area", wktToGeometry("POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))")); + assertEquals(3, query.getResultList().size()); + assertEquals("POINT (1 1)", ((PointEntity) query.getResultList().get(0)).getPoint().toString()); + assertEquals("POINT (1 2)", ((PointEntity) query.getResultList().get(1)).getPoint().toString()); + assertEquals("POINT (3 4)", ((PointEntity) query.getResultList().get(2)).getPoint().toString()); + } + + private void insertPoint(String point) throws ParseException { + PointEntity entity = new PointEntity(); + entity.setPoint((Point) wktToGeometry(point)); + session.persist(entity); + } + + private Geometry wktToGeometry(String wellKnownText) throws ParseException { + WKTReader fromText = new WKTReader(); + Geometry geom = null; + geom = fromText.read(wellKnownText); + return geom; + } +} diff --git a/hibernate5/src/test/resources/hibernate-spatial.properties b/hibernate5/src/test/resources/hibernate-spatial.properties new file mode 100644 index 0000000000..e85cd49cc3 --- /dev/null +++ b/hibernate5/src/test/resources/hibernate-spatial.properties @@ -0,0 +1,10 @@ +hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect +hibernate.connection.driver_class=com.mysql.jdbc.Driver +hibernate.connection.url=jdbc:mysql://localhost:3306/hibernate-spatial +hibernate.connection.username=root +hibernate.connection.password=pass +hibernate.connection.pool_size=5 +hibernate.show_sql=true +hibernate.format_sql=true +hibernate.max_fetch_depth=5 +hibernate.hbm2ddl.auto=create-drop \ No newline at end of file