package carpool.carpoolDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import carpool.common.DateUtility;
import carpool.common.DebugLog;
import carpool.configurations.EnumConfig;
import carpool.exception.identityVerification.identityVerificationNotFound;
import carpool.model.identityVerification.PassengerVerification;
public class CarpoolDaoPassenger {
public static ArrayList<PassengerVerification> getPassengerVerificationsByUserId(int userId){
ArrayList<PassengerVerification> plist = new ArrayList<PassengerVerification>();
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
String query = "SELECT * FROM carpoolDAOPassenger where user_Id = ?";
try{
conn = CarpoolDaoBasic.getSQLConnection();
stmt = conn.prepareStatement(query);
stmt.setInt(1, userId);
rs = stmt.executeQuery();
while(rs.next()){
plist.add(createPassengerVerificationByResultSet(rs));
}
}catch(SQLException e){
e.printStackTrace();
DebugLog.d(e);
} finally {
CarpoolDaoBasic.closeResources(conn, stmt, rs,true);
}
return plist;
}
public static PassengerVerification addPassengerToDatabases(PassengerVerification passenger){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
String query = "INSERT INTO carpoolDAOPassenger(user_Id,realName,licenseNum,licenseType,submissionDate," +
"expireDate,v_state,reviewer_Id,recommender_Id,frontImgLink,backImgLink,originType,verificationType)"+"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);";
try{
conn = CarpoolDaoBasic.getSQLConnection();
stmt = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
stmt.setInt(1, passenger.getUserId());
stmt.setString(2, passenger.getRealName());
stmt.setString(3, passenger.getLicenseNumber());
stmt.setInt(4, passenger.getLicenseType().code);
stmt.setString(5, DateUtility.toSQLDateTime(passenger.getSubmissionDate()));
stmt.setString(6, DateUtility.toSQLDateTime(passenger.getExpireDate()));
stmt.setInt(7, passenger.getState().code);
stmt.setInt(8, passenger.getReviewerId());
stmt.setInt(9, passenger.getRecommenderId());
stmt.setString(10, passenger.getFrontImgLink());
stmt.setString(11, passenger.getBackImgLink());
stmt.setInt(12, passenger.getOrigin().code);
stmt.setInt(13, passenger.getType().code);
stmt.executeUpdate();
rs = stmt.getGeneratedKeys();
rs.next();
passenger.setVerificationId(rs.getInt(1));
} catch(SQLException e){
DebugLog.d(e);
} finally {
CarpoolDaoBasic.closeResources(conn, stmt, rs,true);
}
return passenger;
}
public static void updatePassengerVerificationInDatabases(PassengerVerification passenger) throws identityVerificationNotFound{
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
String query = "UPDATE carpoolDAOPassenger SET user_Id=?,realName=?,licenseNum=?,licenseType=?,submissionDate=?," +
"expireDate=?,v_state=?,reviewer_Id=?,recommender_Id=?,frontImgLink=?,backImgLink=?,originType=?,verificationType=?"+
" where v_Id = ?";
try{
conn = CarpoolDaoBasic.getSQLConnection();
stmt = conn.prepareStatement(query);
stmt.setInt(1, passenger.getUserId());
stmt.setString(2, passenger.getRealName());
stmt.setString(3, passenger.getLicenseNumber());
stmt.setInt(4, passenger.getLicenseType().code);
stmt.setString(5, DateUtility.toSQLDateTime(passenger.getSubmissionDate()));
stmt.setString(6, DateUtility.toSQLDateTime(passenger.getExpireDate()));
stmt.setInt(7, passenger.getState().code);
stmt.setInt(8, passenger.getReviewerId());
stmt.setInt(9, passenger.getRecommenderId());
stmt.setString(10, passenger.getFrontImgLink());
stmt.setString(11, passenger.getBackImgLink());
stmt.setInt(12, passenger.getOrigin().code);
stmt.setInt(13, passenger.getType().code);
stmt.setInt(14, passenger.getVerificationId());
int recordsAffected = stmt.executeUpdate();
if(recordsAffected==0){
throw new identityVerificationNotFound();
}
}
catch(SQLException e){
DebugLog.d(e);
} finally {
CarpoolDaoBasic.closeResources(conn, stmt, rs,true);
}
}
public static void deletePassengerVerificationInDatabase(long v_id){
String query = "DELETE from carpoolDAOPassenger where v_Id = ?";
PreparedStatement stmt = null;
Connection conn = null;
try{
conn = CarpoolDaoBasic.getSQLConnection();
stmt = conn.prepareStatement(query);
stmt.setLong(1, v_id);
stmt.executeUpdate();
}catch (SQLException e) {
DebugLog.d(e);
}finally {
CarpoolDaoBasic.closeResources(conn, stmt, null,true);
}
}
public static ArrayList<PassengerVerification> getAllPassengerVerifications(){
String query = "SELECT * FROM carpoolDAOPassenger;";
ArrayList<PassengerVerification> plist = new ArrayList<PassengerVerification>();
PreparedStatement stmt = null;
Connection conn = null;
ResultSet rs = null;
try{
conn = CarpoolDaoBasic.getSQLConnection();
stmt = conn.prepareStatement(query);
rs = stmt.executeQuery();
while(rs.next()){
plist.add(createPassengerVerificationByResultSet(rs));
}
}catch(SQLException e){
e.printStackTrace();
DebugLog.d(e);
} finally {
CarpoolDaoBasic.closeResources(conn, stmt, rs,true);
}
return plist;
}
public static PassengerVerification getPassengerVerificationById(long l,Connection...connections) throws identityVerificationNotFound{
String query = "SELECT * FROM carpoolDAOPassenger where v_Id=?";
PassengerVerification passenger = null;
PreparedStatement stmt = null;
Connection conn = null;
ResultSet rs = null;
try{
conn = CarpoolDaoBasic.getConnection(connections);
stmt = conn.prepareStatement(query);
stmt.setLong(1, l);
rs = stmt.executeQuery();
if(rs.next()){
passenger = createPassengerVerificationByResultSet(rs);
}else{
throw new identityVerificationNotFound();
}
}catch(SQLException e){
e.printStackTrace();
DebugLog.d(e);
}finally {
CarpoolDaoBasic.closeResources(conn, stmt, rs,CarpoolDaoBasic.shouldConnectionClose(connections));
}
return passenger;
}
private static PassengerVerification createPassengerVerificationByResultSet(ResultSet rs) throws SQLException {
return new PassengerVerification(EnumConfig.VerificationType.fromInt(rs.getInt("verificationType")),rs.getInt("v_Id"),rs.getInt("user_Id"),
rs.getString("realName"),rs.getString("licenseNum"),EnumConfig.LicenseType.fromInt(rs.getInt("licenseType")),
DateUtility.DateToCalendar(rs.getTimestamp("submissionDate")),DateUtility.DateToCalendar(rs.getTimestamp("expireDate")),
EnumConfig.VerificationState.fromInt(rs.getInt("v_state")),DateUtility.DateToCalendar(rs.getTimestamp("reviewDate")),
rs.getInt("reviewer_Id"),rs.getInt("recommender_Id"),rs.getString("frontImgLink"),rs.getString("backImgLink"),EnumConfig.PassengerVerificationOrigin.frontInt(rs.getInt("originType")));
}
}