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);
}
}
}