content: package com.threepillar.labs.socialauthsample.controller;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpSession;
  
  import org.brickred.socialauth.AuthProvider;
  import org.brickred.socialauth.SocialAuthManager;
  import org.brickred.socialauth.spring.bean.SocialAuthTemplate;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.ModelAttribute;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RequestParam;
  import org.springframework.web.servlet.ModelAndView;
  
  import com.threepillar.labs.socialauthsample.bean.User;
  import com.threepillar.labs.socialauthsample.util.Constants;
  
  @Controller
  public class HomeController {
  
  	private final Logger logger = LoggerFactory.getLogger(this.getClass());
  
  	@Autowired
  	private SocialAuthTemplate socialAuthTemplate;
  
  	@RequestMapping(value = "/registration")
  	public ModelAndView showRegistration(final HttpServletRequest request) {
  		logger.info("Showing registration page");
  		HttpSession session = request.getSession();
  		session.setAttribute(Constants.REQUEST_TYPE, Constants.REGISTRATION);
  		ModelAndView modelAndView = new ModelAndView("registration");
  		return modelAndView;
  
  	}
  
  	@RequestMapping(value = "/submitRegistration")
  	public ModelAndView showRegistrationPage(
  			@ModelAttribute("user") final User user,
  			final HttpServletRequest request) {
  		logger.info("Submiting registration");
  		ModelAndView modelAndView = new ModelAndView("registrationSuccess",
  				"user", user);
  		return modelAndView;
  
  	}
  
  	@RequestMapping(value = "/importContacts")
  	public ModelAndView importContacts(final HttpServletRequest request) {
  		logger.info("Showing import contacts page");
  		HttpSession session = request.getSession();
  		session.setAttribute(Constants.REQUEST_TYPE, Constants.IMPORT_CONTACTS);
  		ModelAndView modelAndView = new ModelAndView("importContacts");
  		return modelAndView;
  	}
  
  	@RequestMapping(value = "/shareForm")
  	public ModelAndView shareForm(final HttpServletRequest request) {
  		logger.info("Showing share form");
  		HttpSession session = request.getSession();
  		session.setAttribute(Constants.REQUEST_TYPE, Constants.SHARE);
  		SocialAuthManager manager = socialAuthTemplate.getSocialAuthManager();
  		List<String> connectedProvidersIds = new ArrayList<String>();
  		if (manager != null) {
  			connectedProvidersIds = manager.getConnectedProvidersIds();
  		}
  
  		ModelAndView modelAndView = new ModelAndView("shareForm",
  				"connectedProvidersIds", connectedProvidersIds);
  		return modelAndView;
  
  	}
  
  	@RequestMapping(value = "/share", method = RequestMethod.POST)
  	public ModelAndView share(
  			@RequestParam(value = "message", required = true) final String message,
  			final HttpServletRequest request) {
  		logger.info("Showing share form");
  		HttpSession session = request.getSession();
  		session.setAttribute(Constants.REQUEST_TYPE, Constants.SHARE);
  		SocialAuthManager manager = socialAuthTemplate.getSocialAuthManager();
  		List<String> connectedProvidersIds = new ArrayList<String>();
  		if (manager != null) {
  			connectedProvidersIds = manager.getConnectedProvidersIds();
  		}
  		String providerIds = null;
  		for (String id : connectedProvidersIds) {
  			try {
  				AuthProvider provider = manager.getProvider(id);
  				provider.updateStatus(message);
  				if (providerIds == null) {
  					providerIds = provider.getProviderId();
  				} else {
  					providerIds += ", " + provider.getProviderId();
  				}
  			} catch (Exception e) {
  				logger.error(e.getMessage());
  			}
  		}
  		ModelAndView modelAndView = new ModelAndView("shareForm");
  		modelAndView.addObject("connectedProvidersIds", connectedProvidersIds);
  		if (providerIds != null) {
  			String str = "Status is updated on " + providerIds;
  			if (providerIds.indexOf(',') != -1) {
  				str += " providers.";
  			} else {
  				str += " provider.";
  			}
  			modelAndView.addObject("message", str);
  		}
  		return modelAndView;
  
  	}
  }
  