package io.ebeaninternal.server.deploy.meta;

import io.ebeaninternal.server.deploy.BeanTable;
import io.ebeaninternal.server.deploy.InheritInfo;
import io.ebeaninternal.server.query.SqlJoinType;

import javax.persistence.JoinColumn;
import java.util.ArrayList;
import java.util.Set;

Represents a join to another table during deployment phase.

This gets converted into a immutable TableJoin when complete.

/** * Represents a join to another table during deployment phase. * <p> * This gets converted into a immutable TableJoin when complete. * </p> */
public class DeployTableJoin {
The joined table.
/** * The joined table. */
private String table;
The type of join. LEFT JOIN etc.
/** * The type of join. LEFT JOIN etc. */
private SqlJoinType type = SqlJoinType.INNER;
The list of join column pairs. Used to generate the on clause.
/** * The list of join column pairs. Used to generate the on clause. */
private ArrayList<DeployTableJoinColumn> columns = new ArrayList<>(4); private InheritInfo inheritInfo;
Create a DeployTableJoin.
/** * Create a DeployTableJoin. */
public DeployTableJoin() { } @Override public String toString() { return type + " " + table + " " + columns; }
Return true if the JoinOnPair have been set.
/** * Return true if the JoinOnPair have been set. */
public boolean hasJoinColumns() { return !columns.isEmpty(); }
Copy all the columns to this join potentially reversing the columns.
/** * Copy all the columns to this join potentially reversing the columns. */
public void setColumns(DeployTableJoinColumn[] cols, boolean reverse) { columns = new ArrayList<>(); for (DeployTableJoinColumn col : cols) { addJoinColumn(col.copy(reverse)); } }
Add a join pair
/** * Add a join pair */
public void addJoinColumn(DeployTableJoinColumn pair) { columns.add(pair); }
Add a JoinColumn

The order is generally true for OneToMany and false for ManyToOne relationships.

/** * Add a JoinColumn * <p> * The order is generally true for OneToMany and false for ManyToOne relationships. * </p> */
public void addJoinColumn(boolean order, JoinColumn jc, BeanTable beanTable) { if (!"".equals(jc.table())) { setTable(jc.table()); } if (!"".equals(jc.name()) || !"".equals(jc.referencedColumnName())) { // only add the join column details when name or referencedColumnName is specified addJoinColumn(new DeployTableJoinColumn(order, jc, beanTable)); } }
Add a JoinColumn array.
/** * Add a JoinColumn array. */
public void addJoinColumn(boolean order, JoinColumn[] jcArray, BeanTable beanTable) { for (JoinColumn aJcArray : jcArray) { addJoinColumn(order, aJcArray, beanTable); } }
Add a JoinColumn set.
/** * Add a JoinColumn set. */
public void addJoinColumn(boolean order, Set<JoinColumn> joinColumns, BeanTable beanTable) { for (JoinColumn joinColumn : joinColumns) { addJoinColumn(order, joinColumn, beanTable); } }
Return the join columns.
/** * Return the join columns. */
public DeployTableJoinColumn[] columns() { return columns.toArray(new DeployTableJoinColumn[columns.size()]); }
Return the joined table name.
/** * Return the joined table name. */
public String getTable() { return table; }
set the joined table name.
/** * set the joined table name. */
public void setTable(String table) { this.table = table; }
Return the type of join. LEFT OUTER JOIN etc.
/** * Return the type of join. LEFT OUTER JOIN etc. */
public SqlJoinType getType() { return type; } public void setType(SqlJoinType type) { this.type = type; } public DeployTableJoin createInverse(String tableName) { DeployTableJoin inverse = new DeployTableJoin(); return copyInternal(inverse, true, tableName, true); } public void copyTo(DeployTableJoin destJoin, boolean reverse, String tableName) { copyInternal(destJoin, reverse, tableName, true); } public void copyWithoutType(DeployTableJoin destJoin, boolean reverse, String tableName) { copyInternal(destJoin, reverse, tableName, false); } private DeployTableJoin copyInternal(DeployTableJoin destJoin, boolean reverse, String tableName, boolean withType) { destJoin.setTable(tableName); if (withType) { destJoin.setType(type); } destJoin.setColumns(columns(), reverse); return destJoin; } public InheritInfo getInheritInfo() { return inheritInfo; } public void setInheritInfo(InheritInfo inheritInfo) { this.inheritInfo = inheritInfo; }
Change the join column (based on imported primary key match on property name etc).
/** * Change the join column (based on imported primary key match on property name etc). */
void setLocalColumn(String dbColumn) { if (columns.size() == 1) { columns.get(0).setLocalDbColumn(dbColumn); } } }