/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package fr.plil.sio.persistence.jdbc; import fr.plil.sio.persistence.api.Group; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import fr.plil.sio.persistence.api.User; @Repository public class UserRepositoryJdbc implements UserRepository{ private static final Logger logger = LoggerFactory.getLogger(GroupRepository.class); @Autowired private GroupRepository groupRepository; @Autowired private DataSource dataSource; @Override public User findByName(String name) { Statement stmt = null; ResultSet rs = null; try { stmt = dataSource.getConnection().createStatement(); rs = stmt.executeQuery("SELECT USER_ID, NAME_U, U.GROUP_ID, NAME_C FROM USER_T U JOIN GROUP_T G ON U.GROUP_ID=G.GROUP_ID WHERE NAME_U = \'" + name + "\'"); if (rs.next()) { logger.debug("found group " + name); User user = new User(); user.setId(rs.getLong("USER_ID")); user.setName(rs.getString("NAME_U")); //On ajoute le groupe, sauf si il est nul if(groupRepository.findByName(rs.getString("NAME_C"))!=null) user.setGroup(groupRepository.findByName(rs.getString("NAME_C"))); return user; } else { logger.debug("not found " + name); return null; } } catch (SQLException e) { throw new UnsupportedOperationException("sql exception", e); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } } catch (SQLException e) { throw new UnsupportedOperationException("sql exception during close", e); } } } @Override public void save(User user, Group group) { Statement stmt = null; ResultSet rs = null; try { stmt = dataSource.getConnection().createStatement(); int groupid=0; if(group!=null){ groupid = Math.toIntExact(group.getId()); } stmt.executeUpdate("INSERT INTO USER_T (NAME_U, GROUP_ID) VALUES (\'" + user.getName() + "\', " + groupid + ")", Statement.RETURN_GENERATED_KEYS); rs = stmt.getGeneratedKeys(); if (rs.next()) { user.setId(rs.getLong(1)); } else { throw new UnsupportedOperationException("default in key access"); } } catch (SQLException e) { throw new UnsupportedOperationException("sql exception", e); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } } catch (SQLException e) { throw new UnsupportedOperationException("sql exception during close", e); } } } @Override public void delete(Long id) { Statement stmt = null; ResultSet rs = null; if(id==null){ throw new IllegalArgumentException(); } try { stmt = dataSource.getConnection().createStatement(); stmt.execute("DELETE FROM USER_T WHERE USER_ID = " + id); } catch (SQLException e) { throw new UnsupportedOperationException("sql exception", e); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } } catch (SQLException e) { throw new UnsupportedOperationException("sql exception during close", e); } } } @Override public boolean isUserHasRight(Long group, Long right){ Statement stmt = null; ResultSet rs = null; try { stmt = dataSource.getConnection().createStatement(); rs = stmt.executeQuery("SELECT * FROM LINK_T WHERE RIGHT_ID = " + right + " AND GROUP_ID = " + group ); if (rs.next()) { return true; } else { // rs = stmt.executeQuery("SELECT * FROM LINK_T LI JOIN RIGHT_T RI ON RI.RIGHT_ID = LI.RIGHT_ID WHERE RI.PARENT_ID = " + right); // if(rs.next()){ // return true; // } return false; } } catch (SQLException e) { throw new UnsupportedOperationException("sql exception", e); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } } catch (SQLException e) { throw new UnsupportedOperationException("sql exception during close", e); } } } }