diff --git a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml new file mode 100644 index 0000000000..62c3676ae4 --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml @@ -0,0 +1,59 @@ + + 4.0.0 + + com.baeldung + greeter-spring-boot-autoconfigure + 0.0.1-SNAPSHOT + + + UTF-8 + 1.5.2.RELEASE + 0.0.1-SNAPSHOT + + + + + + org.springframework.boot + spring-boot + ${spring-boot.version} + + + + org.springframework.boot + spring-boot-autoconfigure + ${spring-boot.version} + + + + org.springframework.boot + spring-boot-configuration-processor + ${spring-boot.version} + true + + + + com.baeldung + greeter + ${greeter.version} + true + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterAutoConfiguration.java b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterAutoConfiguration.java new file mode 100644 index 0000000000..4cf078aa00 --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterAutoConfiguration.java @@ -0,0 +1,48 @@ +package com.baeldung.greeter.autoconfigure; + +import static com.baeldung.greeter.GreeterConfigParams.*; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.greeter.Greeter; +import com.baeldung.greeter.GreetingConfig; + +@Configuration +@ConditionalOnClass(Greeter.class) +@EnableConfigurationProperties(GreeterProperties.class) +public class GreeterAutoConfiguration { + + @Autowired + private GreeterProperties greeterProperties; + + @Bean + @ConditionalOnMissingBean + public GreetingConfig greeterConfig() { + + String userName = greeterProperties.getUserName() == null ? System.getProperty("user.name") : greeterProperties.getUserName(); + String morningMessage = greeterProperties.getMorningMessage() == null ? "Good Morning" : greeterProperties.getMorningMessage(); + String afternoonMessage = greeterProperties.getAfternoonMessage() == null ? "Good Afternoon" : greeterProperties.getAfternoonMessage(); + String eveningMessage = greeterProperties.getEveningMessage() == null ? "Good Evening" : greeterProperties.getEveningMessage(); + String nightMessage = greeterProperties.getNightMessage() == null ? "Good Night" : greeterProperties.getNightMessage(); + + GreetingConfig greetingConfig = new GreetingConfig(); + greetingConfig.put(USER_NAME, userName); + greetingConfig.put(MORNING_MESSAGE, morningMessage); + greetingConfig.put(AFTERNOON_MESSAGE, afternoonMessage); + greetingConfig.put(EVENING_MESSAGE, eveningMessage); + greetingConfig.put(NIGHT_MESSAGE, nightMessage); + return greetingConfig; + } + + @Bean + @ConditionalOnMissingBean + public Greeter greeter(GreetingConfig greetingConfig) { + return new Greeter(greetingConfig); + } + +} diff --git a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterProperties.java b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterProperties.java new file mode 100644 index 0000000000..c60c45c8c6 --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterProperties.java @@ -0,0 +1,54 @@ +package com.baeldung.greeter.autoconfigure; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "baeldung.greeter") +public class GreeterProperties { + + private String userName; + private String morningMessage; + private String afternoonMessage; + private String eveningMessage; + private String nightMessage; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getMorningMessage() { + return morningMessage; + } + + public void setMorningMessage(String morningMessage) { + this.morningMessage = morningMessage; + } + + public String getAfternoonMessage() { + return afternoonMessage; + } + + public void setAfternoonMessage(String afternoonMessage) { + this.afternoonMessage = afternoonMessage; + } + + public String getEveningMessage() { + return eveningMessage; + } + + public void setEveningMessage(String eveningMessage) { + this.eveningMessage = eveningMessage; + } + + public String getNightMessage() { + return nightMessage; + } + + public void setNightMessage(String nightMessage) { + this.nightMessage = nightMessage; + } + +} diff --git a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000000..418201227b --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.baeldung.greeter.autoconfigure.GreeterAutoConfiguration \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter-spring-boot-sample-app/pom.xml b/spring-boot-custom-starter/greeter-spring-boot-sample-app/pom.xml new file mode 100644 index 0000000000..bb1d35cfaa --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-sample-app/pom.xml @@ -0,0 +1,39 @@ + + 4.0.0 + + com.baeldung + greeter-spring-boot-sample-app + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 1.5.2.RELEASE + + + + + UTF-8 + 1.8 + 0.0.1-SNAPSHOT + + + + + + com.baeldung + greeter-spring-boot-starter + ${greeter-starter.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/java/com/baeldung/greeter/sample/GreeterSampleApplication.java b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/java/com/baeldung/greeter/sample/GreeterSampleApplication.java new file mode 100644 index 0000000000..3c87524648 --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/java/com/baeldung/greeter/sample/GreeterSampleApplication.java @@ -0,0 +1,25 @@ +package com.baeldung.greeter.sample; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import com.baeldung.greeter.Greeter; + +@SpringBootApplication +public class GreeterSampleApplication implements CommandLineRunner { + + @Autowired + private Greeter greeter; + + public static void main(String[] args) { + SpringApplication.run(GreeterSampleApplication.class, args); + } + + @Override + public void run(String... args) throws Exception { + String message = greeter.greet(); + System.out.println(message); + } +} diff --git a/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/resources/application.properties b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/resources/application.properties new file mode 100644 index 0000000000..6136e602f7 --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/resources/application.properties @@ -0,0 +1,2 @@ +baeldung.greeter.userName=Baeldung +baeldung.greeter.afternoonMessage=Woha\ Afternoon diff --git a/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/test/java/com/baeldung/greeter/sample/GreeterSampleApplicationTest.java b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/test/java/com/baeldung/greeter/sample/GreeterSampleApplicationTest.java new file mode 100644 index 0000000000..bdb8fd0112 --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/test/java/com/baeldung/greeter/sample/GreeterSampleApplicationTest.java @@ -0,0 +1,50 @@ +package com.baeldung.greeter.sample; + +import static org.junit.Assert.assertEquals; + +import java.time.LocalDateTime; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.greeter.Greeter; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = GreeterSampleApplication.class) +public class GreeterSampleApplicationTest { + + @Autowired + private Greeter greeter; + + @Test + public void givenMorningTime_ifMorningMessage_thenSuccess() { + String expected = "Hello Baeldung, Good Morning"; + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 6, 0)); + assertEquals(expected, actual); + } + + @Test + public void givenAfternoonTime_ifAfternoonMessage_thenSuccess() { + String expected = "Hello Baeldung, Woha Afternoon"; + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 13, 0)); + assertEquals(expected, actual); + } + + @Test + public void givenEveningTime_ifEveningMessage_thenSuccess() { + String expected = "Hello Baeldung, Good Evening"; + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 19, 0)); + assertEquals(expected, actual); + } + + @Test + public void givenNightTime_ifNightMessage_thenSuccess() { + String expected = "Hello Baeldung, Good Night"; + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 21, 0)); + assertEquals(expected, actual); + } + +} diff --git a/spring-boot-custom-starter/greeter-spring-boot-starter/pom.xml b/spring-boot-custom-starter/greeter-spring-boot-starter/pom.xml new file mode 100644 index 0000000000..7b38c53c09 --- /dev/null +++ b/spring-boot-custom-starter/greeter-spring-boot-starter/pom.xml @@ -0,0 +1,51 @@ + + 4.0.0 + + com.baeldung + greeter-spring-boot-starter + 0.0.1-SNAPSHOT + + + UTF-8 + 0.0.1-SNAPSHOT + 1.5.2.RELEASE + + + + + + org.springframework.boot + spring-boot-starter + ${spring-boot.version} + + + + com.baeldung + greeter-spring-boot-autoconfigure + ${project.version} + + + + com.baeldung + greeter + ${greeter.version} + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter/README.md b/spring-boot-custom-starter/greeter/README.md new file mode 100644 index 0000000000..3b26cbddcb --- /dev/null +++ b/spring-boot-custom-starter/greeter/README.md @@ -0,0 +1,19 @@ +# Greeter App + +This app takes in the user's name and messages for different times of day as configuration parameters and outptus the greeting messge. For example it will take the name **John** and the message for morning time as **Good Morning** and output the message **Hello John, Good Morning**. + +## Usage + +Create and populate the class `GreetingConfig`, instantiate a `Greeter` using the `GreetingConfig` and use it get greeting messages: + +```java +GreetingConfig greetingConfig = new GreetingConfig(); +greetingConfig.put(USER_NAME, "World"); +greetingConfig.put(MORNING_MESSAGE, "Good Morning"); +greetingConfig.put(AFTERNOON_MESSAGE, "Good Afternoon"); +greetingConfig.put(EVENING_MESSAGE, "Good Evening"); +greetingConfig.put(NIGHT_MESSAGE, "Good Night"); + +Greeter greeter = new Greeter(greetingConfig); +greeter.greet(); +``` \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter/pom.xml b/spring-boot-custom-starter/greeter/pom.xml new file mode 100644 index 0000000000..b0e37a9ed9 --- /dev/null +++ b/spring-boot-custom-starter/greeter/pom.xml @@ -0,0 +1,38 @@ + + 4.0.0 + + com.baeldung + greeter + 0.0.1-SNAPSHOT + + + UTF-8 + + + + + + junit + junit + 4.12 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/Greeter.java b/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/Greeter.java new file mode 100644 index 0000000000..970561d1fd --- /dev/null +++ b/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/Greeter.java @@ -0,0 +1,35 @@ +package com.baeldung.greeter; + +import static com.baeldung.greeter.GreeterConfigParams.*; + +import java.time.LocalDateTime; + +public class Greeter { + + private GreetingConfig greetingConfig; + + public Greeter(GreetingConfig greetingConfig) { + this.greetingConfig = greetingConfig; + } + + public String greet(LocalDateTime localDateTime) { + + String name = greetingConfig.getProperty(USER_NAME); + int hourOfDay = localDateTime.getHour(); + + if (hourOfDay >= 5 && hourOfDay < 12) { + return String.format("Hello %s, %s", name, greetingConfig.get(MORNING_MESSAGE)); + } else if (hourOfDay >= 12 && hourOfDay < 17) { + return String.format("Hello %s, %s", name, greetingConfig.get(AFTERNOON_MESSAGE)); + } else if (hourOfDay >= 17 && hourOfDay < 20) { + return String.format("Hello %s, %s", name, greetingConfig.get(EVENING_MESSAGE)); + } else { + return String.format("Hello %s, %s", name, greetingConfig.get(NIGHT_MESSAGE)); + } + } + + public String greet() { + return greet(LocalDateTime.now()); + } + +} diff --git a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreeterConfigParams.java b/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreeterConfigParams.java new file mode 100644 index 0000000000..fa30b0f312 --- /dev/null +++ b/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreeterConfigParams.java @@ -0,0 +1,11 @@ +package com.baeldung.greeter; + +public class GreeterConfigParams { + + public static final String USER_NAME = "user.name"; + public static final String MORNING_MESSAGE = "morning.message"; + public static final String AFTERNOON_MESSAGE = "afternoon.message"; + public static final String EVENING_MESSAGE = "evening.message"; + public static final String NIGHT_MESSAGE = "night.message"; + +} diff --git a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreetingConfig.java b/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreetingConfig.java new file mode 100644 index 0000000000..fbbe11cf4f --- /dev/null +++ b/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreetingConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.greeter; + +import java.util.Properties; + +public class GreetingConfig extends Properties{ + + private static final long serialVersionUID = 5662570853707247891L; + +} diff --git a/spring-boot-custom-starter/greeter/src/test/java/com/baeldung/greeter/GreeterTest.java b/spring-boot-custom-starter/greeter/src/test/java/com/baeldung/greeter/GreeterTest.java new file mode 100644 index 0000000000..834f1447bd --- /dev/null +++ b/spring-boot-custom-starter/greeter/src/test/java/com/baeldung/greeter/GreeterTest.java @@ -0,0 +1,56 @@ +package com.baeldung.greeter; + +import static com.baeldung.greeter.GreeterConfigParams.*; +import static org.junit.Assert.assertEquals; + +import java.time.LocalDateTime; + +import org.junit.BeforeClass; +import org.junit.Test; + +public class GreeterTest { + + private static GreetingConfig greetingConfig; + + @BeforeClass + public static void initalizeGreetingConfig() { + greetingConfig = new GreetingConfig(); + greetingConfig.put(USER_NAME, "World"); + greetingConfig.put(MORNING_MESSAGE, "Good Morning"); + greetingConfig.put(AFTERNOON_MESSAGE, "Good Afternoon"); + greetingConfig.put(EVENING_MESSAGE, "Good Evening"); + greetingConfig.put(NIGHT_MESSAGE, "Good Night"); + } + + @Test + public void givenMorningTime_ifMorningMessage_thenSuccess() { + String expected = "Hello World, Good Morning"; + Greeter greeter = new Greeter(greetingConfig); + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 6, 0)); + assertEquals(expected, actual); + } + + @Test + public void givenAfternoonTime_ifAfternoonMessage_thenSuccess() { + String expected = "Hello World, Good Afternoon"; + Greeter greeter = new Greeter(greetingConfig); + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 13, 0)); + assertEquals(expected, actual); + } + + @Test + public void givenEveningTime_ifEveningMessage_thenSuccess() { + String expected = "Hello World, Good Evening"; + Greeter greeter = new Greeter(greetingConfig); + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 19, 0)); + assertEquals(expected, actual); + } + + @Test + public void givenNightTime_ifNightMessage_thenSuccess() { + String expected = "Hello World, Good Night"; + Greeter greeter = new Greeter(greetingConfig); + String actual = greeter.greet(LocalDateTime.of(2017, 3, 1, 21, 0)); + assertEquals(expected, actual); + } +} diff --git a/spring-boot-custom-starter/pom.xml b/spring-boot-custom-starter/pom.xml new file mode 100644 index 0000000000..e24ff071d4 --- /dev/null +++ b/spring-boot-custom-starter/pom.xml @@ -0,0 +1,34 @@ + + 4.0.0 + com.baeldung + spring-boot-custom-starter + 0.0.1-SNAPSHOT + pom + + + UTF-8 + + + + greeter + greeter-spring-boot-autoconfigure + greeter-spring-boot-starter + greeter-spring-boot-sample-app + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + \ No newline at end of file