mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
* no effective code change: add missing @override in "io.ebean.*" package * no effective code change: add missing @override in "io.ebeaninternal.api.*" package * no effective code change: add missing @override in "io.ebeaninternal.server.*" package * no effective code change: add missing @override in "io.ebeaninternal.util.*" package * no effective code change: add missing @override in "io.ebeanservice.*" package * no effective code change: add missing @override in "src/test/java/"
179 lines
4.2 KiB
Java
179 lines
4.2 KiB
Java
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.
|
|
* <p>
|
|
* This gets converted into a immutable TableJoin when complete.
|
|
* </p>
|
|
*/
|
|
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<DeployTableJoinColumn> 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
|
|
* <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.
|
|
*/
|
|
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<JoinColumn> 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);
|
|
}
|
|
}
|
|
}
|