package br.ufpr.c3sl.daoconcrete;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import br.ufpr.c3sl.dao.MistakeDAO;
import br.ufpr.c3sl.daoFactory.MysqlDAOFactory;
import br.ufpr.c3sl.exception.UserException;
import br.ufpr.c3sl.model.Mistake;
import br.ufpr.c3sl.model.MistakeInfo;
import br.ufpr.c3sl.model.User;
public class MysqlMistakeDAO implements MistakeDAO{
private static final String INSERT = "INSERT INTO mistakes " +
"(object, exercise, learningObject, description, answer, " +
"correctAnswer, title, user_id, created_at, cell) " +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
private static final String FIND_BY_USER = "SELECT * FROM mistakes " +
"WHERE user_id LIKE ? and learningObject LIKE ? ORDER BY created_at ASC";
/**
* insert
* @param mistake
* @return mistake The mistake inserted
*/
public Mistake insert(Mistake mistake) throws UserException {
Connection c = MysqlDAOFactory.createConnection();
PreparedStatement pstmt;
if (mistake.getCreatedAt() == null)
mistake.setCreatedAt(new Date().getTime());
try {
pstmt = c.prepareStatement(INSERT);
pstmt.setBytes(1, mistake.getObject());
pstmt.setString(2, mistake.getExercise());
pstmt.setString(3, mistake.getLearningObject());
pstmt.setString(4, mistake.getMistakeInfo().getDescription());
pstmt.setString(5,
mistake.getMistakeInfo().getAnswer().replaceAll("ℓ", "l"));
pstmt.setString(6,
mistake.getMistakeInfo().getCorrectAnswer().replaceAll("ℓ", "l"));
pstmt.setString(7, mistake.getMistakeInfo().getTitle());
pstmt.setLong(8, mistake.getUser().getId());
pstmt.setTimestamp(9, mistake.getCreatedAtTime());
pstmt.setString(10, mistake.getMistakeInfo().getCell());
System.out.println(pstmt);
pstmt.executeUpdate();
ResultSet rset = pstmt.getGeneratedKeys();
rset.next();
Long idGenerated = rset.getLong(1);
mistake.setId(idGenerated);
pstmt.close();
c.close();
return mistake;
} catch (SQLException e) {
e.printStackTrace();
throw new UserException(e.getMessage());
}
}
public List<Mistake> getAll(User user, String learningObject) {
ArrayList<Mistake> list = new ArrayList<Mistake>();
ResultSet rset;
Connection c = MysqlDAOFactory.createConnection();
PreparedStatement pstmt;
try {
pstmt = c.prepareStatement(FIND_BY_USER);
pstmt.setLong(1, user.getId());
pstmt.setString(2, learningObject);
rset = pstmt.executeQuery();
while (rset.next()){
Mistake m = createMistake(rset);
m.setUser(user);
list.add(m);
}
pstmt.close();
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
private Mistake createMistake(ResultSet rset) throws SQLException {
Mistake mistake = new Mistake();
mistake.setId(rset.getLong("id"));
mistake.setObject(rset.getBytes("object"));
mistake.setExercise(rset.getString("exercise"));
mistake.setLearningObject(rset.getString("learningObject"));
mistake.setCreatedAt(rset.getTimestamp("created_at").getTime());
MistakeInfo mistakeInfo = new MistakeInfo(rset.getString("title"),
rset.getString("answer").replaceAll("l","ℓ"),
rset.getString("correctAnswer").replaceAll( "l","ℓ"),
rset.getString("description"));
mistakeInfo.setCell(rset.getString("cell"));
mistake.setMistakeInfo(mistakeInfo);
return mistake;
}
@Override
public boolean delete(Mistake mistake) {
// TODO Auto-generated method stub
return false;
}
}