}
@Transactional
public InfoLoginResult persistUser(Date dateIn, com.google.appengine.api.users.User user, String ip, String pendingFriend){
InfoLoginResult result = null;
Login login = new Login();
login.setIp(ip);
login.setLoginDate(dateIn);
log.info("Looking for id: "+user.getEmail());
User userBean = model.find(User.class, user.getEmail());
if(userBean != null){
if(AUTH_DOMAIN_NOT_REGISTERED.equals(userBean.getAuthDomain()))
setUserOpenIdValues(userBean, user);
Date date = userBean.getLogins().get(userBean.getLogins().size()-1).getLoginDate();
if(pendingFriend != null)
userBean.getPendingFriends().add(pendingFriend);
login.setUser(userBean);
model.persist(login);
log.info("Update user: "+user.getEmail()+" with date "+dateIn);
result = new InfoLoginResult(user.getEmail(), date, false, userBean.isReceiveEmails(), userBean.getUserId());
}else{
List<Login> logins = new ArrayList<Login>();
userBean = new User();
setUserOpenIdValues(userBean, user);
userBean.setReceiveEmails(true);
userBean.setFriends(new HashSet<String>());
userBean.setPendingFriends(new HashSet<String>());
if(pendingFriend != null)
userBean.getPendingFriends().add(pendingFriend);
logins.add(login);
userBean.setLogins(logins);
model.persist(userBean);
log.info("Creating user: "+user.getEmail());
result = new InfoLoginResult(user.getEmail(), login.getLoginDate(), true, userBean.isReceiveEmails(), userBean.getUserId());
}
log.info("User "+userBean);
log.info("Returning "+result);
return result;
}