diff --git a/pom.xml b/pom.xml index 8a1ef44..a6ece35 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ org.hibernate hibernate-core - 4.3.0.Final + 5.2.17.Final @@ -81,7 +81,7 @@ org.hibernate hibernate-entitymanager - 4.3.0.Final + 5.2.17.Final diff --git a/src/main/java/shell/DAO/RoleDao.java b/src/main/java/shell/DAO/RoleDao.java new file mode 100644 index 0000000..34aba2c --- /dev/null +++ b/src/main/java/shell/DAO/RoleDao.java @@ -0,0 +1,10 @@ +package shell.DAO; + + +import shell.model.Role; + +public interface RoleDao { + + Role getRoleById(Long roleId); + Role getRoleUser(); +} diff --git a/src/main/java/shell/DAO/RoleDaoImpl.java b/src/main/java/shell/DAO/RoleDaoImpl.java new file mode 100644 index 0000000..b8d4f9a --- /dev/null +++ b/src/main/java/shell/DAO/RoleDaoImpl.java @@ -0,0 +1,38 @@ +package shell.DAO; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.Transaction; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import shell.model.Role; +import shell.util.DBHelper; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.util.List; + +@Component +public class RoleDaoImpl implements RoleDao { + +// private SessionFactory sessionFactory; +// +// public RoleDaoImpl() { +// sessionFactory = DBHelper.getSessionFactory(); +// } + + @Autowired + @PersistenceContext + private EntityManager entityManager; + + @Override + public Role getRoleUser() { + return entityManager.find(Role.class, 2L); + } + + @Override + public Role getRoleById(Long roleId) { + return entityManager.find(Role.class, roleId); + } +} + diff --git a/src/main/java/shell/DAO/UserDao.java b/src/main/java/shell/DAO/UserDao.java new file mode 100644 index 0000000..637b0a1 --- /dev/null +++ b/src/main/java/shell/DAO/UserDao.java @@ -0,0 +1,17 @@ +package shell.DAO; + +import shell.model.User; + +import java.util.List; + + +public interface UserDao { + + User getById(Long id); + User getByLogin(String username); + List getAll(); + void save(User user); + void update(User user, Long id); + void delete(Long id); + +} diff --git a/src/main/java/shell/DAO/UserDaoImpl.java b/src/main/java/shell/DAO/UserDaoImpl.java new file mode 100644 index 0000000..99f7f00 --- /dev/null +++ b/src/main/java/shell/DAO/UserDaoImpl.java @@ -0,0 +1,76 @@ +package shell.DAO; + +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.Transaction; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import shell.model.User; +import shell.util.DBHelper; + +import javax.jws.soap.SOAPBinding; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.util.List; + +@Component +public class UserDaoImpl implements UserDao { + +// private SessionFactory sessionFactory; +// +// public UserDaoImpl() { +// sessionFactory = DBHelper.getSessionFactory(); +// } + + @Autowired + @PersistenceContext + private EntityManager entityManager; + + @Override + public User getById(Long id) { + return entityManager.find(User.class, id); + } + + @Override + public User getByLogin(String login) { + Query query = (Query) entityManager.createQuery("select e from User e where e.login = :log"); + query.setParameter("log", login); + User user = (User) query.getSingleResult(); + return user; + } + + @Override + public List getAll() { + List users; + Query query = (Query) entityManager.createQuery("select e from User e"); + users = query.getResultList(); + return users; + } + + + @Override + @Transactional + public void save(User user) { + entityManager.persist(user); + } + + @Override + @Transactional + public void update(User newUser, Long id) { + User user = getById(id); + user.setLogin(newUser.getLogin()); + user.setName(newUser.getName()); + user.setPassword(newUser.getPassword()); + user.setRoles(newUser.getRoles()); + entityManager.merge(user); + } + + @Override + @Transactional + public void delete(Long id) { + User user = getById(id); + entityManager.remove(user); + } +} diff --git a/src/main/java/shell/config/JPAConfig.java b/src/main/java/shell/config/JPAConfig.java index 5821e49..7dce25e 100644 --- a/src/main/java/shell/config/JPAConfig.java +++ b/src/main/java/shell/config/JPAConfig.java @@ -18,7 +18,7 @@ @Configuration @ComponentScan(value = "shell") -@EnableJpaRepositories(basePackages = "shell.repositories") +@EnableJpaRepositories(basePackages = "shell") @EnableTransactionManagement public class JPAConfig { diff --git a/src/main/java/shell/controlers/UsersController.java b/src/main/java/shell/controlers/UsersController.java index 5827060..0fd3e6c 100644 --- a/src/main/java/shell/controlers/UsersController.java +++ b/src/main/java/shell/controlers/UsersController.java @@ -7,15 +7,19 @@ import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import shell.model.Role; import shell.model.User; -import shell.repositories.UserRepository; + import shell.service.RoleService; +import shell.service.SignUpServiceImpl; import shell.service.UserService; -import shell.service.UserServiceImpl; + import javax.servlet.http.HttpServletRequest; +import java.util.HashSet; import java.util.List; +import java.util.Set; @Controller public class UsersController { @@ -31,7 +35,7 @@ public class UsersController { @Autowired private RoleService roleService; @Autowired - private UserRepository userRepository; + private SignUpServiceImpl service; public UsersController(UserService userService, RoleService roleService) { this.roleService = roleService; @@ -40,7 +44,7 @@ public UsersController(UserService userService, RoleService roleService) { @RequestMapping(path = "/admin", method = RequestMethod.GET) public ModelAndView getAllUsers() { - List users = userService.findAllUser(); + List users = userService.getAll(); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("mainPage"); modelAndView.addObject("usersFromServer", users); @@ -49,27 +53,26 @@ public ModelAndView getAllUsers() { @RequestMapping(value = "/admin/delete/{*}", method = RequestMethod.POST) public String deleteUser(@PathVariable("*") Long userId) { - userService.deleteById(userId); + userService.delete(userId); return "redirect:/admin"; } @RequestMapping(value = "/admin/edit/{*}", method = RequestMethod.GET) public ModelAndView editPage(@PathVariable("*") long id) { //@PathVariable указывает на то, что данный параметр (int id) получается из адресной строки - User user = userService.findOneById(id); + User user = userService.getById(id); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("editPage"); - user.setId(id); modelAndView.addObject("user", user); return modelAndView; } @RequestMapping(value = "/admin/edit", method = RequestMethod.POST) public ModelAndView editUser(@ModelAttribute("user") User user) { - User userFromDB = userService.findOneById(user.getId()); - userFromDB.setLogin(user.getLogin()); - userFromDB.setName(user.getName()); - userFromDB.setPassword(user.getPassword()); - userRepository.save(userFromDB); + Role role = roleService.getRoleById((long) 2); + Set setRoles = new HashSet<>(); + setRoles.add(role); + user.setRoles(setRoles); + userService.edit(user, user.getId()); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("redirect:/admin"); //означает, что после выполнения данного метода мы будем перенаправлены на адрес "/" return modelAndView; @@ -104,8 +107,11 @@ public String getLoginPage(Authentication authentication) { @RequestMapping(path = "/admin/save", method = RequestMethod.POST) public String saveUsers(User user) { - user.setRoles(roleService.getRoleByName("USER")); - userService.addUser(user); + Role role = roleService.getRoleById((long) 2); + Set setRoles = new HashSet<>(); + setRoles.add(role); + String roleStr = setRoles.toString(); + userService.save(user, roleStr); return "redirect:/admin"; } @@ -116,12 +122,7 @@ public String getSignUpPage() { @PostMapping("/signUp") public String signUp (User user, String role) { - if (role.equals("USER")) { - user.setRoles(roleService.getRoleByName(role)); - } else { - user.setRoles(roleService.getRoleByName("ADMIN")); - } - userRepository.save(user); + service.signUp(user, role); return "redirect:/login"; } diff --git a/src/main/java/shell/repositories/RoleRepository.java b/src/main/java/shell/repositories/RoleRepository.java deleted file mode 100644 index f29b123..0000000 --- a/src/main/java/shell/repositories/RoleRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package shell.repositories; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import shell.model.Role; - -import java.util.Set; - - -public interface RoleRepository extends JpaRepository { - - Set findByRole(String role); -} diff --git a/src/main/java/shell/repositories/UserRepository.java b/src/main/java/shell/repositories/UserRepository.java deleted file mode 100644 index 69ad8a5..0000000 --- a/src/main/java/shell/repositories/UserRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package shell.repositories; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.stereotype.Repository; -import shell.model.User; - -@Repository -public interface UserRepository extends JpaRepository { - - User findOneByLogin(String login); - - @Modifying - @Query("update User u set u.login = ?1, u.name = ?2, u.password = ?3 where u.id = ?3") - void edit(String login, String name, String password, Long userId); -} diff --git a/src/main/java/shell/service/RoleService.java b/src/main/java/shell/service/RoleService.java index e537866..24003c2 100644 --- a/src/main/java/shell/service/RoleService.java +++ b/src/main/java/shell/service/RoleService.java @@ -1,12 +1,25 @@ package shell.service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import shell.DAO.RoleDao; import shell.model.Role; -import java.util.Set; +@Component +public class RoleService { -public interface RoleService { + private RoleDao roleDAO; - Set getRole (); + @Autowired + public RoleService(RoleDao roleDAO) { + this.roleDAO = roleDAO; + } - Set getRoleByName (String nameRole); + public Role getRoleById(Long roleId) { + return roleDAO.getRoleById(roleId); + } + + public Role getRoleUser() { + return roleDAO.getRoleUser(); + } } diff --git a/src/main/java/shell/service/RoleServiceImpl.java b/src/main/java/shell/service/RoleServiceImpl.java deleted file mode 100644 index eebf058..0000000 --- a/src/main/java/shell/service/RoleServiceImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -package shell.service; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -//import shell.DAO.RoleDao; -import org.springframework.stereotype.Service; -import shell.model.Role; -import shell.repositories.RoleRepository; - -import java.util.HashSet; -import java.util.Set; - -@Service -public class RoleServiceImpl implements RoleService { - - @Autowired - RoleRepository roleRepository; - - public Set getRole () { - return new HashSet(roleRepository.findAll()); - } - - public Set getRoleByName(String nameRole) { - return roleRepository.findByRole(nameRole); - } - -// private RoleDao roleDAO; -// -// @Autowired -// public RoleServiceImpl(RoleDao roleDAO) { -// this.roleDAO = roleDAO; -// } -// -// public Role getRoleById(Long roleId) { -// return roleDAO.getRoleById(roleId); -// } -// -// public Role getRoleUser() { -// return roleDAO.getRoleUser(); -// } -} diff --git a/src/main/java/shell/service/SignUpService.java b/src/main/java/shell/service/SignUpService.java new file mode 100644 index 0000000..3ae87d4 --- /dev/null +++ b/src/main/java/shell/service/SignUpService.java @@ -0,0 +1,8 @@ +package shell.service; + + +import shell.model.User; + +public interface SignUpService { + void signUp(User user, String role); +} diff --git a/src/main/java/shell/service/SignUpServiceImpl.java b/src/main/java/shell/service/SignUpServiceImpl.java new file mode 100644 index 0000000..600fbdc --- /dev/null +++ b/src/main/java/shell/service/SignUpServiceImpl.java @@ -0,0 +1,23 @@ +package shell.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SignUpServiceImpl implements SignUpService { + + + private final UserService userService; + private final RoleService roleService; + + @Autowired + public SignUpServiceImpl (UserService userService, RoleService roleService){ + this.userService = userService; + this.roleService = roleService; + } + + @Override + public void signUp(shell.model.User user, String role) { + userService.save(user, role); + } +} diff --git a/src/main/java/shell/service/UserDetailsServiceImpl.java b/src/main/java/shell/service/UserDetailsServiceImpl.java index 5df7c61..bdf5762 100644 --- a/src/main/java/shell/service/UserDetailsServiceImpl.java +++ b/src/main/java/shell/service/UserDetailsServiceImpl.java @@ -5,31 +5,17 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; -import shell.model.User; -import shell.repositories.UserRepository; -import java.util.Optional; @Component public class UserDetailsServiceImpl implements UserDetailsService { @Autowired - private UserRepository repository; + private UserService userService; + @Override public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException { - Optional userCandidate = Optional.ofNullable(repository.findOneByLogin(login)); - if (userCandidate.isPresent()) { //существует ли? - return userCandidate.get(); //возвращает ЕСЛИ есть - } else throw new IllegalArgumentException("User not found"); + return userService.getByLogin(login); } - -// @Autowired -// private UserServiceImpl userService; -// -// -// @Override -// public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException { -// return userService.getByLogin(login); -// } } diff --git a/src/main/java/shell/service/UserService.java b/src/main/java/shell/service/UserService.java index ae66a37..515fbb6 100644 --- a/src/main/java/shell/service/UserService.java +++ b/src/main/java/shell/service/UserService.java @@ -1,22 +1,62 @@ package shell.service; - - -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import shell.DAO.*; +import shell.model.Role; import shell.model.User; +import java.util.HashSet; import java.util.List; +import java.util.Set; + +@Component +public class UserService { + +private UserDao userDAO; + +@Autowired +private RoleService roleService; + + @Autowired + public UserService( UserDao userDAO) { + this.userDAO = userDAO; + } + + public List getAll() { + return userDAO.getAll(); + } + + public User getById(Long id) { + return userDAO.getById(id); + } + + public void save(User user, String roleUser) { + Set role = new HashSet<>(); + if (roleUser.equals("ADMIN")) { + role.add(roleService.getRoleById(1L)); + user.setRoles(role); + userDAO.save(user); + } else { + role.add(roleService.getRoleById(2L)); + user.setRoles(role); + userDAO.save(user); + } + + } -public interface UserService { - void addUser(User user); + public User getByLogin(String login) { + return userDAO.getByLogin(login); + } - User findOneByLogin(String login); + public void delete(Long id) { + userDAO.delete(id); + } - User findOneById(Long id); + public void edit(User user, Long id) { + userDAO.update(user, id); + } - void deleteById(Long Id); - List findAllUser (); } diff --git a/src/main/java/shell/service/UserServiceImpl.java b/src/main/java/shell/service/UserServiceImpl.java deleted file mode 100644 index a79b465..0000000 --- a/src/main/java/shell/service/UserServiceImpl.java +++ /dev/null @@ -1,94 +0,0 @@ -package shell.service; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.stereotype.Component; -//import shell.DAO.*; -import org.springframework.stereotype.Service; -import shell.model.Role; -import shell.model.User; -import shell.repositories.UserRepository; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -@Service -public class UserServiceImpl implements UserService { - - - @Autowired - UserRepository userRepository; - - public void addUser(User user) { userRepository.save(user); } - - public User findOneByLogin(String login) { - return userRepository.findOneByLogin(login); - } - - public User findOneById(Long id) { - return userRepository.findOne(id); - } - - public void deleteById(Long Id) { - userRepository.delete(Id); - } - - public List findAllUser () { - return userRepository.findAll(); - } - -//private UserDao userDAO; -// -//@Autowired -//private RoleServiceImpl roleService; -// -// @Autowired -// public UserServiceImpl(UserDao userDAO) { -// this.userDAO = userDAO; -// } -// -// public List getAll() { -// return userDAO.getAll(); -// } -// -// public User get(Long id) { -// return userDAO.get(id); -// } -// -// public void save(User user, String roleUser) { -// Set role = new HashSet<>(); -// if (roleUser.equals("ADMIN")) { -// role.add(roleService.getRoleById(1L)); -// user.setRoles(role); -// userDAO.save(user); -// } else { -// role.add(roleService.getRoleById(2L)); -// user.setRoles(role); -// userDAO.save(user); -// } -// } -// -// public void saveAdmin(User user) { -// Set role = new HashSet<>(); -// role.add(roleService.getRoleById(2L)); -// user.setRoles(role); -// userDAO.save(user); -// } -// -// public User getByLogin(String userlogin) { -// User user = userDAO.getByLogin(userlogin); -// return user; -// } -// -// public void delete(Long id) { -// userDAO.delete(id); -// } -// -// public void edit(User user) { -// userDAO.update(user); -// } -// - -} diff --git a/src/main/java/shell/util/DBHelper.java b/src/main/java/shell/util/DBHelper.java new file mode 100644 index 0000000..83d5cad --- /dev/null +++ b/src/main/java/shell/util/DBHelper.java @@ -0,0 +1,39 @@ +package shell.util; + +import org.hibernate.SessionFactory; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.cfg.Configuration; +import org.hibernate.service.ServiceRegistry; +import org.springframework.stereotype.Component; +import shell.model.Role; +import shell.model.User; + +@Component +public final class DBHelper { + + private DBHelper() { + + } + + public static SessionFactory getSessionFactory() { + Configuration configuration = getConfiguration(); + StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(); + builder.applySettings(configuration.getProperties()); + ServiceRegistry serviceRegistry = builder.build(); + return configuration.buildSessionFactory(serviceRegistry); + } + + private static Configuration getConfiguration() { + Configuration configuration = new Configuration(); + configuration.addAnnotatedClass(User.class); + configuration.addAnnotatedClass(Role.class); + configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); + configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); + configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/user"); + configuration.setProperty("hibernate.connection.username", "root"); + configuration.setProperty("hibernate.connection.password", "root"); + configuration.setProperty("hibernate.show_sql", "true"); + configuration.setProperty("hibernate.hbm2ddl.auto", "update"); + return configuration; + } +}