UserRepositoryJdbc.java 5.4 KB
/*
 * 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);

            }
        }
    }
}