package fr.pandacube.java.util.db2.sql_tools; import fr.pandacube.java.util.Log; public class SQLFKField extends SQLField { private SQLField sqlForeignKeyField; private Class sqlForeignKeyElement; public SQLFKField(String n, SQLType t, boolean nul, Class fkEl, SQLField fkF) { super(n, t, nul); construct(fkEl, fkF); } public SQLFKField(String n, SQLType t, boolean nul, T deflt, Class fkEl, SQLField fkF) { super(n, t, nul, deflt); construct(fkEl, fkF); } public static 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, fkEl, ORM.getSQLIdField(fkEl)); } catch (ORMInitTableException e) { Log.severe("Can't create Foreign key Field called '"+n+"'", e); return null; } } public static 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, fkEl, ORM.getSQLIdField(fkEl)); } catch (ORMInitTableException e) { Log.severe("Can't create Foreign key Field called '"+n+"'", e); return null; } } private void construct(Class fkEl, SQLField fkF) { if (fkEl == null) throw new IllegalArgumentException("foreignKeyElement can't be null"); if (fkF == null) throw new IllegalArgumentException("foreignKeyField can't be null"); 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; sqlForeignKeyElement = fkEl; } public SQLField getForeignField() { return sqlForeignKeyField; } public Class getForeignElementClass() { return sqlForeignKeyElement; } }