/**
* Este arquivo é parte do Biblivre3.
*
* Biblivre3 é um software livre; você pode redistribuí-lo e/ou
* modificá-lo dentro dos termos da Licença Pública Geral GNU como
* publicada pela Fundação do Software Livre (FSF); na versão 3 da
* Licença, ou (caso queira) qualquer versão posterior.
*
* Este programa é distribuído na esperança de que possa ser útil,
* mas SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de
* MERCANTIBILIDADE OU ADEQUAÇÃO PARA UM FIM PARTICULAR. Veja a
* Licença Pública Geral GNU para maiores detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU junto
* com este programa, Se não, veja em <http://www.gnu.org/licenses/>.
*
* @author Alberto Wagner <alberto@biblivre.org.br>
* @author Danniel Willian <danniel@biblivre.org.br>
*
*/
package biblivre3.circulation.access;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import mercury.DAO;
import mercury.DAOException;
import mercury.ExceptionUser;
public class AccessDAO extends DAO {
public boolean insert(AccessDTO dto) {
Connection con = null;
try {
con = getDataSource().getConnection();
final String sql =
" INSERT INTO access_control " +
" (serial_card, serial_reader, entrance_datetime) " +
" VALUES (?, ?, ?);";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, dto.getSerialCard());
pst.setInt(2, dto.getSerialReader());
pst.setTimestamp(3, new java.sql.Timestamp(dto.getEntranceDatetime().getTime()));
return pst.executeUpdate() > 0;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new DAOException(e.getMessage());
} finally {
closeConnection(con);
}
}
public boolean update(AccessDTO dto) {
Connection con = null;
try {
con = getDataSource().getConnection();
final String sql =
" UPDATE access_control " +
" SET departure_datetime = ? " +
" WHERE serial = ?;";
PreparedStatement pst = con.prepareStatement(sql);
pst.setTimestamp(1, new java.sql.Timestamp(dto.getDepartureDatetime().getTime()));
pst.setInt(2, dto.getSerial());
return pst.executeUpdate() > 0;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new DAOException(e.getMessage());
} finally {
closeConnection(con);
}
}
public ArrayList<AccessDTO> list(int offset, int limit) {
ArrayList<AccessDTO> requestList = new ArrayList<AccessDTO>();
Connection con = null;
try {
con = getDataSource().getConnection();
final String sql =
" SELECT * FROM access_control " +
" ORDER BY serial ASC offset ? limit ? ";
final PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, offset);
pst.setInt(2, limit);
final ResultSet rs = pst.executeQuery();
if (rs == null) {
return requestList;
}
while (rs.next()) {
AccessDTO dto = this.populateDto(rs);
requestList.add(dto);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new DAOException(e.getMessage());
} finally {
closeConnection(con);
}
return requestList;
}
public AccessDTO getByCardId(Integer cardId) {
Connection con = null;
try {
con = getDataSource().getConnection();
final String sql =
" SELECT * FROM access_control " +
" WHERE serial_card = ? and " +
" departure_datetime is null;";
final PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, cardId);
final ResultSet rs = pst.executeQuery();
if (rs == null) {
return null;
}
while (rs.next()) {
return this.populateDto(rs);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new DAOException(e.getMessage());
} finally {
closeConnection(con);
}
return null;
}
public AccessDTO getByUserId(Integer userId) {
Connection con = null;
try {
con = getDataSource().getConnection();
final String sql =
" SELECT * FROM access_control " +
" WHERE serial_reader = ? and " +
" departure_datetime is null;";
final PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, userId);
final ResultSet rs = pst.executeQuery();
if (rs == null) {
return null;
}
while (rs.next()) {
return this.populateDto(rs);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new DAOException(e.getMessage());
} finally {
closeConnection(con);
}
return null;
}
private final AccessDTO populateDto(ResultSet rs) throws Exception {
final AccessDTO dto = new AccessDTO();
dto.setSerial(rs.getInt("serial"));
dto.setSerialCard(rs.getInt("serial_card"));
dto.setSerialStation(rs.getInt("serial_station"));
dto.setSerialReader(rs.getInt("serial_reader"));
dto.setEntranceDatetime(rs.getTimestamp("entrance_datetime"));
dto.setDepartureDatetime(rs.getTimestamp("departure_datetime"));
return dto;
}
public int getTotalNroRecords() {
Connection con = null;
try {
con = getDataSource().getConnection();
final Statement st = con.createStatement();
final String query = "SELECT count(*) FROM access_control;";
final ResultSet rs = st.executeQuery(query);
if (rs.next()) {
return rs.getInt(1);
}
return 0;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new ExceptionUser("ACCESS_DAO_EXCEPTION");
} finally {
closeConnection(con);
}
}
}