io.ebeaninternal.server.deploy.meta.DeployTableJoin Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ebean Show documentation
Show all versions of ebean Show documentation
composite of common runtime dependencies for all platforms
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.
*
*/
public class DeployTableJoin {
/**
* The joined table.
*/
private String table;
/**
* The type of join. LEFT JOIN etc.
*/
private SqlJoinType type = SqlJoinType.INNER;
/**
* The list of join column pairs. Used to generate the on clause.
*/
private ArrayList columns = new ArrayList<>(4);
private InheritInfo inheritInfo;
/**
* Create a DeployTableJoin.
*/
public DeployTableJoin() {
}
@Override
public String toString() {
return type + " " + table + " " + columns;
}
/**
* 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.
*/
public void setColumns(DeployTableJoinColumn[] cols, boolean reverse) {
columns = new ArrayList<>();
for (DeployTableJoinColumn col : cols) {
addJoinColumn(col.copy(reverse));
}
}
/**
* 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.
*
*/
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.
*/
public void addJoinColumn(boolean order, JoinColumn[] jcArray, BeanTable beanTable) {
for (JoinColumn aJcArray : jcArray) {
addJoinColumn(order, aJcArray, beanTable);
}
}
/**
* Add a JoinColumn set.
*/
public void addJoinColumn(boolean order, Set joinColumns, BeanTable beanTable) {
for (JoinColumn joinColumn : joinColumns) {
addJoinColumn(order, joinColumn, beanTable);
}
}
/**
* Return the join columns.
*/
public DeployTableJoinColumn[] columns() {
return columns.toArray(new DeployTableJoinColumn[columns.size()]);
}
/**
* Return the joined table name.
*/
public String getTable() {
return table;
}
/**
* set the joined table name.
*/
public void setTable(String table) {
this.table = table;
}
/**
* 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).
*/
void setLocalColumn(String dbColumn) {
if (columns.size() == 1) {
columns.get(0).setLocalDbColumn(dbColumn);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy