package com.chughes.dip.data; import java.io.Serializable; import java.util.List; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.FlushMode; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import com.chughes.dip.user.UserDetailsImpl; import com.chughes.dip.user.UserEntity; @Repository public class UserRepository{ @Autowired private SessionFactory sessionFactory; @Autowired private BCryptPasswordEncoder encoder; @Transactional public void removeAndroidRegistration(String reg){ Query q = sessionFactory.getCurrentSession().createQuery("from UserEntity ue WHERE ? in elements(ue.androidApps)"); q.setString(0, reg); UserEntity ue = (UserEntity) q.uniqueResult(); if (ue != null){ ue.getAndroidApps().remove(reg); saveUser(ue); } } @Transactional public void createUser(UserDetailsImpl user) throws Exception{ Session session = sessionFactory.getCurrentSession(); UserEntity ue = new UserEntity(); if (user.getUsername().length() < 2){ throw new Exception("Username must be at least 2 characters"); }else if (user.getPassword().length() < 5){ throw new Exception("Password must be at least 5 characters"); }else if (getUserByName(user.getUsername()) != null){ throw new Exception("Username Taken"); } ue.setUsername(user.getUsername()); ue.setPassword(encoder.encode(user.getPassword())); session.save(ue); } @Transactional public Serializable saveUser(UserEntity ue){ Session session = sessionFactory.getCurrentSession(); return session.save(ue); } @Transactional public void updateUser(UserEntity user){ sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO); //merge is only necessary for detached NULL_USER, are there disadvantages to using merge()? sessionFactory.getCurrentSession().merge(user); //sessionFactory.getCurrentSession().flush(); } @Transactional public void editUser(UserEntity user){ sessionFactory.getCurrentSession().update(user); } @Transactional(readOnly=true) public UserDetailsImpl getUserByName(String name){ //System.out.println("NAme is "+name); Session session = null; UserEntity user = null; UserDetailsImpl ud = null; //System.out.println("Even Here"); //System.out.println(sessionFactory); session = sessionFactory.getCurrentSession(); //System.out.println("About Here"); Query query = session.createQuery("from UserEntity i where i.username = :name"); query.setString("name", name); user = (UserEntity) query.uniqueResult(); if (user != null){ ud = new UserDetailsImpl(user.getUsername(),user.getPassword()); ud.setId(user.getId()); } Logger.getLogger(UserRepository.class).info("Here2"); return ud; } @Transactional(readOnly=true) public UserEntity getUserEntity(int id){ Session session = sessionFactory.getCurrentSession(); UserEntity ue = (UserEntity)session.get(UserEntity.class, id); return ue; } }