package fr.pandacube.java.util.db.sql_tools; import fr.pandacube.java.util.Log; public class SQLFKField, T, F extends SQLElement> extends SQLField { private SQLField sqlForeignKeyField; private Class sqlForeignKeyElemClass; public SQLFKField(String n, SQLType t, boolean nul, SQLField fkF) { super(n, t, nul); construct(fkF); } public SQLFKField(String n, SQLType t, boolean nul, T deflt, SQLField fkF) { super(n, t, nul, deflt); construct(fkF); } public static , F extends SQLElement> SQLFKField idFK(String n, SQLType t, boolean nul, Class fkEl) { if (fkEl == null) throw new IllegalArgumentException("foreignKeyElement can't be null"); try { return new SQLFKField<>(n, t, nul, ORM.getSQLIdField(fkEl)); } catch (ORMInitTableException e) { Log.severe("Can't create Foreign key Field called '" + n + "'", e); return null; } } public static , F extends SQLElement> SQLFKField idFKField(String n, SQLType t, boolean nul, Integer deflt, Class fkEl) { if (fkEl == null) throw new IllegalArgumentException("foreignKeyElement can't be null"); try { return new SQLFKField<>(n, t, nul, deflt, ORM.getSQLIdField(fkEl)); } catch (ORMInitTableException e) { Log.severe("Can't create Foreign key Field called '" + n + "'", e); return null; } } private void construct(SQLField fkF) { if (fkF == null) throw new IllegalArgumentException("foreignKeyField can't be null"); Class fkEl = fkF.getSQLElementType(); try { ORM.initTable(fkEl); } catch (ORMInitTableException e) { Log.severe(e); return; } if (!fkEl.equals(fkF.getSQLElementType())) throw new IllegalArgumentException("foreignKeyField must be from supplied foreignKeyElement"); if (!type.equals(fkF.type)) throw new IllegalArgumentException("foreignKeyField and current Field must have the same SQLType"); sqlForeignKeyField = fkF; sqlForeignKeyElemClass = fkEl; } public SQLField getForeignField() { return sqlForeignKeyField; } public Class getForeignElementClass() { return sqlForeignKeyElemClass; } }