/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package model.database;
import model.object.Storage;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import resource.log.ProjectLogger;
/**
*
* @author Yoldark34 <yoldark@gmail.com>
*/
public class StorageMapper extends AbstractMapper {
/**
* get all storages from the database
*
* @return ArrayList<Storage>
* @throws SQLException
* @throws ClassNotFoundException
*/
public ArrayList<Storage> getAllStorages() throws SQLException, ClassNotFoundException {
DbConnection adapter = DbConnection.getDbConnection();
adapter.executeSelectQuery("Select * from " + DataBaseElements.STORAGE);
return (ArrayList<Storage>) adapter.getModelsFromRequest(this);
}
/**
* Insert storage if id == -1 or update storage instead
*
* @param storage
* @return int number of rows
*/
public int save(Storage storage) {
int nbRows = 0;
int idResult = -1;
String query;
int available = 0;
if (storage.isAvailable()) {
available = 1;
}
if (storage.getId() != -1) {
query = "UPDATE `" + DataBaseElements.STORAGE + "` SET ";
//query += "`" + DataBaseElements.STORAGE_ID +"` = '"+storage.getId() + "',";Can't be updated because used in where
query += "`" + DataBaseElements.STORAGE_IDSTOCK + "` = '" + storage.getIdStock() + "',";
query += "`" + DataBaseElements.STORAGE_IDSTORAGETYPE + "` = '" + storage.getIdStorageType() + "',";
query += "`" + DataBaseElements.STORAGE_AVAILABLE + "` = '" + available + "' ";
query += "WHERE `" + DataBaseElements.STORAGE_ID + "` = '" + storage.getId() + "';";
try {
DbConnection adapter = DbConnection.getDbConnection();
nbRows = adapter.executeUpdateQuery(query);
} catch (Exception e) {
}
return nbRows;
} else {
query = "INSERT INTO " + DataBaseElements.STORAGE + " (";
//query += "`" + DataBaseElements.STORAGE_ID + "`,";
query += "`" + DataBaseElements.STORAGE_IDSTOCK + "`,";
query += "`" + DataBaseElements.STORAGE_IDSTORAGETYPE + "`,";
query += "`" + DataBaseElements.STORAGE_AVAILABLE + "` ";
query += ") VALUES (";
//query += "'" + storage.getId() + "',";
query += "'" + storage.getIdStock() + "',";
query += "'" + storage.getIdStorageType() + "',";
query += "'" + available + "' ";
query += ")";
try {
DbConnection adapter = DbConnection.getDbConnection();
idResult = adapter.executeInsertQuery(query);
} catch (Exception e) {
}
return idResult;
}
}
/**
* get all available storages for a terminal
*
* @param terminalId
* @return int
*/
public int getAvailableStoragesForTerminal(int terminalId) {
String query;
Storage result = new Storage();
query = "SELECT ";
query += "count( * ) AS 'numberOfStorages'";
query += " FROM ";
query += DataBaseElements.TERMINAL + " " + DataBaseElements.ALIAS_TERMINAL + ", ";
query += DataBaseElements.STORAGE + " " + DataBaseElements.ALIAS_STORAGE;
query += " WHERE ";
query += DataBaseElements.ALIAS_STORAGE + "." + DataBaseElements.STORAGE_IDSTOCK + " = " + DataBaseElements.ALIAS_TERMINAL + "." + DataBaseElements.TERMINAL_IDSTOCK;
query += " AND ";
query += DataBaseElements.ALIAS_TERMINAL + "." + DataBaseElements.TERMINAL_ID + " = " + terminalId;
query += " AND ";
query += DataBaseElements.ALIAS_STORAGE + "." + DataBaseElements.STORAGE_AVAILABLE + " = " + 1;
try {
DbConnection adapter = DbConnection.getDbConnection();
adapter.executeSelectQuery(query);
result = (Storage) 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.getNumberOfStorages();
}
/**
* get first available storage for a terminal (for the return process)
*
* @param terminalId
* @return int
*/
public int getFirstAvailableStorageForTerminal(int terminalId) {
String query;
Storage result = (Storage) this.getEmptyModel();
query = "SELECT ";
query += " MIN( ";
query += DataBaseElements.StorageColSet.MIN;
query += " ) as ";
query += DataBaseElements.STORAGE_ID;
query += " FROM ";
query += DataBaseElements.TERMINAL + " " + DataBaseElements.ALIAS_TERMINAL + ", ";
query += DataBaseElements.STORAGE + " " + DataBaseElements.ALIAS_STORAGE;
query += " WHERE ";
query += DataBaseElements.ALIAS_STORAGE + "." + DataBaseElements.STORAGE_IDSTOCK + " = " + DataBaseElements.ALIAS_TERMINAL + "." + DataBaseElements.TERMINAL_IDSTOCK;
query += " AND ";
query += DataBaseElements.ALIAS_TERMINAL + "." + DataBaseElements.TERMINAL_ID + " = " + terminalId;
query += " AND ";
query += DataBaseElements.ALIAS_STORAGE + "." + DataBaseElements.STORAGE_AVAILABLE + " = " + 1;
try {
DbConnection adapter = DbConnection.getDbConnection();
adapter.executeSelectQuery(query);
result = (Storage) 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();
}
/**
* set the storage not available
*
* @param idStorage
* @return boolean
*/
public boolean setStorageUsed(int idStorage) {
String query;
int nbRows;
query = "UPDATE `" + DataBaseElements.STORAGE + "` SET ";
query += "`" + DataBaseElements.STORAGE_AVAILABLE + "` = '" + 0 + "' ";
query += "WHERE `" + DataBaseElements.STORAGE_ID + "` = '" + idStorage + "';";
try {
DbConnection adapter = DbConnection.getDbConnection();
nbRows = adapter.executeUpdateQuery(query);
if (nbRows > 0) {
return true;
}
} catch (Exception e) {
}
return false;
}
/**
* set storage available
*
* @param idStorage
* @return boolean
*/
public boolean setStorageAvailable(int idStorage) {
String query;
int nbRows;
query = "UPDATE `" + DataBaseElements.STORAGE + "` SET ";
query += "`" + DataBaseElements.STORAGE_AVAILABLE + "` = '" + 1 + "' ";
query += "WHERE `" + DataBaseElements.STORAGE_ID + "` = '" + idStorage + "';";
try {
DbConnection adapter = DbConnection.getDbConnection();
nbRows = adapter.executeUpdateQuery(query);
if (nbRows > 0) {
return true;
}
} catch (Exception e) {
}
return false;
}
@Override
public Object populateModel(ResultSet row) throws SQLException {
Storage obj = new Storage();
if (this.hasColumn(DataBaseElements.STORAGE_ID, row)) {
obj.setId(row.getInt(DataBaseElements.STORAGE_ID));
}
if (this.hasColumn(DataBaseElements.STORAGE_IDSTOCK, row)) {
obj.setIdStock(row.getInt(DataBaseElements.STORAGE_IDSTOCK));
}
if (this.hasColumn(DataBaseElements.STORAGE_IDSTORAGETYPE, row)) {
obj.setIdStorageType(row.getInt(DataBaseElements.STORAGE_IDSTORAGETYPE));
}
if (this.hasColumn("numberOfStorages", row)) {
obj.setNumberOfStorages(row.getInt("numberOfStorages"));
}
if (this.hasColumn(DataBaseElements.STORAGE_AVAILABLE, row)) {
obj.setAvailable(row.getBoolean(DataBaseElements.STORAGE_AVAILABLE));
}
return obj;
}
@Override
Object getEmptyModel() {
return new Storage();
}
}