package features.domain; import java.util.ArrayList; import java.util.List; import joist.domain.DomainObject; import joist.domain.orm.queries.Alias; import joist.domain.orm.queries.JoinClause; import joist.domain.orm.queries.columns.AliasColumn; import joist.domain.orm.queries.columns.ForeignKeyAliasColumn; import joist.domain.orm.queries.columns.IdAliasColumn; import joist.domain.orm.queries.columns.LongAliasColumn; import joist.domain.orm.queries.columns.StringAliasColumn; public class InheritanceBMiddleAlias extends Alias<InheritanceBMiddle> { private final List<AliasColumn<InheritanceBMiddle, ?, ?>> columns = new ArrayList<AliasColumn<InheritanceBMiddle, ?, ?>>(); private final IdAliasColumn<InheritanceBMiddle> subClassId = new IdAliasColumn<InheritanceBMiddle>(this, "id", null); public final StringAliasColumn<InheritanceBMiddle> middleName = new StringAliasColumn<InheritanceBMiddle>(this, "middle_name", InheritanceBMiddleCodegen.Shims.middleName); private final InheritanceBRootAlias baseAlias; public final IdAliasColumn<InheritanceBRoot> id; public final StringAliasColumn<InheritanceBRoot> name; public final LongAliasColumn<InheritanceBRoot> version; public InheritanceBMiddleAlias() { this("ibm0", null, true); } public InheritanceBMiddleAlias(String alias) { this(alias, null, true); } public InheritanceBMiddleAlias(String alias, InheritanceBRootAlias baseAlias, boolean addSubClasses) { super(InheritanceBMiddle.class, "inheritance_b_middle", alias); this.baseAlias = (baseAlias != null) ? baseAlias : new InheritanceBRootAlias(alias + "_b", null, false); InheritanceBMiddleAlias inheritanceBMiddle = this; if (addSubClasses) { InheritanceBBottomAlias inheritanceBBottom = new InheritanceBBottomAlias(alias + "_0", inheritanceBMiddle, false); this.addSubClassAlias(inheritanceBBottom); } this.columns.add(this.middleName); this.id = this.baseAlias.id; this.name = this.baseAlias.name; this.version = this.baseAlias.version; } public List<AliasColumn<InheritanceBMiddle, ?, ?>> getColumns() { return this.columns; } public IdAliasColumn<InheritanceBRoot> getIdColumn() { return this.id; } public LongAliasColumn<InheritanceBRoot> getVersionColumn() { return this.version; } public IdAliasColumn<InheritanceBMiddle> getSubClassIdColumn() { return this.subClassId; } public Alias<InheritanceBRoot> getBaseClassAlias() { return this.baseAlias; } public int getOrder() { return 10; } public <T extends DomainObject> JoinClause<T, InheritanceBMiddle> on(ForeignKeyAliasColumn<T, InheritanceBMiddle> on) { return new JoinClause<T, InheritanceBMiddle>("INNER JOIN", this, on); } public <T extends DomainObject> JoinClause<T, InheritanceBMiddle> leftOn(ForeignKeyAliasColumn<T, InheritanceBMiddle> on) { return new JoinClause<T, InheritanceBMiddle>("LEFT OUTER JOIN", this, on); } }