package it.unisa.sesa.repominer.db;
import it.unisa.sesa.repominer.db.entities.Change;
import it.unisa.sesa.repominer.db.entities.Project;
import java.sql.Connection;
import java.util.Date;
import java.util.List;
import net.sf.jeasyorm.EntityManager;
public class ChangeDAO {
/**
* This method returns all commits occurred in project passed as parameter
*
* @param pProject
* @return A list of Change objects
*/
public List<Change> getChangesOfProject(Project pProject) {
Connection connection = ConnectionPool.getInstance().getConnection();
EntityManager em = EntityManager.getInstance(connection);
List<Change> changes = em.find(Change.class,
"where project=? order by commit_date ASC", pProject.getId());
ConnectionPool.getInstance().releaseConnection(connection);
return changes;
}
/**
* This method return a single commit picked by id
*
* @param pId
* @return A Change object
*/
public Change getChangeById(Integer pId) {
Connection connection = ConnectionPool.getInstance().getConnection();
EntityManager em = EntityManager.getInstance(connection);
Change change = em.load(Change.class, pId);
ConnectionPool.getInstance().releaseConnection(connection);
return change;
}
/**
* This method return all commit occurred between two given dates in project
* passed as parameter
*
* @param pProject
* @param pDate1
* @param pDate2
* @return A list of Change objects
*/
public List<Change> getChangesByDateInterval(Project pProject, Date pDate1,
Date pDate2) {
Connection connection = ConnectionPool.getInstance().getConnection();
EntityManager em = EntityManager.getInstance(connection);
List<Change> changes = em.find(Change.class,
"where project=? and commit_date between ? and ?",
pProject.getId(), pDate1, pDate2);
ConnectionPool.getInstance().releaseConnection(connection);
return changes;
}
/**
* This method return the date of first change occurred in project passed as
* parameter
*
* @param pProject
* @return A Date (first in project); return current date if query get a
* null Change
*/
public Date getProjectStartDate(Project pProject) {
Connection connection = ConnectionPool.getInstance().getConnection();
EntityManager em = EntityManager.getInstance(connection);
Change change = em.findUnique(Change.class,
"where project=? order by commit_date ASC limit 1",
pProject.getId());
ConnectionPool.getInstance().releaseConnection(connection);
if (change == null) {
return new Date();
}
return change.getCommitDate();
}
/**
* This method return the date of last change occurred in project passed as
* parameter
*
* @param pProject
* @return A Date (last in project); return current date if query get a null
* change
*/
public Date getProjectEndDate(Project pProject) {
Connection connection = ConnectionPool.getInstance().getConnection();
EntityManager em = EntityManager.getInstance(connection);
Change change = em.findUnique(Change.class,
"where project=? order by commit_date DESC limit 1",
pProject.getId());
ConnectionPool.getInstance().releaseConnection(connection);
if (change == null) {
return new Date();
}
return change.getCommitDate();
}
}