/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package model.database;
import tools.Helper;
import model.object.NemoUser;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Set;
import java.util.logging.Level;
import model.object.NemoUserType;
import resource.log.ProjectLogger;
/**
*
* @author Yoldark34 <yoldark@gmail.com>
*/
public class NemoUserMapper extends AbstractMapper {
public ArrayList<NemoUser> getAllNemoUsers() throws SQLException, ClassNotFoundException {
DbConnection adapter = DbConnection.getDbConnection();
adapter.executeSelectQuery("Select * from " + DataBaseElements.NEMOUSER);
return (ArrayList<NemoUser>) adapter.getModelsFromRequest(this);
}
/**
* Insert nemoUser if id == -1 or update nemoUser instead
*
* @param nemoUser
* @return int number of rows
*/
public int save(NemoUser nemoUser) {
int nbRows = 0;
int idResult = -1;
String query;
if (nemoUser.getId() != -1) {
query = "UPDATE `" + DataBaseElements.NEMOUSER + "` SET ";
//query += "`"+DataBaseElements.NEMOUSER_ID+"` = '"+nemoUser.getId()+"',";Can't be updated because used in where
query += "`" + DataBaseElements.NEMOUSER_LASTNAME + "` = '" + nemoUser.getLastName() + "',";
query += "`" + DataBaseElements.NEMOUSER_FIRSTNAME + "` = '" + nemoUser.getFirstName() + "',";
query += "`" + DataBaseElements.NEMOUSER_EMAIL + "` = '" + nemoUser.getEmail() + "',";
query += "`" + DataBaseElements.NEMOUSER_CRYPTEDPASSWORD + "` = '" + nemoUser.getCryptedPassword() + "',";
if (nemoUser.getBirthDate() == null) {
query += "`" + DataBaseElements.BIKEUSAGE_STARTDATE + "` = " + nemoUser.getBirthDate() + ",";
} else {
query += "`" + DataBaseElements.BIKEUSAGE_STARTDATE + "` = '" + nemoUser.getBirthDate() + "',";
}
if (nemoUser.getCreateDate() == null) {
query += "`" + DataBaseElements.BIKEUSAGE_ENDDATE + "` = " + nemoUser.getCreateDate() + " ";
} else {
query += "`" + DataBaseElements.BIKEUSAGE_ENDDATE + "` = '" + nemoUser.getCreateDate() + "' ";
}
query += "WHERE `" + DataBaseElements.NEMOUSER_ID + "` = '" + nemoUser.getId() + "';";
try {
DbConnection adapter = DbConnection.getDbConnection();
nbRows = adapter.executeUpdateQuery(query);
} catch (Exception e) {
}
return nbRows;
} else {
query = "INSERT INTO " + DataBaseElements.NEMOUSER + " (";
//query += "`" + DataBaseElements.NEMOUSER_ID + "`,";
query += "`" + DataBaseElements.NEMOUSER_LASTNAME + "`,";
query += "`" + DataBaseElements.NEMOUSER_FIRSTNAME + "`,";
query += "`" + DataBaseElements.NEMOUSER_EMAIL + "`,";
query += "`" + DataBaseElements.NEMOUSER_CRYPTEDPASSWORD + "`,";
query += "`" + DataBaseElements.NEMOUSER_BIRTHDATE + "`,";
query += "`" + DataBaseElements.NEMOUSER_CREATEDATE + "` ";
query += ") VALUES (";
//query += "'" + nemoUser.getId() + "',";
query += "'" + nemoUser.getLastName() + "',";
query += "'" + nemoUser.getFirstName() + "',";
query += "'" + nemoUser.getEmail() + "',";
query += "'" + nemoUser.getCryptedPassword() + "',";
if (nemoUser.getBirthDate() == null) {
query += nemoUser.getBirthDate() + ",";
} else {
query += "'" + nemoUser.getBirthDate() + "',";
}
if (nemoUser.getCreateDate() == null) {
query += nemoUser.getCreateDate() + " ";
} else {
query += "'" + nemoUser.getCreateDate() + "' ";
}
query += ")";
try {
DbConnection adapter = DbConnection.getDbConnection();
idResult = adapter.executeInsertQuery(query);
} catch (Exception e) {
}
return idResult;
}
}
/**
* get NemoUsers from bikes to check if all bikes returned is from the same
* NemoUser
*
* @param bikeSerialNumbers
* @return ArrayList<NemoUser>
*/
public ArrayList<NemoUser> getNemoUsersFromBikes(Set<Integer> bikeSerialNumbers) {
String query;
ArrayList<NemoUser> results = null;
query = "SELECT ";
query += DataBaseElements.NemoUserColSet.DISTINCTID;
query += " FROM ";
query += DataBaseElements.BIKEUSAGETYPE + " " + DataBaseElements.ALIAS_BIKEUSAGETYPE + ", ";
query += DataBaseElements.BIKEUSAGE + " " + DataBaseElements.ALIAS_BIKEUSAGE + ", ";
query += DataBaseElements.NEMOUSER + " " + DataBaseElements.ALIAS_NEMOUSER + " ";
query += " WHERE ";
query += DataBaseElements.ALIAS_BIKEUSAGETYPE + "." + DataBaseElements.BIKEUSAGETYPE_ID + " = " + DataBaseElements.ALIAS_BIKEUSAGE + "." + DataBaseElements.BIKEUSAGE_IDBIKEUSAGETYPE;
query += " AND ";
query += DataBaseElements.ALIAS_NEMOUSER + "." + DataBaseElements.NEMOUSER_ID + " = " + DataBaseElements.ALIAS_BIKEUSAGE + "." + DataBaseElements.BIKEUSAGE_IDNEMOUSER;
query += " AND ";
query += DataBaseElements.ALIAS_BIKEUSAGE + "." + DataBaseElements.BIKEUSAGE_IDBIKE;
query += " IN ";
query += " ( ";
int size = bikeSerialNumbers.size() - 1;
for (Integer idBike : bikeSerialNumbers) {
query += "'" + idBike + "'";
if (size != 0) {
query += ", ";
}
size--;
}
query += " ) ";
query += " AND ";
query += DataBaseElements.ALIAS_BIKEUSAGETYPE + "." + DataBaseElements.BIKEUSAGETYPE_NAME + " = '" + DataBaseElements.BikeUsageType.RENTING + "'";
query += " AND ";
query += DataBaseElements.ALIAS_BIKEUSAGE + "." + DataBaseElements.BIKEUSAGE_ENDDATE + " is NULL";
try {
DbConnection adapter = DbConnection.getDbConnection();
adapter.executeSelectQuery(query);
results = (ArrayList<NemoUser>) adapter.getModelsFromRequest(this);
} catch (SQLException | ClassNotFoundException ex) {
ProjectLogger.log(this, Level.SEVERE, "Erreur d'exécution de la requête de la fonction bookFirstAvailableBikeForTerminal", ex);
}
return results;
}
/**
* get the last user id from the database
*
* @return int
*/
public int getLastUser() {
String query;
NemoUser result = new NemoUser();
query = "SELECT ";
query += " MAX( ";
query += DataBaseElements.ALIAS_NEMOUSER + "." + DataBaseElements.NEMOUSER_ID;
query += " ) as " + DataBaseElements.NEMOUSER_ID;
query += " FROM ";
query += DataBaseElements.NEMOUSER + " " + DataBaseElements.ALIAS_NEMOUSER;
try {
DbConnection adapter = DbConnection.getDbConnection();
adapter.executeSelectQuery(query);
result = (NemoUser) adapter.getModelFromRequest(this);
} catch (SQLException | ClassNotFoundException ex) {
ProjectLogger.log(this, Level.SEVERE, "Erreur d'exécution de la requête de la fonction getAvailableBikesForThisTerminal", ex);
}
return result.getId();
}
/**
* create an anonymous user for the rent process
*
* @return id of nemo user created
*/
public int createAnonymousUser() {
java.sql.Timestamp sqlToday = Helper.getSqlDateNow();
NemoUser user = new NemoUser(-1, "Anonymous", "Anonymous", "Anonymous@Anonymous.fr", "Anonymous", sqlToday, sqlToday);
this.save(user);
user.setId(this.getLastUser());
NemoUserTypeMapper nutm = new NemoUserTypeMapper();
UserTypeMapper utm = new UserTypeMapper();
NemoUserType nut = new NemoUserType();
nut.setIdUser(user.getId());
nut.setIdUserType(utm.getIdUserType(DataBaseElements.UserType.ANONYMOUS));
nutm.save(nut, false, false);
return user.getId();
}
@Override
public Object populateModel(ResultSet row) throws SQLException {
NemoUser obj = new NemoUser();
if (this.hasColumn(DataBaseElements.NEMOUSER_ID, row)) {
obj.setId(row.getInt(DataBaseElements.NEMOUSER_ID));
}
if (this.hasColumn(DataBaseElements.NEMOUSER_LASTNAME, row)) {
obj.setLastName(row.getString(DataBaseElements.NEMOUSER_LASTNAME));
}
if (this.hasColumn(DataBaseElements.NEMOUSER_FIRSTNAME, row)) {
obj.setFirstName(row.getString(DataBaseElements.NEMOUSER_FIRSTNAME));
}
if (this.hasColumn(DataBaseElements.NEMOUSER_EMAIL, row)) {
obj.setEmail(row.getString(DataBaseElements.NEMOUSER_EMAIL));
}
if (this.hasColumn(DataBaseElements.NEMOUSER_CRYPTEDPASSWORD, row)) {
obj.setCryptedPassword(row.getString(DataBaseElements.NEMOUSER_CRYPTEDPASSWORD));
}
if (this.hasColumn(DataBaseElements.NEMOUSER_BIRTHDATE, row)) {
obj.setBirthDate(row.getTimestamp(DataBaseElements.NEMOUSER_BIRTHDATE));
}
if (this.hasColumn(DataBaseElements.NEMOUSER_CREATEDATE, row)) {
obj.setCreateDate(row.getTimestamp(DataBaseElements.NEMOUSER_CREATEDATE));
}
return obj;
}
@Override
Object getEmptyModel() {
return new NemoUser();
}
}