package fr.pandacube.java.util.db2.sql_tools;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import fr.pandacube.java.util.Log;
import fr.pandacube.java.util.db2.SQLContact;
import fr.pandacube.java.util.db2.SQLForumCategorie;
import fr.pandacube.java.util.db2.SQLForumForum;
import fr.pandacube.java.util.db2.SQLForumPost;
import fr.pandacube.java.util.db2.SQLForumThread;
import fr.pandacube.java.util.db2.SQLLoginHistory;
import fr.pandacube.java.util.db2.SQLMPGroup;
import fr.pandacube.java.util.db2.SQLMPGroupUser;
import fr.pandacube.java.util.db2.SQLMPMessage;
import fr.pandacube.java.util.db2.SQLModoHistory;
import fr.pandacube.java.util.db2.SQLOnlineshopHistory;
import fr.pandacube.java.util.db2.SQLPlayer;
import fr.pandacube.java.util.db2.SQLPlayerIgnore;
import fr.pandacube.java.util.db2.SQLShopStock;
import fr.pandacube.java.util.db2.SQLStaffTicket;
import fr.pandacube.java.util.db2.SQLStaticPages;
import fr.pandacube.java.util.db2.SQLUUIDPlayer;
import fr.pandacube.java.util.db2.sql_tools.SQLWhereChain.SQLBoolOp;
import fr.pandacube.java.util.db2.sql_tools.SQLWhereComp.SQLComparator;
import javafx.util.Pair;
/**
* ORM = Object-Relational Mapping
* @author Marc Baloup
*
*/
public final class ORM {
private static List> tables = new ArrayList<>();
private static DBConnection connection;
public static DBConnection getConnection() {
return connection;
}
public synchronized static void init(DBConnection conn) {
connection = conn;
/*
* Les tables à initialiser
*
* utile des les initialiser ici, car on peut tout de suite déceler les bugs ou erreurs dans la déclaration des SQLFields
*/
try {
initTable(SQLContact.class);
initTable(SQLForumCategorie.class);
initTable(SQLForumForum.class);
initTable(SQLForumPost.class);
initTable(SQLForumThread.class);
initTable(SQLLoginHistory.class);
initTable(SQLModoHistory.class);
initTable(SQLMPGroup.class);
initTable(SQLMPGroupUser.class);
initTable(SQLMPMessage.class);
initTable(SQLOnlineshopHistory.class);
initTable(SQLPlayer.class);
initTable(SQLPlayerIgnore.class);
initTable(SQLShopStock.class);
initTable(SQLStaffTicket.class);
initTable(SQLStaticPages.class);
initTable(SQLUUIDPlayer.class);
} catch (ORMInitTableException e) {
Log.getLogger().log(Level.SEVERE, "Erreur d'initialisation d'une table dans l'ORM", e);
}
}
/* package */ static void initTable(Class elemClass) throws ORMInitTableException {
if (tables.contains(elemClass))
return;
try {
T instance = elemClass.newInstance();
String tableName = instance.tableName();
if (!tableExist(tableName))
createTable(instance);
tables.add(elemClass);
} catch (Exception e) {
throw new ORMInitTableException(elemClass, e);
}
}
private static void createTable(T elem) throws SQLException {
String sql = "CREATE TABLE IF NOT EXISTS "+elem.tableName()+" (";
List