/*
* Copyright 2002-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.samples.jpa;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Scanner;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ImportResource;
import org.springframework.integration.samples.jpa.domain.Person;
import org.springframework.integration.samples.jpa.service.PersonService;
import org.springframework.util.StringUtils;
/**
* Starts the Spring Context and will initialize the Spring Integration routes.
*
* @author Gunnar Hillert
* @author Amol Nayak
* @author Gary Russell
* @author Artem Bilan
* @version 1.0
*
*/
@SpringBootApplication(exclude = HibernateJpaAutoConfiguration.class)
@ImportResource("spring-integration-context.xml")
public class Main {
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");
/**
* Load the Spring Integration Application Context
*
* @param args - command line arguments
*/
public static void main(final String... args) {
final Scanner scanner = new Scanner(System.in);
System.out.println("\n========================================================="
+ "\n "
+ "\n Welcome to the Spring Integration JPA Sample! "
+ "\n "
+ "\n For more information please visit: "
+ "\n http://www.springintegration.org/ "
+ "\n "
+ "\n=========================================================");
System.out.println("Please enter a choice and press <enter>: ");
System.out.println("\t1. Use Hibernate");
System.out.println("\t2. Use EclipseLink");
System.out.println("\tq. Quit the application");
System.out.print("Enter you choice: ");
SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder(Main.class)
.web(WebApplicationType.NONE);
while (true) {
final String input = scanner.nextLine();
if ("1".equals(input.trim())) {
springApplicationBuilder.sources(HibernateJpaAutoConfiguration.class);
break;
}
else if ("2".equals(input.trim())) {
springApplicationBuilder.profiles("eclipseLink");
break;
}
else if ("q".equals(input.trim())) {
System.out.println("Exiting application...bye.");
System.exit(0);
}
else {
System.out.println("Invalid choice\n\n");
System.out.print("Enter you choice: ");
}
}
ConfigurableApplicationContext context = springApplicationBuilder.run(args);
final PersonService personService = context.getBean(PersonService.class);
System.out.println("Please enter a choice and press <enter>: ");
System.out.println("\t1. List all people");
System.out.println("\t2. Create a new person");
System.out.println("\tq. Quit the application");
System.out.print("Enter you choice: ");
while (true) {
final String input = scanner.nextLine();
if ("1".equals(input.trim())) {
findPeople(personService);
}
else if ("2".equals(input.trim())) {
createPersonDetails(scanner, personService);
}
else if ("q".equals(input.trim())) {
break;
}
else {
System.out.println("Invalid choice\n\n");
}
System.out.println("Please enter a choice and press <enter>: ");
System.out.println("\t1. List all people");
System.out.println("\t2. Create a new person");
System.out.println("\tq. Quit the application");
System.out.print("Enter you choice: ");
}
System.out.println("Exiting application...bye.");
context.close();
System.exit(0);
}
private static void createPersonDetails(final Scanner scanner, PersonService service) {
while (true) {
System.out.print("\nEnter the Person's name:");
String name = null;
while (true) {
name = scanner.nextLine();
if (StringUtils.hasText(name)) {
break;
}
System.out.print("No text entered....Please enter a name:");
}
Person person = new Person();
person.setName(name);
person = service.createPerson(person);
System.out.println("Created person record with id: " + person.getId());
System.out.print("Do you want to create another person? (y/n)");
String choice = scanner.nextLine();
if (!"y".equalsIgnoreCase(choice)) {
break;
}
}
}
private static void findPeople(final PersonService service) {
System.out.println("ID NAME CREATED");
System.out.println("==================================");
final List<Person> people = service.findPeople();
if (people != null && !people.isEmpty()) {
for (Person person : people) {
System.out.print(String.format("%d, %s, ", person.getId(), person.getName()));
System.out.println(DATE_FORMAT.format(person.getCreatedDateTime()));//NOSONAR
}
}
else {
System.out.println(
String.format("No Person record found."));
}
System.out.println("==================================\n\n");
}
}