/*
* Copyright 2002-2010 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.enricher;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import org.apache.log4j.Logger;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.samples.enricher.service.UserService;
/**
* Starts the Spring Context and will initialize the Spring Integration routes.
*
* @author Gunnar Hillert
* @version 1.0
*
*/
public final class Main {
private static final Logger LOGGER = Logger.getLogger(Main.class);
private static final String LINE_SEPARATOR = "\n==========================================================================";
private static final String EMPTY_LINE = "\n ";
private Main() { }
/**
* Load the Spring Integration Application Context
*
* @param args - command line arguments
*/
public static void main(final String... args) {
LOGGER.info(LINE_SEPARATOR
+ EMPTY_LINE
+ "\n Welcome to Spring Integration! "
+ EMPTY_LINE
+ "\n For more information please visit: "
+ "\n http://www.springsource.org/spring-integration "
+ EMPTY_LINE
+ LINE_SEPARATOR );
final AbstractApplicationContext context =
new ClassPathXmlApplicationContext("classpath:META-INF/spring/integration/*-context.xml");
context.registerShutdownHook();
final Scanner scanner = new Scanner(System.in);
final UserService service = context.getBean(UserService.class);
LOGGER.info(LINE_SEPARATOR
+ EMPTY_LINE
+ "\n Please press 'q + Enter' to quit the application. "
+ EMPTY_LINE
+ LINE_SEPARATOR
+ EMPTY_LINE
+ "\n This example illustrates the usage of the Content Enricher. "
+ EMPTY_LINE
+ "\n Usage: Please enter 1 or 2 or 3 + Enter "
+ EMPTY_LINE
+ "\n 3 different message flows are triggered. For sample 1+2 a "
+ "\n user object containing only the username is passed in. "
+ "\n For sample 3 a Map with the 'username' key is passed in and enriched "
+ "\n with the user object using the 'user' key. "
+ EMPTY_LINE
+ "\n 1: In the Enricher, pass the full User object to the request channel. "
+ "\n 2: In the Enricher, pass only the username to the request channel. "
+ "\n 3: In the Enricher, pass only the username to the request channel. "
+ EMPTY_LINE
+ LINE_SEPARATOR);
while (!scanner.hasNext("q")) {
final String input = scanner.nextLine();
User user = new User("foo", null, null);
if ("1".equals(input)) {
final User fullUser = service.findUser(user);
printUserInformation(fullUser);
} else if ("2".equals(input)) {
final User fullUser = service.findUserByUsername(user);
printUserInformation(fullUser);
} else if ("3".equals(input)) {
final Map<String, Object> userData = new HashMap<String, Object>();
userData.put("username", "foo_map");
final Map<String, Object> enrichedUserData = service.findUserWithUsernameInMap(userData);
final User fullUser = (User) enrichedUserData.get("user");
printUserInformation(fullUser);
} else {
LOGGER.info("\n\n Please enter '1', '2', or '3' <enter>:\n\n");
}
}
LOGGER.info("\n\nExiting application...bye.");
System.exit(0);
}
private static void printUserInformation(User user) {
if (user != null) {
LOGGER.info(String.format("\n\n User found - Username: '%s', Email: '%s', Password: '%s'.\n\n",
user.getUsername(), user.getEmail(), user.getPassword()));
} else {
LOGGER.info("\n\n No User found for username: 'foo'.\n\n");
}
}
}