GroupRepositoryJdbc.java 4.99 KB
package fr.plil.sio.persistence.jdbc;

import fr.plil.sio.persistence.api.Group;
import fr.plil.sio.persistence.api.Right;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

@Repository
public class GroupRepositoryJdbc implements GroupRepository {

    private static final Logger logger = LoggerFactory.getLogger(GroupRepository.class);

    @Autowired
    private DataSource dataSource;

    @Override
    public Group findByName(String name) {
        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = dataSource.getConnection().createStatement();
            rs = stmt.executeQuery("SELECT * FROM GROUP_T WHERE NAME_C = \'" + name + "\'");
            if (rs.next()) {
                logger.debug("found group " + name);
                Group group = new Group();
                group.setId(rs.getLong("GROUP_ID"));
                group.setName(rs.getString("NAME_C"));
                return group;
            } 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(Group group) {
        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = dataSource.getConnection().createStatement();
            stmt.executeUpdate("INSERT INTO GROUP_T (NAME_C) VALUES (\'" + group.getName() + "\')",
                    Statement.RETURN_GENERATED_KEYS);
            rs = stmt.getGeneratedKeys();
            if (rs.next()) {                
                group.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;
        try {
            stmt = dataSource.getConnection().createStatement();
            stmt.executeUpdate("DELETE FROM GROUP_T WHERE GROUP_ID="+id,
                    Statement.RETURN_GENERATED_KEYS);
            rs = stmt.getGeneratedKeys();
       
        } 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 addRight(String groupName, Right right){
        Statement stmt = null;
        ResultSet rs = null;
        try{
            stmt = dataSource.getConnection().createStatement();
            if(this.findByName(groupName) != null && right.getId() != null)
                stmt.executeUpdate("INSERT INTO GROUP_RIGHTS VALUES("+this.findByName(groupName).getId()+","+right.getId()+")",
                        Statement.RETURN_GENERATED_KEYS);
            rs = stmt.getGeneratedKeys();
            if(rs.next()){
                List<Right> rights = this.findByName(groupName).getRights();
                rights.add(right);
                this.findByName(groupName).setRights(rights);
                return true;                
            }else{
                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);
            }
        }
    }
    
    public boolean removeRight(String groupName, Right right){
        
        return false;
    }
}